From 367fc3b66934cd92428e89e99e6998aa780a7b3a Mon Sep 17 00:00:00 2001 From: Guy Arbitman Date: Wed, 18 Jan 2023 08:52:15 +0200 Subject: [PATCH] Fixed http2 parsing several bugs (#15124) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [fargate] Make hostname resolution more reliable (#14746) * [config/environment] Check AWS_EXECUTION_ENV in Fargate detection * [util/fargate] Rely on features for ECS Fargate detection * [fargate/detection] Rely on features to detect EKS * [trace-agent/config] Call fargate.GetOrchestrator after loading config * add unit-test for trace-agent config on fargate * Add release note * [cmd/trace-agent/config] Fix TestFargateConfig in macOS Co-authored-by: Cedric Lamoriniere * 7.41.0 CHANGELOG (#14675) (#14745) * Updated Python to 3.8.16 * CWS: sync BTFhub constants (#14804) Co-authored-by: paulcacheux * [CSPM] respect verbose on compliance check cli cmd (#14750) * CODEOWNERS: splitting files so USM can own its own files (#14789) * config: test: Removed duplicated test (#14705) * Running dockers in the kitchen test (#14589) * ci: kitchen: Allow running dockers in kitchen test, and extend the filesystem The PR introduce a way to run external dockers in the kitchen tests, without pulling them As we cannot authenticate in the kitchen machines to dockerhub, we had to work around that and we are pulling and saving the dockers in gitlab, uploading them to the remote machine using kitchen, and then loading those dockers on the remote machine so they are available for usage. In the PR we added steps to install docker and docker compose on the kitchen machines. The PR introduce an example test that runs dockers. During the PR we faced the problem of "no space left on the device", to solve those errors we have to extend the filesystem of the remote machines. * Fixed cr comments * Debugging the artifacts * Debugging the artifacts * Debugging the artifacts * Debugging the artifacts * revert artifacts * Giving another try to dependencies * Fixed path * Fixed CR comment * [CWS] Add tests for activity dump processes content (#14708) * [CWS] Add two checks to avoid adding nodes with abnormal paths in activity dumps (#14698) * [gitlab] Repack macOS JUnit tarball to include correct name and job URL (#14793) * Bump golang.org/x/tools from 0.3.0 to 0.4.0 in /pkg/security/secl (#14710) * Bump golang.org/x/tools from 0.3.0 to 0.4.0 in /pkg/security/secl Bumps [golang.org/x/tools](https://github.com/golang/tools) from 0.3.0 to 0.4.0. - [Release notes](https://github.com/golang/tools/releases) - [Commits](https://github.com/golang/tools/compare/v0.3.0...v0.4.0) --- updated-dependencies: - dependency-name: golang.org/x/tools dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Auto-generate go.sum and LICENSE-3rdparty.csv changes Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: paulcacheux * [single-machine-performance] Introduce regression detector jobs (#14528) * [WIP][single-machine-performance] Introduce regression detector jobs This PR intends to introduce the Single Machine Performance regression detector into Agent CI. This builds on work done in #14477 and is peer to #14438. The Regression Detector is a CI tool that determines if a changed introduced into a project modifies project performance in a way that is more than just random chance with some statistical guarantee. The Regression Detector is not a microbenchmarking tool and must operate on the whole Agent. This PR introduces only 'throughput' as an optmization goal -- how quickly can the Regression Detector produce load into the Agent -- but other goals are possible. Regressions are checked per-experiment, please see `tests/regression` for details about how to define an experiment. The Regression Detector runs today in vectordotdev/vector project and is influential in keeping that project's performance consistently high. REF SMP-208 Signed-off-by: Brian L. Troutwine * Use static smp binary Signed-off-by: Brian L. Troutwine * different base sha calculation Signed-off-by: Brian L. Troutwine * Try to clone the whole repo Signed-off-by: Brian L. Troutwine * baseline sha computation redux Signed-off-by: Brian L. Troutwine * specify region explicitly Signed-off-by: Brian L. Troutwine * use smp 0.6.3-rc3 Signed-off-by: Brian L. Troutwine * Wait for job to complete, output report, status Signed-off-by: Brian L. Troutwine * update job name Signed-off-by: Brian L. Troutwine * Update smp, lading Signed-off-by: Brian L. Troutwine * remove \ Signed-off-by: Brian L. Troutwine * Use smp 0.6.4 Signed-off-by: Brian L. Troutwine * diagnose why file_to_blackhole fails Signed-off-by: Brian L. Troutwine * just one test for now Signed-off-by: Brian L. Troutwine * set log level for smp Signed-off-by: Brian L. Troutwine * tweaks Signed-off-by: Brian L. Troutwine * debug Signed-off-by: Brian L. Troutwine * actually add datadog.yaml et all, .gitignore issue? Signed-off-by: Brian L. Troutwine * tidy up cases to initial trio, less file_to_blackhole which needs work Signed-off-by: Brian L. Troutwine * update smp, config tweak Signed-off-by: Brian L. Troutwine * override .gitignore Signed-off-by: Brian L. Troutwine * Apply @GeorgeHahn's patches Signed-off-by: Brian L. Troutwine * enable other tests, tweak OTEL Signed-off-by: Brian L. Troutwine * more fiddling Signed-off-by: Brian L. Troutwine * tweaks Signed-off-by: Brian L. Troutwine * use markdown output report Signed-off-by: Brian L. Troutwine * use OTEL http Signed-off-by: Brian L. Troutwine * use smp 0.6.5-rc1 Signed-off-by: Brian L. Troutwine * debug -> info Signed-off-by: Brian L. Troutwine * preserve output Signed-off-by: Brian L. Troutwine * remove stray tick Signed-off-by: Brian L. Troutwine * Update test/regression/README.md Co-authored-by: Kylian Serrania * Update test/regression/README.md Co-authored-by: Kylian Serrania Signed-off-by: Brian L. Troutwine Co-authored-by: Kylian Serrania * Split bundle params (#14702) * Split BundleParams into ConfigParams and LogParams * Move ConfigParams and LogParams to their own file * Move WithXXX functions from BundleParams to config.Params * Use constructors for config.Params * Fix comp/core/log/params_test.go * Make fields for log.Params unexported * Make config.Params fields not exported. * Fix package names in the security agent. * Explain why `fx.Provide` is needed in bundle.go * Remove configLoadSecurityAgent from NewSecurityAgentParams * Add NewAgentParamsWithSecrets and NewAgentParamsWithoutSecrets * CWS: sync BTFhub constants (#14815) Co-authored-by: paulcacheux * Check the package exists before creating package. Restore install script after packaging. (#14777) * change networks slack channel (#14819) * fix close_time value display in INFO log (#14744) * Updates prometheusScrape to support tag_by_endpoint and collect_counters_with_distributions (#14805) * Updates prometheusScrape to support tag_by_endpoint * Adds release note * Cleans release note * Also adds support for `collect_counters_with_distributions` * Updates release note to include the second added parameter * Updates release note based on suggestion by @clamoriniere * Migrating flare to a component (#14234) Migrating flare to a component This adds a 'flare' component and rework the flare package to be compatible with fx app and non-fx app. The flare generation now happens through a FlareBuilder which handles all the logic of adding data to a flare. This FlareBuilder can be used directly (by the flare package) or be received by each component when they register a flare provider. Migration workflow for each component would be to move their dedicated code from the flare package to a flare provider. Note: Until `cmd/systray/` is migrated to fx we can't start using the flare component from other flare (on windows the systray can create flare on it's own). * Add netlink process monitor (#14706) This monitor will read the netlink socket process events queue and run it on parallel worker (map to n cpu cores) ProcessMonitor require root or CAP_NET_ADMIN capabilities Aim to Subscribe() to process event Exec, Exit With or without metadata process Any, Name, MAPfile ProcessMonitor will subscribe to the netlink process events like Exec, Exit and call the subscribed callbacks Initialize() will scan the current process and will call the subscribed callbacks callbacks will be executed in parallel via a pool of goroutines (runtime.NumCPU()) callbackRunner is callbacks queue. The queue size is set by processMonitorMaxEvents Multiple team can use the same ProcessMonitor, the callers need to guarantee calling each Initialize() Stop() one single time this maintain an internal reference counter Netlink process subscription, socket connection is allowed only by one PID * protocols: refactor tests to allow pre-post setups (#14817) * protocols: refactor tests to allow pre-post setups * Added temporary nolint for skippers * Fixed bugs * Escape path in get-acl command (#14818) * ci: Add manual benchmark step for trace-agent (#14466) * pkg/trace/config: Lower max tracer payload to 25 MB to better align with backend limits (#14782) * Revert #14367 and use nano timestamp instead (#14825) * Revert "Replace timestamp by increasing id to avoid configVersion matching different config changed in the same second" This reverts commit f8e097de2aa3322670fcc6a6c8cfc5c1ed9d6239. * Revert #14367 and use nano timestamp instead * Disable by default remote-tagger in clc-runner mode (#14821) * fix gofmt -s for pkg/collector/collector_demux_test.go (#14808) * Improve debug logging in cloud foundry container tagger (#14803) * Add logging around container retries * Add trace log * Change to debug and add release note * Delete Improve-container-tagger-logging-e48b0fffbe8563d0.yaml * Add timestamp id to events * Make id more specific, use container String method * Just print class * Update pkg/cloudfoundry/containertagger/container_tagger.go Co-authored-by: NouemanKHAL * Address PR review * Create event ID Co-authored-by: NouemanKHAL * [Serverless] Merge serverless/main to main. (#14826) * [Serverless] change account (#14755) * Aj/buffer cold start span data (#14664) * wip dirty commit - trace being created but not flushed properly. No further traces appearing WIP: more debugging. StopChan properly set up feat: Starting coldstart creator as a daemon, and recieving data from two channels. Todo: spec feat: Update specs to write to channels feat: Merge conflicts resolved for tests feat: Use smaller methods to handle locking fix: pass coldstartSpanId to sls-init main feat: Remove default feat: Use Millisecond as Second is far longer than necessary feat: No need to export ColdStartSpanId fix: update units feat: Directionality for lambdaSpanChan as well as for initDurationChan fix: No need for the nil check, I need to stop javascripting my go feat: ints * feat: rebase missing changes from merge commits * feat: update ints after moving accounts * Empty commit to trigger ci * [Serverless] Fix flaky integration tests and make them more easily maintainable. (#14783) * Retry serverless integration test failures automatically. (#14801) * [Serverless] Allow some keys to be option in serverless integration tests. (#14827) * Ability to remove items from the json. * Remove items from snapshot. Co-authored-by: Maxime David Co-authored-by: AJ Stuyvenberg * Allow Regression Detector pipeline to fail (#14828) At present there's a race condition in the CI pipeline with regard to Regression Detector: we rely on an artifact to be created by main pipeline merge but have no way of making a hard dependency on that artifact. If that artifact is not present then the Regression Detection job will be submitted and then immediately fail. Absent a solution we allow the Regression Detector job to fail, unfortunately making any actual regressions caught but also not contributing to alert blindness in the meanwhile. Signed-off-by: Brian L. Troutwine Signed-off-by: Brian L. Troutwine * [process-agent] Remove unused properties from AgentConfig (#14842) * [process-agent] Remove unused properties from AgentConfig * Fix tests * 7.41.1 changelog (#14822) (#14824) * Add do-not-merge github action (#14843) * [CWS] remove useless resolver function (#14792) * [kitchen] Work around bundler and ruby version issue in verifier (#14851) Modifies the script used to run kitchen tests to run the verify phase twice, and adds a pre_verify lifecycle hook to install the dependency needed for system-probe kitchen tests. Works around an issue (version mismatch between ruby and bundler) that started happening after the release of version 2.4.0 of bundler. As long as this workaround is needed, we can't have Gemfiles in test suites, and instead need to manually install gems whenever needed. * Add the 'test' build tag to the 'unit-tests' flavor This tag is needed to run unit-test but was not printed by 'inv print-default-build-tags -b unit-tests'. When running tests from a IDE or other we need the correct list of tags to be returned. * flare: Added /opt/datadog-agent directory permissions to permissions.log (#14848) * flare: Added /opt/datadog-agent directory permissions to permissions.log system-probe internal files (sysprobe.socket, runtime compilation source files, prebuilt version, etc.) are located in /opt/datadog-agent when getting a flare, we cannot know those files permissions (and if they exist). * Take directories from configuration * Fixed cr comments * Fixed cr comments * Fixed cr comments * Update comp/core/flare/helpers/helpers.go Co-authored-by: maxime mouial * [USM] protocol classification: add RabbitMQ classification (#14734) * wip * Fixed * added support for amqp without tests * added UT's for consumer and sender for rabbitmq * removed redundant client and server * added support to classify also protocol header of amqp * removed redundant function * test * fixed most of the cr notes * fixed all the cr notes * add ut * fixed licence issue * fixed ci issue * fixed event common protocol type number * Revert update of github.com/DataDog/datadog-operator * fixed all cr notes * merged main * fixed a cr note * reverted datadog-operation * update licence * fixed ci issue * merged main and updated ut * fixed cr note * added some UT's and support the latest classification uts update * refactor the uts * Added debug log * Added debug log 2 * Added debug log 3 * Added pattern scanner Co-authored-by: Guy Arbitman * Handle environment variables without an equal sign (#14806) * usm: protocols: Refactored server creation (#14869) * Removed example docker tests (#14852) * [CWS][SEC-5573] add custom CWS product (#14748) * [CWS] add custom CWS product * Add a debouncer to limit reloads * Update URL regexp to detect for Datadog's URL In the past we use to edit the regexp everytime Datadog would open a new location. This commit allow the agent to detect for all present and future locations as long as they follow the format of 2 letters + 1 digit. Example: 'us3.datadoghq.com'. * system-probe: tasks: Save all dockers from docker-compose files in the protocols dir (#14873) * system-probe: tasks: Save all dockers from docker-compose files in the protocols dir * Fixed lint * [process-agent] Move data scrubber and disallow list from pkg/process/config (#14863) - Move these two fields in preparation for removal of pkg/process/config package. - Use inclusive naming where possible - will rename the config param in the future. - Update imports in pkg/security using the DataScrubber type. * add `integration_profiling` config option (#14847) Add a new option to enable profiling of python integrations. It's used only within the python integrations. See https://github.com/DataDog/integrations-core/pull/13576. * Fix flaky TestKSMCheckInitTags unit-test (#14832) * Fix flaky TestKSMCheckInitTags unit-test * improve config.GetConfiguredTags testability * update GetConfiguredTags function description * Deleting Security Agent for Windows resources (#14833) * deleting windows resources * removing windows operations for security-agent.build task * removing secagent for windows resources in omnibus, addressing python lint * [process-agent] Remove orchestrator config from AgentConfig (#14867) * [process-agent] Move data scrubber and disallow list from pkg/process/config - Move these two fields in preparation for removal of pkg/process/config package. - Use inclusive naming where possible - will rename the config param in the future. - Update imports in pkg/security using the DataScrubber type. * [process-agent] Remove orchestrator config from AgentConfig - Further decouple config management in prep for removal of pkg/process/config. - Remove orchestrator config, push it into the pod check and collector structs. * Address review feedback * [process-agent] Display system probe process module status in process agent info commands (#14880) Updates the process agent status information displayed by the datadog-agent status, process-agent status and process-agent --info commands to display whether or not the system probe's process module is enabled * tooling: Add invoke vscode devcontainer cmd (#14031) * Add invoke vscode envcontainer cmd * Update agent_dev_env.md * fix typo in documentation * adding err to exit SecAgent. fixes hanging if there's no API key (#14856) * Replace hardcoded /proc path with config field (#14773) Use the config field instead of hardcoding /proc. The config field should be automatically detected to either /proc or /host/proc inside containers. * usm: protocols: Added redis classification (#14886) * usm: protocols: Added redis classification * Fixed CR comment * Fixed CR comment * Fixed warning on centos * [CWS] extract custom events package (#14230) * [CWS] extract custom events package * [CWS] extract selftest custom event * [CWS] allow to specify a rate per rule through config * post rebase * add lint exception * use the good sender * [process-agent] Remove check intervals from pkg/process/config (#14878) * [process-agent] Remove check intervals from pkg/process/config - Remove check interval management from pkg/process/config package - Never store intervals, just use config settings - Generalize check for process and process RT check intervals * Fix MacOS tests * Address review feedback from @just-chillin * flare: Ignore system probe dirs if they are empty (#14893) * [CWS] increase exit event test timings (#14813) * [CWS] fix rule id not sent for custom event (#14897) * Adding return statment in GUI when an error is encountered * [CI] Artifactory for Python (#14473) * Introduce new E2E tests based on test-infra-definitions (#13643) * manual check tracing uses new exhaustive tracing config option (#14892) * manual check tracing uses new exhaustive tracing config option Following up to https://github.com/DataDog/integrations-core/pull/13618, we now need to set both `integration_tracing` and `integration_tracing_exhaustive` config options to enable exhaustive tracing of integrations. When manually running a check the increased overhead of exhaustive tracing (tracing all check methods) is acceptable. When continuous integration tracing is desired only the `integration_tracing` option should be set in order to keep the overhead minimal. * update core agent check command * fix sort order * pkg/trace/traceutil: Add fast-path for NormalizeTags to reduce cpu usage (#14881) * usm: remove the scenario of nil subprograms (#14909) * usm: remove the scenario of nil subprograms * Fixed CR comments * Import order * Fixed CR comments * Bump datadog-api-client from 2.6.0 to 2.7.0 in /test/e2e/cws-tests (#14914) Bumps [datadog-api-client](https://github.com/DataDog/datadog-api-client-python) from 2.6.0 to 2.7.0. - [Release notes](https://github.com/DataDog/datadog-api-client-python/releases) - [Changelog](https://github.com/DataDog/datadog-api-client-python/blob/master/CHANGELOG.md) - [Commits](https://github.com/DataDog/datadog-api-client-python/compare/2.6.0...2.7.0) --- updated-dependencies: - dependency-name: datadog-api-client dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * usm: http2: improved functions (#14917) * update profiling endpoint when the fips is enabled to avoid 404 (#14807) * fix(fips): update profiling endpoint when the fips is enabled to avoid 404 Signed-off-by: Nicolas Guerguadj * pkg/clusteragent/admission: introduce deployment patcher (#14500) * [CWS] avoid using readonly map for eBPF test prog (#14780) * [e2e] add codeowners for new e2e tests (#14865) * DogstatsD component improvements (#14839) * Inject defaultLogFile * Move main.go inside command/command.go * Move start command to subcommands/start * Dogstatsd uses pkg/cli/subcommands/version/command.go for version command * Use similar code for cfgpath compare to datadog-agent * eval.Opts holds MacroStore and VariableStore (#14874) * [fake-datadog] add docker compose (#14902) * [fake-datadog] add docker compose * [fake-datadog] add docker instructions * usm: mongo: Added mongo classification (#14809) * usm: mongo: Added mongo classification * Fixed CR comment * Fixed CR comment * Fixed CR comment * Fixed CR comment * Update agent_dev_env.md (#14887) Co-authored-by: Kaylyn * [CWS][SEC-6508] use tail call limit to increase the number of args/envs (#14796) * use tail call limit to increase the number of args/envs * do not validate process overflow events to avoid srubbing argv and timeout * [notifications] Catch all image pull errors as infra failures (#14926) Updates the regex to match infra failure logs when pulling images to include more patterns. The previous pattern didn't catch the following line: WARNING: Failed to pull image with policy "always": context deadline exceeded (manager.go:203:7197s) * Do not install the integrations downloader for python 2 (#14920) * usm: classification: Shrink classification buffer to 24 bytes (#14925) * config: usm: Added USM to system-probe.yaml.example file (#14908) * setupConfig consumes 1 param instead of many, adding to SecAgent constructor (#14884) * changing func signature of setupConfig * setting security agent config file instead of merging because Viper only supports 1 config file per viper instance * Revert "setting security agent config file instead of merging because Viper only supports 1 config file per viper instance" This reverts commit 8e6736d5025db79e5c1f552a983f9050f86a2c5c. * MergeConfigurationFiles is just for SecAgent * undo moving sys probe and secagent merge fix return of merge * rename configMissingOK field to baseConfigMissingOK * setting secagent config path and config load secrets params * adding secagent bundle param test * reverting renaming configMissingOK to baseConfigMissingOK * params.configMissingOK should be false * fixing test post bundle breaking into config and log components * config params test copywrite info * [e2e/ndm] add snmp test environment (#14768) * [e2e/ndm] add snmpsim data folder * [new e2e test] update test-infra-definition version * [e2e] fix aws signature * [e2e/ndm] add snmp test environment * [e2e/ndm] simpliofy err return code * [e2e/ndm] remove unused close function * [e2e/ndm] actually parse flags * [e2e] ndm: fix destroy * [e2e/ndm] add copyright header * [CWS] extract probe from event and activity dump manager (#14515) * [CWS] extract TC resolver into own resolver * no probe in event * include tcresolver in usual resolvers * fix test * apply review suggestion * apply review suggestion v2 * [corechecks/snmp] Add IP Addresses to NDM Metadata interfaces (IPv4) (#14823) * {Dockerfiles/agent,trace-agent/config}: disable apm `max_memory` and `max_cpu_percent` by default (#14850) * [pkg/otlp] Add a simple example on metric export (#14784) * Bump github.com/vektra/mockery/v2 from 2.15.0 to 2.16.0 in /internal/tools (#14913) * Bump github.com/vektra/mockery/v2 in /internal/tools Bumps [github.com/vektra/mockery/v2](https://github.com/vektra/mockery) from 2.15.0 to 2.16.0. - [Release notes](https://github.com/vektra/mockery/releases) - [Changelog](https://github.com/vektra/mockery/blob/master/.goreleaser.yml) - [Commits](https://github.com/vektra/mockery/compare/v2.15.0...v2.16.0) --- updated-dependencies: - dependency-name: github.com/vektra/mockery/v2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * gen mocks Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Paul Cacheux * usm: Reducing chances for mistakes in the protocol type values (#14816) * usm: classification: split the functions and helpers to protocol-dedicated-files (#14924) * usm: classification: split the functions and helpers to protocol-dedicated-files * usm: classification: rename protocol-classification-helpers to protocol-classification * [process-agent] Remove host info from AgentConfig (#14885) * [process-agent] Remove host info from AgentConfig * Fix info command per review feedback * [process-agent] Remove remaining properties from AgentConfig (#14889) * Ignore RemoteSamplingClient when marshaling agent config (#14927) * Ignore RemoteSamplingClient when marshaling agent config * Add release note * pkg/obfuscate: fix panic due to missing logger (#14859) Obfuscator.log was uninitialized which was causing agent panic * Update github.com/lxn/walk version (#14905) * gitignore runtime compiled hash files (#14764) * Try ignoring runtime compiled hash files * Build object files before linting * [process-agent] Remove pkg/process/config package (#14904) * [process-agent] Remove pkg/process/config package * Address review feedback from @kkhor-datadog - Revert back to using util.PathExists for simplicity - Clean up code with early exits * Review feedback from @sgnn7 * Bump github.com/avast/retry-go/v4 from 4.3.1 to 4.3.2 (#14935) Bumps [github.com/avast/retry-go/v4](https://github.com/avast/retry-go) from 4.3.1 to 4.3.2. - [Release notes](https://github.com/avast/retry-go/releases) - [Commits](https://github.com/avast/retry-go/compare/4.3.1...4.3.2) --- updated-dependencies: - dependency-name: github.com/avast/retry-go/v4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump github.com/prometheus/procfs from 0.8.0 to 0.9.0 (#14934) Bumps [github.com/prometheus/procfs](https://github.com/prometheus/procfs) from 0.8.0 to 0.9.0. - [Release notes](https://github.com/prometheus/procfs/releases) - [Commits](https://github.com/prometheus/procfs/compare/v0.8.0...v0.9.0) --- updated-dependencies: - dependency-name: github.com/prometheus/procfs dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * [CWS Agent] Bugfixing SecAgent Params constructor (#14939) * [USM] use per-cpu array map instead of in-stack buffer for classification (#14756) * protocol classification: add per-cpu array map Signed-off-by: Guillaume Pagnoux * Outsmart the verifier * change map type on unsupported systems Signed-off-by: Guillaume Pagnoux * fix runtime-compilation on older kernels + doc Signed-off-by: Guillaume Pagnoux * fix array map Signed-off-by: Guillaume Pagnoux * docs & refactor Signed-off-by: Guillaume Pagnoux * add missing editor flag to change map type Signed-off-by: Guillaume Pagnoux * usm: Reverted #14925 Signed-off-by: Guillaume Pagnoux Co-authored-by: Guy Arbitman * [gitlab] Use DEB buildimage based on Ubuntu 14.04 instead of Debian 8 (#14929) * Adding config option to disable delta profiles when profiling the Agent * Fixed nil return instead of an error in DogStatsD file replay * Removed sending API key as params in forwarder * [CWS] remove now useless runtime files sync check (#14945) * flags package to organize security agent subcommand flags (#14906) * [CI] Improve visibility for `docker run` commands in the CI (#14899) Add line breaks for docker run commands * [CWS Agent] SecAgent command pkg to replace common pkg, moving status and version subcommands (#14907) * adding command package, to replace common * status and version subcommands * Bump github.com/itchyny/gojq from 0.12.10 to 0.12.11 (#14938) Bumps [github.com/itchyny/gojq](https://github.com/itchyny/gojq) from 0.12.10 to 0.12.11. - [Release notes](https://github.com/itchyny/gojq/releases) - [Changelog](https://github.com/itchyny/gojq/blob/main/CHANGELOG.md) - [Commits](https://github.com/itchyny/gojq/compare/v0.12.10...v0.12.11) --- updated-dependencies: - dependency-name: github.com/itchyny/gojq dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Replacing TODOs in exposed comments with more meaningful comments (#14901) * Revert "[agent] Support for running secrets backends with sha256 verification (#14529)" (#14940) This reverts commit deb7fce8f668a4bca6697e76d0b77cb67d7f46f7. * missing import in file with unsupported build flag (#14952) * Bump golang.org/x/text from 0.5.0 to 0.6.0 (#14948) Bumps [golang.org/x/text](https://github.com/golang/text) from 0.5.0 to 0.6.0. - [Release notes](https://github.com/golang/text/releases) - [Commits](https://github.com/golang/text/compare/v0.5.0...v0.6.0) --- updated-dependencies: - dependency-name: golang.org/x/text dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Download btfs for kitchen tests (#14587) * Save btfs to dd-agent-omnibus s3 bucket * Update folders to match new btfhub-archive names * Download BTFs during kitchen-prepare task * Add more details to error message * Fix permissions * Use btfs from dev box * Update gitignore * Check for bpftool compatability outside of generate_minimized_btfs * Change x86-64 -> x86_64 * Fix generating minimized btfs * Fix bpftool compatability check helper * Fix python linting * Fix python lint * Only run BTF preparation outside of CI * Explicitly indicate CI kitchen preparation Co-authored-by: Hasan Mahmood Co-authored-by: Bryce Kahle * [secrets] Fix getDDAgentUserSID to account for NT AUTHORITY\SYSTEM (#14941) * [secrets] Fix getDDAgentUserSID to account for NT AUTHORITY\SYSTEM * Address review feedback from @clarkb7 * usm: classification: removed redundant nolint (#14958) * Bump wheel versions (#14918) * Fixing system_probe.py on linux machine (#14959) * document trace API v04, including response (#14868) * [CWS] improve mount fallback (#14779) * [CWS] improve mount fallback * post review * [CWS] bump security agent policies to v0.42.1 (#14964) * [orchestration] Add Vertical Pod Autoscalers (#14669) * [orchestration] Add Vertical Pod Autoscalers We want to start collecting Vertical Pod Autoscalers from Kubernetes. Co-authored-by: Kangyi LI Co-authored-by: Bryce Eadie * [usm] Extract batching functionality into package (#14712) * [Process Agent] Split Collector into Runner and Submitter (#14883) * WIP * Collector and submitter split, need to fix tests * Rename receivers to `s` * Delete components directory * Add RT reporting to submitter * Add `dropCheckPayloads` back into the submitter * Move submitter tests to it's own file * Delete component.go * clean up comments and unused code * Fix a couple tests * Fix orchestrator tests * Fix tests * Fix copyright header * Fix linter issues * Use mocks in tests * Fix import * Fix data race in tests * Fix data race in tests * Update cmd/process-agent/collector.go Co-authored-by: Ivan Ilichev * Refactor `Submit` to not return an error * Remove `init()` in favor of using mock config * Remove `init()` in favor of using mock config * Update mockery to use version 2.16 since they were updated in #14913 * Fix linter errors (again) * Fix `TestPodCheck/enabled` failing due to the clustername package caching a bad cluster name * Remove `forwarderRetryQueueMaxBytes` Co-authored-by: Ivan Ilichev * Bump Collector dependencies to v1.0.0-RC2/v0.68.0 (#14864) * Bump Collector dependencies to v1.0.0-RC2/v0.68.0 * Revert InstrumentationLibraryMetadataAsTags changes * Update collector test configuration error message * Address PR comments * Increase speed of generate_minimized_btfs jobs (#14585) Co-authored-by: Bryce Kahle * Add dynamic way of determining eBPF helper availability on runtime compilation (#14685) * Add KernelHeaderOptions type to prevent ebpf package dependency * Add function to get available helpers on host * Use dynamic method of finding available helpers * Use static list for kernels with __BPF_FUNC_MAPPER macro * Limit TestGetAvailableHelpers to kernels where it will work * Fix udp bind for random ports (#14956) * NDM: Add snmp.interface_status metric (#14797) * NDM: Add snmp.interface_status metric * update test * Add reno * Address review * Rename metric * Address review * Add InterfaceStatus enum * Remove iota and use explicit values * NDM: Add snmp.device.[un]reachable metrics (#14649) * NDM: Add snmp.device_up metric * Address review * update reno * Address review * fix import * Improve log message (#14968) Log the underlying error when GetUnitTypeProperties fails * Use rv "0" when polling endpoint list (#13906) Since this code path polls the endpoint list endpoint once every 60s by default to update the internal stat in the agent, we don't really need the consistency guarantees we implicitly get from the unset resource version. When the resource version is unset, the api-server needs to fetch all endpoints from etcd, causing a costly round-trip that can potentially result in a lot of data traffic. When setting resource version "0", all requests are handled by the watch cache, meaning they will be much more efficient and less costly. For the most part, the actual returned data will be the same, but in some cases where the API-servers are having a bad time, the data might be a bit stall; but that is not very common. In that case, getting data from the watch cache instead of not being able to list at all is preferable. The semantics are described in detail here; https://kubernetes.io/docs/reference/using-api/api-concepts/#semantics-for-get-and-list Signed-off-by: Odin Ugedal Signed-off-by: Odin Ugedal * Remove `CCA_IN_AD` flag and related unused code (#14955) * remove CCA_IN_AD config flag * PR feedback * remove unused providers * pr feedback * epforwarder: add additional debug logging (#14161) * Fix small typo in install XML. (#14687) Causes Wix to throw error (although apparently non-fatal) * CWS: sync BTFhub constants (#14986) Co-authored-by: paulcacheux * Revert "pkg/obfuscate: improve formatting and string parsing in the SQL obfuscator (#11967)" (#14976) This reverts commit 8ab1d187421087d8ae746ec0dcca00f25918a9f0. * [CWS] remove unsafe pointer from eval.Context (#14890) * [CWS] remove unsafe pointer for eval.Context * Add user context * move perf helper to a perf file * remove resolvers from event * generate handlers * add extra field handlers * remove accessors from probe * remove model mock * fix unit and functional tests * refactor model/field_handlers * add helper for common object creation * fix stress tests * [workloadmeta/collectors/containerd] Collect image metadata (#14592) * [util/containerd] Rename Image to ImageOfContainer To be able to introduce a new Image func that gets an image just by image ID, regardless of whether it's being used in container. * [util/containerd] Add Image func * [workloadmeta] Add GetImage func * [config] Add option to enable image collection in workloadmeta * [workloadmeta/collectors/containerd] Collect image metadata * [CSPM] remove the hostSelector field not used anymore (#14770) * [CSPM] remove the hostSelector field not used anymore In a more global effort to remove the internal compliance DSL after our move to rego, this commit removes one field where it is still being used. The hostSelector field has been put in place in order to make sure we only run specific rules on hosts that match, in particular for k8s nodes. However, the rule were not used anymore since the hosts "master" labels are not properly set. We rely other side effects (like process and file existence) to avoid running some rules on bad nodes. * [CSPM] remove k8s nodeLabels retrieval from compliance rules execution Now that hostSelector fields have been removed, fetching the k8s node labels is not required anymore and completely useless. This PR just remove the nodeLabels fetching and all the subsequent dependencies. * [CWS] add tests for live process monitoring (#14944) * [system-probe][NET-2899] fix race condition in ephemeral port checker (#14802) * [NET-2899] use mutex to lock fields causing race condition in ephemeral port checker * [NET-2899] gofmt on changed files * [NET-2899] remove mutex, move racey code to sync.once func * [CWS] restore SECL documentation generation (#14993) * [CWS] fix event missing field resolver (#14992) * fix missing fields resolver in some events (around policy eval CLI) * do not emit event in policy eval output * Add __TARGET_ARCH_ to runtime compilation flags (#14983) * Add __TARGET_ARCH_ to runtime compilation flags * Use append instead * Re-delete http runtime asset hash file (#14982) * Add CO-RE version of TCP Queue Length check (#14763) * Add CO-RE version of TCP Queue Length check * Fix version * Fix generate BTF job * Invert err check on CO-RE load * Add helper for missing BTF check * Bump golang.org/x/tools from 0.4.0 to 0.5.0 in /pkg/security/secl (#14996) * Bump golang.org/x/tools from 0.4.0 to 0.5.0 in /pkg/security/secl Bumps [golang.org/x/tools](https://github.com/golang/tools) from 0.4.0 to 0.5.0. - [Release notes](https://github.com/golang/tools/releases) - [Commits](https://github.com/golang/tools/compare/v0.4.0...v0.5.0) --- updated-dependencies: - dependency-name: golang.org/x/tools dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Auto-generate go.sum and LICENSE-3rdparty.csv changes Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: dependabot[bot] * Fix gateway lookup tests (#14951) * [usm] Reduce HTTP test memory utilization (#15006) * [CWS] mount fallback to pid 1 by default (#15007) * [CWS][SEC-4020] parse args and envs from the new program stack pages (#13008) * CWS: parse args and envs from the process stack * remove useless function parameter * get env vars offset from new program stack as well * return from tailcall loop sooner * use different kprobe to fix kernel function call order on CentOS 7 * [process-agent] Refactor conn rates with util/subscriptions (#14988) * [process-agent] Refactor conn rates with util/subscriptions * Update with a unit test for pub/sub * Address feedback from @hmahmood * [CWS] change programs to avoid mixing events between tests (#15012) * [CWS] rework event json marshalling (#15010) * externalize serialization * a bit of cleanup * refactor schema validators * fix printfs * re-enable policy eval event json * fix trace dispatching * fix deadcode * fix validateProcessContextSECL error output * [USM] protocol classification: add PostgreSQL classification (#14625) * protocol classification: add per-cpu array map Signed-off-by: Guillaume Pagnoux * Outsmart the verifier * protocol classification: add per-cpu array map Signed-off-by: Guillaume Pagnoux * Outsmart the verifier * protocol classification: add PostgreSQL classification Signed-off-by: Guillaume Pagnoux * fix licenses & set postgres port in test Signed-off-by: Guillaume Pagnoux * test: fix port Signed-off-by: Guillaume Pagnoux * test: use JoinHostPort instead of Sprintf Signed-off-by: Guillaume Pagnoux * [USM] protocol classification: add Postgres detection Signed-off-by: Guillaume Pagnoux * revert check_command fix Signed-off-by: Guillaume Pagnoux * postgres: refactor check_command Signed-off-by: Guillaume Pagnoux * change map type on unsupported systems Signed-off-by: Guillaume Pagnoux * fix runtime-compilation on older kernels + doc Signed-off-by: Guillaume Pagnoux * fix array map Signed-off-by: Guillaume Pagnoux * fix merge Signed-off-by: Guillaume Pagnoux * tests: add documentation Signed-off-by: Guillaume Pagnoux * tests: add long query test Signed-off-by: Guillaume Pagnoux * docs & refactor Signed-off-by: Guillaume Pagnoux * fix licenses Signed-off-by: Guillaume Pagnoux * refactor Signed-off-by: Guillaume Pagnoux * postgres: try to classify from client start messages Signed-off-by: Guillaume Pagnoux * add missing Cgo defs Signed-off-by: Guillaume Pagnoux * add postgres docker image pulling Signed-off-by: Guillaume Pagnoux * add missing editor flag to change map type Signed-off-by: Guillaume Pagnoux * remove unused import Signed-off-by: Guillaume Pagnoux * case-insensitive check + docs Signed-off-by: Guillaume Pagnoux * check on tmp buf Signed-off-by: Guillaume Pagnoux * docs Signed-off-by: Guillaume Pagnoux * try fixing verifier issue Signed-off-by: Guillaume Pagnoux * fix verifier issue Signed-off-by: Guillaume Pagnoux * tests: fix docker-compose path Signed-off-by: Guillaume Pagnoux * fixup! Merge remote-tracking branch 'origin/main' into guillaume.pagnoux/USMO-9-protocol-classification-posgres * re-delete re-added files Signed-off-by: Guillaume Pagnoux * go mod tidy Signed-off-by: Guillaume Pagnoux * add docs Signed-off-by: Guillaume Pagnoux * remove redundant check Signed-off-by: Guillaume Pagnoux * refactor server creation in tests Signed-off-by: Guillaume Pagnoux * rename guards Signed-off-by: Guillaume Pagnoux * specify postgres version in docker-compose Signed-off-by: Guillaume Pagnoux * tests: skip when using NAT Signed-off-by: Guillaume Pagnoux * split sql files Signed-off-by: Guillaume Pagnoux * tests: add tests for all supported sql queries Signed-off-by: Guillaume Pagnoux * move postgres struct to postgres-defs.h Signed-off-by: Guillaume Pagnoux * remove redundant check Signed-off-by: Guillaume Pagnoux * classify on command completion messages as well Signed-off-by: Guillaume Pagnoux * add long response test Signed-off-by: Guillaume Pagnoux * re-enable query detection Signed-off-by: Guillaume Pagnoux Signed-off-by: Guillaume Pagnoux Co-authored-by: Guy Arbitman * [process-agent] Scaffold components for process agent (#14972) * [process-agent] Scaffold components for process agent * Addresss review comments from @ogaca-dd * Addresss review comments from @ogaca-dd * Change to use context.Context and reintroduce empty Component interface to suppress linting * CWS: sync BTFhub constants (#15023) Co-authored-by: paulcacheux * [CWS] rework/cleanup `FieldHandlers` (#15015) * remove probe from FieldHandlers * cleanup `NewProcessResolver` resolvers dependency * resolvers only need a link to the manager * Update CODEOWNERS (#15024) * Use sc query to gain information about the service before attempting to stop it. (#15028) * [security-agent] remove redundant String() in compliance agent log (#15026) * [invoke] Print summary of test failures at the end of inv test (#14682) Updates the inv test command to print a summary of failed tests at the end of a run, across all modules and flavors that were tested, to more easily identify the list of failures, without having to visually parse the full job logs. * [system-probe][NET-2891] Fix tcp retransmit count (#14740) * [NET-2891] initial pass at changes to prebuilt code * [NET-2891] use retrans_out for runtime compiled tcp_retransmit counter * [NET-2891] runtime compiled version of tcp_retrans updates * [NET-2891] remove debug comment * [NET-2891] fix log * [NET-2891] update bytecode * [NET-2891] code review comments, regenerate license * [NET-2891] newline * [NET-2891] fix probe definitions * [NET-2891] update comment * [NET-2891] runtime compilation fixes * [NET-2891] fix byte padding for args init * [NET-2891] fix formatting * testing debug logic * more debug logic, added some config for the map * [NET-2891] enable kretprobe and remove debug * [NET-2891] disable bpf debug be default * [NET-2891] update bytecode * [NET-2891] make function as maybe unused * [NET-2891] handle different paths of incremental vs absolute retransmit counters * [NET-2891] use enum to track increment vs absolute retransmits * [NET-2891] change enum values * [NET-2891] move retrans code to runtime tracer * pulled in new gitignore * Revert "pulled in new gitignore" This reverts commit b4b0df587aeb6b6f655ea90d7bc96ae250934170. * remove runtime gen files, code review comments * [NET-2891] use retransmit count none in runtime tracer * [NET-2891] use retransmit_count_none in handle_tcp_stats * [NET-2891] nit comments from code review * [NET-2891] try to get runtime compilation working on 4.4 kernel * usm: upgraded pgdriver version to indirectly upgrade mellium.in/sasl version due to a CVE ofound (#15030) * usm: upgraded pgdriver version to indirectly upgrade mellium.in/sasl version due to a CVE ofound * Fixed go.sum * [CWS] fix signal test (#15025) * [process-agent] Support dynamically enabling profiling for process agent from CLI (#14995) Adds support for dynamically enabling profiling for the process agent from the CLI * pkg/obfuscate: Fix parsing of sqlserver identifiers enclosed in square brackets (#15019) * DBM-2010 Fix parsing of sqlserver literals enclosed in square brackets * .gitlab: move APM benchmark job to manual only (#15036) * fix datatype (#13791) related to #13770 * [AD/prometheus] Ignore headless services (#15031) * Fix stop service (#15035) * Fix check conf directory Durring the migration to component the hardcoded directory 'etc/confd' for check configuration was removed. * Fix shipping of 'version-history.json' and 'registry.json' in flares When migrating to component the logic to include /opt/datadog-agent/run/ was handled as a file instead of a folder. This broke collecting 'version-history.json' and 'registry.json from it. * Fix datadog.yaml file name in flare * Force file permission to 644 within a flare * auto instru: add rc provider (#15008) * pkg/obfuscate: use github.com/outcaste-io/ristretto instead of github.com/dgraph-io/ristretto (#15005) Migrate the usage of github.com/dgraph-io/ristretto to github.com/outcaste-io/ristretto * [workloadmeta/kubelet] Parse image ID if name is a SHA256 We now try to parse the resolved image ID if the image in the pod's container status is a SHA256. This seems to happen when pinning the SHA256 in the container spec. This fixes an issue where `image:` filters in DD_CONTAINER_INCLUDE/DD_CONTAINER_EXCLUDE would not be respected. * pkg/trace/api: remove unused internal OTLP HTTP server (#14965) * [pkg/trace/api] Remove unused OTLP HTTP server * [pkg/trace] Remove protocol argument * Remove unnecessary fmt.Sprintf * Fix tests * [CWS] cleanup last uses of `jsonschema_description` (#15050) * [Serverless] Merge `serverless/main` to `main` (#14980) * [Serverless] change account (#14755) * Aj/buffer cold start span data (#14664) * wip dirty commit - trace being created but not flushed properly. No further traces appearing WIP: more debugging. StopChan properly set up feat: Starting coldstart creator as a daemon, and recieving data from two channels. Todo: spec feat: Update specs to write to channels feat: Merge conflicts resolved for tests feat: Use smaller methods to handle locking fix: pass coldstartSpanId to sls-init main feat: Remove default feat: Use Millisecond as Second is far longer than necessary feat: No need to export ColdStartSpanId fix: update units feat: Directionality for lambdaSpanChan as well as for initDurationChan fix: No need for the nil check, I need to stop javascripting my go feat: ints * feat: rebase missing changes from merge commits * feat: update ints after moving accounts * Empty commit to trigger ci * [Serverless] Fix flaky integration tests and make them more easily maintainable. (#14783) * Retry serverless integration test failures automatically. (#14801) * [Serverless] Allow some keys to be option in serverless integration tests. (#14827) * Ability to remove items from the json. * Remove items from snapshot. * Do not expect spans when there is no spans object. (#14396) * [Serverless] Improve stability of two tests. (#14895) * Increase timeout while decreasing test time. * Increase timeout in test. * [Serverless] Consolidate log normalization to single file for integration tests. (#15004) * Consolidate log normalization to single file. * Save raw logs to a temp dir. * Fix linting issues. Co-authored-by: Maxime David Co-authored-by: AJ Stuyvenberg * Fixes multiple problems with http processing/tagging on Windows. (#15022) * Fixes multiple problems with http processing/tagging on Windows. - There was an offset error in which the port was not properly computed on ipv6 connections - There was a problem with computing whether an ipv6 address was loopback or not - The fullpath indication (which is used to compute the key) was not properly being computed. This led to the same tuple being used as a different key, so transactions were not properly combined. * fix grammar error in release notes * Add the plumbing in the agent forwarder to submit container images and SBOM (#14962) * Improve documentation for BundleParams (#15011) * pkg/clusteragent/admission: add unit tests (#15044) * [CWS] bump syscall table + extract into separate task (#15061) * 5.19 -> 6.1 * switch syscall table generator from go generate to task * extract linux version * [gitlab] Temporarily disable SUSE Agent 5 upgrade tests (#15055) * [corechecks/snmp] Add LLDP remote device IP address (#14946) * [CWS] add discarders eBPF unit test (#14471) * [CWS] add discarder retention ut * add another test * add a unit test task * add trace param * make eBPF test part of the CI * fake time to speed up tests * bump baloum version * add more tests * [CWS Agent] Moving SecAgent subcommands to new dir part 2 (#14915) * moving flare command to subcommands dir * consolidating and moving secagent config package * moving runtime to subcommands dir * moved check subcommand, updated compliance subcommand which is the entry point to check funcs * moving compliance cmd to subcommand dir * exporting CliParams and RunCheck in Check subcommand for Compliance tests * fixing cluster agent entry point into the check subcommand * Add `container_image` core check (#14567) * Reorganize the specs for some kitchen test (#15027) * [check command] Add `--instance-filter` option (#15034) * Migrate systray to an fx.App (#14985) Deprecate single-dash args and add double-dash args Move code from cmd/systray to comp/systray Update UAC manifest to requireAdministrator Fix log file and add `system_tray.log_file` configuration option. * epforwarder: update dbm samples endpoint prefix (#15053) dbm-metrics-intake and dbquery-intake resolve to the same IPs. This change cleans up code so that we're only referencing one endpoint name. * [process-agent] Refactor Check interface (#15063) * [process-agent] Refactor Check interface - Refactors Check interface to consolidate CheckWithRealTime features - This will simplify integration with components in the future PRs since it eliminates casts * Address feedback from @just-chillin * usm: postgres classification: Reduced 5 seconds per test, 1m30s in total (#15070) Improved the regex for which we are using to detect if the server is up and running, by that we can spare the 'wait 5 seconds' in GetPGHandle * CWS: sync BTFhub constants (#15074) Co-authored-by: paulcacheux * [DCA] Convert commands to Fx apps * Extract magic strings into command.* constants * [CWS] Add 4 tests, one for each kernel rate limiter algo (#15064) * [CWS] remove useless callbacks (#15046) * remove useless error check * remove useless callback * Add `SBOM` core check (#14989) * Prevent check from running after it was unscheduled. (#15065) * Prevent check from running after it was unscheduled. If a check runs after it was unscheduled, in particular after it's sender and samplers were removed, would create sender and samplers again, leaking resources. This may happen if the check was cancelled after it was put in the worker channel, but before worker called Run. This change adjusts check_wrapper to make Cancel fully mutually exclusive with Run, and adds a flag that would prevent Run from executing the check after Cancel has completed. * go fmt * Update test helper * Restrict flare file from being accessible by other users on Unix (#14862) * pkg/clusteragent/admission/patch: poll rc on leadership switch (#15062) * pkg/clusteragent/admission: add additional libconfig env vars (#15059) * usm: classification: Split USM and NPM classifications (#15075) USM does not need all classifiers, only those which we have dispatchers for (HTTP, and soon HTTP2) * Python memory telemetry (#14757) * Track memory used by the python arena allocator pymalloc [1], Python built-in arena allocator is responsible for handling small-sized allocations, while the rest goes through the system malloc. This patch tracks the amount of memory requested by pymalloc from the operating system, allowing low cost, low granularity view into a segment of python memory usage. [1]: https://docs.python.org/3/c-api/memory.html#the-pymalloc-allocator * inv -e rtloader.format * Remove rtloader_mem.h from rtloader.h This allows to call C malloc without warnings when we implement a custom raw memory allocator for python. * Add python raw allocator tracking. Together with tracking pymalloc requests, this should give comprehensive picture of memory allocated by the python interpreter. * Make sure to call global malloc/free In Pyraw allocator implementation, make sure to call global malloc/calloc/realloc/free symbols, to avoid undesired interaction with the rtloader-specific memory tracking (for example, call libc free instead of RtLoader::free). * Move all memory tracking to the same file * Update Go naming to match C functions pymalloc is now one of two tracked allocators, use pymem as umbrella. * Add a note about new metrics to the docs * Python memory telemetry supports py3 only * Add releasenote * Expand telemetry documentation. * Update docs/dev/agent_memory.md Co-authored-by: Kari Halsted <12926135+kayayarai@users.noreply.github.com> * Update docs/dev/agent_memory.md Co-authored-by: Kari Halsted <12926135+kayayarai@users.noreply.github.com> * Update docs/dev/agent_memory.md Co-authored-by: Kari Halsted <12926135+kayayarai@users.noreply.github.com> * Update releasenotes/notes/pymem-telemetry-0f62acb520d80a1f.yaml Co-authored-by: Kari Halsted <12926135+kayayarai@users.noreply.github.com> * Update rtloader/three/three_mem.cpp Co-authored-by: Scott Opell * Improve metric description and remove outdated comment. * Fix typo * Add a comment about allocation size adjustments Co-authored-by: Kari Halsted <12926135+kayayarai@users.noreply.github.com> Co-authored-by: Scott Opell * Add telemetry for number of contexts per origin (#15016) * Add telemetry for number of contexts per origin Report number of contexts at the end of flush for each container sending dogstatsd metrics. This PR relies on origin detection to provide a set of identifying tags for each origin, and reports number of distinct contexts for each tag set. While this may not fully identify individual origins when running with low tagger cardinality, it accurately reflects the way agent would aggregate metrics from different origins together if their tags end up the same. * Only enable per-origin stats if telemetry is enabled. * [process-agent] Fix kitchen tests for process agent on main (#15072) * include `functests` in `DD_PIPELINE_ID` for system probe and security agent functests (#15043) * include `functests` in DD_PIPELINE_ID for system probe and security agent functests * simpler/shorter pipeline_id * [install_script] Backport removal of RPM signing key 4172A230 (#15082) * [corechecks/snmp] LLDP resolve local interface (#14991) * [CWS] fix rule in error reported twice (#15084) * Add java package in our circle-ci image (#14665) * Use DMI on EC2 Nitro instances to get host aliases The Agent now leverage DMI information on Unix to get the instance ID on AWS EC2 when the metadata endpoint fails or is not accessible. The instance ID is exposed throught DMI only on AWS Nitro instances. This will not change the hostname of the Agent upon upgrading but will add to the list of host aliases. * [CWS] add inode to pid context to detect exec loss (#14661) * [CWS] add revision to pid context * use inode instead of revision * Fix post rebase * Fix serializer tests flakiness (#15093) * [RCM-632] Add UUID in request (#15088) * Add org uuid field * Add org uuid in request * Remove generate file * Comment exported method * fix the receiver name consistency (#15068) * Add limits to allocated dictionaries, prevent browser cross-site requests (#15067) * pkg/trace/api: Move semantic conventions to separate internal package (#14963) * [pkg/trace/api] Move semantic conventions to separate internal package * Rename to shared * Move tagContainersTags back to API package * Rename package to 'header' * Fix Windows build * Factorize queue code duplicated at two places (#15098) * Factorize the aggregating queue used by the SBOM and container image checks * Mock time functions to make tests more reliable * [single-machine-performance] Push agent containers to SMP ECR (#14438) * [single-machine-performance] Push agent container to SMP ECR This commit is an attempt to introduce pushing containers from Agent CI for single-machine-performance's Regression Detector in our isolated infrastructure. Much like we have done for vectordotdev/vector we intend to run the Regression Detector on Agent changes, giving a reasonable statistical guarantee that a change does or does not modify Agent performance by more than random chance. In order for the Regression Detector to run jobs it must have access to a 'baseline' and 'comparison' target. Baseline in this project would be a container built from current `main` branch, comparison would be a container built from the tip of a PR. The main thing demonstrated here is that the team credentials SMP has created for Agent are functional and are able to push up a containers, in a way that is acceptable to Agent Platform. I have ammended `.docker_build_job_definition` to mirror every created container to single-machine-performance's ECR, noting that the tag now avoids the use of `CI_PIPELINE_ID`. In a later commit we will introduce job submission and will rely on being able to compute the tag of a previous pipeline's container from available Gitlab metadata, specificall `CI_COMMIT_SHA` for the comparison container and whatever metadata maps to the base branch's current SHA, `CI_MERGE_REQUEST_SOURCE_BRANCH_SHA`? There are two outstanding questions regarding this work that I am aware of: * Is there a race condition present between the triggering of this pipeline vs main if users squash commits? * Should we grant the exisitng CI user permissions into single-machine-performance rather than use an issued bot account as done presently and for vectordotdev/vector? We've successfully demonstrated pushing up containers in a previous iteration of this work, see https://gitlab.ddbuild.io/DataDog/datadog-agent/-/jobs/195939127. Signed-off-by: Brian L. Troutwine * PR feedback Signed-off-by: Brian L. Troutwine * trim ECR URL out of destination Signed-off-by: Brian L. Troutwine * correct job dependency Signed-off-by: Brian L. Troutwine * drop parallel.matrix Signed-off-by: Brian L. Troutwine Signed-off-by: Brian L. Troutwine * Bump github.com/Microsoft/hcsshim from 0.9.4 to 0.9.6 (#14785) Bumps [github.com/Microsoft/hcsshim](https://github.com/Microsoft/hcsshim) from 0.9.4 to 0.9.6. - [Release notes](https://github.com/Microsoft/hcsshim/releases) - [Commits](https://github.com/Microsoft/hcsshim/compare/v0.9.4...v0.9.6) --- updated-dependencies: - dependency-name: github.com/Microsoft/hcsshim dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * [Windows] implement mapping of pid to service name (#15039) * [Windows] implement mapping of pid to service name Checks the pid against the table of SCM controlled processes. If it's SCM controlled, returns the service information. Because we must enumerate the entire SCM (there doesn't seem to be an api for that), the SCMManager object maintains a cache of objects, and refreshes only when it sees a PID it hasn't seen before. On a machine with high process churn, this could still result in a lot of accesses. However, if process agent queries only when doing the process check (i.e. every 30s), then it should only iterate the list once per 30s. * ci fixes, add tests * fix test/improper conversion of data buffer * review feedback * more review feedback * Rename structure * Fixed http2 parsing several bugs 1. Fixed the wrong path size bug in the http2 path name 2. Fixed wrong condition in http2 entrypoint 3. Fixed wrong status code Signed-off-by: dependabot[bot] Signed-off-by: Brian L. Troutwine Signed-off-by: Nicolas Guerguadj Signed-off-by: Guillaume Pagnoux Signed-off-by: Odin Ugedal Co-authored-by: David Ortiz Co-authored-by: Cedric Lamoriniere Co-authored-by: Kacper <89013263+kacper-murzyn@users.noreply.github.com> Co-authored-by: Carlos Roman Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: paulcacheux Co-authored-by: Paul Cacheux Co-authored-by: Jonathan Ribas Co-authored-by: Slavek Kabrda Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Brian L. Troutwine Co-authored-by: Kylian Serrania Co-authored-by: Olivier G <52180542+ogaca-dd@users.noreply.github.com> Co-authored-by: Julien Lebot Co-authored-by: Keisuke Umegaki <41987730+keisku@users.noreply.github.com> Co-authored-by: tbavelier <97530782+tbavelier@users.noreply.github.com> Co-authored-by: maxime mouial Co-authored-by: Nicolas PLANEL Co-authored-by: Andrew Glaude Co-authored-by: Vincent Boulineau <58430298+vboulineau@users.noreply.github.com> Co-authored-by: Sarah Witt Co-authored-by: NouemanKHAL Co-authored-by: Rey Abolofia Co-authored-by: Maxime David Co-authored-by: AJ Stuyvenberg Co-authored-by: Ivan Ilichev Co-authored-by: Alexandre Yang Co-authored-by: Sylvain Afchain Co-authored-by: Maxime mouial Co-authored-by: amitslavin <108348428+amitslavin@users.noreply.github.com> Co-authored-by: Sylvain Baubeau Co-authored-by: Dusan Jovanovic Co-authored-by: modernplumbing Co-authored-by: Kai Zong Khor <119512420+kkhor-datadog@users.noreply.github.com> Co-authored-by: modernplumbing Co-authored-by: Albert Vaca Cintora Co-authored-by: Yoann Ghigoff Co-authored-by: Alexandre Menasria <47357713+amenasria@users.noreply.github.com> Co-authored-by: Nicolas Guerguadj <35628945+Kaderinho@users.noreply.github.com> Co-authored-by: Ahmed Mezghani <38987709+ahmed-mez@users.noreply.github.com> Co-authored-by: pducolin <45568537+pducolin@users.noreply.github.com> Co-authored-by: Kaylyn Co-authored-by: Alex Lopez Co-authored-by: Yang Song Co-authored-by: Martin Pierret <103181765+martpier@users.noreply.github.com> Co-authored-by: Artem Ivanov Co-authored-by: Branden Clark Co-authored-by: Bryce Kahle Co-authored-by: Guillaume Pagnoux Co-authored-by: Isabelle Sauvé Co-authored-by: Hasan Mahmood Co-authored-by: Florent Clarret Co-authored-by: David Goffredo Co-authored-by: Joshua Lineaweaver Co-authored-by: Kangyi LI Co-authored-by: Bryce Eadie Co-authored-by: Pedro Lambert Co-authored-by: Corrina Sivak <6798352+just-chillin@users.noreply.github.com> Co-authored-by: Stanley Liu Co-authored-by: Hasan Mahmood Co-authored-by: Florian Veaux Co-authored-by: Vickenty Fesunov Co-authored-by: Odin Ugedal Co-authored-by: Brian Floersch Co-authored-by: Emma Ferguson <6165248+EmmaOnThursday@users.noreply.github.com> Co-authored-by: Derek Brown Co-authored-by: Kyle Nusbaum Co-authored-by: Pierre Guilleminot Co-authored-by: Adam Karpowich Co-authored-by: dependabot[bot] Co-authored-by: David du Colombier Co-authored-by: Alexandre Normand Co-authored-by: Ian Bucad Co-authored-by: Katie Hockman Co-authored-by: Julio Greff Co-authored-by: Pablo Baeyens Co-authored-by: Lénaïc Huard Co-authored-by: Kyle Verhoog Co-authored-by: Kari Halsted <12926135+kayayarai@users.noreply.github.com> Co-authored-by: Scott Opell Co-authored-by: Paul Co-authored-by: William Yu <7888158+wiyu@users.noreply.github.com> --- .circleci/images/runner/Dockerfile | 1 + .copyright-overrides.yml | 4 +- .github/CODEOWNERS | 15 + .github/workflows/do-not-merge.yml | 20 + .github/workflows/serverless-integration.yml | 13 +- .gitignore | 12 + .gitlab-ci.yml | 17 +- .gitlab/JOBOWNERS | 1 + .gitlab/benchmarks/benchmarks.yml | 24 + .gitlab/binary_build/system_probe.yml | 1 + .gitlab/binary_build/windows.yml | 11 +- .gitlab/choco_deploy.yml | 7 +- .gitlab/container_build/docker_linux.yml | 45 +- .gitlab/container_build/docker_windows.yml | 10 +- .gitlab/deploy_7/winget.yml | 9 +- .gitlab/deps_build.yml | 20 +- .gitlab/functional_test.yml | 1 + .../functional_test/regression_detector.yml | 91 + .gitlab/functional_test/security_agent.yml | 4 +- .gitlab/functional_test/system_probe.yml | 47 +- .gitlab/functional_test_cleanup.yml | 2 +- .gitlab/kitchen_testing/suse.yml | 22 +- .gitlab/maintenance_jobs/docker.yml | 1 + .gitlab/notify.yml | 2 + .gitlab/package_build/deb.yml | 3 + .gitlab/package_build/dmg.yml | 1 + .gitlab/package_build/rpm.yml | 3 + .gitlab/package_build/suse_rpm.yml | 3 + .gitlab/package_build/windows.yml | 55 +- .gitlab/package_deps_build.yml | 5 +- .gitlab/shared.yml | 10 + .gitlab/source_test/ebpf.yml | 18 +- .gitlab/source_test/linux.yml | 2 +- .gitlab/source_test/macos.yml | 4 +- .gitlab/source_test/windows.yml | 17 +- .golangci.yml | 2 +- CHANGELOG-DCA.rst | 21 + CHANGELOG.rst | 197 + Dockerfiles/agent/datadog-kubernetes.yaml | 2 - LICENSE-3rdparty.csv | 108 +- cmd/agent/api/internal/agent/agent.go | 23 +- cmd/agent/api/server.go | 5 +- cmd/agent/common/autodiscovery.go | 80 +- cmd/agent/common/loader.go | 4 + cmd/agent/dist/conf.d/ntp.d/conf.yaml.default | 2 +- cmd/agent/gui/agent.go | 3 + cmd/agent/gui/agent_test.go | 104 + cmd/agent/install_script.sh | 164 +- cmd/agent/subcommands/configcheck/command.go | 5 +- .../subcommands/configcheck/command_test.go | 2 +- cmd/agent/subcommands/diagnose/command.go | 16 +- .../subcommands/diagnose/command_test.go | 10 +- .../subcommands/dogstatsdcapture/command.go | 4 +- .../dogstatsdcapture/command_test.go | 2 +- .../subcommands/dogstatsdreplay/command.go | 4 +- .../dogstatsdreplay/command_test.go | 2 +- .../subcommands/dogstatsdstats/command.go | 4 +- .../dogstatsdstats/command_test.go | 2 +- cmd/agent/subcommands/flare/command.go | 54 +- cmd/agent/subcommands/flare/command_test.go | 2 +- cmd/agent/subcommands/hostname/command.go | 4 +- .../subcommands/hostname/command_test.go | 2 +- cmd/agent/subcommands/integrations/command.go | 3 +- .../subcommands/integrations/command_test.go | 16 +- cmd/agent/subcommands/jmx/command.go | 17 +- cmd/agent/subcommands/jmx/command_test.go | 12 +- cmd/agent/subcommands/launchgui/command.go | 3 +- .../subcommands/launchgui/command_test.go | 2 +- cmd/agent/subcommands/remoteconfig/command.go | 3 +- .../subcommands/remoteconfig/command_test.go | 2 +- cmd/agent/subcommands/run/command.go | 25 +- cmd/agent/subcommands/run/command_test.go | 4 +- cmd/agent/subcommands/run/settings.go | 2 +- cmd/agent/subcommands/secret/command.go | 4 +- cmd/agent/subcommands/secret/command_test.go | 2 +- cmd/agent/subcommands/snmp/command.go | 5 +- cmd/agent/subcommands/status/command.go | 8 +- cmd/agent/subcommands/status/command_test.go | 8 +- cmd/agent/subcommands/stop/command.go | 5 +- cmd/agent/subcommands/stop/command_test.go | 2 +- cmd/agent/subcommands/streamlogs/command.go | 4 +- .../subcommands/streamlogs/command_test.go | 2 +- cmd/agent/subcommands/taggerlist/command.go | 4 +- .../subcommands/taggerlist/command_test.go | 2 +- cmd/agent/subcommands/workloadlist/command.go | 4 +- .../subcommands/workloadlist/command_test.go | 2 +- cmd/cluster-agent-cloudfoundry/app/app.go | 17 +- cmd/cluster-agent/app/clusterchecks.go | 18 - cmd/cluster-agent/app/compliance_cmd.go | 33 - cmd/cluster-agent/app/config.go | 81 - cmd/cluster-agent/app/config_check.go | 15 - cmd/cluster-agent/app/diagnose.go | 58 - cmd/cluster-agent/app/flare.go | 130 - .../app/metadata_mapper_digest.go | 111 - cmd/cluster-agent/app/secret_helper.go | 19 - cmd/cluster-agent/app/status.go | 122 - cmd/cluster-agent/app/telemetry.go | 35 - cmd/cluster-agent/command/command.go | 74 + cmd/cluster-agent/commands/check/check.go | 592 - cmd/cluster-agent/commands/check/setup.go | 47 - cmd/cluster-agent/commands/clusterchecks.go | 135 - cmd/cluster-agent/commands/configcheck.go | 58 - cmd/cluster-agent/commands/health.go | 118 - cmd/cluster-agent/main.go | 9 +- .../subcommands/check/command.go | 30 + .../subcommands/clusterchecks/command.go | 28 + .../subcommands/compliance/command.go | 38 + .../subcommands/config/command.go | 48 + .../subcommands/configcheck/command.go | 28 + .../subcommands/diagnose/command.go | 46 + .../subcommands/flare/command.go | 127 + .../subcommands/health/command.go | 30 + .../subcommands/metamap/command.go | 99 + .../subcommands/secrethelper/command.go | 21 + .../app.go => subcommands/start/command.go} | 302 +- .../subcommands/start/command_test.go | 24 + .../{app => subcommands/start}/compliance.go | 6 +- .../subcommands/status/command.go | 114 + cmd/cluster-agent/subcommands/subcommands.go | 48 + .../subcommands/telemetry/command.go | 37 + .../subcommands/version/command.go | 22 + cmd/dogstatsd/command/command.go | 42 + .../dogstatsd/generate.go | 5 +- cmd/dogstatsd/main_nix.go | 3 +- cmd/dogstatsd/main_windows.go | 18 +- .../{main.go => subcommands/start/command.go} | 98 +- .../start/command_test.go} | 9 +- cmd/process-agent/collector.go | 576 +- cmd/process-agent/collector_api_test.go | 156 +- cmd/process-agent/collector_test.go | 443 +- cmd/process-agent/command/command.go | 85 +- cmd/process-agent/config.go | 25 +- cmd/process-agent/config_test.go | 70 +- cmd/process-agent/info.go | 66 +- cmd/process-agent/info_test.go | 51 +- cmd/process-agent/main_common.go | 73 +- cmd/process-agent/mocks/submitter.go | 54 + cmd/process-agent/subcommands/check/check.go | 101 +- .../subcommands/config/config.go | 15 +- .../subcommands/events/events.go | 11 +- .../subcommands/status/status.go | 4 +- .../subcommands/taggerlist/tagger_list.go | 4 +- .../subcommands/workloadlist/command.go | 4 +- cmd/process-agent/submitter.go | 526 + cmd/process-agent/submitter_test.go | 310 + cmd/security-agent/app/app.go | 50 +- cmd/security-agent/app/start.go | 11 +- .../app/subcommands/config/config.go | 49 - .../command/command.go} | 15 +- cmd/security-agent/commands/config/config.go | 143 - cmd/security-agent/flags/flags_common.go | 64 + cmd/security-agent/main_windows.go | 153 - .../{app => }/subcommands/check/command.go | 62 +- .../subcommands/check/command_test.go | 53 + .../subcommands/check/command_unsupported.go | 5 +- .../{app => }/subcommands/check/reporter.go | 0 .../subcommands/compliance/command.go | 45 +- .../compliance/command_kubeapiserver_test.go | 93 + .../subcommands/compliance/command_test.go | 57 + .../subcommands/compliance/compliance.go | 16 +- .../subcommands}/config/config.go | 112 +- .../subcommands/config/config_unsupported.go | 5 +- .../{app => }/subcommands/flare/command.go | 26 +- .../subcommands/flare/command_test.go | 51 + .../subcommands/runtime/activity_dump.go | 87 +- .../{app => }/subcommands/runtime/command.go | 156 +- .../runtime/command_unsupported.go | 7 +- .../{app => }/subcommands/status/command.go | 30 +- .../subcommands/status/command_test.go | 43 + .../{app => }/subcommands/version/command.go | 30 +- .../subcommands/version/command_test.go | 43 + .../windows_resources/security-agent-msg.mc | 85 - .../windows_resources/security-agent-msg.rc | 9 - .../windows_resources/security-agent.rc | 50 - .../windows_resources/version.h | 7 - cmd/serverless-init/main.go | 3 +- cmd/serverless/main.go | 26 +- cmd/systray/command/command.go | 103 + cmd/systray/ddtray.exe.manifest | 2 +- cmd/systray/main_windows.go | 23 + cmd/systray/systray.go | 395 - cmd/trace-agent/config/config.go | 34 +- cmd/trace-agent/config/config_otlp_test.go | 1 - cmd/trace-agent/config/config_test.go | 86 + cmd/trace-agent/remote_config.go | 2 +- cmd/trace-agent/test/testsuite/traces_test.go | 3 +- comp/README.md | 37 + comp/core/bundle.go | 10 +- comp/core/bundle_params.go | 96 +- comp/core/bundle_test.go | 2 + comp/core/config/config.go | 18 +- comp/core/config/config_test.go | 12 +- comp/core/config/params.go | 168 + comp/core/config/params_test.go | 54 + comp/core/config/setup.go | 31 +- comp/core/flare/component.go | 32 + comp/core/flare/flare.go | 54 + comp/core/flare/helpers/builder.go | 295 + comp/core/flare/helpers/builder_mock.go | 75 + comp/core/flare/helpers/builder_test.go | 266 + comp/core/flare/helpers/helpers.go | 143 + .../core/flare/helpers/perm_info.go | 11 +- comp/core/flare/helpers/perm_info_nix.go | 105 + comp/core/flare/helpers/perm_info_nix_test.go | 88 + comp/core/flare/helpers/perm_info_win.go | 20 + comp/core/flare/helpers/perm_info_win_test.go | 26 + comp/core/internal/params.go | 170 - comp/core/internal/params_test.go | 172 - comp/core/log/logger.go | 19 +- comp/core/log/logger_test.go | 4 +- comp/core/log/mock_test.go | 3 +- comp/core/log/params.go | 149 + comp/core/log/params_test.go | 173 + comp/process/bundle.go | 30 + comp/process/bundle_test.go | 48 + comp/process/containercheck/check.go | 37 + comp/process/containercheck/component.go | 24 + comp/process/processcheck/check.go | 37 + comp/process/processcheck/component.go | 24 + comp/process/runner/component.go | 39 + comp/process/runner/runner.go | 62 + comp/process/submitter/component.go | 41 + comp/process/submitter/submitter.go | 44 + comp/process/types/check.go | 28 + .../systray/bundle.go | 6 +- comp/systray/systray/component.go | 29 + {cmd => comp/systray}/systray/doconfigure.go | 28 +- {cmd => comp/systray}/systray/doflare.go | 51 +- .../systray}/systray/doservicecontrol.go | 19 +- comp/systray/systray/systray.go | 413 + comp/systray/systray/uac.c | 84 + .../dummy.go => comp/systray/systray/uac.h | 11 +- docs/cloud-workload-security/README.md | 2 +- docs/components/README.md | 1 + docs/components/defining-bundles.md | 36 +- docs/components/migrating-to-components.md | 89 + docs/dev/agent_dev_env.md | 58 +- docs/dev/agent_memory.md | 33 +- go.mod | 116 +- go.sum | 203 +- internal/tools/go.mod | 3 +- internal/tools/go.sum | 9 +- omnibus/config/projects/agent-binaries.rb | 1 - omnibus/config/projects/agent.rb | 4 - .../config/software/datadog-agent-finalize.rb | 1 + .../datadog-agent-integrations-py2.rb | 23 +- .../datadog-agent-integrations-py3.rb | 16 +- omnibus/config/software/datadog-agent.rb | 7 +- .../software/datadog-buildpack-finalize.rb | 1 - .../config/software/datadog-cf-finalize.rb | 1 - omnibus/config/software/datadog-iot-agent.rb | 11 - omnibus/config/software/pylint2.rb | 15 +- omnibus/config/software/python3.rb | 10 +- omnibus/config/software/system-probe.rb | 1 + .../agent/msi/localization-en-us.wxl.erb | 2 +- omnibus/resources/agent/msi/source.wxs.erb | 4 +- omnibus/resources/iot/msi/source.wxs.erb | 4 +- pkg/aggregator/aggregator.go | 86 + pkg/aggregator/context_resolver.go | 34 + pkg/aggregator/context_resolver_test.go | 53 + pkg/aggregator/demultiplexer_agent.go | 67 +- pkg/aggregator/demultiplexer_senders.go | 2 + pkg/aggregator/demultiplexer_serverless.go | 4 +- pkg/aggregator/mocksender/asserts.go | 12 + pkg/aggregator/mocksender/mocked_methods.go | 10 + pkg/aggregator/sender.go | 27 + pkg/aggregator/sender_test.go | 10 +- pkg/aggregator/time_sampler.go | 22 +- pkg/aggregator/time_sampler_test.go | 2 +- pkg/autodiscovery/autoconfig.go | 33 +- pkg/autodiscovery/common/types/prometheus.go | 18 +- .../common/utils/prometheus_apiserver.go | 7 + .../common/utils/prometheus_apiserver_test.go | 17 + pkg/autodiscovery/configmgr_test.go | 4 - .../configresolver/configresolver.go | 25 - pkg/autodiscovery/listeners/container.go | 2 +- pkg/autodiscovery/listeners/service.go | 11 +- pkg/autodiscovery/listeners/types.go | 2 - pkg/autodiscovery/providers/clusterchecks.go | 2 +- pkg/autodiscovery/providers/config_reader.go | 5 +- pkg/autodiscovery/providers/container.go | 371 +- pkg/autodiscovery/providers/container_test.go | 452 +- pkg/autodiscovery/providers/kubecontainer.go | 321 - .../providers/kubecontainer_test.go | 458 - pkg/autodiscovery/providers/kubelet.go | 236 - pkg/autodiscovery/providers/kubelet_test.go | 312 - pkg/autodiscovery/simple_configmgr.go | 249 - pkg/autodiscovery/store.go | 34 - pkg/cli/standalone/jmx.go | 2 +- pkg/cli/subcommands/check/command.go | 20 +- pkg/cli/subcommands/check/command_test.go | 2 +- pkg/cli/subcommands/clusterchecks/command.go | 135 + .../subcommands/clusterchecks/command_test.go | 44 + pkg/cli/subcommands/config/command.go | 5 +- pkg/cli/subcommands/config/command_test.go | 8 +- pkg/cli/subcommands/dcaconfigcheck/command.go | 58 + .../dcaconfigcheck/command_test.go | 30 + pkg/cli/subcommands/health/command.go | 5 +- pkg/cli/subcommands/health/command_test.go | 2 +- .../containertagger/container_tagger.go | 16 +- pkg/clusteragent/admission/common/const.go | 12 + .../admission/common/lib_config.go | 192 + .../admission/common/lib_config_test.go | 211 + .../admission/mutate/auto_instrumentation.go | 73 +- .../mutate/auto_instrumentation_test.go | 59 +- .../admission/mutate/test_utils.go | 4 +- .../admission/patch/file_provider.go | 98 + .../admission/patch/patch_request.go | 90 + .../admission/patch/patch_request_test.go | 93 + pkg/clusteragent/admission/patch/patcher.go | 135 + .../admission/patch/patcher_test.go | 89 + pkg/clusteragent/admission/patch/provider.go | 32 + .../admission/patch/rc_provider.go | 86 + .../admission/patch/rc_provider_test.go | 64 + pkg/clusteragent/admission/patch/start.go | 39 + .../clusterchecks/dispatcher_nodes.go | 5 +- .../clusterchecks/dispatcher_test.go | 6 +- pkg/clusteragent/clusterchecks/helpers.go | 4 + pkg/clusteragent/clusterchecks/stores.go | 23 +- pkg/collector/collector_demux_test.go | 1 - .../cluster/ksm/kubernetes_state.go | 4 +- .../cluster/ksm/kubernetes_state_test.go | 32 +- .../collectors/inventory/inventory.go | 1 + .../collectors/k8s/verticalpodautoscaler.go | 104 + .../processors/k8s/verticalpodautoscaler.go | 85 + .../transformers/k8s/verticalpodautoscaler.go | 137 + .../k8s/verticalpodautoscaler_test.go | 184 + .../corechecks/containerimage/check.go | 166 + .../corechecks/containerimage/processor.go | 85 + .../containerimage/processor_test.go | 166 + .../corechecks/containers/containerd/utils.go | 2 +- .../corechecks/containers/docker/utils.go | 2 +- .../corechecks/ebpf/c/runtime/cgroup.h | 6 +- .../c/runtime/tcp-queue-length-kern-user.h | 2 +- .../ebpf/c/runtime/tcp-queue-length-kern.c | 69 +- .../corechecks/ebpf/probe/oom_kill.go | 12 +- .../corechecks/ebpf/probe/oom_kill_test.go | 2 +- .../corechecks/ebpf/probe/tcp_queue_length.go | 62 +- .../ebpf/probe/tcp_queue_length_test.go | 18 + pkg/collector/corechecks/embed/jmx/check.go | 31 +- pkg/collector/corechecks/sbom/check.go | 166 + pkg/collector/corechecks/sbom/convert.go | 1022 + pkg/collector/corechecks/sbom/convert_test.go | 28 + pkg/collector/corechecks/sbom/processor.go | 78 + .../corechecks/sbom/processor_test.go | 149 + .../corechecks/snmp/common/contants.go | 29 + pkg/collector/corechecks/snmp/common/utils.go | 8 + .../corechecks/snmp/common/utils_test.go | 6 + .../internal/checkconfig/config_metadata.go | 26 + .../snmp/internal/checkconfig/config_test.go | 2 + .../snmp/internal/devicecheck/devicecheck.go | 13 +- .../internal/devicecheck/devicecheck_test.go | 101 +- .../snmp/internal/metadata/payload.go | 29 +- .../internal/report/report_device_metadata.go | 174 +- .../report/report_device_metadata_test.go | 277 +- .../snmp/internal/report/report_utils.go | 7 + .../snmp/internal/report/report_utils_test.go | 38 + ...ofile_test.go => profile_metadata_test.go} | 80 +- pkg/collector/corechecks/snmp/snmp_test.go | 226 +- pkg/collector/corechecks/systemd/systemd.go | 2 +- .../internal/middleware/check_wrapper.go | 21 +- .../internal/middleware/test_utils.go | 3 +- pkg/collector/python/init.go | 27 + pkg/compliance/agent/agent_test.go | 10 - pkg/compliance/agent/node_labels.go | 63 - .../testdata/configs/cis-kubernetes.yaml | 1 - pkg/compliance/checks/builder.go | 193 +- pkg/compliance/checks/builder_test.go | 89 - pkg/compliance/checks/env/env.go | 1 - pkg/compliance/mocks/audit_client.go | 2 +- pkg/compliance/mocks/builder.go | 2 +- pkg/compliance/mocks/clients.go | 2 +- pkg/compliance/mocks/configuration.go | 18 +- pkg/compliance/mocks/docker_client.go | 2 +- pkg/compliance/mocks/env.go | 18 +- pkg/compliance/mocks/evaluatable.go | 2 +- pkg/compliance/mocks/iterator.go | 2 +- pkg/compliance/mocks/kube_client.go | 2 +- pkg/compliance/mocks/rego_configuration.go | 2 +- pkg/compliance/mocks/reporter.go | 2 +- pkg/compliance/mocks/scheduler.go | 2 +- pkg/compliance/rego/rego_check.go | 3 - pkg/compliance/rule.go | 9 +- pkg/compliance/suite_test.go | 5 +- pkg/compliance/testdata/cis-docker.yaml | 1 - pkg/config/autodiscovery/autodiscovery.go | 23 +- pkg/config/config.go | 68 +- pkg/config/config_template.yaml | 40 +- pkg/config/config_test.go | 154 +- pkg/config/environment.go | 2 +- pkg/config/remote/client.go | 69 +- pkg/config/remote/data/product.go | 4 + pkg/config/remote/service/service.go | 8 +- pkg/config/remote/service/service_test.go | 29 + pkg/config/remote/service/util.go | 3 +- pkg/config/remote/uptane/client.go | 5 +- pkg/config/render_config.go | 78 +- .../settings/runtime_setting_profiling.go | 14 +- pkg/config/settings/runtime_settings_test.go | 9 +- pkg/containerimage/forwarder.go | 59 + pkg/dogstatsd/replay/file.go | 18 +- pkg/dogstatsd/replay/file_test.go | 44 +- pkg/dogstatsd/server_test.go | 51 +- pkg/ebpf/bytecode/runtime/all_helpers.go | 219 + pkg/ebpf/bytecode/runtime/asset.go | 10 +- pkg/ebpf/bytecode/runtime/conntrack.go | 7 - pkg/ebpf/bytecode/runtime/generated_asset.go | 10 +- pkg/ebpf/bytecode/runtime/helpers.go | 109 + pkg/ebpf/bytecode/runtime/helpers_test.go | 70 + pkg/ebpf/bytecode/runtime/http.go | 7 - pkg/ebpf/bytecode/runtime/oom-kill.go | 7 - pkg/ebpf/bytecode/runtime/runtime-security.go | 2 +- .../runtime/runtime_compilation_helpers.go | 29 +- pkg/ebpf/bytecode/runtime/tcp-queue-length.go | 7 - pkg/ebpf/bytecode/runtime/telemetry.go | 2 +- pkg/ebpf/bytecode/runtime/tracer.go | 7 - pkg/ebpf/c/bpf_cross_compile.h | 150 +- pkg/ebpf/compiler/compiler.go | 111 +- pkg/epforwarder/epforwarder.go | 10 +- pkg/flare/archive.go | 866 +- pkg/flare/archive_dca.go | 234 +- pkg/flare/archive_docker.go | 30 +- pkg/flare/archive_linux.go | 36 +- pkg/flare/archive_linux_test.go | 40 - pkg/flare/archive_nix.go | 130 +- pkg/flare/archive_nix_test.go | 130 - pkg/flare/archive_nodocker.go | 8 +- pkg/flare/archive_nolinux.go | 18 +- pkg/flare/archive_security.go | 201 +- pkg/flare/archive_security_test.go | 26 +- pkg/flare/archive_test.go | 511 +- pkg/flare/archive_win.go | 256 +- pkg/flare/archive_win_test.go | 52 - pkg/flare/dca_telemetry.go | 24 - pkg/flare/envvars.go | 8 +- pkg/flare/metadata.go | 43 - pkg/flare/remote_config.go | 7 +- pkg/forwarder/endpoints/endpoints.go | 4 + pkg/forwarder/forwarder.go | 49 +- pkg/forwarder/forwarder_health.go | 14 +- pkg/forwarder/forwarder_health_test.go | 2 + pkg/forwarder/forwarder_test.go | 73 +- pkg/forwarder/noop_forwarder.go | 10 + pkg/forwarder/sync_forwarder.go | 20 +- pkg/forwarder/test_common.go | 10 + pkg/forwarder/transaction/transaction.go | 3 +- pkg/jmxfetch/jmxfetch.go | 2 +- pkg/logs/agent.go | 22 +- .../container/tailerfactory/tailers/socket.go | 33 +- .../internal/launchers/docker/container.go | 229 - .../launchers/docker/container_test.go | 348 - .../internal/launchers/docker/launcher.go | 496 - .../internal/launchers/docker/launcher_nix.go | 43 - .../launchers/docker/launcher_nix_test.go | 37 - .../launchers/docker/launcher_nodocker.go | 41 - .../launchers/docker/launcher_test.go | 189 - .../launchers/docker/launcher_windows.go | 30 - .../launchers/docker/launcher_windows_test.go | 84 - pkg/logs/internal/launchers/docker/since.go | 44 - .../internal/launchers/docker/since_test.go | 47 - .../internal/launchers/kubernetes/launcher.go | 319 - .../kubernetes/launcher_nokubelet.go | 39 - .../launchers/kubernetes/launcher_test.go | 436 - pkg/logs/internal/tailers/file/tailer.go | 4 +- pkg/logs/logs.go | 5 - pkg/logs/schedulers/ad/scheduler.go | 50 - pkg/metadata/host/host_tags.go | 2 +- pkg/metadata/inventories/host_metadata.go | 15 +- .../inventories/host_metadata_nix_test.go | 59 - .../inventories/host_metadata_test.go | 36 +- pkg/metadata/inventories/inventories_test.go | 11 +- pkg/network/config/config_test.go | 26 - pkg/network/ebpf/c/prebuilt/http.c | 2 +- pkg/network/ebpf/c/prebuilt/tracer.c | 83 +- pkg/network/ebpf/c/prebuilt/usm_events_test.c | 52 + pkg/network/ebpf/c/protocols/amqp-defs.h | 22 + pkg/network/ebpf/c/protocols/amqp-helpers.h | 57 + pkg/network/ebpf/c/protocols/events-types.h | 36 + pkg/network/ebpf/c/protocols/events.h | 118 + .../c/protocols/http-classification-defs.h | 8 + .../c/protocols/http-classification-helpers.h | 37 + pkg/network/ebpf/c/protocols/http-maps.h | 12 - pkg/network/ebpf/c/protocols/http-types.h | 29 - pkg/network/ebpf/c/protocols/http.h | 77 +- .../ebpf/c/protocols/http2-decoding-defs.h | 109 + pkg/network/ebpf/c/protocols/http2-decoding.h | 64 +- pkg/network/ebpf/c/protocols/http2-defs.h | 126 +- pkg/network/ebpf/c/protocols/http2-helpers.h | 70 + pkg/network/ebpf/c/protocols/http2.h | 86 - pkg/network/ebpf/c/protocols/https.h | 4 +- pkg/network/ebpf/c/protocols/mongo-defs.h | 21 + pkg/network/ebpf/c/protocols/mongo-helpers.h | 72 + pkg/network/ebpf/c/protocols/postgres-defs.h | 50 + .../ebpf/c/protocols/postgres-helpers.h | 45 + .../protocol-classification-common.h | 99 + .../protocols/protocol-classification-defs.h | 18 +- .../protocol-classification-helpers.h | 214 - .../protocols/protocol-classification-maps.h | 18 + .../protocol-classification-structs.h | 20 + .../c/protocols/protocol-classification.h | 90 + .../c/protocols/protocol-dispatcher-helpers.h | 28 +- pkg/network/ebpf/c/protocols/redis-defs.h | 6 + pkg/network/ebpf/c/protocols/redis-helpers.h | 89 + pkg/network/ebpf/c/protocols/sql-defs.h | 14 + pkg/network/ebpf/c/protocols/sql-helpers.h | 38 + pkg/network/ebpf/c/runtime/http.c | 3 +- pkg/network/ebpf/c/runtime/tracer.c | 84 +- pkg/network/ebpf/c/tracer-maps.h | 9 +- pkg/network/ebpf/c/tracer-stats.h | 15 +- pkg/network/ebpf/c/tracer.h | 15 +- pkg/network/ebpf/kprobe_types.go | 28 +- pkg/network/ebpf/kprobe_types_linux.go | 33 +- pkg/network/ebpf/probes/probes.go | 51 +- pkg/network/encoding/format_test.go | 42 - pkg/network/encoding/format_usm_test.go | 83 + pkg/network/ephemeral_linux.go | 21 +- pkg/network/event_common.go | 11 - pkg/network/event_usm_common.go | 46 + pkg/network/protocols/amqp/client.go | 124 + pkg/network/protocols/amqp/server.go | 33 + .../amqp/testdata/docker-compose.yml | 9 + pkg/network/protocols/events/README.md | 73 + pkg/network/protocols/events/batch_offsets.go | 98 + .../protocols/events/batch_offsets_test.go | 113 + pkg/network/protocols/events/batch_reader.go | 119 + pkg/network/protocols/events/configuration.go | 79 + pkg/network/protocols/events/consumer.go | 214 + pkg/network/protocols/events/consumer_test.go | 168 + pkg/network/protocols/events/iterator.go | 58 + pkg/network/protocols/events/types.go | 22 + pkg/network/protocols/events/types_linux.go | 22 + pkg/network/protocols/events/worker_pool.go | 55 + pkg/network/protocols/grpc/monitor_test.go | 37 +- pkg/network/protocols/http/batch_manager.go | 127 - pkg/network/protocols/http/dump.go | 18 - pkg/network/protocols/http/ebpf_gotls.go | 117 +- pkg/network/protocols/http/ebpf_main.go | 174 +- pkg/network/protocols/http/ebpf_ssl.go | 18 +- .../protocols/http/etw_http_service.go | 5 +- pkg/network/protocols/http/http_statkeeper.go | 21 +- .../protocols/http/http_statkeeper_test.go | 30 +- pkg/network/protocols/http/http_types.go | 47 +- .../protocols/http/http_types_linux.go | 58 +- pkg/network/protocols/http/model_linux.go | 5 - pkg/network/protocols/http/model_windows.go | 7 +- pkg/network/protocols/http/monitor.go | 141 +- pkg/network/protocols/http/monitor_test.go | 32 +- pkg/network/protocols/http/monitor_windows.go | 34 +- .../protocols/http/monitor_windows_test.go | 75 + pkg/network/protocols/http/telemetry.go | 39 +- .../protocols/http/testutil/testutil.go | 3 +- pkg/network/protocols/mongo/client.go | 78 + pkg/network/protocols/mongo/server.go | 31 + .../mongo/testdata/docker-compose.yml | 9 + pkg/network/protocols/postgres/server.go | 27 + .../postgres/testdata/docker-compose.yml | 12 + pkg/network/protocols/postgres/utils.go | 138 + pkg/network/protocols/protocols_linux_test.go | 64 + .../network/protocols/redis/client.go | 16 +- pkg/network/protocols/redis/server.go | 25 + .../redis/testdata/docker-compose.yml | 9 + .../protocols/testutil/patternscanner.go | 47 + pkg/network/protocols/testutil/serverutils.go | 50 + .../tracer/connection/kprobe/config.go | 1 + .../tracer/connection/kprobe/manager.go | 1 + .../tracer/connection/kprobe/tracer.go | 11 +- pkg/network/tracer/tracer.go | 29 +- .../tracer/tracer_classification_test.go | 858 +- .../tracer_classification_windows_test.go | 2 +- pkg/network/tracer/tracer_linux_test.go | 23 +- pkg/network/tracer/tracer_test.go | 21 +- pkg/network/tracer/tracer_usm_linux_test.go | 6 +- pkg/obfuscate/cache.go | 2 +- pkg/obfuscate/go.mod | 2 +- pkg/obfuscate/go.sum | 4 +- pkg/obfuscate/obfuscate.go | 1 + pkg/obfuscate/sql.go | 16 +- pkg/obfuscate/sql_test.go | 190 +- pkg/obfuscate/sql_tokenizer.go | 49 +- pkg/obfuscate/testdata/json_tests.xml | 2 +- pkg/orchestrator/config/config.go | 21 +- pkg/orchestrator/config/config_test.go | 46 +- pkg/orchestrator/util.go | 6 + pkg/otlp/collector.go | 15 +- pkg/otlp/collector_test.go | 15 +- pkg/otlp/example/metric/README.md | 16 + pkg/otlp/example/metric/doc.go | 7 + pkg/otlp/example/metric/go.mod | 30 + pkg/otlp/example/metric/go.sum | 446 + pkg/otlp/example/metric/main.go | 148 + pkg/otlp/internal/configutils/utils.go | 8 +- pkg/otlp/internal/configutils/utils_test.go | 23 +- .../serializerexporter/consumer_test.go | 8 + .../internal/serializerexporter/exporter.go | 6 +- .../serializerexporter/exporter_test.go | 10 +- .../internal/serializerexporter/factory.go | 13 +- .../serializerexporter/factory_test.go | 16 +- pkg/otlp/map_provider.go | 4 +- pkg/otlp/model/go.mod | 8 +- pkg/otlp/model/go.sum | 18 +- pkg/pidfile/pidfile_windows.go | 20 +- pkg/process/checks/checks.go | 82 +- pkg/process/checks/container.go | 36 +- pkg/process/checks/container_rt.go | 36 +- pkg/process/checks/format.go | 14 +- pkg/process/checks/host_info.go | 158 + pkg/process/checks/host_info_test.go | 137 + pkg/process/checks/interval.go | 99 + pkg/process/checks/interval_test.go | 156 + pkg/process/checks/mocks/check.go | 71 +- .../checks/mocks/check_with_real_time.go | 144 - pkg/process/checks/net.go | 98 +- pkg/process/checks/net_test.go | 44 +- pkg/process/checks/pod.go | 42 +- pkg/process/checks/pod_null.go | 27 +- pkg/process/checks/process.go | 227 +- pkg/process/checks/process_common_test.go | 4 +- pkg/process/checks/process_discovery_check.go | 37 +- .../checks/process_discovery_check_test.go | 26 +- pkg/process/checks/process_events_fallback.go | 25 +- pkg/process/checks/process_events_linux.go | 41 +- .../checks/process_events_linux_test.go | 7 +- pkg/process/checks/process_nix_test.go | 40 +- pkg/process/checks/process_rt.go | 39 +- pkg/process/checks/process_rt_test.go | 27 +- pkg/process/checks/process_test.go | 201 +- pkg/process/checks/runner.go | 2 +- pkg/process/checks/runner_test.go | 6 +- pkg/process/checks/system_info.go | 4 +- pkg/process/checks/system_info_darwin.go | 4 +- pkg/process/checks/system_info_windows.go | 4 +- pkg/process/config/config.go | 460 - pkg/process/config/config_nix.go | 12 - pkg/process/config/config_nix_test.go | 100 - pkg/process/config/config_test.go | 556 - .../testdata/TestDDAgentConfig-NetConfig.yaml | 2 - .../TestDDAgentConfig-OOMKillOnly.yaml | 2 - .../TestDDAgentConfigBothVersions.yaml | 7 - ...tConfigYamlAndSystemProbeConfig-Net-2.yaml | 28 - ...gYamlAndSystemProbeConfig-Net-Windows.yaml | 7 - ...entConfigYamlAndSystemProbeConfig-Net.yaml | 7 - ...DDAgentConfigYamlAndSystemProbeConfig.yaml | 16 - .../testdata/TestDDAgentConfigYamlEnc.yaml | 5 - .../testdata/TestDDAgentConfigYamlEnc2.yaml | 6 - .../testdata/TestDDAgentConfigYamlOnly-2.yaml | 13 - .../testdata/TestDDAgentConfigYamlOnly-3.yaml | 9 - .../testdata/TestDDAgentConfigYamlOnly-4.yaml | 13 - .../testdata/TestDDAgentConfigYamlOnly-5.yaml | 7 - .../testdata/TestDDAgentConfigYamlOnly-6.yaml | 6 - ...DDAgentConfigYamlOnly-InvalidHostname.yaml | 5 - .../testdata/TestDDAgentConfigYamlOnly.yaml | 14 - .../testdata/TestEnvSiteConfig-Enc.yaml | 8 - pkg/process/config/testdata/secret.go | 47 - pkg/process/config/yaml_config.go | 131 - pkg/process/monitor/process_monitor.go | 360 + pkg/process/monitor/process_monitor_test.go | 176 + pkg/process/net/mocks/sys_probe_util.go | 2 +- .../{config => procutil}/data_scrubber.go | 12 +- .../data_scrubber_test.go | 24 +- pkg/process/procutil/mocks/probe.go | 2 +- pkg/process/util/status.go | 51 +- pkg/process/util/status_test.go | 25 +- .../datadog/remoteconfig/remoteconfig.proto | 1 + pkg/proto/pbgo/remoteconfig.pb.go | 367 +- pkg/remoteconfig/state/configs.go | 71 +- pkg/sbom/forwarder.go | 59 + pkg/secrets/check_rights_nix.go | 52 - pkg/secrets/check_rights_nix_test.go | 19 - pkg/secrets/check_rights_windows.go | 98 +- pkg/secrets/check_rights_windows_test.go | 13 +- pkg/secrets/fetch_secret.go | 93 +- pkg/secrets/fetch_secret_test.go | 70 +- pkg/secrets/info.go | 19 +- pkg/secrets/info_windows.go | 6 +- pkg/secrets/no_secrets.go | 5 +- pkg/secrets/secrets.go | 20 +- ...urity_module__get_process_events_client.go | 2 +- .../api/mocks/security_module_client.go | 2 +- .../api/mocks/security_module_server.go | 2 +- pkg/security/config/config.go | 2 +- pkg/security/ebpf/c/activity_dump.h | 2 + .../ebpf/c/activity_dump_ratelimiter_test.h | 128 + pkg/security/ebpf/c/baloum.h | 106 + pkg/security/ebpf/c/defs.h | 1 + pkg/security/ebpf/c/dentry_resolver.h | 1 + pkg/security/ebpf/c/discarders.h | 23 +- pkg/security/ebpf/c/discarders_test.h | 194 + pkg/security/ebpf/c/exec.h | 447 +- pkg/security/ebpf/c/prebuilt/probe.c | 5 + pkg/security/ebpf/c/process.h | 7 +- pkg/security/ebpf/c/syscalls.h | 19 +- pkg/security/ebpf/c/tests.h | 7 + pkg/security/ebpf/c/utils.h | 7 + pkg/security/ebpf/loader.go | 13 + pkg/security/ebpf/probes/const.go | 9 + pkg/security/ebpf/probes/event_types.go | 8 +- pkg/security/ebpf/probes/exec.go | 75 +- .../tests/activity_dump_ratelimiter_test.go | 47 + pkg/security/ebpf/tests/discarders_test.go | 47 + pkg/security/ebpf/tests/helpers_test.go | 100 + pkg/security/events/custom.go | 90 + pkg/security/module/event.go | 1 + pkg/security/module/module.go | 56 +- pkg/security/module/policy_monitor.go | 114 +- .../module/policy_monitor_easyjson.go | 321 + pkg/security/module/process_monitor.go | 9 +- pkg/security/module/rate_limiter.go | 6 +- pkg/security/module/rule_filters_model.go | 5 - .../module/rule_filters_model_linux.go | 36 +- pkg/security/module/self_tests.go | 53 + pkg/security/module/self_tests_easyjson.go | 151 + pkg/security/module/server.go | 19 +- pkg/security/probe/accessors.go | 33004 --------------- pkg/security/probe/activity_dump.go | 36 +- pkg/security/probe/activity_dump_manager.go | 13 +- .../probe/activity_dump_manager_test.go | 18 +- .../probe/activity_dump_proto_dec_v1.go | 4 +- pkg/security/probe/activity_dump_test.go | 13 +- pkg/security/probe/applier.go | 5 +- pkg/security/probe/approvers_test.go | 9 +- .../probe/constantfetch/btfhub/constants.json | 11049 +++-- .../probe/constantfetch/constant_names.go | 3 + pkg/security/probe/constantfetch/fallback.go | 69 + pkg/security/probe/custom_events.go | 264 +- pkg/security/probe/custom_events_easyjson.go | 484 +- pkg/security/probe/discarders.go | 42 +- pkg/security/probe/discarders_test.go | 90 +- pkg/security/probe/field_handlers.go | 477 + pkg/security/probe/fields_resolver.go | 562 - pkg/security/probe/load_controller.go | 6 +- pkg/security/probe/model.go | 625 +- pkg/security/probe/model_test.go | 56 +- pkg/security/probe/namespace_resolver.go | 10 +- pkg/security/probe/perfmap.go | 13 + pkg/security/probe/probe.go | 279 +- pkg/security/probe/probe_monitor.go | 56 +- pkg/security/probe/process_resolver.go | 51 +- pkg/security/probe/process_resolver_test.go | 14 +- pkg/security/probe/resolvers.go | 51 +- .../probe/resolvers/cgroups_resolver.go | 4 +- .../probe/resolvers/mount_resolver.go | 104 +- pkg/security/probe/resolvers/tc_resolver.go | 178 + pkg/security/probe/selftests/tester.go | 7 +- pkg/security/probe/serializers.go | 159 +- pkg/security/probe/variables.go | 3 +- pkg/security/rconfig/rconfig.go | 63 +- pkg/security/secl/compiler/eval/context.go | 22 +- pkg/security/secl/compiler/eval/eval.go | 75 +- pkg/security/secl/compiler/eval/eval_test.go | 186 +- pkg/security/secl/compiler/eval/event.go | 3 - pkg/security/secl/compiler/eval/macro.go | 40 +- pkg/security/secl/compiler/eval/model_test.go | 82 +- .../secl/compiler/eval/oo_dns_name_test.go | 31 +- .../secl/compiler/eval/oo_glob_cmp_test.go | 16 +- pkg/security/secl/compiler/eval/opts.go | 97 +- pkg/security/secl/compiler/eval/rule.go | 56 +- pkg/security/secl/compiler/eval/state.go | 4 +- .../generators/accessors/accessors.go | 101 +- .../generators/accessors/accessors.tmpl | 64 +- ...elds_resolver.tmpl => field_handlers.tmpl} | 27 +- pkg/security/secl/go.mod | 4 +- pkg/security/secl/go.sum | 8 +- pkg/security/secl/model/accessors.go | 13605 +++--- pkg/security/secl/model/field_handlers.go | 673 + pkg/security/secl/model/model.go | 130 +- pkg/security/secl/model/oo_symlink.go | 12 +- .../secl/model/process_cache_entry.go | 18 +- pkg/security/secl/model/syscalls.go | 3 - .../secl/model/syscalls_string_linux_amd64.go | 2 +- .../secl/model/syscalls_string_linux_arm64.go | 2 +- pkg/security/secl/model/unmarshallers.go | 5 +- pkg/security/secl/model/variables.go | 2 +- pkg/security/secl/rules/approvers.go | 2 +- pkg/security/secl/rules/model_test.go | 18 +- pkg/security/secl/rules/policy_test.go | 35 +- pkg/security/secl/rules/rule_filters.go | 9 +- pkg/security/secl/rules/ruleset.go | 58 +- pkg/security/secl/rules/ruleset_test.go | 20 +- pkg/security/tests/activity_dumps_test.go | 80 + pkg/security/tests/bind_test.go | 26 +- pkg/security/tests/bpf_test.go | 13 +- pkg/security/tests/chmod_test.go | 20 +- pkg/security/tests/chown32_test.go | 44 +- pkg/security/tests/chown_test.go | 40 +- pkg/security/tests/dentry_test.go | 15 +- pkg/security/tests/dns_test.go | 20 +- pkg/security/tests/event_monitoring_test.go | 108 + pkg/security/tests/fields_test.go | 6 +- pkg/security/tests/filters_test.go | 10 +- pkg/security/tests/hardlink_test.go | 10 +- pkg/security/tests/kernel_module_test.go | 25 +- pkg/security/tests/link_test.go | 16 +- pkg/security/tests/macros_test.go | 4 +- pkg/security/tests/mkdir_test.go | 10 +- pkg/security/tests/mmap_test.go | 7 +- pkg/security/tests/module_tester.go | 258 +- pkg/security/tests/mount_test.go | 36 +- pkg/security/tests/mprotect_test.go | 7 +- pkg/security/tests/network_device_test.go | 7 +- pkg/security/tests/network_test.go | 8 +- pkg/security/tests/open_test.go | 30 +- pkg/security/tests/overlayfs_test.go | 54 +- pkg/security/tests/probe_monitor_test.go | 16 +- pkg/security/tests/process_test.go | 246 +- pkg/security/tests/ptrace_test.go | 8 +- pkg/security/tests/rename_test.go | 42 +- pkg/security/tests/rmdir_test.go | 10 +- pkg/security/tests/schemas.go | 119 +- pkg/security/tests/selinux_test.go | 36 +- pkg/security/tests/serializers_test.go | 7 +- pkg/security/tests/signal_test.go | 14 +- pkg/security/tests/span_test.go | 14 +- pkg/security/tests/splice_test.go | 8 +- pkg/security/tests/stress_test.go | 8 +- .../tests/syscall_tester/c/syscall_tester.c | 35 +- pkg/security/tests/unlink_test.go | 10 +- pkg/security/tests/utimes_test.go | 8 +- pkg/security/tests/xattr_test.go | 14 +- pkg/security/utils/proc.go | 9 +- pkg/serializer/internal/stream/compressor.go | 4 +- .../internal/stream/json_payload_builder.go | 2 +- pkg/serializer/serializer.go | 105 +- pkg/serializer/serializer_test.go | 124 +- pkg/serializer/test_common.go | 16 +- pkg/serializer/types_contimage.go | 13 + pkg/serializer/types_sbom.go | 13 + pkg/serverless/daemon/daemon.go | 14 +- pkg/serverless/daemon/daemon_test.go | 4 +- pkg/serverless/daemon/routes.go | 1 - .../executioncontext/executioncontext.go | 9 - .../invocationlifecycle/invocation_details.go | 1 - .../invocationlifecycle/lifecycle_test.go | 6 +- pkg/serverless/logs/logs_collector.go | 6 +- pkg/serverless/logs/logs_test.go | 16 +- pkg/serverless/logs/parse.go | 3 +- .../registration/telemetry_api_test.go | 7 +- pkg/serverless/serverless.go | 2 +- pkg/serverless/serverless_test.go | 19 +- .../trace/cold_start_span_creator.go | 90 +- .../trace/cold_start_span_creator_test.go | 81 +- .../trace/inferredspan/inferred_span.go | 2 +- .../inferredspan/span_enrichment_test.go | 6 +- pkg/serverless/trace/span_modifier.go | 14 +- .../api-gateway-non-proxy-async.json | 2 +- .../event_samples/api-gateway-non-proxy.json | 2 +- .../event_samples/eventbridge-custom.json | 2 +- .../testdata/event_samples/http-api.json | 2 +- .../testdata/event_samples/kinesis-batch.json | 8 +- .../trace/testdata/event_samples/kinesis.json | 4 +- .../testdata/event_samples/sns-batch.json | 12 +- .../trace/testdata/event_samples/sns.json | 6 +- .../trace/testdata/event_samples/snssqs.json | 4 +- .../testdata/event_samples/sqs-batch.json | 4 +- .../trace/testdata/event_samples/sqs.json | 2 +- pkg/serverless/trace/trace.go | 14 +- pkg/serverless/trace/trace_test.go | 17 +- .../trigger/testData/eventbridge-custom.json | 2 +- pkg/status/templates/process-agent.tmpl | 5 + pkg/tagger/remote/tagger.go | 24 +- pkg/trace/api/api.go | 86 +- pkg/trace/api/api_test.go | 70 +- pkg/trace/api/container.go | 4 +- pkg/trace/api/container_linux.go | 5 +- pkg/trace/api/container_linux_test.go | 5 +- pkg/trace/api/debugger.go | 2 +- pkg/trace/api/evp_proxy.go | 5 +- pkg/trace/api/evp_proxy_test.go | 7 +- pkg/trace/api/fuzz_test.go | 5 +- pkg/trace/api/internal/header/headers.go | 57 + pkg/trace/api/otlp.go | 121 +- pkg/trace/api/otlp_test.go | 75 +- pkg/trace/api/pipeline_stats.go | 2 +- pkg/trace/api/profiles.go | 2 +- pkg/trace/api/responses.go | 3 +- pkg/trace/api/telemetry.go | 3 +- pkg/trace/api/version.go | 53 +- pkg/trace/config/config.go | 8 +- pkg/trace/go.mod | 10 +- pkg/trace/go.sum | 21 +- pkg/trace/pb/decoder_v05.go | 6 + pkg/trace/pb/decoder_v05_test.go | 14 + .../remoteconfighandler/mock_remote_client.go | 46 +- pkg/trace/traceutil/normalize.go | 42 + pkg/util/aggregatingqueue/queue.go | 78 + pkg/util/aggregatingqueue/queue_test.go | 69 + pkg/util/containerd/containerd_util.go | 14 +- pkg/util/containerd/containerd_util_test.go | 4 +- pkg/util/containerd/fake/containerd_util.go | 12 +- pkg/util/containers/image.go | 16 +- pkg/util/containers/image_test.go | 24 +- pkg/util/dmi/dmi_mock.go | 38 + .../dmi/dmi_nix.go} | 25 +- pkg/util/dmi/dmi_nix_test.go | 39 + pkg/util/dmi/dmi_windows.go | 37 + pkg/util/dmi/dmi_windows_mock.go | 27 + pkg/util/ec2/ec2.go | 45 +- pkg/util/ec2/ec2_test.go | 77 + pkg/util/fargate/detection.go | 17 +- pkg/util/fargate/hostname_process.go | 2 +- pkg/util/filesystem/permission_nowindows.go | 19 +- .../filesystem/permission_nowindows_test.go | 45 + pkg/util/filesystem/permission_windows.go | 5 + pkg/util/hostname/common.go | 4 +- pkg/util/hostname/common_test.go | 4 +- pkg/util/hostname/providers_test.go | 4 +- pkg/util/hostname/validate/normalize.go | 20 + pkg/util/jsonquery/yaml.go | 17 + pkg/util/jsonquery/yaml_test.go | 32 + pkg/util/kernel/arch.go | 2 +- pkg/util/kernel/find_headers.go | 29 +- pkg/util/kernel/find_headers_test.go | 17 +- pkg/util/kernel/fs.go | 3 +- pkg/util/kubernetes/apiserver/apiserver.go | 18 + .../kubernetes/apiserver/apiserver_kubelet.go | 2 +- pkg/util/pointer/pointer.go | 5 + pkg/util/profiling/profiling.go | 1 + pkg/util/profiling/profiling_test.go | 1 + pkg/util/profiling/settings.go | 5 +- pkg/util/static_tags.go | 6 +- pkg/util/static_tags_test.go | 10 +- pkg/util/use_bare_configs.go | 15 - pkg/util/winutil/process.go | 37 + pkg/util/winutil/scmmonitor.go | 203 + pkg/util/winutil/scmmonitor_test.go | 88 + pkg/util/winutil/users.go | 20 + .../internal/containerd/containerd.go | 62 +- .../internal/containerd/event_builder_test.go | 2 +- .../collectors/internal/containerd/image.go | 361 + .../internal/containerd/image_test.go | 45 + .../collectors/internal/docker/docker.go | 8 +- .../collectors/internal/kubelet/kubelet.go | 11 +- .../collectors/internal/podman/podman_test.go | 2 + pkg/workloadmeta/store.go | 10 + pkg/workloadmeta/store_test.go | 52 + pkg/workloadmeta/testing/store.go | 10 + pkg/workloadmeta/types.go | 13 +- release.json | 4 +- ...erticalPodAutoscaler-fb7eec91762e05a4.yaml | 11 + ...h-in-get-acl-command-b4c123c26759a1e1.yaml | 3 + .../LowerTraceLimit-839236eacc69d87a.yaml | 11 + ...nmp.device_up-metric-65a7855a959af675.yaml | 10 + ...erface_status-metric-13fb0f54fd11f197.yaml | 10 + ...lizedTagImprovements-374203de9f436f90.yaml | 11 + ..._agent_check_command-c166bec4ff8ebf96.yaml | 11 + .../notes/apm-fix-info-0ac3d9106e780798.yaml | 3 + ...iers-square-brackets-a2ee7a4f029694e1.yaml | 4 + .../apm-max-cpu-mem-feb99ac256073f7c.yaml | 6 + ...-cmdline-args-compat-05fc525c6f6dea01.yaml | 13 + .../notes/bump-wheel-218fcf0e14839ed5.yaml | 4 + .../container_image-22cddfd6c194def9.yaml | 11 + ...ix-obfuscator-logger-8c6a4debbf3a0bf6.yaml | 4 + .../fixwinhttploopback-cec77f41a8feff7f.yaml | 12 + ...us-headless-services-6733bb93198c76f4.yaml | 11 + ...e-hostname-detection-0a468e1c3a53b3df.yaml | 12 + ...nt-dynamic-profiling-0aece4cec9ca7526.yaml | 3 + .../pymem-telemetry-0f62acb520d80a1f.yaml | 2 + ...ove-cca-in-ad-config-4a8bd6e0816b8656.yaml | 11 + ...g-API-keys-as-params-1cec05cf38b99b71.yaml | 8 + ...ire-admin-for-ddtray-5a087c08fc8d2f4c.yaml | 4 + releasenotes/notes/sbom-01e923031b7d118b.yaml | 11 + ..._metadata_interfaces-ff310a683f997bc1.yaml | 11 + ...ldp_remote_device_ip-07aedf702830c8a5.yaml | 11 + ...-in-prometheusScrape-47d13a051221057d.yaml | 3 + ...update-python-3-8-16-63368caf05939bfa.yaml | 4 + ...pdate-sql-obfuscator-d34b610e911bbc0f.yaml | 32 - ...-for-ec2-instance-id-47eb7188442b3cf1.yaml | 5 + .../notes/v0.68.0-otel-f1571b993848d654.yaml | 11 + rtloader/include/datadog_agent_rtloader.h | 13 + rtloader/include/rtloader.h | 26 +- rtloader/include/rtloader_types.h | 4 + rtloader/rtloader/api.cpp | 16 + rtloader/rtloader/rtloader.cpp | 7 + rtloader/three/CMakeLists.txt | 1 + rtloader/three/three.cpp | 3 + rtloader/three/three.h | 96 + rtloader/three/three_mem.cpp | 185 + tasks/__init__.py | 2 + tasks/agent.py | 22 + tasks/build_tags.py | 16 +- tasks/libs/junit_upload.py | 19 + tasks/libs/pipeline_data.py | 2 +- tasks/libs/pipeline_notifications.py | 2 +- tasks/modules.py | 1 + tasks/process_agent.py | 1 + tasks/security_agent.py | 68 +- tasks/system_probe.py | 209 +- tasks/systray.py | 18 +- tasks/test.py | 155 +- tasks/vscode.py | 72 + .../Generate-Chocolatey-Package.ps1 | 7 + tasks/winbuildscripts/sysprobe.ps1 | 2 +- .../benchmarks/apm_scripts/analyze-results.sh | 24 + .../capture-hardware-software-info.sh | 27 + .../benchmarks/apm_scripts/post-pr-comment.sh | 5 + test/benchmarks/apm_scripts/run-benchmarks.sh | 11 + .../apm_scripts/upload-results-to-s3.sh | 8 + test/e2e/containers/fake_datadog/README.md | 40 + .../fake_datadog/docker-compose.yaml | 13 + test/e2e/cws-tests/requirements.txt | 2 +- test/integration/serverless/log_normalize.py | 219 + test/integration/serverless/parse-json.js | 17 - .../serverless/recorder-extension/main.go | 29 +- test/integration/serverless/run.sh | 107 +- test/integration/serverless/serverless.yml | 4 +- .../serverless/snapshots/appsec-csharp | 12 +- .../serverless/snapshots/appsec-java | 18 +- .../serverless/snapshots/error-csharp | 194 +- .../serverless/snapshots/error-java | 182 +- .../serverless/snapshots/error-node | 198 +- .../serverless/snapshots/error-proxy | 194 +- .../serverless/snapshots/error-python | 198 +- .../serverless/snapshots/log-csharp | 104 +- test/integration/serverless/snapshots/log-go | 104 +- .../integration/serverless/snapshots/log-java | 122 +- .../integration/serverless/snapshots/log-node | 122 +- .../serverless/snapshots/log-proxy | 132 +- .../serverless/snapshots/log-python | 104 +- .../serverless/snapshots/metric-csharp | 182 +- .../serverless/snapshots/metric-go | 194 +- .../serverless/snapshots/metric-java | 182 +- .../serverless/snapshots/metric-node | 188 +- .../serverless/snapshots/metric-proxy | 182 +- .../serverless/snapshots/metric-python | 188 +- .../serverless/snapshots/timeout-csharp | 4 +- .../serverless/snapshots/timeout-go | 4 +- .../serverless/snapshots/timeout-java | 4 +- .../serverless/snapshots/timeout-node | 4 +- .../serverless/snapshots/timeout-proxy | 4 +- .../serverless/snapshots/timeout-python | 4 +- .../serverless/snapshots/trace-csharp | 14 +- .../integration/serverless/snapshots/trace-go | 45 +- .../serverless/snapshots/trace-java | 61 +- .../serverless/snapshots/trace-node | 127 +- .../serverless/snapshots/trace-proxy | 4 +- .../serverless/snapshots/trace-python | 33 +- test/kitchen/drivers/azure-driver.yml | 34 +- test/kitchen/drivers/ec2-driver.yml | 15 +- .../recipes/_stop_windows_agent.rb | 13 +- .../dd-system-probe-check/.gitignore | 1 + .../dd-system-probe-check/metadata.rb | 1 + .../recipes/docker_installation.rb | 56 + .../dd-system-probe-check/recipes/linux.rb | 48 + test/kitchen/tasks/run-test-kitchen.sh | 22 +- .../integration/common/rspec/spec_helper.rb | 22 +- .../system-probe-test/rspec/Gemfile | 4 - .../rspec/win-all-subservices_spec.rb | 4 +- .../win-user/rspec/win-user_spec.rb | 4 +- test/new-e2e/containers/ecs_test.go | 79 + test/new-e2e/containers/main_test.go | 25 + test/new-e2e/go.mod | 104 + test/new-e2e/go.sum | 503 + .../ndm/snmp/compose/data/apc_ups.snmprec | 613 + .../ndm/snmp/compose/data/args_list.txt | 14 + .../ndm/snmp/compose/data/arista.snmprec | 75 + .../compose/data/aruba-access-point.snmprec | 7 + .../snmp/compose/data/aruba-switch.snmprec | 21 + .../ndm/snmp/compose/data/aruba.snmprec | 272 + .../snmp/compose/data/chatsworth_pdu.snmprec | 1026 + .../compose/data/checkpoint-firewall.snmprec | 4027 ++ .../snmp/compose/data/cisco-asa-5525.snmprec | 1478 + .../ndm/snmp/compose/data/cisco-asa.snmprec | 1478 + .../snmp/compose/data/cisco-catalyst.snmprec | 136 + .../snmp/compose/data/cisco-csr1000v.snmprec | 24 + .../ndm/snmp/compose/data/cisco-nexus.snmprec | 3275 ++ .../ndm/snmp/compose/data/cisco_icm.snmprec | 230 + .../ndm/snmp/compose/data/constraint.snmprec | 2 + .../snmp/compose/data/dell-poweredge.snmprec | 3487 ++ .../ndm/snmp/compose/data/dummy.snmprec | 5 + .../ndm/snmp/compose/data/entity.snmprec | 67 + .../ndm/snmp/compose/data/f5-big-ip.snmprec | 34555 ++++++++++++++++ .../compose/data/fortinet-fortigate.snmprec | 77 + .../snmp/compose/data/generic-router.snmprec | 1008 + .../snmp/compose/data/generic_host.snmprec | 23 + .../ndm/snmp/compose/data/hp-ilo4.snmprec | 891 + .../snmp/compose/data/hpe-proliant.snmprec | 1857 + .../ndm/snmp/compose/data/idrac.snmprec | 1207 + test/new-e2e/ndm/snmp/compose/data/if.snmprec | 2364 ++ .../ndm/snmp/compose/data/isilon.snmprec | 283 + .../compose/data/juniper-ex-variation.snmprec | 292 + .../ndm/snmp/compose/data/juniper-ex.snmprec | 296 + .../compose/data/juniper-mx-variation.snmprec | 105 + .../ndm/snmp/compose/data/juniper-mx.snmprec | 109 + .../data/juniper-srx-variation.snmprec | 85 + .../ndm/snmp/compose/data/juniper-srx.snmprec | 89 + .../data/meraki-cloud-controller.snmprec | 96 + .../ndm/snmp/compose/data/netapp.snmprec | 676 + .../ndm/snmp/compose/data/palo-alto.snmprec | 78 + .../ndm/snmp/compose/data/public.snmprec | 3988 ++ .../snmp/compose/data/public_delay.snmprec | 126 + .../new-e2e/ndm/snmp/compose/snmpCompose.yaml | 15 + test/new-e2e/ndm/snmp/config/public.yaml | 7 + test/new-e2e/ndm/snmp/snmpTestEnv.go | 139 + test/new-e2e/scenarios/ndm/main.go | 38 + test/new-e2e/utils/clients/aws.go | 61 + test/new-e2e/utils/clients/ssh.go | 60 + test/new-e2e/utils/credentials/manager.go | 37 + test/new-e2e/utils/credentials/store-aws.go | 31 + test/new-e2e/utils/credentials/store.go | 44 + test/new-e2e/utils/infra/stack_manager.go | 162 + test/regression/README.md | 30 + .../conf.d/disk-listener.d/conf.yaml | 5 + .../datadog-agent/datadog.yaml | 12 + .../file_to_blackhole/lading/lading.yaml | 16 + .../datadog-agent/datadog.yaml | 31 + .../otel_to_otel_logs/lading/lading.yaml | 23 + .../conf.d/tcp-listener.d/conf.yaml | 9 + .../datadog-agent/datadog.yaml | 14 + .../lading/lading.yaml | 15 + .../conf.d/tcp-listener.d/conf.yaml | 5 + .../datadog-agent/datadog.yaml | 14 + .../lading/lading.yaml | 15 + tools/agent_QA/test_cases/containers.py | 18 +- 1112 files changed, 115684 insertions(+), 65684 deletions(-) create mode 100644 .github/workflows/do-not-merge.yml create mode 100644 .gitlab/benchmarks/benchmarks.yml create mode 100644 .gitlab/functional_test/regression_detector.yml create mode 100644 cmd/agent/gui/agent_test.go delete mode 100644 cmd/cluster-agent/app/clusterchecks.go delete mode 100644 cmd/cluster-agent/app/compliance_cmd.go delete mode 100644 cmd/cluster-agent/app/config.go delete mode 100644 cmd/cluster-agent/app/config_check.go delete mode 100644 cmd/cluster-agent/app/diagnose.go delete mode 100644 cmd/cluster-agent/app/flare.go delete mode 100644 cmd/cluster-agent/app/metadata_mapper_digest.go delete mode 100644 cmd/cluster-agent/app/secret_helper.go delete mode 100644 cmd/cluster-agent/app/status.go delete mode 100644 cmd/cluster-agent/app/telemetry.go create mode 100644 cmd/cluster-agent/command/command.go delete mode 100644 cmd/cluster-agent/commands/check/check.go delete mode 100644 cmd/cluster-agent/commands/check/setup.go delete mode 100644 cmd/cluster-agent/commands/clusterchecks.go delete mode 100644 cmd/cluster-agent/commands/configcheck.go delete mode 100644 cmd/cluster-agent/commands/health.go create mode 100644 cmd/cluster-agent/subcommands/check/command.go create mode 100644 cmd/cluster-agent/subcommands/clusterchecks/command.go create mode 100644 cmd/cluster-agent/subcommands/compliance/command.go create mode 100644 cmd/cluster-agent/subcommands/config/command.go create mode 100644 cmd/cluster-agent/subcommands/configcheck/command.go create mode 100644 cmd/cluster-agent/subcommands/diagnose/command.go create mode 100644 cmd/cluster-agent/subcommands/flare/command.go create mode 100644 cmd/cluster-agent/subcommands/health/command.go create mode 100644 cmd/cluster-agent/subcommands/metamap/command.go create mode 100644 cmd/cluster-agent/subcommands/secrethelper/command.go rename cmd/cluster-agent/{app/app.go => subcommands/start/command.go} (57%) create mode 100644 cmd/cluster-agent/subcommands/start/command_test.go rename cmd/cluster-agent/{app => subcommands/start}/compliance.go (98%) create mode 100644 cmd/cluster-agent/subcommands/status/command.go create mode 100644 cmd/cluster-agent/subcommands/subcommands.go create mode 100644 cmd/cluster-agent/subcommands/telemetry/command.go create mode 100644 cmd/cluster-agent/subcommands/version/command.go create mode 100644 cmd/dogstatsd/command/command.go rename pkg/process/config/config_darwin.go => cmd/dogstatsd/generate.go (55%) rename cmd/dogstatsd/{main.go => subcommands/start/command.go} (74%) rename cmd/dogstatsd/{main_test.go => subcommands/start/command_test.go} (73%) create mode 100644 cmd/process-agent/mocks/submitter.go create mode 100644 cmd/process-agent/submitter.go create mode 100644 cmd/process-agent/submitter_test.go delete mode 100644 cmd/security-agent/app/subcommands/config/config.go rename cmd/{cluster-agent/app/health.go => security-agent/command/command.go} (54%) delete mode 100644 cmd/security-agent/commands/config/config.go create mode 100644 cmd/security-agent/flags/flags_common.go delete mode 100644 cmd/security-agent/main_windows.go rename cmd/security-agent/{app => }/subcommands/check/command.go (65%) create mode 100644 cmd/security-agent/subcommands/check/command_test.go rename cmd/security-agent/{app => }/subcommands/check/command_unsupported.go (71%) rename cmd/security-agent/{app => }/subcommands/check/reporter.go (100%) rename cmd/security-agent/{app => }/subcommands/compliance/command.go (58%) create mode 100644 cmd/security-agent/subcommands/compliance/command_kubeapiserver_test.go create mode 100644 cmd/security-agent/subcommands/compliance/command_test.go rename cmd/security-agent/{app => }/subcommands/compliance/compliance.go (92%) rename cmd/{cluster-agent/commands => security-agent/subcommands}/config/config.go (77%) rename cmd/security-agent/{app => }/subcommands/config/config_unsupported.go (73%) rename cmd/security-agent/{app => }/subcommands/flare/command.go (79%) create mode 100644 cmd/security-agent/subcommands/flare/command_test.go rename cmd/security-agent/{app => }/subcommands/runtime/activity_dump.go (86%) rename cmd/security-agent/{app => }/subcommands/runtime/command.go (81%) rename cmd/security-agent/{app => }/subcommands/runtime/command_unsupported.go (90%) rename cmd/security-agent/{app => }/subcommands/status/command.go (76%) create mode 100644 cmd/security-agent/subcommands/status/command_test.go rename cmd/security-agent/{app => }/subcommands/version/command.go (61%) create mode 100644 cmd/security-agent/subcommands/version/command_test.go delete mode 100644 cmd/security-agent/windows_resources/security-agent-msg.mc delete mode 100644 cmd/security-agent/windows_resources/security-agent-msg.rc delete mode 100644 cmd/security-agent/windows_resources/security-agent.rc delete mode 100644 cmd/security-agent/windows_resources/version.h create mode 100644 cmd/systray/command/command.go create mode 100644 cmd/systray/main_windows.go delete mode 100644 cmd/systray/systray.go create mode 100644 comp/core/config/params.go create mode 100644 comp/core/config/params_test.go create mode 100644 comp/core/flare/component.go create mode 100644 comp/core/flare/flare.go create mode 100644 comp/core/flare/helpers/builder.go create mode 100644 comp/core/flare/helpers/builder_mock.go create mode 100644 comp/core/flare/helpers/builder_test.go create mode 100644 comp/core/flare/helpers/helpers.go rename pkg/process/config/config_windows.go => comp/core/flare/helpers/perm_info.go (55%) create mode 100644 comp/core/flare/helpers/perm_info_nix.go create mode 100644 comp/core/flare/helpers/perm_info_nix_test.go create mode 100644 comp/core/flare/helpers/perm_info_win.go create mode 100644 comp/core/flare/helpers/perm_info_win_test.go delete mode 100644 comp/core/internal/params.go delete mode 100644 comp/core/internal/params_test.go create mode 100644 comp/core/log/params.go create mode 100644 comp/core/log/params_test.go create mode 100644 comp/process/bundle.go create mode 100644 comp/process/bundle_test.go create mode 100644 comp/process/containercheck/check.go create mode 100644 comp/process/containercheck/component.go create mode 100644 comp/process/processcheck/check.go create mode 100644 comp/process/processcheck/component.go create mode 100644 comp/process/runner/component.go create mode 100644 comp/process/runner/runner.go create mode 100644 comp/process/submitter/component.go create mode 100644 comp/process/submitter/submitter.go create mode 100644 comp/process/types/check.go rename pkg/metadata/inventories/host_metadata_win.go => comp/systray/bundle.go (72%) create mode 100644 comp/systray/systray/component.go rename {cmd => comp/systray}/systray/doconfigure.go (74%) rename {cmd => comp/systray}/systray/doflare.go (79%) rename {cmd => comp/systray}/systray/doservicecontrol.go (65%) create mode 100644 comp/systray/systray/systray.go create mode 100644 comp/systray/systray/uac.c rename cmd/cluster-agent/app/dummy.go => comp/systray/systray/uac.h (52%) create mode 100644 docs/components/migrating-to-components.md delete mode 100644 pkg/autodiscovery/providers/kubecontainer.go delete mode 100644 pkg/autodiscovery/providers/kubecontainer_test.go delete mode 100644 pkg/autodiscovery/providers/kubelet.go delete mode 100644 pkg/autodiscovery/providers/kubelet_test.go delete mode 100644 pkg/autodiscovery/simple_configmgr.go create mode 100644 pkg/cli/subcommands/clusterchecks/command.go create mode 100644 pkg/cli/subcommands/clusterchecks/command_test.go create mode 100644 pkg/cli/subcommands/dcaconfigcheck/command.go create mode 100644 pkg/cli/subcommands/dcaconfigcheck/command_test.go create mode 100644 pkg/clusteragent/admission/common/lib_config.go create mode 100644 pkg/clusteragent/admission/common/lib_config_test.go create mode 100644 pkg/clusteragent/admission/patch/file_provider.go create mode 100644 pkg/clusteragent/admission/patch/patch_request.go create mode 100644 pkg/clusteragent/admission/patch/patch_request_test.go create mode 100644 pkg/clusteragent/admission/patch/patcher.go create mode 100644 pkg/clusteragent/admission/patch/patcher_test.go create mode 100644 pkg/clusteragent/admission/patch/provider.go create mode 100644 pkg/clusteragent/admission/patch/rc_provider.go create mode 100644 pkg/clusteragent/admission/patch/rc_provider_test.go create mode 100644 pkg/clusteragent/admission/patch/start.go create mode 100644 pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/verticalpodautoscaler.go create mode 100644 pkg/collector/corechecks/cluster/orchestrator/processors/k8s/verticalpodautoscaler.go create mode 100644 pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/verticalpodautoscaler.go create mode 100644 pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/verticalpodautoscaler_test.go create mode 100644 pkg/collector/corechecks/containerimage/check.go create mode 100644 pkg/collector/corechecks/containerimage/processor.go create mode 100644 pkg/collector/corechecks/containerimage/processor_test.go create mode 100644 pkg/collector/corechecks/sbom/check.go create mode 100644 pkg/collector/corechecks/sbom/convert.go create mode 100644 pkg/collector/corechecks/sbom/convert_test.go create mode 100644 pkg/collector/corechecks/sbom/processor.go create mode 100644 pkg/collector/corechecks/sbom/processor_test.go rename pkg/collector/corechecks/snmp/{profile_test.go => profile_metadata_test.go} (88%) delete mode 100644 pkg/compliance/agent/node_labels.go create mode 100644 pkg/containerimage/forwarder.go create mode 100644 pkg/ebpf/bytecode/runtime/all_helpers.go delete mode 100644 pkg/ebpf/bytecode/runtime/conntrack.go create mode 100644 pkg/ebpf/bytecode/runtime/helpers.go create mode 100644 pkg/ebpf/bytecode/runtime/helpers_test.go delete mode 100644 pkg/ebpf/bytecode/runtime/http.go delete mode 100644 pkg/ebpf/bytecode/runtime/oom-kill.go delete mode 100644 pkg/ebpf/bytecode/runtime/tcp-queue-length.go delete mode 100644 pkg/ebpf/bytecode/runtime/tracer.go delete mode 100644 pkg/flare/archive_linux_test.go delete mode 100644 pkg/flare/archive_nix_test.go delete mode 100644 pkg/flare/archive_win_test.go delete mode 100644 pkg/flare/dca_telemetry.go delete mode 100644 pkg/flare/metadata.go delete mode 100644 pkg/logs/internal/launchers/docker/container.go delete mode 100644 pkg/logs/internal/launchers/docker/container_test.go delete mode 100644 pkg/logs/internal/launchers/docker/launcher.go delete mode 100644 pkg/logs/internal/launchers/docker/launcher_nix.go delete mode 100644 pkg/logs/internal/launchers/docker/launcher_nix_test.go delete mode 100644 pkg/logs/internal/launchers/docker/launcher_nodocker.go delete mode 100644 pkg/logs/internal/launchers/docker/launcher_test.go delete mode 100644 pkg/logs/internal/launchers/docker/launcher_windows.go delete mode 100644 pkg/logs/internal/launchers/docker/launcher_windows_test.go delete mode 100644 pkg/logs/internal/launchers/docker/since.go delete mode 100644 pkg/logs/internal/launchers/docker/since_test.go delete mode 100644 pkg/logs/internal/launchers/kubernetes/launcher.go delete mode 100644 pkg/logs/internal/launchers/kubernetes/launcher_nokubelet.go delete mode 100644 pkg/logs/internal/launchers/kubernetes/launcher_test.go delete mode 100644 pkg/metadata/inventories/host_metadata_nix_test.go create mode 100644 pkg/network/ebpf/c/prebuilt/usm_events_test.c create mode 100644 pkg/network/ebpf/c/protocols/amqp-defs.h create mode 100644 pkg/network/ebpf/c/protocols/amqp-helpers.h create mode 100644 pkg/network/ebpf/c/protocols/events-types.h create mode 100644 pkg/network/ebpf/c/protocols/events.h create mode 100644 pkg/network/ebpf/c/protocols/http-classification-defs.h create mode 100644 pkg/network/ebpf/c/protocols/http-classification-helpers.h create mode 100644 pkg/network/ebpf/c/protocols/http2-decoding-defs.h create mode 100644 pkg/network/ebpf/c/protocols/http2-helpers.h delete mode 100644 pkg/network/ebpf/c/protocols/http2.h create mode 100644 pkg/network/ebpf/c/protocols/mongo-defs.h create mode 100644 pkg/network/ebpf/c/protocols/mongo-helpers.h create mode 100644 pkg/network/ebpf/c/protocols/postgres-defs.h create mode 100644 pkg/network/ebpf/c/protocols/postgres-helpers.h create mode 100644 pkg/network/ebpf/c/protocols/protocol-classification-common.h delete mode 100644 pkg/network/ebpf/c/protocols/protocol-classification-helpers.h create mode 100644 pkg/network/ebpf/c/protocols/protocol-classification-structs.h create mode 100644 pkg/network/ebpf/c/protocols/protocol-classification.h create mode 100644 pkg/network/ebpf/c/protocols/redis-defs.h create mode 100644 pkg/network/ebpf/c/protocols/redis-helpers.h create mode 100644 pkg/network/ebpf/c/protocols/sql-defs.h create mode 100644 pkg/network/ebpf/c/protocols/sql-helpers.h create mode 100644 pkg/network/encoding/format_usm_test.go create mode 100644 pkg/network/event_usm_common.go create mode 100644 pkg/network/protocols/amqp/client.go create mode 100644 pkg/network/protocols/amqp/server.go create mode 100644 pkg/network/protocols/amqp/testdata/docker-compose.yml create mode 100644 pkg/network/protocols/events/README.md create mode 100644 pkg/network/protocols/events/batch_offsets.go create mode 100644 pkg/network/protocols/events/batch_offsets_test.go create mode 100644 pkg/network/protocols/events/batch_reader.go create mode 100644 pkg/network/protocols/events/configuration.go create mode 100644 pkg/network/protocols/events/consumer.go create mode 100644 pkg/network/protocols/events/consumer_test.go create mode 100644 pkg/network/protocols/events/iterator.go create mode 100644 pkg/network/protocols/events/types.go create mode 100644 pkg/network/protocols/events/types_linux.go create mode 100644 pkg/network/protocols/events/worker_pool.go delete mode 100644 pkg/network/protocols/http/batch_manager.go create mode 100644 pkg/network/protocols/http/monitor_windows_test.go create mode 100644 pkg/network/protocols/mongo/client.go create mode 100644 pkg/network/protocols/mongo/server.go create mode 100644 pkg/network/protocols/mongo/testdata/docker-compose.yml create mode 100644 pkg/network/protocols/postgres/server.go create mode 100644 pkg/network/protocols/postgres/testdata/docker-compose.yml create mode 100644 pkg/network/protocols/postgres/utils.go create mode 100644 pkg/network/protocols/protocols_linux_test.go rename cmd/cluster-agent/app/check.go => pkg/network/protocols/redis/client.go (53%) create mode 100644 pkg/network/protocols/redis/server.go create mode 100644 pkg/network/protocols/redis/testdata/docker-compose.yml create mode 100644 pkg/network/protocols/testutil/patternscanner.go create mode 100644 pkg/network/protocols/testutil/serverutils.go create mode 100644 pkg/otlp/example/metric/README.md create mode 100644 pkg/otlp/example/metric/doc.go create mode 100644 pkg/otlp/example/metric/go.mod create mode 100644 pkg/otlp/example/metric/go.sum create mode 100644 pkg/otlp/example/metric/main.go create mode 100644 pkg/process/checks/host_info.go create mode 100644 pkg/process/checks/host_info_test.go create mode 100644 pkg/process/checks/interval.go create mode 100644 pkg/process/checks/interval_test.go delete mode 100644 pkg/process/checks/mocks/check_with_real_time.go delete mode 100644 pkg/process/config/config.go delete mode 100644 pkg/process/config/config_nix.go delete mode 100644 pkg/process/config/config_nix_test.go delete mode 100644 pkg/process/config/config_test.go delete mode 100644 pkg/process/config/testdata/TestDDAgentConfig-NetConfig.yaml delete mode 100644 pkg/process/config/testdata/TestDDAgentConfig-OOMKillOnly.yaml delete mode 100644 pkg/process/config/testdata/TestDDAgentConfigBothVersions.yaml delete mode 100644 pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net-2.yaml delete mode 100644 pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net-Windows.yaml delete mode 100644 pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net.yaml delete mode 100644 pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig.yaml delete mode 100644 pkg/process/config/testdata/TestDDAgentConfigYamlEnc.yaml delete mode 100644 pkg/process/config/testdata/TestDDAgentConfigYamlEnc2.yaml delete mode 100644 pkg/process/config/testdata/TestDDAgentConfigYamlOnly-2.yaml delete mode 100644 pkg/process/config/testdata/TestDDAgentConfigYamlOnly-3.yaml delete mode 100644 pkg/process/config/testdata/TestDDAgentConfigYamlOnly-4.yaml delete mode 100644 pkg/process/config/testdata/TestDDAgentConfigYamlOnly-5.yaml delete mode 100644 pkg/process/config/testdata/TestDDAgentConfigYamlOnly-6.yaml delete mode 100644 pkg/process/config/testdata/TestDDAgentConfigYamlOnly-InvalidHostname.yaml delete mode 100644 pkg/process/config/testdata/TestDDAgentConfigYamlOnly.yaml delete mode 100644 pkg/process/config/testdata/TestEnvSiteConfig-Enc.yaml delete mode 100644 pkg/process/config/testdata/secret.go delete mode 100644 pkg/process/config/yaml_config.go create mode 100644 pkg/process/monitor/process_monitor.go create mode 100644 pkg/process/monitor/process_monitor_test.go rename pkg/process/{config => procutil}/data_scrubber.go (94%) rename pkg/process/{config => procutil}/data_scrubber_test.go (98%) create mode 100644 pkg/sbom/forwarder.go create mode 100644 pkg/security/ebpf/c/activity_dump_ratelimiter_test.h create mode 100644 pkg/security/ebpf/c/baloum.h create mode 100644 pkg/security/ebpf/c/discarders_test.h create mode 100644 pkg/security/ebpf/c/tests.h create mode 100644 pkg/security/ebpf/c/utils.h create mode 100644 pkg/security/ebpf/tests/activity_dump_ratelimiter_test.go create mode 100644 pkg/security/ebpf/tests/discarders_test.go create mode 100644 pkg/security/ebpf/tests/helpers_test.go create mode 100644 pkg/security/events/custom.go create mode 100644 pkg/security/module/policy_monitor_easyjson.go create mode 100644 pkg/security/module/self_tests.go create mode 100644 pkg/security/module/self_tests_easyjson.go delete mode 100644 pkg/security/probe/accessors.go create mode 100644 pkg/security/probe/field_handlers.go delete mode 100644 pkg/security/probe/fields_resolver.go create mode 100644 pkg/security/probe/resolvers/tc_resolver.go rename pkg/security/secl/compiler/generators/accessors/{fields_resolver.tmpl => field_handlers.tmpl} (83%) create mode 100644 pkg/security/secl/model/field_handlers.go create mode 100644 pkg/security/tests/event_monitoring_test.go create mode 100644 pkg/serializer/types_contimage.go create mode 100644 pkg/serializer/types_sbom.go create mode 100644 pkg/trace/api/internal/header/headers.go create mode 100644 pkg/util/aggregatingqueue/queue.go create mode 100644 pkg/util/aggregatingqueue/queue_test.go create mode 100644 pkg/util/dmi/dmi_mock.go rename pkg/{metadata/inventories/host_metadata_nix.go => util/dmi/dmi_nix.go} (59%) create mode 100644 pkg/util/dmi/dmi_nix_test.go create mode 100644 pkg/util/dmi/dmi_windows.go create mode 100644 pkg/util/dmi/dmi_windows_mock.go create mode 100644 pkg/util/filesystem/permission_nowindows_test.go create mode 100644 pkg/util/jsonquery/yaml_test.go delete mode 100644 pkg/util/use_bare_configs.go create mode 100644 pkg/util/winutil/scmmonitor.go create mode 100644 pkg/util/winutil/scmmonitor_test.go create mode 100644 pkg/workloadmeta/collectors/internal/containerd/image.go create mode 100644 pkg/workloadmeta/collectors/internal/containerd/image_test.go create mode 100644 releasenotes-dca/notes/VerticalPodAutoscaler-fb7eec91762e05a4.yaml create mode 100644 releasenotes/notes/Escape-path-in-get-acl-command-b4c123c26759a1e1.yaml create mode 100644 releasenotes/notes/LowerTraceLimit-839236eacc69d87a.yaml create mode 100644 releasenotes/notes/NDM---Add-snmp.device_up-metric-65a7855a959af675.yaml create mode 100644 releasenotes/notes/NDM---Add-snmp.interface_status-metric-13fb0f54fd11f197.yaml create mode 100644 releasenotes/notes/PortNormalizedTagImprovements-374203de9f436f90.yaml create mode 100644 releasenotes/notes/add_instance_filter_to_agent_check_command-c166bec4ff8ebf96.yaml create mode 100644 releasenotes/notes/apm-fix-info-0ac3d9106e780798.yaml create mode 100644 releasenotes/notes/apm-fix-parsing-sqlserver-identifiers-square-brackets-a2ee7a4f029694e1.yaml create mode 100644 releasenotes/notes/apm-max-cpu-mem-feb99ac256073f7c.yaml create mode 100644 releasenotes/notes/break-ddtray-cmdline-args-compat-05fc525c6f6dea01.yaml create mode 100644 releasenotes/notes/bump-wheel-218fcf0e14839ed5.yaml create mode 100644 releasenotes/notes/container_image-22cddfd6c194def9.yaml create mode 100644 releasenotes/notes/fix-obfuscator-logger-8c6a4debbf3a0bf6.yaml create mode 100644 releasenotes/notes/fixwinhttploopback-cec77f41a8feff7f.yaml create mode 100644 releasenotes/notes/ignore-prometheus-headless-services-6733bb93198c76f4.yaml create mode 100644 releasenotes/notes/improve-ecs-fargate-hostname-detection-0a468e1c3a53b3df.yaml create mode 100644 releasenotes/notes/process-agent-dynamic-profiling-0aece4cec9ca7526.yaml create mode 100644 releasenotes/notes/pymem-telemetry-0f62acb520d80a1f.yaml create mode 100644 releasenotes/notes/remove-cca-in-ad-config-4a8bd6e0816b8656.yaml create mode 100644 releasenotes/notes/remove-sending-API-keys-as-params-1cec05cf38b99b71.yaml create mode 100644 releasenotes/notes/require-admin-for-ddtray-5a087c08fc8d2f4c.yaml create mode 100644 releasenotes/notes/sbom-01e923031b7d118b.yaml create mode 100644 releasenotes/notes/snmp_add_ip_addresses_to_ndm_metadata_interfaces-ff310a683f997bc1.yaml create mode 100644 releasenotes/notes/snmp_lldp_remote_device_ip-07aedf702830c8a5.yaml create mode 100644 releasenotes/notes/tag_by_endpoint-support-in-prometheusScrape-47d13a051221057d.yaml create mode 100644 releasenotes/notes/update-python-3-8-16-63368caf05939bfa.yaml delete mode 100644 releasenotes/notes/update-sql-obfuscator-d34b610e911bbc0f.yaml create mode 100644 releasenotes/notes/use-dmi-for-ec2-instance-id-47eb7188442b3cf1.yaml create mode 100644 releasenotes/notes/v0.68.0-otel-f1571b993848d654.yaml create mode 100644 rtloader/three/three_mem.cpp create mode 100755 test/benchmarks/apm_scripts/analyze-results.sh create mode 100755 test/benchmarks/apm_scripts/capture-hardware-software-info.sh create mode 100755 test/benchmarks/apm_scripts/post-pr-comment.sh create mode 100755 test/benchmarks/apm_scripts/run-benchmarks.sh create mode 100755 test/benchmarks/apm_scripts/upload-results-to-s3.sh create mode 100644 test/e2e/containers/fake_datadog/docker-compose.yaml create mode 100644 test/integration/serverless/log_normalize.py delete mode 100644 test/integration/serverless/parse-json.js create mode 100644 test/kitchen/site-cookbooks/dd-system-probe-check/recipes/docker_installation.rb delete mode 100644 test/kitchen/test/integration/system-probe-test/rspec/Gemfile create mode 100644 test/new-e2e/containers/ecs_test.go create mode 100644 test/new-e2e/containers/main_test.go create mode 100644 test/new-e2e/go.mod create mode 100644 test/new-e2e/go.sum create mode 100644 test/new-e2e/ndm/snmp/compose/data/apc_ups.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/args_list.txt create mode 100644 test/new-e2e/ndm/snmp/compose/data/arista.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/aruba-access-point.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/aruba-switch.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/aruba.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/chatsworth_pdu.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/checkpoint-firewall.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/cisco-asa-5525.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/cisco-asa.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/cisco-catalyst.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/cisco-csr1000v.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/cisco-nexus.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/cisco_icm.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/constraint.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/dell-poweredge.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/dummy.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/entity.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/f5-big-ip.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/fortinet-fortigate.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/generic-router.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/generic_host.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/hp-ilo4.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/hpe-proliant.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/idrac.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/if.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/isilon.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/juniper-ex-variation.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/juniper-ex.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/juniper-mx-variation.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/juniper-mx.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/juniper-srx-variation.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/juniper-srx.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/meraki-cloud-controller.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/netapp.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/palo-alto.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/public.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/data/public_delay.snmprec create mode 100644 test/new-e2e/ndm/snmp/compose/snmpCompose.yaml create mode 100644 test/new-e2e/ndm/snmp/config/public.yaml create mode 100644 test/new-e2e/ndm/snmp/snmpTestEnv.go create mode 100644 test/new-e2e/scenarios/ndm/main.go create mode 100644 test/new-e2e/utils/clients/aws.go create mode 100644 test/new-e2e/utils/clients/ssh.go create mode 100644 test/new-e2e/utils/credentials/manager.go create mode 100644 test/new-e2e/utils/credentials/store-aws.go create mode 100644 test/new-e2e/utils/credentials/store.go create mode 100644 test/new-e2e/utils/infra/stack_manager.go create mode 100644 test/regression/README.md create mode 100644 test/regression/cases/file_to_blackhole/datadog-agent/conf.d/disk-listener.d/conf.yaml create mode 100644 test/regression/cases/file_to_blackhole/datadog-agent/datadog.yaml create mode 100644 test/regression/cases/file_to_blackhole/lading/lading.yaml create mode 100644 test/regression/cases/otel_to_otel_logs/datadog-agent/datadog.yaml create mode 100644 test/regression/cases/otel_to_otel_logs/lading/lading.yaml create mode 100644 test/regression/cases/tcp_dd_logs_filter_exclude/datadog-agent/conf.d/tcp-listener.d/conf.yaml create mode 100644 test/regression/cases/tcp_dd_logs_filter_exclude/datadog-agent/datadog.yaml create mode 100644 test/regression/cases/tcp_dd_logs_filter_exclude/lading/lading.yaml create mode 100644 test/regression/cases/tcp_syslog_to_blackhole/datadog-agent/conf.d/tcp-listener.d/conf.yaml create mode 100644 test/regression/cases/tcp_syslog_to_blackhole/datadog-agent/datadog.yaml create mode 100644 test/regression/cases/tcp_syslog_to_blackhole/lading/lading.yaml diff --git a/.circleci/images/runner/Dockerfile b/.circleci/images/runner/Dockerfile index 6431e17efd7b0a..57cb140d930b92 100644 --- a/.circleci/images/runner/Dockerfile +++ b/.circleci/images/runner/Dockerfile @@ -12,6 +12,7 @@ RUN set -ex \ && apt-get update && apt-get upgrade -y \ && apt-get install -y --no-install-recommends \ curl \ + default-jre \ doxygen \ file \ g++ \ diff --git a/.copyright-overrides.yml b/.copyright-overrides.yml index 120b480b4d2c20..9dbc543c372d87 100644 --- a/.copyright-overrides.yml +++ b/.copyright-overrides.yml @@ -74,9 +74,10 @@ github.com/DataDog/mmh3: Copyright (c) 2017 Datadog, Inc. # not scanned automatically. github.com/tklauser/numcpus: Copyright 2018 Tobias Klauser github.com/Masterminds/goutils: "Copyright 2014 Alexander Okoli" -github.com/dgraph-io/ristretto: +github.com/outcaste-io/ristretto: - "Copyright 2019 Dgraph Labs, Inc. and Contributors" - "Copyright 2020 Dgraph Labs, Inc. and Contributors" + - "Copyright 2021 Dgraph Labs, Inc. and Contributors" - "Copyright 2020 The LevelDB-Go and Pebble Authors. All rights reserved." - "Copyright (c) 2014 Andreas Briese, eduToolbox@Bri-C GmbH, Sarstedt" - "Copyright (c) 2019 Ewan Chou" @@ -126,3 +127,4 @@ gomodules.xyz/jsonpatch: Copyright (c) 2015 The Authors github.com/bytecodealliance/wasmtime-go: Copyright (c) 2020 The Bytecode Alliance github.com/OneOfOne/xxhash: Copyright (c) 2014 Ahmed W. (OneOfOne) github.com/yashtewari/glob-intersection: Copyright (c) 2018 Yash Tewari (yashtewari) +go.mongodb.org/mongo-driver/*: Copyright © 2018 MongoDB, Inc. diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 294ef450b24dac..a8e21cc3b4af2a 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -96,6 +96,8 @@ /.gitlab/choco_build.yml @DataDog/agent-platform @DataDog/windows-agent /.gitlab/choco_deploy.yml @DataDog/agent-platform @DataDog/windows-agent +/.gitlab/benchmarks/benchmarks.yml @DataDog/agent-apm + /chocolatey/ @DataDog/windows-agent /cmd/ @DataDog/agent-shared-components @@ -174,6 +176,8 @@ # BEGIN COMPONENTS /comp @DataDog/agent-shared-components /comp/core @DataDog/agent-shared-components +/comp/process @DataDog/processes +/comp/systray @DataDog/windows-agent # END COMPONENTS # pkg @@ -209,6 +213,7 @@ /pkg/collector/corechecks/cluster/ @DataDog/container-integrations /pkg/collector/corechecks/cluster/orchestrator @DataDog/container-app /pkg/collector/corechecks/containers/ @DataDog/container-integrations +/pkg/collector/corechecks/containerimage/ @DataDog/container-integrations /pkg/collector/corechecks/containerlifecycle/ @DataDog/container-integrations /pkg/collector/corechecks/ebpf/ @DataDog/container-integrations /pkg/collector/corechecks/embed/ @Datadog/agent-platform @@ -216,6 +221,7 @@ /pkg/collector/corechecks/embed/apm*.go @Datadog/agent-platform @DataDog/agent-apm /pkg/collector/corechecks/embed/process_agent*.go @Datadog/agent-platform @DataDog/processes /pkg/collector/corechecks/net/ @DataDog/agent-platform +/pkg/collector/corechecks/sbom/ @DataDog/container-integrations /pkg/collector/corechecks/snmp/ @DataDog/network-device-monitoring /pkg/collector/corechecks/system/ @DataDog/agent-platform /pkg/collector/corechecks/system/**/*_windows*.go @DataDog/agent-platform @DataDog/windows-agent @@ -247,6 +253,7 @@ /pkg/serializer/ @DataDog/agent-metrics-logs /pkg/tagger/ @DataDog/container-integrations /pkg/tagset/ @DataDog/agent-shared-components +/pkg/util/aggregatingqueue @DataDog/container-integrations /pkg/util/cloudproviders/cloudfoundry/ @DataDog/platform-integrations /pkg/util/clusteragent/ @DataDog/container-integrations /pkg/util/containerd/ @DataDog/container-integrations @@ -273,21 +280,27 @@ /pkg/proto/pbgo/ # do not notify anyone /pkg/orchestrator/ @DataDog/container-app /pkg/network/ @DataDog/Networks +/pkg/network/*usm* @DataDog/universal-service-monitoring /pkg/network/*_windows*.go @DataDog/windows-kernel-integrations /pkg/network/driver_*.go @DataDog/windows-kernel-integrations /pkg/network/dns/*_windows*.go @DataDog/windows-kernel-integrations /pkg/network/driver/ @DataDog/windows-kernel-integrations +/pkg/network/ebpf/c/prebuilt/usm* @DataDog/universal-service-monitoring +/pkg/network/ebpf/c/runtime/usm* @DataDog/universal-service-monitoring /pkg/network/ebpf/c/prebuilt/http* @DataDog/universal-service-monitoring /pkg/network/ebpf/c/runtime/http* @DataDog/universal-service-monitoring /pkg/network/ebpf/c/protocols/ @DataDog/universal-service-monitoring /pkg/network/encoding/http* @DataDog/universal-service-monitoring +/pkg/network/encoding/*usm* @DataDog/universal-service-monitoring /pkg/network/etw/ @DataDog/windows-kernel-integrations /pkg/network/go/ @DataDog/universal-service-monitoring /pkg/network/protocols/ @DataDog/universal-service-monitoring /pkg/network/protocols/http/driver_*.go @DataDog/windows-kernel-integrations +/pkg/network/protocols/http/etw_*.go @DataDog/windows-kernel-integrations /pkg/network/protocols/http/*_windows*.go @DataDog/windows-kernel-integrations /pkg/network/tracer/*classification*.go @DataDog/universal-service-monitoring /pkg/network/tracer/testutil/gotls_client @DataDog/universal-service-monitoring +/pkg/network/tracer/testutil/postgres @DataDog/universal-service-monitoring /pkg/network/tracer/tracer_usm_linux_test.go @DataDog/universal-service-monitoring /pkg/network/tracer/*_windows*.go @DataDog/windows-kernel-integrations /pkg/ebpf/ @DataDog/ebpf-platform @@ -350,8 +363,10 @@ /test/kitchen/test/integration/win-reinstall-option/ @DataDog/windows-agent /test/kitchen/test/integration/win-repair/ @DataDog/windows-agent /test/kitchen/test/integration/win-user/ @DataDog/windows-agent +/test/new-e2e/ @DataDog/agent-e2e-testing /test/system/ @DataDog/agent-shared-components /test/system/dogstatsd/ @DataDog/agent-metrics-logs +/test/benchmarks/apm_scripts/ @DataDog/agent-apm /tools/ @DataDog/agent-platform /tools/ebpf/ @DataDog/ebpf-platform diff --git a/.github/workflows/do-not-merge.yml b/.github/workflows/do-not-merge.yml new file mode 100644 index 00000000000000..70846ecd4c91c9 --- /dev/null +++ b/.github/workflows/do-not-merge.yml @@ -0,0 +1,20 @@ +# Fails a pull request if a label contains `do-not-merge` +# credit: https://github.com/jessesquires/gh-workflows/blob/main/.github/workflows/do-not-merge.yml + +name: Do Not Merge + +on: + pull_request: + types: [synchronize, opened, reopened, labeled, unlabeled] + +jobs: + do-not-merge: + if: ${{ contains(github.event.*.labels.*.name, 'do-not-merge/hold') || contains(github.event.*.labels.*.name, 'do-not-merge/WIP') }} + name: Check Do Not Merge + runs-on: ubuntu-latest + steps: + - name: check for label + run: | + echo "Pull request is labeled as 'do-not-merge'" + echo "This workflow fails so that the pull request cannot be merged" + exit 1 diff --git a/.github/workflows/serverless-integration.yml b/.github/workflows/serverless-integration.yml index b3319bc5f64d93..e2bec6b45ed8f7 100644 --- a/.github/workflows/serverless-integration.yml +++ b/.github/workflows/serverless-integration.yml @@ -24,7 +24,7 @@ jobs: uses: actions/setup-node@v3 with: node-version: 14 - + - name: Install Serverless Framework run: sudo yarn global add serverless@^3.7.9 --prefix /usr/local @@ -45,8 +45,13 @@ jobs: uses: docker/setup-buildx-action@v2 - name: Run tests if AWS credentials are available + uses: nick-fields/retry@v2 env: AWS_ACCESS_KEY_ID: ${{ secrets.SERVERLESS_AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.SERVERLESS_AWS_SECRET_ACCESS_KEY }} - run: ARCHITECTURE=${{ matrix.architecture }} ./test/integration/serverless/run.sh - working-directory: go/src/github.com/DataDog/datadog-agent \ No newline at end of file + AWS_SECRET_ACCESS_KEY: ${{ secrets.SERVERLESS_AWS_SECRET_ACCESS_KEY }} + with: + timeout_minutes: 30 + max_attempts: 2 + command: | + cd go/src/github.com/DataDog/datadog-agent + ARCHITECTURE=${{ matrix.architecture }} ./test/integration/serverless/run.sh diff --git a/.gitignore b/.gitignore index a8e8cf7bed6937..792c183c5b316a 100644 --- a/.gitignore +++ b/.gitignore @@ -45,6 +45,9 @@ Dockerfiles/cluster-agent/dist Dockerfiles/cluster-agent/security-agent-policies pkg/status/template.go +# gotestsum-generated files +module_test_output.json + # jetbrains IDE directory /.idea/ @@ -109,6 +112,12 @@ system-probe-msg.h **/.ninja_deps *.ninja pkg/ebpf/bytecode/build/**/*.d +pkg/ebpf/bytecode/runtime/conntrack.go +pkg/ebpf/bytecode/runtime/http.go +pkg/ebpf/bytecode/runtime/oom-kill.go +pkg/ebpf/bytecode/runtime/runtime-security.go +pkg/ebpf/bytecode/runtime/tcp-queue-length.go +pkg/ebpf/bytecode/runtime/tracer.go pkg/security/tests/syscall_tester/**/*.d # dsd artifacts @@ -176,3 +185,6 @@ TAGS # cscope cscope.out + +# Go workspace until we have proper support in the tooling +go.work* diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 48dff9cf707066..cc45c8ed8f2c66 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -38,6 +38,7 @@ include: - /.gitlab/kitchen_common/cleanup.yml - /.gitlab/kitchen_common/testing.yml - /.gitlab/docker_common/publish_job_templates.yml + - /.gitlab/benchmarks/benchmarks.yml default: retry: @@ -61,6 +62,7 @@ stages: - binary_build - package_deps_build - integration_test + - benchmarks - package_build - internal_deploy - kitchen_deploy @@ -135,17 +137,18 @@ variables: ## comment out the line below to disable integration wheels cache INTEGRATION_WHEELS_CACHE_BUCKET: dd-agent-omnibus S3_DD_AGENT_OMNIBUS_LLVM_URI: s3://dd-agent-omnibus/llvm + S3_DD_AGENT_OMNIBUS_BTFS_URI: s3://dd-agent-omnibus/btfs GENERAL_ARTIFACTS_CACHE_BUCKET_URL: https://dd-agent-omnibus.s3.amazonaws.com S3_DSD6_URI: s3://dsd6-staging RELEASE_VERSION_6: nightly RELEASE_VERSION_7: nightly-a7 - DATADOG_AGENT_BUILDIMAGES: v11651098-faf0544 + DATADOG_AGENT_BUILDIMAGES: v12145148-530d89c DATADOG_AGENT_BUILDERS: v9930706-ef9d493 DATADOG_AGENT_WINBUILDIMAGES: v11651098-faf0544 DATADOG_AGENT_ARMBUILDIMAGES: v11651098-faf0544 DATADOG_AGENT_SYSPROBE_BUILDIMAGES: v11651098-faf0544 DATADOG_AGENT_NIKOS_BUILDIMAGES: v11651098-faf0544 - DATADOG_AGENT_BTF_GEN_BUILDIMAGES: v10582792-c2b9fb7 + DATADOG_AGENT_BTF_GEN_BUILDIMAGES: v11463399-6ff70af DATADOG_AGENT_EMBEDDED_PATH: /opt/datadog-agent/embedded NIKOS_INSTALL_DIR: /opt/datadog-agent/embedded/nikos NIKOS_EMBEDDED_PATH: /opt/datadog-agent/embedded/nikos/embedded @@ -166,7 +169,9 @@ variables: ARTIFACTORY_TOKEN_SSM_NAME: ci.datadog-agent.artifactory_token ARTIFACTORY_URL: datadog.jfrog.io ARTIFACTORY_GEMS_PATH: artifactory/api/gems/agent-gems + ARTIFACTORY_PYPI_PATH: artifactory/api/pypi/agent-pypi/simple USE_CACHING_PROXY_RUBY: "true" + USE_CACHING_PROXY_PYTHON: "true" CLANG_LLVM_VER: 12.0.1 # @@ -766,3 +771,11 @@ variables: - <<: *if_kitchen when: manual allow_failure: true + +.on_trace_agent_changes_or_manual: + - changes: + - pkg/trace/**/* + - .gitlab/benchmarks/* + when: on_success + - when: manual + allow_failure: true diff --git a/.gitlab/JOBOWNERS b/.gitlab/JOBOWNERS index facbc0215db97a..8a242e475142c7 100644 --- a/.gitlab/JOBOWNERS +++ b/.gitlab/JOBOWNERS @@ -51,6 +51,7 @@ deploy_containers* @DataDog/container-integrations kitchen_*_system_probe* @DataDog/ebpf-platform kitchen_*_security_agent* @DataDog/agent-security kitchen_*_process_agent* @DataDog/processes +pull_test_dockers @DataDog/universal-service-monitoring cleanup_kitchen_functional_test @DataDog/ebpf-platform @DataDog/agent-security serverless_cold_start_performance-deb_x64 @DataDog/serverless diff --git a/.gitlab/benchmarks/benchmarks.yml b/.gitlab/benchmarks/benchmarks.yml new file mode 100644 index 00000000000000..7c3231a68d98f3 --- /dev/null +++ b/.gitlab/benchmarks/benchmarks.yml @@ -0,0 +1,24 @@ +benchmark: + stage: benchmarks + # This base image is created here: https://gitlab.ddbuild.io/DataDog/apm-reliability/relenv-microbenchmarking-platform + image: 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/relenv-microbenchmarking-platform:trace-agent + timeout: 1h + rules: + !reference [.manual] # TODO: run this benchmark automatically when the trace-agent changes + interruptible: true + # tags: ["runner:apm-k8s-tweaked-metal"] # TODO: Commented out until we have the metal runners available in this repo + tags: ["runner:main"] + script: + - ./test/benchmarks/apm_scripts/capture-hardware-software-info.sh + - ./test/benchmarks/apm_scripts/run-benchmarks.sh + # - ./test/benchmarks/apm_scripts/upload-results-to-s3.sh #commented out until we have merged our permissions changes + - ./test/benchmarks/apm_scripts/analyze-results.sh + - ./test/benchmarks/apm_scripts/post-pr-comment.sh + artifacts: + name: "reports" + paths: + - reports/ + expire_in: 3 months + variables: + KUBERNETES_SERVICE_ACCOUNT_OVERWRITE: datadog-agent + FF_USE_LEGACY_KUBERNETES_EXECUTION_STRATEGY: "true" diff --git a/.gitlab/binary_build/system_probe.yml b/.gitlab/binary_build/system_probe.yml index 7a55e673b22fca..d80d299696b93c 100644 --- a/.gitlab/binary_build/system_probe.yml +++ b/.gitlab/binary_build/system_probe.yml @@ -29,6 +29,7 @@ - $S3_CP_CMD $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/runtime-security-syscall-wrapper.o $S3_ARTIFACTS_URI/runtime-security-syscall-wrapper.o.$ARCH - $S3_CP_CMD $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/runtime-security-offset-guesser.o $S3_ARTIFACTS_URI/runtime-security-offset-guesser.o.$ARCH - $S3_CP_CMD $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/co-re/oom-kill.o $S3_ARTIFACTS_URI/oom-kill-co-re.o.$ARCH + - $S3_CP_CMD $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/co-re/tcp-queue-length.o $S3_ARTIFACTS_URI/tcp-queue-length-co-re.o.$ARCH - $S3_CP_CMD $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/runtime/tracer.c $S3_ARTIFACTS_URI/tracer.c.$ARCH - $S3_CP_CMD $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/runtime/http.c $S3_ARTIFACTS_URI/http.c.$ARCH - $S3_CP_CMD $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/runtime/runtime-security.c $S3_ARTIFACTS_URI/runtime-security.c.$ARCH diff --git a/.gitlab/binary_build/windows.yml b/.gitlab/binary_build/windows.yml index 05491f9991abc1..e56b0ab2af7224 100644 --- a/.gitlab/binary_build/windows.yml +++ b/.gitlab/binary_build/windows.yml @@ -11,7 +11,16 @@ build_windows_container_entrypoint: - $ErrorActionPreference = "Stop" - '$_instance_id = (iwr -UseBasicParsing http://169.254.169.254/latest/meta-data/instance-id).content ; Write-Host "Running on instance $($_instance_id)"' - if (Test-Path build-out) { remove-item -recurse -force build-out } - - docker run --rm -m 4096M -v "$(Get-Location):c:\mnt" -e CI_JOB_ID=${CI_JOB_ID} -e WINDOWS_BUILDER=true -e AWS_NETWORKING=true -e TARGET_ARCH="$ARCH" 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:${Env:DATADOG_AGENT_WINBUILDIMAGES} c:\mnt\Dockerfiles\agent\windows\entrypoint\build.bat + - > + docker run --rm + -m 4096M + -v "$(Get-Location):c:\mnt" + -e CI_JOB_ID=${CI_JOB_ID} + -e WINDOWS_BUILDER=true + -e AWS_NETWORKING=true + -e TARGET_ARCH="$ARCH" + 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:${Env:DATADOG_AGENT_WINBUILDIMAGES} + c:\mnt\Dockerfiles\agent\windows\entrypoint\build.bat - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } - get-childitem build-out\${CI_JOB_ID} - copy build-out\${CI_JOB_ID}\*.exe ./entrypoint.exe diff --git a/.gitlab/choco_deploy.yml b/.gitlab/choco_deploy.yml index dcb8ee4a0a7a8c..94e4c8600a9b72 100644 --- a/.gitlab/choco_deploy.yml +++ b/.gitlab/choco_deploy.yml @@ -20,5 +20,10 @@ publish_choco_7_x64: - mkdir nupkg - copy omnibus\pkg\*.nupkg nupkg\ - Get-ChildItem nupkg - - docker run --rm -v "$(Get-Location):c:\mnt" -e CHOCOLATEY_API_KEY=${chocolateyApiKey} 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:$Env:DATADOG_AGENT_WINBUILDIMAGES c:\mnt\tasks\winbuildscripts\chocopush.bat + - > + docker run --rm + -v "$(Get-Location):c:\mnt" + -e CHOCOLATEY_API_KEY=${chocolateyApiKey} + 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:$Env:DATADOG_AGENT_WINBUILDIMAGES + c:\mnt\tasks\winbuildscripts\chocopush.bat - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } diff --git a/.gitlab/container_build/docker_linux.yml b/.gitlab/container_build/docker_linux.yml index 13430f7366dd9e..67c1b149f0dc1e 100644 --- a/.gitlab/container_build/docker_linux.yml +++ b/.gitlab/container_build/docker_linux.yml @@ -127,50 +127,17 @@ docker_build_agent7: TEST_IMG: "true" BUILD_ARG: --target release --build-arg PYTHON_VERSION=3 --build-arg DD_AGENT_ARTIFACT=datadog-agent_7*_amd64.deb -# NOTE this is a temporary workaround and the method taken in #14438 is -# preferred in the long-term. -docker_build_agent7_single_machine_performance: +single_machine_performance-amd64-a7: + extends: .docker_publish_job_definition stage: container_build - image: 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/docker_x64:$DATADOG_AGENT_BUILDIMAGES - tags: ["runner:docker"] rules: !reference [.on_a7] needs: - - job: agent_deb-x64-a7 - artifacts: false + - docker_build_agent7 variables: - BUILD_CONTEXT: Dockerfiles/agent - TAG_SUFFIX: -7 - ARCH: amd64 - TEST_IMG: "true" - BUILD_ARG: --target release --build-arg PYTHON_VERSION=3 --build-arg DD_AGENT_ARTIFACT=datadog-agent_7*_amd64.deb - script: - - aws s3 sync --only-show-errors $S3_ARTIFACTS_URI Dockerfiles/agent - # Setup AWS credentials for single-machine-performance AWS account - - SMP_ACCOUNT_ID=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.single-machine-performance-account-id --with-decryption --query "Parameter.Value" --out text) - - SMP_ECR_URL=${SMP_ACCOUNT_ID}.dkr.ecr.us-west-2.amazonaws.com - - SMP_AGENT_TEAM_ID=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.single-machine-performance-agent-team-id --with-decryption --query "Parameter.Value" --out text) - - aws configure set aws_access_key_id $(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.single-machine-performance-bot-access-key-id --with-decryption --query "Parameter.Value" --out text) --profile single-machine-performance - - aws configure set aws_secret_access_key $(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.single-machine-performance-bot-access-key --with-decryption --query "Parameter.Value" --out text) --profile single-machine-performance - - aws configure set region us-west-2 --profile single-machine-performance - # Login to Single Machine Performance ECR - - aws ecr get-login-password --profile single-machine-performance | docker login --username "AWS" --password-stdin "$SMP_ECR_URL" - # Calculate SMP tag, note that it must be deterministic and able to be - # computed across pipeline executions. - - TARGET_TAG=${SMP_ECR_URL}/${SMP_AGENT_TEAM_ID}-agent:${CI_COMMIT_SHA}${TAG_SUFFIX}-${ARCH} - # DockerHub login for build to limit rate limit when pulling base images - - DOCKER_REGISTRY_LOGIN=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.$DOCKER_REGISTRY_LOGIN_SSM_KEY --with-decryption --query "Parameter.Value" --out text) - - aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.$DOCKER_REGISTRY_PWD_SSM_KEY --with-decryption --query "Parameter.Value" --out text | docker login --username "$DOCKER_REGISTRY_LOGIN" --password-stdin "$DOCKER_REGISTRY_URL" - # Pull base images - - inv -e docker.pull-base-images $BUILD_CONTEXT/$ARCH/Dockerfile - # Build image - - docker build --build-arg CIBUILD=true --build-arg GENERAL_ARTIFACTS_CACHE_BUCKET_URL=${GENERAL_ARTIFACTS_CACHE_BUCKET_URL} $BUILD_ARG --file $BUILD_CONTEXT/$ARCH/Dockerfile --tag ${TARGET_TAG}-unsquashed $BUILD_CONTEXT - # Squash image, test, and push to ECR - - docker-squash ${TARGET_TAG}-unsquashed -t ${TARGET_TAG} - - test "$TEST_IMG" && docker run -v `pwd`/$BUILD_CONTEXT:/tmp/build ${TARGET_TAG} python /tmp/build/test_image_contents.py - - docker push $TARGET_TAG - # Workaround for temporary network failures - retry: 2 + IMG_REGISTRIES: internal-aws-smp + IMG_SOURCES: ${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-amd64 + IMG_DESTINATIONS: 08450328-agent:${CI_COMMIT_SHA}-7-amd64 docker_build_agent7_arm64: extends: .docker_build_job_definition_arm64 diff --git a/.gitlab/container_build/docker_windows.yml b/.gitlab/container_build/docker_windows.yml index da2d0e654d7553..23ebd16acb36d8 100644 --- a/.gitlab/container_build/docker_windows.yml +++ b/.gitlab/container_build/docker_windows.yml @@ -37,7 +37,15 @@ - get-childitem ${BUILD_CONTEXT} # Docker setup - cat ci-scripts/docker-login.ps1 - - docker run --rm -w C:\mnt -e AWS_NETWORKING=true -e SIGN_WINDOWS=true -v "$(Get-Location):C:\mnt" -v \\.\pipe\docker_engine:\\.\pipe\docker_engine 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_${Env:VARIANT}_x64:${Env:DATADOG_AGENT_WINBUILDIMAGES} powershell -C C:\mnt\ci-scripts\docker-login.ps1 + - > + docker run --rm + -w C:\mnt + -e AWS_NETWORKING=true + -e SIGN_WINDOWS=true + -v "$(Get-Location):C:\mnt" + -v \\.\pipe\docker_engine:\\.\pipe\docker_engine 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_${Env:VARIANT}_x64:${Env:DATADOG_AGENT_WINBUILDIMAGES} + powershell + -C C:\mnt\ci-scripts\docker-login.ps1 - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } - powershell -Command "docker build --no-cache --build-arg GENERAL_ARTIFACTS_CACHE_BUCKET_URL=${GENERAL_ARTIFACTS_CACHE_BUCKET_URL} ${BUILD_ARG} --pull --file ${BUILD_CONTEXT}/windows/amd64/Dockerfile --tag ${TARGET_TAG} ${BUILD_CONTEXT}" - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } diff --git a/.gitlab/deploy_7/winget.yml b/.gitlab/deploy_7/winget.yml index 29c5ee52da1637..ee08383a98183f 100644 --- a/.gitlab/deploy_7/winget.yml +++ b/.gitlab/deploy_7/winget.yml @@ -15,5 +15,12 @@ publish_winget_7_x64: script: - '$_instance_id = (iwr -UseBasicParsing http://169.254.169.254/latest/meta-data/instance-id).content ; Write-Host "Running on instance $($_instance_id)"' - $ErrorActionPreference = "Stop" - - docker run --rm -v "$(Get-Location):c:\mnt" -e WINGET_GITHUB_ACCESS_TOKEN=${wingetPat} -e GENERAL_ARTIFACTS_CACHE_BUCKET_URL=${GENERAL_ARTIFACTS_CACHE_BUCKET_URL} 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:$Env:DATADOG_AGENT_WINBUILDIMAGES Powershell -C "C:\mnt\tasks\winbuildscripts\Update-Winget.ps1" + - > + docker run --rm + -v "$(Get-Location):c:\mnt" + -e WINGET_GITHUB_ACCESS_TOKEN=${wingetPat} + -e GENERAL_ARTIFACTS_CACHE_BUCKET_URL=${GENERAL_ARTIFACTS_CACHE_BUCKET_URL} + 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:$Env:DATADOG_AGENT_WINBUILDIMAGES + Powershell + -C "C:\mnt\tasks\winbuildscripts\Update-Winget.ps1" - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } diff --git a/.gitlab/deps_build.yml b/.gitlab/deps_build.yml index 8bac5618b42b90..d8a3e65ee7c9e3 100644 --- a/.gitlab/deps_build.yml +++ b/.gitlab/deps_build.yml @@ -125,7 +125,13 @@ build_vcpkg_deps: - $ErrorActionPreference = "Stop" - '$_instance_id = (iwr -UseBasicParsing http://169.254.169.254/latest/meta-data/instance-id).content ; Write-Host "Running on instance $($_instance_id)"' - if (Test-Path build-out) { remove-item -recurse -force build-out } - - docker run --rm -m 4096M -v "$(Get-Location):c:\mnt" -e VCPKG_BINARY_SOURCES="clear;x-azblob,${vcpkgBlobSaSUrl},readwrite" 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:${Env:DATADOG_AGENT_WINBUILDIMAGES} C:\mnt\tasks\winbuildscripts\build_vcpkg_deps.bat + - > + docker run --rm + -m 4096M + -v "$(Get-Location):c:\mnt" + -e VCPKG_BINARY_SOURCES="clear;x-azblob,${vcpkgBlobSaSUrl},readwrite" + 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:${Env:DATADOG_AGENT_WINBUILDIMAGES} + C:\mnt\tasks\winbuildscripts\build_vcpkg_deps.bat - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } build_processed_btfhub_archive: @@ -138,7 +144,7 @@ build_processed_btfhub_archive: - git clone https://github.com/aquasecurity/btfhub-archive.git - cd btfhub-archive # Flatten btfhub-archive directories & separate arm/x64 btfs into separate directories - - dirs=("amzn/2" "centos/7" "centos/8" "debian/9" "debian/10" "fedora/29" "fedora/30" "fedora/31" "oracle-linux/ol7") + - dirs=("amzn/2" "centos/7" "centos/8" "debian/9" "debian/10" "fedora/29" "fedora/30" "fedora/31" "ol/7") - | for dir in ${dirs[@]}; do \ platform=${dir%%/*} &&\ @@ -146,8 +152,8 @@ build_processed_btfhub_archive: eval "mv ${dir}/x86_64/*.btf.tar.xz btfs-amd64/${platform}/" &&\ eval "mv ${dir}/arm64/*.btf.tar.xz btfs-arm64/${platform}/"; \ done - # Handle the amzn/1 directory separately because it doesn't have an arm64 version - - mv amzn/1/x86_64/* btfs-amd64/amzn/ + # Handle the amazon 2018 (amazon 1) directory separately because it doesn't have an arm64 version + - mv amzn/2018/x86_64/* btfs-amd64/amzn/ # Handle ubuntu separately because we want to keep the btfs separated by ubuntu version - mkdir -p btfs-amd64/ubuntu/18.04 btfs-amd64/ubuntu/20.04 btfs-arm64/ubuntu/18.04 btfs-arm64/ubuntu/20.04 - mv ubuntu/18.04/x86_64/*.btf.tar.xz btfs-amd64/ubuntu/18.04/ @@ -157,13 +163,15 @@ build_processed_btfhub_archive: # Clean up platform names to match the names we get at runtime from gopsutil - mv btfs-amd64/amzn btfs-amd64/amazon - mv btfs-arm64/amzn btfs-arm64/amazon - - mv btfs-amd64/oracle-linux btfs-amd64/oracle - - mv btfs-arm64/oracle-linux btfs-arm64/oracle + - mv btfs-amd64/ol btfs-amd64/oracle + - mv btfs-arm64/ol btfs-arm64/oracle # Store results in S3 - tar -czf btfs-arm64.tar.gz btfs-arm64 - tar -czf btfs-amd64.tar.gz btfs-amd64 - $S3_CP_CMD btfs-arm64.tar.gz $S3_PERMANENT_ARTIFACTS_URI/btfs-arm64.tar.gz - $S3_CP_CMD btfs-amd64.tar.gz $S3_PERMANENT_ARTIFACTS_URI/btfs-amd64.tar.gz + - $S3_CP_CMD btfs-arm64.tar.gz $S3_DD_AGENT_OMNIBUS_BTFS_URI/btfs-arm64.tar.gz --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers + - $S3_CP_CMD btfs-amd64.tar.gz $S3_DD_AGENT_OMNIBUS_BTFS_URI/btfs-amd64.tar.gz --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers artifacts: expire_in: 2 weeks paths: diff --git a/.gitlab/functional_test.yml b/.gitlab/functional_test.yml index 81d4f3715953f7..e747285fe2367d 100644 --- a/.gitlab/functional_test.yml +++ b/.gitlab/functional_test.yml @@ -6,3 +6,4 @@ include: - /.gitlab/functional_test/security_agent.yml - /.gitlab/functional_test/system_probe.yml - /.gitlab/functional_test/serverless.yml + - /.gitlab/functional_test/regression_detector.yml diff --git a/.gitlab/functional_test/regression_detector.yml b/.gitlab/functional_test/regression_detector.yml new file mode 100644 index 00000000000000..1a9562ffc79195 --- /dev/null +++ b/.gitlab/functional_test/regression_detector.yml @@ -0,0 +1,91 @@ +single-machine-performance-regression_detector: + stage: functional_test + image: 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/docker_x64:$DATADOG_AGENT_BUILDIMAGES + tags: ["runner:docker"] + needs: + - job: single_machine_performance-amd64-a7 + artifacts: false + artifacts: + expire_in: 1 weeks + paths: + - submission_metadata + variables: + GIT_STRATEGY: clone # pull the whole repo so we can compute baseline SHA + SMP_VERSION: 0.6.6-rc1 + LADING_VERSION: 0.11.2 + TOTAL_SAMPLES: 600 + WARMUP_SECONDS: 45 + REPLICAS: 10 + CPUS: 7 + MEMORY: "30g" + # At present we require two artifacts to exist for the 'baseline' and the + # 'comparison'. We are guaranteed by the structure of the pipeline that + # 'comparison' exists, not so much with 'baseline' as it has to come from main + # merge pipeline run. This is solved in Vector by building Vector twice each + # Regression Detector run but remains an unsolved problem for + # datadog-agent. So, we allow failure for now. + # + # _Unfortunately_ this also means that if the Regression Detector finds a + # performance issue with a PR it will not be flagged. + allow_failure: true + script: + # Setup AWS credentials for single-machine-performance AWS account + - AWS_NAMED_PROFILE="single-machine-performance" + - SMP_ACCOUNT_ID=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.single-machine-performance-account-id --with-decryption --query "Parameter.Value" --out text) + - SMP_ECR_URL=${SMP_ACCOUNT_ID}.dkr.ecr.us-west-2.amazonaws.com + - SMP_AGENT_TEAM_ID=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.single-machine-performance-agent-team-id --with-decryption --query "Parameter.Value" --out text) + - aws configure set aws_access_key_id $(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.single-machine-performance-bot-access-key-id --with-decryption --query "Parameter.Value" --out text) --profile ${AWS_NAMED_PROFILE} + - aws configure set aws_secret_access_key $(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.single-machine-performance-bot-access-key --with-decryption --query "Parameter.Value" --out text) --profile ${AWS_NAMED_PROFILE} + - aws configure set region us-west-2 --profile ${AWS_NAMED_PROFILE} + # Download smp binary and prepare it for use + - aws --profile single-machine-performance s3 cp s3://smp-cli-releases/v${SMP_VERSION}/x86_64-unknown-linux-musl/smp smp + - chmod +x smp + # Submit job, using the current main SHA as baseline. This will have been + # previously submitted in a separate pipeline run. The comparison will have + # been submitted in this pipeline run. + - git fetch origin main:main + - BASELINE_SHA=$(git rev-parse main) + - BASELINE_IMAGE=${SMP_ECR_URL}/${SMP_AGENT_TEAM_ID}-agent:${BASELINE_SHA}-7-amd64 + - echo "${BASELINE_SHA} | ${BASELINE_IMAGE}" + - COMPARISON_IMAGE=${SMP_ECR_URL}/${SMP_AGENT_TEAM_ID}-agent:${CI_COMMIT_SHA}-7-amd64 + - echo "${CI_COMMIT_SHA} | ${COMPARISON_IMAGE}" + - RUST_LOG="info,aws_config::profile::credentials=error" + - RUST_LOG_DEBUG="debug,aws_config::profile::credentials=error" + - RUST_LOG="${RUST_LOG}" ./smp --team-id ${SMP_AGENT_TEAM_ID} --aws-named-profile ${AWS_NAMED_PROFILE} + job submit + --lading-version ${LADING_VERSION} + --total-samples ${TOTAL_SAMPLES} + --warmup-seconds ${WARMUP_SECONDS} + --replicas ${REPLICAS} + --baseline-image ${BASELINE_IMAGE} + --comparison-image ${COMPARISON_IMAGE} + --baseline-sha ${BASELINE_SHA} + --comparison-sha ${CI_COMMIT_SHA} + --target-name datadog-agent + --target-command "/bin/entrypoint.sh" + --target-inherit-environment + --target-environment-variables "DD_HOSTNAME=smp-regression,DD_DD_URL=http://127.0.0.1:9092,DD_API_KEY=00000001" + --target-config-dir test/regression/ + --target-cpu-allotment ${CPUS} + --target-memory-allotment ${MEMORY} + --submission-metadata submission_metadata + # Wait for job to complete. + - RUST_LOG="${RUST_LOG}" ./smp --team-id ${SMP_AGENT_TEAM_ID} --aws-named-profile ${AWS_NAMED_PROFILE} + job status + --wait + --wait-delay-seconds 60 + --submission-metadata submission_metadata + # Now that the job is completed pull the analysis report, output it to stdout. + - mkdir outputs + - RUST_LOG="${RUST_LOG}" ./smp --team-id ${SMP_AGENT_TEAM_ID} --aws-named-profile ${AWS_NAMED_PROFILE} + job sync + --submission-metadata submission_metadata + --output-path outputs + # Replace empty lines in the output with lines containing various unicode + # space characters. This avoids + # https://gitlab.com/gitlab-org/gitlab/-/issues/217231. + - cat outputs/report.md | sed "s/^\$/$(echo -ne '\uFEFF\u00A0\u200B')/g" + # Finally, exit 1 if the job signals a regression else 0. + - RUST_LOG="${RUST_LOG}" ./smp --team-id ${SMP_AGENT_TEAM_ID} --aws-named-profile ${AWS_NAMED_PROFILE} + job result + --submission-metadata submission_metadata diff --git a/.gitlab/functional_test/security_agent.yml b/.gitlab/functional_test/security_agent.yml index 0247eb730ad84f..17a6bd48870fb2 100644 --- a/.gitlab/functional_test/security_agent.yml +++ b/.gitlab/functional_test/security_agent.yml @@ -15,7 +15,7 @@ retry: 0 variables: AGENT_MAJOR_VERSION: 7 - DD_PIPELINE_ID: $CI_PIPELINE_ID-a7 + DD_PIPELINE_ID: $CI_PIPELINE_ID-fnct CHEF_VERSION: 14.15.6 script: - bash -l tasks/run-test-kitchen.sh security-agent-test $AGENT_MAJOR_VERSION @@ -113,7 +113,7 @@ kitchen_stress_security_agent: needs: ["tests_ebpf_x64"] variables: AGENT_MAJOR_VERSION: 7 - DD_PIPELINE_ID: $CI_PIPELINE_ID-a7 + DD_PIPELINE_ID: $CI_PIPELINE_ID-fnct before_script: - cd $DD_AGENT_TESTING_DIR - bash -l tasks/kitchen_setup.sh diff --git a/.gitlab/functional_test/system_probe.yml b/.gitlab/functional_test/system_probe.yml index 1db70e4294bfc4..bc35ff25ee628d 100644 --- a/.gitlab/functional_test/system_probe.yml +++ b/.gitlab/functional_test/system_probe.yml @@ -5,6 +5,33 @@ # include: # - /.gitlab/kitchen_common/testing.yml +.pull_test_dockers: + image: 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/docker_x64:$DATADOG_AGENT_BUILDIMAGES + needs: [] + tags: ["runner:docker"] + stage: functional_test + script: + # DockerHub login for build to limit rate limit when pulling base images + - DOCKER_REGISTRY_LOGIN=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.$DOCKER_REGISTRY_LOGIN_SSM_KEY --with-decryption --query "Parameter.Value" --out text) + - aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.$DOCKER_REGISTRY_PWD_SSM_KEY --with-decryption --query "Parameter.Value" --out text | docker login --username "$DOCKER_REGISTRY_LOGIN" --password-stdin "$DOCKER_REGISTRY_URL" + # Pull base images + - mkdir kitchen-dockers + - inv -e system-probe.save-test-dockers --output-dir kitchen-dockers --arch $ARCH + artifacts: + expire_in: 1 day + paths: + - kitchen-dockers + +pull_test_dockers_x64: + extends: .pull_test_dockers + variables: + ARCH: amd64 + +pull_test_dockers_arm64: + extends: .pull_test_dockers + variables: + ARCH: arm64 + .kitchen_test_system_probe: extends: - .kitchen_common @@ -14,7 +41,7 @@ stage: functional_test variables: AGENT_MAJOR_VERSION: 7 - DD_PIPELINE_ID: $CI_PIPELINE_ID-a7 + DD_PIPELINE_ID: $CI_PIPELINE_ID-fnct CHEF_VERSION: 14.15.6 script: - echo -n "--tags ci.job.name:${CI_JOB_NAME}" > $DD_AGENT_TESTING_DIR/site-cookbooks/dd-system-probe-check/files/tags.txt @@ -28,23 +55,28 @@ paths: - $DD_AGENT_TESTING_DIR/kitchen-junit-*.tar.gz +.retrieve_test_dockers: + - mkdir -p $DD_AGENT_TESTING_DIR/site-cookbooks/dd-system-probe-check/files/dockers + - mv kitchen-dockers/* $DD_AGENT_TESTING_DIR/site-cookbooks/dd-system-probe-check/files/dockers .retrieve_minimized_btfs: - $S3_CP_CMD $S3_ARTIFACTS_URI/minimized-btfs-${ARCH}.tar.xz /tmp/minimized-btfs.tar.xz - cp /tmp/minimized-btfs.tar.xz $DD_AGENT_TESTING_DIR/site-cookbooks/dd-system-probe-check/files/minimized-btfs.tar.xz - kitchen_test_system_probe_linux_x64: extends: - .kitchen_test_system_probe - .kitchen_azure_x64 - .kitchen_azure_location_north_central_us - needs: [ "tests_ebpf_x64", "generate_minimized_btfs_x64" ] + needs: [ "tests_ebpf_x64", "generate_minimized_btfs_x64", "pull_test_dockers_x64" ] variables: ARCH: amd64 KITCHEN_ARCH: x86_64 KITCHEN_IMAGE_SIZE: Standard_D2_v2 + AZURE_KITCHEN_MOUNT_DIR: /mnt/kitchen_mount + AZURE_KITCHEN_TARGET_MOUNT_DIR: /tmp/kitchen_mount before_script: + - !reference [.retrieve_test_dockers] - !reference [.retrieve_minimized_btfs] - pushd $DD_AGENT_TESTING_DIR - bash -l tasks/kitchen_setup.sh @@ -57,18 +89,18 @@ kitchen_test_system_probe_linux_x64: - KITCHEN_PLATFORM: "centos" KITCHEN_OSVERS: "centos-76,rhel-81" - kitchen_test_system_probe_linux_x64_ec2: extends: - .kitchen_test_system_probe - .kitchen_ec2_location_us_east_1 - .kitchen_ec2 - needs: [ "tests_ebpf_x64", "generate_minimized_btfs_x64" ] + needs: [ "tests_ebpf_x64", "generate_minimized_btfs_x64", "pull_test_dockers_x64" ] variables: ARCH: amd64 KITCHEN_ARCH: x86_64 KITCHEN_EC2_INSTANCE_TYPE: "t2.xlarge" before_script: + - !reference [.retrieve_test_dockers] - !reference [.retrieve_minimized_btfs] - pushd $DD_AGENT_TESTING_DIR - bash -l tasks/kitchen_setup.sh @@ -83,12 +115,13 @@ kitchen_test_system_probe_linux_arm64: - .kitchen_test_system_probe - .kitchen_ec2_location_us_east_1 - .kitchen_ec2_spot_instances - needs: [ "tests_ebpf_arm64", "generate_minimized_btfs_arm64" ] + needs: [ "tests_ebpf_arm64", "generate_minimized_btfs_arm64", "pull_test_dockers_arm64" ] variables: ARCH: arm64 KITCHEN_ARCH: arm64 KITCHEN_EC2_INSTANCE_TYPE: "t4g.xlarge" before_script: + - !reference [.retrieve_test_dockers] - !reference [.retrieve_minimized_btfs] - pushd $DD_AGENT_TESTING_DIR - bash -l tasks/kitchen_setup.sh @@ -98,10 +131,12 @@ kitchen_test_system_probe_linux_arm64: KITCHEN_OSVERS: "ubuntu-18-04,ubuntu-20-04,ubuntu-22-04" - KITCHEN_PLATFORM: "debian" KITCHEN_OSVERS: "debian-10,debian-11" + KITCHEN_EC2_DEVICE_NAME: "/dev/xvda" - KITCHEN_PLATFORM: "centos" KITCHEN_OSVERS: "centos-78,rhel-83" - KITCHEN_PLATFORM: "amazonlinux" KITCHEN_OSVERS: "amazonlinux2-4-14,amazonlinux2-5-10,amazonlinux2022-5-15" + KITCHEN_EC2_DEVICE_NAME: "/dev/xvda" kitchen_test_system_probe_windows_x64: extends: diff --git a/.gitlab/functional_test_cleanup.yml b/.gitlab/functional_test_cleanup.yml index d02fc25023889f..ea946feb1052e9 100644 --- a/.gitlab/functional_test_cleanup.yml +++ b/.gitlab/functional_test_cleanup.yml @@ -15,4 +15,4 @@ cleanup_kitchen_functional_test: stage: functional_test_cleanup needs: ["tests_ebpf_x64"] variables: - DD_PIPELINE_ID: $CI_PIPELINE_ID-a7 + DD_PIPELINE_ID: $CI_PIPELINE_ID-fnct diff --git a/.gitlab/kitchen_testing/suse.yml b/.gitlab/kitchen_testing/suse.yml index 8ac5086179a29b..dfe7fe604563e2 100644 --- a/.gitlab/kitchen_testing/suse.yml +++ b/.gitlab/kitchen_testing/suse.yml @@ -78,15 +78,19 @@ kitchen_suse_step_by_step_agent-a7: rules: !reference [.on_deploy_a7] -kitchen_suse_upgrade5_agent-a6: - extends: - - .kitchen_scenario_suse_a6 - - .kitchen_test_upgrade5_agent - -kitchen_suse_upgrade5_agent-a7: - extends: - - .kitchen_scenario_suse_a7 - - .kitchen_test_upgrade5_agent +# The change https://github.com/DataDog/dd-agent/commit/d024c411c56595099761dc4ac4d0133e6fa152bf +# made the SUSE Agent 5 upgrade tests fail when there is no Agent 5 SUSE RPM signed with the new +# key. We disable them temporarily because of this. +# +# kitchen_suse_upgrade5_agent-a6: +# extends: +# - .kitchen_scenario_suse_a6 +# - .kitchen_test_upgrade5_agent +# +# kitchen_suse_upgrade5_agent-a7: +# extends: +# - .kitchen_scenario_suse_a7 +# - .kitchen_test_upgrade5_agent kitchen_suse_upgrade6_agent-a6: extends: diff --git a/.gitlab/maintenance_jobs/docker.yml b/.gitlab/maintenance_jobs/docker.yml index a58eb5ce249703..6504eda0bc6838 100644 --- a/.gitlab/maintenance_jobs/docker.yml +++ b/.gitlab/maintenance_jobs/docker.yml @@ -68,6 +68,7 @@ delete_docker_tag: before_script: - DOCKER_REGISTRY_LOGIN=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.$DOCKER_REGISTRY_LOGIN_SSM_KEY --with-decryption --query "Parameter.Value" --out text) - PASS=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.$DOCKER_REGISTRY_PWD_SSM_KEY --with-decryption --query "Parameter.Value" --out text) + - !reference [.setup_python_mirror_linux] - python3 -m pip install -r requirements.txt - | export DOCKER_TOKEN=`curl -s -H "Content-Type: application/json" -X POST -d '{"username": "'$DOCKER_REGISTRY_LOGIN'", "password": "'$PASS'"}' https://hub.docker.com/v2/users/login/ | python -c 'import sys, json; print(json.load(sys.stdin)["token"].strip())'` diff --git a/.gitlab/notify.yml b/.gitlab/notify.yml index 440c105d2a099d..9cfe736d7d4b6d 100644 --- a/.gitlab/notify.yml +++ b/.gitlab/notify.yml @@ -25,6 +25,7 @@ notify: script: - set +x - export GITLAB_TOKEN=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.gitlab_read_api_token --with-decryption --query "Parameter.Value" --out text) + - !reference [.setup_python_mirror_linux] - python3 -m pip install -r tasks/libs/requirements-notifications.txt - | # Do not send notifications if this is a child pipeline of another repo @@ -51,5 +52,6 @@ send_pipeline_stats: - set +x - export GITLAB_TOKEN=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.gitlab_read_api_token --with-decryption --query "Parameter.Value" --out text) - export DD_API_KEY=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.datadog_api_key_org2 --with-decryption --query "Parameter.Value" --out text) + - !reference [.setup_python_mirror_linux] - python3 -m pip install -r tasks/libs/requirements-stats.txt - invoke -e pipeline.send-stats diff --git a/.gitlab/package_build/deb.yml b/.gitlab/package_build/deb.yml index cb852ef23e3b6f..38b7d7516b9d96 100644 --- a/.gitlab/package_build/deb.yml +++ b/.gitlab/package_build/deb.yml @@ -10,6 +10,7 @@ script: - echo "About to build for $RELEASE_VERSION" - !reference [.setup_ruby_mirror_linux] + - !reference [.setup_python_mirror_linux] - !reference [.retrieve_linux_go_deps] # remove artifacts from previous pipelines that may come from the cache - rm -rf $OMNIBUS_PACKAGE_DIR/* @@ -30,6 +31,7 @@ - $S3_CP_CMD $S3_ARTIFACTS_URI/runtime-security-syscall-wrapper.o.${PACKAGE_ARCH} /tmp/system-probe/runtime-security-syscall-wrapper.o - $S3_CP_CMD $S3_ARTIFACTS_URI/runtime-security-offset-guesser.o.${PACKAGE_ARCH} /tmp/system-probe/runtime-security-offset-guesser.o - $S3_CP_CMD $S3_ARTIFACTS_URI/oom-kill-co-re.o.${PACKAGE_ARCH} /tmp/system-probe/oom-kill-co-re.o + - $S3_CP_CMD $S3_ARTIFACTS_URI/tcp-queue-length-co-re.o.${PACKAGE_ARCH} /tmp/system-probe/tcp-queue-length-co-re.o - $S3_CP_CMD $S3_ARTIFACTS_URI/tracer.c.${PACKAGE_ARCH} /tmp/system-probe/tracer.c - $S3_CP_CMD $S3_ARTIFACTS_URI/http.c.${PACKAGE_ARCH} /tmp/system-probe/http.c - $S3_CP_CMD $S3_ARTIFACTS_URI/runtime-security.c.${PACKAGE_ARCH} /tmp/system-probe/runtime-security.c @@ -131,6 +133,7 @@ agent_deb-arm64-a7: .iot_agent_build_common_deb: script: - !reference [.setup_ruby_mirror_linux] + - !reference [.setup_python_mirror_linux] - !reference [.retrieve_linux_go_deps] - echo "About to build for $RELEASE_VERSION_7" - echo "Detected host architecture $(uname -m)" diff --git a/.gitlab/package_build/dmg.yml b/.gitlab/package_build/dmg.yml index bafb2dfe303d6a..ce8f8842545ec1 100644 --- a/.gitlab/package_build/dmg.yml +++ b/.gitlab/package_build/dmg.yml @@ -8,6 +8,7 @@ - export GITHUB_KEY_B64=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.macos_github_key_b64 --with-decryption --query "Parameter.Value" --out text) - export GITHUB_APP_ID=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.macos_github_app_id --with-decryption --query "Parameter.Value" --out text) - export GITHUB_INSTALLATION_ID=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.macos_github_installation_id --with-decryption --query "Parameter.Value" --out text) + - !reference [.setup_python_mirror_linux] - python3 -m pip install -r tasks/libs/requirements-github.txt - inv -e github.trigger-macos-build --datadog-agent-ref "$CI_COMMIT_SHA" --release-version "$RELEASE_VERSION" --major-version "$AGENT_MAJOR_VERSION" --python-runtimes "$PYTHON_RUNTIMES" --destination "$OMNIBUS_PACKAGE_DIR" - !reference [.upload_sbom_artifacts] diff --git a/.gitlab/package_build/rpm.yml b/.gitlab/package_build/rpm.yml index 56e3ea4d858f28..c08db7b11bf699 100644 --- a/.gitlab/package_build/rpm.yml +++ b/.gitlab/package_build/rpm.yml @@ -3,6 +3,7 @@ script: - echo "About to build for $RELEASE_VERSION" - !reference [.setup_ruby_mirror_linux] + - !reference [.setup_python_mirror_linux] - !reference [.retrieve_linux_go_deps] # remove artifacts from previous pipelines that may come from the cache - rm -rf $OMNIBUS_PACKAGE_DIR/* @@ -28,6 +29,7 @@ - $S3_CP_CMD $S3_ARTIFACTS_URI/runtime-security-syscall-wrapper.o.${PACKAGE_ARCH} /tmp/system-probe/runtime-security-syscall-wrapper.o - $S3_CP_CMD $S3_ARTIFACTS_URI/runtime-security-offset-guesser.o.${PACKAGE_ARCH} /tmp/system-probe/runtime-security-offset-guesser.o - $S3_CP_CMD $S3_ARTIFACTS_URI/oom-kill-co-re.o.${PACKAGE_ARCH} /tmp/system-probe/oom-kill-co-re.o + - $S3_CP_CMD $S3_ARTIFACTS_URI/tcp-queue-length-co-re.o.${PACKAGE_ARCH} /tmp/system-probe/tcp-queue-length-co-re.o - $S3_CP_CMD $S3_ARTIFACTS_URI/tracer.c.${PACKAGE_ARCH} /tmp/system-probe/tracer.c - $S3_CP_CMD $S3_ARTIFACTS_URI/http.c.${PACKAGE_ARCH} /tmp/system-probe/http.c - $S3_CP_CMD $S3_ARTIFACTS_URI/runtime-security.c.${PACKAGE_ARCH} /tmp/system-probe/runtime-security.c @@ -124,6 +126,7 @@ agent_rpm-arm64-a7: script: - echo "About to build iot agent for $RELEASE_VERSION_7" - !reference [.setup_ruby_mirror_linux] + - !reference [.setup_python_mirror_linux] - !reference [.retrieve_linux_go_deps] - echo "Detected host architecture $(uname -m)" # $DD_TARGET_ARCH is only set by Arm build images, so assume amd64 if not present diff --git a/.gitlab/package_build/suse_rpm.yml b/.gitlab/package_build/suse_rpm.yml index 4174c7879ec108..ef075c33513d0d 100644 --- a/.gitlab/package_build/suse_rpm.yml +++ b/.gitlab/package_build/suse_rpm.yml @@ -3,6 +3,7 @@ script: - echo "About to build for $RELEASE_VERSION" - !reference [.setup_ruby_mirror_linux] + - !reference [.setup_python_mirror_linux] - !reference [.retrieve_linux_go_deps] # remove artifacts from previous pipelines that may come from the cache - rm -rf $OMNIBUS_PACKAGE_DIR_SUSE/* @@ -27,6 +28,7 @@ - $S3_CP_CMD $S3_ARTIFACTS_URI/runtime-security-syscall-wrapper.o.${PACKAGE_ARCH} /tmp/system-probe/runtime-security-syscall-wrapper.o - $S3_CP_CMD $S3_ARTIFACTS_URI/runtime-security-offset-guesser.o.${PACKAGE_ARCH} /tmp/system-probe/runtime-security-offset-guesser.o - $S3_CP_CMD $S3_ARTIFACTS_URI/oom-kill-co-re.o.${PACKAGE_ARCH} /tmp/system-probe/oom-kill-co-re.o + - $S3_CP_CMD $S3_ARTIFACTS_URI/tcp-queue-length-co-re.o.${PACKAGE_ARCH} /tmp/system-probe/tcp-queue-length-co-re.o - $S3_CP_CMD $S3_ARTIFACTS_URI/tracer.c.${PACKAGE_ARCH} /tmp/system-probe/tracer.c - $S3_CP_CMD $S3_ARTIFACTS_URI/http.c.${PACKAGE_ARCH} /tmp/system-probe/http.c - $S3_CP_CMD $S3_ARTIFACTS_URI/runtime-security.c.${PACKAGE_ARCH} /tmp/system-probe/runtime-security.c @@ -100,6 +102,7 @@ iot_agent_suse-x64: script: - echo "About to build iot agent for $RELEASE_VERSION_7" - !reference [.setup_ruby_mirror_linux] + - !reference [.setup_python_mirror_linux] - !reference [.retrieve_linux_go_deps] - echo "Detected host architecture $(uname -m)" # $DD_TARGET_ARCH is only set by Arm build images, so assume amd64 if not present diff --git a/.gitlab/package_build/windows.yml b/.gitlab/package_build/windows.yml index bacb2e885618ea..939c21cc4a6c79 100644 --- a/.gitlab/package_build/windows.yml +++ b/.gitlab/package_build/windows.yml @@ -10,7 +10,35 @@ - mkdir omnibus\pkg - $vcpkgBlobSaSUrl = (aws ssm get-parameter --region us-east-1 --name ci.datadog-agent-buildimages.vcpkg_blob_sas_url --with-decryption --query "Parameter.Value" --out text) - !reference [.setup_ruby_mirror_win] - - docker run --rm -m 4096M -v "$(Get-Location):c:\mnt" -e CI_JOB_ID=${CI_JOB_ID} -e CI_PIPELINE_ID=${CI_PIPELINE_ID} -e CI_COMMIT_BRANCH=${CI_COMMIT_BRANCH} -e OMNIBUS_TARGET=${OMNIBUS_TARGET} -e WINDOWS_BUILDER=true -e RELEASE_VERSION="$RELEASE_VERSION" -e MAJOR_VERSION="$AGENT_MAJOR_VERSION" -e PY_RUNTIMES="$PYTHON_RUNTIMES" -e INTEGRATIONS_CORE_VERSION="$INTEGRATIONS_CORE_VERSION" -e GOMODCACHE="c:\modcache" -e AWS_NETWORKING=true -e SIGN_WINDOWS=true -e TARGET_ARCH="$ARCH" -e DEBUG_CUSTOMACTION="$DEBUG_CUSTOMACTION" -e BUCKET_BRANCH="$BUCKET_BRANCH" -e S3_OMNIBUS_CACHE_BUCKET="$S3_OMNIBUS_CACHE_BUCKET" -e USE_S3_CACHING="$USE_S3_CACHING" -e INTEGRATION_WHEELS_CACHE_BUCKET="$INTEGRATION_WHEELS_CACHE_BUCKET" -e VCPKG_BINARY_SOURCES="clear;x-azblob,${vcpkgBlobSaSUrl}" -e GO_VERSION_CHECK="true" -e BUNDLE_MIRROR__RUBYGEMS__ORG=${BUNDLE_MIRROR__RUBYGEMS__ORG} 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:${Env:DATADOG_AGENT_WINBUILDIMAGES} c:\mnt\tasks\winbuildscripts\buildwin.bat + - !reference [.setup_python_mirror_win] + - > + docker run --rm + -m 4096M + -v "$(Get-Location):c:\mnt" + -e CI_JOB_ID=${CI_JOB_ID} + -e CI_PIPELINE_ID=${CI_PIPELINE_ID} + -e CI_COMMIT_BRANCH=${CI_COMMIT_BRANCH} + -e OMNIBUS_TARGET=${OMNIBUS_TARGET} + -e WINDOWS_BUILDER=true + -e RELEASE_VERSION="$RELEASE_VERSION" + -e MAJOR_VERSION="$AGENT_MAJOR_VERSION" + -e PY_RUNTIMES="$PYTHON_RUNTIMES" + -e INTEGRATIONS_CORE_VERSION="$INTEGRATIONS_CORE_VERSION" + -e GOMODCACHE="c:\modcache" + -e AWS_NETWORKING=true + -e SIGN_WINDOWS=true + -e TARGET_ARCH="$ARCH" + -e DEBUG_CUSTOMACTION="$DEBUG_CUSTOMACTION" + -e BUCKET_BRANCH="$BUCKET_BRANCH" + -e S3_OMNIBUS_CACHE_BUCKET="$S3_OMNIBUS_CACHE_BUCKET" + -e USE_S3_CACHING="$USE_S3_CACHING" + -e INTEGRATION_WHEELS_CACHE_BUCKET="$INTEGRATION_WHEELS_CACHE_BUCKET" + -e VCPKG_BINARY_SOURCES="clear;x-azblob,${vcpkgBlobSaSUrl}" + -e GO_VERSION_CHECK="true" + -e BUNDLE_MIRROR__RUBYGEMS__ORG=${BUNDLE_MIRROR__RUBYGEMS__ORG} + -e PIP_INDEX_URL=${PIP_INDEX_URL} + 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:${Env:DATADOG_AGENT_WINBUILDIMAGES} + c:\mnt\tasks\winbuildscripts\buildwin.bat - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } - get-childitem omnibus\pkg - !reference [.upload_sbom_artifacts_windows] @@ -68,7 +96,30 @@ windows_zip_agent_binaries_x64-a7: - if (Test-Path omnibus\pkg) { remove-item -recurse -force omnibus\pkg } - mkdir omnibus\pkg - !reference [.setup_ruby_mirror_win] - - docker run --rm -m 4096M -v "$(Get-Location):c:\mnt" -e CI_COMMIT_BRANCH=${CI_COMMIT_BRANCH} -e OMNIBUS_TARGET=${OMNIBUS_TARGET} -e WINDOWS_BUILDER=true -e RELEASE_VERSION="$RELEASE_VERSION" -e MAJOR_VERSION="$AGENT_MAJOR_VERSION" -e INTEGRATIONS_CORE_VERSION="$INTEGRATIONS_CORE_VERSION" -e PY_RUNTIMES="$PYTHON_RUNTIMES" -e GOMODCACHE="c:\modcache" -e AWS_NETWORKING=true -e SIGN_WINDOWS=true -e BUCKET_BRANCH="$BUCKET_BRANCH" -e INTEGRATION_WHEELS_CACHE_BUCKET="$INTEGRATION_WHEELS_CACHE_BUCKET" -e S3_OMNIBUS_CACHE_BUCKET="$S3_OMNIBUS_CACHE_BUCKET" -e USE_S3_CACHING="$USE_S3_CACHING" -e VCPKG_BINARY_SOURCES="clear;x-azblob,${vcpkgBlobSaSUrl}" -e BUNDLE_MIRROR__RUBYGEMS__ORG=${BUNDLE_MIRROR__RUBYGEMS__ORG} 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:${Env:DATADOG_AGENT_WINBUILDIMAGES} c:\mnt\tasks\winbuildscripts\buildwin.bat + - !reference [.setup_python_mirror_win] + - > + docker run --rm + -m 4096M + -v "$(Get-Location):c:\mnt" + -e CI_COMMIT_BRANCH=${CI_COMMIT_BRANCH} + -e OMNIBUS_TARGET=${OMNIBUS_TARGET} + -e WINDOWS_BUILDER=true + -e RELEASE_VERSION="$RELEASE_VERSION" + -e MAJOR_VERSION="$AGENT_MAJOR_VERSION" + -e INTEGRATIONS_CORE_VERSION="$INTEGRATIONS_CORE_VERSION" + -e PY_RUNTIMES="$PYTHON_RUNTIMES" + -e GOMODCACHE="c:\modcache" + -e AWS_NETWORKING=true + -e SIGN_WINDOWS=true + -e BUCKET_BRANCH="$BUCKET_BRANCH" + -e INTEGRATION_WHEELS_CACHE_BUCKET="$INTEGRATION_WHEELS_CACHE_BUCKET" + -e S3_OMNIBUS_CACHE_BUCKET="$S3_OMNIBUS_CACHE_BUCKET" + -e USE_S3_CACHING="$USE_S3_CACHING" + -e VCPKG_BINARY_SOURCES="clear;x-azblob,${vcpkgBlobSaSUrl}" + -e BUNDLE_MIRROR__RUBYGEMS__ORG=${BUNDLE_MIRROR__RUBYGEMS__ORG} + -e PIP_INDEX_URL=${PIP_INDEX_URL} + 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:${Env:DATADOG_AGENT_WINBUILDIMAGES} + c:\mnt\tasks\winbuildscripts\buildwin.bat - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } - get-childitem omnibus\pkg - !reference [.upload_sbom_artifacts_windows] diff --git a/.gitlab/package_deps_build.yml b/.gitlab/package_deps_build.yml index df6354a1bfcfaf..b601c18d19e88c 100644 --- a/.gitlab/package_deps_build.yml +++ b/.gitlab/package_deps_build.yml @@ -11,19 +11,18 @@ - $S3_CP_CMD $S3_PERMANENT_ARTIFACTS_URI/btfs-$ARCH.tar.gz . - tar -xf btfs-$ARCH.tar.gz - $S3_CP_CMD $S3_ARTIFACTS_URI/oom-kill-co-re.o.$ARCH oom-kill.o - - inv -e system-probe.generate-minimized-btfs --source-dir "$CI_PROJECT_DIR/btfs-$ARCH" --output-dir "$CI_PROJECT_DIR/minimized-btfs" --input-bpf-programs "$CI_PROJECT_DIR/oom-kill.o" + - $S3_CP_CMD $S3_ARTIFACTS_URI/tcp-queue-length-co-re.o.$ARCH tcp-queue-length.o + - inv -e system-probe.generate-minimized-btfs --source-dir "$CI_PROJECT_DIR/btfs-$ARCH" --output-dir "$CI_PROJECT_DIR/minimized-btfs" --input-bpf-programs "$CI_PROJECT_DIR/oom-kill.o $CI_PROJECT_DIR/tcp-queue-length.o" - cd minimized-btfs - tar -cJf minimized-btfs.tar.xz * - $S3_CP_CMD minimized-btfs.tar.xz $S3_ARTIFACTS_URI/minimized-btfs-$ARCH.tar.xz - generate_minimized_btfs_x64: needs: ["build_system-probe-x64"] extends: .generate_minimized_btfs_common variables: ARCH: amd64 - generate_minimized_btfs_arm64: needs: ["build_system-probe-arm64"] extends: .generate_minimized_btfs_common diff --git a/.gitlab/shared.yml b/.gitlab/shared.yml index 1d7f1b42a4d3be..0102486e2044ef 100644 --- a/.gitlab/shared.yml +++ b/.gitlab/shared.yml @@ -15,3 +15,13 @@ .setup_ruby_mirror_win: - *get_artifactory_token_win - if ($Env:USE_CACHING_PROXY_RUBY -eq "true") { $BUNDLE_MIRROR__RUBYGEMS__ORG="https://${Env:ARTIFACTORY_USERNAME}:${ARTIFACTORY_TOKEN}@${Env:ARTIFACTORY_URL}/${Env:ARTIFACTORY_GEMS_PATH}" } + +.setup_python_mirror_linux: + - set +x + - *get_artifactory_token_linux + - if [ "${USE_CACHING_PROXY_PYTHON}" = "true" ]; then export PIP_INDEX_URL=https://${ARTIFACTORY_USERNAME}:${ARTIFACTORY_TOKEN}@${ARTIFACTORY_URL}/${ARTIFACTORY_PYPI_PATH}; fi + - set -x + +.setup_python_mirror_win: + - *get_artifactory_token_win + - if ($Env:USE_CACHING_PROXY_PYTHON -eq "true") { $PIP_INDEX_URL="https://${Env:ARTIFACTORY_USERNAME}:${ARTIFACTORY_TOKEN}@${Env:ARTIFACTORY_URL}/${Env:ARTIFACTORY_PYPI_PATH}" } diff --git a/.gitlab/source_test/ebpf.yml b/.gitlab/source_test/ebpf.yml index 22dd7c6768d088..9c8c8a28a6648b 100644 --- a/.gitlab/source_test/ebpf.yml +++ b/.gitlab/source_test/ebpf.yml @@ -11,7 +11,7 @@ .build_sysprobe_artifacts: # kitchen prepare also builds object files - - inv -e system-probe.kitchen-prepare + - inv -e system-probe.kitchen-prepare --ci - cp $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/tracer.o $CI_PROJECT_DIR/.tmp/binary-ebpf/tracer.o - cp $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/tracer-debug.o $CI_PROJECT_DIR/.tmp/binary-ebpf/tracer-debug.o - cp $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/offset-guess.o $CI_PROJECT_DIR/.tmp/binary-ebpf/offset-guess.o @@ -21,6 +21,7 @@ - cp $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/dns.o $CI_PROJECT_DIR/.tmp/binary-ebpf/dns.o - cp $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/dns-debug.o $CI_PROJECT_DIR/.tmp/binary-ebpf/dns-debug.o - cp $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/co-re/oom-kill.o $CI_PROJECT_DIR/.tmp/binary-ebpf/co-re/oom-kill.o + - cp $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/co-re/tcp-queue-length.o $CI_PROJECT_DIR/.tmp/binary-ebpf/co-re/tcp-queue-length.o - cp $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/runtime/tracer.c $CI_PROJECT_DIR/.tmp/binary-ebpf/tracer.c - cp $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/runtime/http.c $CI_PROJECT_DIR/.tmp/binary-ebpf/http.c - cp $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/runtime/runtime-security.c $CI_PROJECT_DIR/.tmp/binary-ebpf/runtime-security.c @@ -45,8 +46,10 @@ - !reference [.retrieve_sysprobe_deps] script: - inv -e install-tools + - inv -e system-probe.object-files - invoke -e golangci-lint --build system-probe ./pkg - !reference [.build_sysprobe_artifacts] + - invoke -e security-agent.run-ebpf-unit-tests --verbose - invoke -e security-agent.kitchen-prepare - cp /tmp/clang-bpf $DD_AGENT_TESTING_DIR/site-cookbooks/dd-system-probe-check/files/clang-bpf - cp /tmp/llc-bpf $DD_AGENT_TESTING_DIR/site-cookbooks/dd-system-probe-check/files/llc-bpf @@ -58,7 +61,18 @@ script: - $ErrorActionPreference = "Stop" - '$_instance_id = (iwr -UseBasicParsing http://169.254.169.254/latest/meta-data/instance-id).content ; Write-Host "Running on instance $($_instance_id)"' - - docker run --rm -m 8192M -v "$(Get-Location):c:\mnt" -e AWS_NETWORKING=true -e SIGN_WINDOWS=true -e PY_RUNTIMES="$PYTHON_RUNTIMES" -e GOMODCACHE="c:\modcache" 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:$Env:DATADOG_AGENT_WINBUILDIMAGES c:\mnt\tasks\winbuildscripts\sysprobe.bat + - !reference [.setup_python_mirror_win] + - > + docker run --rm + -m 8192M + -v "$(Get-Location):c:\mnt" + -e AWS_NETWORKING=true + -e SIGN_WINDOWS=true + -e PY_RUNTIMES="$PYTHON_RUNTIMES" + -e GOMODCACHE="c:\modcache" + -e PIP_INDEX_URL=${PIP_INDEX_URL} + 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:$Env:DATADOG_AGENT_WINBUILDIMAGES + c:\mnt\tasks\winbuildscripts\sysprobe.bat - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } artifacts: when: always diff --git a/.gitlab/source_test/linux.yml b/.gitlab/source_test/linux.yml index b09b2be22fe9b7..bc375dacfca2c6 100644 --- a/.gitlab/source_test/linux.yml +++ b/.gitlab/source_test/linux.yml @@ -18,9 +18,9 @@ script: - !reference [.retrieve_linux_go_tools_deps] - inv -e install-tools - - inv -e test $FLAVORS --race --profile --rerun-fails=2 --python-runtimes "$PYTHON_RUNTIMES" --cpus 4 $EXTRA_OPTS --save-result-json test_output.json --junit-tar "junit-${CI_JOB_NAME}.tgz" - python3 -m tasks.release_tests - python3 -m tasks.libs.version_tests + - inv -e test $FLAVORS --race --profile --rerun-fails=2 --python-runtimes "$PYTHON_RUNTIMES" --cpus 4 $EXTRA_OPTS --save-result-json test_output.json --junit-tar "junit-${CI_JOB_NAME}.tgz" artifacts: expire_in: 2 weeks when: always diff --git a/.gitlab/source_test/macos.yml b/.gitlab/source_test/macos.yml index 8a053cfbdfa1d1..863711bd9888a5 100644 --- a/.gitlab/source_test/macos.yml +++ b/.gitlab/source_test/macos.yml @@ -12,11 +12,13 @@ tests_macos: - export GITHUB_KEY_B64=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.macos_github_key_b64 --with-decryption --query "Parameter.Value" --out text) - export GITHUB_APP_ID=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.macos_github_app_id --with-decryption --query "Parameter.Value" --out text) - export GITHUB_INSTALLATION_ID=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.macos_github_installation_id --with-decryption --query "Parameter.Value" --out text) + - !reference [.setup_python_mirror_linux] - python3 -m pip install -r tasks/libs/requirements-github.txt - inv -e github.trigger-macos-test --datadog-agent-ref "$CI_COMMIT_SHA" --python-runtimes "$PYTHON_RUNTIMES" + - inv -e junit-macos-repack --infile junit-tests_macos.tgz --outfile junit-tests_macos-repacked.tgz artifacts: expire_in: 2 weeks when: always paths: - test_output.json - - junit-*.tgz + - junit-*-repacked.tgz diff --git a/.gitlab/source_test/windows.yml b/.gitlab/source_test/windows.yml index 1439debbb4538e..fc1bbc46498bac 100644 --- a/.gitlab/source_test/windows.yml +++ b/.gitlab/source_test/windows.yml @@ -10,7 +10,22 @@ - '$_instance_id = (iwr -UseBasicParsing http://169.254.169.254/latest/meta-data/instance-id).content ; Write-Host "Running on instance $($_instance_id)"' # we pass in CI_JOB_URL and CI_JOB_NAME so that they can be added to additional tags # inside JUNIT_TAR and then later used by datadog-ci - - docker run --rm -m 8192M -v "$(Get-Location):c:\mnt" -e CI_JOB_URL="${CI_JOB_URL}" -e CI_JOB_NAME="${CI_JOB_NAME}" -e AWS_NETWORKING=true -e SIGN_WINDOWS=true -e PY_RUNTIMES="$PYTHON_RUNTIMES" -e GOMODCACHE="c:\modcache" -e JUNIT_TAR="c:\mnt\junit-${CI_JOB_NAME}.tgz" -e VCPKG_BINARY_SOURCES="clear;x-azblob,${vcpkgBlobSaSUrl}" 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:$Env:DATADOG_AGENT_WINBUILDIMAGES c:\mnt\tasks\winbuildscripts\unittests.bat + - !reference [.setup_python_mirror_win] + - > + docker run --rm + -m 8192M + -v "$(Get-Location):c:\mnt" + -e CI_JOB_URL="${CI_JOB_URL}" + -e CI_JOB_NAME="${CI_JOB_NAME}" + -e AWS_NETWORKING=true + -e SIGN_WINDOWS=true + -e PY_RUNTIMES="$PYTHON_RUNTIMES" + -e GOMODCACHE="c:\modcache" + -e JUNIT_TAR="c:\mnt\junit-${CI_JOB_NAME}.tgz" + -e VCPKG_BINARY_SOURCES="clear;x-azblob,${vcpkgBlobSaSUrl}" + -e PIP_INDEX_URL=${PIP_INDEX_URL} + 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:$Env:DATADOG_AGENT_WINBUILDIMAGES + c:\mnt\tasks\winbuildscripts\unittests.bat - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } artifacts: expire_in: 2 weeks diff --git a/.golangci.yml b/.golangci.yml index c4ebfcccc37bfa..a9019040a482da 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -74,7 +74,7 @@ linters-settings: errcheck: # Disable warnings for `fmt` and `log` packages. Also ignore `Write` functions from `net/http` package. # Disable warnings for select Windows functions - ignore: fmt:.*,github.com/DataDog/datadog-agent/pkg/util/log:.*,github.com/DataDog/datadog-agent/comp/core/log:.*,net/http:Write,github.com/DataDog/datadog-agent/pkg/trace/metrics:.*,github.com/DataDog/datadog-agent/pkg/collector/corechecks:Warnf?,golang.org/x/sys/windows:(CloseHandle|FreeLibrary|FreeSid|RegCloseKey|SetEvent),syscall:CloseHandle,golang.org/x/sys/windows/svc/mgr:Disconnect,golang.org/x/sys/windows/svc/debug:(Close|Error|Info|Warning),github.com/lxn/walk:Dispose + ignore: fmt:.*,github.com/DataDog/datadog-agent/pkg/util/log:.*,github.com/DataDog/datadog-agent/comp/core/log:.*,net/http:Write,github.com/DataDog/datadog-agent/pkg/trace/metrics:.*,github.com/DataDog/datadog-agent/pkg/collector/corechecks:Warnf?,golang.org/x/sys/windows:(CloseHandle|FreeLibrary|FreeSid|RegCloseKey|SetEvent),syscall:CloseHandle,golang.org/x/sys/windows/svc/mgr:Disconnect,golang.org/x/sys/windows/svc/debug:(Close|Error|Info|Warning),github.com/lxn/walk:Dispose,github.com/DataDog/datadog-agent/comp/core/flare/helpers:(AddFile.*|CopyDir.*|CopyFile.*) staticcheck: go: "1.17" checks: ["all", diff --git a/CHANGELOG-DCA.rst b/CHANGELOG-DCA.rst index 69484ef2bcc64f..cd131c908a1967 100644 --- a/CHANGELOG-DCA.rst +++ b/CHANGELOG-DCA.rst @@ -2,6 +2,27 @@ Release Notes ============= +.. _Release Notes_7.41.0: + +7.41.0 / 6.41.0 +====== + +.. _Release Notes_7.41.0_New Features: + +New Features +------------ + +- Add ``Namespace`` collection in the orchestrator check and enable it by default. + + +.. _Release Notes_7.41.0_Enhancement Notes: + +Enhancement Notes +----------------- + +- Improves performance of the Cluster Agent admission controller on large pods. + + .. _Release Notes_7.40.0: 7.40.0 / 6.40.0 diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 9b51f838add63c..ee42709278662f 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -2,6 +2,203 @@ Release Notes ============= +.. _Release Notes_7.41.1: + +7.41.1 / 6.41.1 +====== + +.. _Release Notes_7.41.1_Prelude: + +Prelude +------- + +Release on: 2022-12-21 + + +.. _Release Notes_7.41.1_Enhancement Notes: + +Enhancement Notes +----------------- + +- Agents are now built with Go ``1.18.9``. + + +.. _Release Notes_7.41.0: + +7.41.0 / 6.41.0 +====== + +.. _Release Notes_7.41.0_Prelude: + +Prelude +------- + +Release on: 2022-12-09 + +- Please refer to the `7.41.0 tag on integrations-core `_ for the list of changes on the Core Checks + + +.. _Release Notes_7.41.0_Upgrade Notes: + +Upgrade Notes +------------- + +- Troubleshooting commands in the Agent CLI have been moved to the `diagnose` command. `troubleshooting metadata_v5` + command is now `diagnose show-metadata v5` and `troubleshooting metadata_inventory` is `diagnose show-metadata inventory`. + +- Journald launcher can now create multiple tailers on the same journal when + ``config_id`` is specified. This change enables multiple configs to operate + on the same journal which is useful for tagging different units. + Note: This may have an impact on CPU usage. + +- Upgrade tracer_agent debugger proxy to use logs intake API v2 + for uploading snapshots + +- The Agent now defaults to TLS 1.2 instead of TLS 1.0. The ``force_tls_12`` configuration parameter has been removed since it's now the default behavior. To continue using TLS 1.0 or 1.1, you must set the ``min_tls_version`` configuration parameter to either `tlsv1.0` or `tlsv1.1`. + + +.. _Release Notes_7.41.0_New Features: + +New Features +------------ + +- Added a required infrastructure to enable protocol classification for Network Performance Monitoring in the future. + The protocol classification will allow us to label each connection with a L7 protocol. + The features requires Linux kernel version 4.5 or greater. + +- parse the snmp configuration from the agent and pass it to the integrated snmpwalk command in case the customer only provides an ip address + +- The Agent can send its own configuration to Datadog to be displayed in the `Agent Configuration` section of the host + detail panel. See https://docs.datadoghq.com/infrastructure/list/#agent-configuration for more information. The + Agent configuration is scrubbed of any sensitive information and only contains configuration you’ve set using the + configuration file or environment variables. + +- Windows: Adds support for Windows Docker "Process Isolation" containers running on a Windows host. + + +.. _Release Notes_7.41.0_Enhancement Notes: + +Enhancement Notes +----------------- + +- APM: All spans can be sent through the error and rare samplers via custom feature flag `error_rare_sample_tracer_drop`. This can be useful if you want to run those samplers against traces that were not sampled by custom tracer sample rules. Note that even user manual drop spans may be kept if this feature flag is set. + +- APM: The trace-agent will log failures to lookup CPU usage at error level instead of debug. + +- Optionally poll Agent and Cluster Agent integration configuration files for changes after startup. This allows the Agent/Cluster Agent to pick up new + integration configuration without a restart. + This is enabled/disabled with the `autoconf_config_files_poll` boolean configuration variable. + The polling interval is configured with the `autoconf_config_files_poll_interval` (default 60s). + Note: Dynamic removal of logs configuration is currently not supported. + +- Added telemetry for the "container-lifecycle" check. + +- On Kubernetes, the "cluster name" can now be discovered by using + the Node label `ad.datadoghq.com/cluster-name` or any other label + key configured using to the configuration option: + `kubernetes_node_label_as_cluster_name` + +- Agents are now built with Go 1.18.8. + +- Go PDH checks now all use the PdhAddEnglishCounter API to + ensure proper localization support. + +- Use the `windows_counter_refresh_interval` configuration option to limit + how frequently the PDH object cache can be refreshed during counter + initialization in golang. This replaces the previously hardcoded limit + of 60 seconds. + +- [netflow] Add disable port rollup config. + +- The OTLP ingest endpoint now supports the same settings and protocol as the OpenTelemetry Collector OTLP receiver v0.61.0. + +- The `disable_file_logging` setting is now respected in the process-agent. + +- The `process-agent check [check-name]` command no longer outputs to the configured log file to reduce noise in the log file. + +- Logs a warning when the process agent cannot read other processes due to misconfiguration. + +- DogStatsD caches metric metadata for shorter periods of time, + reducing memory usage when tags or metrics received are different + across subsequent aggregation intervals. + +- The ``agent`` CLI subcommands related to Windows services are now + consistent in use of dashes in the command names (``install-service``, + ``start-service``, and so on). The names without dashes are supported as + aliases. + +- The Agent now uses the V2 API to submit series data to the Datadog intake + by default. This can be reverted by setting ``use_v2_api.series`` to + false. + + +.. _Release Notes_7.41.0_Deprecation Notes: + +Deprecation Notes +----------------- + +- APM: The Rare Sampler is now disabled by default. If you wish to enable it explicitly you can set apm_config.enable_rare_sampler or DD_APM_ENABLE_RARE_SAMPLER to true. + + +.. _Release Notes_7.41.0_Bug Fixes: + +Bug Fixes +--------- + +- APM: Don't include extra empty 'env' entries in sampling priority output shown by `agent status` command. + +- APM: Fix panic when DD_PROMETHEUS_SCRAPE_CHECKS is set. + +- APM: DogStatsD data can now be proxied through the "/dogstatsd/v1/proxy" endpoint + and the new "/dogstatsd/v2/proxy" endpoint over UDS, with multiple payloads + separated by newlines in a single request body. + See https://docs.datadoghq.com/developers/dogstatsd#setup for configuration details. + +- APM - remove extra error message from logs. + +- Fixes an issue where cluster check metrics would be sometimes sent with the host tags. + +- The containerd check no longer emits events related with pause containers when `exclude_pause_container` is set to `true`. + +- Discard aberrant values (close to 18 EiB) in the ``container.memory.rss`` metric. + +- Fix Cloud Foundry CAPI Metadata tags injection into application containers. + +- Fix Trace Agent's CPU stats by reading correct PID in procfs + +- Fix a potential panic when df outputs warnings or errors among its standard output. + +- The OTLP ingest is now consistent with the Datadog exporter (v0.56+) when getting a hostname from OTLP resource attributes for metrics and traces. + +- Make Agent write logs when SNMP trap listener starts and Agent + receives invalid packets. + +- Fixed a bug in the workloadmeta store. Subscribers that asked to receive + only `unset` events mistakenly got `set` events on the first subscription for + all the entities present in the store. This only affects the + `container_lifecycle` check. + +- Fix missing tags on the ``kubernetes_state.cronjob.complete`` service check. + +- In ``kubernetes_state_core`` check, fix the `labels_as_tags` feature when the same Kubernetes label must be turned into different Datadog tags, depending on the resource: + + labels_as_tags: + daemonset: + first_owner: kube_daemonset_label_first_owner + deployment: + first_owner: kube_deployment_label_first_owner + +- Normalize the EventID field in the output from the windowsevent log tailer. + The type will now always be a string containing the event ID, the sometimes + present qualifier value is retained in a new EventIDQualifier field. + +- Fix an issue where the security agent would panic, sending on a close + channel, if it received a signal when shutting down while all + components were disabled. + +- Fix tokenization of negative numeric values in the SQL obfuscator to remove extra characters prepended to the byte array. + + .. _Release Notes_7.40.1: 7.40.1 diff --git a/Dockerfiles/agent/datadog-kubernetes.yaml b/Dockerfiles/agent/datadog-kubernetes.yaml index 3746e5d46ee410..5532007364d020 100644 --- a/Dockerfiles/agent/datadog-kubernetes.yaml +++ b/Dockerfiles/agent/datadog-kubernetes.yaml @@ -3,8 +3,6 @@ apm_config: apm_non_local_traffic: true - max_memory: 0 - max_cpu_percent: 0 # Use java container support jmx_use_container_support: true diff --git a/LICENSE-3rdparty.csv b/LICENSE-3rdparty.csv index 54ce1226bb09f6..7585e5de766fd9 100644 --- a/LICENSE-3rdparty.csv +++ b/LICENSE-3rdparty.csv @@ -26,9 +26,13 @@ core,code.cloudfoundry.org/lager,Apache-2.0,"Copyright (c) 2016-Present CloudFou core,code.cloudfoundry.org/tlsconfig,Apache-2.0,"Copyright (c) 2016-Present CloudFoundry.org Foundation, Inc. All Rights Reserved." core,contrib.go.opencensus.io/exporter/prometheus,Apache-2.0,"Copyright 2020, OpenCensus Authors" core,github.com/AlekSi/pointer,MIT,Copyright (c) 2015 Alexey Palazhchenko +core,github.com/CycloneDX/cyclonedx-go,Apache-2.0,Copyright & License | Copyright (c) OWASP Foundation | Copyright (c) OWASP Foundation. All Rights Reserved | Copyright OWASP Foundation +core,github.com/DataDog/agent-payload/v5/contimage,BSD-3-Clause,"Copyright (c) 2017, Datadog, Inc" core,github.com/DataDog/agent-payload/v5/contlcycle,BSD-3-Clause,"Copyright (c) 2017, Datadog, Inc" +core,github.com/DataDog/agent-payload/v5/cyclonedx_v1_4,BSD-3-Clause,"Copyright (c) 2017, Datadog, Inc" core,github.com/DataDog/agent-payload/v5/gogen,BSD-3-Clause,"Copyright (c) 2017, Datadog, Inc" core,github.com/DataDog/agent-payload/v5/process,BSD-3-Clause,"Copyright (c) 2017, Datadog, Inc" +core,github.com/DataDog/agent-payload/v5/sbom,BSD-3-Clause,"Copyright (c) 2017, Datadog, Inc" core,github.com/DataDog/aptly/aptly,MIT,"* Alexander Guy (https://github.com/alexanderguy) | * Andre Roth (https://github.com/neolynx) | * Andrea Bernardo Ciddio (https://github.com/bcandrea) | * Andrey Smirnov (https://github.com/smira) | * Artem Smirnov (https://github.com/urpylka) | * Benj Fassbind (https://github.com/randombenj) | * Benoit Foucher (https://github.com/bentoi) | * Charles Hsu (https://github.com/charz) | * Chris Read (https://github.com/cread) | * Chuan Liu (https://github.com/chuan) | * Clemens Rabe (https://github.com/seeraven) | * Dmitrii Kashin (https://github.com/freehck) | * Don Kuntz (https://github.com/dkuntz2) | * Geoffrey Thomas (https://github.com/geofft) | * Harald Sitter (https://github.com/apachelogger) | * Ivan Kurnosov (https://github.com/zerkms) | * Johannes Layher (https://github.com/jola5) | * Joshua Colson (https://github.com/freakinhippie) | * Lorenzo Bolla (https://github.com/lbolla) | * Ludovico Cavedon (https://github.com/cavedon) | * Markus Muellner (https://github.com/mmianl) | * Matt Martyn (https://github.com/MMartyn) | * Maximilian Stein (https://github.com/steinymity) | * Michael Koval (https://github.com/mkoval) | * Nabil Bendafi (https://github.com/nabilbendafi) | * Oliver Sauder (https://github.com/sliverc) | * Paul Krohn (https://github.com/paul-krohn) | * Petr Jediny (https://github.com/pjediny) | * Phil Frost (https://github.com/bitglue) | * Raphael Medaer (https://github.com/rmedaer) | * Raul Benencia (https://github.com/rul) | * Rohan Garg (https://github.com/shadeslayer) | * Russ Allbery (https://github.com/rra) | * Russell Greene (https://github.com/russelltg) | * Ryan Uber (https://github.com/ryanuber) | * Samuel Mutel (https://github.com/smutel) | * Sebastien Badia (https://github.com/sbadia) | * Sebastien Binet (https://github.com/sbinet) | * Shengjing Zhu (https://github.com/zhsj) | * Simon Aquino (https://github.com/queeno) | * Strajan Sebastian (https://github.com/strajansebastian) | * Sylvain Baubeau (https://github.com/lebauce) | * Szymon Sobik (https://github.com/sobczyk) | * TJ Merritt (https://github.com/tjmerritt) | * Vincent Batoufflet (https://github.com/vbatoufflet) | * Vincent Bernat (https://github.com/vincentbernat) | * William Manley (https://github.com/wmanley) | * x539 (https://github.com/x539) | Copyright 2013-2015 aptly authors. All rights reserved | List of contributors, in chronological order:" core,github.com/DataDog/aptly/database,MIT,"* Alexander Guy (https://github.com/alexanderguy) | * Andre Roth (https://github.com/neolynx) | * Andrea Bernardo Ciddio (https://github.com/bcandrea) | * Andrey Smirnov (https://github.com/smira) | * Artem Smirnov (https://github.com/urpylka) | * Benj Fassbind (https://github.com/randombenj) | * Benoit Foucher (https://github.com/bentoi) | * Charles Hsu (https://github.com/charz) | * Chris Read (https://github.com/cread) | * Chuan Liu (https://github.com/chuan) | * Clemens Rabe (https://github.com/seeraven) | * Dmitrii Kashin (https://github.com/freehck) | * Don Kuntz (https://github.com/dkuntz2) | * Geoffrey Thomas (https://github.com/geofft) | * Harald Sitter (https://github.com/apachelogger) | * Ivan Kurnosov (https://github.com/zerkms) | * Johannes Layher (https://github.com/jola5) | * Joshua Colson (https://github.com/freakinhippie) | * Lorenzo Bolla (https://github.com/lbolla) | * Ludovico Cavedon (https://github.com/cavedon) | * Markus Muellner (https://github.com/mmianl) | * Matt Martyn (https://github.com/MMartyn) | * Maximilian Stein (https://github.com/steinymity) | * Michael Koval (https://github.com/mkoval) | * Nabil Bendafi (https://github.com/nabilbendafi) | * Oliver Sauder (https://github.com/sliverc) | * Paul Krohn (https://github.com/paul-krohn) | * Petr Jediny (https://github.com/pjediny) | * Phil Frost (https://github.com/bitglue) | * Raphael Medaer (https://github.com/rmedaer) | * Raul Benencia (https://github.com/rul) | * Rohan Garg (https://github.com/shadeslayer) | * Russ Allbery (https://github.com/rra) | * Russell Greene (https://github.com/russelltg) | * Ryan Uber (https://github.com/ryanuber) | * Samuel Mutel (https://github.com/smutel) | * Sebastien Badia (https://github.com/sbadia) | * Sebastien Binet (https://github.com/sbinet) | * Shengjing Zhu (https://github.com/zhsj) | * Simon Aquino (https://github.com/queeno) | * Strajan Sebastian (https://github.com/strajansebastian) | * Sylvain Baubeau (https://github.com/lebauce) | * Szymon Sobik (https://github.com/sobczyk) | * TJ Merritt (https://github.com/tjmerritt) | * Vincent Batoufflet (https://github.com/vbatoufflet) | * Vincent Bernat (https://github.com/vincentbernat) | * William Manley (https://github.com/wmanley) | * x539 (https://github.com/x539) | Copyright 2013-2015 aptly authors. All rights reserved | List of contributors, in chronological order:" core,github.com/DataDog/aptly/database/goleveldb,MIT,"* Alexander Guy (https://github.com/alexanderguy) | * Andre Roth (https://github.com/neolynx) | * Andrea Bernardo Ciddio (https://github.com/bcandrea) | * Andrey Smirnov (https://github.com/smira) | * Artem Smirnov (https://github.com/urpylka) | * Benj Fassbind (https://github.com/randombenj) | * Benoit Foucher (https://github.com/bentoi) | * Charles Hsu (https://github.com/charz) | * Chris Read (https://github.com/cread) | * Chuan Liu (https://github.com/chuan) | * Clemens Rabe (https://github.com/seeraven) | * Dmitrii Kashin (https://github.com/freehck) | * Don Kuntz (https://github.com/dkuntz2) | * Geoffrey Thomas (https://github.com/geofft) | * Harald Sitter (https://github.com/apachelogger) | * Ivan Kurnosov (https://github.com/zerkms) | * Johannes Layher (https://github.com/jola5) | * Joshua Colson (https://github.com/freakinhippie) | * Lorenzo Bolla (https://github.com/lbolla) | * Ludovico Cavedon (https://github.com/cavedon) | * Markus Muellner (https://github.com/mmianl) | * Matt Martyn (https://github.com/MMartyn) | * Maximilian Stein (https://github.com/steinymity) | * Michael Koval (https://github.com/mkoval) | * Nabil Bendafi (https://github.com/nabilbendafi) | * Oliver Sauder (https://github.com/sliverc) | * Paul Krohn (https://github.com/paul-krohn) | * Petr Jediny (https://github.com/pjediny) | * Phil Frost (https://github.com/bitglue) | * Raphael Medaer (https://github.com/rmedaer) | * Raul Benencia (https://github.com/rul) | * Rohan Garg (https://github.com/shadeslayer) | * Russ Allbery (https://github.com/rra) | * Russell Greene (https://github.com/russelltg) | * Ryan Uber (https://github.com/ryanuber) | * Samuel Mutel (https://github.com/smutel) | * Sebastien Badia (https://github.com/sbadia) | * Sebastien Binet (https://github.com/sbinet) | * Shengjing Zhu (https://github.com/zhsj) | * Simon Aquino (https://github.com/queeno) | * Strajan Sebastian (https://github.com/strajansebastian) | * Sylvain Baubeau (https://github.com/lebauce) | * Szymon Sobik (https://github.com/sobczyk) | * TJ Merritt (https://github.com/tjmerritt) | * Vincent Batoufflet (https://github.com/vbatoufflet) | * Vincent Bernat (https://github.com/vincentbernat) | * William Manley (https://github.com/wmanley) | * x539 (https://github.com/x539) | Copyright 2013-2015 aptly authors. All rights reserved | List of contributors, in chronological order:" @@ -312,10 +316,8 @@ core,github.com/coreos/pkg/dlopen,Apache-2.0,"Copyright 2017 CoreOS, Inc" core,github.com/cri-o/ocicni/pkg/ocicni,Apache-2.0,"Copyright 2016 Red Hat, Inc" core,github.com/cyphar/filepath-securejoin,BSD-3-Clause,Copyright (C) 2014-2015 Docker Inc & Go Authors. All rights reserved | Copyright (C) 2017 SUSE LLC. All rights reserved core,github.com/davecgh/go-spew/spew,ISC,Copyright (c) 2012-2016 Dave Collins -core,github.com/dgraph-io/ristretto,Apache-2.0,"Copyright (c) 2014 Andreas Briese, eduToolbox@Bri-C GmbH, Sarstedt | Copyright (c) 2019 Ewan Chou | Copyright 2019 Dgraph Labs, Inc. and Contributors | Copyright 2020 Dgraph Labs, Inc. and Contributors | Copyright 2020 The LevelDB-Go and Pebble Authors. All rights reserved." -core,github.com/dgraph-io/ristretto/z,MIT,"Copyright (c) 2014 Andreas Briese, eduToolbox@Bri-C GmbH, Sarstedt | Copyright (c) 2019 Ewan Chou | Copyright 2019 Dgraph Labs, Inc. and Contributors | Copyright 2020 Dgraph Labs, Inc. and Contributors | Copyright 2020 The LevelDB-Go and Pebble Authors. All rights reserved." -core,github.com/dgraph-io/ristretto/z/simd,MIT,"Copyright (c) 2014 Andreas Briese, eduToolbox@Bri-C GmbH, Sarstedt | Copyright (c) 2019 Ewan Chou | Copyright 2019 Dgraph Labs, Inc. and Contributors | Copyright 2020 Dgraph Labs, Inc. and Contributors | Copyright 2020 The LevelDB-Go and Pebble Authors. All rights reserved." core,github.com/dgryski/go-jump,MIT,Copyright (c) 2014 Damian Gryski +core,github.com/dgryski/go-rendezvous,MIT,Copyright (c) 2017-2020 Damian Gryski core,github.com/docker/distribution/digestset,Apache-2.0,"Copyright 2012-2017 Docker, Inc." core,github.com/docker/distribution/reference,Apache-2.0,"Copyright 2012-2017 Docker, Inc." core,github.com/docker/docker/api,Apache-2.0,"Copyright 2012-2017 Docker, Inc." @@ -380,6 +382,14 @@ core,github.com/go-openapi/jsonpointer,Apache-2.0,Copyright 2013 sigu-399 ( http core,github.com/go-openapi/jsonreference,Apache-2.0,Copyright 2013 sigu-399 ( https://github.com/sigu-399 ) core,github.com/go-openapi/jsonreference/internal,Apache-2.0,Copyright 2013 sigu-399 ( https://github.com/sigu-399 ) core,github.com/go-openapi/swag,Apache-2.0,Copyright 2015 go-swagger maintainers +core,github.com/go-redis/redis/v9,BSD-2-Clause,Copyright (c) 2013 The github.com/go-redis/redis Authors +core,github.com/go-redis/redis/v9/internal,BSD-2-Clause,Copyright (c) 2013 The github.com/go-redis/redis Authors +core,github.com/go-redis/redis/v9/internal/hashtag,BSD-2-Clause,Copyright (c) 2013 The github.com/go-redis/redis Authors +core,github.com/go-redis/redis/v9/internal/hscan,BSD-2-Clause,Copyright (c) 2013 The github.com/go-redis/redis Authors +core,github.com/go-redis/redis/v9/internal/pool,BSD-2-Clause,Copyright (c) 2013 The github.com/go-redis/redis Authors +core,github.com/go-redis/redis/v9/internal/proto,BSD-2-Clause,Copyright (c) 2013 The github.com/go-redis/redis Authors +core,github.com/go-redis/redis/v9/internal/rand,BSD-2-Clause,Copyright (c) 2013 The github.com/go-redis/redis Authors +core,github.com/go-redis/redis/v9/internal/util,BSD-2-Clause,Copyright (c) 2013 The github.com/go-redis/redis Authors core,github.com/gobwas/glob,MIT,Copyright (c) 2016 Sergey Kamardin core,github.com/gobwas/glob/compiler,MIT,Copyright (c) 2016 Sergey Kamardin core,github.com/gobwas/glob/match,MIT,Copyright (c) 2016 Sergey Kamardin @@ -510,6 +520,7 @@ core,github.com/iovisor/gobpf/pkg/cpupossible,Apache-2.0,Copyright 2016 Kinvolk core,github.com/iovisor/gobpf/pkg/cpurange,Apache-2.0,Copyright 2016 Kinvolk | Copyright 2016 PLUMgrid core,github.com/itchyny/gojq,MIT,Copyright (c) 2019-2022 itchyny core,github.com/itchyny/timefmt-go,MIT,Copyright (c) 2020-2022 itchyny +core,github.com/jinzhu/inflection,MIT,Copyright (c) 2015 - Jinzhu core,github.com/jlaffaye/ftp,ISC,"Copyright (c) 2011-2013, Julien Laffaye " core,github.com/jmespath/go-jmespath,Apache-2.0,Copyright 2015 James Saryerwinnie core,github.com/josharian/intern,MIT,Copyright (c) 2019 Josh Bleecher Snyder @@ -564,6 +575,7 @@ core,github.com/moby/sys/signal,Apache-2.0,Copyright (c) 2014-2018 The Docker & core,github.com/modern-go/concurrent,Apache-2.0,Copyright (c) 2018 Tao Wen core,github.com/modern-go/reflect2,Apache-2.0,Copyright (c) 2018 Tao Wen core,github.com/mohae/deepcopy,MIT,Copyright (c) 2014 Joel +core,github.com/montanaflynn/stats,MIT,Copyright (c) 2014-2015 Montana Flynn (https://anonfunction.com) | Copyright (c) 2014-2015 Montana Flynn core,github.com/mostynb/go-grpc-compression/snappy,Apache-2.0,Copyright 2017 gRPC authors. core,github.com/mostynb/go-grpc-compression/zstd,Apache-2.0,Copyright 2020 Mostyn Bramley-Moore. | Copyright 2020 Mostyn Bramley-Moore. core,github.com/munnerz/goautoneg,BSD-3-Clause,"Copyright (c) 2011, Open Knowledge Foundation Ltd" @@ -662,6 +674,9 @@ core,github.com/opencontainers/selinux/go-selinux/label,Apache-2.0,Copyright (c) core,github.com/opencontainers/selinux/pkg/pwalk,Apache-2.0,Copyright (c) 2017 The Authors core,github.com/opencontainers/selinux/pkg/pwalkdir,Apache-2.0,Copyright (c) 2017 The Authors core,github.com/openshift/api/quota/v1,Apache-2.0,"Copyright 2020 Red Hat, Inc." +core,github.com/outcaste-io/ristretto,Apache-2.0,"Copyright (c) 2014 Andreas Briese, eduToolbox@Bri-C GmbH, Sarstedt | Copyright (c) 2019 Ewan Chou | Copyright 2019 Dgraph Labs, Inc. and Contributors | Copyright 2020 Dgraph Labs, Inc. and Contributors | Copyright 2020 The LevelDB-Go and Pebble Authors. All rights reserved. | Copyright 2021 Dgraph Labs, Inc. and Contributors" +core,github.com/outcaste-io/ristretto/z,MIT,"Copyright (c) 2014 Andreas Briese, eduToolbox@Bri-C GmbH, Sarstedt | Copyright (c) 2019 Ewan Chou | Copyright 2019 Dgraph Labs, Inc. and Contributors | Copyright 2020 Dgraph Labs, Inc. and Contributors | Copyright 2020 The LevelDB-Go and Pebble Authors. All rights reserved. | Copyright 2021 Dgraph Labs, Inc. and Contributors" +core,github.com/outcaste-io/ristretto/z/simd,MIT,"Copyright (c) 2014 Andreas Briese, eduToolbox@Bri-C GmbH, Sarstedt | Copyright (c) 2019 Ewan Chou | Copyright 2019 Dgraph Labs, Inc. and Contributors | Copyright 2020 Dgraph Labs, Inc. and Contributors | Copyright 2020 The LevelDB-Go and Pebble Authors. All rights reserved. | Copyright 2021 Dgraph Labs, Inc. and Contributors" core,github.com/pahanini/go-grpc-bidirectional-streaming-example/src/proto,MIT,Copyright (c) 2017 Pavel Tetyaev core,github.com/patrickmn/go-cache,MIT,Alex Edwards | Copyright (c) 2012-2017 Patrick Mylund Nielsen and the go-cache contributors | Dustin Sallings | Jason Mooberry | Sergey Shepelev core,github.com/pborman/uuid,BSD-3-Clause,"Copyright (c) 2009,2014 Google Inc. All rights reserved | Paul Borman " @@ -725,6 +740,7 @@ core,github.com/spf13/cast,MIT,Copyright (c) 2014 Steve Francia core,github.com/spf13/cobra,Apache-2.0,Copyright © 2013 Steve Francia . core,github.com/spf13/jwalterweatherman,MIT,Copyright (c) 2014 Steve Francia core,github.com/spf13/pflag,BSD-3-Clause,Copyright (c) 2012 Alex Ogier. All rights reserved | Copyright (c) 2012 The Go Authors. All rights reserved +core,github.com/streadway/amqp,BSD-2-Clause,"Copyright (c) 2012-2019, Sean Treadway, SoundCloud Ltd" core,github.com/stretchr/objx,MIT,"Copyright (c) 2014 Stretchr, Inc | Copyright (c) 2017-2018 objx contributors" core,github.com/stretchr/testify/assert,MIT,"Copyright (c) 2012-2020 Mat Ryer, Tyler Bunnell and contributors" core,github.com/stretchr/testify/mock,MIT,"Copyright (c) 2012-2020 Mat Ryer, Tyler Bunnell and contributors" @@ -754,24 +770,45 @@ core,github.com/tinylib/msgp/parse,MIT,Copyright (c) 2009 The Go Authors (licens core,github.com/tinylib/msgp/printer,MIT,Copyright (c) 2009 The Go Authors (license at http://golang.org) where indicated | Copyright (c) 2014 Philip Hofer core,github.com/tklauser/go-sysconf,BSD-3-Clause,"Copyright (c) 2018-2022, Tobias Klauser" core,github.com/tklauser/numcpus,Apache-2.0,Copyright 2018 Tobias Klauser +core,github.com/tmthrgd/go-hex,BSD-3-Clause,"Copyright (c) 2005-2016, Wojciech Muła | Copyright (c) 2012 The Go Authors. All rights reserved | Copyright (c) 2016, Tom Thorogood" core,github.com/twmb/murmur3,BSD-3-Clause,"Copyright 2013, Sébastien Paolacci | Copyright 2018, Travis Bischel" core,github.com/ugorji/go/codec,MIT,Copyright (c) 2012-2020 Ugorji Nwoke core,github.com/ulikunitz/xz,BSD-3-Clause,Copyright (c) 2014-2021 Ulrich Kunitz core,github.com/ulikunitz/xz/internal/hash,BSD-3-Clause,Copyright (c) 2014-2021 Ulrich Kunitz core,github.com/ulikunitz/xz/internal/xlog,BSD-3-Clause,Copyright (c) 2014-2021 Ulrich Kunitz core,github.com/ulikunitz/xz/lzma,BSD-3-Clause,Copyright (c) 2014-2021 Ulrich Kunitz +core,github.com/uptrace/bun,BSD-2-Clause,Copyright (c) 2021 Vladimir Mihailenco. All rights reserved +core,github.com/uptrace/bun/dialect,BSD-2-Clause,Copyright (c) 2021 Vladimir Mihailenco. All rights reserved +core,github.com/uptrace/bun/dialect/feature,BSD-2-Clause,Copyright (c) 2021 Vladimir Mihailenco. All rights reserved +core,github.com/uptrace/bun/dialect/pgdialect,BSD-2-Clause,Copyright (c) 2021 Vladimir Mihailenco. All rights reserved +core,github.com/uptrace/bun/dialect/sqltype,BSD-2-Clause,Copyright (c) 2021 Vladimir Mihailenco. All rights reserved +core,github.com/uptrace/bun/driver/pgdriver,BSD-2-Clause,Copyright (c) 2021 Vladimir Mihailenco. All rights reserved +core,github.com/uptrace/bun/extra/bunjson,BSD-2-Clause,Copyright (c) 2021 Vladimir Mihailenco. All rights reserved +core,github.com/uptrace/bun/internal,BSD-2-Clause,Copyright (c) 2021 Vladimir Mihailenco. All rights reserved +core,github.com/uptrace/bun/internal/parser,BSD-2-Clause,Copyright (c) 2021 Vladimir Mihailenco. All rights reserved +core,github.com/uptrace/bun/internal/tagparser,BSD-2-Clause,Copyright (c) 2021 Vladimir Mihailenco. All rights reserved +core,github.com/uptrace/bun/schema,BSD-2-Clause,Copyright (c) 2021 Vladimir Mihailenco. All rights reserved core,github.com/urfave/negroni,MIT,Copyright (c) 2014 Jeremy Saenz core,github.com/vishvananda/netlink,Apache-2.0,"Copyright 2014 Docker, Inc | Copyright 2014 Vishvananda Ishaya" core,github.com/vishvananda/netlink/nl,Apache-2.0,"Copyright 2014 Docker, Inc | Copyright 2014 Vishvananda Ishaya" core,github.com/vishvananda/netns,Apache-2.0,"Copyright 2014 Docker, Inc | Copyright 2014 Vishvananda Ishaya" core,github.com/vito/go-sse/sse,Apache-2.0,Copyright (c) 2014 Alex Suraci +core,github.com/vmihailenco/msgpack/v5,BSD-2-Clause,Copyright (c) 2013 The github.com/vmihailenco/msgpack Authors +core,github.com/vmihailenco/msgpack/v5/msgpcode,BSD-2-Clause,Copyright (c) 2013 The github.com/vmihailenco/msgpack Authors +core,github.com/vmihailenco/tagparser/v2,BSD-2-Clause,Copyright (c) 2019 The github.com/vmihailenco/tagparser Authors +core,github.com/vmihailenco/tagparser/v2/internal,BSD-2-Clause,Copyright (c) 2019 The github.com/vmihailenco/tagparser Authors +core,github.com/vmihailenco/tagparser/v2/internal/parser,BSD-2-Clause,Copyright (c) 2019 The github.com/vmihailenco/tagparser Authors core,github.com/wI2L/jsondiff,MIT,Copyright (c) 2020-2022 William Poussier +core,github.com/xdg-go/pbkdf2,Apache-2.0,Copyright 2021 by David A. Golden. All rights reserved +core,github.com/xdg-go/scram,Apache-2.0,Copyright 2018 by David A. Golden. All rights reserved +core,github.com/xdg-go/stringprep,Apache-2.0,Copyright 2018 by David A. Golden. All rights reserved core,github.com/xeipuuv/gojsonpointer,Apache-2.0,Copyright 2015 xeipuuv ( https://github.com/xeipuuv ) core,github.com/xeipuuv/gojsonreference,Apache-2.0,Copyright 2015 xeipuuv ( https://github.com/xeipuuv ) core,github.com/xeipuuv/gojsonschema,Apache-2.0,Copyright 2015 xeipuuv core,github.com/xi2/xz,Public Domain,Igor Pavlov | Lasse Collin | Michael Cross core,github.com/xor-gate/ar,MIT,Copyright (c) 2013 Blake Smith core,github.com/yashtewari/glob-intersection,Apache-2.0,Copyright (c) 2018 Yash Tewari (yashtewari) +core,github.com/youmark/pkcs8,MIT,Copyright (c) 2014 youmark core,github.com/yusufpapurcu/wmi,MIT,Copyright (c) 2013 Stack Exchange core,go.etcd.io/bbolt,MIT,Copyright 2016 The etcd Authors core,go.etcd.io/etcd/api/v3/authpb,Apache-2.0,Copyright 2016 The etcd Authors @@ -794,6 +831,41 @@ core,go.etcd.io/etcd/client/v3,Apache-2.0,Copyright 2016 The etcd Authors core,go.etcd.io/etcd/client/v3/credentials,Apache-2.0,Copyright 2016 The etcd Authors core,go.etcd.io/etcd/client/v3/internal/endpoint,Apache-2.0,Copyright 2016 The etcd Authors core,go.etcd.io/etcd/client/v3/internal/resolver,Apache-2.0,Copyright 2016 The etcd Authors +core,go.mongodb.org/mongo-driver/bson,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/bson/bsoncodec,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/bson/bsonoptions,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/bson/bsonrw,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/bson/bsontype,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/bson/primitive,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/event,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/internal,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/internal/randutil,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/internal/randutil/rand,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/internal/uuid,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/mongo,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/mongo/address,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/mongo/description,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/mongo/options,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/mongo/readconcern,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/mongo/readpref,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/mongo/writeconcern,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/tag,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/version,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/bsonx,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/bsonx/bsoncore,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/auth,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/auth/internal/awsv4,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/auth/internal/gssapi,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/connstring,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/dns,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/mongocrypt,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/mongocrypt/options,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/ocsp,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/operation,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/session,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/topology,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/wiremessage,Apache-2.0,"Copyright © 2018 MongoDB, Inc." core,go.opencensus.io,Apache-2.0,"Copyright 2018, OpenCensus Authors" core,go.opencensus.io/internal,Apache-2.0,"Copyright 2018, OpenCensus Authors" core,go.opencensus.io/internal/tagencoding,Apache-2.0,"Copyright 2018, OpenCensus Authors" @@ -815,12 +887,14 @@ core,go.opencensus.io/trace/propagation,Apache-2.0,"Copyright 2018, OpenCensus A core,go.opencensus.io/trace/tracestate,Apache-2.0,"Copyright 2018, OpenCensus Authors" core,go.opentelemetry.io/collector/client,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/component,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/component/componenttest,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/config,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/config/configauth,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/config/configcompression,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/config/configgrpc,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/config/confighttp,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/config/confignet,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/config/configopaque,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/config/configtelemetry,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/config/configtls,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/config/internal,Apache-2.0,Copyright The OpenTelemetry Authors @@ -832,14 +906,18 @@ core,go.opentelemetry.io/collector/confmap/provider/fileprovider,Apache-2.0,Copy core,go.opentelemetry.io/collector/confmap/provider/httpprovider,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/confmap/provider/internal,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/confmap/provider/yamlprovider,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/connector,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/consumer,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/consumer/consumererror,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/consumer/consumertest,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/exporter,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/exporter/exporterhelper,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/exporter/exporterhelper/internal,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/exporter/loggingexporter,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/exporter/loggingexporter/internal/otlptext,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/exporter/otlpexporter,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/extension,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/extension/auth,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/extension/experimental/storage,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/featuregate,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/internal/obsreportconfig,Apache-2.0,Copyright The OpenTelemetry Authors @@ -847,6 +925,9 @@ core,go.opentelemetry.io/collector/internal/obsreportconfig/obsmetrics,Apache-2. core,go.opentelemetry.io/collector/internal/sharedcomponent,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/internal/testdata,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/obsreport,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/otelcol,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/otelcol/internal/configunmarshaler,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/otelcol/internal/grpclog,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/pdata/internal,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/pdata/internal/data,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/pdata/internal/data/protogen/collector/logs/v1,Apache-2.0,Copyright The OpenTelemetry Authors @@ -869,7 +950,9 @@ core,go.opentelemetry.io/collector/pdata/pmetric/pmetricotlp,Apache-2.0,Copyrigh core,go.opentelemetry.io/collector/pdata/ptrace,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/pdata/ptrace/internal/ptracejson,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/pdata/ptrace/ptraceotlp,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/processor,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/processor/batchprocessor,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/receiver,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/receiver/otlpreceiver,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/receiver/otlpreceiver/internal/logs,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/receiver/otlpreceiver/internal/metrics,Apache-2.0,Copyright The OpenTelemetry Authors @@ -879,11 +962,9 @@ core,go.opentelemetry.io/collector/semconv/v1.5.0,Apache-2.0,Copyright The OpenT core,go.opentelemetry.io/collector/semconv/v1.6.1,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/service,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/service/extensions,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/service/internal/capabilityconsumer,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/service/internal/components,Apache-2.0,Copyright The OpenTelemetry Authors -core,go.opentelemetry.io/collector/service/internal/configunmarshaler,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/service/internal/fanoutconsumer,Apache-2.0,Copyright The OpenTelemetry Authors -core,go.opentelemetry.io/collector/service/internal/grpclog,Apache-2.0,Copyright The OpenTelemetry Authors -core,go.opentelemetry.io/collector/service/internal/pipelines,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/service/internal/proctelemetry,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/service/internal/runtimeinfo,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/service/internal/zpages,Apache-2.0,Copyright The OpenTelemetry Authors @@ -961,6 +1042,7 @@ core,golang.org/x/crypto/cryptobyte/asn1,BSD-3-Clause,Copyright (c) 2009 The Go core,golang.org/x/crypto/internal/alias,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/internal/poly1305,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/nacl/secretbox,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/crypto/ocsp,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/openpgp,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/openpgp/armor,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/openpgp/clearsign,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved @@ -971,6 +1053,7 @@ core,golang.org/x/crypto/openpgp/s2k,BSD-3-Clause,Copyright (c) 2009 The Go Auth core,golang.org/x/crypto/pbkdf2,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/salsa20/salsa,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/scrypt,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/crypto/ssh,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/exp/constraints,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/exp/maps,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/exp/slices,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved @@ -1434,6 +1517,18 @@ core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/clientset/versioned/ty core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/clientset/versioned/typed/autoscaling.k8s.io/v1beta1,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/clientset/versioned/typed/autoscaling.k8s.io/v1beta2,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/clientset/versioned/typed/poc.autoscaling.k8s.io/v1alpha1,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions/autoscaling.k8s.io,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions/autoscaling.k8s.io/v1,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions/autoscaling.k8s.io/v1beta1,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions/autoscaling.k8s.io/v1beta2,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions/internalinterfaces,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions/poc.autoscaling.k8s.io,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions/poc.autoscaling.k8s.io/v1alpha1,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/listers/autoscaling.k8s.io/v1,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/listers/autoscaling.k8s.io/v1beta1,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/listers/autoscaling.k8s.io/v1beta2,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/listers/poc.autoscaling.k8s.io/v1alpha1,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/client-go/applyconfigurations/admissionregistration/v1,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/client-go/applyconfigurations/apiserverinternal/v1alpha1,Apache-2.0,Copyright 2014 The Kubernetes Authors. @@ -1789,6 +1884,7 @@ core,k8s.io/utils/net,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/utils/path,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/utils/pointer,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/utils/trace,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,mellium.im/sasl,BSD-2-Clause,Copyright © 2014 The Mellium Contributors core,sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client,Apache-2.0,Copyright 2017 The Kubernetes Authors. core,sigs.k8s.io/apiserver-network-proxy/konnectivity-client/proto/client,Apache-2.0,Copyright 2017 The Kubernetes Authors. core,sigs.k8s.io/controller-runtime,Apache-2.0,Copyright 2017 The Kubernetes Authors. diff --git a/cmd/agent/api/internal/agent/agent.go b/cmd/agent/api/internal/agent/agent.go index 3f121cc933b013..2e5bd92cf88598 100644 --- a/cmd/agent/api/internal/agent/agent.go +++ b/cmd/agent/api/internal/agent/agent.go @@ -24,10 +24,11 @@ import ( "github.com/DataDog/datadog-agent/cmd/agent/common" "github.com/DataDog/datadog-agent/cmd/agent/common/signals" "github.com/DataDog/datadog-agent/cmd/agent/gui" + "github.com/DataDog/datadog-agent/comp/core/flare" "github.com/DataDog/datadog-agent/pkg/autodiscovery" "github.com/DataDog/datadog-agent/pkg/config" settingshttp "github.com/DataDog/datadog-agent/pkg/config/settings/http" - "github.com/DataDog/datadog-agent/pkg/flare" + pkgflare "github.com/DataDog/datadog-agent/pkg/flare" "github.com/DataDog/datadog-agent/pkg/logs" "github.com/DataDog/datadog-agent/pkg/logs/diagnostic" "github.com/DataDog/datadog-agent/pkg/metadata/inventories" @@ -45,10 +46,10 @@ import ( ) // SetupHandlers adds the specific handlers for /agent endpoints -func SetupHandlers(r *mux.Router) *mux.Router { +func SetupHandlers(r *mux.Router, flare flare.Component) *mux.Router { r.HandleFunc("/version", common.GetVersion).Methods("GET") r.HandleFunc("/hostname", getHostname).Methods("GET") - r.HandleFunc("/flare", makeFlare).Methods("POST") + r.HandleFunc("/flare", func(w http.ResponseWriter, r *http.Request) { makeFlare(w, r, flare) }).Methods("POST") r.HandleFunc("/stop", stopAgent).Methods("POST") r.HandleFunc("/status", getStatus).Methods("GET") r.HandleFunc("/stream-logs", streamLogs).Methods("POST") @@ -97,8 +98,8 @@ func getHostname(w http.ResponseWriter, r *http.Request) { w.Write(j) } -func makeFlare(w http.ResponseWriter, r *http.Request) { - var profile flare.ProfileData +func makeFlare(w http.ResponseWriter, r *http.Request, flare flare.Component) { + var profile pkgflare.ProfileData if r.Body != http.NoBody { body, err := io.ReadAll(r.Body) @@ -125,8 +126,18 @@ func makeFlare(w http.ResponseWriter, r *http.Request) { if jmxLogFile == "" { jmxLogFile = common.DefaultJmxLogFile } + + // If we're not in an FX app we fallback to pkgflare implementation. Once all app have been migrated to flare we + // could remove this. + var filePath string + var err error log.Infof("Making a flare") - filePath, err := flare.CreateArchive(false, common.GetDistPath(), common.PyChecksPath, []string{logFile, jmxLogFile}, profile, nil) + if flare != nil { + filePath, err = flare.Create(false, common.GetDistPath(), common.PyChecksPath, []string{logFile, jmxLogFile}, profile, nil) + } else { + filePath, err = pkgflare.CreateArchive(false, common.GetDistPath(), common.PyChecksPath, []string{logFile, jmxLogFile}, profile, nil) + } + if err != nil || filePath == "" { if err != nil { log.Errorf("The flare failed to be created: %s", err) diff --git a/cmd/agent/api/server.go b/cmd/agent/api/server.go index 0c3b7d07cad4e2..07a9399811c099 100644 --- a/cmd/agent/api/server.go +++ b/cmd/agent/api/server.go @@ -30,6 +30,7 @@ import ( "github.com/DataDog/datadog-agent/cmd/agent/api/internal/agent" "github.com/DataDog/datadog-agent/cmd/agent/api/internal/check" + "github.com/DataDog/datadog-agent/comp/core/flare" "github.com/DataDog/datadog-agent/pkg/api/util" "github.com/DataDog/datadog-agent/pkg/config" remoteconfig "github.com/DataDog/datadog-agent/pkg/config/remote/service" @@ -42,7 +43,7 @@ import ( var listener net.Listener // StartServer creates the router and starts the HTTP server -func StartServer(configService *remoteconfig.Service) error { +func StartServer(configService *remoteconfig.Service, flare flare.Component) error { initializeTLS() // get the transport we're going to use under HTTP @@ -105,7 +106,7 @@ func StartServer(configService *remoteconfig.Service) error { checkMux.Use(validateToken) mux := http.NewServeMux() - mux.Handle("/agent/", http.StripPrefix("/agent", agent.SetupHandlers(agentMux))) + mux.Handle("/agent/", http.StripPrefix("/agent", agent.SetupHandlers(agentMux, flare))) mux.Handle("/check/", http.StripPrefix("/check", check.SetupHandlers(checkMux))) mux.Handle("/", gwmux) diff --git a/cmd/agent/common/autodiscovery.go b/cmd/agent/common/autodiscovery.go index f7f8f66c7f9073..8077cbaaa7c0dd 100644 --- a/cmd/agent/common/autodiscovery.go +++ b/cmd/agent/common/autodiscovery.go @@ -7,9 +7,11 @@ package common import ( "context" + "fmt" "time" "go.uber.org/atomic" + utilserror "k8s.io/apimachinery/pkg/util/errors" "github.com/DataDog/datadog-agent/pkg/autodiscovery" "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" @@ -18,7 +20,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/autodiscovery/scheduler" "github.com/DataDog/datadog-agent/pkg/config" confad "github.com/DataDog/datadog-agent/pkg/config/autodiscovery" - "github.com/DataDog/datadog-agent/pkg/util" + "github.com/DataDog/datadog-agent/pkg/util/jsonquery" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -31,7 +33,7 @@ var ( "container": {"kubelet": struct{}{}}, } - incompatibleProviders = []string{"kubelet", "container", "docker"} + legacyProviders = []string{"kubelet", "container", "docker"} ) func setupAutoDiscovery(confSearchPaths []string, metaScheduler *scheduler.MetaScheduler) *autodiscovery.AutoConfig { @@ -72,28 +74,16 @@ func setupAutoDiscovery(confSearchPaths []string, metaScheduler *scheduler.MetaS } } - ccaInAD := util.CcaInAD() - if ccaInAD { - var enableContainerProvider bool - for _, p := range incompatibleProviders { - if _, found := uniqueConfigProviders[p]; found { - enableContainerProvider = true - delete(uniqueConfigProviders, p) - } + var enableContainerProvider bool + for _, p := range legacyProviders { + if _, found := uniqueConfigProviders[p]; found { + enableContainerProvider = true + delete(uniqueConfigProviders, p) } + } - if enableContainerProvider { - uniqueConfigProviders[names.KubeContainer] = config.ConfigurationProviders{Name: names.KubeContainer} - } - } else { - // The "docker" config provider was replaced with the "container" one - // that supports Docker, but also other runtimes. We need this - // conversion to avoid breaking configs that included "docker". - if options, found := uniqueConfigProviders["docker"]; found { - delete(uniqueConfigProviders, "docker") - options.Name = names.Container - uniqueConfigProviders["container"] = options - } + if enableContainerProvider { + uniqueConfigProviders[names.KubeContainer] = config.ConfigurationProviders{Name: names.KubeContainer} } for _, provider := range extraConfigProviders { @@ -224,14 +214,14 @@ func (sf schedulerFunc) Stop() { // // If the context is cancelled, then any accumulated, matching changes are // returned, even if that is fewer than discoveryMinInstances. -func WaitForConfigsFromAD(ctx context.Context, checkNames []string, discoveryMinInstances int) (configs []integration.Config) { - return waitForConfigsFromAD(ctx, false, checkNames, discoveryMinInstances) +func WaitForConfigsFromAD(ctx context.Context, checkNames []string, discoveryMinInstances int, instanceFilter string) (configs []integration.Config, lastError error) { + return waitForConfigsFromAD(ctx, false, checkNames, discoveryMinInstances, instanceFilter) } // WaitForAllConfigsFromAD waits until its context expires, and then returns // the full set of checks scheduled by AD. -func WaitForAllConfigsFromAD(ctx context.Context) (configs []integration.Config) { - return waitForConfigsFromAD(ctx, true, []string{}, 0) +func WaitForAllConfigsFromAD(ctx context.Context) (configs []integration.Config, lastError error) { + return waitForConfigsFromAD(ctx, true, []string{}, 0, "") } // waitForConfigsFromAD waits for configs from the AD scheduler and returns them. @@ -247,7 +237,7 @@ func WaitForAllConfigsFromAD(ctx context.Context) (configs []integration.Config) // If wildcard is true, this gathers all configs scheduled before the context // is cancelled, and then returns. It will not return before the context is // cancelled. -func waitForConfigsFromAD(ctx context.Context, wildcard bool, checkNames []string, discoveryMinInstances int) (configs []integration.Config) { +func waitForConfigsFromAD(ctx context.Context, wildcard bool, checkNames []string, discoveryMinInstances int, instanceFilter string) (configs []integration.Config, returnErr error) { configChan := make(chan integration.Config) // signal to the scheduler when we are no longer waiting, so we do not continue @@ -278,23 +268,59 @@ func waitForConfigsFromAD(ctx context.Context, wildcard bool, checkNames []strin } } + stopChan := make(chan struct{}) // add the scheduler in a goroutine, since it will schedule any "catch-up" immediately, // placing items in configChan go AC.AddScheduler("check-cmd", schedulerFunc(func(configs []integration.Config) { + var errors []error for _, cfg := range configs { + if instanceFilter != "" { + instances, filterErrors := filterInstances(cfg.Instances, instanceFilter) + if len(filterErrors) > 0 { + errors = append(errors, filterErrors...) + continue + } + if len(instances) == 0 { + continue + } + cfg.Instances = instances + } + if match(cfg) && waiting.Load() { configChan <- cfg } } + if len(errors) > 0 { + returnErr = utilserror.NewAggregate(errors) + stopChan <- struct{}{} + } }), true) for wildcard || len(configs) < discoveryMinInstances { select { case cfg := <-configChan: configs = append(configs, cfg) + case <-stopChan: + return case <-ctx.Done(): return } } return } + +func filterInstances(instances []integration.Data, instanceFilter string) ([]integration.Data, []error) { + var newInstances []integration.Data + var errors []error + for _, instance := range instances { + exist, err := jsonquery.YAMLCheckExist(instance, instanceFilter) + if err != nil { + errors = append(errors, fmt.Errorf("instance filter error: %v", err)) + continue + } + if exist { + newInstances = append(newInstances, instance) + } + } + return newInstances, errors +} diff --git a/cmd/agent/common/loader.go b/cmd/agent/common/loader.go index 5e511143e7b839..698c1a519025c2 100644 --- a/cmd/agent/common/loader.go +++ b/cmd/agent/common/loader.go @@ -42,6 +42,10 @@ func LoadComponents(ctx context.Context, confdPath string) { options, err := remote.CLCRunnerOptions() if err != nil { log.Errorf("unable to configure the remote tagger: %s", err) + t = local.NewFakeTagger() + } else if options.Disabled { + log.Info("remote tagger is disabled") + t = local.NewFakeTagger() } else { t = remote.NewTagger(options) } diff --git a/cmd/agent/dist/conf.d/ntp.d/conf.yaml.default b/cmd/agent/dist/conf.d/ntp.d/conf.yaml.default index 35be64ef55627b..aafdb72b65d581 100644 --- a/cmd/agent/dist/conf.d/ntp.d/conf.yaml.default +++ b/cmd/agent/dist/conf.d/ntp.d/conf.yaml.default @@ -18,7 +18,7 @@ instances: # # host: .datadog.pool.ntp.org - ## @param port - string - optional - default: 123 + ## @param port - integer - optional - default: 123 ## Port to use when reaching the NTP server. # # port: 123 diff --git a/cmd/agent/gui/agent.go b/cmd/agent/gui/agent.go index 897a5e9b08ec85..fba804f96eea92 100644 --- a/cmd/agent/gui/agent.go +++ b/cmd/agent/gui/agent.go @@ -132,6 +132,7 @@ func makeFlare(w http.ResponseWriter, r *http.Request) { payload, e := parseBody(r) if e != nil { w.Write([]byte(e.Error())) + return } else if payload.Email == "" || payload.CaseID == "" { w.Write([]byte("Error creating flare: missing information")) return @@ -191,6 +192,7 @@ func getConfigSetting(w http.ResponseWriter, r *http.Request) { }[setting]; !ok { w.WriteHeader(http.StatusForbidden) fmt.Fprintf(w, `"error": "requested setting is not whitelisted"`) + return } if err := json.NewEncoder(w).Encode(map[string]interface{}{ setting: config.Datadog.Get(setting), @@ -218,6 +220,7 @@ func setConfigFile(w http.ResponseWriter, r *http.Request) { payload, e := parseBody(r) if e != nil { w.Write([]byte(e.Error())) + return } data := []byte(payload.Config) diff --git a/cmd/agent/gui/agent_test.go b/cmd/agent/gui/agent_test.go new file mode 100644 index 00000000000000..7b8fe2465b691c --- /dev/null +++ b/cmd/agent/gui/agent_test.go @@ -0,0 +1,104 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package gui + +import ( + "fmt" + "io" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/gorilla/mux" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func Test_makeFlare(t *testing.T) { + tests := []struct { + name string + payload string + expectedBody string + }{ + { + name: "Bad payload", + payload: "a\n", + expectedBody: "invalid character 'a' looking for beginning of value", + }, + { + name: "Missing email", + payload: "{\"caseID\": \"102123123\"}", + expectedBody: "Error creating flare: missing information", + }, + { + name: "Missing caseID", + payload: "{\"email\": \"test@example.com\"}", + expectedBody: "Error creating flare: missing information", + }, + { + name: "Invalid caseID", + payload: "{\"email\": \"test@example.com\", \"caseID\": \"102123123a\"}", + expectedBody: "Invalid CaseID (must be a number)", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + req, err := http.NewRequest("POST", "/flare", strings.NewReader(tt.payload)) + require.NoError(t, err) + + rr := httptest.NewRecorder() + + router := mux.NewRouter() + agentHandler(router) + router.ServeHTTP(rr, req) + + resp := rr.Result() + defer resp.Body.Close() + body, _ := io.ReadAll(resp.Body) + assert.Equal(t, string(body), tt.expectedBody) + }) + } +} + +func Test_getConfigSetting(t *testing.T) { + tests := []struct { + name string + configSetting string + expectedBody string + }{ + { + name: "Allowed setting", + configSetting: "apm_config.receiver_port", + expectedBody: "{\"apm_config.receiver_port\":8126}\n", + }, + { + name: "Not allowed setting", + configSetting: "api_key", + expectedBody: "\"error\": \"requested setting is not whitelisted\"", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + path := fmt.Sprintf("/getConfig/%s", tt.configSetting) + req, err := http.NewRequest("GET", path, nil) + require.NoError(t, err) + + rr := httptest.NewRecorder() + + router := mux.NewRouter() + agentHandler(router) + router.ServeHTTP(rr, req) + + resp := rr.Result() + defer resp.Body.Close() + body, _ := io.ReadAll(resp.Body) + assert.Equal(t, string(body), tt.expectedBody) + }) + } +} diff --git a/cmd/agent/install_script.sh b/cmd/agent/install_script.sh index beb8c0575b14c2..c807e01b405819 100755 --- a/cmd/agent/install_script.sh +++ b/cmd/agent/install_script.sh @@ -14,7 +14,7 @@ echo -e "\033[33m * https://s3.amazonaws.com/dd-agent/scripts/install_script_agent7.sh to install Agent 7 \033[0m" -install_script_version=1.11.0.deprecated +install_script_version=1.13.0.deprecated logfile="ddagent-install.log" support_email=support@datadoghq.com @@ -33,9 +33,9 @@ APT_GPG_KEYS=("DATADOG_APT_KEY_CURRENT.public" "DATADOG_APT_KEY_F14F620E.public" # DATADOG_RPM_KEY_FD4BF915.public expires in 2024 RPM_GPG_KEYS=("DATADOG_RPM_KEY_CURRENT.public" "DATADOG_RPM_KEY_E09422B3.public" "DATADOG_RPM_KEY_FD4BF915.public") -# RPM_GPG_KEYS_A6 contains keys we only install for the A6 repo. -# DATADOG_RPM_KEY.public is only useful to install old (< 6.14) Agent packages. -RPM_GPG_KEYS_A6=("DATADOG_RPM_KEY.public") +# DATADOG_RPM_KEY.public (4172A230) was only useful to install old (< 6.14) Agent packages. +# We no longer add it and we explicitly remove it. +RPM_GPG_KEYS_TO_REMOVE=("gpg-pubkey-4172a230-55dd14f6") # Set up a named pipe for logging npipe=/tmp/$$.tmp @@ -143,6 +143,18 @@ function verify_agent_version(){ fi } +function remove_rpm_gpg_keys() { + local sudo_cmd="$1" + shift + local old_keys=("$@") + for key in "${old_keys[@]}"; do + if $sudo_cmd rpm -q "$key" 1>/dev/null 2>/dev/null; then + echo -e "\033[34m\nRemoving old RPM key $key from the RPM database\n\033[0m" + $sudo_cmd rpm --erase "$key" + fi + done +} + echo -e "\033[34m\n* Datadog Agent install script v${install_script_version}\n\033[0m" hostname= @@ -227,6 +239,7 @@ flavor_to_readable=( ["datadog-agent"]="Datadog Agent" ["datadog-iot-agent"]="Datadog IoT Agent" ["datadog-dogstatsd"]="Datadog Dogstatsd" + ["datadog-fips-proxy"]="Datadog FIPS Proxy" ["datadog-heroku-agent"]="Datadog Heroku Agent" ) nice_flavor=${flavor_to_readable[$agent_flavor]} @@ -243,17 +256,25 @@ flavor_to_system_service=( ) system_service=${flavor_to_system_service[$agent_flavor]:-datadog-agent} +declare -a services +services=("$system_service") +if [ -n "$fips_mode" ]; then + services+=("datadog-fips-proxy") +fi + declare -A flavor_to_etcdir flavor_to_etcdir=( ["datadog-dogstatsd"]="/etc/datadog-dogstatsd" ) etcdir=${flavor_to_etcdir[$agent_flavor]:-/etc/datadog-agent} +etcdirfips=/etc/datadog-fips-proxy declare -A flavor_to_config flavor_to_config=( ["datadog-dogstatsd"]="$etcdir/dogstatsd.yaml" ) config_file=${flavor_to_config[$agent_flavor]:-$etcdir/datadog.yaml} +config_file_fips=$etcdirfips/datadog-fips-proxy.cfg agent_major_version=6 if [ -n "$DD_AGENT_MAJOR_VERSION" ]; then @@ -374,6 +395,7 @@ fi # Install the necessary package sources if [ "$OS" = "RedHat" ]; then + remove_rpm_gpg_keys "$sudo_cmd" "${RPM_GPG_KEYS_TO_REMOVE[@]}" if { [ "$DISTRIBUTION" == "Rocky" ] || [ "$DISTRIBUTION" == "AlmaLinux" ]; } && { [ -n "$agent_minor_version" ] && [ "$agent_minor_version" -lt 33 ]; } && ! echo "$agent_flavor" | grep '[0-9]' > /dev/null; then echo -e "\033[33mA future version of $nice_flavor will support $DISTRIBUTION\n\033[0m" exit; @@ -410,11 +432,6 @@ if [ "$OS" = "RedHat" ]; then for key_path in "${RPM_GPG_KEYS[@]}"; do gpgkeys="${gpgkeys:+"${gpgkeys}${separator}"}https://${keys_url}/${key_path}" done - if [ "$agent_major_version" -eq 6 ]; then - for key_path in "${RPM_GPG_KEYS_A6[@]}"; do - gpgkeys="${gpgkeys:+"${gpgkeys}${separator}"}https://${keys_url}/${key_path}" - done - fi $sudo_cmd sh -c "echo -e '[datadog]\nname = Datadog, Inc.\nbaseurl = https://${yum_url}/${yum_version_path}/${ARCHI}/\nenabled=1\ngpgcheck=1\nrepo_gpgcheck=${rpm_repo_gpgcheck}\npriority=1\ngpgkey=${gpgkeys}' > /etc/yum.repos.d/datadog.repo" @@ -435,7 +452,6 @@ if [ "$OS" = "RedHat" ]; then agent_version_custom="$(yum -y --disablerepo=* --enablerepo=datadog list --showduplicates datadog-agent | sort -r | grep -E "$pkg_pattern" -om1)" || true verify_agent_version "-" fi - echo -e " \033[33mInstalling package: $agent_flavor\n\033[0m" declare -a packages packages=("$agent_flavor") @@ -443,6 +459,8 @@ if [ "$OS" = "RedHat" ]; then packages+=("datadog-fips-proxy") fi + echo -e " \033[33mInstalling package(s): ${packages[*]}\n\033[0m" + $sudo_cmd yum -y --disablerepo='*' --enablerepo='datadog' install $dnf_flag "${packages[@]}" || $sudo_cmd yum -y install $dnf_flag "${packages[@]}" elif [ "$OS" = "Debian" ]; then @@ -520,7 +538,6 @@ If the cause is unclear, please contact Datadog support. agent_version_custom="$(apt-cache madison datadog-agent | grep -E "$pkg_pattern" -om1)" || true verify_agent_version "=" fi - echo -e " \033[33mInstalling package: $agent_flavor\n\033[0m" declare -a packages packages=("$agent_flavor" "datadog-signing-keys") @@ -528,9 +545,13 @@ If the cause is unclear, please contact Datadog support. packages+=("datadog-fips-proxy") fi + echo -e " \033[33mInstalling package(s): ${packages[*]}\n\033[0m" + $sudo_cmd apt-get install -y --force-yes "${packages[@]}" + ERROR_MESSAGE="" elif [ "$OS" = "SUSE" ]; then + remove_rpm_gpg_keys "$sudo_cmd" "${RPM_GPG_KEYS_TO_REMOVE[@]}" UNAME_M=$(uname -m) if [ "$UNAME_M" == "i686" ] || [ "$UNAME_M" == "i386" ] || [ "$UNAME_M" == "x86" ]; then printf "\033[31mThe Datadog Agent installer is only available for 64 bit SUSE Enterprise machines.\033[0m\n" @@ -575,21 +596,10 @@ elif [ "$OS" = "SUSE" ]; then $sudo_cmd curl -o "/tmp/${key_path}" "https://${keys_url}/${key_path}" $sudo_cmd rpm --import "/tmp/${key_path}" done - if [ "$agent_major_version" -eq 6 ]; then - for key_path in "${RPM_GPG_KEYS_A6[@]}"; do - $sudo_cmd curl -o "/tmp/${key_path}" "https://${keys_url}/${key_path}" - $sudo_cmd rpm --import "/tmp/${key_path}" - done - fi else for key_path in "${RPM_GPG_KEYS[@]}"; do $sudo_cmd rpm --import "https://${keys_url}/${key_path}" done - if [ "$agent_major_version" -eq 6 ]; then - for key_path in "${RPM_GPG_KEYS_A6[@]}"; do - $sudo_cmd rpm --import "https://${keys_url}/${key_path}" - done - fi fi # Parse the major version number out of the distro release info file. xargs is used to trim whitespace. @@ -604,11 +614,6 @@ elif [ "$OS" = "SUSE" ]; then for key_path in "${RPM_GPG_KEYS[@]}"; do gpgkeys="${gpgkeys:+"${gpgkeys}${separator}"}https://${keys_url}/${key_path}" done - if [ "$agent_major_version" -eq 6 ]; then - for key_path in "${RPM_GPG_KEYS_A6[@]}"; do - gpgkeys="${gpgkeys:+"${gpgkeys}${separator}"}https://${keys_url}/${key_path}" - done - fi fi echo -e "\033[34m\n* Installing YUM Repository for Datadog\n\033[0m" @@ -654,7 +659,6 @@ elif [ "$OS" = "SUSE" ]; then agent_version_custom="$(zypper search -s datadog-agent | grep -E "$pkg_pattern" -om1)" || true verify_agent_version "-" fi - echo -e " \033[33mInstalling package: $agent_flavor\n\033[0m" declare -a packages packages=("$agent_flavor") @@ -662,6 +666,9 @@ elif [ "$OS" = "SUSE" ]; then packages+=("datadog-fips-proxy") fi + + echo -e " \033[33mInstalling package(s): ${packages[*]}\n\033[0m" + if [ -z "$sudo_cmd" ]; then ZYPP_RPM_DEBUG="${ZYPP_RPM_DEBUG:-0}" zypper --non-interactive install "${packages[@]}" ||: else @@ -778,6 +785,23 @@ fi $sudo_cmd chown dd-agent:dd-agent "$config_file" $sudo_cmd chmod 640 "$config_file" +# set the FIPS configuration +if [ -n "$fips_mode" ]; then + if [ -e "$config_file_fips" ] && [ -z "$upgrade" ]; then + printf "\033[34m\n* Keeping old $config_file_fips configuration file\n\033[0m\n" + else + if [ ! -e "$config_file_fips" ]; then + $sudo_cmd cp "$config_file_fips.example" "$config_file_fips" + + # TODO: set port range in file, or environment variable + fi + + $sudo_cmd chown dd-agent:dd-agent "$config_file_fips" + $sudo_cmd chmod 640 "$config_file_fips" + + fi +fi + # Creating or overriding the install information install_info_content="--- install_method: @@ -787,6 +811,11 @@ install_method: " $sudo_cmd sh -c "echo '$install_info_content' > $etcdir/install_info" +if [ -n "$fips_mode" ]; then + # Creating or overriding the install information + $sudo_cmd sh -c "echo '$install_info_content' > $etcdirfips/install_info" +fi + # On SUSE 11, sudo service datadog-agent start fails (because /sbin is not in a base user's path) # However, sudo /sbin/service datadog-agent does work. # Use which (from root user) to find the absolute path to service @@ -796,52 +825,59 @@ if [ "$SUSE11" == "yes" ]; then service_cmd=`$sudo_cmd which service` fi -# Use /usr/sbin/service by default. -# Some distros usually include compatibility scripts with Upstart or Systemd. Check with: `command -v service | xargs grep -E "(upstart|systemd)"` -restart_cmd="$sudo_cmd $service_cmd $system_service restart" -stop_instructions="$sudo_cmd $service_cmd $system_service stop" -start_instructions="$sudo_cmd $service_cmd $system_service start" - -if [[ `$sudo_cmd ps --no-headers -o comm 1 2>&1` == "systemd" ]] && command -v systemctl 2>&1; then - # Use systemd if systemctl binary exists and systemd is the init process - restart_cmd="$sudo_cmd systemctl restart ${system_service}.service" - stop_instructions="$sudo_cmd systemctl stop $system_service" - start_instructions="$sudo_cmd systemctl start $system_service" -elif /sbin/init --version 2>&1 | grep -q upstart; then - # Try to detect Upstart, this works most of the times but still a best effort - restart_cmd="$sudo_cmd stop $system_service || true ; sleep 2s ; $sudo_cmd start $system_service" - stop_instructions="$sudo_cmd stop $system_service" - start_instructions="$sudo_cmd start $system_service" -fi +declare -a monitoring_services +monitoring_services=( "datadog-agent" ) if [ $no_start ]; then - printf "\033[34m -* DD_INSTALL_ONLY environment variable set: the newly installed version of the -$nice_flavor will not be started. You will have to do it manually using the -following command: + printf "\033[34m\n * DD_INSTALL_ONLY environment variable set.\033[0m\n" +fi + +for current_service in "${services[@]}"; do + nice_current_flavor=${flavor_to_readable[$current_service]} + + # Use /usr/sbin/service by default. + # Some distros usually include compatibility scripts with Upstart or Systemd. Check with: `command -v service | xargs grep -E "(upstart|systemd)"` + restart_cmd="$sudo_cmd $service_cmd $current_service restart" + stop_instructions="$sudo_cmd $service_cmd $current_service stop" + start_instructions="$sudo_cmd $service_cmd $current_service start" + + if [[ `$sudo_cmd ps --no-headers -o comm 1 2>&1` == "systemd" ]] && command -v systemctl 2>&1; then + # Use systemd if systemctl binary exists and systemd is the init process + restart_cmd="$sudo_cmd systemctl restart ${current_service}.service" + stop_instructions="$sudo_cmd systemctl stop $current_service" + start_instructions="$sudo_cmd systemctl start $current_service" + elif /sbin/init --version 2>&1 | grep -q upstart; then + # Try to detect Upstart, this works most of the times but still a best effort + restart_cmd="$sudo_cmd stop $current_service || true ; sleep 2s ; $sudo_cmd start $current_service" + stop_instructions="$sudo_cmd stop $current_service" + start_instructions="$sudo_cmd start $current_service" + fi - $start_instructions + if [ $no_start ]; then + printf "\033[34m\n The newly installed version of the ${nice_current_flavor} will not be started. + You will have to do it manually using the following command: -\033[0m\n" - exit -fi + $start_instructions\033[0m\n\n" -printf "\033[34m* Starting the $nice_flavor...\n\033[0m\n" -eval "$restart_cmd" + continue + fi + printf "\033[34m* Starting the ${nice_current_flavor}...\n\033[0m\n" + eval "$restart_cmd" -# Metrics are submitted, echo some instructions and exit -printf "\033[32m -Your $nice_flavor is running and functioning properly. It will continue -to run in the background and submit metrics to Datadog. + # Metrics are submitted, echo some instructions and exit + printf "\033[32m Your ${nice_current_flavor} is running and functioning properly.\n\033[0m" -If you ever want to stop the $nice_flavor, run: + if [[ "${monitoring_services[*]}" =~ ${current_service} ]]; then + printf "\033[32m It will continue to run in the background and submit metrics to Datadog.\n\033[0m" + fi - $stop_instructions + printf "\033[32m If you ever want to stop the ${nice_current_flavor}, run: -And to run it again run: + $stop_instructions - $start_instructions + And to run it again run: -\033[0m" + $start_instructions\033[0m\n\n" +done diff --git a/cmd/agent/subcommands/configcheck/command.go b/cmd/agent/subcommands/configcheck/command.go index 53f6942bd7f737..de1cdb6225e209 100644 --- a/cmd/agent/subcommands/configcheck/command.go +++ b/cmd/agent/subcommands/configcheck/command.go @@ -17,6 +17,7 @@ import ( "github.com/DataDog/datadog-agent/cmd/agent/command" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" "github.com/DataDog/datadog-agent/pkg/flare" "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/scrubber" @@ -43,7 +44,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(run, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, true, core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/configcheck/command_test.go b/cmd/agent/subcommands/configcheck/command_test.go index 4541360226692e..ffd214a03b8e24 100644 --- a/cmd/agent/subcommands/configcheck/command_test.go +++ b/cmd/agent/subcommands/configcheck/command_test.go @@ -22,6 +22,6 @@ func TestCommand(t *testing.T) { run, func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, true, cliParams.verbose) - require.Equal(t, true, coreParams.ConfigLoadSecrets) + require.Equal(t, true, coreParams.ConfigLoadSecrets()) }) } diff --git a/cmd/agent/subcommands/diagnose/command.go b/cmd/agent/subcommands/diagnose/command.go index 74464ad4f384f2..d248910a4bfeae 100644 --- a/cmd/agent/subcommands/diagnose/command.go +++ b/cmd/agent/subcommands/diagnose/command.go @@ -54,7 +54,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(runAll, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "info", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "info", true)}), core.Bundle, ) }, @@ -67,7 +69,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(runDatadogConnectivityDiagnose, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "info", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "info", true)}), core.Bundle, ) }, @@ -94,7 +98,9 @@ This command print the V5 metadata payload for the Agent. This payload is used t cliParams.payloadName = "v5" return fxutil.OneShot(printPayload, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, @@ -109,7 +115,9 @@ This command print the last Inventory metadata payload sent by the Agent. This p cliParams.payloadName = "inventory" return fxutil.OneShot(printPayload, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/diagnose/command_test.go b/cmd/agent/subcommands/diagnose/command_test.go index d7e63643ec88de..913890250338f2 100644 --- a/cmd/agent/subcommands/diagnose/command_test.go +++ b/cmd/agent/subcommands/diagnose/command_test.go @@ -21,7 +21,7 @@ func TestDiagnoseCommand(t *testing.T) { []string{"diagnose"}, runAll, func(cliParams *cliParams, coreParams core.BundleParams) { - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } @@ -31,7 +31,7 @@ func TestMetadataAvailabilityCommand(t *testing.T) { []string{"diagnose", "metadata-availability"}, runAll, func(cliParams *cliParams, coreParams core.BundleParams) { - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } @@ -41,7 +41,7 @@ func TestShowMetadataV5Command(t *testing.T) { []string{"diagnose", "show-metadata", "v5"}, printPayload, func(cliParams *cliParams, coreParams core.BundleParams) { - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) require.Equal(t, "v5", cliParams.payloadName) }) } @@ -52,7 +52,7 @@ func TestShowMetadataInventoryCommand(t *testing.T) { []string{"diagnose", "show-metadata", "inventory"}, printPayload, func(cliParams *cliParams, coreParams core.BundleParams) { - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) require.Equal(t, "inventory", cliParams.payloadName) }) } @@ -63,7 +63,7 @@ func TestDatadogConnectivityCommand(t *testing.T) { []string{"diagnose", "datadog-connectivity", "--no-trace"}, runDatadogConnectivityDiagnose, func(cliParams *cliParams, coreParams core.BundleParams) { - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) require.Equal(t, true, cliParams.noTrace) }) } diff --git a/cmd/agent/subcommands/dogstatsdcapture/command.go b/cmd/agent/subcommands/dogstatsdcapture/command.go index cd41e62cd7c26f..a004cba8d2c84e 100644 --- a/cmd/agent/subcommands/dogstatsdcapture/command.go +++ b/cmd/agent/subcommands/dogstatsdcapture/command.go @@ -58,7 +58,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(dogstatsdCapture, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/dogstatsdcapture/command_test.go b/cmd/agent/subcommands/dogstatsdcapture/command_test.go index 28949abbfce89c..dab85b28730f71 100644 --- a/cmd/agent/subcommands/dogstatsdcapture/command_test.go +++ b/cmd/agent/subcommands/dogstatsdcapture/command_test.go @@ -24,6 +24,6 @@ func TestCommand(t *testing.T) { func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, 10*time.Second, cliParams.dsdCaptureDuration) require.True(t, cliParams.dsdCaptureCompressed) - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } diff --git a/cmd/agent/subcommands/dogstatsdreplay/command.go b/cmd/agent/subcommands/dogstatsdreplay/command.go index ad24baf16207ef..fe0e636cacfd46 100644 --- a/cmd/agent/subcommands/dogstatsdreplay/command.go +++ b/cmd/agent/subcommands/dogstatsdreplay/command.go @@ -62,7 +62,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(dogstatsdReplay, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/dogstatsdreplay/command_test.go b/cmd/agent/subcommands/dogstatsdreplay/command_test.go index d0513bc8e38d73..bfa81a583c5155 100644 --- a/cmd/agent/subcommands/dogstatsdreplay/command_test.go +++ b/cmd/agent/subcommands/dogstatsdreplay/command_test.go @@ -22,6 +22,6 @@ func TestCommand(t *testing.T) { dogstatsdReplay, func(cliParams *cliParams, coreParams core.BundleParams) { require.True(t, cliParams.dsdVerboseReplay) - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } diff --git a/cmd/agent/subcommands/dogstatsdstats/command.go b/cmd/agent/subcommands/dogstatsdstats/command.go index e26e8fa17b5200..30658ebb1ccc45 100644 --- a/cmd/agent/subcommands/dogstatsdstats/command.go +++ b/cmd/agent/subcommands/dogstatsdstats/command.go @@ -51,7 +51,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(requestDogstatsdStats, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/dogstatsdstats/command_test.go b/cmd/agent/subcommands/dogstatsdstats/command_test.go index 379fa3d1b7b7c6..8543bc495fad5e 100644 --- a/cmd/agent/subcommands/dogstatsdstats/command_test.go +++ b/cmd/agent/subcommands/dogstatsdstats/command_test.go @@ -22,6 +22,6 @@ func TestCommand(t *testing.T) { requestDogstatsdStats, func(cliParams *cliParams, coreParams core.BundleParams) { require.True(t, cliParams.jsonStatus) - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } diff --git a/cmd/agent/subcommands/flare/command.go b/cmd/agent/subcommands/flare/command.go index 951bedfc9f6339..2fe63ab36b60b7 100644 --- a/cmd/agent/subcommands/flare/command.go +++ b/cmd/agent/subcommands/flare/command.go @@ -22,10 +22,11 @@ import ( "github.com/DataDog/datadog-agent/cmd/agent/common" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/flare" "github.com/DataDog/datadog-agent/comp/core/log" "github.com/DataDog/datadog-agent/pkg/api/util" pkgconfig "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/flare" + pkgflare "github.com/DataDog/datadog-agent/pkg/flare" "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/input" ) @@ -61,17 +62,20 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { Long: ``, RunE: func(cmd *cobra.Command, args []string) error { cliParams.args = args - bundleParams := core.CreateAgentBundleParams(globalParams.ConfFilePath, true, core.WithLogForOneShot("CORE", "off", false)) - bundleParams.SecurityAgentConfigFilePaths = []string{ - path.Join(common.DefaultConfPath, "security-agent.yaml"), - } - bundleParams.ConfigLoadSecurityAgent = true - bundleParams.SysProbeConfFilePath = globalParams.SysProbeConfFilePath - bundleParams.ConfigLoadSysProbe = true + config := config.NewAgentParamsWithSecrets(globalParams.ConfFilePath, + config.WithSecurityAgentConfigFilePaths([]string{ + path.Join(common.DefaultConfPath, "security-agent.yaml"), + }), + config.WithConfigLoadSecurityAgent(true), + config.WithSysProbeConfFilePath(globalParams.SysProbeConfFilePath), + config.WithConfigLoadSysProbe(true)) return fxutil.OneShot(makeFlare, fx.Supply(cliParams), - fx.Supply(bundleParams), + fx.Supply(core.BundleParams{ + ConfigParams: config, + LogParams: log.LogForOneShot("CORE", "off", false), + }), core.Bundle, ) }, @@ -90,10 +94,10 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { return []*cobra.Command{flareCmd} } -type profileCollector func(prefix, debugURL string, cpusec int, target *flare.ProfileData) error -type agentProfileCollector func(cliParams *cliParams, pdata *flare.ProfileData, c profileCollector) error +type profileCollector func(prefix, debugURL string, cpusec int, target *pkgflare.ProfileData) error +type agentProfileCollector func(cliParams *cliParams, pdata *pkgflare.ProfileData, c profileCollector) error -func readProfileData(cliParams *cliParams, pdata *flare.ProfileData, seconds int, collector profileCollector) error { +func readProfileData(cliParams *cliParams, pdata *pkgflare.ProfileData, seconds int, collector profileCollector) error { prevSettings, err := setRuntimeProfilingSettings(cliParams) if err != nil { return err @@ -160,16 +164,16 @@ func readProfileData(cliParams *cliParams, pdata *flare.ProfileData, seconds int } func serviceProfileCollector(service string, portConfig string, seconds int) agentProfileCollector { - return func(cliParams *cliParams, pdata *flare.ProfileData, collector profileCollector) error { + return func(cliParams *cliParams, pdata *pkgflare.ProfileData, collector profileCollector) error { fmt.Fprintln(color.Output, color.BlueString("Getting a %ds profile snapshot from %s.", seconds, service)) pprofURL := fmt.Sprintf("http://127.0.0.1:%d/debug/pprof", pkgconfig.Datadog.GetInt(portConfig)) return collector(service, pprofURL, seconds, pdata) } } -func makeFlare(log log.Component, config config.Component, cliParams *cliParams) error { +func makeFlare(flare flare.Component, log log.Component, config config.Component, cliParams *cliParams) error { var ( - profile flare.ProfileData + profile pkgflare.ProfileData err error ) @@ -198,7 +202,7 @@ func makeFlare(log log.Component, config config.Component, cliParams *cliParams) logFiles := []string{logFile, jmxLogFile} if cliParams.profiling >= 30 { - if err := readProfileData(cliParams, &profile, cliParams.profiling, flare.CreatePerformanceProfile); err != nil { + if err := readProfileData(cliParams, &profile, cliParams.profiling, pkgflare.CreatePerformanceProfile); err != nil { fmt.Fprintln(color.Output, color.YellowString(fmt.Sprintf("Could not collect performance profile data: %s", err))) } } else if cliParams.profiling != -1 { @@ -208,9 +212,9 @@ func makeFlare(log log.Component, config config.Component, cliParams *cliParams) var filePath string if cliParams.forceLocal { - filePath, err = createArchive(logFiles, profile, nil) + filePath, err = createArchive(flare, logFiles, profile, nil) } else { - filePath, err = requestArchive(logFiles, profile) + filePath, err = requestArchive(flare, logFiles, profile) } if err != nil { @@ -232,7 +236,7 @@ func makeFlare(log log.Component, config config.Component, cliParams *cliParams) } } - response, e := flare.SendFlare(filePath, caseID, customerEmail) + response, e := pkgflare.SendFlare(filePath, caseID, customerEmail) fmt.Println(response) if e != nil { return e @@ -240,13 +244,13 @@ func makeFlare(log log.Component, config config.Component, cliParams *cliParams) return nil } -func requestArchive(logFiles []string, pdata flare.ProfileData) (string, error) { +func requestArchive(flare flare.Component, logFiles []string, pdata pkgflare.ProfileData) (string, error) { fmt.Fprintln(color.Output, color.BlueString("Asking the agent to build the flare archive.")) c := util.GetClient(false) // FIX: get certificates right then make this true ipcAddress, err := pkgconfig.GetIPCAddress() if err != nil { fmt.Fprintln(color.Output, color.RedString(fmt.Sprintf("Error getting IPC address for the agent: %s", err))) - return createArchive(logFiles, pdata, err) + return createArchive(flare, logFiles, pdata, err) } urlstr := fmt.Sprintf("https://%v:%v/agent/flare", ipcAddress, pkgconfig.Datadog.GetInt("cmd_port")) @@ -254,7 +258,7 @@ func requestArchive(logFiles []string, pdata flare.ProfileData) (string, error) // Set session token if err = util.SetAuthToken(); err != nil { fmt.Fprintln(color.Output, color.RedString(fmt.Sprintf("Error: %s", err))) - return createArchive(logFiles, pdata, err) + return createArchive(flare, logFiles, pdata, err) } p, err := json.Marshal(pdata) @@ -272,15 +276,15 @@ func requestArchive(logFiles []string, pdata flare.ProfileData) (string, error) fmt.Fprintln(color.Output, color.RedString("The agent was unable to make the flare. (is it running?)")) err = fmt.Errorf("Error getting flare from running agent: %w", err) } - return createArchive(logFiles, pdata, err) + return createArchive(flare, logFiles, pdata, err) } return string(r), nil } -func createArchive(logFiles []string, pdata flare.ProfileData, ipcError error) (string, error) { +func createArchive(flare flare.Component, logFiles []string, pdata pkgflare.ProfileData, ipcError error) (string, error) { fmt.Fprintln(color.Output, color.YellowString("Initiating flare locally.")) - filePath, err := flare.CreateArchive(true, common.GetDistPath(), common.PyChecksPath, logFiles, pdata, ipcError) + filePath, err := flare.Create(true, common.GetDistPath(), common.PyChecksPath, logFiles, pdata, ipcError) if err != nil { fmt.Printf("The flare zipfile failed to be created: %s\n", err) return "", err diff --git a/cmd/agent/subcommands/flare/command_test.go b/cmd/agent/subcommands/flare/command_test.go index 6b5de301f150a7..2f5170eefc5c34 100644 --- a/cmd/agent/subcommands/flare/command_test.go +++ b/cmd/agent/subcommands/flare/command_test.go @@ -105,6 +105,6 @@ func TestCommand(t *testing.T) { makeFlare, func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, []string{"1234"}, cliParams.args) - require.Equal(t, true, coreParams.ConfigLoadSecrets) + require.Equal(t, true, coreParams.ConfigLoadSecrets()) }) } diff --git a/cmd/agent/subcommands/hostname/command.go b/cmd/agent/subcommands/hostname/command.go index 9e7c2516a03e31..0ba3fe47a187f3 100644 --- a/cmd/agent/subcommands/hostname/command.go +++ b/cmd/agent/subcommands/hostname/command.go @@ -38,7 +38,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(getHostname, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "off", false))), // never output anything but hostname + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", false)}), // never output anything but hostname core.Bundle, ) }, diff --git a/cmd/agent/subcommands/hostname/command_test.go b/cmd/agent/subcommands/hostname/command_test.go index 052dfdbbf306db..ae6239afc8dafe 100644 --- a/cmd/agent/subcommands/hostname/command_test.go +++ b/cmd/agent/subcommands/hostname/command_test.go @@ -21,6 +21,6 @@ func TestCommand(t *testing.T) { []string{"hostname"}, getHostname, func(cliParams *cliParams, coreParams core.BundleParams) { - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } diff --git a/cmd/agent/subcommands/integrations/command.go b/cmd/agent/subcommands/integrations/command.go index e7bfce33efc0de..4ef9dac4f06698 100644 --- a/cmd/agent/subcommands/integrations/command.go +++ b/cmd/agent/subcommands/integrations/command.go @@ -103,7 +103,8 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { runOneShot := func(callback interface{}) error { return fxutil.OneShot(callback, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithConfigMissingOK(true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath, config.WithConfigMissingOK(true))}), core.Bundle, ) } diff --git a/cmd/agent/subcommands/integrations/command_test.go b/cmd/agent/subcommands/integrations/command_test.go index b5aba7224d75bb..06158bf7557ca6 100644 --- a/cmd/agent/subcommands/integrations/command_test.go +++ b/cmd/agent/subcommands/integrations/command_test.go @@ -26,8 +26,8 @@ func TestInstallCommand(t *testing.T) { func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, []string{"foo==1.0"}, cliParams.args) require.Equal(t, 1, cliParams.verbose) - require.Equal(t, false, coreParams.ConfigLoadSecrets) - require.Equal(t, true, coreParams.ConfigMissingOK) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) + require.Equal(t, true, coreParams.ConfigMissingOK()) }) } @@ -39,8 +39,8 @@ func TestRemoveCommand(t *testing.T) { func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, []string{"foo"}, cliParams.args) require.Equal(t, 0, cliParams.verbose) - require.Equal(t, false, coreParams.ConfigLoadSecrets) - require.Equal(t, true, coreParams.ConfigMissingOK) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) + require.Equal(t, true, coreParams.ConfigMissingOK()) }) } @@ -52,8 +52,8 @@ func TestFreezeCommand(t *testing.T) { func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, []string{}, cliParams.args) require.Equal(t, 0, cliParams.verbose) - require.Equal(t, false, coreParams.ConfigLoadSecrets) - require.Equal(t, true, coreParams.ConfigMissingOK) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) + require.Equal(t, true, coreParams.ConfigMissingOK()) }) } @@ -65,7 +65,7 @@ func TestShowCommand(t *testing.T) { func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, []string{"foo"}, cliParams.args) require.Equal(t, 0, cliParams.verbose) - require.Equal(t, false, coreParams.ConfigLoadSecrets) - require.Equal(t, true, coreParams.ConfigMissingOK) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) + require.Equal(t, true, coreParams.ConfigMissingOK()) }) } diff --git a/cmd/agent/subcommands/jmx/command.go b/cmd/agent/subcommands/jmx/command.go index e4f52e176bcbfb..1720a08e874da8 100644 --- a/cmd/agent/subcommands/jmx/command.go +++ b/cmd/agent/subcommands/jmx/command.go @@ -45,6 +45,7 @@ type cliParams struct { saveFlare bool discoveryTimeout uint discoveryMinInstances uint + instanceFilter string } // Commands returns a slice of subcommands for the 'agent' command. @@ -63,6 +64,7 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { jmxCmd.PersistentFlags().UintVarP(&cliParams.discoveryTimeout, "discovery-timeout", "", 5, "max retry duration until Autodiscovery resolves the check template (in seconds)") jmxCmd.PersistentFlags().UintVarP(&discoveryRetryInterval, "discovery-retry-interval", "", 1, "(unused)") jmxCmd.PersistentFlags().UintVarP(&cliParams.discoveryMinInstances, "discovery-min-instances", "", 1, "minimum number of config instances to be discovered before running the check(s)") + jmxCmd.PersistentFlags().StringVarP(&cliParams.instanceFilter, "instance-filter", "", "", "filter instances using jq style syntax, example: --instance-filter '.ip_address == \"127.0.0.51\"'") // All subcommands use the same provided components, with a different // oneShot callback, and with some complex derivation of the @@ -83,11 +85,11 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { if cliParams.jmxLogLevel == "" { cliParams.jmxLogLevel = "debug" } - - params := core.CreateAgentBundleParams(globalParams.ConfFilePath, true, core.WithLogForOneShot("CORE", cliParams.jmxLogLevel, false)) - + params := core.BundleParams{ + ConfigParams: config.NewAgentParamsWithSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", cliParams.jmxLogLevel, false)} if cliParams.logFile != "" { - params = params.LogToFile(cliParams.logFile) + params.LogParams.LogToFile(cliParams.logFile) } return fxutil.OneShot(callback, @@ -241,11 +243,14 @@ func runJmxCommandConsole(log log.Component, config config.Component, cliParams context.Background(), time.Duration(cliParams.discoveryTimeout)*time.Second) var allConfigs []integration.Config if len(cliParams.cliSelectedChecks) == 0 { - allConfigs = common.WaitForAllConfigsFromAD(waitCtx) + allConfigs, err = common.WaitForAllConfigsFromAD(waitCtx) } else { - allConfigs = common.WaitForConfigsFromAD(waitCtx, cliParams.cliSelectedChecks, int(cliParams.discoveryMinInstances)) + allConfigs, err = common.WaitForConfigsFromAD(waitCtx, cliParams.cliSelectedChecks, int(cliParams.discoveryMinInstances), cliParams.instanceFilter) } cancelTimeout() + if err != nil { + return err + } err = standalone.ExecJMXCommandConsole(cliParams.command, cliParams.cliSelectedChecks, cliParams.jmxLogLevel, allConfigs) diff --git a/cmd/agent/subcommands/jmx/command_test.go b/cmd/agent/subcommands/jmx/command_test.go index 68f802aa94f6b8..d68f3f0b79bed7 100644 --- a/cmd/agent/subcommands/jmx/command_test.go +++ b/cmd/agent/subcommands/jmx/command_test.go @@ -34,8 +34,8 @@ func TestCollectCommand(t *testing.T) { require.Equal(t, "debug", coreParams.LogLevelFn(nil)) require.Equal(t, "", cliParams.logFile) require.Equal(t, "", coreParams.LogFileFn(nil)) - require.Equal(t, "CORE", coreParams.LoggerName) - require.Equal(t, true, coreParams.ConfigLoadSecrets) + require.Equal(t, "CORE", coreParams.LoggerName()) + require.Equal(t, true, coreParams.ConfigLoadSecrets()) }) }) @@ -50,8 +50,8 @@ func TestCollectCommand(t *testing.T) { require.Equal(t, "info", coreParams.LogLevelFn(nil)) require.Equal(t, "", cliParams.logFile) require.Equal(t, "", coreParams.LogFileFn(nil)) - require.Equal(t, "CORE", coreParams.LoggerName) - require.Equal(t, true, coreParams.ConfigLoadSecrets) + require.Equal(t, "CORE", coreParams.LoggerName()) + require.Equal(t, true, coreParams.ConfigLoadSecrets()) }) }) @@ -66,8 +66,8 @@ func TestCollectCommand(t *testing.T) { require.Equal(t, "debug", coreParams.LogLevelFn(nil)) // overrides --log-level require.True(t, strings.HasPrefix(cliParams.logFile, common.DefaultJMXFlareDirectory)) require.Equal(t, cliParams.logFile, coreParams.LogFileFn(nil)) - require.Equal(t, "CORE", coreParams.LoggerName) - require.Equal(t, true, coreParams.ConfigLoadSecrets) + require.Equal(t, "CORE", coreParams.LoggerName()) + require.Equal(t, true, coreParams.ConfigLoadSecrets()) }) }) } diff --git a/cmd/agent/subcommands/launchgui/command.go b/cmd/agent/subcommands/launchgui/command.go index 6975f15a5179bc..3f4dd2d1929de8 100644 --- a/cmd/agent/subcommands/launchgui/command.go +++ b/cmd/agent/subcommands/launchgui/command.go @@ -39,7 +39,8 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(launchGui, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false)), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/launchgui/command_test.go b/cmd/agent/subcommands/launchgui/command_test.go index f4a20b9d1dba13..5f5ad2d03e597c 100644 --- a/cmd/agent/subcommands/launchgui/command_test.go +++ b/cmd/agent/subcommands/launchgui/command_test.go @@ -21,6 +21,6 @@ func TestCommand(t *testing.T) { []string{"launch-gui"}, launchGui, func(cliParams *cliParams, coreParams core.BundleParams) { - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } diff --git a/cmd/agent/subcommands/remoteconfig/command.go b/cmd/agent/subcommands/remoteconfig/command.go index e3fbf8fa012f73..1feb5c376da536 100644 --- a/cmd/agent/subcommands/remoteconfig/command.go +++ b/cmd/agent/subcommands/remoteconfig/command.go @@ -44,7 +44,8 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(state, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false)), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/remoteconfig/command_test.go b/cmd/agent/subcommands/remoteconfig/command_test.go index 64fe956d6a95f4..a79dc986cd372b 100644 --- a/cmd/agent/subcommands/remoteconfig/command_test.go +++ b/cmd/agent/subcommands/remoteconfig/command_test.go @@ -21,6 +21,6 @@ func TestCommand(t *testing.T) { []string{"remote-config"}, state, func(cliParams *cliParams, coreParams core.BundleParams) { - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } diff --git a/cmd/agent/subcommands/run/command.go b/cmd/agent/subcommands/run/command.go index 7c8973097c1fca..e6cc9b5b4843c8 100644 --- a/cmd/agent/subcommands/run/command.go +++ b/cmd/agent/subcommands/run/command.go @@ -34,6 +34,7 @@ import ( "github.com/DataDog/datadog-agent/cmd/manager" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/flare" "github.com/DataDog/datadog-agent/comp/core/log" "github.com/DataDog/datadog-agent/pkg/aggregator" "github.com/DataDog/datadog-agent/pkg/api/healthprobe" @@ -70,6 +71,7 @@ import ( _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/ksm" _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/kubernetesapiserver" _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator" + _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/containerimage" _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/containerlifecycle" _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/containers/containerd" _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/containers/cri" @@ -79,6 +81,7 @@ import ( _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/embed" _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/net" _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/nvidia/jetson" + _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/sbom" _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp" _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/system/cpu" _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/system/disk" @@ -114,7 +117,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { // this will use `fxutil.Run` instead of `fxutil.OneShot`. return fxutil.OneShot(run, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, true).LogForDaemon("CORE", "log_file", common.DefaultLogFile)), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithSecrets(globalParams.ConfFilePath), + LogParams: log.LogForDaemon("CORE", "log_file", common.DefaultLogFile)}), core.Bundle, ) } @@ -140,7 +145,7 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { // run starts the main loop. // // This is exported because it also used from the deprecated `agent start` command. -func run(log log.Component, config config.Component, cliParams *cliParams) error { +func run(log log.Component, config config.Component, flare flare.Component, cliParams *cliParams) error { defer func() { stopAgent(cliParams) }() @@ -181,7 +186,7 @@ func run(log log.Component, config config.Component, cliParams *cliParams) error } }() - if err := startAgent(cliParams); err != nil { + if err := startAgent(cliParams, flare); err != nil { return err } @@ -194,17 +199,19 @@ func run(log log.Component, config config.Component, cliParams *cliParams) error // StartAgentWithDefaults is a temporary way for other packages to use startAgent. func StartAgentWithDefaults() error { // run startAgent in an app, so that the log and config components get initialized - return fxutil.OneShot(func(log log.Component, config config.Component) error { - return startAgent(&cliParams{GlobalParams: &command.GlobalParams{}}) + return fxutil.OneShot(func(log log.Component, config config.Component, flare flare.Component) error { + return startAgent(&cliParams{GlobalParams: &command.GlobalParams{}}, flare) }, // no config file path specification in this situation - fx.Supply(core.CreateAgentBundleParams("", true).LogForDaemon("CORE", "log_file", common.DefaultLogFile)), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithSecrets(""), + LogParams: log.LogForDaemon("CORE", "log_file", common.DefaultLogFile)}), core.Bundle, ) } // startAgent Initializes the agent process -func startAgent(cliParams *cliParams) error { +func startAgent(cliParams *cliParams, flare flare.Component) error { var err error // Main context passed to components @@ -335,7 +342,7 @@ func startAgent(cliParams *cliParams) error { } // start the cmd HTTP server - if err = api.StartServer(configService); err != nil { + if err = api.StartServer(configService, flare); err != nil { return pkglog.Errorf("Error while starting api server, exiting: %v", err) } @@ -369,6 +376,8 @@ func startAgent(cliParams *cliParams) error { opts := aggregator.DefaultAgentDemultiplexerOptions(forwarderOpts) opts.EnableNoAggregationPipeline = pkgconfig.Datadog.GetBool("dogstatsd_no_aggregation_pipeline") opts.UseContainerLifecycleForwarder = pkgconfig.Datadog.GetBool("container_lifecycle.enabled") + opts.UseContainerImageForwarder = pkgconfig.Datadog.GetBool("container_image.enabled") + opts.UseSBOMForwarder = pkgconfig.Datadog.GetBool("sbom.enabled") demux = aggregator.InitAndStartAgentDemultiplexer(opts, hostnameDetected) // Setup stats telemetry handler diff --git a/cmd/agent/subcommands/run/command_test.go b/cmd/agent/subcommands/run/command_test.go index a29b1a14d59e98..eac5a71790d31a 100644 --- a/cmd/agent/subcommands/run/command_test.go +++ b/cmd/agent/subcommands/run/command_test.go @@ -21,7 +21,7 @@ func TestCommand(t *testing.T) { []string{"run"}, run, func(cliParams *cliParams, coreParams core.BundleParams) { - require.Equal(t, true, coreParams.ConfigLoadSecrets) + require.Equal(t, true, coreParams.ConfigLoadSecrets()) }) } @@ -32,6 +32,6 @@ func TestCommandPidfile(t *testing.T) { run, func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, "/pid/file", cliParams.pidfilePath) - require.Equal(t, true, coreParams.ConfigLoadSecrets) + require.Equal(t, true, coreParams.ConfigLoadSecrets()) }) } diff --git a/cmd/agent/subcommands/run/settings.go b/cmd/agent/subcommands/run/settings.go index 6a869ea3fcbcda..4c36c81011ba0c 100644 --- a/cmd/agent/subcommands/run/settings.go +++ b/cmd/agent/subcommands/run/settings.go @@ -34,5 +34,5 @@ func initRuntimeSettings() error { if err := commonsettings.RegisterRuntimeSetting(commonsettings.ProfilingGoroutines("internal_profiling_goroutines")); err != nil { return err } - return commonsettings.RegisterRuntimeSetting(commonsettings.ProfilingRuntimeSetting("internal_profiling")) + return commonsettings.RegisterRuntimeSetting(commonsettings.ProfilingRuntimeSetting{SettingName: "internal_profiling", Service: "datadog-agent"}) } diff --git a/cmd/agent/subcommands/secret/command.go b/cmd/agent/subcommands/secret/command.go index b0f619b527e1e7..a4792a90d5ccc7 100644 --- a/cmd/agent/subcommands/secret/command.go +++ b/cmd/agent/subcommands/secret/command.go @@ -41,7 +41,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(secret, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/secret/command_test.go b/cmd/agent/subcommands/secret/command_test.go index 2cc226e2559536..f329036d17d86a 100644 --- a/cmd/agent/subcommands/secret/command_test.go +++ b/cmd/agent/subcommands/secret/command_test.go @@ -21,6 +21,6 @@ func TestCommand(t *testing.T) { []string{"secret"}, secret, func(cliParams *cliParams, coreParams core.BundleParams) { - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } diff --git a/cmd/agent/subcommands/snmp/command.go b/cmd/agent/subcommands/snmp/command.go index d352fc8d6ed926..d3e2a70e5c3d41 100644 --- a/cmd/agent/subcommands/snmp/command.go +++ b/cmd/agent/subcommands/snmp/command.go @@ -21,6 +21,7 @@ import ( "github.com/DataDog/datadog-agent/cmd/agent/command" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" utilFunc "github.com/DataDog/datadog-agent/pkg/snmp/gosnmplib" parse "github.com/DataDog/datadog-agent/pkg/snmp/snmpparse" "github.com/DataDog/datadog-agent/pkg/util/fxutil" @@ -92,7 +93,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { cliParams.cmd = cmd return fxutil.OneShot(snmpwalk, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, true, core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/status/command.go b/cmd/agent/subcommands/status/command.go index 53a301c2c1b4b9..2c24f72178a3b6 100644 --- a/cmd/agent/subcommands/status/command.go +++ b/cmd/agent/subcommands/status/command.go @@ -62,7 +62,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { return fxutil.OneShot(statusCmd, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithConfigLoadSysProbe(true), core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath, config.WithConfigLoadSysProbe(true)), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, @@ -86,7 +88,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { return fxutil.OneShot(componentStatusCmd, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/status/command_test.go b/cmd/agent/subcommands/status/command_test.go index 44b49e3cef4af6..aaa88530731c28 100644 --- a/cmd/agent/subcommands/status/command_test.go +++ b/cmd/agent/subcommands/status/command_test.go @@ -25,8 +25,8 @@ func TestStatusCommand(t *testing.T) { func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, []string{}, cliParams.args) require.Equal(t, true, cliParams.jsonStatus) - require.Equal(t, false, coreParams.ConfigLoadSecrets) - require.Equal(t, true, coreParams.ConfigLoadSysProbe) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) + require.Equal(t, true, coreParams.ConfigLoadSysProbe()) }) } @@ -39,7 +39,7 @@ func TestComponentStatusCommand(t *testing.T) { func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, []string{"abc"}, cliParams.args) require.Equal(t, false, cliParams.jsonStatus) - require.Equal(t, false, coreParams.ConfigLoadSecrets) - require.Equal(t, false, coreParams.ConfigLoadSysProbe) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) + require.Equal(t, false, coreParams.ConfigLoadSysProbe()) }) } diff --git a/cmd/agent/subcommands/stop/command.go b/cmd/agent/subcommands/stop/command.go index 286a4f752ff0aa..2920f3ba678d5e 100644 --- a/cmd/agent/subcommands/stop/command.go +++ b/cmd/agent/subcommands/stop/command.go @@ -19,6 +19,7 @@ import ( "github.com/DataDog/datadog-agent/cmd/agent/command" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" "github.com/DataDog/datadog-agent/pkg/api/util" pkgconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/util/fxutil" @@ -41,7 +42,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(stop, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/stop/command_test.go b/cmd/agent/subcommands/stop/command_test.go index 7621b224a78148..be33f9a037db53 100644 --- a/cmd/agent/subcommands/stop/command_test.go +++ b/cmd/agent/subcommands/stop/command_test.go @@ -24,6 +24,6 @@ func TestCommand(t *testing.T) { []string{"stop"}, stop, func(cliParams *cliParams, coreParams core.BundleParams) { - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } diff --git a/cmd/agent/subcommands/streamlogs/command.go b/cmd/agent/subcommands/streamlogs/command.go index 8afe6fa5a030d1..2e9d867305db6f 100644 --- a/cmd/agent/subcommands/streamlogs/command.go +++ b/cmd/agent/subcommands/streamlogs/command.go @@ -45,7 +45,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(streamLogs, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/streamlogs/command_test.go b/cmd/agent/subcommands/streamlogs/command_test.go index a233e81a2ac2b0..58c5c599c0d5ff 100644 --- a/cmd/agent/subcommands/streamlogs/command_test.go +++ b/cmd/agent/subcommands/streamlogs/command_test.go @@ -21,7 +21,7 @@ func TestCommand(t *testing.T) { []string{"stream-logs", "--type", "foo"}, streamLogs, func(cliParams *cliParams, coreParams core.BundleParams) { - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) require.Equal(t, "foo", cliParams.filters.Type) }) } diff --git a/cmd/agent/subcommands/taggerlist/command.go b/cmd/agent/subcommands/taggerlist/command.go index 9f154631c08bec..275ae1594f1810 100644 --- a/cmd/agent/subcommands/taggerlist/command.go +++ b/cmd/agent/subcommands/taggerlist/command.go @@ -41,7 +41,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(taggerList, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/taggerlist/command_test.go b/cmd/agent/subcommands/taggerlist/command_test.go index c4dee3506cb882..47a8258379e89d 100644 --- a/cmd/agent/subcommands/taggerlist/command_test.go +++ b/cmd/agent/subcommands/taggerlist/command_test.go @@ -21,6 +21,6 @@ func TestCommand(t *testing.T) { []string{"tagger-list"}, taggerList, func(cliParams *cliParams, coreParams core.BundleParams) { - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } diff --git a/cmd/agent/subcommands/workloadlist/command.go b/cmd/agent/subcommands/workloadlist/command.go index c580f2cc31b0ab..58f7639d76439f 100644 --- a/cmd/agent/subcommands/workloadlist/command.go +++ b/cmd/agent/subcommands/workloadlist/command.go @@ -44,7 +44,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(workloadList, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/workloadlist/command_test.go b/cmd/agent/subcommands/workloadlist/command_test.go index ba10ac4fc31845..3671c5e6e2a3d4 100644 --- a/cmd/agent/subcommands/workloadlist/command_test.go +++ b/cmd/agent/subcommands/workloadlist/command_test.go @@ -22,6 +22,6 @@ func TestCommand(t *testing.T) { workloadList, func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, true, cliParams.verboseList) - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } diff --git a/cmd/cluster-agent-cloudfoundry/app/app.go b/cmd/cluster-agent-cloudfoundry/app/app.go index a1c5d2865d8589..f9204d34d0cefd 100644 --- a/cmd/cluster-agent-cloudfoundry/app/app.go +++ b/cmd/cluster-agent-cloudfoundry/app/app.go @@ -24,9 +24,10 @@ import ( "github.com/DataDog/datadog-agent/cmd/agent/common" "github.com/DataDog/datadog-agent/cmd/cluster-agent/api" dcav1 "github.com/DataDog/datadog-agent/cmd/cluster-agent/api/v1" - "github.com/DataDog/datadog-agent/cmd/cluster-agent/commands" "github.com/DataDog/datadog-agent/pkg/aggregator" "github.com/DataDog/datadog-agent/pkg/api/healthprobe" + clustercheckscmd "github.com/DataDog/datadog-agent/pkg/cli/subcommands/clusterchecks" + "github.com/DataDog/datadog-agent/pkg/cli/subcommands/dcaconfigcheck" "github.com/DataDog/datadog-agent/pkg/clusteragent" "github.com/DataDog/datadog-agent/pkg/clusteragent/clusterchecks" "github.com/DataDog/datadog-agent/pkg/collector" @@ -98,8 +99,18 @@ func init() { // attach the commands to the root ClusterAgentCmd.AddCommand(runCmd) ClusterAgentCmd.AddCommand(versionCmd) - ClusterAgentCmd.AddCommand(commands.GetClusterChecksCobraCmd(&flagNoColor, &confPath, loggerName)) - ClusterAgentCmd.AddCommand(commands.GetConfigCheckCobraCmd(&flagNoColor, &confPath, loggerName)) + + ClusterAgentCmd.AddCommand(clustercheckscmd.MakeCommand(func() clustercheckscmd.GlobalParams { + return clustercheckscmd.GlobalParams{ + ConfFilePath: confPath, + } + })) + + ClusterAgentCmd.AddCommand(dcaconfigcheck.MakeCommand(func() dcaconfigcheck.GlobalParams { + return dcaconfigcheck.GlobalParams{ + ConfFilePath: confPath, + } + })) ClusterAgentCmd.PersistentFlags().StringVarP(&confPath, "cfgpath", "c", "", "path to directory containing datadog.yaml") ClusterAgentCmd.PersistentFlags().BoolVarP(&flagNoColor, "no-color", "n", false, "disable color output") diff --git a/cmd/cluster-agent/app/clusterchecks.go b/cmd/cluster-agent/app/clusterchecks.go deleted file mode 100644 index 00e52ece4297de..00000000000000 --- a/cmd/cluster-agent/app/clusterchecks.go +++ /dev/null @@ -1,18 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubeapiserver && clusterchecks -// +build kubeapiserver,clusterchecks - -package app - -import "github.com/DataDog/datadog-agent/cmd/cluster-agent/commands" - -func init() { - clusterChecksCmd := commands.GetClusterChecksCobraCmd(&flagNoColor, &confPath, loggerName) - clusterChecksCmd.AddCommand(commands.RebalanceClusterChecksCobraCmd(&flagNoColor, &confPath, loggerName)) - - ClusterAgentCmd.AddCommand(clusterChecksCmd) -} diff --git a/cmd/cluster-agent/app/compliance_cmd.go b/cmd/cluster-agent/app/compliance_cmd.go deleted file mode 100644 index 78d811b0d241a4..00000000000000 --- a/cmd/cluster-agent/app/compliance_cmd.go +++ /dev/null @@ -1,33 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build !windows && kubeapiserver -// +build !windows,kubeapiserver - -package app - -import ( - "github.com/spf13/cobra" - - "github.com/DataDog/datadog-agent/cmd/security-agent/app/subcommands/check" - "github.com/DataDog/datadog-agent/comp/core" -) - -var ( - complianceCmd = &cobra.Command{ - Use: "compliance", - Short: "Compliance utility commands", - } -) - -func init() { - bundleParams := core.BundleParams{ - ConfFilePath: confPath, - ConfigName: "datadog-cluster", - }.LogForOneShot(string(loggerName), "off", true) - - complianceCmd.AddCommand(check.Commands(bundleParams)...) - ClusterAgentCmd.AddCommand(complianceCmd) -} diff --git a/cmd/cluster-agent/app/config.go b/cmd/cluster-agent/app/config.go deleted file mode 100644 index c8f91ce2d61a32..00000000000000 --- a/cmd/cluster-agent/app/config.go +++ /dev/null @@ -1,81 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubeapiserver -// +build kubeapiserver - -package app - -import ( - "fmt" - - "github.com/DataDog/datadog-agent/cmd/agent/common" - cmdconfig "github.com/DataDog/datadog-agent/cmd/cluster-agent/commands/config" - "github.com/DataDog/datadog-agent/pkg/api/util" - "github.com/DataDog/datadog-agent/pkg/config" - commonsettings "github.com/DataDog/datadog-agent/pkg/config/settings" - settingshttp "github.com/DataDog/datadog-agent/pkg/config/settings/http" - - "github.com/fatih/color" - "github.com/spf13/cobra" -) - -func init() { - ClusterAgentCmd.AddCommand(cmdconfig.Config(getSettingsClient)) -} - -func setupConfig() error { - if flagNoColor { - color.NoColor = true - } - - // we'll search for a config file named `datadog-cluster.yaml` - config.Datadog.SetConfigName("datadog-cluster") - err := common.SetupConfig(confPath) - if err != nil { - return fmt.Errorf("unable to set up global cluster agent configuration: %v", err) - } - - err = config.SetupLogger(loggerName, config.GetEnvDefault("DD_LOG_LEVEL", "off"), "", "", false, true, false) - if err != nil { - fmt.Printf("Cannot setup logger, exiting: %v\n", err) - return err - } - - return util.SetAuthToken() -} - -func getSettingsClient(_ *cobra.Command, _ []string) (commonsettings.Client, error) { - err := setupConfig() - if err != nil { - return nil, err - } - - c := util.GetClient(false) - apiConfigURL := fmt.Sprintf("https://localhost:%v/config", config.Datadog.GetInt("cluster_agent.cmd_port")) - - return settingshttp.NewClient(c, apiConfigURL, "datadog-cluster-agent"), nil -} - -// initRuntimeSettings builds the map of runtime Cluster Agent settings configurable at runtime. -func initRuntimeSettings() error { - if err := commonsettings.RegisterRuntimeSetting(commonsettings.LogLevelRuntimeSetting{}); err != nil { - return err - } - - if err := commonsettings.RegisterRuntimeSetting(commonsettings.RuntimeMutexProfileFraction("runtime_mutex_profile_fraction")); err != nil { - return err - } - - if err := commonsettings.RegisterRuntimeSetting(commonsettings.RuntimeBlockProfileRate("runtime_block_profile_rate")); err != nil { - return err - } - - if err := commonsettings.RegisterRuntimeSetting(commonsettings.ProfilingGoroutines("internal_profiling_goroutines")); err != nil { - return err - } - - return commonsettings.RegisterRuntimeSetting(commonsettings.ProfilingRuntimeSetting("internal_profiling")) -} diff --git a/cmd/cluster-agent/app/config_check.go b/cmd/cluster-agent/app/config_check.go deleted file mode 100644 index e966d275804abc..00000000000000 --- a/cmd/cluster-agent/app/config_check.go +++ /dev/null @@ -1,15 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubeapiserver -// +build kubeapiserver - -package app - -import "github.com/DataDog/datadog-agent/cmd/cluster-agent/commands" - -func init() { - ClusterAgentCmd.AddCommand(commands.GetConfigCheckCobraCmd(&flagNoColor, &confPath, loggerName)) -} diff --git a/cmd/cluster-agent/app/diagnose.go b/cmd/cluster-agent/app/diagnose.go deleted file mode 100644 index cf72e3cbea0d4e..00000000000000 --- a/cmd/cluster-agent/app/diagnose.go +++ /dev/null @@ -1,58 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubeapiserver -// +build kubeapiserver - -package app - -import ( - "fmt" - - "github.com/DataDog/datadog-agent/cmd/agent/common" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/diagnose" - - "github.com/fatih/color" - "github.com/spf13/cobra" -) - -func init() { - ClusterAgentCmd.AddCommand(diagnoseCommand) -} - -var diagnoseCommand = &cobra.Command{ - Use: "diagnose", - Short: "Execute some connectivity diagnosis on your system", - Long: ``, - RunE: doDiagnose, -} - -func doDiagnose(cmd *cobra.Command, args []string) error { - // Global config setup - err := common.SetupConfig(confPath) - if err != nil { - return fmt.Errorf("unable to set up global agent configuration: %v", err) - } - - if flagNoColor { - color.NoColor = true - } - - err = config.SetupLogger( - loggerName, - config.Datadog.GetString("log_level"), - common.DefaultLogFile, - config.GetSyslogURI(), - config.Datadog.GetBool("syslog_rfc"), - config.Datadog.GetBool("log_to_console"), - config.Datadog.GetBool("log_format_json"), - ) - if err != nil { - return fmt.Errorf("Error while setting up logging, exiting: %v", err) - } - - return diagnose.RunAll(color.Output) -} diff --git a/cmd/cluster-agent/app/flare.go b/cmd/cluster-agent/app/flare.go deleted file mode 100644 index cc1447d6cabcbe..00000000000000 --- a/cmd/cluster-agent/app/flare.go +++ /dev/null @@ -1,130 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubeapiserver -// +build kubeapiserver - -package app - -import ( - "bytes" - "fmt" - - "github.com/fatih/color" - "github.com/spf13/cobra" - - "github.com/DataDog/datadog-agent/cmd/agent/common" - "github.com/DataDog/datadog-agent/pkg/api/util" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/flare" - "github.com/DataDog/datadog-agent/pkg/util/input" -) - -var ( - customerEmail string - autoconfirm bool -) - -func init() { - ClusterAgentCmd.AddCommand(flareCmd) - - flareCmd.Flags().StringVarP(&customerEmail, "email", "e", "", "Your email") - flareCmd.Flags().BoolVarP(&autoconfirm, "send", "s", false, "Automatically send flare (don't prompt for confirmation)") - flareCmd.SetArgs([]string{"caseID"}) -} - -var flareCmd = &cobra.Command{ - Use: "flare [caseID]", - Short: "Collect a flare and send it to Datadog", - Long: ``, - RunE: func(cmd *cobra.Command, args []string) error { - - if flagNoColor { - color.NoColor = true - } - - // we'll search for a config file named `datadog-cluster.yaml` - config.Datadog.SetConfigName("datadog-cluster") - err := common.SetupConfig(confPath) - if err != nil { - return fmt.Errorf("unable to set up global cluster agent configuration: %v", err) - } - - // The flare command should not log anything, all errors should be reported directly to the console without the log format - err = config.SetupLogger(loggerName, "off", "", "", false, true, false) - if err != nil { - fmt.Printf("Cannot setup logger, exiting: %v\n", err) - return err - } - - caseID := "" - if len(args) > 0 { - caseID = args[0] - } - - if customerEmail == "" { - var err error - customerEmail, err = input.AskForEmail() - if err != nil { - fmt.Println("Error reading email, please retry or contact support") - return err - } - } - - return requestFlare(caseID) - }, -} - -func requestFlare(caseID string) error { - fmt.Fprintln(color.Output, color.BlueString("Asking the Cluster Agent to build the flare archive.")) - var e error - c := util.GetClient(false) // FIX: get certificates right then make this true - urlstr := fmt.Sprintf("https://localhost:%v/flare", config.Datadog.GetInt("cluster_agent.cmd_port")) - - logFile := config.Datadog.GetString("log_file") - if logFile == "" { - logFile = common.DefaultDCALogFile - } - - // Set session token - e = util.SetAuthToken() - if e != nil { - return e - } - - r, e := util.DoPost(c, urlstr, "application/json", bytes.NewBuffer([]byte{})) - var filePath string - if e != nil { - if r != nil && string(r) != "" { - fmt.Fprintln(color.Output, fmt.Sprintf("The agent ran into an error while making the flare: %s", color.RedString(string(r)))) - } else { - fmt.Fprintln(color.Output, color.RedString("The agent was unable to make a full flare: %s.", e.Error())) - } - fmt.Fprintln(color.Output, color.YellowString("Initiating flare locally, some logs will be missing.")) - filePath, e = flare.CreateDCAArchive(true, common.GetDistPath(), logFile) - if e != nil { - fmt.Printf("The flare zipfile failed to be created: %s\n", e) - return e - } - } else { - filePath = string(r) - } - - fmt.Fprintln(color.Output, fmt.Sprintf("%s is going to be uploaded to Datadog", color.YellowString(filePath))) - if !autoconfirm { - confirmation := input.AskForConfirmation("Are you sure you want to upload a flare? [Y/N]") - if !confirmation { - fmt.Fprintln(color.Output, fmt.Sprintf("Aborting. (You can still use %s)", color.YellowString(filePath))) - return nil - } - } - - response, e := flare.SendFlare(filePath, caseID, customerEmail) - fmt.Println(response) - if e != nil { - return e - } - return nil -} diff --git a/cmd/cluster-agent/app/metadata_mapper_digest.go b/cmd/cluster-agent/app/metadata_mapper_digest.go deleted file mode 100644 index 28628d9acf031a..00000000000000 --- a/cmd/cluster-agent/app/metadata_mapper_digest.go +++ /dev/null @@ -1,111 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubeapiserver -// +build kubeapiserver - -package app - -import ( - "bytes" - "encoding/json" - "fmt" - "os" - - "github.com/fatih/color" - "github.com/spf13/cobra" - - "github.com/DataDog/datadog-agent/cmd/agent/common" - "github.com/DataDog/datadog-agent/pkg/api/util" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/status" -) - -func init() { - ClusterAgentCmd.AddCommand(metaMapperCmd) -} - -var metaMapperCmd = &cobra.Command{ - Use: "metamap [nodeName]", - Short: "Print the map between the metadata and the pods associated", - Long: `The metamap command is mostly designed for troubleshooting purposes. -One can easily identify which pods are running on which nodes, -as well as which services are serving the pods. Or the deployment name for the pod`, - Example: "datadog-cluster-agent metamap ip-10-0-115-123", - RunE: func(cmd *cobra.Command, args []string) error { - - if flagNoColor { - color.NoColor = true - } - - // we'll search for a config file named `datadog-cluster.yaml` - config.Datadog.SetConfigName("datadog-cluster") - err := common.SetupConfig(confPath) - if err != nil { - return fmt.Errorf("unable to set up global cluster agent configuration: %v", err) - } - - err = config.SetupLogger(loggerName, config.GetEnvDefault("DD_LOG_LEVEL", "off"), "", "", false, true, false) - if err != nil { - fmt.Printf("Cannot setup logger, exiting: %v\n", err) - return err - } - - nodeName := "" - if len(args) > 0 { - nodeName = args[0] - } - return getMetadataMap(nodeName) // if nodeName == "", call all. - }, -} - -func getMetadataMap(nodeName string) error { - var e error - var s string - c := util.GetClient(false) // FIX: get certificates right then make this true - var urlstr string - if nodeName == "" { - urlstr = fmt.Sprintf("https://localhost:%v/api/v1/tags/pod", config.Datadog.GetInt("cluster_agent.cmd_port")) - } else { - urlstr = fmt.Sprintf("https://localhost:%v/api/v1/tags/pod/%s", config.Datadog.GetInt("cluster_agent.cmd_port"), nodeName) - } - - // Set session token - e = util.SetAuthToken() - if e != nil { - return e - } - - r, e := util.DoGet(c, urlstr, util.LeaveConnectionOpen) - if e != nil { - fmt.Printf(` - Could not reach agent: %v - Make sure the agent is properly running before requesting the map of services to pods. - Contact support if you continue having issues.`, e) - return e - } - - // The rendering is done in the client so that the agent has less work to do - if prettyPrintJSON { - var prettyJSON bytes.Buffer - json.Indent(&prettyJSON, r, "", " ") //nolint:errcheck - s = prettyJSON.String() - } else if jsonStatus { - s = string(r) - } else { - formattedMetadataMap, err := status.FormatMetadataMapCLI(r) - if err != nil { - return err - } - s = formattedMetadataMap - } - - if statusFilePath != "" { - os.WriteFile(statusFilePath, []byte(s), 0644) //nolint:errcheck - } else { - fmt.Println(s) - } - return nil -} diff --git a/cmd/cluster-agent/app/secret_helper.go b/cmd/cluster-agent/app/secret_helper.go deleted file mode 100644 index 16be17ce4e1e1e..00000000000000 --- a/cmd/cluster-agent/app/secret_helper.go +++ /dev/null @@ -1,19 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubeapiserver && secrets -// +build kubeapiserver,secrets - -package app - -import ( - "github.com/DataDog/datadog-agent/cmd/secrethelper" -) - -func init() { - for _, cmd := range secrethelper.Commands() { - ClusterAgentCmd.AddCommand(cmd) - } -} diff --git a/cmd/cluster-agent/app/status.go b/cmd/cluster-agent/app/status.go deleted file mode 100644 index 547ca9d5ff8a25..00000000000000 --- a/cmd/cluster-agent/app/status.go +++ /dev/null @@ -1,122 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubeapiserver -// +build kubeapiserver - -package app - -import ( - "bytes" - "encoding/json" - "fmt" - "os" - - "github.com/fatih/color" - "github.com/spf13/cobra" - - "github.com/DataDog/datadog-agent/cmd/agent/common" - "github.com/DataDog/datadog-agent/pkg/api/util" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/status" -) - -var ( - jsonStatus bool - prettyPrintJSON bool - statusFilePath string -) - -func init() { - ClusterAgentCmd.AddCommand(statusCmd) - statusCmd.Flags().BoolVarP(&jsonStatus, "json", "j", false, "print out raw json") - statusCmd.Flags().BoolVarP(&prettyPrintJSON, "pretty-json", "p", false, "pretty print JSON") - statusCmd.Flags().StringVarP(&statusFilePath, "file", "o", "", "Output the status command to a file") -} - -var statusCmd = &cobra.Command{ - Use: "status", - Short: "Print the current status", - Long: ``, - RunE: func(cmd *cobra.Command, args []string) error { - - if flagNoColor { - color.NoColor = true - } - - // we'll search for a config file named `datadog-cluster.yaml` - config.Datadog.SetConfigName("datadog-cluster") - err := common.SetupConfig(confPath) - if err != nil { - return fmt.Errorf("unable to set up global cluster agent configuration: %v", err) - } - - err = config.SetupLogger(loggerName, config.GetEnvDefault("DD_LOG_LEVEL", "off"), "", "", false, true, false) - if err != nil { - fmt.Printf("Cannot setup logger, exiting: %v\n", err) - return err - } - - err = requestStatus() - if err != nil { - return err - } - return nil - }, -} - -func requestStatus() error { - fmt.Printf("Getting the status from the agent.\n") - var e error - var s string - c := util.GetClient(false) // FIX: get certificates right then make this true - // TODO use https - urlstr := fmt.Sprintf("https://localhost:%v/status", config.Datadog.GetInt("cluster_agent.cmd_port")) - - // Set session token - e = util.SetAuthToken() - if e != nil { - return e - } - - r, e := util.DoGet(c, urlstr, util.LeaveConnectionOpen) - if e != nil { - var errMap = make(map[string]string) - json.Unmarshal(r, &errMap) //nolint:errcheck - // If the error has been marshalled into a json object, check it and return it properly - if err, found := errMap["error"]; found { - e = fmt.Errorf(err) - } - - fmt.Printf(` - Could not reach agent: %v - Make sure the agent is running before requesting the status. - Contact support if you continue having issues.`, e) - return e - } - - // The rendering is done in the client so that the agent has less work to do - if prettyPrintJSON { - var prettyJSON bytes.Buffer - json.Indent(&prettyJSON, r, "", " ") //nolint:errcheck - s = prettyJSON.String() - } else if jsonStatus { - s = string(r) - } else { - formattedStatus, err := status.FormatDCAStatus(r) - if err != nil { - return err - } - s = formattedStatus - } - - if statusFilePath != "" { - os.WriteFile(statusFilePath, []byte(s), 0644) //nolint:errcheck - } else { - fmt.Println(s) - } - - return nil -} diff --git a/cmd/cluster-agent/app/telemetry.go b/cmd/cluster-agent/app/telemetry.go deleted file mode 100644 index d1e0f02fe8fbc3..00000000000000 --- a/cmd/cluster-agent/app/telemetry.go +++ /dev/null @@ -1,35 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubeapiserver -// +build kubeapiserver - -package app - -import ( - "fmt" - - "github.com/spf13/cobra" - - "github.com/DataDog/datadog-agent/pkg/flare" -) - -func init() { - ClusterAgentCmd.AddCommand(telemetryCmd) -} - -var telemetryCmd = &cobra.Command{ - Use: "telemetry", - Short: "Print the telemetry metrics exposed by the cluster agent", - Long: ``, - RunE: func(cmd *cobra.Command, args []string) error { - payload, err := flare.QueryDCAMetrics() - if err != nil { - return err - } - fmt.Print(string(payload)) - return nil - }, -} diff --git a/cmd/cluster-agent/command/command.go b/cmd/cluster-agent/command/command.go new file mode 100644 index 00000000000000..af41b57ec2bf8c --- /dev/null +++ b/cmd/cluster-agent/command/command.go @@ -0,0 +1,74 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package command implements the top-level `cluster-agent` binary, including its subcommands. +package command + +import ( + "fmt" + "os" + + "github.com/fatih/color" + "github.com/spf13/cobra" +) + +const ( + LoggerName = "CLUSTER" + DefaultLogLevel = "off" +) + +// GlobalParams contains the values of agent-global Cobra flags. +// +// A pointer to this type is passed to SubcommandFactory's, but its contents +// are not valid until Cobra calls the subcommand's Run or RunE function. +type GlobalParams struct { + // ConfFilePath holds the path to the folder containing the configuration + // file, to allow overrides from the command line + ConfFilePath string +} + +// SubcommandFactory is a callable that will return a slice of subcommands. +type SubcommandFactory func(globalParams *GlobalParams) []*cobra.Command + +// MakeCommand makes the top-level Cobra command for this app. +func MakeCommand(subcommandFactories []SubcommandFactory) *cobra.Command { + globalParams := GlobalParams{} + + // AgentCmd is the root command + agentCmd := &cobra.Command{ + Use: fmt.Sprintf("%s [command]", os.Args[0]), + Short: "Datadog Cluster Agent at your service.", + Long: ` +Datadog Cluster Agent takes care of running checks that need run only once per cluster. +It also exposes an API for other Datadog agents that provides them with cluster-level +metadata for their metrics.`, + SilenceUsage: true, + } + + agentCmd.PersistentFlags().StringVarP(&globalParams.ConfFilePath, "cfgpath", "c", "", "path to directory containing datadog-agent.yaml") + + // github.com/fatih/color sets its global color.NoColor to a default value based on + // whether the process is running in a tty. So, we only want to override that when + // the value is true. + var noColorFlag bool + agentCmd.PersistentFlags().BoolVarP(&noColorFlag, "no-color", "n", false, "disable color output") + agentCmd.PersistentPreRun = func(*cobra.Command, []string) { + if noColorFlag { + color.NoColor = true + } + } + + for _, sf := range subcommandFactories { + subcommands := sf(&globalParams) + for _, cmd := range subcommands { + agentCmd.AddCommand(cmd) + } + } + + return agentCmd +} diff --git a/cmd/cluster-agent/commands/check/check.go b/cmd/cluster-agent/commands/check/check.go deleted file mode 100644 index b9ccbb2571a231..00000000000000 --- a/cmd/cluster-agent/commands/check/check.go +++ /dev/null @@ -1,592 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package check - -import ( - "bytes" - "context" - "encoding/json" - "errors" - "fmt" - "os" - "path/filepath" - "runtime" - "strconv" - "strings" - "time" - - "github.com/fatih/color" - "github.com/spf13/cobra" - "gopkg.in/yaml.v2" - - "github.com/DataDog/datadog-agent/cmd/agent/common" - "github.com/DataDog/datadog-agent/pkg/aggregator" - "github.com/DataDog/datadog-agent/pkg/autodiscovery" - "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" - "github.com/DataDog/datadog-agent/pkg/cli/standalone" - "github.com/DataDog/datadog-agent/pkg/collector" - "github.com/DataDog/datadog-agent/pkg/collector/check" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/metadata/inventories" - "github.com/DataDog/datadog-agent/pkg/status" - "github.com/DataDog/datadog-agent/pkg/util/flavor" - "github.com/DataDog/datadog-agent/pkg/util/hostname" - "github.com/DataDog/datadog-agent/pkg/util/scrubber" -) - -var ( - checkRate bool - checkTimes int - checkPause int - checkName string - checkDelay int - logLevel string - formatJSON bool - formatTable bool - breakPoint string - fullSketches bool - saveFlare bool - profileMemory bool - profileMemoryDir string - profileMemoryFrames string - profileMemoryGC string - profileMemoryCombine string - profileMemorySort string - profileMemoryLimit string - profileMemoryDiff string - profileMemoryFilters string - profileMemoryUnit string - profileMemoryVerbose string - discoveryTimeout uint - discoveryRetryInterval uint - discoveryMinInstances uint - generateIntegrationTraces bool -) - -func setupCmd(cmd *cobra.Command) { - cmd.Flags().BoolVarP(&checkRate, "check-rate", "r", false, "check rates by running the check twice with a 1sec-pause between the 2 runs") - cmd.Flags().IntVarP(&checkTimes, "check-times", "t", 1, "number of times to run the check") - cmd.Flags().IntVar(&checkPause, "pause", 0, "pause between multiple runs of the check, in milliseconds") - cmd.Flags().StringVarP(&logLevel, "log-level", "l", "", "set the log level (default 'off') (deprecated, use the env var DD_LOG_LEVEL instead)") - cmd.Flags().IntVarP(&checkDelay, "delay", "d", 100, "delay between running the check and grabbing the metrics in milliseconds") - cmd.Flags().BoolVarP(&formatJSON, "json", "", false, "format aggregator and check runner output as json") - cmd.Flags().BoolVarP(&formatTable, "table", "", false, "format aggregator and check runner output as an ascii table") - cmd.Flags().StringVarP(&breakPoint, "breakpoint", "b", "", "set a breakpoint at a particular line number (Python checks only)") - cmd.Flags().BoolVarP(&profileMemory, "profile-memory", "m", false, "run the memory profiler (Python checks only)") - cmd.Flags().BoolVar(&fullSketches, "full-sketches", false, "output sketches with bins information") - cmd.Flags().BoolVarP(&saveFlare, "flare", "", false, "save check results to the log dir so it may be reported in a flare") - cmd.Flags().UintVarP(&discoveryTimeout, "discovery-timeout", "", 5, "max retry duration until Autodiscovery resolves the check template (in seconds)") - cmd.Flags().UintVarP(&discoveryRetryInterval, "discovery-retry-interval", "", 1, "(unused)") - cmd.Flags().UintVarP(&discoveryMinInstances, "discovery-min-instances", "", 1, "minimum number of config instances to be discovered before running the check(s)") - config.Datadog.BindPFlag("cmd.check.fullsketches", cmd.Flags().Lookup("full-sketches")) //nolint:errcheck - - // Power user flags - mark as hidden - createHiddenStringFlag(cmd, &profileMemoryDir, "m-dir", "", "an existing directory in which to store memory profiling data, ignoring clean-up") - createHiddenStringFlag(cmd, &profileMemoryFrames, "m-frames", "", "the number of stack frames to consider") - createHiddenStringFlag(cmd, &profileMemoryGC, "m-gc", "", "whether or not to run the garbage collector to remove noise") - createHiddenStringFlag(cmd, &profileMemoryCombine, "m-combine", "", "whether or not to aggregate over all traceback frames") - createHiddenStringFlag(cmd, &profileMemorySort, "m-sort", "", "what to sort by between: lineno | filename | traceback") - createHiddenStringFlag(cmd, &profileMemoryLimit, "m-limit", "", "the maximum number of sorted results to show") - createHiddenStringFlag(cmd, &profileMemoryDiff, "m-diff", "", "how to order diff results between: absolute | positive") - createHiddenStringFlag(cmd, &profileMemoryFilters, "m-filters", "", "comma-separated list of file path glob patterns to filter by") - createHiddenStringFlag(cmd, &profileMemoryUnit, "m-unit", "", "the binary unit to represent memory usage (kib, mb, etc.). the default is dynamic") - createHiddenStringFlag(cmd, &profileMemoryVerbose, "m-verbose", "", "whether or not to include potentially noisy sources") - createHiddenBooleanFlag(cmd, &generateIntegrationTraces, "m-trace", false, "send the integration traces") - - cmd.SetArgs([]string{"checkName"}) -} - -// Check returns a cobra command to run checks -func Check(loggerName config.LoggerName, confFilePath *string, flagNoColor *bool) *cobra.Command { - cmd := &cobra.Command{ - Use: "check ", - Short: "Run the specified check", - Long: `Use this to run a specific check with a specific rate`, - RunE: func(cmd *cobra.Command, args []string) error { - configName := "" - if flavor.GetFlavor() == flavor.ClusterAgent { - // we'll search for a config file named `datadog-cluster.yaml` - configName = "datadog-cluster" - } - resolvedLogLevel, warnings, err := setupCLI(loggerName, *confFilePath, configName, "", logLevel, "off") - if err != nil { - fmt.Printf("Cannot initialize command: %v\n", err) - return err - } - - if *flagNoColor { - color.NoColor = true - } - - previousIntegrationTracing := false - if generateIntegrationTraces { - if config.Datadog.IsSet("integration_tracing") { - previousIntegrationTracing = config.Datadog.GetBool("integration_tracing") - } - config.Datadog.Set("integration_tracing", true) - } - - if len(args) != 0 { - checkName = args[0] - } else { - cmd.Help() //nolint:errcheck - return nil - } - - hostnameDetected, err := hostname.Get(context.TODO()) - if err != nil { - fmt.Printf("Cannot get hostname, exiting: %v\n", err) - return err - } - - // Initializing the aggregator with a flush interval of 0 (to disable the flush goroutines) - opts := aggregator.DefaultAgentDemultiplexerOptions(nil) - opts.FlushInterval = 0 - opts.UseNoopForwarder = true - opts.UseNoopEventPlatformForwarder = true - opts.UseNoopOrchestratorForwarder = true - demux := aggregator.InitAndStartAgentDemultiplexer(opts, hostnameDetected) - - common.LoadComponents(context.Background(), config.Datadog.GetString("confd_path")) - common.AC.LoadAndRun(context.Background()) - - // Create the CheckScheduler, but do not attach it to - // AutoDiscovery. NOTE: we do not start common.Coll, either. - collector.InitCheckScheduler(common.Coll) - - waitCtx, cancelTimeout := context.WithTimeout( - context.Background(), time.Duration(discoveryTimeout)*time.Second) - allConfigs := common.WaitForConfigsFromAD(waitCtx, []string{checkName}, int(discoveryMinInstances)) - cancelTimeout() - - // make sure the checks in cs are not JMX checks - for idx := range allConfigs { - conf := &allConfigs[idx] - if conf.Name != checkName { - continue - } - - if check.IsJMXConfig(*conf) { - // we'll mimic the check command behavior with JMXFetch by running - // it with the JSON reporter and the list_with_metrics command. - fmt.Println("Please consider using the 'jmx' command instead of 'check jmx'") - selectedChecks := []string{checkName} - if checkRate { - if err := standalone.ExecJmxListWithRateMetricsJSON(selectedChecks, resolvedLogLevel, allConfigs); err != nil { - return fmt.Errorf("while running the jmx check: %v", err) - } - } else { - if err := standalone.ExecJmxListWithMetricsJSON(selectedChecks, resolvedLogLevel, allConfigs); err != nil { - return fmt.Errorf("while running the jmx check: %v", err) - } - } - - instances := []integration.Data{} - - // Retain only non-JMX instances for later - for _, instance := range conf.Instances { - if check.IsJMXInstance(conf.Name, instance, conf.InitConfig) { - continue - } - instances = append(instances, instance) - } - - if len(instances) == 0 { - fmt.Printf("All instances of '%s' are JMXFetch instances, and have completed running\n", checkName) - return nil - } - - conf.Instances = instances - } - } - - if profileMemory { - // If no directory is specified, make a temporary one - if profileMemoryDir == "" { - profileMemoryDir, err = os.MkdirTemp("", "datadog-agent-memory-profiler") - if err != nil { - return err - } - - defer func() { - cleanupErr := os.RemoveAll(profileMemoryDir) - if cleanupErr != nil { - fmt.Printf("%s\n", cleanupErr) - } - }() - } - - for idx := range allConfigs { - conf := &allConfigs[idx] - if conf.Name != checkName { - continue - } - - var data map[string]interface{} - - err = yaml.Unmarshal(conf.InitConfig, &data) - if err != nil { - return err - } - - if data == nil { - data = make(map[string]interface{}) - } - - data["profile_memory"] = profileMemoryDir - err = populateMemoryProfileConfig(data) - if err != nil { - return err - } - - y, _ := yaml.Marshal(data) - conf.InitConfig = y - - break - } - } else if breakPoint != "" { - breakPointLine, err := strconv.Atoi(breakPoint) - if err != nil { - fmt.Printf("breakpoint must be an integer\n") - return err - } - - for idx := range allConfigs { - conf := &allConfigs[idx] - if conf.Name != checkName { - continue - } - - var data map[string]interface{} - - err = yaml.Unmarshal(conf.InitConfig, &data) - if err != nil { - return err - } - - if data == nil { - data = make(map[string]interface{}) - } - - data["set_breakpoint"] = breakPointLine - - y, _ := yaml.Marshal(data) - conf.InitConfig = y - - break - } - } - - cs := collector.GetChecksByNameForConfigs(checkName, allConfigs) - - // something happened while getting the check(s), display some info. - if len(cs) == 0 { - for check, error := range autodiscovery.GetConfigErrors() { - if checkName == check { - fmt.Fprintln(color.Output, fmt.Sprintf("\n%s: invalid config for %s: %s", color.RedString("Error"), color.YellowString(check), error)) - } - } - for check, errors := range collector.GetLoaderErrors() { - if checkName == check { - fmt.Fprintln(color.Output, fmt.Sprintf("\n%s: could not load %s:", color.RedString("Error"), color.YellowString(checkName))) - for loader, error := range errors { - fmt.Fprintln(color.Output, fmt.Sprintf("* %s: %s", color.YellowString(loader), error)) - } - } - } - for check, warnings := range autodiscovery.GetResolveWarnings() { - if checkName == check { - fmt.Fprintln(color.Output, fmt.Sprintf("\n%s: could not resolve %s config:", color.YellowString("Warning"), color.YellowString(check))) - for _, warning := range warnings { - fmt.Fprintln(color.Output, fmt.Sprintf("* %s", warning)) - } - } - } - return fmt.Errorf("no valid check found") - } - - if len(cs) > 1 { - fmt.Println("Multiple check instances found, running each of them") - } - - var checkFileOutput bytes.Buffer - var instancesData []interface{} - printer := aggregator.AgentDemultiplexerPrinter{AgentDemultiplexer: demux} - for _, c := range cs { - s := runCheck(c, printer) - - // Sleep for a while to allow the aggregator to finish ingesting all the metrics/events/sc - time.Sleep(time.Duration(checkDelay) * time.Millisecond) - - if formatJSON { - aggregatorData := printer.GetMetricsDataForPrint() - var collectorData map[string]interface{} - - collectorJSON, _ := status.GetCheckStatusJSON(c, s) - err = json.Unmarshal(collectorJSON, &collectorData) - if err != nil { - return err - } - - checkRuns := collectorData["runnerStats"].(map[string]interface{})["Checks"].(map[string]interface{})[checkName].(map[string]interface{}) - - // There is only one checkID per run so we'll just access that - var runnerData map[string]interface{} - for _, checkIDData := range checkRuns { - runnerData = checkIDData.(map[string]interface{}) - break - } - - instanceData := map[string]interface{}{ - "aggregator": aggregatorData, - "runner": runnerData, - "inventories": collectorData["inventories"], - } - instancesData = append(instancesData, instanceData) - } else if profileMemory { - // Every instance will create its own directory - instanceID := strings.SplitN(string(c.ID()), ":", 2)[1] - // Colons can't be part of Windows file paths - instanceID = strings.Replace(instanceID, ":", "_", -1) - profileDataDir := filepath.Join(profileMemoryDir, checkName, instanceID) - - snapshotDir := filepath.Join(profileDataDir, "snapshots") - if _, err := os.Stat(snapshotDir); !os.IsNotExist(err) { - snapshots, err := os.ReadDir(snapshotDir) - if err != nil { - return err - } - - numSnapshots := len(snapshots) - if numSnapshots > 0 { - lastSnapshot := snapshots[numSnapshots-1] - snapshotContents, err := os.ReadFile(filepath.Join(snapshotDir, lastSnapshot.Name())) - if err != nil { - return err - } - - color.HiWhite(string(snapshotContents)) - } else { - return fmt.Errorf("no snapshots found in %s", snapshotDir) - } - } else { - return fmt.Errorf("no snapshot data found in %s", profileDataDir) - } - - diffDir := filepath.Join(profileDataDir, "diffs") - if _, err := os.Stat(diffDir); !os.IsNotExist(err) { - diffs, err := os.ReadDir(diffDir) - if err != nil { - return err - } - - numDiffs := len(diffs) - if numDiffs > 0 { - lastDiff := diffs[numDiffs-1] - diffContents, err := os.ReadFile(filepath.Join(diffDir, lastDiff.Name())) - if err != nil { - return err - } - - color.HiCyan(fmt.Sprintf("\n%s\n\n", strings.Repeat("=", 50))) - color.HiWhite(string(diffContents)) - } else { - return fmt.Errorf("no diffs found in %s", diffDir) - } - } else if !singleCheckRun() { - return fmt.Errorf("no diff data found in %s", profileDataDir) - } - } else { - printer.PrintMetrics(&checkFileOutput, formatTable) - - p := func(data string) { - fmt.Println(data) - checkFileOutput.WriteString(data + "\n") - } - - checkStatus, _ := status.GetCheckStatus(c, s) - p(string(checkStatus)) - - metadata := inventories.GetCheckMetadata(c) - if metadata != nil { - p(" Metadata\n ========") - for k, v := range *metadata { - p(fmt.Sprintf(" %s: %v", k, v)) - } - } - } - } - - if runtime.GOOS == "windows" { - standalone.PrintWindowsUserWarning("check") - } - - if formatJSON { - instancesJSON, _ := json.MarshalIndent(instancesData, "", " ") - instanceJSONString := string(instancesJSON) - - fmt.Println(instanceJSONString) - checkFileOutput.WriteString(instanceJSONString + "\n") - } else if singleCheckRun() { - if profileMemory { - color.Yellow("Check has run only once, to collect diff data run the check multiple times with the -t/--check-times flag.") - } else { - color.Yellow("Check has run only once, if some metrics are missing you can try again with --check-rate to see any other metric if available.") - } - } - - if warnings != nil && warnings.TraceMallocEnabledWithPy2 { - return errors.New("tracemalloc is enabled but unavailable with python version 2") - } - - if saveFlare { - writeCheckToFile(checkName, &checkFileOutput) - } - - if generateIntegrationTraces { - config.Datadog.Set("integration_tracing", previousIntegrationTracing) - } - - return nil - }, - } - setupCmd(cmd) - return cmd -} - -func runCheck(c check.Check, demux aggregator.Demultiplexer) *check.Stats { - s := check.NewStats(c) - times := checkTimes - pause := checkPause - if checkRate { - if checkTimes > 2 { - color.Yellow("The check-rate option is overriding check-times to 2") - } - if pause > 0 { - color.Yellow("The check-rate option is overriding pause to 1000ms") - } - times = 2 - pause = 1000 - } - for i := 0; i < times; i++ { - t0 := time.Now() - err := c.Run() - warnings := c.GetWarnings() - sStats, _ := c.GetSenderStats() - s.Add(time.Since(t0), err, warnings, sStats) - if pause > 0 && i < times-1 { - time.Sleep(time.Duration(pause) * time.Millisecond) - } - } - - return s -} - -func writeCheckToFile(checkName string, checkFileOutput *bytes.Buffer) { - _ = os.Mkdir(common.DefaultCheckFlareDirectory, os.ModeDir) - - // Windows cannot accept ":" in file names - filenameSafeTimeStamp := strings.ReplaceAll(time.Now().UTC().Format(time.RFC3339), ":", "-") - flarePath := filepath.Join(common.DefaultCheckFlareDirectory, "check_"+checkName+"_"+filenameSafeTimeStamp+".log") - - scrubbed, err := scrubber.ScrubBytes(checkFileOutput.Bytes()) - if err != nil { - fmt.Println("Error while scrubbing the check file:", err) - } - err = os.WriteFile(flarePath, scrubbed, os.ModePerm) - - if err != nil { - fmt.Println("Error while writing the check file (is the location writable by the dd-agent user?):", err) - } else { - fmt.Println("check written to:", flarePath) - } -} - -func singleCheckRun() bool { - return checkRate == false && checkTimes < 2 -} - -func createHiddenStringFlag(cmd *cobra.Command, p *string, name string, value string, usage string) { - cmd.Flags().StringVar(p, name, value, usage) - cmd.Flags().MarkHidden(name) //nolint:errcheck -} - -func createHiddenBooleanFlag(cmd *cobra.Command, p *bool, name string, value bool, usage string) { - cmd.Flags().BoolVar(p, name, value, usage) - cmd.Flags().MarkHidden(name) //nolint:errcheck -} - -func populateMemoryProfileConfig(initConfig map[string]interface{}) error { - if profileMemoryFrames != "" { - profileMemoryFrames, err := strconv.Atoi(profileMemoryFrames) - if err != nil { - return fmt.Errorf("--m-frames must be an integer") - } - initConfig["profile_memory_frames"] = profileMemoryFrames - } - - if profileMemoryGC != "" { - profileMemoryGC, err := strconv.Atoi(profileMemoryGC) - if err != nil { - return fmt.Errorf("--m-gc must be an integer") - } - - initConfig["profile_memory_gc"] = profileMemoryGC - } - - if profileMemoryCombine != "" { - profileMemoryCombine, err := strconv.Atoi(profileMemoryCombine) - if err != nil { - return fmt.Errorf("--m-combine must be an integer") - } - - if profileMemoryCombine != 0 && profileMemorySort == "traceback" { - return fmt.Errorf("--m-combine cannot be sorted (--m-sort) by traceback") - } - - initConfig["profile_memory_combine"] = profileMemoryCombine - } - - if profileMemorySort != "" { - if profileMemorySort != "lineno" && profileMemorySort != "filename" && profileMemorySort != "traceback" { - return fmt.Errorf("--m-sort must one of: lineno | filename | traceback") - } - initConfig["profile_memory_sort"] = profileMemorySort - } - - if profileMemoryLimit != "" { - profileMemoryLimit, err := strconv.Atoi(profileMemoryLimit) - if err != nil { - return fmt.Errorf("--m-limit must be an integer") - } - initConfig["profile_memory_limit"] = profileMemoryLimit - } - - if profileMemoryDiff != "" { - if profileMemoryDiff != "absolute" && profileMemoryDiff != "positive" { - return fmt.Errorf("--m-diff must one of: absolute | positive") - } - initConfig["profile_memory_diff"] = profileMemoryDiff - } - - if profileMemoryFilters != "" { - initConfig["profile_memory_filters"] = profileMemoryFilters - } - - if profileMemoryUnit != "" { - initConfig["profile_memory_unit"] = profileMemoryUnit - } - - if profileMemoryVerbose != "" { - profileMemoryVerbose, err := strconv.Atoi(profileMemoryVerbose) - if err != nil { - return fmt.Errorf("--m-verbose must be an integer") - } - initConfig["profile_memory_verbose"] = profileMemoryVerbose - } - - return nil -} diff --git a/cmd/cluster-agent/commands/check/setup.go b/cmd/cluster-agent/commands/check/setup.go deleted file mode 100644 index dcf1288823dfa0..00000000000000 --- a/cmd/cluster-agent/commands/check/setup.go +++ /dev/null @@ -1,47 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package check - -import ( - "fmt" - - "github.com/DataDog/datadog-agent/cmd/agent/common" - "github.com/DataDog/datadog-agent/pkg/config" -) - -// setupCLI sets up the shared utilities for a standalone CLI command: -// - config, with defaults to avoid conflicting with an agent process running in parallel -// - logger -// and returns the log level resolved from cliLogLevel and defaultLogLevel -func setupCLI(loggerName config.LoggerName, confFilePath, configName string, cliLogFile string, cliLogLevel string, defaultLogLevel string) (string, *config.Warnings, error) { - var resolvedLogLevel string - - if cliLogLevel != "" { - // Honour the deprecated --log-level argument - overrides := make(map[string]interface{}) - overrides["log_level"] = cliLogLevel - config.AddOverrides(overrides) - resolvedLogLevel = cliLogLevel - } else { - resolvedLogLevel = config.GetEnvDefault("DD_LOG_LEVEL", defaultLogLevel) - } - - overrides := make(map[string]interface{}) - overrides["cmd_port"] = 0 // let the OS assign an available port for the HTTP server - config.AddOverrides(overrides) - - warnings, err := common.SetupConfigWithWarnings(confFilePath, configName) - if err != nil { - return resolvedLogLevel, warnings, fmt.Errorf("unable to set up global agent configuration: %v", err) - } - - err = config.SetupLogger(loggerName, resolvedLogLevel, cliLogFile, "", false, true, false) - if err != nil { - return resolvedLogLevel, warnings, fmt.Errorf("unable to set up logger: %v", err) - } - - return resolvedLogLevel, warnings, nil -} diff --git a/cmd/cluster-agent/commands/clusterchecks.go b/cmd/cluster-agent/commands/clusterchecks.go deleted file mode 100644 index 3d5baad7897e5b..00000000000000 --- a/cmd/cluster-agent/commands/clusterchecks.go +++ /dev/null @@ -1,135 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubeapiserver || clusterchecks -// +build kubeapiserver clusterchecks - -package commands - -import ( - "bytes" - "encoding/json" - "fmt" - - "github.com/DataDog/datadog-agent/cmd/agent/common" - "github.com/DataDog/datadog-agent/pkg/api/util" - "github.com/DataDog/datadog-agent/pkg/clusteragent/clusterchecks/types" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/flare" - - "github.com/fatih/color" - "github.com/spf13/cobra" -) - -var ( - checkName string -) - -// GetClusterChecksCobraCmd TODO -func GetClusterChecksCobraCmd(flagNoColor *bool, confPath *string, loggerName config.LoggerName) *cobra.Command { - clusterChecksCmd := &cobra.Command{ - Use: "clusterchecks", - Short: "Prints the active cluster check configurations", - RunE: func(cmd *cobra.Command, args []string) error { - if *flagNoColor { - color.NoColor = true - } - - // we'll search for a config file named `datadog-cluster.yaml` - config.Datadog.SetConfigName("datadog-cluster") - err := common.SetupConfig(*confPath) - if err != nil { - return fmt.Errorf("unable to set up global cluster agent configuration: %v", err) - } - - err = config.SetupLogger(loggerName, config.GetEnvDefault("DD_LOG_LEVEL", "off"), "", "", false, true, false) - if err != nil { - fmt.Printf("Cannot setup logger, exiting: %v\n", err) - return err - } - - if err = flare.GetClusterChecks(color.Output, checkName); err != nil { - return err - } - - return flare.GetEndpointsChecks(color.Output, checkName) - }, - } - clusterChecksCmd.PersistentFlags().StringVarP(&checkName, "check", "", "", "the check name to filter for") - - return clusterChecksCmd -} - -// RebalanceClusterChecksCobraCmd TODO -func RebalanceClusterChecksCobraCmd(flagNoColor *bool, confPath *string, loggerName config.LoggerName) *cobra.Command { - clusterChecksCmd := &cobra.Command{ - Use: "rebalance", - Short: "Rebalances cluster checks", - RunE: func(cmd *cobra.Command, args []string) error { - - if *flagNoColor { - color.NoColor = true - } - - // we'll search for a config file named `datadog-cluster.yaml` - config.Datadog.SetConfigName("datadog-cluster") - err := common.SetupConfig(*confPath) - if err != nil { - return fmt.Errorf("unable to set up global cluster agent configuration: %v", err) - } - - err = config.SetupLogger(loggerName, config.GetEnvDefault("DD_LOG_LEVEL", "off"), "", "", false, true, false) - if err != nil { - fmt.Printf("Cannot setup logger, exiting: %v\n", err) - return err - } - - return rebalanceChecks() - }, - } - - return clusterChecksCmd -} - -func rebalanceChecks() error { - fmt.Println("Requesting a cluster check rebalance...") - c := util.GetClient(false) // FIX: get certificates right then make this true - urlstr := fmt.Sprintf("https://localhost:%v/api/v1/clusterchecks/rebalance", config.Datadog.GetInt("cluster_agent.cmd_port")) - - // Set session token - err := util.SetAuthToken() - if err != nil { - return err - } - - r, err := util.DoPost(c, urlstr, "application/json", bytes.NewBuffer([]byte{})) - if err != nil { - var errMap = make(map[string]string) - json.Unmarshal(r, &errMap) //nolint:errcheck - // If the error has been marshalled into a json object, check it and return it properly - if e, found := errMap["error"]; found { - err = fmt.Errorf(e) - } - - fmt.Printf(` - Could not reach agent: %v - Make sure the agent is running before requesting the cluster checks rebalancing. - Contact support if you continue having issues.`, err) - - return err - } - - checksMoved := make([]types.RebalanceResponse, 0) - json.Unmarshal(r, &checksMoved) //nolint:errcheck - - fmt.Printf("%d cluster checks rebalanced successfully\n", len(checksMoved)) - - for _, check := range checksMoved { - fmt.Printf("Check %s with weight %d moved from node %s to %s. source diff: %d, dest diff: %d\n", - check.CheckID, check.CheckWeight, check.SourceNodeName, check.DestNodeName, check.SourceDiff, check.DestDiff) - } - - return nil -} diff --git a/cmd/cluster-agent/commands/configcheck.go b/cmd/cluster-agent/commands/configcheck.go deleted file mode 100644 index b3ca87dd4f56fc..00000000000000 --- a/cmd/cluster-agent/commands/configcheck.go +++ /dev/null @@ -1,58 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubeapiserver || clusterchecks -// +build kubeapiserver clusterchecks - -package commands - -import ( - "fmt" - - "github.com/DataDog/datadog-agent/cmd/agent/common" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/flare" - - "github.com/fatih/color" - "github.com/spf13/cobra" -) - -// GetConfigCheckCobraCmd TODO -func GetConfigCheckCobraCmd(flagNoColor *bool, confPath *string, loggerName config.LoggerName) *cobra.Command { - var withDebug bool - configCheckCommand := &cobra.Command{ - Use: "configcheck", - Aliases: []string{"checkconfig"}, - Short: "Print all configurations loaded & resolved of a running cluster agent", - Long: ``, - RunE: func(cmd *cobra.Command, args []string) error { - - if *flagNoColor { - color.NoColor = true - } - - // we'll search for a config file named `datadog-cluster.yaml` - config.Datadog.SetConfigName("datadog-cluster") - err := common.SetupConfig(*confPath) - if err != nil { - return fmt.Errorf("unable to set up global cluster agent configuration: %v", err) - } - - err = config.SetupLogger(loggerName, config.GetEnvDefault("DD_LOG_LEVEL", "off"), "", "", false, true, false) - if err != nil { - fmt.Printf("Cannot setup logger, exiting: %v\n", err) - return err - } - - err = flare.GetClusterAgentConfigCheck(color.Output, withDebug) - if err != nil { - return err - } - return nil - }, - } - configCheckCommand.Flags().BoolVarP(&withDebug, "verbose", "v", false, "print additional debug info") - return configCheckCommand -} diff --git a/cmd/cluster-agent/commands/health.go b/cmd/cluster-agent/commands/health.go deleted file mode 100644 index 321c112e6d4fc3..00000000000000 --- a/cmd/cluster-agent/commands/health.go +++ /dev/null @@ -1,118 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package commands - -import ( - "encoding/json" - "fmt" - "sort" - "strconv" - "strings" - - "github.com/fatih/color" - "github.com/spf13/cobra" - - "github.com/DataDog/datadog-agent/cmd/agent/common" - "github.com/DataDog/datadog-agent/pkg/api/util" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/status/health" - "github.com/DataDog/datadog-agent/pkg/util/flavor" -) - -// Health returns a cobra command to report on the agent's health -func Health(loggerName config.LoggerName, confPath *string, flagNoColor *bool) *cobra.Command { - return &cobra.Command{ - Use: "health", - Short: "Print the current agent health", - Long: ``, - SilenceUsage: true, - RunE: func(cmd *cobra.Command, args []string) error { - - if *flagNoColor { - color.NoColor = true - } - - if flavor.GetFlavor() == flavor.ClusterAgent { - config.Datadog.SetConfigName("datadog-cluster") - } - - // Set up config without secrets so that running the health command (e.g. from container - // liveness probe script) does not trigger a secret backend command call. - err := common.SetupConfigWithoutSecrets(*confPath, "") - if err != nil { - return fmt.Errorf("unable to set up global agent configuration: %v", err) - } - - err = config.SetupLogger(loggerName, config.GetEnvDefault("DD_LOG_LEVEL", "off"), "", "", false, true, false) - if err != nil { - fmt.Printf("Cannot setup logger, exiting: %v\n", err) - return err - } - - return requestHealth() - }, - } -} -func requestHealth() error { - c := util.GetClient(false) // FIX: get certificates right then make this true - - ipcAddress, err := config.GetIPCAddress() - if err != nil { - return err - } - - var urlstr string - if flavor.GetFlavor() == flavor.ClusterAgent { - urlstr = fmt.Sprintf("https://%v:%v/status/health", ipcAddress, config.Datadog.GetInt("cluster_agent.cmd_port")) - } else { - urlstr = fmt.Sprintf("https://%v:%v/agent/status/health", ipcAddress, config.Datadog.GetInt("cmd_port")) - } - - // Set session token - err = util.SetAuthToken() - if err != nil { - return err - } - - r, err := util.DoGet(c, urlstr, util.LeaveConnectionOpen) - if err != nil { - var errMap = make(map[string]string) - json.Unmarshal(r, &errMap) //nolint:errcheck - // If the error has been marshalled into a json object, check it and return it properly - if e, found := errMap["error"]; found { - err = fmt.Errorf(e) - } - - fmt.Printf("Could not reach agent: %v \nMake sure the agent is running before requesting the status and contact support if you continue having issues. \n", err) - return err - } - - s := new(health.Status) - if err = json.Unmarshal(r, s); err != nil { - return fmt.Errorf("Error unmarshalling json: %s", err) - } - - sort.Strings(s.Unhealthy) - sort.Strings(s.Healthy) - - statusString := color.GreenString("PASS") - if len(s.Unhealthy) > 0 { - statusString = color.RedString("FAIL") - } - fmt.Fprintln(color.Output, fmt.Sprintf("Agent health: %s", statusString)) - - if len(s.Healthy) > 0 { - fmt.Fprintln(color.Output, fmt.Sprintf("=== %s healthy components ===", color.GreenString(strconv.Itoa(len(s.Healthy))))) - fmt.Fprintln(color.Output, strings.Join(s.Healthy, ", ")) - } - if len(s.Unhealthy) > 0 { - fmt.Fprintln(color.Output, fmt.Sprintf("=== %s unhealthy components ===", color.RedString(strconv.Itoa(len(s.Unhealthy))))) - fmt.Fprintln(color.Output, strings.Join(s.Unhealthy, ", ")) - return fmt.Errorf("found %d unhealthy components", len(s.Unhealthy)) - } - - return nil -} diff --git a/cmd/cluster-agent/main.go b/cmd/cluster-agent/main.go index cc049926d3dc33..1a6c6b3afe43ca 100644 --- a/cmd/cluster-agent/main.go +++ b/cmd/cluster-agent/main.go @@ -16,6 +16,8 @@ import ( _ "expvar" // Blank import used because this isn't directly used in this file _ "net/http/pprof" // Blank import used because this isn't directly used in this file + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands" _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/helm" _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/ksm" _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/kubernetesapiserver" @@ -29,14 +31,15 @@ import ( _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/system/winproc" "github.com/DataDog/datadog-agent/pkg/util/flavor" "github.com/DataDog/datadog-agent/pkg/util/log" - - "github.com/DataDog/datadog-agent/cmd/cluster-agent/app" ) func main() { // set the Agent flavor flavor.SetFlavor(flavor.ClusterAgent) - if err := app.ClusterAgentCmd.Execute(); err != nil { + + ClusterAgentCmd := command.MakeCommand(subcommands.ClusterAgentSubcommands()) + + if err := ClusterAgentCmd.Execute(); err != nil { log.Error(err) os.Exit(-1) } diff --git a/cmd/cluster-agent/subcommands/check/command.go b/cmd/cluster-agent/subcommands/check/command.go new file mode 100644 index 00000000000000..f3e6e7892bf414 --- /dev/null +++ b/cmd/cluster-agent/subcommands/check/command.go @@ -0,0 +1,30 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package check implements 'cluster-agent check'. +package check + +import ( + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/pkg/cli/subcommands/check" + + "github.com/spf13/cobra" +) + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cmd := check.MakeCommand(func() check.GlobalParams { + return check.GlobalParams{ + ConfFilePath: globalParams.ConfFilePath, + ConfigName: "datadog-cluster", + LoggerName: command.LoggerName, + } + }) + + return []*cobra.Command{cmd} +} diff --git a/cmd/cluster-agent/subcommands/clusterchecks/command.go b/cmd/cluster-agent/subcommands/clusterchecks/command.go new file mode 100644 index 00000000000000..9bc2c18b31596b --- /dev/null +++ b/cmd/cluster-agent/subcommands/clusterchecks/command.go @@ -0,0 +1,28 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package clusterchecks implements 'cluster-agent clusterchecks'. +package clusterchecks + +import ( + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/pkg/cli/subcommands/clusterchecks" + + "github.com/spf13/cobra" +) + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cmd := clusterchecks.MakeCommand(func() clusterchecks.GlobalParams { + return clusterchecks.GlobalParams{ + ConfFilePath: globalParams.ConfFilePath, + } + }) + + return []*cobra.Command{cmd} +} diff --git a/cmd/cluster-agent/subcommands/compliance/command.go b/cmd/cluster-agent/subcommands/compliance/command.go new file mode 100644 index 00000000000000..589c68d82f9865 --- /dev/null +++ b/cmd/cluster-agent/subcommands/compliance/command.go @@ -0,0 +1,38 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package compliance implements 'cluster-agent compliance'. +package compliance + +import ( + "github.com/spf13/cobra" + + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/check" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" +) + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + complianceCmd := &cobra.Command{ + Use: "compliance", + Short: "compliance utility commands", + } + + bundleParams := core.BundleParams{ + ConfigParams: config.NewClusterAgentParams(""), + LogParams: log.LogForOneShot(command.LoggerName, command.DefaultLogLevel, true), + } + + // TODO: The SecAgent Check package should be a component + complianceCmd.AddCommand(check.CommandsWrapped(bundleParams)...) + + return []*cobra.Command{complianceCmd} +} diff --git a/cmd/cluster-agent/subcommands/config/command.go b/cmd/cluster-agent/subcommands/config/command.go new file mode 100644 index 00000000000000..895cb48c71fb48 --- /dev/null +++ b/cmd/cluster-agent/subcommands/config/command.go @@ -0,0 +1,48 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package config implements 'cluster-agent config'. +package config + +import ( + "fmt" + + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/pkg/api/util" + "github.com/DataDog/datadog-agent/pkg/cli/subcommands/config" + pkgconfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/config/settings" + settingshttp "github.com/DataDog/datadog-agent/pkg/config/settings/http" + + "github.com/spf13/cobra" +) + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cmd := config.MakeCommand(func() config.GlobalParams { + return config.GlobalParams{ + ConfFilePath: globalParams.ConfFilePath, + ConfigName: "datadog-cluster", + LoggerName: command.LoggerName, + SettingsClient: newSettingsClient, + } + }) + + return []*cobra.Command{cmd} +} + +func newSettingsClient() (settings.Client, error) { + c := util.GetClient(false) + + apiConfigURL := fmt.Sprintf( + "https://localhost:%v/config", + pkgconfig.Datadog.GetInt("cluster_agent.cmd_port"), + ) + + return settingshttp.NewClient(c, apiConfigURL, "datadog-cluster-agent"), nil +} diff --git a/cmd/cluster-agent/subcommands/configcheck/command.go b/cmd/cluster-agent/subcommands/configcheck/command.go new file mode 100644 index 00000000000000..0d0035e54434c1 --- /dev/null +++ b/cmd/cluster-agent/subcommands/configcheck/command.go @@ -0,0 +1,28 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package configcheck implements 'cluster-agent configcheck'. +package configcheck + +import ( + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/pkg/cli/subcommands/dcaconfigcheck" + + "github.com/spf13/cobra" +) + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cmd := dcaconfigcheck.MakeCommand(func() dcaconfigcheck.GlobalParams { + return dcaconfigcheck.GlobalParams{ + ConfFilePath: globalParams.ConfFilePath, + } + }) + + return []*cobra.Command{cmd} +} diff --git a/cmd/cluster-agent/subcommands/diagnose/command.go b/cmd/cluster-agent/subcommands/diagnose/command.go new file mode 100644 index 00000000000000..c62d20dfd818c5 --- /dev/null +++ b/cmd/cluster-agent/subcommands/diagnose/command.go @@ -0,0 +1,46 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package diagnose implements 'cluster-agent diagnose'. +package diagnose + +import ( + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" + "github.com/DataDog/datadog-agent/pkg/diagnose" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "github.com/fatih/color" + "github.com/spf13/cobra" + "go.uber.org/fx" +) + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cmd := &cobra.Command{ + Use: "diagnose", + Short: "Execute some connectivity diagnosis on your system", + Long: ``, + RunE: func(cmd *cobra.Command, args []string) error { + return fxutil.OneShot(run, + fx.Supply(core.BundleParams{ + ConfigParams: config.NewClusterAgentParams(globalParams.ConfFilePath, config.WithConfigLoadSecrets(true)), + LogParams: log.LogForOneShot(command.LoggerName, command.DefaultLogLevel, true), + }), + core.Bundle, + ) + }, + } + + return []*cobra.Command{cmd} +} + +func run(log log.Component, config config.Component) error { + return diagnose.RunAll(color.Output) +} diff --git a/cmd/cluster-agent/subcommands/flare/command.go b/cmd/cluster-agent/subcommands/flare/command.go new file mode 100644 index 00000000000000..1ff2c2346bc0f4 --- /dev/null +++ b/cmd/cluster-agent/subcommands/flare/command.go @@ -0,0 +1,127 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package flare implements 'cluster-agent flare'. +package flare + +import ( + "bytes" + "fmt" + + "github.com/DataDog/datadog-agent/cmd/agent/common" + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" + "github.com/DataDog/datadog-agent/pkg/api/util" + pkgconfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/flare" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "github.com/DataDog/datadog-agent/pkg/util/input" + "github.com/fatih/color" + "github.com/spf13/cobra" + "go.uber.org/fx" +) + +type cliParams struct { + caseID string + email string + send bool +} + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cliParams := &cliParams{} + + cmd := &cobra.Command{ + Use: "flare [caseID]", + Short: "Collect a flare and send it to Datadog", + Long: ``, + RunE: func(cmd *cobra.Command, args []string) error { + if len(args) > 0 { + cliParams.caseID = args[0] + } + + if cliParams.email == "" { + var err error + cliParams.email, err = input.AskForEmail() + if err != nil { + fmt.Println("Error reading email, please retry or contact support") + return err + } + } + + return fxutil.OneShot(run, + fx.Supply(cliParams), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewClusterAgentParams(globalParams.ConfFilePath, config.WithConfigLoadSecrets(true)), + LogParams: log.LogForOneShot(command.LoggerName, command.DefaultLogLevel, true), + }), + core.Bundle, + ) + }, + } + + cmd.Flags().StringVarP(&cliParams.email, "email", "e", "", "Your email") + cmd.Flags().BoolVarP(&cliParams.send, "send", "s", false, "Automatically send flare (don't prompt for confirmation)") + cmd.SetArgs([]string{"caseID"}) + + return []*cobra.Command{cmd} +} + +func run(log log.Component, config config.Component, cliParams *cliParams) error { + fmt.Fprintln(color.Output, color.BlueString("Asking the Cluster Agent to build the flare archive.")) + var e error + c := util.GetClient(false) // FIX: get certificates right then make this true + urlstr := fmt.Sprintf("https://localhost:%v/flare", pkgconfig.Datadog.GetInt("cluster_agent.cmd_port")) + + logFile := pkgconfig.Datadog.GetString("log_file") + if logFile == "" { + logFile = common.DefaultDCALogFile + } + + // Set session token + e = util.SetAuthToken() + if e != nil { + return e + } + + r, e := util.DoPost(c, urlstr, "application/json", bytes.NewBuffer([]byte{})) + var filePath string + if e != nil { + if r != nil && string(r) != "" { + fmt.Fprintln(color.Output, fmt.Sprintf("The agent ran into an error while making the flare: %s", color.RedString(string(r)))) + } else { + fmt.Fprintln(color.Output, color.RedString("The agent was unable to make a full flare: %s.", e.Error())) + } + fmt.Fprintln(color.Output, color.YellowString("Initiating flare locally, some logs will be missing.")) + filePath, e = flare.CreateDCAArchive(true, common.GetDistPath(), logFile) + if e != nil { + fmt.Printf("The flare zipfile failed to be created: %s\n", e) + return e + } + } else { + filePath = string(r) + } + + fmt.Fprintln(color.Output, fmt.Sprintf("%s is going to be uploaded to Datadog", color.YellowString(filePath))) + if !cliParams.send { + confirmation := input.AskForConfirmation("Are you sure you want to upload a flare? [Y/N]") + if !confirmation { + fmt.Fprintln(color.Output, fmt.Sprintf("Aborting. (You can still use %s)", color.YellowString(filePath))) + return nil + } + } + + response, e := flare.SendFlare(filePath, cliParams.caseID, cliParams.email) + fmt.Println(response) + if e != nil { + return e + } + return nil +} diff --git a/cmd/cluster-agent/subcommands/health/command.go b/cmd/cluster-agent/subcommands/health/command.go new file mode 100644 index 00000000000000..2d928ceb03ea4c --- /dev/null +++ b/cmd/cluster-agent/subcommands/health/command.go @@ -0,0 +1,30 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package health implements 'cluster-agent health'. +package health + +import ( + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/pkg/cli/subcommands/health" + + "github.com/spf13/cobra" +) + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cmd := health.MakeCommand(func() health.GlobalParams { + return health.GlobalParams{ + ConfFilePath: globalParams.ConfFilePath, + ConfigName: "datadog-cluster", + LoggerName: command.LoggerName, + } + }) + + return []*cobra.Command{cmd} +} diff --git a/cmd/cluster-agent/subcommands/metamap/command.go b/cmd/cluster-agent/subcommands/metamap/command.go new file mode 100644 index 00000000000000..355630ddbfe224 --- /dev/null +++ b/cmd/cluster-agent/subcommands/metamap/command.go @@ -0,0 +1,99 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package metamap implements 'cluster-agent metamap'. +package metamap + +import ( + "fmt" + + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" + "github.com/DataDog/datadog-agent/pkg/api/util" + pkgconfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/status" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "github.com/spf13/cobra" + "go.uber.org/fx" +) + +type cliParams struct { + args []string +} + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cliParams := &cliParams{} + + cmd := &cobra.Command{ + Use: "metamap [nodeName]", + Short: "Print the map between the metadata and the pods associated", + Long: `The metamap command is mostly designed for troubleshooting purposes. +One can easily identify which pods are running on which nodes, +as well as which services are serving the pods. Or the deployment name for the pod`, + Example: "datadog-cluster-agent metamap ip-10-0-115-123", + RunE: func(cmd *cobra.Command, args []string) error { + cliParams.args = args + return fxutil.OneShot(run, + fx.Supply(cliParams), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewClusterAgentParams(globalParams.ConfFilePath, config.WithConfigLoadSecrets(true)), + LogParams: log.LogForOneShot(command.LoggerName, command.DefaultLogLevel, true), + }), + core.Bundle, + ) + }, + } + + return []*cobra.Command{cmd} +} + +func run(log log.Component, config config.Component, cliParams *cliParams) error { + nodeName := "" + if len(cliParams.args) > 0 { + nodeName = cliParams.args[0] + } + return getMetadataMap(nodeName) // if nodeName == "", call all. +} + +func getMetadataMap(nodeName string) error { + var e error + c := util.GetClient(false) // FIX: get certificates right then make this true + var urlstr string + if nodeName == "" { + urlstr = fmt.Sprintf("https://localhost:%v/api/v1/tags/pod", pkgconfig.Datadog.GetInt("cluster_agent.cmd_port")) + } else { + urlstr = fmt.Sprintf("https://localhost:%v/api/v1/tags/pod/%s", pkgconfig.Datadog.GetInt("cluster_agent.cmd_port"), nodeName) + } + + // Set session token + e = util.SetAuthToken() + if e != nil { + return e + } + + r, e := util.DoGet(c, urlstr, util.LeaveConnectionOpen) + if e != nil { + fmt.Printf(` + Could not reach agent: %v + Make sure the agent is properly running before requesting the map of services to pods. + Contact support if you continue having issues.`, e) + return e + } + + formattedMetadataMap, err := status.FormatMetadataMapCLI(r) + if err != nil { + return err + } + + fmt.Println(formattedMetadataMap) + + return nil +} diff --git a/cmd/cluster-agent/subcommands/secrethelper/command.go b/cmd/cluster-agent/subcommands/secrethelper/command.go new file mode 100644 index 00000000000000..12b93800e285bc --- /dev/null +++ b/cmd/cluster-agent/subcommands/secrethelper/command.go @@ -0,0 +1,21 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package secrethelper implements 'cluster-agent secret-helper'. +package diagnose + +import ( + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/cmd/secrethelper" + "github.com/spf13/cobra" +) + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + return secrethelper.Commands() +} diff --git a/cmd/cluster-agent/app/app.go b/cmd/cluster-agent/subcommands/start/command.go similarity index 57% rename from cmd/cluster-agent/app/app.go rename to cmd/cluster-agent/subcommands/start/command.go index 028332da0e121b..522a29404582c2 100644 --- a/cmd/cluster-agent/app/app.go +++ b/cmd/cluster-agent/subcommands/start/command.go @@ -3,10 +3,11 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:build kubeapiserver -// +build kubeapiserver +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver -package app +// Package start implements 'cluster-agent start'. +package start import ( "context" @@ -18,188 +19,132 @@ import ( "syscall" "time" - "github.com/fatih/color" - "github.com/gorilla/mux" - "github.com/spf13/cobra" - - v1 "k8s.io/api/core/v1" - "k8s.io/client-go/kubernetes/scheme" - corev1 "k8s.io/client-go/kubernetes/typed/core/v1" - "k8s.io/client-go/tools/record" - "github.com/DataDog/datadog-agent/cmd/agent/common" admissioncmd "github.com/DataDog/datadog-agent/cmd/cluster-agent/admission" "github.com/DataDog/datadog-agent/cmd/cluster-agent/api" dcav1 "github.com/DataDog/datadog-agent/cmd/cluster-agent/api/v1" + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" "github.com/DataDog/datadog-agent/cmd/cluster-agent/custommetrics" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" "github.com/DataDog/datadog-agent/pkg/aggregator" "github.com/DataDog/datadog-agent/pkg/api/healthprobe" "github.com/DataDog/datadog-agent/pkg/clusteragent" admissionpkg "github.com/DataDog/datadog-agent/pkg/clusteragent/admission" "github.com/DataDog/datadog-agent/pkg/clusteragent/admission/mutate" + admissionpatch "github.com/DataDog/datadog-agent/pkg/clusteragent/admission/patch" "github.com/DataDog/datadog-agent/pkg/clusteragent/clusterchecks" "github.com/DataDog/datadog-agent/pkg/collector" - "github.com/DataDog/datadog-agent/pkg/config" + pkgconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/config/remote" "github.com/DataDog/datadog-agent/pkg/config/remote/data" remoteconfig "github.com/DataDog/datadog-agent/pkg/config/remote/service" "github.com/DataDog/datadog-agent/pkg/config/resolver" + commonsettings "github.com/DataDog/datadog-agent/pkg/config/settings" "github.com/DataDog/datadog-agent/pkg/forwarder" - "github.com/DataDog/datadog-agent/pkg/serializer" "github.com/DataDog/datadog-agent/pkg/status/health" "github.com/DataDog/datadog-agent/pkg/telemetry" "github.com/DataDog/datadog-agent/pkg/util" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/hostname" "github.com/DataDog/datadog-agent/pkg/util/kubernetes/apiserver" apicommon "github.com/DataDog/datadog-agent/pkg/util/kubernetes/apiserver/common" "github.com/DataDog/datadog-agent/pkg/util/kubernetes/apiserver/leaderelection" "github.com/DataDog/datadog-agent/pkg/util/kubernetes/clustername" - "github.com/DataDog/datadog-agent/pkg/util/log" + pkglog "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/version" -) -// loggerName is the name of the cluster agent logger -const loggerName config.LoggerName = "CLUSTER" - -// FIXME: move LoadComponents and AC.LoadAndRun in their own package so we don't import cmd/agent -var ( - ClusterAgentCmd = &cobra.Command{ - Use: "datadog-cluster-agent [command]", - Short: "Datadog Cluster Agent at your service.", - Long: ` -Datadog Cluster Agent takes care of running checks that need run only once per cluster. -It also exposes an API for other Datadog agents that provides them with cluster-level -metadata for their metrics.`, - } + "github.com/gorilla/mux" + "github.com/spf13/cobra" + "go.uber.org/fx" + v1 "k8s.io/api/core/v1" + "k8s.io/client-go/kubernetes/scheme" + corev1 "k8s.io/client-go/kubernetes/typed/core/v1" + "k8s.io/client-go/tools/record" +) - startCmd = &cobra.Command{ +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + startCmd := &cobra.Command{ Use: "start", Short: "Start the Cluster Agent", Long: `Runs Datadog Cluster agent in the foreground`, - RunE: start, - } - - versionCmd = &cobra.Command{ - Use: "version", - Short: "Print the version info", - Long: ``, - Run: func(cmd *cobra.Command, args []string) { - if flagNoColor { - color.NoColor = true - } - av, _ := version.Agent() - meta := "" - if av.Meta != "" { - meta = fmt.Sprintf("- Meta: %s ", color.YellowString(av.Meta)) - } - fmt.Fprintln( - color.Output, - fmt.Sprintf("Cluster agent %s %s- Commit: '%s' - Serialization version: %s", - color.BlueString(av.GetNumberAndPre()), - meta, - color.GreenString(version.Commit), - color.MagentaString(serializer.AgentPayloadVersion), - ), + RunE: func(cmd *cobra.Command, args []string) error { + // TODO: once the cluster-agent is represented as a component, and + // not a function (start), this will use `fxutil.Run` instead of + // `fxutil.OneShot`. + return fxutil.OneShot(start, + fx.Supply(globalParams), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewClusterAgentParams(globalParams.ConfFilePath, config.WithConfigLoadSecrets(true)), + LogParams: log.LogForDaemon(command.LoggerName, "log_file", common.DefaultDCALogFile), + }), + core.Bundle, ) }, } - confPath string - flagNoColor bool - stopCh chan struct{} -) - -func init() { - // attach the command to the root - ClusterAgentCmd.AddCommand(startCmd) - ClusterAgentCmd.AddCommand(versionCmd) - - ClusterAgentCmd.PersistentFlags().StringVarP(&confPath, "cfgpath", "c", "", "path to directory containing datadog.yaml") - ClusterAgentCmd.PersistentFlags().BoolVarP(&flagNoColor, "no-color", "n", false, "disable color output") + return []*cobra.Command{startCmd} } -func start(cmd *cobra.Command, args []string) error { - // Starting Cluster Agent sequence - // Initialization order is important for multiple reasons, see comments +func start(log log.Component, config config.Component, cliParams *command.GlobalParams) error { + stopCh := make(chan struct{}) - // Reading configuration as mostly everything can depend on config variables - config.Datadog.SetConfigName("datadog-cluster") - err := common.SetupConfig(confPath) - if err != nil { - return fmt.Errorf("unable to set up global agent configuration: %v", err) - } + mainCtx, mainCtxCancel := context.WithCancel(context.Background()) + defer mainCtxCancel() - // Setup logger - syslogURI := config.GetSyslogURI() - logFile := config.Datadog.GetString("log_file") - if logFile == "" { - logFile = common.DefaultDCALogFile - } - if config.Datadog.GetBool("disable_file_logging") { - // this will prevent any logging on file - logFile = "" - } + signalCh := make(chan os.Signal, 1) + signal.Notify(signalCh, os.Interrupt, syscall.SIGTERM) - err = config.SetupLogger( - loggerName, - config.Datadog.GetString("log_level"), - logFile, - syslogURI, - config.Datadog.GetBool("syslog_rfc"), - config.Datadog.GetBool("log_to_console"), - config.Datadog.GetBool("log_format_json"), - ) - if err != nil { - log.Criticalf("Unable to setup logger: %s", err) - return nil - } + // Starting Cluster Agent sequence + // Initialization order is important for multiple reasons, see comments if err := util.SetupCoreDump(); err != nil { - log.Warnf("Can't setup core dumps: %v, core dumps might not be available after a crash", err) + pkglog.Warnf("Can't setup core dumps: %v, core dumps might not be available after a crash", err) } // Init settings that can be changed at runtime if err := initRuntimeSettings(); err != nil { - log.Warnf("Can't initiliaze the runtime settings: %v", err) + pkglog.Warnf("Can't initiliaze the runtime settings: %v", err) } // Setup Internal Profiling common.SetupInternalProfiling() - if !config.Datadog.IsSet("api_key") { - log.Critical("no API key configured, exiting") - return nil + if !pkgconfig.Datadog.IsSet("api_key") { + return fmt.Errorf("no API key configured, exiting") } - mainCtx, mainCtxCancel := context.WithCancel(context.Background()) - defer mainCtxCancel() // Calling cancel twice is safe - // Expose the registered metrics via HTTP. http.Handle("/metrics", telemetry.Handler()) - metricsPort := config.Datadog.GetInt("metrics_port") + metricsPort := pkgconfig.Datadog.GetInt("metrics_port") metricsServer := &http.Server{ Addr: fmt.Sprintf("0.0.0.0:%d", metricsPort), Handler: http.DefaultServeMux, } + go func() { err := metricsServer.ListenAndServe() if err != nil && err != http.ErrServerClosed { - log.Errorf("Error creating expvar server on port %v: %v", metricsPort, err) + pkglog.Errorf("Error creating expvar server on port %v: %v", metricsPort, err) } }() // Setup healthcheck port - var healthPort = config.Datadog.GetInt("health_port") + var healthPort = pkgconfig.Datadog.GetInt("health_port") if healthPort > 0 { err := healthprobe.Serve(mainCtx, healthPort) if err != nil { - return log.Errorf("Error starting health port, exiting: %v", err) + return fmt.Errorf("Error starting health port, exiting: %v", err) } - log.Debugf("Health check listening on port %d", healthPort) + + pkglog.Debugf("Health check listening on port %d", healthPort) } // Initialize remote configuration - if config.Datadog.GetBool("remote_configuration.enabled") { + var rcClient *remote.Client + if pkgconfig.Datadog.GetBool("remote_configuration.enabled") { rcClient, err := initializeRemoteConfig(mainCtx) if err != nil { log.Errorf("Failed to start remote-configuration: %v", err) @@ -210,30 +155,31 @@ func start(cmd *cobra.Command, args []string) error { } // Starting server early to ease investigations - if err = api.StartServer(); err != nil { - return log.Errorf("Error while starting agent API, exiting: %v", err) + if err := api.StartServer(); err != nil { + return fmt.Errorf("Error while starting agent API, exiting: %v", err) } // Getting connection to APIServer, it's done before Hostname resolution // as hostname resolution may call APIServer - log.Info("Waiting to obtain APIClient connection") + pkglog.Info("Waiting to obtain APIClient connection") apiCl, err := apiserver.WaitForAPIClient(context.Background()) // make sure we can connect to the apiserver if err != nil { - return log.Errorf("Fatal error: Cannot connect to the apiserver: %v", err) + return fmt.Errorf("Fatal error: Cannot connect to the apiserver: %v", err) } - log.Infof("Got APIClient connection") + pkglog.Infof("Got APIClient connection") // Get hostname as aggregator requires hostname - hname, err := hostname.Get(context.TODO()) + hname, err := hostname.Get(mainCtx) if err != nil { - return log.Errorf("Error while getting hostname, exiting: %v", err) + return fmt.Errorf("Error while getting hostname, exiting: %v", err) } - log.Infof("Hostname is: %s", hname) + + pkglog.Infof("Hostname is: %s", hname) // setup the forwarder - keysPerDomain, err := config.GetMultipleEndpoints() + keysPerDomain, err := pkgconfig.GetMultipleEndpoints() if err != nil { - log.Error("Misconfiguration of agent endpoints: ", err) + pkglog.Error("Misconfiguration of agent endpoints: ", err) } // If a cluster-agent looses the connectivity to DataDog, we still want it to remain ready so that its endpoint remains in the service because: @@ -255,7 +201,7 @@ func start(cmd *cobra.Command, args []string) error { // Create event recorder eventBroadcaster := record.NewBroadcaster() - eventBroadcaster.StartLogging(log.Infof) + eventBroadcaster.StartLogging(pkglog.Infof) eventBroadcaster.StartRecordingToSink(&corev1.EventSinkImpl{Interface: apiCl.Cl.CoreV1().Events("")}) eventRecorder := eventBroadcaster.NewRecorder(scheme.Scheme, v1.EventSource{Component: "datadog-cluster-agent"}) @@ -273,33 +219,33 @@ func start(cmd *cobra.Command, args []string) error { if aggErr := apiserver.StartControllers(ctx); aggErr != nil { for _, err := range aggErr.Errors() { - log.Warnf("Error while starting controller: %v", err) + pkglog.Warnf("Error while starting controller: %v", err) } } - if config.Datadog.GetBool("orchestrator_explorer.enabled") { + clusterName := clustername.GetClusterName(context.TODO(), hname) + if pkgconfig.Datadog.GetBool("orchestrator_explorer.enabled") { // Generate and persist a cluster ID // this must be a UUID, and ideally be stable for the lifetime of a cluster, // so we store it in a configmap that we try and read before generating a new one. coreClient := apiCl.Cl.CoreV1().(*corev1.CoreV1Client) _, err = apicommon.GetOrCreateClusterID(coreClient) if err != nil { - log.Errorf("Failed to generate or retrieve the cluster ID") + pkglog.Errorf("Failed to generate or retrieve the cluster ID") } - clusterName := clustername.GetClusterName(context.TODO(), hname) if clusterName == "" { - log.Warn("Failed to auto-detect a Kubernetes cluster name. We recommend you set it manually via the cluster_name config option") + pkglog.Warn("Failed to auto-detect a Kubernetes cluster name. We recommend you set it manually via the cluster_name config option") } } else { - log.Info("Orchestrator explorer is disabled") + pkglog.Info("Orchestrator explorer is disabled") } - // Setup a channel to catch OS signals - signalCh := make(chan os.Signal, 1) - signal.Notify(signalCh, os.Interrupt, syscall.SIGTERM) + // FIXME: move LoadComponents and AC.LoadAndRun in their own package so we + // don't import cmd/agent + // create and setup the Autoconfig instance - common.LoadComponents(mainCtx, config.Datadog.GetString("confd_path")) + common.LoadComponents(mainCtx, pkgconfig.Datadog.GetString("confd_path")) // Set up check collector common.AC.AddScheduler("check", collector.InitCheckScheduler(common.Coll), true) @@ -308,7 +254,7 @@ func start(cmd *cobra.Command, args []string) error { // start the autoconfig, this will immediately run any configured check common.AC.LoadAndRun(mainCtx) - if config.Datadog.GetBool("cluster_checks.enabled") { + if pkgconfig.Datadog.GetBool("cluster_checks.enabled") { // Start the cluster check Autodiscovery clusterCheckHandler, err := setupClusterCheck(mainCtx) if err == nil { @@ -316,15 +262,15 @@ func start(cmd *cobra.Command, args []string) error { dcav1.InstallChecksEndpoints(r, clusteragent.ServerContext{ClusterCheckHandler: clusterCheckHandler}) }) } else { - log.Errorf("Error while setting up cluster check Autodiscovery, CLC API endpoints won't be available, err: %v", err) + pkglog.Errorf("Error while setting up cluster check Autodiscovery, CLC API endpoints won't be available, err: %v", err) } } else { - log.Debug("Cluster check Autodiscovery disabled") + pkglog.Debug("Cluster check Autodiscovery disabled") } wg := sync.WaitGroup{} // Autoscaler Controller Goroutine - if config.Datadog.GetBool("external_metrics_provider.enabled") { + if pkgconfig.Datadog.GetBool("external_metrics_provider.enabled") { // Start the k8s custom metrics server. This is a blocking call wg.Add(1) go func() { @@ -332,24 +278,40 @@ func start(cmd *cobra.Command, args []string) error { errServ := custommetrics.RunServer(mainCtx, apiCl) if errServ != nil { - log.Errorf("Error in the External Metrics API Server: %v", errServ) + pkglog.Errorf("Error in the External Metrics API Server: %v", errServ) } }() } // Compliance - if config.Datadog.GetBool("compliance_config.enabled") { + if pkgconfig.Datadog.GetBool("compliance_config.enabled") { wg.Add(1) go func() { defer wg.Done() if err := runCompliance(mainCtx, apiCl, le.IsLeader); err != nil { - log.Errorf("Error while running compliance agent: %v", err) + pkglog.Errorf("Error while running compliance agent: %v", err) } }() } - if config.Datadog.GetBool("admission_controller.enabled") { + if pkgconfig.Datadog.GetBool("admission_controller.enabled") { + if pkgconfig.Datadog.GetBool("admission_controller.auto_instrumentation.patcher.enabled") { + patchCtx := admissionpatch.ControllerContext{ + IsLeaderFunc: le.IsLeader, + LeaderSubscribeFunc: le.Subscribe, + K8sClient: apiCl.Cl, + RcClient: rcClient, + ClusterName: clusterName, + StopCh: stopCh, + } + if err := admissionpatch.StartControllers(patchCtx); err != nil { + log.Errorf("Cannot start auto instrumentation patcher: %v", err) + } + } else { + log.Info("Auto instrumentation patcher is disabled") + } + admissionCtx := admissionpkg.ControllerContext{ IsLeaderFunc: le.IsLeader, LeaderSubscribeFunc: le.Subscribe, @@ -362,14 +324,14 @@ func start(cmd *cobra.Command, args []string) error { err = admissionpkg.StartControllers(admissionCtx) if err != nil { - log.Errorf("Could not start admission controller: %v", err) + pkglog.Errorf("Could not start admission controller: %v", err) } else { // Webhook and secret controllers are started successfully // Setup the the k8s admission webhook server server := admissioncmd.NewServer() - server.Register(config.Datadog.GetString("admission_controller.inject_config.endpoint"), mutate.InjectConfig, apiCl.DynamicCl) - server.Register(config.Datadog.GetString("admission_controller.inject_tags.endpoint"), mutate.InjectTags, apiCl.DynamicCl) - server.Register(config.Datadog.GetString("admission_controller.auto_instrumentation.endpoint"), mutate.InjectAutoInstrumentation, apiCl.DynamicCl) + server.Register(pkgconfig.Datadog.GetString("admission_controller.inject_config.endpoint"), mutate.InjectConfig, apiCl.DynamicCl) + server.Register(pkgconfig.Datadog.GetString("admission_controller.inject_tags.endpoint"), mutate.InjectTags, apiCl.DynamicCl) + server.Register(pkgconfig.Datadog.GetString("admission_controller.auto_instrumentation.endpoint"), mutate.InjectAutoInstrumentation, apiCl.DynamicCl) // Start the k8s admission webhook server wg.Add(1) @@ -378,15 +340,15 @@ func start(cmd *cobra.Command, args []string) error { errServ := server.Run(mainCtx, apiCl.Cl) if errServ != nil { - log.Errorf("Error in the Admission Controller Webhook Server: %v", errServ) + pkglog.Errorf("Error in the Admission Controller Webhook Server: %v", errServ) } }() } } else { - log.Info("Admission controller is disabled") + pkglog.Info("Admission controller is disabled") } - log.Infof("All components started. Cluster Agent now running.") + pkglog.Infof("All components started. Cluster Agent now running.") // Block here until we receive the interrupt signal <-signalCh @@ -395,32 +357,52 @@ func start(cmd *cobra.Command, args []string) error { // GetReadyNonBlocking has a 100ms timeout to avoid blocking health, err := health.GetReadyNonBlocking() if err != nil { - log.Warnf("Cluster Agent health unknown: %s", err) + pkglog.Warnf("Cluster Agent health unknown: %s", err) } else if len(health.Unhealthy) > 0 { - log.Warnf("Some components were unhealthy: %v", health.Unhealthy) + pkglog.Warnf("Some components were unhealthy: %v", health.Unhealthy) } // Cancel the main context to stop components mainCtxCancel() - // wait for the External Metrics Server and - // the Admission Webhook Server to stop properly + // wait for the External Metrics Server and the Admission Webhook Server to + // stop properly wg.Wait() - if stopCh != nil { - close(stopCh) - } + close(stopCh) demux.Stop(true) if err := metricsServer.Shutdown(context.Background()); err != nil { - log.Errorf("Error shutdowning metrics server on port %d: %v", metricsPort, err) + pkglog.Errorf("Error shutdowning metrics server on port %d: %v", metricsPort, err) } - log.Info("See ya!") - log.Flush() + pkglog.Info("See ya!") + pkglog.Flush() + return nil } +// initRuntimeSettings builds the map of runtime Cluster Agent settings configurable at runtime. +func initRuntimeSettings() error { + if err := commonsettings.RegisterRuntimeSetting(commonsettings.LogLevelRuntimeSetting{}); err != nil { + return err + } + + if err := commonsettings.RegisterRuntimeSetting(commonsettings.RuntimeMutexProfileFraction("runtime_mutex_profile_fraction")); err != nil { + return err + } + + if err := commonsettings.RegisterRuntimeSetting(commonsettings.RuntimeBlockProfileRate("runtime_block_profile_rate")); err != nil { + return err + } + + if err := commonsettings.RegisterRuntimeSetting(commonsettings.ProfilingGoroutines("internal_profiling_goroutines")); err != nil { + return err + } + + return commonsettings.RegisterRuntimeSetting(commonsettings.ProfilingRuntimeSetting{SettingName: "internal_profiling", Service: "datadog-cluster-agent"}) +} + func setupClusterCheck(ctx context.Context) (*clusterchecks.Handler, error) { handler, err := clusterchecks.NewHandler(common.AC) if err != nil { @@ -428,7 +410,7 @@ func setupClusterCheck(ctx context.Context) (*clusterchecks.Handler, error) { } go handler.Run(ctx) - log.Info("Started cluster check Autodiscovery") + pkglog.Info("Started cluster check Autodiscovery") return handler, nil } @@ -442,7 +424,7 @@ func initializeRemoteConfig(ctx context.Context) (*remote.Client, error) { return nil, fmt.Errorf("unable to start remote-config service: %w", err) } - rcClient, err := remote.NewClient("cluster-agent", configService, version.AgentVersion, []data.Product{}, time.Second*5) + rcClient, err := remote.NewClient("cluster-agent", configService, version.AgentVersion, []data.Product{data.ProductAPMTracing}, time.Second*5) if err != nil { return nil, fmt.Errorf("unable to create local remote-config client: %w", err) } diff --git a/cmd/cluster-agent/subcommands/start/command_test.go b/cmd/cluster-agent/subcommands/start/command_test.go new file mode 100644 index 00000000000000..09da8ef3b15275 --- /dev/null +++ b/cmd/cluster-agent/subcommands/start/command_test.go @@ -0,0 +1,24 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +package start + +import ( + "testing" + + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +func TestCommand(t *testing.T) { + fxutil.TestOneShotSubcommand(t, + Commands(&command.GlobalParams{}), + []string{"start"}, + start, + func() {}) +} diff --git a/cmd/cluster-agent/app/compliance.go b/cmd/cluster-agent/subcommands/start/compliance.go similarity index 98% rename from cmd/cluster-agent/app/compliance.go rename to cmd/cluster-agent/subcommands/start/compliance.go index d47f1dec362a41..9a08aff29cb21b 100644 --- a/cmd/cluster-agent/app/compliance.go +++ b/cmd/cluster-agent/subcommands/start/compliance.go @@ -3,10 +3,10 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:build kubeapiserver -// +build kubeapiserver +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver -package app +package start import ( "context" diff --git a/cmd/cluster-agent/subcommands/status/command.go b/cmd/cluster-agent/subcommands/status/command.go new file mode 100644 index 00000000000000..38219abee6bdeb --- /dev/null +++ b/cmd/cluster-agent/subcommands/status/command.go @@ -0,0 +1,114 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package status implements 'cluster-agent status'. +package status + +import ( + "bytes" + "encoding/json" + "fmt" + "os" + + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" + "github.com/DataDog/datadog-agent/pkg/api/util" + pkgconfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/status" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "github.com/spf13/cobra" + "go.uber.org/fx" +) + +type cliParams struct { + jsonStatus bool + prettyPrintJSON bool + statusFilePath string +} + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cliParams := &cliParams{} + cmd := &cobra.Command{ + Use: "status", + Short: "Print the current status", + Long: ``, + RunE: func(cmd *cobra.Command, args []string) error { + return fxutil.OneShot(run, + fx.Supply(cliParams), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewClusterAgentParams(globalParams.ConfFilePath, config.WithConfigLoadSecrets(true)), + LogParams: log.LogForOneShot(command.LoggerName, command.DefaultLogLevel, true), + }), + core.Bundle, + ) + }, + } + + cmd.Flags().BoolVarP(&cliParams.jsonStatus, "json", "j", false, "print out raw json") + cmd.Flags().BoolVarP(&cliParams.prettyPrintJSON, "pretty-json", "p", false, "pretty print JSON") + cmd.Flags().StringVarP(&cliParams.statusFilePath, "file", "o", "", "Output the status command to a file") + + return []*cobra.Command{cmd} +} + +func run(log log.Component, config config.Component, cliParams *cliParams) error { + fmt.Printf("Getting the status from the agent.\n") + var e error + var s string + c := util.GetClient(false) // FIX: get certificates right then make this true + // TODO use https + urlstr := fmt.Sprintf("https://localhost:%v/status", pkgconfig.Datadog.GetInt("cluster_agent.cmd_port")) + + // Set session token + e = util.SetAuthToken() + if e != nil { + return e + } + + r, e := util.DoGet(c, urlstr, util.LeaveConnectionOpen) + if e != nil { + var errMap = make(map[string]string) + json.Unmarshal(r, &errMap) //nolint:errcheck + // If the error has been marshalled into a json object, check it and return it properly + if err, found := errMap["error"]; found { + e = fmt.Errorf(err) + } + + fmt.Printf(` + Could not reach agent: %v + Make sure the agent is running before requesting the status. + Contact support if you continue having issues.`, e) + return e + } + + // The rendering is done in the client so that the agent has less work to do + if cliParams.prettyPrintJSON { + var prettyJSON bytes.Buffer + json.Indent(&prettyJSON, r, "", " ") //nolint:errcheck + s = prettyJSON.String() + } else if cliParams.jsonStatus { + s = string(r) + } else { + formattedStatus, err := status.FormatDCAStatus(r) + if err != nil { + return err + } + s = formattedStatus + } + + if cliParams.statusFilePath != "" { + os.WriteFile(cliParams.statusFilePath, []byte(s), 0644) //nolint:errcheck + } else { + fmt.Println(s) + } + + return nil +} diff --git a/cmd/cluster-agent/subcommands/subcommands.go b/cmd/cluster-agent/subcommands/subcommands.go new file mode 100644 index 00000000000000..92956210d3439a --- /dev/null +++ b/cmd/cluster-agent/subcommands/subcommands.go @@ -0,0 +1,48 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +package subcommands + +import ( + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + cmdcheck "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/check" + cmdclusterchecks "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/clusterchecks" + cmdcompliance "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/compliance" + cmdconfig "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/config" + cmdconfigcheck "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/configcheck" + cmddiagnose "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/diagnose" + cmdflare "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/flare" + cmdhealth "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/health" + cmdmetamap "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/metamap" + cmdsecrethelper "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/secrethelper" + cmdstart "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/start" + cmdstatus "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/status" + cmdtelemetry "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/telemetry" + cmdversion "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/version" +) + +// ClusterAgentSubcommands returns SubcommandFactories for the subcommands +// supported with the current build flags. +func ClusterAgentSubcommands() []command.SubcommandFactory { + return []command.SubcommandFactory{ + cmdstart.Commands, + cmdversion.Commands, + cmdcheck.Commands, + cmdconfig.Commands, + cmdhealth.Commands, + cmdconfigcheck.Commands, + cmdclusterchecks.Commands, + cmdcompliance.Commands, + cmdflare.Commands, + cmddiagnose.Commands, + cmdmetamap.Commands, + cmdsecrethelper.Commands, + cmdtelemetry.Commands, + cmdstatus.Commands, + } +} diff --git a/cmd/cluster-agent/subcommands/telemetry/command.go b/cmd/cluster-agent/subcommands/telemetry/command.go new file mode 100644 index 00000000000000..fbf27e285b4a57 --- /dev/null +++ b/cmd/cluster-agent/subcommands/telemetry/command.go @@ -0,0 +1,37 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package telemetry implements 'cluster-agent telemetry'. +package telemetry + +import ( + "fmt" + + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/pkg/flare" + "github.com/spf13/cobra" +) + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cmd := &cobra.Command{ + Use: "telemetry", + Short: "Print the telemetry metrics exposed by the cluster agent", + Long: ``, + RunE: func(cmd *cobra.Command, args []string) error { + payload, err := flare.QueryDCAMetrics() + if err != nil { + return err + } + fmt.Print(string(payload)) + return nil + }, + } + + return []*cobra.Command{cmd} +} diff --git a/cmd/cluster-agent/subcommands/version/command.go b/cmd/cluster-agent/subcommands/version/command.go new file mode 100644 index 00000000000000..10fb87995956ab --- /dev/null +++ b/cmd/cluster-agent/subcommands/version/command.go @@ -0,0 +1,22 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package version implements 'cluster-agent version'. +package version + +import ( + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/pkg/cli/subcommands/version" + + "github.com/spf13/cobra" +) + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + return []*cobra.Command{version.MakeCommand("Cluster Agent")} +} diff --git a/cmd/dogstatsd/command/command.go b/cmd/dogstatsd/command/command.go new file mode 100644 index 00000000000000..8b2a6cb7d89af0 --- /dev/null +++ b/cmd/dogstatsd/command/command.go @@ -0,0 +1,42 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package command + +import ( + _ "expvar" + _ "net/http/pprof" + + "github.com/spf13/cobra" + + "github.com/DataDog/datadog-agent/cmd/dogstatsd/subcommands/start" + "github.com/DataDog/datadog-agent/pkg/cli/subcommands/version" + + // register all workloadmeta collectors + _ "github.com/DataDog/datadog-agent/pkg/workloadmeta/collectors" +) + +func MakeRootCommand(defaultLogFile string) *cobra.Command { + // dogstatsdCmd is the root command + dogstatsdCmd := &cobra.Command{ + Use: "dogstatsd [command]", + Short: "Datadog dogstatsd at your service.", + Long: ` +DogStatsD accepts custom application metrics points over UDP, and then +periodically aggregates and forwards them to Datadog, where they can be graphed +on dashboards. DogStatsD implements the StatsD protocol, along with a few +extensions for special Datadog features.`, + } + + for _, cmd := range makeCommands(defaultLogFile) { + dogstatsdCmd.AddCommand(cmd) + } + + return dogstatsdCmd +} + +func makeCommands(defaultLogFile string) []*cobra.Command { + return []*cobra.Command{start.MakeCommand(defaultLogFile), version.MakeCommand("DogStatsD")} +} diff --git a/pkg/process/config/config_darwin.go b/cmd/dogstatsd/generate.go similarity index 55% rename from pkg/process/config/config_darwin.go rename to cmd/dogstatsd/generate.go index 1063d68ff41be6..80979c2bb8f7ba 100644 --- a/pkg/process/config/config_darwin.go +++ b/cmd/dogstatsd/generate.go @@ -3,7 +3,6 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -package config +//go:generate go run ../../pkg/config/render_config.go dogstatsd ../../pkg/config/config_template.yaml ./dist/dogstatsd.yaml -// defaultSystemProbeAddress is the default unix socket path to be used for connecting to the system probe -const defaultSystemProbeAddress = "/opt/datadog-agent/run/sysprobe.sock" +package main diff --git a/cmd/dogstatsd/main_nix.go b/cmd/dogstatsd/main_nix.go index 0ac39b397146b3..ae6e195ac8e4e5 100644 --- a/cmd/dogstatsd/main_nix.go +++ b/cmd/dogstatsd/main_nix.go @@ -12,6 +12,7 @@ import ( _ "net/http/pprof" "os" + "github.com/DataDog/datadog-agent/cmd/dogstatsd/command" "github.com/DataDog/datadog-agent/pkg/util/flavor" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -21,7 +22,7 @@ const defaultLogFile = "/var/log/datadog/dogstatsd.log" func main() { flavor.SetFlavor(flavor.Dogstatsd) - if err := MakeRootCommand().Execute(); err != nil { + if err := command.MakeRootCommand(defaultLogFile).Execute(); err != nil { log.Error(err) os.Exit(-1) } diff --git a/cmd/dogstatsd/main_windows.go b/cmd/dogstatsd/main_windows.go index 4c2aee7910e7fe..6bc7c732a3fd64 100644 --- a/cmd/dogstatsd/main_windows.go +++ b/cmd/dogstatsd/main_windows.go @@ -13,6 +13,8 @@ import ( "path/filepath" "time" + "github.com/DataDog/datadog-agent/cmd/dogstatsd/command" + "github.com/DataDog/datadog-agent/cmd/dogstatsd/subcommands/start" "github.com/DataDog/datadog-agent/comp/core/config" pkgconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/util/flavor" @@ -62,7 +64,7 @@ func main() { } defer log.Flush() - if err = MakeRootCommand().Execute(); err != nil { + if err = command.MakeRootCommand(defaultLogFile).Execute(); err != nil { log.Error(err) os.Exit(-1) } @@ -78,17 +80,21 @@ func (m *myservice) Execute(args []string, r <-chan svc.ChangeRequest, changes c log.Infof("Service control function") ctx, cancel := context.WithCancel(context.Background()) - cliParams := &cliParams{} - err := runDogstatsdFct( + cliParams := &start.CLIParams{} + + err := start.RunDogstatsdFct( cliParams, DefaultConfPath, - func(config config.Component) error { return runAgent(ctx, cliParams, config) }) + defaultLogFile, + func(config config.Component, params *start.Params) error { + return start.RunAgent(ctx, cliParams, config, params) + }) if err != nil { log.Errorf("Failed to start agent %v", err) elog.Error(0xc0000008, err.Error()) errno = 1 // indicates non-successful return from handler. - stopAgent(cancel) + start.StopAgent(cancel) changes <- svc.Status{State: svc.Stopped} return } @@ -125,7 +131,7 @@ loop: elog.Info(0x40000006, ServiceName) log.Infof("Initiating service shutdown") changes <- svc.Status{State: svc.StopPending} - stopAgent(cancel) + start.StopAgent(cancel) changes <- svc.Status{State: svc.Stopped} return } diff --git a/cmd/dogstatsd/main.go b/cmd/dogstatsd/subcommands/start/command.go similarity index 74% rename from cmd/dogstatsd/main.go rename to cmd/dogstatsd/subcommands/start/command.go index ac0946c890cf7f..3e638c7305c850 100644 --- a/cmd/dogstatsd/main.go +++ b/cmd/dogstatsd/subcommands/start/command.go @@ -3,25 +3,16 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:generate go run ../../pkg/config/render_config.go dogstatsd ../../pkg/config/config_template.yaml ./dist/dogstatsd.yaml - -package main +package start import ( "context" - _ "expvar" "fmt" "net/http" - _ "net/http/pprof" "os" "os/signal" - "runtime" "syscall" - "github.com/spf13/cobra" - "go.uber.org/fx" - - "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/pkg/aggregator" "github.com/DataDog/datadog-agent/pkg/api/healthprobe" @@ -29,7 +20,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/dogstatsd" "github.com/DataDog/datadog-agent/pkg/forwarder" "github.com/DataDog/datadog-agent/pkg/metadata" - "github.com/DataDog/datadog-agent/pkg/serializer" "github.com/DataDog/datadog-agent/pkg/status/health" "github.com/DataDog/datadog-agent/pkg/tagger" "github.com/DataDog/datadog-agent/pkg/tagger/local" @@ -39,9 +29,8 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/version" "github.com/DataDog/datadog-agent/pkg/workloadmeta" - - // register all workloadmeta collectors - _ "github.com/DataDog/datadog-agent/pkg/workloadmeta/collectors" + "github.com/spf13/cobra" + "go.uber.org/fx" ) var ( @@ -50,7 +39,7 @@ var ( dogstatsdStats *http.Server ) -type cliParams struct { +type CLIParams struct { confPath string } @@ -59,80 +48,59 @@ const ( loggerName pkgconfig.LoggerName = "DSD" ) -func MakeRootCommand() *cobra.Command { - // dogstatsdCmd is the root command - dogstatsdCmd := &cobra.Command{ - Use: "dogstatsd [command]", - Short: "Datadog dogstatsd at your service.", - Long: ` -DogStatsD accepts custom application metrics points over UDP, and then -periodically aggregates and forwards them to Datadog, where they can be graphed -on dashboards. DogStatsD implements the StatsD protocol, along with a few -extensions for special Datadog features.`, - } - - for _, cmd := range makeCommands() { - dogstatsdCmd.AddCommand(cmd) - } - - return dogstatsdCmd -} - -func makeCommands() []*cobra.Command { - cliParams := &cliParams{} +// MakeCommand returns the start subcommand for the 'dogstatsd' command. +func MakeCommand(defaultLogFile string) *cobra.Command { + cliParams := &CLIParams{} startCmd := &cobra.Command{ Use: "start", Short: "Start DogStatsD", Long: `Runs DogStatsD in the foreground`, RunE: func(*cobra.Command, []string) error { - return runDogstatsdFct(cliParams, "", start) - }, - } - - versionCmd := &cobra.Command{ - Use: "version", - Short: "Print the version number", - Long: ``, - Run: func(cmd *cobra.Command, args []string) { - av, _ := version.Agent() - fmt.Println(fmt.Sprintf("DogStatsD from Agent %s - Codename: %s - Commit: %s - Serialization version: %s - Go version: %s", - av.GetNumber(), av.Meta, av.Commit, serializer.AgentPayloadVersion, runtime.Version())) + return RunDogstatsdFct(cliParams, "", defaultLogFile, start) }, } // local flags - startCmd.Flags().StringVarP(&cliParams.confPath, "cfgpath", "c", "", "path to folder containing dogstatsd.yaml") - pkgconfig.Datadog.BindPFlag("conf_path", startCmd.Flags().Lookup("cfgpath")) //nolint:errcheck + startCmd.PersistentFlags().StringVarP(&cliParams.confPath, "cfgpath", "c", "", "path to directory containing datadog.yaml") + var socketPath string startCmd.Flags().StringVarP(&socketPath, "socket", "s", "", "listen to this socket instead of UDP") pkgconfig.Datadog.BindPFlag("dogstatsd_socket", startCmd.Flags().Lookup("socket")) //nolint:errcheck - return []*cobra.Command{startCmd, versionCmd} + return startCmd } -func runDogstatsdFct(cliParams *cliParams, defaultConfPath string, fct interface{}) error { +type Params struct { + DefaultLogFile string +} + +func RunDogstatsdFct(cliParams *CLIParams, defaultConfPath string, defaultLogFile string, fct interface{}) error { + params := &Params{ + DefaultLogFile: defaultLogFile, + } return fxutil.OneShot(fct, fx.Supply(cliParams), - fx.Supply(core.CreateBundleParams( + fx.Supply(params), + fx.Supply(config.NewParams( defaultConfPath, - core.WithConfFilePath(cliParams.confPath), - core.WithConfigLoadSecrets(true), - core.WithConfigMissingOK(true), - core.WithConfigName("dogstatsd"), - )), - core.Bundle, + config.WithConfFilePath(cliParams.confPath), + config.WithConfigLoadSecrets(true), + config.WithConfigMissingOK(true), + config.WithConfigName("dogstatsd")), + ), + config.Module, ) } -func start(cliParams *cliParams, config config.Component) error { +func start(cliParams *CLIParams, config config.Component, params *Params) error { // Main context passed to components ctx, cancel := context.WithCancel(context.Background()) - defer stopAgent(cancel) + defer StopAgent(cancel) stopCh := make(chan struct{}) go handleSignals(stopCh) - err := runAgent(ctx, cliParams, config) + err := RunAgent(ctx, cliParams, config, params) if err != nil { return err } @@ -143,7 +111,7 @@ func start(cliParams *cliParams, config config.Component) error { return nil } -func runAgent(ctx context.Context, cliParams *cliParams, config config.Component) (err error) { +func RunAgent(ctx context.Context, cliParams *CLIParams, config config.Component, params *Params) (err error) { if len(cliParams.confPath) == 0 { log.Infof("Config will be read from env variables") } @@ -164,7 +132,7 @@ func runAgent(ctx context.Context, cliParams *cliParams, config config.Component syslogURI := pkgconfig.GetSyslogURI() logFile := config.GetString("log_file") if logFile == "" { - logFile = defaultLogFile + logFile = params.DefaultLogFile } if config.GetBool("disable_file_logging") { @@ -279,7 +247,7 @@ func handleSignals(stopCh chan struct{}) { } } -func stopAgent(cancel context.CancelFunc) { +func StopAgent(cancel context.CancelFunc) { // retrieve the agent health before stopping the components // GetReadyNonBlocking has a 100ms timeout to avoid blocking health, err := health.GetReadyNonBlocking() diff --git a/cmd/dogstatsd/main_test.go b/cmd/dogstatsd/subcommands/start/command_test.go similarity index 73% rename from cmd/dogstatsd/main_test.go rename to cmd/dogstatsd/subcommands/start/command_test.go index 6ca152568d3057..af6d7c60d5cb10 100644 --- a/cmd/dogstatsd/main_test.go +++ b/cmd/dogstatsd/subcommands/start/command_test.go @@ -3,22 +3,23 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -package main +package start import ( "testing" - "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "github.com/spf13/cobra" "github.com/stretchr/testify/require" ) func TestStartCommand(t *testing.T) { fxutil.TestOneShotSubcommand(t, - makeCommands(), + []*cobra.Command{MakeCommand("defaultLogFile")}, []string{"start", "--cfgpath", "PATH"}, start, - func(cliParams *cliParams, coreParams core.BundleParams) { + func(cliParams *CLIParams, _ config.Params) { require.Equal(t, "PATH", cliParams.confPath) }) } diff --git a/cmd/process-agent/collector.go b/cmd/process-agent/collector.go index 58e8b13f29e975..053495cad2fd64 100644 --- a/cmd/process-agent/collector.go +++ b/cmd/process-agent/collector.go @@ -7,31 +7,20 @@ package main import ( "fmt" - "hash/fnv" "math/rand" "net/http" - "os" - "strconv" "sync" "time" model "github.com/DataDog/agent-payload/v5/process" + sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" ddconfig "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/config/resolver" "github.com/DataDog/datadog-agent/pkg/forwarder" - "github.com/DataDog/datadog-agent/pkg/forwarder/transaction" - "github.com/DataDog/datadog-agent/pkg/orchestrator" + oconfig "github.com/DataDog/datadog-agent/pkg/orchestrator/config" "github.com/DataDog/datadog-agent/pkg/process/checks" - "github.com/DataDog/datadog-agent/pkg/process/config" - "github.com/DataDog/datadog-agent/pkg/process/statsd" "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/process/util/api" - apicfg "github.com/DataDog/datadog-agent/pkg/process/util/api/config" - "github.com/DataDog/datadog-agent/pkg/process/util/api/headers" - "github.com/DataDog/datadog-agent/pkg/util/kubernetes/clustername" "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/DataDog/datadog-agent/pkg/version" - "go.uber.org/atomic" ) @@ -65,7 +54,8 @@ type Collector struct { groupID *atomic.Int32 rtIntervalCh chan time.Duration - cfg *config.AgentConfig + + orchestrator *oconfig.OrchestratorConfig // counters for each type of check runCounters sync.Map @@ -74,87 +64,45 @@ type Collector struct { // Controls the real-time interval, can change live. realTimeInterval time.Duration - processResults *api.WeightedQueue - rtProcessResults *api.WeightedQueue - eventResults *api.WeightedQueue - - connectionsResults *api.WeightedQueue - - podResults *api.WeightedQueue - - forwarderRetryQueueMaxBytes int - // Enables running realtime checks runRealTime bool // Drop payloads from specified checks dropCheckPayloads []string - // Used to cache the hash result of the host name and the pid of the process agent. Being used as part of - // getRequestID method. Must use pointer, to distinguish between uninitialized value and the theoretical but yet - // possible 0 value for the hash result. - requestIDCachedHash *uint64 + // Submits check payloads to datadog + submitter Submitter } // NewCollector creates a new Collector -func NewCollector(cfg *config.AgentConfig, enabledChecks []checks.Check) (Collector, error) { - sysInfo, err := checks.CollectSystemInfo(cfg) - if err != nil { - return Collector{}, err +func NewCollector(syscfg *sysconfig.Config, hostInfo *checks.HostInfo, enabledChecks []checks.Check) (*Collector, error) { + runRealTime := !ddconfig.Datadog.GetBool("process_config.disable_realtime_checks") + + cfg := &checks.SysProbeConfig{} + if syscfg != nil && syscfg.Enabled { + cfg.MaxConnsPerMessage = syscfg.MaxConnsPerMessage + cfg.SystemProbeAddress = syscfg.SocketAddress } - runRealTime := !ddconfig.Datadog.GetBool("process_config.disable_realtime_checks") for _, c := range enabledChecks { - c.Init(cfg, sysInfo) + if err := c.Init(cfg, hostInfo); err != nil { + return nil, err + } } - return NewCollectorWithChecks(cfg, enabledChecks, runRealTime), nil + return NewCollectorWithChecks(enabledChecks, runRealTime) } // NewCollectorWithChecks creates a new Collector -func NewCollectorWithChecks(cfg *config.AgentConfig, checks []checks.Check, runRealTime bool) Collector { - queueSize := ddconfig.Datadog.GetInt("process_config.queue_size") - if queueSize <= 0 { - log.Warnf("Invalid check queue size: %d. Using default value: %d", queueSize, ddconfig.DefaultProcessQueueSize) - queueSize = ddconfig.DefaultProcessQueueSize +func NewCollectorWithChecks(checks []checks.Check, runRealTime bool) (*Collector, error) { + orchestrator := oconfig.NewDefaultOrchestratorConfig() + if err := orchestrator.Load(); err != nil { + return nil, err } - rtQueueSize := ddconfig.Datadog.GetInt("process_config.rt_queue_size") - if rtQueueSize <= 0 { - log.Warnf("Invalid rt check queue size: %d. Using default value: %d", rtQueueSize, ddconfig.DefaultProcessRTQueueSize) - rtQueueSize = ddconfig.DefaultProcessRTQueueSize - } - - queueBytes := ddconfig.Datadog.GetInt("process_config.process_queue_bytes") - if queueBytes <= 0 { - log.Warnf("Invalid queue bytes size: %d. Using default value: %d", queueBytes, ddconfig.DefaultProcessQueueBytes) - queueBytes = ddconfig.DefaultProcessQueueBytes - } - - processResults := api.NewWeightedQueue(queueSize, int64(queueBytes)) - log.Debugf("Creating process check queue with max_size=%d and max_weight=%d", processResults.MaxSize(), processResults.MaxWeight()) - - // reuse main queue's ProcessQueueBytes because it's unlikely that it'll reach to that size in bytes, so we don't need a separate config for it - rtProcessResults := api.NewWeightedQueue(rtQueueSize, int64(queueBytes)) - log.Debugf("Creating rt process check queue with max_size=%d and max_weight=%d", rtProcessResults.MaxSize(), rtProcessResults.MaxWeight()) - - connectionsResults := api.NewWeightedQueue(queueSize, int64(queueBytes)) - log.Debugf("Creating connections queue with max_size=%d and max_weight=%d", connectionsResults.MaxSize(), connectionsResults.MaxWeight()) - - podResults := api.NewWeightedQueue(queueSize, int64(cfg.Orchestrator.PodQueueBytes)) - log.Debugf("Creating pod check queue with max_size=%d and max_weight=%d", podResults.MaxSize(), podResults.MaxWeight()) - - eventResults := api.NewWeightedQueue(queueSize, int64(queueBytes)) - log.Debugf("Creating event check queue with max_size=%d and max_weight=%d", eventResults.MaxSize(), eventResults.MaxWeight()) - - dropCheckPayloads := ddconfig.Datadog.GetStringSlice("process_config.drop_check_payloads") - if len(dropCheckPayloads) > 0 { - log.Debugf("Dropping payloads from checks: %v", dropCheckPayloads) - } - - return Collector{ + return &Collector{ rtIntervalCh: make(chan time.Duration), - cfg: cfg, + orchestrator: orchestrator, groupID: atomic.NewInt32(rand.Int31()), enabledChecks: checks, @@ -162,71 +110,72 @@ func NewCollectorWithChecks(cfg *config.AgentConfig, checks []checks.Check, runR realTimeInterval: 2 * time.Second, realTimeEnabled: atomic.NewBool(false), - processResults: processResults, - rtProcessResults: rtProcessResults, - connectionsResults: connectionsResults, - podResults: podResults, - eventResults: eventResults, - - forwarderRetryQueueMaxBytes: queueBytes, - runRealTime: runRealTime, - - dropCheckPayloads: dropCheckPayloads, - } + }, nil } -func (l *Collector) runCheck(c checks.Check, results *api.WeightedQueue) { +func (l *Collector) runCheck(c checks.Check) { runCounter := l.nextRunCounter(c.Name()) start := time.Now() // update the last collected timestamp for info updateLastCollectTime(start) - messages, err := c.Run(l.cfg, l.nextGroupID()) + result, err := c.Run(l.nextGroupID, nil) if err != nil { log.Errorf("Unable to run check '%s': %s", c.Name(), err) return } + + if result == nil { + // Check returned nothing + return + } + if c.ShouldSaveLastRun() { - checks.StoreCheckOutput(c.Name(), messages) + checks.StoreCheckOutput(c.Name(), result.Payloads()) } else { checks.StoreCheckOutput(c.Name(), nil) } - if c.Name() == config.PodCheckName { - handlePodChecks(l, start, messages, results) - } else { - l.messagesToResultsQueue(start, c.Name(), messages, results) - } + l.submitter.Submit(start, c.Name(), result.Payloads()) - if !c.RealTime() { + if !c.Realtime() { logCheckDuration(c.Name(), start, runCounter) } } -func (l *Collector) runCheckWithRealTime(c checks.CheckWithRealTime, results, rtResults *api.WeightedQueue, options checks.RunOptions) { +func (l *Collector) runCheckWithRealTime(c checks.Check, options *checks.RunOptions) { start := time.Now() // update the last collected timestamp for info updateLastCollectTime(start) - run, err := c.RunWithOptions(l.cfg, l.nextGroupID, options) + result, err := c.Run(l.nextGroupID, options) if err != nil { log.Errorf("Unable to run check '%s': %s", c.Name(), err) return } - l.messagesToResultsQueue(start, c.Name(), run.Standard, results) + + if result == nil { + // Check returned nothing + return + } + + l.submitter.Submit(start, c.Name(), result.Payloads()) if options.RunStandard { // We are only updating the run counter for the standard check // since RT checks are too frequent and we only log standard check // durations runCounter := l.nextRunCounter(c.Name()) - checks.StoreCheckOutput(c.Name(), run.Standard) + checks.StoreCheckOutput(c.Name(), result.Payloads()) logCheckDuration(c.Name(), start, runCounter) } - l.messagesToResultsQueue(start, c.RealTimeName(), run.RealTime, rtResults) - if options.RunRealTime { - checks.StoreCheckOutput(c.RealTimeName(), run.RealTime) + rtName := checks.RTName(c.Name()) + rtPayloads := result.RealtimePayloads() + + l.submitter.Submit(start, rtName, rtPayloads) + if options.RunRealtime { + checks.StoreCheckOutput(rtName, rtPayloads) } } @@ -255,16 +204,6 @@ func (l *Collector) nextGroupID() int32 { return l.groupID.Inc() } -func (l *Collector) messagesToResultsQueue(start time.Time, name string, messages []model.MessageBody, queue *api.WeightedQueue) { - result := l.messagesToCheckResult(start, name, messages) - if result == nil { - return - } - queue.Add(result) - // update proc and container count for info - updateProcContainerCount(messages) -} - const ( secondsNumberOfBits = 22 hashNumberOfBits = 28 @@ -274,113 +213,12 @@ const ( chunkMask = 1< 0 { - if updateRTStatus { - l.updateRTStatus(statuses) - } - } - } +func (l *Collector) UpdateRTStatus(statuses []*model.CollectorStatus) { + // If realtime mode is disabled in the config, do not change the real time status. + if !l.runRealTime { + return } -} -func (l *Collector) updateRTStatus(statuses []*model.CollectorStatus) { curEnabled := l.realTimeEnabled.Load() // If any of the endpoints wants real-time we'll do that. @@ -745,34 +395,6 @@ func (l *Collector) updateRTStatus(statuses []*model.CollectorStatus) { } } -func (l *Collector) logQueuesSize() { - var ( - processSize = l.processResults.Len() - rtProcessSize = l.rtProcessResults.Len() - connectionsSize = l.connectionsResults.Len() - eventsSize = l.eventResults.Len() - podSize = l.podResults.Len() - ) - - if processSize == 0 && - rtProcessSize == 0 && - connectionsSize == 0 && - eventsSize == 0 && - podSize == 0 { - return - } - - log.Infof( - "Delivery queues: process[size=%d, weight=%d], rtprocess[size=%d, weight=%d], connections[size=%d, weight=%d], event[size=%d, weight=%d], pod[size=%d, weight=%d]", - processSize, l.processResults.Weight(), - rtProcessSize, l.rtProcessResults.Weight(), - connectionsSize, l.connectionsResults.Weight(), - eventsSize, l.eventResults.Weight(), - podSize, l.podResults.Weight(), - ) - -} - // getContainerCount returns the number of containers in the message body func getContainerCount(mb model.MessageBody) int { switch v := mb.(type) { @@ -833,19 +455,9 @@ func readResponseStatuses(checkName string, responses <-chan forwarder.Response) func ignoreResponseBody(checkName string) bool { switch checkName { - case checks.Pod.Name(), config.PodCheckManifestName, checks.ProcessEvents.Name(): + case checks.Pod.Name(), checks.PodCheckManifestName, checks.ProcessEvents.Name(): return true default: return false } } - -// Pod check returns a list of messages can be divided into two parts : pod payloads and manifest payloads -// By default we only send pod payloads containing pod metadata and pod manifests (yaml) -// Manifest payloads is a copy of pod manifests, we only send manifest payloads when feature flag is true -func handlePodChecks(l *Collector, start time.Time, messages []model.MessageBody, results *api.WeightedQueue) { - l.messagesToResultsQueue(start, config.PodCheckName, messages[:len(messages)/2], results) - if l.cfg.Orchestrator.IsManifestCollectionEnabled { - l.messagesToResultsQueue(start, config.PodCheckManifestName, messages[len(messages)/2:], results) - } -} diff --git a/cmd/process-agent/collector_api_test.go b/cmd/process-agent/collector_api_test.go index 02bb7cf31fb702..8b28514f98b64a 100644 --- a/cmd/process-agent/collector_api_test.go +++ b/cmd/process-agent/collector_api_test.go @@ -18,7 +18,6 @@ import ( "github.com/DataDog/agent-payload/v5/process" ddconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/process/checks" - "github.com/DataDog/datadog-agent/pkg/process/config" apicfg "github.com/DataDog/datadog-agent/pkg/process/util/api/config" "github.com/DataDog/datadog-agent/pkg/process/util/api/headers" "github.com/DataDog/datadog-agent/pkg/version" @@ -56,6 +55,19 @@ func setProcessEventsEndpointsForTest(config ddconfig.Config, eps ...apicfg.Endp config.Set("process_config.events_additional_endpoints", additionalEps) } +func setOrchestratorEndpointsForTest(config ddconfig.Config, eps ...apicfg.Endpoint) { + additionalEps := make(map[string][]string) + for i, ep := range eps { + if i == 0 { + config.Set("api_key", ep.APIKey) + config.Set("orchestrator_explorer.orchestrator_dd_url", ep.Endpoint) + } else { + additionalEps[ep.Endpoint.String()] = append(additionalEps[ep.Endpoint.String()], ep.APIKey) + } + } + config.Set("orchestrator_explorer.orchestrator_additional_endpoints", additionalEps) +} + func TestSendConnectionsMessage(t *testing.T) { m := &process.CollectorConnections{ HostName: testHostName, @@ -67,12 +79,12 @@ func TestSendConnectionsMessage(t *testing.T) { data: [][]process.MessageBody{{m}}, } - runCollectorTest(t, check, config.NewDefaultAgentConfig(), &endpointConfig{}, ddconfig.Mock(t), func(cfg *config.AgentConfig, ep *mockEndpoint) { + runCollectorTest(t, check, &endpointConfig{}, ddconfig.Mock(t), func(c *Collector, ep *mockEndpoint) { req := <-ep.Requests assert.Equal(t, "/api/v1/connections", req.uri) - assert.Equal(t, cfg.HostName, req.headers.Get(headers.HostHeader)) + assert.Equal(t, testHostName, req.headers.Get(headers.HostHeader)) apiEps, err := getAPIEndpoints() assert.NoError(t, err) assert.Equal(t, apiEps[0].APIKey, req.headers.Get("DD-Api-Key")) @@ -87,7 +99,7 @@ func TestSendConnectionsMessage(t *testing.T) { cc, ok := reqBody.Body.(*process.CollectorConnections) require.True(t, ok) - assert.Equal(t, cfg.HostName, cc.HostName) + assert.Equal(t, testHostName, cc.HostName) assert.Equal(t, int32(1), cc.GroupId) }) } @@ -106,12 +118,12 @@ func TestSendContainerMessage(t *testing.T) { data: [][]process.MessageBody{{m}}, } - runCollectorTest(t, check, config.NewDefaultAgentConfig(), &endpointConfig{}, ddconfig.Mock(t), func(cfg *config.AgentConfig, ep *mockEndpoint) { + runCollectorTest(t, check, &endpointConfig{}, ddconfig.Mock(t), func(c *Collector, ep *mockEndpoint) { req := <-ep.Requests assert.Equal(t, "/api/v1/container", req.uri) - assert.Equal(t, cfg.HostName, req.headers.Get(headers.HostHeader)) + assert.Equal(t, testHostName, req.headers.Get(headers.HostHeader)) eps, err := getAPIEndpoints() assert.NoError(t, err) assert.Equal(t, eps[0].APIKey, req.headers.Get("DD-Api-Key")) @@ -143,12 +155,12 @@ func TestSendProcMessage(t *testing.T) { data: [][]process.MessageBody{{m}}, } - runCollectorTest(t, check, config.NewDefaultAgentConfig(), &endpointConfig{}, ddconfig.Mock(t), func(cfg *config.AgentConfig, ep *mockEndpoint) { + runCollectorTest(t, check, &endpointConfig{}, ddconfig.Mock(t), func(c *Collector, ep *mockEndpoint) { req := <-ep.Requests assert.Equal(t, "/api/v1/collector", req.uri) - assert.Equal(t, cfg.HostName, req.headers.Get(headers.HostHeader)) + assert.Equal(t, testHostName, req.headers.Get(headers.HostHeader)) eps, err := getAPIEndpoints() assert.NoError(t, err) assert.Equal(t, eps[0].APIKey, req.headers.Get("DD-Api-Key")) @@ -183,12 +195,12 @@ func TestSendProcessDiscoveryMessage(t *testing.T) { data: [][]process.MessageBody{{m}}, } - runCollectorTest(t, check, config.NewDefaultAgentConfig(), &endpointConfig{}, ddconfig.Mock(t), func(cfg *config.AgentConfig, ep *mockEndpoint) { + runCollectorTest(t, check, &endpointConfig{}, ddconfig.Mock(t), func(c *Collector, ep *mockEndpoint) { req := <-ep.Requests assert.Equal(t, "/api/v1/discovery", req.uri) - assert.Equal(t, cfg.HostName, req.headers.Get(headers.HostHeader)) + assert.Equal(t, testHostName, req.headers.Get(headers.HostHeader)) eps, err := getAPIEndpoints() assert.NoError(t, err) assert.Equal(t, eps[0].APIKey, req.headers.Get("DD-Api-Key")) @@ -232,12 +244,12 @@ func TestSendProcessEventMessage(t *testing.T) { data: [][]process.MessageBody{{m}}, } - runCollectorTest(t, check, config.NewDefaultAgentConfig(), &endpointConfig{}, ddconfig.Mock(t), func(cfg *config.AgentConfig, ep *mockEndpoint) { + runCollectorTest(t, check, &endpointConfig{}, ddconfig.Mock(t), func(c *Collector, ep *mockEndpoint) { req := <-ep.Requests assert.Equal(t, "/api/v2/proclcycle", req.uri) - assert.Equal(t, cfg.HostName, req.headers.Get(headers.HostHeader)) + assert.Equal(t, testHostName, req.headers.Get(headers.HostHeader)) eps, err := getEventsAPIEndpoints() assert.NoError(t, err) assert.Equal(t, eps[0].APIKey, req.headers.Get("DD-Api-Key")) @@ -276,7 +288,7 @@ func TestSendProcMessageWithRetry(t *testing.T) { data: [][]process.MessageBody{{m}}, } - runCollectorTest(t, check, config.NewDefaultAgentConfig(), &endpointConfig{ErrorCount: 1}, ddconfig.Mock(t), func(cfg *config.AgentConfig, ep *mockEndpoint) { + runCollectorTest(t, check, &endpointConfig{ErrorCount: 1}, ddconfig.Mock(t), func(c *Collector, ep *mockEndpoint) { requests := []request{ <-ep.Requests, <-ep.Requests, @@ -284,7 +296,7 @@ func TestSendProcMessageWithRetry(t *testing.T) { timestamps := make(map[string]struct{}) for _, req := range requests { - assert.Equal(t, cfg.HostName, req.headers.Get(headers.HostHeader)) + assert.Equal(t, testHostName, req.headers.Get(headers.HostHeader)) eps, err := getAPIEndpoints() assert.NoError(t, err) assert.Equal(t, eps[0].APIKey, req.headers.Get("DD-Api-Key")) @@ -311,11 +323,11 @@ func TestRTProcMessageNotRetried(t *testing.T) { } check := &testCheck{ - name: checks.Process.RealTimeName(), + name: checks.RTProcessCheckName, data: [][]process.MessageBody{{m}}, } - runCollectorTest(t, check, config.NewDefaultAgentConfig(), &endpointConfig{ErrorCount: 1}, ddconfig.Mock(t), func(cfg *config.AgentConfig, ep *mockEndpoint) { + runCollectorTest(t, check, &endpointConfig{ErrorCount: 1}, ddconfig.Mock(t), func(c *Collector, ep *mockEndpoint) { req := <-ep.Requests reqBody, err := process.DecodeMessage(req.body) @@ -336,20 +348,33 @@ func TestRTProcMessageNotRetried(t *testing.T) { } func TestSendPodMessageSendManifestPayload(t *testing.T) { - clusterID, cfg, check := getPodCheckMessage(t) - cfg.Orchestrator.IsManifestCollectionEnabled = true + clusterID, check := getPodCheckMessage(t) - runCollectorTest(t, check, cfg, &endpointConfig{}, ddconfig.Mock(t), func(cfg *config.AgentConfig, ep *mockEndpoint) { - testPodMessageMetadata(t, clusterID, cfg, ep) - testPodMessageManifest(t, clusterID, cfg, ep) + ddconfig.SetDetectedFeatures(ddconfig.FeatureMap{ddconfig.Kubernetes: {}}) + defer ddconfig.SetDetectedFeatures(nil) + + ddcfg := ddconfig.Mock(t) + ddcfg.Set("orchestrator_explorer.enabled", true) + ddcfg.Set("orchestrator_explorer.manifest_collection.enabled", true) + + runCollectorTest(t, check, &endpointConfig{}, ddconfig.Mock(t), func(c *Collector, ep *mockEndpoint) { + testPodMessageMetadata(t, clusterID, c, ep) + testPodMessageManifest(t, clusterID, c, ep) }) } func TestSendPodMessageNotSendManifestPayload(t *testing.T) { - clusterID, cfg, check := getPodCheckMessage(t) + clusterID, check := getPodCheckMessage(t) + + ddconfig.SetDetectedFeatures(ddconfig.FeatureMap{ddconfig.Kubernetes: {}}) + defer ddconfig.SetDetectedFeatures(nil) - runCollectorTest(t, check, cfg, &endpointConfig{}, ddconfig.Mock(t), func(cfg *config.AgentConfig, ep *mockEndpoint) { - testPodMessageMetadata(t, clusterID, cfg, ep) + ddcfg := ddconfig.Mock(t) + ddcfg.Set("orchestrator_explorer.enabled", true) + + runCollectorTest(t, check, &endpointConfig{}, ddconfig.Mock(t), func(c *Collector, ep *mockEndpoint) { + + testPodMessageMetadata(t, clusterID, c, ep) select { case q := <-ep.Requests: t.Fatalf("should not have received manifest payload %+v", q) @@ -359,13 +384,10 @@ func TestSendPodMessageNotSendManifestPayload(t *testing.T) { }) } -func getPodCheckMessage(t *testing.T) (string, *config.AgentConfig, checks.Check) { +func getPodCheckMessage(t *testing.T) (string, checks.Check) { clusterID := "d801b2b1-4811-11ea-8618-121d4d0938a3" - cfg := config.NewDefaultAgentConfig() - cfg.Orchestrator.OrchestrationCollectionEnabled = true - t.Setenv("DD_ORCHESTRATOR_CLUSTER_ID", clusterID) pd := make([]process.MessageBody, 0, 2) @@ -382,16 +404,16 @@ func getPodCheckMessage(t *testing.T) (string, *config.AgentConfig, checks.Check name: checks.Pod.Name(), data: [][]process.MessageBody{pd}, } - return clusterID, cfg, check + return clusterID, check } -func testPodMessageMetadata(t *testing.T, clusterID string, cfg *config.AgentConfig, ep *mockEndpoint) { +func testPodMessageMetadata(t *testing.T, clusterID string, c *Collector, ep *mockEndpoint) { req := <-ep.Requests assert.Equal(t, "/api/v2/orch", req.uri) - assert.Equal(t, cfg.HostName, req.headers.Get(headers.HostHeader)) - assert.Equal(t, cfg.Orchestrator.OrchestratorEndpoints[0].APIKey, req.headers.Get("DD-Api-Key")) + assert.Equal(t, testHostName, req.headers.Get(headers.HostHeader)) + assert.Equal(t, c.orchestrator.OrchestratorEndpoints[0].APIKey, req.headers.Get("DD-Api-Key")) assert.Equal(t, "0", req.headers.Get(headers.ContainerCountHeader)) assert.Equal(t, "1", req.headers.Get("X-DD-Agent-Attempts")) assert.NotEmpty(t, req.headers.Get(headers.TimestampHeader)) @@ -403,15 +425,15 @@ func testPodMessageMetadata(t *testing.T, clusterID string, cfg *config.AgentCon require.True(t, ok) assert.Equal(t, clusterID, req.headers.Get(headers.ClusterIDHeader)) - assert.Equal(t, cfg.HostName, cp.HostName) + assert.Equal(t, testHostName, cp.HostName) } -func testPodMessageManifest(t *testing.T, clusterID string, cfg *config.AgentConfig, ep *mockEndpoint) { +func testPodMessageManifest(t *testing.T, clusterID string, c *Collector, ep *mockEndpoint) { req := <-ep.Requests assert.Equal(t, "/api/v2/orchmanif", req.uri) - assert.Equal(t, cfg.HostName, req.headers.Get(headers.HostHeader)) - assert.Equal(t, cfg.Orchestrator.OrchestratorEndpoints[0].APIKey, req.headers.Get("DD-Api-Key")) + assert.Equal(t, testHostName, req.headers.Get(headers.HostHeader)) + assert.Equal(t, c.orchestrator.OrchestratorEndpoints[0].APIKey, req.headers.Get("DD-Api-Key")) assert.Equal(t, "0", req.headers.Get(headers.ContainerCountHeader)) assert.Equal(t, "1", req.headers.Get("X-DD-Agent-Attempts")) assert.NotEmpty(t, req.headers.Get(headers.TimestampHeader)) @@ -432,15 +454,14 @@ func TestQueueSpaceNotAvailable(t *testing.T) { } check := &testCheck{ - name: checks.Process.RealTimeName(), + name: checks.RTProcessCheckName, data: [][]process.MessageBody{{m}}, } mockConfig := ddconfig.Mock(t) mockConfig.Set("process_config.process_queue_bytes", 1) - cfg := config.NewDefaultAgentConfig() - runCollectorTest(t, check, cfg, &endpointConfig{ErrorCount: 1}, mockConfig, func(cfg *config.AgentConfig, ep *mockEndpoint) { + runCollectorTest(t, check, &endpointConfig{ErrorCount: 1}, mockConfig, func(_ *Collector, ep *mockEndpoint) { select { case r := <-ep.Requests: t.Fatalf("should not have received a request: %+v", r) @@ -463,15 +484,14 @@ func TestQueueSpaceReleased(t *testing.T) { } check := &testCheck{ - name: checks.Process.RealTimeName(), + name: checks.RTProcessCheckName, data: [][]process.MessageBody{{m1}, {m2}}, } mockConfig := ddconfig.Mock(t) mockConfig.Set("process_config.process_queue_bytes", 50) // This should be enough for one message, but not both if the space isn't released - cfg := config.NewDefaultAgentConfig() - runCollectorTest(t, check, cfg, &endpointConfig{ErrorCount: 1}, ddconfig.Mock(t), func(cfg *config.AgentConfig, ep *mockEndpoint) { + runCollectorTest(t, check, &endpointConfig{ErrorCount: 1}, ddconfig.Mock(t), func(_ *Collector, ep *mockEndpoint) { req := <-ep.Requests reqBody, err := process.DecodeMessage(req.body) @@ -505,11 +525,9 @@ func TestMultipleAPIKeys(t *testing.T) { data: [][]process.MessageBody{{m}}, } - cfg := config.NewDefaultAgentConfig() apiKeys := []string{"apiKeyI", "apiKeyII", "apiKeyIII"} - orchKeys := []string{"orchKey"} - runCollectorTestWithAPIKeys(t, check, cfg, &endpointConfig{}, apiKeys, orchKeys, ddconfig.Mock(t), func(cfg *config.AgentConfig, ep *mockEndpoint) { + runCollectorTestWithAPIKeys(t, check, &endpointConfig{}, apiKeys, nil, ddconfig.Mock(t), func(_ *Collector, ep *mockEndpoint) { for _, expectedAPIKey := range apiKeys { request := <-ep.Requests assert.Equal(t, expectedAPIKey, request.headers.Get("DD-Api-Key")) @@ -517,11 +535,11 @@ func TestMultipleAPIKeys(t *testing.T) { }) } -func runCollectorTest(t *testing.T, check checks.Check, cfg *config.AgentConfig, epConfig *endpointConfig, mockConfig ddconfig.Config, tc func(cfg *config.AgentConfig, ep *mockEndpoint)) { - runCollectorTestWithAPIKeys(t, check, cfg, epConfig, []string{"apiKey"}, []string{"orchestratorApiKey"}, mockConfig, tc) +func runCollectorTest(t *testing.T, check checks.Check, epConfig *endpointConfig, mockConfig ddconfig.Config, tc func(c *Collector, ep *mockEndpoint)) { + runCollectorTestWithAPIKeys(t, check, epConfig, []string{"apiKey"}, []string{"orchestratorApiKey"}, mockConfig, tc) } -func runCollectorTestWithAPIKeys(t *testing.T, check checks.Check, cfg *config.AgentConfig, epConfig *endpointConfig, apiKeys, orchAPIKeys []string, mockConfig ddconfig.Config, tc func(cfg *config.AgentConfig, ep *mockEndpoint)) { +func runCollectorTestWithAPIKeys(t *testing.T, check checks.Check, epConfig *endpointConfig, apiKeys, orchAPIKeys []string, mockConfig ddconfig.Config, tc func(c *Collector, ep *mockEndpoint)) { ep := newMockEndpoint(t, epConfig) collectorAddr, eventsAddr, orchestratorAddr := ep.start() defer ep.stop() @@ -538,17 +556,24 @@ func runCollectorTestWithAPIKeys(t *testing.T, check checks.Check, cfg *config.A } setProcessEventsEndpointsForTest(mockConfig, eventsEps...) - cfg.Orchestrator.OrchestratorEndpoints = make([]apicfg.Endpoint, len(orchAPIKeys)) - for index, key := range orchAPIKeys { - cfg.Orchestrator.OrchestratorEndpoints[index] = apicfg.Endpoint{APIKey: key, Endpoint: orchestratorAddr} + orchestratorEndpoints := make([]apicfg.Endpoint, 0, len(orchAPIKeys)) + for _, key := range orchAPIKeys { + orchestratorEndpoints = append(orchestratorEndpoints, apicfg.Endpoint{APIKey: key, Endpoint: orchestratorAddr}) } - - cfg.HostName = testHostName - cfg.CheckIntervals[check.Name()] = 500 * time.Millisecond + setOrchestratorEndpointsForTest(mockConfig, orchestratorEndpoints...) exit := make(chan struct{}) - c := NewCollectorWithChecks(cfg, []checks.Check{check}, true) + hostInfo := &checks.HostInfo{ + HostName: testHostName, + } + c, err := NewCollectorWithChecks([]checks.Check{check}, true) + check.Init(nil, hostInfo) + + assert.NoError(t, err) + s, err := NewSubmitter(hostInfo.HostName, c.UpdateRTStatus) + require.NoError(t, err) + c.submitter = s var wg sync.WaitGroup wg.Add(1) @@ -558,7 +583,7 @@ func runCollectorTestWithAPIKeys(t *testing.T, check checks.Check, cfg *config.A require.NoError(t, err) }() - tc(cfg, ep) + tc(c, ep) close(exit) wg.Wait() @@ -569,14 +594,23 @@ type testCheck struct { data [][]process.MessageBody } -func (t *testCheck) Init(_ *config.AgentConfig, _ *process.SystemInfo) { +func (t *testCheck) Init(_ *checks.SysProbeConfig, _ *checks.HostInfo) error { + return nil } func (t *testCheck) Name() string { return t.name } -func (t *testCheck) RealTime() bool { +func (t *testCheck) IsEnabled() bool { + return true +} + +func (t *testCheck) SupportsRunOptions() bool { + return false +} + +func (t *testCheck) Realtime() bool { return false } @@ -584,13 +618,13 @@ func (t *testCheck) ShouldSaveLastRun() bool { return false } -func (t *testCheck) Run(_ *config.AgentConfig, _ int32) ([]process.MessageBody, error) { +func (t *testCheck) Run(_ func() int32, _ *checks.RunOptions) (checks.RunResult, error) { if len(t.data) > 0 { - result := t.data[0] + result := checks.StandardRunResult(t.data[0]) t.data = t.data[1:] return result, nil } - return nil, nil + return checks.StandardRunResult{}, nil } func (t *testCheck) Cleanup() {} diff --git a/cmd/process-agent/collector_test.go b/cmd/process-agent/collector_test.go index 449c41563b7b5b..ee3de764283021 100644 --- a/cmd/process-agent/collector_test.go +++ b/cmd/process-agent/collector_test.go @@ -6,30 +6,25 @@ package main import ( - "strconv" "testing" "time" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" model "github.com/DataDog/agent-payload/v5/process" + processmocks "github.com/DataDog/datadog-agent/cmd/process-agent/mocks" sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" ddconfig "github.com/DataDog/datadog-agent/pkg/config" - oconfig "github.com/DataDog/datadog-agent/pkg/orchestrator/config" "github.com/DataDog/datadog-agent/pkg/process/checks" - "github.com/DataDog/datadog-agent/pkg/process/checks/mocks" - "github.com/DataDog/datadog-agent/pkg/process/config" - "github.com/DataDog/datadog-agent/pkg/process/util/api" - "github.com/DataDog/datadog-agent/pkg/process/util/api/headers" - "github.com/DataDog/datadog-agent/pkg/version" + checkmocks "github.com/DataDog/datadog-agent/pkg/process/checks/mocks" ) func TestUpdateRTStatus(t *testing.T) { assert := assert.New(t) - cfg := config.NewDefaultAgentConfig() - c, err := NewCollector(cfg, []checks.Check{checks.Process}) + c, err := NewCollector(nil, &checks.HostInfo{}, []checks.Check{checks.Process}) assert.NoError(err) // XXX: Give the collector a big channel so it never blocks. c.rtIntervalCh = make(chan time.Duration, 1000) @@ -40,7 +35,7 @@ func TestUpdateRTStatus(t *testing.T) { {ActiveClients: 3, Interval: 2}, {ActiveClients: 0, Interval: 2}, } - c.updateRTStatus(statuses) + c.UpdateRTStatus(statuses) assert.True(c.realTimeEnabled.Load()) // Validate that we stay that way @@ -49,7 +44,7 @@ func TestUpdateRTStatus(t *testing.T) { {ActiveClients: 3, Interval: 2}, {ActiveClients: 0, Interval: 2}, } - c.updateRTStatus(statuses) + c.UpdateRTStatus(statuses) assert.True(c.realTimeEnabled.Load()) // And that it can turn back off @@ -58,14 +53,13 @@ func TestUpdateRTStatus(t *testing.T) { {ActiveClients: 0, Interval: 2}, {ActiveClients: 0, Interval: 2}, } - c.updateRTStatus(statuses) + c.UpdateRTStatus(statuses) assert.False(c.realTimeEnabled.Load()) } func TestUpdateRTInterval(t *testing.T) { assert := assert.New(t) - cfg := config.NewDefaultAgentConfig() - c, err := NewCollector(cfg, []checks.Check{checks.Process}) + c, err := NewCollector(nil, &checks.HostInfo{}, []checks.Check{checks.Process}) assert.NoError(err) // XXX: Give the collector a big channel so it never blocks. c.rtIntervalCh = make(chan time.Duration, 1000) @@ -76,7 +70,7 @@ func TestUpdateRTInterval(t *testing.T) { {ActiveClients: 3, Interval: 2}, {ActiveClients: 0, Interval: 10}, } - c.updateRTStatus(statuses) + c.UpdateRTStatus(statuses) assert.True(c.realTimeEnabled.Load()) assert.Equal(10*time.Second, c.realTimeInterval) } @@ -129,7 +123,6 @@ func TestDisableRealTime(t *testing.T) { } assert := assert.New(t) - cfg := config.NewDefaultAgentConfig() for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { @@ -137,10 +130,10 @@ func TestDisableRealTime(t *testing.T) { mockConfig.Set("process_config.disable_realtime_checks", tc.disableRealtime) mockConfig.Set("process_config.process_discovery.enabled", false) // Not an RT check so we don't care - enabledChecks := getChecks(&sysconfig.Config{}, &oconfig.OrchestratorConfig{}, true) + enabledChecks := getChecks(&sysconfig.Config{}, true) assert.EqualValues(tc.expectedChecks, enabledChecks) - c, err := NewCollector(cfg, enabledChecks) + c, err := NewCollector(nil, &checks.HostInfo{}, enabledChecks) assert.NoError(err) assert.Equal(!tc.disableRealtime, c.runRealTime) assert.ElementsMatch(tc.expectedChecks, c.enabledChecks) @@ -164,7 +157,6 @@ func TestDisableRealTimeProcessCheck(t *testing.T) { } assert := assert.New(t) - cfg := config.NewDefaultAgentConfig() expectedChecks := []checks.Check{checks.Process} for _, tc := range tests { @@ -172,7 +164,7 @@ func TestDisableRealTimeProcessCheck(t *testing.T) { mockConfig := ddconfig.Mock(t) mockConfig.Set("process_config.disable_realtime_checks", tc.disableRealtime) - c, err := NewCollector(cfg, expectedChecks) + c, err := NewCollector(nil, &checks.HostInfo{}, expectedChecks) assert.NoError(err) assert.Equal(!tc.disableRealtime, c.runRealTime) assert.EqualValues(expectedChecks, c.enabledChecks) @@ -180,173 +172,20 @@ func TestDisableRealTimeProcessCheck(t *testing.T) { } } -func TestNewCollectorQueueSize(t *testing.T) { - tests := []struct { - name string - override bool - queueSize int - expectedQueueSize int - }{ - { - name: "default queue size", - override: false, - queueSize: 42, - expectedQueueSize: ddconfig.DefaultProcessQueueSize, - }, - { - name: "valid queue size override", - override: true, - queueSize: 42, - expectedQueueSize: 42, - }, - { - name: "invalid negative queue size override", - override: true, - queueSize: -10, - expectedQueueSize: ddconfig.DefaultProcessQueueSize, - }, - { - name: "invalid 0 queue size override", - override: true, - queueSize: 0, - expectedQueueSize: ddconfig.DefaultProcessQueueSize, - }, - } - - assert := assert.New(t) - cfg := config.NewDefaultAgentConfig() - - for _, tc := range tests { - t.Run(tc.name, func(t *testing.T) { - mockConfig := ddconfig.Mock(t) - if tc.override { - mockConfig.Set("process_config.queue_size", tc.queueSize) - } - - c, err := NewCollector(cfg, []checks.Check{checks.Process, checks.Pod}) - assert.NoError(err) - assert.Equal(tc.expectedQueueSize, c.processResults.MaxSize()) - assert.Equal(tc.expectedQueueSize, c.podResults.MaxSize()) - }) - } -} - -func TestNewCollectorRTQueueSize(t *testing.T) { - tests := []struct { - name string - override bool - queueSize int - expectedQueueSize int - }{ - { - name: "default queue size", - override: false, - queueSize: 2, - expectedQueueSize: ddconfig.DefaultProcessRTQueueSize, - }, - { - name: "valid queue size override", - override: true, - queueSize: 2, - expectedQueueSize: 2, - }, - { - name: "invalid negative size override", - override: true, - queueSize: -2, - expectedQueueSize: ddconfig.DefaultProcessRTQueueSize, - }, - { - name: "invalid 0 queue size override", - override: true, - queueSize: 0, - expectedQueueSize: ddconfig.DefaultProcessRTQueueSize, - }, - } - - assert := assert.New(t) - cfg := config.NewDefaultAgentConfig() - - for _, tc := range tests { - t.Run(tc.name, func(t *testing.T) { - mockConfig := ddconfig.Mock(t) - if tc.override { - mockConfig.Set("process_config.rt_queue_size", tc.queueSize) - } - - c, err := NewCollector(cfg, []checks.Check{checks.Process}) - assert.NoError(err) - assert.Equal(tc.expectedQueueSize, c.rtProcessResults.MaxSize()) - }) - } -} - -func TestNewCollectorProcessQueueBytes(t *testing.T) { - tests := []struct { - name string - override bool - queueBytes int - expectedQueueSize int - }{ - { - name: "default queue size", - override: false, - queueBytes: 42000, - expectedQueueSize: ddconfig.DefaultProcessQueueBytes, - }, - { - name: "valid queue size override", - override: true, - queueBytes: 42000, - expectedQueueSize: 42000, - }, - { - name: "invalid negative queue size override", - override: true, - queueBytes: -2, - expectedQueueSize: ddconfig.DefaultProcessQueueBytes, - }, - { - name: "invalid 0 queue size override", - override: true, - queueBytes: 0, - expectedQueueSize: ddconfig.DefaultProcessQueueBytes, - }, - } - - assert := assert.New(t) - cfg := config.NewDefaultAgentConfig() - - for _, tc := range tests { - t.Run(tc.name, func(t *testing.T) { - mockConfig := ddconfig.Mock(t) - if tc.override { - mockConfig.Set("process_config.process_queue_bytes", tc.queueBytes) - } - - c, err := NewCollector(cfg, []checks.Check{checks.Process}) - assert.NoError(err) - assert.Equal(int64(tc.expectedQueueSize), c.processResults.MaxWeight()) - assert.Equal(int64(tc.expectedQueueSize), c.rtProcessResults.MaxWeight()) - assert.Equal(tc.expectedQueueSize, c.forwarderRetryQueueMaxBytes) - }) - } -} - func TestIgnoreResponseBody(t *testing.T) { for _, tc := range []struct { checkName string ignore bool }{ - {checkName: checks.Process.Name(), ignore: false}, - {checkName: checks.Process.RealTimeName(), ignore: false}, + {checkName: checks.ProcessCheckName, ignore: false}, + {checkName: checks.RTProcessCheckName, ignore: false}, {checkName: checks.ProcessDiscovery.Name(), ignore: false}, - {checkName: checks.Container.Name(), ignore: false}, - {checkName: checks.RTContainer.Name(), ignore: false}, - {checkName: checks.Pod.Name(), ignore: true}, - {checkName: config.PodCheckManifestName, ignore: true}, - {checkName: checks.Connections.Name(), ignore: false}, - {checkName: checks.ProcessEvents.Name(), ignore: true}, + {checkName: checks.ContainerCheckName, ignore: false}, + {checkName: checks.RTContainerCheckName, ignore: false}, + {checkName: checks.PodCheckName, ignore: true}, + {checkName: checks.PodCheckManifestName, ignore: true}, + {checkName: checks.ConnectionsCheckName, ignore: false}, + {checkName: checks.ProcessEventsCheckName, ignore: true}, } { t.Run(tc.checkName, func(t *testing.T) { assert.Equal(t, tc.ignore, ignoreResponseBody(tc.checkName)) @@ -355,247 +194,65 @@ func TestIgnoreResponseBody(t *testing.T) { } func TestCollectorRunCheckWithRealTime(t *testing.T) { - cfg := config.NewDefaultAgentConfig() - check := mocks.NewCheckWithRealTime(t) + check := checkmocks.NewCheck(t) - c, err := NewCollector(cfg, []checks.Check{}) + c, err := NewCollector(nil, &checks.HostInfo{}, []checks.Check{}) assert.NoError(t, err) + submitter := processmocks.NewSubmitter(t) + c.submitter = submitter - results := api.NewWeightedQueue(1, 1024) - rtResults := api.NewWeightedQueue(1, 1024) - - standardOption := checks.RunOptions{ + standardOption := &checks.RunOptions{ RunStandard: true, } - result := &checks.RunResult{ - Standard: []model.MessageBody{ + result := checks.StandardRunResult( + []model.MessageBody{ &model.CollectorProc{}, }, - } + ) - check.On("RunWithOptions", mock.Anything, mock.Anything, standardOption).Once().Return(result, nil) + check.On("Run", mock.Anything, standardOption).Once().Return(result, nil) check.On("Name").Return("foo") - check.On("RealTimeName").Return("bar") - - c.runCheckWithRealTime( - check, - results, - rtResults, - standardOption, - ) - assert.Equal(t, results.Len(), 1) - item, ok := results.Poll() - assert.True(t, ok) - assert.Equal(t, item.Type(), "foo") + submitStandard := submitter.On("Submit", mock.Anything, check.Name(), mock.Anything).Return(nil) + submitter.On("Submit", mock.Anything, checks.RTName(check.Name()), mock.Anything).Return(nil).NotBefore(submitStandard) - assert.Equal(t, rtResults.Len(), 0) + c.runCheckWithRealTime(check, standardOption) - rtResult := &checks.RunResult{ - RealTime: []model.MessageBody{ + rtResult := checks.CombinedRunResult{ + Realtime: []model.MessageBody{ &model.CollectorProc{}, }, } - rtOption := checks.RunOptions{ - RunRealTime: true, + rtOption := &checks.RunOptions{ + RunRealtime: true, } - check.On("RunWithOptions", mock.Anything, mock.Anything, rtOption).Once().Return(rtResult, nil) + check.On("Run", mock.Anything, rtOption).Once().Return(rtResult, nil) - c.runCheckWithRealTime( - check, - results, - rtResults, - rtOption, - ) - - assert.Equal(t, results.Len(), 0) - assert.Equal(t, rtResults.Len(), 1) - item, ok = rtResults.Poll() - assert.True(t, ok) - assert.Equal(t, item.Type(), "bar") + c.runCheckWithRealTime(check, rtOption) } func TestCollectorRunCheck(t *testing.T) { - cfg := config.NewDefaultAgentConfig() - check := mocks.NewCheck(t) + check := checkmocks.NewCheck(t) - c, err := NewCollector(cfg, []checks.Check{}) - assert.NoError(t, err) + hostInfo := &checks.HostInfo{HostName: testHostName} - results := api.NewWeightedQueue(1, 1024) + c, err := NewCollector(nil, hostInfo, []checks.Check{}) + require.NoError(t, err) + submitter := processmocks.NewSubmitter(t) + require.NoError(t, err) + c.submitter = submitter - result := []model.MessageBody{ + result := checks.StandardRunResult([]model.MessageBody{ &model.CollectorProc{}, - } - + }) check.On("Run", mock.Anything, mock.Anything).Return(result, nil) check.On("Name").Return("foo") - check.On("RealTime").Return(false) + check.On("Realtime").Return(false) check.On("ShouldSaveLastRun").Return(true) + submitter.On("Submit", mock.Anything, check.Name(), mock.Anything).Return(nil) - c.runCheck( - check, - results, - ) - - assert.Equal(t, results.Len(), 1) - item, ok := results.Poll() - assert.True(t, ok) - assert.Equal(t, item.Type(), "foo") -} - -func TestCollectorMessagesToCheckResult(t *testing.T) { - cfg := config.NewDefaultAgentConfig() - cfg.HostName = "host" - - c, err := NewCollector(cfg, []checks.Check{}) - assert.NoError(t, err) - - now := time.Now() - agentVersion, _ := version.Agent() - - requestID := c.getRequestID(now, 0) - - tests := []struct { - name string - message model.MessageBody - expectHeaders map[string]string - }{ - { - name: "process", - message: &model.CollectorProc{ - Containers: []*model.Container{ - {}, {}, {}, - }, - }, - expectHeaders: map[string]string{ - headers.TimestampHeader: strconv.Itoa(int(now.Unix())), - headers.HostHeader: "host", - headers.ProcessVersionHeader: agentVersion.GetNumber(), - headers.ContainerCountHeader: "3", - headers.ContentTypeHeader: headers.ProtobufContentType, - headers.RequestIDHeader: requestID, - }, - }, - { - name: "rt_process", - message: &model.CollectorRealTime{ - ContainerStats: []*model.ContainerStat{ - {}, {}, {}, - }, - }, - expectHeaders: map[string]string{ - headers.TimestampHeader: strconv.Itoa(int(now.Unix())), - headers.HostHeader: "host", - headers.ProcessVersionHeader: agentVersion.GetNumber(), - headers.ContainerCountHeader: "3", - headers.ContentTypeHeader: headers.ProtobufContentType, - }, - }, - { - name: "container", - message: &model.CollectorContainer{ - Containers: []*model.Container{ - {}, {}, - }, - }, - expectHeaders: map[string]string{ - headers.TimestampHeader: strconv.Itoa(int(now.Unix())), - headers.HostHeader: "host", - headers.ProcessVersionHeader: agentVersion.GetNumber(), - headers.ContainerCountHeader: "2", - headers.ContentTypeHeader: headers.ProtobufContentType, - }, - }, - { - name: "rt_container", - message: &model.CollectorContainerRealTime{ - Stats: []*model.ContainerStat{ - {}, {}, {}, {}, {}, - }, - }, - expectHeaders: map[string]string{ - headers.TimestampHeader: strconv.Itoa(int(now.Unix())), - headers.HostHeader: "host", - headers.ProcessVersionHeader: agentVersion.GetNumber(), - headers.ContainerCountHeader: "5", - headers.ContentTypeHeader: headers.ProtobufContentType, - }, - }, - { - name: "process_discovery", - message: &model.CollectorProcDiscovery{}, - expectHeaders: map[string]string{ - headers.TimestampHeader: strconv.Itoa(int(now.Unix())), - headers.HostHeader: "host", - headers.ProcessVersionHeader: agentVersion.GetNumber(), - headers.ContainerCountHeader: "0", - headers.ContentTypeHeader: headers.ProtobufContentType, - }, - }, - { - name: "process_events", - message: &model.CollectorProcEvent{}, - expectHeaders: map[string]string{ - headers.TimestampHeader: strconv.Itoa(int(now.Unix())), - headers.HostHeader: "host", - headers.ProcessVersionHeader: agentVersion.GetNumber(), - headers.ContainerCountHeader: "0", - headers.ContentTypeHeader: headers.ProtobufContentType, - headers.EVPOriginHeader: "process-agent", - headers.EVPOriginVersionHeader: version.AgentVersion, - }, - }, - } - - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - messages := []model.MessageBody{ - test.message, - } - result := c.messagesToCheckResult(now, test.name, messages) - assert.Equal(t, test.name, result.name) - assert.Len(t, result.payloads, 1) - payload := result.payloads[0] - assert.Len(t, payload.headers, len(test.expectHeaders)) - for k, v := range test.expectHeaders { - assert.Equal(t, v, payload.headers.Get(k)) - } - }) - } -} - -func Test_getRequestID(t *testing.T) { - cfg := config.NewDefaultAgentConfig() - cfg.HostName = "host" - - c, err := NewCollector(cfg, []checks.Check{}) - assert.NoError(t, err) - - fixedDate1 := time.Date(2022, 9, 1, 0, 0, 1, 0, time.Local) - id1 := c.getRequestID(fixedDate1, 1) - id2 := c.getRequestID(fixedDate1, 1) - // The calculation should be deterministic, so making sure the parameters generates the same id. - assert.Equal(t, id1, id2) - fixedDate2 := time.Date(2022, 9, 1, 0, 0, 2, 0, time.Local) - id3 := c.getRequestID(fixedDate2, 1) - - // The request id is based on time, so if the difference it only the time, then the new ID should be greater. - id1Num, _ := strconv.ParseUint(id1, 10, 64) - id3Num, _ := strconv.ParseUint(id3, 10, 64) - assert.Greater(t, id3Num, id1Num) - - // Increasing the chunk index should increase the id. - id4 := c.getRequestID(fixedDate2, 3) - id4Num, _ := strconv.ParseUint(id4, 10, 64) - assert.Equal(t, id3Num+2, id4Num) - - // Changing the host -> changing the hash. - cfg.HostName = "host2" - c.requestIDCachedHash = nil - id5 := c.getRequestID(fixedDate1, 1) - assert.NotEqual(t, id1, id5) + c.runCheck(check) } diff --git a/cmd/process-agent/command/command.go b/cmd/process-agent/command/command.go index b71ed8d6e90e21..4ea48ca9d053a0 100644 --- a/cmd/process-agent/command/command.go +++ b/cmd/process-agent/command/command.go @@ -7,12 +7,17 @@ package command import ( + "os" + "path/filepath" + "strings" + "github.com/fatih/color" "github.com/spf13/cobra" "github.com/DataDog/datadog-agent/cmd/process-agent/flags" "github.com/DataDog/datadog-agent/pkg/config" - pconfig "github.com/DataDog/datadog-agent/pkg/process/config" + "github.com/DataDog/datadog-agent/pkg/process/util" + "github.com/DataDog/datadog-agent/pkg/util/log" ) const LoggerName config.LoggerName = "PROCESS" @@ -106,18 +111,82 @@ func MakeCommand(subcommandFactories []SubcommandFactory, winParams bool, rootCm } // BootstrapConfig is a helper for process-agent config initialization (until we further refactor to use components) -func BootstrapConfig(globalParams *GlobalParams) error { - if err := pconfig.LoadConfigIfExists(globalParams.ConfFilePath); err != nil { +func BootstrapConfig(path string, oneshotCommand bool) error { + setHostMountEnv() + + if err := loadConfigIfExists(path); err != nil { return err } + // Resolve any secrets + if err := config.ResolveSecrets(config.Datadog, filepath.Base(path)); err != nil { + return err + } + + var ( + logFile string + syslogURI string + syslogRFC = false + logToConsole = true + logAsJSON = false + ) + + if !oneshotCommand { + syslogURI = config.GetSyslogURI() + syslogRFC = config.Datadog.GetBool("syslog_rfc") + logToConsole = config.Datadog.GetBool("log_to_console") + logAsJSON = config.Datadog.GetBool("log_format_json") + + if !config.Datadog.GetBool("disable_file_logging") { + logFile = config.Datadog.GetString("process_config.log_file") + } + } + return config.SetupLogger( LoggerName, config.Datadog.GetString("log_level"), - "", - "", - false, - true, - false, + logFile, + syslogURI, + syslogRFC, + logToConsole, + logAsJSON, ) } + +// setHostMountEnv sets HOST_PROC and HOST_SYS mounts if applicable in containerized environments +func setHostMountEnv() { + // Set default values for proc/sys paths if unset. + // Don't set this is /host is not mounted to use context within container. + // Generally only applicable for container-only cases like Fargate. + if !config.IsContainerized() || !util.PathExists("/host") { + return + } + + if v := os.Getenv("HOST_PROC"); v == "" { + os.Setenv("HOST_PROC", "/host/proc") + } + if v := os.Getenv("HOST_SYS"); v == "" { + os.Setenv("HOST_SYS", "/host/sys") + } +} + +// loadConfigIfExists takes a path to either a directory containing datadog.yaml or a direct path to a datadog.yaml file +// and loads it into ddconfig.Datadog. It does this silently, and does not produce any logs. +func loadConfigIfExists(path string) error { + if path == "" { + return nil + } + + if !util.PathExists(path) { + log.Infof("No config exists at %s, ignoring...", path) + return nil + } + + config.Datadog.AddConfigPath(path) + if strings.HasSuffix(path, ".yaml") { // If they set a config file directly, let's try to honor that + config.Datadog.SetConfigFile(path) + } + + _, err := config.LoadWithoutSecret() + return err +} diff --git a/cmd/process-agent/config.go b/cmd/process-agent/config.go index 59db737d28bb13..a4214bb8a1d44d 100644 --- a/cmd/process-agent/config.go +++ b/cmd/process-agent/config.go @@ -17,7 +17,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/log" ) -func getChecks(sysCfg *sysconfig.Config, oCfg *oconfig.OrchestratorConfig, canAccessContainers bool) (checkCfg []checks.Check) { +func getChecks(sysCfg *sysconfig.Config, canAccessContainers bool) (checkCfg []checks.Check) { rtChecksEnabled := !ddconfig.Datadog.GetBool("process_config.disable_realtime_checks") if ddconfig.Datadog.GetBool("process_config.process_collection.enabled") { checkCfg = append(checkCfg, checks.Process) @@ -44,13 +44,8 @@ func getChecks(sysCfg *sysconfig.Config, oCfg *oconfig.OrchestratorConfig, canAc checkCfg = append(checkCfg, checks.ProcessEvents) } - // activate the pod collection if enabled and we have the cluster name set - if oCfg.OrchestrationCollectionEnabled { - if oCfg.KubeClusterName != "" { - checkCfg = append(checkCfg, checks.Pod) - } else { - _ = log.Warnf("Failed to auto-detect a Kubernetes cluster name. Pod collection will not start. To fix this, set it manually via the cluster_name config option") - } + if isOrchestratorCheckEnabled() { + checkCfg = append(checkCfg, checks.Pod) } if sysCfg.Enabled { @@ -65,6 +60,20 @@ func getChecks(sysCfg *sysconfig.Config, oCfg *oconfig.OrchestratorConfig, canAc return } +func isOrchestratorCheckEnabled() bool { + // activate the pod collection if enabled and we have the cluster name set + orchestratorEnabled, kubeClusterName := oconfig.IsOrchestratorEnabled() + if !orchestratorEnabled { + return false + } + + if kubeClusterName == "" { + _ = log.Warnf("Failed to auto-detect a Kubernetes cluster name. Pod collection will not start. To fix this, set it manually via the cluster_name config option") + return false + } + return true +} + func getAPIEndpoints() (eps []apicfg.Endpoint, err error) { return getAPIEndpointsWithKeys("https://process.", "process_config.process_dd_url", "process_config.additional_endpoints") } diff --git a/cmd/process-agent/config_test.go b/cmd/process-agent/config_test.go index 66dce2c28de56d..c00b42d38accd8 100644 --- a/cmd/process-agent/config_test.go +++ b/cmd/process-agent/config_test.go @@ -13,9 +13,9 @@ import ( sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" "github.com/DataDog/datadog-agent/pkg/config" - oconfig "github.com/DataDog/datadog-agent/pkg/orchestrator/config" "github.com/DataDog/datadog-agent/pkg/process/checks" apicfg "github.com/DataDog/datadog-agent/pkg/process/util/api/config" + "github.com/DataDog/datadog-agent/pkg/util/kubernetes/clustername" ) func mkurl(rawurl string) *url.URL { @@ -27,20 +27,20 @@ func mkurl(rawurl string) *url.URL { } func TestProcessDiscovery(t *testing.T) { - scfg, ocfg := &sysconfig.Config{}, &oconfig.OrchestratorConfig{} + scfg := &sysconfig.Config{} cfg := config.Mock(t) // Make sure the process_discovery check can be enabled t.Run("enabled", func(t *testing.T) { cfg.Set("process_config.process_discovery.enabled", true) - enabledChecks := getChecks(scfg, ocfg, false) + enabledChecks := getChecks(scfg, false) assert.Contains(t, enabledChecks, checks.ProcessDiscovery) }) // Make sure the process_discovery check can be disabled t.Run("disabled", func(t *testing.T) { cfg.Set("process_config.process_discovery.enabled", false) - enabledChecks := getChecks(scfg, ocfg, true) + enabledChecks := getChecks(scfg, true) assert.NotContains(t, enabledChecks, checks.ProcessDiscovery) }) @@ -48,13 +48,13 @@ func TestProcessDiscovery(t *testing.T) { t.Run("mutual exclusion", func(t *testing.T) { cfg.Set("process_config.process_discovery.enabled", true) cfg.Set("process_config.process_collection.enabled", true) - enabledChecks := getChecks(scfg, ocfg, true) + enabledChecks := getChecks(scfg, true) assert.NotContains(t, enabledChecks, checks.ProcessDiscovery) }) } func TestContainerCheck(t *testing.T) { - scfg, ocfg := &sysconfig.Config{}, &oconfig.OrchestratorConfig{} + scfg := &sysconfig.Config{} cfg := config.Mock(t) // Make sure the container check can be enabled if the process check is disabled @@ -63,7 +63,7 @@ func TestContainerCheck(t *testing.T) { cfg.Set("process_config.container_collection.enabled", true) cfg.Set("process_config.disable_realtime_checks", false) - enabledChecks := getChecks(scfg, ocfg, true) + enabledChecks := getChecks(scfg, true) assert.Contains(t, enabledChecks, checks.Container) assert.Contains(t, enabledChecks, checks.RTContainer) assert.NotContains(t, enabledChecks, checks.Process) @@ -75,7 +75,7 @@ func TestContainerCheck(t *testing.T) { cfg.Set("process_config.container_collection.enabled", true) cfg.Set("process_config.disable_realtime_checks", true) - enabledChecks := getChecks(scfg, ocfg, true) + enabledChecks := getChecks(scfg, true) assert.Contains(t, enabledChecks, checks.Container) assert.NotContains(t, enabledChecks, checks.RTContainer) }) @@ -85,7 +85,7 @@ func TestContainerCheck(t *testing.T) { cfg.Set("process_config.process_collection.enabled", false) cfg.Set("process_config.container_collection.enabled", true) - enabledChecks := getChecks(scfg, ocfg, false) + enabledChecks := getChecks(scfg, false) assert.NotContains(t, enabledChecks, checks.Container) assert.NotContains(t, enabledChecks, checks.RTContainer) }) @@ -95,7 +95,7 @@ func TestContainerCheck(t *testing.T) { cfg.Set("process_config.process_collection.enabled", true) cfg.Set("process_config.container_collection.enabled", true) - enabledChecks := getChecks(scfg, ocfg, true) + enabledChecks := getChecks(scfg, true) assert.Contains(t, enabledChecks, checks.Process) assert.NotContains(t, enabledChecks, checks.Container) assert.NotContains(t, enabledChecks, checks.RTContainer) @@ -108,24 +108,22 @@ func TestProcessCheck(t *testing.T) { scfg, err := sysconfig.New("") assert.NoError(t, err) - ocfg := &oconfig.OrchestratorConfig{} - t.Run("disabled", func(t *testing.T) { cfg.Set("process_config.process_collection.enabled", false) - enabledChecks := getChecks(scfg, ocfg, true) + enabledChecks := getChecks(scfg, true) assert.NotContains(t, enabledChecks, checks.Process) }) // Make sure the process check can be enabled t.Run("enabled", func(t *testing.T) { cfg.Set("process_config.process_collection.enabled", true) - enabledChecks := getChecks(scfg, ocfg, true) + enabledChecks := getChecks(scfg, true) assert.Contains(t, enabledChecks, checks.Process) }) } func TestSysprobeProcessModule(t *testing.T) { - cfg, ocfg := config.Mock(t), &oconfig.OrchestratorConfig{} + cfg := config.Mock(t) cfg.Set("process_config.process_collection.enabled", true) cfg.Set("system_probe_config.enabled", true) @@ -134,7 +132,7 @@ func TestSysprobeProcessModule(t *testing.T) { scfg, err := sysconfig.New("") assert.NoError(t, err) - _ = getChecks(scfg, ocfg, true) + _ = getChecks(scfg, true) assert.True(t, checks.Process.SysprobeProcessModuleEnabled) }) @@ -143,14 +141,13 @@ func TestSysprobeProcessModule(t *testing.T) { scfg, err := sysconfig.New("") assert.NoError(t, err) - _ = getChecks(scfg, ocfg, false) + _ = getChecks(scfg, false) assert.False(t, checks.Process.SysprobeProcessModuleEnabled) }) } func TestConnectionsCheck(t *testing.T) { cfg := config.Mock(t) - ocfg := &oconfig.OrchestratorConfig{} cfg.Set("system_probe_config.enabled", true) t.Run("enabled", func(t *testing.T) { @@ -158,7 +155,7 @@ func TestConnectionsCheck(t *testing.T) { scfg, err := sysconfig.New("") assert.NoError(t, err) - enabledChecks := getChecks(scfg, ocfg, true) + enabledChecks := getChecks(scfg, true) assert.Contains(t, enabledChecks, checks.Connections) }) @@ -167,55 +164,58 @@ func TestConnectionsCheck(t *testing.T) { scfg, err := sysconfig.New("") assert.NoError(t, err) - enabledChecks := getChecks(scfg, ocfg, true) + enabledChecks := getChecks(scfg, true) assert.NotContains(t, enabledChecks, checks.Connections) }) } func TestPodCheck(t *testing.T) { - cfg := config.Mock(t) + config.SetDetectedFeatures(config.FeatureMap{config.Kubernetes: {}}) + defer config.SetDetectedFeatures(nil) t.Run("enabled", func(t *testing.T) { - cfg.Set("orchestrator_explorer.enabled", true) + // Resets the cluster name so that it isn't cached during the call to `getChecks()` + clustername.ResetClusterName() + defer clustername.ResetClusterName() - ocfg := oconfig.NewDefaultOrchestratorConfig() - ocfg.KubeClusterName = "test" // We can't reliably detect a kubernetes cluster in a test - assert.NoError(t, ocfg.Load()) + cfg := config.Mock(t) + cfg.Set("orchestrator_explorer.enabled", true) + cfg.Set("cluster_name", "test") - enabledChecks := getChecks(&sysconfig.Config{}, ocfg, true) + enabledChecks := getChecks(&sysconfig.Config{}, true) assert.Contains(t, enabledChecks, checks.Pod) }) t.Run("disabled", func(t *testing.T) { - cfg.Set("orchestrator_explorer.enabled", false) + clustername.ResetClusterName() + defer clustername.ResetClusterName() - ocfg := oconfig.NewDefaultOrchestratorConfig() - ocfg.KubeClusterName = "test" // We can't reliably detect a kubernetes cluster in a test - assert.NoError(t, ocfg.Load()) + cfg := config.Mock(t) + cfg.Set("orchestrator_explorer.enabled", false) - enabledChecks := getChecks(&sysconfig.Config{}, ocfg, true) + enabledChecks := getChecks(&sysconfig.Config{}, true) assert.NotContains(t, enabledChecks, checks.Pod) }) } func TestProcessEventsCheck(t *testing.T) { - scfg, ocfg := &sysconfig.Config{}, &oconfig.OrchestratorConfig{} + scfg := &sysconfig.Config{} cfg := config.Mock(t) t.Run("default", func(t *testing.T) { - enabledChecks := getChecks(scfg, ocfg, false) + enabledChecks := getChecks(scfg, false) assert.NotContains(t, enabledChecks, checks.ProcessEvents) }) t.Run("enabled", func(t *testing.T) { cfg.Set("process_config.event_collection.enabled", true) - enabledChecks := getChecks(scfg, ocfg, false) + enabledChecks := getChecks(scfg, false) assert.Contains(t, enabledChecks, checks.ProcessEvents) }) t.Run("disabled", func(t *testing.T) { cfg.Set("process_config.event_collection.enabled", false) - enabledChecks := getChecks(scfg, ocfg, false) + enabledChecks := getChecks(scfg, false) assert.NotContains(t, enabledChecks, checks.ProcessEvents) }) } diff --git a/cmd/process-agent/info.go b/cmd/process-agent/info.go index 335620e0808749..530d2a850e03f9 100644 --- a/cmd/process-agent/info.go +++ b/cmd/process-agent/info.go @@ -23,7 +23,7 @@ import ( model "github.com/DataDog/agent-payload/v5/process" ddconfig "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/process/config" + "github.com/DataDog/datadog-agent/pkg/process/checks" "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/version" ) @@ -59,9 +59,14 @@ const ( {{.Banner}} Pid: {{.Status.Pid}} - Hostname: {{.Status.Config.HostName}} + Hostname: {{.Status.HostName}} Uptime: {{.Status.Uptime}} seconds Mem alloc: {{.Status.MemStats.Alloc}} bytes + {{- if .Status.SystemProbeProcessModuleEnabled }} + System Probe Process Module Status: Running + {{- else}} + System Probe Process Module Status: Not running + {{- end}} Last collection time: {{.Status.LastCollectTime}}{{if ne .Status.DockerSocket ""}} Docker socket: {{.Status.DockerSocket}}{{end}} @@ -100,6 +105,10 @@ const ( ` ) +func publishSystemProbeProcessModuleEnabled() interface{} { + return checks.Process.SysprobeProcessModuleEnabled +} + func publishUptime() interface{} { return int(time.Since(infoStart) / time.Second) } @@ -272,32 +281,33 @@ func getProgramBanner(version string) (string, string) { // StatusInfo is a structure to get information from expvar and feed to template type StatusInfo struct { - Pid int `json:"pid"` - Uptime int `json:"uptime"` - MemStats struct{ Alloc uint64 } `json:"memstats"` - Version version.Version `json:"version"` - Config config.AgentConfig `json:"config"` - DockerSocket string `json:"docker_socket"` - LastCollectTime string `json:"last_collect_time"` - ProcessCount int `json:"process_count"` - ContainerCount int `json:"container_count"` - ProcessQueueSize int `json:"process_queue_size"` - RTProcessQueueSize int `json:"rtprocess_queue_size"` - ConnectionsQueueSize int `json:"connections_queue_size"` - EventQueueSize int `json:"event_queue_size"` - PodQueueSize int `json:"pod_queue_size"` - ProcessQueueBytes int `json:"process_queue_bytes"` - RTProcessQueueBytes int `json:"rtprocess_queue_bytes"` - ConnectionsQueueBytes int `json:"connections_queue_bytes"` - EventQueueBytes int `json:"event_queue_bytes"` - PodQueueBytes int `json:"pod_queue_bytes"` - ContainerID string `json:"container_id"` - ProxyURL string `json:"proxy_url"` - LogFile string `json:"log_file"` - DropCheckPayloads []string `json:"drop_check_payloads"` + Pid int `json:"pid"` + HostName string `json:"host"` + Uptime int `json:"uptime"` + MemStats struct{ Alloc uint64 } `json:"memstats"` + Version version.Version `json:"version"` + DockerSocket string `json:"docker_socket"` + LastCollectTime string `json:"last_collect_time"` + ProcessCount int `json:"process_count"` + ContainerCount int `json:"container_count"` + ProcessQueueSize int `json:"process_queue_size"` + RTProcessQueueSize int `json:"rtprocess_queue_size"` + ConnectionsQueueSize int `json:"connections_queue_size"` + EventQueueSize int `json:"event_queue_size"` + PodQueueSize int `json:"pod_queue_size"` + ProcessQueueBytes int `json:"process_queue_bytes"` + RTProcessQueueBytes int `json:"rtprocess_queue_bytes"` + ConnectionsQueueBytes int `json:"connections_queue_bytes"` + EventQueueBytes int `json:"event_queue_bytes"` + PodQueueBytes int `json:"pod_queue_bytes"` + ContainerID string `json:"container_id"` + ProxyURL string `json:"proxy_url"` + LogFile string `json:"log_file"` + DropCheckPayloads []string `json:"drop_check_payloads"` + SystemProbeProcessModuleEnabled bool `json:"system_probe_process_module_enabled"` } -func initInfo(_ *config.AgentConfig) error { +func initInfo(hostname string) error { var err error funcMap := template.FuncMap{ @@ -309,6 +319,7 @@ func initInfo(_ *config.AgentConfig) error { }, } infoOnce.Do(func() { + expvar.NewString("host").Set(hostname) expvar.NewInt("pid").Set(int64(os.Getpid())) expvar.Publish("uptime", expvar.Func(publishUptime)) expvar.Publish("uptime_nano", expvar.Func(publishUptimeNano)) @@ -331,6 +342,7 @@ func initInfo(_ *config.AgentConfig) error { expvar.Publish("enabled_checks", expvar.Func(publishEnabledChecks)) expvar.Publish("endpoints", expvar.Func(publishEndpoints)) expvar.Publish("drop_check_payloads", expvar.Func(publishDropCheckPayloads)) + expvar.Publish("system_probe_process_module_enabled", expvar.Func(publishSystemProbeProcessModuleEnabled)) infoTmpl, err = template.New("info").Funcs(funcMap).Parse(infoTmplSrc) if err != nil { @@ -350,7 +362,7 @@ func initInfo(_ *config.AgentConfig) error { } // Info is called when --info flag is enabled when executing the agent binary -func Info(w io.Writer, _ *config.AgentConfig, expvarURL string) error { +func Info(w io.Writer, expvarURL string) error { agentVersion, _ := version.Agent() var err error client := http.Client{Timeout: 2 * time.Second} diff --git a/cmd/process-agent/info_test.go b/cmd/process-agent/info_test.go index 27edc6f1b218a6..90fd080e4253af 100644 --- a/cmd/process-agent/info_test.go +++ b/cmd/process-agent/info_test.go @@ -16,7 +16,6 @@ import ( "github.com/stretchr/testify/assert" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/version" ) @@ -29,6 +28,7 @@ Processes and Containers Agent (v 0.99.0) Hostname: ubuntu-1404.vagrantup.com Uptime: 3464 seconds Mem alloc: 2096792 bytes + System Probe Process Module Status: Not running Last collection time: 2017-09-28 07:10:16 Docker socket: /var/run/docker.sock @@ -63,6 +63,13 @@ Processes and Containers Agent (v 0.99.0) Error: EOF ` + expVarPath = "/debug/vars" + sysProbeProcessModuleEnabledExpVarPath = "/debug/vars/sysprobeprocessmoduleon" + expVarResponse = `{ + "cmdline":["/opt/datadog-agent/bin/process-agent"], "host":"ubuntu-1404.vagrantup.com", "container_count":0,"container_id":"", + "system_probe_process_module_enabled":false, + "docker_socket":"/var/run/docker.sock","forwarder":{"APIKeyStatus":{},"TransactionsCreated":{"RetryQueueSize":0}},"last_collect_time":"2017-09-28 07:10:16","memstats":{"Alloc":2096792,"BuckHashSys":1482366,"BySize":[{"Frees":0,"Mallocs":0,"Size":0},{"Frees":412497,"Mallocs":412634,"Size":8},{"Frees":2158061,"Mallocs":2161254,"Size":16},{"Frees":6301195,"Mallocs":6310794,"Size":32},{"Frees":1025554,"Mallocs":1026617,"Size":48},{"Frees":290415,"Mallocs":291445,"Size":64},{"Frees":67074,"Mallocs":67581,"Size":80},{"Frees":40953,"Mallocs":41171,"Size":96},{"Frees":171019,"Mallocs":171274,"Size":112},{"Frees":174757,"Mallocs":174840,"Size":128},{"Frees":1291,"Mallocs":1324,"Size":144},{"Frees":114113,"Mallocs":114205,"Size":160},{"Frees":45454,"Mallocs":45580,"Size":176},{"Frees":13201,"Mallocs":13208,"Size":192},{"Frees":311938,"Mallocs":311985,"Size":208},{"Frees":3497,"Mallocs":3503,"Size":224},{"Frees":1053,"Mallocs":1058,"Size":240},{"Frees":9967,"Mallocs":10007,"Size":256},{"Frees":937,"Mallocs":987,"Size":288},{"Frees":76158,"Mallocs":76606,"Size":320},{"Frees":1429,"Mallocs":1449,"Size":352},{"Frees":15,"Mallocs":17,"Size":384},{"Frees":48,"Mallocs":183,"Size":416},{"Frees":363,"Mallocs":365,"Size":448},{"Frees":45748,"Mallocs":45751,"Size":480},{"Frees":311959,"Mallocs":311981,"Size":512},{"Frees":46935,"Mallocs":47209,"Size":576},{"Frees":124,"Mallocs":136,"Size":640},{"Frees":31699,"Mallocs":31713,"Size":704},{"Frees":754,"Mallocs":755,"Size":768},{"Frees":106874,"Mallocs":107064,"Size":896},{"Frees":6997,"Mallocs":7045,"Size":1024},{"Frees":60,"Mallocs":68,"Size":1152},{"Frees":69,"Mallocs":83,"Size":1280},{"Frees":1127,"Mallocs":1133,"Size":1408},{"Frees":257413,"Mallocs":257413,"Size":1536},{"Frees":3235,"Mallocs":3245,"Size":1792},{"Frees":3155,"Mallocs":3201,"Size":2048},{"Frees":1069,"Mallocs":1078,"Size":2304},{"Frees":1757,"Mallocs":1774,"Size":2688},{"Frees":692,"Mallocs":692,"Size":3072},{"Frees":350,"Mallocs":352,"Size":3200},{"Frees":0,"Mallocs":5,"Size":3456},{"Frees":6847,"Mallocs":6861,"Size":4096},{"Frees":11,"Mallocs":22,"Size":4864},{"Frees":11,"Mallocs":12,"Size":5376},{"Frees":8,"Mallocs":11,"Size":6144},{"Frees":349,"Mallocs":349,"Size":6528},{"Frees":0,"Mallocs":1,"Size":6784},{"Frees":0,"Mallocs":0,"Size":6912},{"Frees":889,"Mallocs":891,"Size":8192},{"Frees":175,"Mallocs":176,"Size":9472},{"Frees":0,"Mallocs":0,"Size":9728},{"Frees":16,"Mallocs":16,"Size":10240},{"Frees":9,"Mallocs":11,"Size":10880},{"Frees":0,"Mallocs":0,"Size":12288},{"Frees":0,"Mallocs":0,"Size":13568},{"Frees":0,"Mallocs":0,"Size":14336},{"Frees":2,"Mallocs":2,"Size":16384},{"Frees":8,"Mallocs":11,"Size":18432},{"Frees":0,"Mallocs":0,"Size":19072}],"DebugGC":false,"EnableGC":true,"Frees":12980452,"GCCPUFraction":0.00027660329858230417,"GCSys":671744,"HeapAlloc":2096792,"HeapIdle":2113536,"HeapInuse":4243456,"HeapObjects":17826,"HeapReleased":0,"HeapSys":6356992,"LastGC":1506582616117567500,"Lookups":787843,"MCacheInuse":9600,"MCacheSys":16384,"MSpanInuse":85728,"MSpanSys":114688,"Mallocs":12998278,"NextGC":4194304,"NumForcedGC":0,"NumGC":580,"OtherSys":1489530,"PauseEnd":[1506582226101035000,1506582226112501200,1506582236177119200,1506582246109827600,1506582246161165300,1506582256157039800,1506582256196451300,1506582266100831200,1506582266112478200,1506582276101476900,1506582286106396000,1506582286126687500,1506582296099503000,1506582296110266000,1506582306106153200,1506582316097177900,1506582316110753300,1506582326106338000,1506582326122362000,1506582336109635800,1506582346098246400,1506582346111455200,1506582356100117800,1506582356113638400,1506582366106036500,1506582376103559700,1506582376118026000,1506582386103282000,1506582386114026000,1506582396105205200,1506582406101939000,1506582406127845400,1506582416100454100,1506582416111487000,1506582426104607200,1506582436106598000,1506582436121981400,1506582446105687600,1506582446132311000,1506582456104680000,1506582466133406200,1506582466197264000,1506582476123873800,1506582476188246800,1506582486101491500,1506582486113159400,1506582496106409500,1506582506099725000,1506582506115678200,1506582516101830400,1506582516120312600,1506582526133332700,1506582536133508400,1506582536174795500,1506582546101393700,1506582546112282000,1506582556102495500,1506582566097362700,1506582566107364400,1506582576102698000,1506582576113667000,1506582586111737900,1506582596134309400,1506582596154338300,1506582606109634600,1506582606140238800,1506582616100704800,1506582616117567500,1506581106098407200,1506581106109227000,1506581116101760500,1506581116109269000,1506581126107651600,1506581126135905000,1506581136113266200,1506581146101469000,1506581146110897700,1506581156101606000,1506581156112118500,1506581166103714600,1506581176102541300,1506581176115352800,1506581186101816600,1506581186113160200,1506581196102513400,1506581206098444800,1506581206108308700,1506581216099007200,1506581216108940300,1506581226105730800,1506581226126397200,1506581236105284000,1506581246100745200,1506581246109144600,1506581256099923700,1506581256112433700,1506581266104015600,1506581276097864700,1506581276114086700,1506581286143012600,1506581286191402800,1506581296157393200,1506581296262120200,1506581306195998500,1506581316173913000,1506581316257029000,1506581326100242000,1506581326110632400,1506581336106426600,1506581346098762500,1506581346122147800,1506581356171365600,1506581356205906700,1506581366199512300,1506581366274589700,1506581376106299100,1506581376117759500,1506581386104804900,1506581396102094000,1506581396117333000,1506581406101776000,1506581416097738800,1506581416107423000,1506581426099014100,1506581426109568500,1506581436110609700,1506581446098193400,1506581446109034500,1506581456107947800,1506581456122633200,1506581466103874000,1506581476133261300,1506581476160198100,1506581486115513600,1506581486138224400,1506581496116856600,1506581496198111000,1506581506115676000,1506581516100093700,1506581516117489200,1506581526110691000,1506581526122211300,1506581536117504500,1506581546103023600,1506581546122240500,1506581556106510000,1506581566101397200,1506581566117625000,1506581576108421400,1506581576122919200,1506581586113834000,1506581596155364000,1506581596216066600,1506581606105134300,1506581606115653000,1506581616114833700,1506581626101752800,1506581626109803300,1506581636101229300,1506581636117020200,1506581646104537000,1506581656102321400,1506581656110860500,1506581666101982500,1506581676102100700,1506581676111583500,1506581686107026200,1506581686123608300,1506581696107647500,1506581706101321700,1506581706108631300,1506581716100399400,1506581716112764200,1506581726108076500,1506581736103447000,1506581736117864000,1506581746102340600,1506581756099405600,1506581756110430700,1506581766098815200,1506581766108658200,1506581776105958700,1506581786100751000,1506581786109499600,1506581796106018300,1506581796116269600,1506581806111348000,1506581816098433500,1506581816107445500,1506581826102063800,1506581826113313300,1506581836106883800,1506581846098780700,1506581846109101800,1506581856104110600,1506581856115759800,1506581866107832000,1506581876098012200,1506581876107959000,1506581886101321200,1506581886112426200,1506581896105218000,1506581906112097800,1506581906149966600,1506581916147979300,1506581916269657300,1506581926117701000,1506581936101587200,1506581936110430700,1506581946101771000,1506581946111723800,1506581956103544000,1506581966101098800,1506581966110184400,1506581976105113900,1506581976114027300,1506581986155667200,1506581996107511600,1506581996126415400,1506582006102447400,1506582006111234300,1506582016100840200,1506582016111904300,1506582026109052200,1506582036099488300,1506582036109610200,1506582046104646400,1506582056101391000,1506582056109750800,1506582066099548700,1506582066109651700,1506582076157450500,1506582086140934400,1506582086166320000,1506582096106871300,1506582096143585000,1506582106106380800,1506582106134424800,1506582116104113400,1506582126099607600,1506582126110588700,1506582136102966500,1506582146101210400,1506582146142070500,1506582156155882500,1506582156246712600,1506582166157606400,1506582166199486500,1506582176105659400,1506582186097889000,1506582186107386600,1506582196102539300,1506582196111375400,1506582206103425500,1506582216098815700,1506582216122575000],"PauseNs":[202108,111195,21103433,4734207,15843043,17352156,20656960,325707,120873,145645,1259619,165623,206534,201725,678258,94953,164909,278077,411994,4234278,324415,113182,118542,181238,2308665,531144,225488,1524394,203164,1016146,172322,9750220,150765,113357,123909,7350338,129862,1782936,6970455,280722,3123825,8507248,1213709,390248,792984,264343,182112,167632,304755,294682,241455,4768157,11009560,17620970,73196,139842,109420,148579,259885,833279,165886,6578634,2389416,2169273,4134418,1347554,780562,531306,137560,147447,163720,152183,667379,3140549,630481,82678,122852,117171,87366,285812,887783,201820,146584,130057,151639,236975,110644,177687,164236,1106801,4601777,270537,54591,490993,161521,252501,110987,254652,1085837,24134635,5505333,19258429,16958700,25820682,37778785,15691409,337939,211482,178633,144971,2766195,12353022,6834896,44842527,22457655,172082,686213,200130,112915,232162,138353,80799,117007,97286,108548,1937426,280192,156610,99514,430100,155465,687228,2882711,6731693,65804,1624821,159652,285577,60549,157904,5916134,412288,132597,908879,272218,180757,732263,169132,745769,306887,7252246,4394707,951611,82203,213042,117441,112781,112222,300525,1211909,145623,113760,164115,225506,96600,953395,1874155,204582,115017,187433,130060,156279,312904,97728,2302220,232036,124466,632575,121143,149310,200161,248362,153779,119662,494180,534981,316531,185806,152670,211013,132662,2033315,253769,850340,299891,140935,120561,170304,87502,712511,758267,102834,472697,1307030,24962796,254714,2628369,266971,1318833,108503,131614,120129,222602,1789785,129309,746252,19088113,823822,253070,163050,183856,123350,126196,226394,97382,152971,1404152,196053,1299475,136466,185384,20561432,12951037,1264979,5630592,2187745,254259,1811039,164578,144580,244778,207351,2194256,12554634,16700526,5939874,18788363,9003636,379686,92515,771011,1034056,795588,842805,313889,553591],"PauseTotalNs":833945600,"StackInuse":983040,"StackSys":983040,"Sys":11114744,"TotalAlloc":1301199968},"pid":485,"process_count":84,"queue_size":0,"splitter":{},"uptime":3464,"version":{"Major": 0,"Minor": 99,"Patch": 0},"log_file":"/var/log/datadog/process-agent.log" + }` ) type testServerHandler struct { @@ -72,18 +79,23 @@ type testServerHandler struct { func (h *testServerHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") switch r.URL.Path { - case "/debug/vars": + case expVarPath: h.t.Logf("serving fake info data for %s", r.URL.Path) - _, err := w.Write([]byte(`{ -"cmdline":["/opt/datadog-agent/bin/process-agent"],"config":{"APIEndpoint":{"ForceQuery":false,"Fragment":"","Host":"localhost:3000","Opaque":"","Path":"","RawPath":"","RawQuery":"","Scheme":"http","User":null},"APIKey":"apikey_2","AllowRealTime":true,"Blacklist":[],"CheckIntervals":{"connections":10800000000000,"container":10000000000,"process":10000000000,"rtcontainer":2000000000,"rtprocess":2000000000},"CollectDockerNetwork":true,"CollectKubernetesMetadata":true,"ContainerBlacklist":null,"ContainerCacheDuration":30000000000,"ContainerWhitelist":null,"DDAgentPy":"/opt/datadog-agent/embedded/bin/python","DDAgentPyEnv":["PYTHONPATH=/opt/datadog-agent/agent"],"Enabled":true,"EnabledChecks":["process","rtprocess"],"HostName":"ubuntu-1404.vagrantup.com","KubernetesHTTPKubeletPort":10255,"KubernetesHTTPSKubeletPort":10250,"KubernetesKubeletHost":"","LogLevel":"info","Logger":null,"MaxProcFDs":200,"ProcLimit":100,"Proxy":null,"QueueSize":20,"StatsdHost":"localhost","StatsdPort":8125},"container_count":0,"container_id":"","docker_socket":"/var/run/docker.sock","forwarder":{"APIKeyStatus":{},"TransactionsCreated":{"RetryQueueSize":0}},"last_collect_time":"2017-09-28 07:10:16","memstats":{"Alloc":2096792,"BuckHashSys":1482366,"BySize":[{"Frees":0,"Mallocs":0,"Size":0},{"Frees":412497,"Mallocs":412634,"Size":8},{"Frees":2158061,"Mallocs":2161254,"Size":16},{"Frees":6301195,"Mallocs":6310794,"Size":32},{"Frees":1025554,"Mallocs":1026617,"Size":48},{"Frees":290415,"Mallocs":291445,"Size":64},{"Frees":67074,"Mallocs":67581,"Size":80},{"Frees":40953,"Mallocs":41171,"Size":96},{"Frees":171019,"Mallocs":171274,"Size":112},{"Frees":174757,"Mallocs":174840,"Size":128},{"Frees":1291,"Mallocs":1324,"Size":144},{"Frees":114113,"Mallocs":114205,"Size":160},{"Frees":45454,"Mallocs":45580,"Size":176},{"Frees":13201,"Mallocs":13208,"Size":192},{"Frees":311938,"Mallocs":311985,"Size":208},{"Frees":3497,"Mallocs":3503,"Size":224},{"Frees":1053,"Mallocs":1058,"Size":240},{"Frees":9967,"Mallocs":10007,"Size":256},{"Frees":937,"Mallocs":987,"Size":288},{"Frees":76158,"Mallocs":76606,"Size":320},{"Frees":1429,"Mallocs":1449,"Size":352},{"Frees":15,"Mallocs":17,"Size":384},{"Frees":48,"Mallocs":183,"Size":416},{"Frees":363,"Mallocs":365,"Size":448},{"Frees":45748,"Mallocs":45751,"Size":480},{"Frees":311959,"Mallocs":311981,"Size":512},{"Frees":46935,"Mallocs":47209,"Size":576},{"Frees":124,"Mallocs":136,"Size":640},{"Frees":31699,"Mallocs":31713,"Size":704},{"Frees":754,"Mallocs":755,"Size":768},{"Frees":106874,"Mallocs":107064,"Size":896},{"Frees":6997,"Mallocs":7045,"Size":1024},{"Frees":60,"Mallocs":68,"Size":1152},{"Frees":69,"Mallocs":83,"Size":1280},{"Frees":1127,"Mallocs":1133,"Size":1408},{"Frees":257413,"Mallocs":257413,"Size":1536},{"Frees":3235,"Mallocs":3245,"Size":1792},{"Frees":3155,"Mallocs":3201,"Size":2048},{"Frees":1069,"Mallocs":1078,"Size":2304},{"Frees":1757,"Mallocs":1774,"Size":2688},{"Frees":692,"Mallocs":692,"Size":3072},{"Frees":350,"Mallocs":352,"Size":3200},{"Frees":0,"Mallocs":5,"Size":3456},{"Frees":6847,"Mallocs":6861,"Size":4096},{"Frees":11,"Mallocs":22,"Size":4864},{"Frees":11,"Mallocs":12,"Size":5376},{"Frees":8,"Mallocs":11,"Size":6144},{"Frees":349,"Mallocs":349,"Size":6528},{"Frees":0,"Mallocs":1,"Size":6784},{"Frees":0,"Mallocs":0,"Size":6912},{"Frees":889,"Mallocs":891,"Size":8192},{"Frees":175,"Mallocs":176,"Size":9472},{"Frees":0,"Mallocs":0,"Size":9728},{"Frees":16,"Mallocs":16,"Size":10240},{"Frees":9,"Mallocs":11,"Size":10880},{"Frees":0,"Mallocs":0,"Size":12288},{"Frees":0,"Mallocs":0,"Size":13568},{"Frees":0,"Mallocs":0,"Size":14336},{"Frees":2,"Mallocs":2,"Size":16384},{"Frees":8,"Mallocs":11,"Size":18432},{"Frees":0,"Mallocs":0,"Size":19072}],"DebugGC":false,"EnableGC":true,"Frees":12980452,"GCCPUFraction":0.00027660329858230417,"GCSys":671744,"HeapAlloc":2096792,"HeapIdle":2113536,"HeapInuse":4243456,"HeapObjects":17826,"HeapReleased":0,"HeapSys":6356992,"LastGC":1506582616117567500,"Lookups":787843,"MCacheInuse":9600,"MCacheSys":16384,"MSpanInuse":85728,"MSpanSys":114688,"Mallocs":12998278,"NextGC":4194304,"NumForcedGC":0,"NumGC":580,"OtherSys":1489530,"PauseEnd":[1506582226101035000,1506582226112501200,1506582236177119200,1506582246109827600,1506582246161165300,1506582256157039800,1506582256196451300,1506582266100831200,1506582266112478200,1506582276101476900,1506582286106396000,1506582286126687500,1506582296099503000,1506582296110266000,1506582306106153200,1506582316097177900,1506582316110753300,1506582326106338000,1506582326122362000,1506582336109635800,1506582346098246400,1506582346111455200,1506582356100117800,1506582356113638400,1506582366106036500,1506582376103559700,1506582376118026000,1506582386103282000,1506582386114026000,1506582396105205200,1506582406101939000,1506582406127845400,1506582416100454100,1506582416111487000,1506582426104607200,1506582436106598000,1506582436121981400,1506582446105687600,1506582446132311000,1506582456104680000,1506582466133406200,1506582466197264000,1506582476123873800,1506582476188246800,1506582486101491500,1506582486113159400,1506582496106409500,1506582506099725000,1506582506115678200,1506582516101830400,1506582516120312600,1506582526133332700,1506582536133508400,1506582536174795500,1506582546101393700,1506582546112282000,1506582556102495500,1506582566097362700,1506582566107364400,1506582576102698000,1506582576113667000,1506582586111737900,1506582596134309400,1506582596154338300,1506582606109634600,1506582606140238800,1506582616100704800,1506582616117567500,1506581106098407200,1506581106109227000,1506581116101760500,1506581116109269000,1506581126107651600,1506581126135905000,1506581136113266200,1506581146101469000,1506581146110897700,1506581156101606000,1506581156112118500,1506581166103714600,1506581176102541300,1506581176115352800,1506581186101816600,1506581186113160200,1506581196102513400,1506581206098444800,1506581206108308700,1506581216099007200,1506581216108940300,1506581226105730800,1506581226126397200,1506581236105284000,1506581246100745200,1506581246109144600,1506581256099923700,1506581256112433700,1506581266104015600,1506581276097864700,1506581276114086700,1506581286143012600,1506581286191402800,1506581296157393200,1506581296262120200,1506581306195998500,1506581316173913000,1506581316257029000,1506581326100242000,1506581326110632400,1506581336106426600,1506581346098762500,1506581346122147800,1506581356171365600,1506581356205906700,1506581366199512300,1506581366274589700,1506581376106299100,1506581376117759500,1506581386104804900,1506581396102094000,1506581396117333000,1506581406101776000,1506581416097738800,1506581416107423000,1506581426099014100,1506581426109568500,1506581436110609700,1506581446098193400,1506581446109034500,1506581456107947800,1506581456122633200,1506581466103874000,1506581476133261300,1506581476160198100,1506581486115513600,1506581486138224400,1506581496116856600,1506581496198111000,1506581506115676000,1506581516100093700,1506581516117489200,1506581526110691000,1506581526122211300,1506581536117504500,1506581546103023600,1506581546122240500,1506581556106510000,1506581566101397200,1506581566117625000,1506581576108421400,1506581576122919200,1506581586113834000,1506581596155364000,1506581596216066600,1506581606105134300,1506581606115653000,1506581616114833700,1506581626101752800,1506581626109803300,1506581636101229300,1506581636117020200,1506581646104537000,1506581656102321400,1506581656110860500,1506581666101982500,1506581676102100700,1506581676111583500,1506581686107026200,1506581686123608300,1506581696107647500,1506581706101321700,1506581706108631300,1506581716100399400,1506581716112764200,1506581726108076500,1506581736103447000,1506581736117864000,1506581746102340600,1506581756099405600,1506581756110430700,1506581766098815200,1506581766108658200,1506581776105958700,1506581786100751000,1506581786109499600,1506581796106018300,1506581796116269600,1506581806111348000,1506581816098433500,1506581816107445500,1506581826102063800,1506581826113313300,1506581836106883800,1506581846098780700,1506581846109101800,1506581856104110600,1506581856115759800,1506581866107832000,1506581876098012200,1506581876107959000,1506581886101321200,1506581886112426200,1506581896105218000,1506581906112097800,1506581906149966600,1506581916147979300,1506581916269657300,1506581926117701000,1506581936101587200,1506581936110430700,1506581946101771000,1506581946111723800,1506581956103544000,1506581966101098800,1506581966110184400,1506581976105113900,1506581976114027300,1506581986155667200,1506581996107511600,1506581996126415400,1506582006102447400,1506582006111234300,1506582016100840200,1506582016111904300,1506582026109052200,1506582036099488300,1506582036109610200,1506582046104646400,1506582056101391000,1506582056109750800,1506582066099548700,1506582066109651700,1506582076157450500,1506582086140934400,1506582086166320000,1506582096106871300,1506582096143585000,1506582106106380800,1506582106134424800,1506582116104113400,1506582126099607600,1506582126110588700,1506582136102966500,1506582146101210400,1506582146142070500,1506582156155882500,1506582156246712600,1506582166157606400,1506582166199486500,1506582176105659400,1506582186097889000,1506582186107386600,1506582196102539300,1506582196111375400,1506582206103425500,1506582216098815700,1506582216122575000],"PauseNs":[202108,111195,21103433,4734207,15843043,17352156,20656960,325707,120873,145645,1259619,165623,206534,201725,678258,94953,164909,278077,411994,4234278,324415,113182,118542,181238,2308665,531144,225488,1524394,203164,1016146,172322,9750220,150765,113357,123909,7350338,129862,1782936,6970455,280722,3123825,8507248,1213709,390248,792984,264343,182112,167632,304755,294682,241455,4768157,11009560,17620970,73196,139842,109420,148579,259885,833279,165886,6578634,2389416,2169273,4134418,1347554,780562,531306,137560,147447,163720,152183,667379,3140549,630481,82678,122852,117171,87366,285812,887783,201820,146584,130057,151639,236975,110644,177687,164236,1106801,4601777,270537,54591,490993,161521,252501,110987,254652,1085837,24134635,5505333,19258429,16958700,25820682,37778785,15691409,337939,211482,178633,144971,2766195,12353022,6834896,44842527,22457655,172082,686213,200130,112915,232162,138353,80799,117007,97286,108548,1937426,280192,156610,99514,430100,155465,687228,2882711,6731693,65804,1624821,159652,285577,60549,157904,5916134,412288,132597,908879,272218,180757,732263,169132,745769,306887,7252246,4394707,951611,82203,213042,117441,112781,112222,300525,1211909,145623,113760,164115,225506,96600,953395,1874155,204582,115017,187433,130060,156279,312904,97728,2302220,232036,124466,632575,121143,149310,200161,248362,153779,119662,494180,534981,316531,185806,152670,211013,132662,2033315,253769,850340,299891,140935,120561,170304,87502,712511,758267,102834,472697,1307030,24962796,254714,2628369,266971,1318833,108503,131614,120129,222602,1789785,129309,746252,19088113,823822,253070,163050,183856,123350,126196,226394,97382,152971,1404152,196053,1299475,136466,185384,20561432,12951037,1264979,5630592,2187745,254259,1811039,164578,144580,244778,207351,2194256,12554634,16700526,5939874,18788363,9003636,379686,92515,771011,1034056,795588,842805,313889,553591],"PauseTotalNs":833945600,"StackInuse":983040,"StackSys":983040,"Sys":11114744,"TotalAlloc":1301199968},"pid":485,"process_count":84,"queue_size":0,"splitter":{},"uptime":3464,"version":{"Major": 0,"Minor": 99,"Patch": 0},"log_file":"/var/log/datadog/process-agent.log" - }`)) + _, err := w.Write([]byte(expVarResponse)) + if err != nil { + h.t.Errorf("error serving %s: %v", r.URL, err) + } + case sysProbeProcessModuleEnabledExpVarPath: + // serve same information as above, except that system probe config flag is enabled + h.t.Logf("serving fake info data for %s", r.URL.Path) + sysProbeEnabledResponse := strings.ReplaceAll(expVarResponse, `"system_probe_process_module_enabled":false`, `"system_probe_process_module_enabled":true`) + _, err := w.Write([]byte(sysProbeEnabledResponse)) if err != nil { h.t.Errorf("error serving %s: %v", r.URL, err) } default: h.t.Logf("answering 404 for %s", r.URL) w.WriteHeader(http.StatusNotFound) - } } @@ -106,19 +118,28 @@ func TestInfo(t *testing.T) { defer reset() assert := assert.New(t) - conf := config.NewDefaultAgentConfig() server := testServer(t) assert.NotNil(server) defer server.Close() - err := initInfo(conf) + err := initInfo("ubuntu-1404.vagrantup.com") assert.NoError(err) var buf bytes.Buffer - err = Info(&buf, conf, server.URL+"/debug/vars") + err = Info(&buf, server.URL+expVarPath) assert.NoError(err) info := buf.String() - assert.Equal(expectedInfo, info) + + // check that if system probe process module config flag is disabled, + // it is displayed correctly in info command output + buf.Reset() // empty the buffer before reusing + err = Info(&buf, server.URL+sysProbeProcessModuleEnabledExpVarPath) + assert.NoError(err) + info = buf.String() + sysProbeProcessModuleEnabledExpectedInfo := strings.ReplaceAll(expectedInfo, + "System Probe Process Module Status: Not running", + "System Probe Process Module Status: Running") + assert.Equal(sysProbeProcessModuleEnabledExpectedInfo, info) } func TestNotRunning(t *testing.T) { @@ -126,12 +147,11 @@ func TestNotRunning(t *testing.T) { defer reset() assert := assert.New(t) - conf := config.NewDefaultAgentConfig() server := testServer(t) assert.NotNil(server) defer server.Close() - err := initInfo(conf) + err := initInfo("host") assert.NoError(err) var buf bytes.Buffer // we are going to use a different port so we got @@ -144,7 +164,7 @@ func TestNotRunning(t *testing.T) { assert.NoError(err) newURL := "http://" + hostPort[0] + ":" + strconv.Itoa(port+1) - err = Info(&buf, conf, newURL) + err = Info(&buf, newURL) assert.Error(err) info := buf.String() assert.Equal(notRunningInfo, info) @@ -155,16 +175,15 @@ func TestError(t *testing.T) { defer reset() assert := assert.New(t) - conf := config.NewDefaultAgentConfig() server := testServer(t) assert.NotNil(server) defer server.Close() - err := initInfo(conf) + err := initInfo("host") assert.NoError(err) var buf bytes.Buffer // same port but a 404 response - err = Info(&buf, conf, server.URL+"/haha") + err = Info(&buf, server.URL+"/haha") assert.Error(err) info := buf.String() diff --git a/cmd/process-agent/main_common.go b/cmd/process-agent/main_common.go index 4cdb6b89fe4029..7d5b053aa093f4 100644 --- a/cmd/process-agent/main_common.go +++ b/cmd/process-agent/main_common.go @@ -21,9 +21,10 @@ import ( "github.com/DataDog/datadog-agent/cmd/process-agent/subcommands" sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" ddconfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/config/settings" "github.com/DataDog/datadog-agent/pkg/metadata/host" "github.com/DataDog/datadog-agent/pkg/pidfile" - "github.com/DataDog/datadog-agent/pkg/process/config" + "github.com/DataDog/datadog-agent/pkg/process/checks" "github.com/DataDog/datadog-agent/pkg/process/statsd" "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/tagger" @@ -40,8 +41,6 @@ import ( _ "github.com/DataDog/datadog-agent/pkg/workloadmeta/collectors" ) -const loggerName ddconfig.LoggerName = "PROCESS" - const ( agent6DisabledMessage = `process-agent not enabled. Set env var DD_PROCESS_CONFIG_PROCESS_COLLECTION_ENABLED=true or add @@ -85,8 +84,8 @@ func runAgent(globalParams *command.GlobalParams, exit chan struct{}) { // "Unknown environment variable" warning will show up whenever valid system probe environment variables are defined. ddconfig.InitSystemProbeConfig(ddconfig.Datadog) - if err := config.LoadConfigIfExists(globalParams.ConfFilePath); err != nil { - _ = log.Criticalf("Error parsing config: %s", err) + if err := command.BootstrapConfig(globalParams.ConfFilePath, false); err != nil { + _ = log.Critical(err) cleanupAndExit(1) } @@ -97,13 +96,7 @@ func runAgent(globalParams *command.GlobalParams, exit chan struct{}) { cleanupAndExit(1) } - config.InitRuntimeSettings() - - cfg, err := config.NewAgentConfig(loggerName, globalParams.ConfFilePath, syscfg) - if err != nil { - log.Criticalf("Error parsing config: %s", err) - cleanupAndExit(1) - } + initRuntimeSettings() mainCtx, mainCancel := context.WithCancel(context.Background()) defer mainCancel() @@ -114,8 +107,8 @@ func runAgent(globalParams *command.GlobalParams, exit chan struct{}) { } // Now that the logger is configured log host info - hostInfo := host.GetStatusInformation() - log.Infof("running on platform: %s", hostInfo.Platform) + hostStatus := host.GetStatusInformation() + log.Infof("running on platform: %s", hostStatus.Platform) agentVersion, _ := version.Agent() log.Infof("running version: %s", agentVersion.GetNumberAndPre()) @@ -152,18 +145,12 @@ func runAgent(globalParams *command.GlobalParams, exit chan struct{}) { } defer tagger.Stop() //nolint:errcheck - err = initInfo(cfg) - if err != nil { - log.Criticalf("Error initializing info: %s", err) - cleanupAndExit(1) - } - if err := statsd.Configure(ddconfig.GetBindHost(), ddconfig.Datadog.GetInt("dogstatsd_port")); err != nil { log.Criticalf("Error configuring statsd: %s", err) cleanupAndExit(1) } - enabledChecks := getChecks(syscfg, cfg.Orchestrator, ddconfig.IsAnyContainerFeaturePresent()) + enabledChecks := getChecks(syscfg, ddconfig.IsAnyContainerFeaturePresent()) // Exit if agent is not enabled. if len(enabledChecks) == 0 { @@ -227,10 +214,23 @@ func runAgent(globalParams *command.GlobalParams, exit chan struct{}) { expVarPort = ddconfig.DefaultProcessExpVarPort } + hostInfo, err := checks.CollectHostInfo() + if err != nil { + log.Criticalf("Error collecting host details: %s", err) + cleanupAndExit(1) + return + } + + err = initInfo(hostInfo.HostName) + if err != nil { + log.Criticalf("Error initializing info: %s", err) + cleanupAndExit(1) + } + if globalParams.Info { // using the debug port to get info to work url := fmt.Sprintf("http://localhost:%d/debug/vars", expVarPort) - if err := Info(os.Stdout, cfg, url); err != nil { + if err := Info(os.Stdout, url); err != nil { cleanupAndExit(1) } return @@ -253,12 +253,19 @@ func runAgent(globalParams *command.GlobalParams, exit chan struct{}) { _ = log.Error(err) } - cl, err := NewCollector(cfg, enabledChecks) + cl, err := NewCollector(syscfg, hostInfo, enabledChecks) if err != nil { log.Criticalf("Error creating collector: %s", err) cleanupAndExit(1) return } + cl.submitter, err = NewSubmitter(hostInfo.HostName, cl.UpdateRTStatus) + if err != nil { + log.Criticalf("Error creating checkSubmitter: %s", err) + cleanupAndExit(1) + return + } + if err := cl.run(exit); err != nil { log.Criticalf("Error starting collector: %s", err) os.Exit(1) @@ -286,3 +293,23 @@ func cleanupAndExitHandler(globalParams *command.GlobalParams) func(int) { os.Exit(status) } } + +// initRuntimeSettings registers settings to be added to the runtime config. +func initRuntimeSettings() { + // NOTE: Any settings you want to register should simply be added here + processRuntimeSettings := []settings.RuntimeSetting{ + settings.LogLevelRuntimeSetting{}, + settings.RuntimeMutexProfileFraction("runtime_mutex_profile_fraction"), + settings.RuntimeBlockProfileRate("runtime_block_profile_rate"), + settings.ProfilingGoroutines("internal_profiling_goroutines"), + settings.ProfilingRuntimeSetting{SettingName: "internal_profiling", Service: "process-agent"}, + } + + // Before we begin listening, register runtime settings + for _, setting := range processRuntimeSettings { + err := settings.RegisterRuntimeSetting(setting) + if err != nil { + _ = log.Warnf("Cannot initialize the runtime setting %s: %v", setting.Name(), err) + } + } +} diff --git a/cmd/process-agent/mocks/submitter.go b/cmd/process-agent/mocks/submitter.go new file mode 100644 index 00000000000000..e6782315e2bcac --- /dev/null +++ b/cmd/process-agent/mocks/submitter.go @@ -0,0 +1,54 @@ +// Code generated by mockery v2.16.0. DO NOT EDIT. + +package mocks + +import ( + process "github.com/DataDog/agent-payload/v5/process" + mock "github.com/stretchr/testify/mock" + + time "time" +) + +// Submitter is an autogenerated mock type for the Submitter type +type Submitter struct { + mock.Mock +} + +// Start provides a mock function with given fields: +func (_m *Submitter) Start() error { + ret := _m.Called() + + var r0 error + if rf, ok := ret.Get(0).(func() error); ok { + r0 = rf() + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// Stop provides a mock function with given fields: +func (_m *Submitter) Stop() { + _m.Called() +} + +// Submit provides a mock function with given fields: start, name, messages +func (_m *Submitter) Submit(start time.Time, name string, messages []process.MessageBody) { + _m.Called(start, name, messages) +} + +type mockConstructorTestingTNewSubmitter interface { + mock.TestingT + Cleanup(func()) +} + +// NewSubmitter creates a new instance of Submitter. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +func NewSubmitter(t mockConstructorTestingTNewSubmitter) *Submitter { + mock := &Submitter{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/cmd/process-agent/subcommands/check/check.go b/cmd/process-agent/subcommands/check/check.go index 1b3e30ad384420..d116f55241c953 100644 --- a/cmd/process-agent/subcommands/check/check.go +++ b/cmd/process-agent/subcommands/check/check.go @@ -23,7 +23,6 @@ import ( ddconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/metadata/host" "github.com/DataDog/datadog-agent/pkg/process/checks" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/net" "github.com/DataDog/datadog-agent/pkg/tagger" "github.com/DataDog/datadog-agent/pkg/tagger/local" @@ -43,6 +42,14 @@ type cliParams struct { waitInterval time.Duration } +func nextGroupID() func() int32 { + var groupID int32 + return func() int32 { + groupID++ + return groupID + } +} + // Commands returns a slice of subcommands for the `check` command in the Process Agent func Commands(globalParams *command.GlobalParams) []*cobra.Command { cliParams := &cliParams{ @@ -82,7 +89,7 @@ func runCheckCmd(cliParams *cliParams) error { // "Unknown environment variable" warning will show up whenever valid system probe environment variables are defined. ddconfig.InitSystemProbeConfig(ddconfig.Datadog) - if err := config.LoadConfigIfExists(cliParams.ConfFilePath); err != nil { + if err := command.BootstrapConfig(cliParams.GlobalParams.ConfFilePath, true); err != nil { return log.Criticalf("Error parsing config: %s", err) } @@ -92,17 +99,12 @@ func runCheckCmd(cliParams *cliParams) error { return log.Critical(err) } - cfg, err := config.NewAgentConfig(command.LoggerName, cliParams.ConfFilePath, syscfg) - if err != nil { - return log.Criticalf("Error parsing config: %s", err) - } - ctx, cancel := context.WithCancel(context.Background()) defer cancel() // Now that the logger is configured log host info - hostInfo := host.GetStatusInformation() - log.Infof("running on platform: %s", hostInfo.Platform) + hostStatus := host.GetStatusInformation() + log.Infof("running on platform: %s", hostStatus.Platform) agentVersion, _ := version.Agent() log.Infof("running version: %s", agentVersion.GetNumberAndPre()) @@ -136,7 +138,7 @@ func runCheckCmd(cliParams *cliParams) error { } defer tagger.Stop() //nolint:errcheck - sysInfo, err := checks.CollectSystemInfo(cfg) + hostInfo, err := checks.CollectHostInfo() if err != nil { log.Errorf("failed to collect system info: %s", err) } @@ -152,15 +154,17 @@ func runCheckCmd(cliParams *cliParams) error { _, checks.Process.SysprobeProcessModuleEnabled = syscfg.EnabledModules[sysconfig.ProcessModule] if checks.Process.SysprobeProcessModuleEnabled { - net.SetSystemProbePath(cfg.SystemProbeAddress) + net.SetSystemProbePath(syscfg.SocketAddress) } // Connections check requires process-check to have occurred first (for process creation ts), if cliParams.checkName == checks.Connections.Name() { // use a different client ID to prevent destructive querying of connections data checks.ProcessAgentClientID = "process-agent-cli-check-id" - checks.Process.Init(cfg, sysInfo) - checks.Process.Run(cfg, 0) //nolint:errcheck + if err := checks.Process.Init(nil, hostInfo); err != nil { + return err + } + _, _ = checks.Process.Run(nextGroupID(), nil) // Clean up the process check state only after the connections check is executed cleanups = append(cleanups, checks.Process.Cleanup) } @@ -169,58 +173,48 @@ func runCheckCmd(cliParams *cliParams) error { for _, ch := range checks.All { names = append(names, ch.Name()) - if ch.Name() == cliParams.checkName { - ch.Init(cfg, sysInfo) - cleanups = append(cleanups, ch.Cleanup) - return runCheck(cliParams, cfg, ch) + cfg := &checks.SysProbeConfig{ + MaxConnsPerMessage: syscfg.MaxConnsPerMessage, + SystemProbeAddress: syscfg.SocketAddress, + } + + if !matchingCheck(cliParams.checkName, ch) { + continue } - withRealTime, ok := ch.(checks.CheckWithRealTime) - if ok && withRealTime.RealTimeName() == cliParams.checkName { - withRealTime.Init(cfg, sysInfo) - cleanups = append(cleanups, withRealTime.Cleanup) - return runCheckAsRealTime(cliParams, cfg, withRealTime) + if err = ch.Init(cfg, hostInfo); err != nil { + return err } + cleanups = append(cleanups, ch.Cleanup) + return runCheck(cliParams, ch) } return log.Errorf("invalid check '%s', choose from: %v", cliParams.checkName, names) } -func runCheck(cliParams *cliParams, cfg *config.AgentConfig, ch checks.Check) error { - // Run the check once to prime the cache. - if _, err := ch.Run(cfg, 0); err != nil { - return fmt.Errorf("collection error: %s", err) +func matchingCheck(checkName string, ch checks.Check) bool { + if ch.SupportsRunOptions() { + if checks.RTName(ch.Name()) == checkName { + return true + } } - log.Infof("Waiting %s before running the check", cliParams.waitInterval.String()) - time.Sleep(cliParams.waitInterval) + return ch.Name() == checkName +} - if !cliParams.checkOutputJSON { - printResultsBanner(ch.Name()) - } +func runCheck(cliParams *cliParams, ch checks.Check) error { + nextGroupID := nextGroupID() - msgs, err := ch.Run(cfg, 1) - if err != nil { - return fmt.Errorf("collection error: %s", err) + options := &checks.RunOptions{ + RunStandard: true, } - return printResults(ch.Name(), msgs, cliParams.checkOutputJSON) -} -func runCheckAsRealTime(cliParams *cliParams, cfg *config.AgentConfig, ch checks.CheckWithRealTime) error { - options := checks.RunOptions{ - RunStandard: true, - RunRealTime: true, + if cliParams.checkName == checks.RTName(ch.Name()) { + options.RunRealtime = true } - var ( - groupID int32 - nextGroupID = func() int32 { - groupID++ - return groupID - } - ) // We need to run the check twice in order to initialize the stats // Rate calculations rely on having two datapoints - if _, err := ch.RunWithOptions(cfg, nextGroupID, options); err != nil { + if _, err := ch.Run(nextGroupID, options); err != nil { return fmt.Errorf("collection error: %s", err) } @@ -228,15 +222,20 @@ func runCheckAsRealTime(cliParams *cliParams, cfg *config.AgentConfig, ch checks time.Sleep(cliParams.waitInterval) if !cliParams.checkOutputJSON { - printResultsBanner(ch.RealTimeName()) + printResultsBanner(cliParams.checkName) } - run, err := ch.RunWithOptions(cfg, nextGroupID, options) + result, err := ch.Run(nextGroupID, options) if err != nil { return fmt.Errorf("collection error: %s", err) } - return printResults(ch.RealTimeName(), run.RealTime, cliParams.checkOutputJSON) + msgs := result.Payloads() + if options != nil && options.RunRealtime { + msgs = result.RealtimePayloads() + } + + return printResults(cliParams.checkName, msgs, cliParams.checkOutputJSON) } func printResultsBanner(name string) { diff --git a/cmd/process-agent/subcommands/config/config.go b/cmd/process-agent/subcommands/config/config.go index 27380c4eef06cb..c3533070d33d11 100644 --- a/cmd/process-agent/subcommands/config/config.go +++ b/cmd/process-agent/subcommands/config/config.go @@ -15,7 +15,7 @@ import ( ddconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/config/settings" settingshttp "github.com/DataDog/datadog-agent/pkg/config/settings/http" - "github.com/DataDog/datadog-agent/pkg/process/config" + "github.com/DataDog/datadog-agent/pkg/util/log" ) // Commands returns a slice of subcommands for the `config` command in the Process Agent @@ -146,17 +146,8 @@ func getConfigValue(globalParams *command.GlobalParams, args []string) error { } func getClient(globalParams *command.GlobalParams) (settings.Client, error) { - // Set up the config so we can get the port later - // We set this up differently from the main process-agent because this way is quieter - cfg := config.NewDefaultAgentConfig() - if globalParams.ConfFilePath != "" { - if err := config.LoadConfigIfExists(globalParams.ConfFilePath); err != nil { - return nil, err - } - } - err := cfg.LoadAgentConfig(globalParams.ConfFilePath) - if err != nil { - return nil, err + if err := command.BootstrapConfig(globalParams.ConfFilePath, true); err != nil { + return nil, log.Criticalf("Error parsing config: %s", err) } httpClient := apiutil.GetClient(false) diff --git a/cmd/process-agent/subcommands/events/events.go b/cmd/process-agent/subcommands/events/events.go index 549ee1d003ece3..33e344e78b5a3a 100644 --- a/cmd/process-agent/subcommands/events/events.go +++ b/cmd/process-agent/subcommands/events/events.go @@ -21,7 +21,6 @@ import ( sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" ddconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/process/checks" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/events" "github.com/DataDog/datadog-agent/pkg/process/events/model" "github.com/DataDog/datadog-agent/pkg/process/util" @@ -89,22 +88,16 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { func bootstrapEventsCmd(cliParams *cliParams) error { ddconfig.InitSystemProbeConfig(ddconfig.Datadog) - if err := config.LoadConfigIfExists(cliParams.ConfFilePath); err != nil { + if err := command.BootstrapConfig(cliParams.GlobalParams.ConfFilePath, true); err != nil { return log.Criticalf("Error parsing config: %s", err) } // Load system-probe.yaml file and merge it to the global Datadog config - sysCfg, err := sysconfig.Merge(cliParams.SysProbeConfFilePath) + _, err := sysconfig.Merge(cliParams.SysProbeConfFilePath) if err != nil { return log.Critical(err) } - // Set up logger - _, err = config.NewAgentConfig(command.LoggerName, cliParams.ConfFilePath, sysCfg) - if err != nil { - return log.Criticalf("Error parsing config: %s", err) - } - return nil } diff --git a/cmd/process-agent/subcommands/status/status.go b/cmd/process-agent/subcommands/status/status.go index a57bade135b913..187941df730dd8 100644 --- a/cmd/process-agent/subcommands/status/status.go +++ b/cmd/process-agent/subcommands/status/status.go @@ -153,8 +153,8 @@ func getStatusURL() (string, error) { } func runStatus(cliParams *cliParams) error { - if err := command.BootstrapConfig(cliParams.GlobalParams); err != nil { - return err + if err := command.BootstrapConfig(cliParams.GlobalParams.ConfFilePath, true); err != nil { + return log.Criticalf("Error parsing config: %s", err) } statusURL, err := getStatusURL() diff --git a/cmd/process-agent/subcommands/taggerlist/tagger_list.go b/cmd/process-agent/subcommands/taggerlist/tagger_list.go index 4c3a2cbacb1792..23b90772871b7f 100644 --- a/cmd/process-agent/subcommands/taggerlist/tagger_list.go +++ b/cmd/process-agent/subcommands/taggerlist/tagger_list.go @@ -49,8 +49,8 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { func taggerList(cliParams *cliParams) error { log.Info("Got a request for the tagger-list. Calling tagger.") - if err := command.BootstrapConfig(cliParams.GlobalParams); err != nil { - return err + if err := command.BootstrapConfig(cliParams.GlobalParams.ConfFilePath, true); err != nil { + return log.Criticalf("Error parsing config: %s", err) } taggerURL, err := getTaggerURL() diff --git a/cmd/process-agent/subcommands/workloadlist/command.go b/cmd/process-agent/subcommands/workloadlist/command.go index 912761e988cdc6..ad9d4acee1177f 100644 --- a/cmd/process-agent/subcommands/workloadlist/command.go +++ b/cmd/process-agent/subcommands/workloadlist/command.go @@ -40,7 +40,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(workloadList, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false).LogForOneShot("PROCESS", "off", true)), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("PROCESS", "off", true)}), core.Bundle, ) }, diff --git a/cmd/process-agent/submitter.go b/cmd/process-agent/submitter.go new file mode 100644 index 00000000000000..ffda769374b80a --- /dev/null +++ b/cmd/process-agent/submitter.go @@ -0,0 +1,526 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package main + +import ( + "fmt" + "hash/fnv" + "net/http" + "os" + "strconv" + "sync" + "time" + + model "github.com/DataDog/agent-payload/v5/process" + ddconfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/config/resolver" + "github.com/DataDog/datadog-agent/pkg/forwarder" + "github.com/DataDog/datadog-agent/pkg/forwarder/transaction" + "github.com/DataDog/datadog-agent/pkg/orchestrator" + oconfig "github.com/DataDog/datadog-agent/pkg/orchestrator/config" + "github.com/DataDog/datadog-agent/pkg/process/checks" + "github.com/DataDog/datadog-agent/pkg/process/statsd" + "github.com/DataDog/datadog-agent/pkg/process/util/api" + apicfg "github.com/DataDog/datadog-agent/pkg/process/util/api/config" + "github.com/DataDog/datadog-agent/pkg/process/util/api/headers" + "github.com/DataDog/datadog-agent/pkg/util/kubernetes/clustername" + "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/version" +) + +type Submitter interface { + Submit(start time.Time, name string, messages []model.MessageBody) + Start() error + Stop() +} + +var _ Submitter = &checkSubmitter{} + +type checkSubmitter struct { + // Per-check Weighted Queues + processResults *api.WeightedQueue + rtProcessResults *api.WeightedQueue + eventResults *api.WeightedQueue + connectionsResults *api.WeightedQueue + podResults *api.WeightedQueue + + // Forwarders + processForwarder *forwarder.DefaultForwarder + rtProcessForwarder *forwarder.DefaultForwarder + connectionsForwarder *forwarder.DefaultForwarder + podForwarder *forwarder.DefaultForwarder + eventForwarder *forwarder.DefaultForwarder + + orchestrator *oconfig.OrchestratorConfig + hostname string + + exit chan struct{} + wg *sync.WaitGroup + + // Used to cache the hash result of the host name and the pid of the process agent. Being used as part of + // getRequestID method. Must use pointer, to distinguish between uninitialized value and the theoretical but yet + // possible 0 value for the hash result. + requestIDCachedHash *uint64 + dropCheckPayloads []string + + forwarderRetryMaxQueueBytes int + + // Callback for setting realtime mode. If this is nil realtime mode is never toggled. + updateRTStatusCallback func([]*model.CollectorStatus) +} + +func NewSubmitter(hostname string, enableRealtimeCallback func([]*model.CollectorStatus)) (*checkSubmitter, error) { + queueBytes := ddconfig.Datadog.GetInt("process_config.process_queue_bytes") + if queueBytes <= 0 { + log.Warnf("Invalid queue bytes size: %d. Using default value: %d", queueBytes, ddconfig.DefaultProcessQueueBytes) + queueBytes = ddconfig.DefaultProcessQueueBytes + } + + queueSize := ddconfig.Datadog.GetInt("process_config.queue_size") + if queueSize <= 0 { + log.Warnf("Invalid check queue size: %d. Using default value: %d", queueSize, ddconfig.DefaultProcessQueueSize) + queueSize = ddconfig.DefaultProcessQueueSize + } + processResults := api.NewWeightedQueue(queueSize, int64(queueBytes)) + log.Debugf("Creating process check queue with max_size=%d and max_weight=%d", processResults.MaxSize(), processResults.MaxWeight()) + + rtQueueSize := ddconfig.Datadog.GetInt("process_config.rt_queue_size") + if rtQueueSize <= 0 { + log.Warnf("Invalid rt check queue size: %d. Using default value: %d", rtQueueSize, ddconfig.DefaultProcessRTQueueSize) + rtQueueSize = ddconfig.DefaultProcessRTQueueSize + } + // reuse main queue's ProcessQueueBytes because it's unlikely that it'll reach to that size in bytes, so we don't need a separate config for it + rtProcessResults := api.NewWeightedQueue(rtQueueSize, int64(queueBytes)) + log.Debugf("Creating rt process check queue with max_size=%d and max_weight=%d", rtProcessResults.MaxSize(), rtProcessResults.MaxWeight()) + + connectionsResults := api.NewWeightedQueue(queueSize, int64(queueBytes)) + log.Debugf("Creating connections queue with max_size=%d and max_weight=%d", connectionsResults.MaxSize(), connectionsResults.MaxWeight()) + + orchestrator := oconfig.NewDefaultOrchestratorConfig() + if err := orchestrator.Load(); err != nil { + return nil, err + } + podResults := api.NewWeightedQueue(queueSize, int64(orchestrator.PodQueueBytes)) + log.Debugf("Creating pod check queue with max_size=%d and max_weight=%d", podResults.MaxSize(), podResults.MaxWeight()) + + eventResults := api.NewWeightedQueue(queueSize, int64(queueBytes)) + log.Debugf("Creating event check queue with max_size=%d and max_weight=%d", eventResults.MaxSize(), eventResults.MaxWeight()) + + dropCheckPayloads := ddconfig.Datadog.GetStringSlice("process_config.drop_check_payloads") + if len(dropCheckPayloads) > 0 { + log.Debugf("Dropping payloads from checks: %v", dropCheckPayloads) + } + + // Forwarder initialization + processAPIEndpoints, err := getAPIEndpoints() + if err != nil { + return nil, err + } + processForwarderOpts := forwarder.NewOptionsWithResolvers(resolver.NewSingleDomainResolvers(apicfg.KeysPerDomains(processAPIEndpoints))) + processForwarderOpts.DisableAPIKeyChecking = true + processForwarderOpts.RetryQueuePayloadsTotalMaxSize = queueBytes // Allow more in-flight requests than the default + processForwarder := forwarder.NewDefaultForwarder(processForwarderOpts) + + // rt forwarder reuses processForwarder's config + rtProcessForwarder := forwarder.NewDefaultForwarder(processForwarderOpts) + + // connections forwarder reuses processForwarder's config + connectionsForwarder := forwarder.NewDefaultForwarder(processForwarderOpts) + + podForwarderOpts := forwarder.NewOptionsWithResolvers(resolver.NewSingleDomainResolvers(apicfg.KeysPerDomains(orchestrator.OrchestratorEndpoints))) + podForwarderOpts.DisableAPIKeyChecking = true + podForwarderOpts.RetryQueuePayloadsTotalMaxSize = queueBytes // Allow more in-flight requests than the default + podForwarder := forwarder.NewDefaultForwarder(podForwarderOpts) + + processEventsAPIEndpoints, err := getEventsAPIEndpoints() + if err != nil { + return nil, err + } + eventForwarderOpts := forwarder.NewOptionsWithResolvers(resolver.NewSingleDomainResolvers(apicfg.KeysPerDomains(processEventsAPIEndpoints))) + eventForwarderOpts.DisableAPIKeyChecking = true + eventForwarderOpts.RetryQueuePayloadsTotalMaxSize = queueBytes // Allow more in-flight requests than the default + eventForwarder := forwarder.NewDefaultForwarder(eventForwarderOpts) + + printStartMessage(hostname, processAPIEndpoints, processEventsAPIEndpoints, orchestrator.OrchestratorEndpoints) + return &checkSubmitter{ + processResults: processResults, + rtProcessResults: rtProcessResults, + eventResults: eventResults, + connectionsResults: connectionsResults, + podResults: podResults, + + processForwarder: processForwarder, + rtProcessForwarder: rtProcessForwarder, + connectionsForwarder: connectionsForwarder, + podForwarder: podForwarder, + eventForwarder: eventForwarder, + + orchestrator: orchestrator, + hostname: hostname, + + dropCheckPayloads: dropCheckPayloads, + + forwarderRetryMaxQueueBytes: queueBytes, + + updateRTStatusCallback: enableRealtimeCallback, + + wg: &sync.WaitGroup{}, + exit: make(chan struct{}), + }, nil +} + +func printStartMessage(hostname string, processAPIEndpoints, processEventsAPIEndpoints, orchestratorEndpoints []apicfg.Endpoint) { + eps := make([]string, 0, len(processAPIEndpoints)) + for _, e := range processAPIEndpoints { + eps = append(eps, e.Endpoint.String()) + } + orchestratorEps := make([]string, 0, len(orchestratorEndpoints)) + for _, e := range orchestratorEndpoints { + orchestratorEps = append(orchestratorEps, e.Endpoint.String()) + } + eventsEps := make([]string, 0, len(processEventsAPIEndpoints)) + for _, e := range processEventsAPIEndpoints { + eventsEps = append(eventsEps, e.Endpoint.String()) + } + + log.Infof("Starting checkSubmitter for host=%s, endpoints=%s, events endpoints=%s orchestrator endpoints=%s", hostname, eps, eventsEps, orchestratorEps) +} + +func (s *checkSubmitter) Submit(start time.Time, name string, messages []model.MessageBody) { + results := s.resultsQueueForCheck(name) + if name == checks.PodCheckName { + s.messagesToResultsQueue(start, checks.PodCheckName, messages[:len(messages)/2], results) + if s.orchestrator.IsManifestCollectionEnabled { + s.messagesToResultsQueue(start, checks.PodCheckManifestName, messages[len(messages)/2:], results) + } + return + } + + s.messagesToResultsQueue(start, name, messages, results) +} + +func (s *checkSubmitter) Start() error { + if err := s.processForwarder.Start(); err != nil { + return fmt.Errorf("error starting forwarder: %s", err) + } + + if err := s.rtProcessForwarder.Start(); err != nil { + return fmt.Errorf("error starting RT forwarder: %s", err) + } + + if err := s.connectionsForwarder.Start(); err != nil { + return fmt.Errorf("error starting connections forwarder: %s", err) + } + + if err := s.podForwarder.Start(); err != nil { + return fmt.Errorf("error starting pod forwarder: %s", err) + } + + if err := s.eventForwarder.Start(); err != nil { + return fmt.Errorf("error starting event forwarder: %s", err) + } + + s.wg.Add(1) + go func() { + defer s.wg.Done() + s.consumePayloads(s.processResults, s.processForwarder) + }() + + s.wg.Add(1) + go func() { + defer s.wg.Done() + s.consumePayloads(s.rtProcessResults, s.rtProcessForwarder) + }() + + s.wg.Add(1) + go func() { + defer s.wg.Done() + s.consumePayloads(s.connectionsResults, s.connectionsForwarder) + }() + + s.wg.Add(1) + go func() { + defer s.wg.Done() + s.consumePayloads(s.podResults, s.podForwarder) + }() + + s.wg.Add(1) + go func() { + defer s.wg.Done() + s.consumePayloads(s.eventResults, s.eventForwarder) + }() + + s.wg.Add(1) + go func() { + defer s.wg.Done() + + heartbeat := time.NewTicker(15 * time.Second) + defer heartbeat.Stop() + + queueSizeTicker := time.NewTicker(10 * time.Second) + defer queueSizeTicker.Stop() + + queueLogTicker := time.NewTicker(time.Minute) + defer queueLogTicker.Stop() + + agentVersion, _ := version.Agent() + tags := []string{ + fmt.Sprintf("version:%s", agentVersion.GetNumberAndPre()), + fmt.Sprintf("revision:%s", agentVersion.Commit), + } + for { + select { + case <-heartbeat.C: + statsd.Client.Gauge("datadog.process.agent", 1, tags, 1) //nolint:errcheck + case <-queueSizeTicker.C: + updateQueueStats(&queueStats{ + processQueueSize: s.processResults.Len(), + rtProcessQueueSize: s.rtProcessResults.Len(), + connectionsQueueSize: s.connectionsResults.Len(), + eventQueueSize: s.eventResults.Len(), + podQueueSize: s.podResults.Len(), + processQueueBytes: s.processResults.Weight(), + rtProcessQueueBytes: s.rtProcessResults.Weight(), + connectionsQueueBytes: s.connectionsResults.Weight(), + eventQueueBytes: s.eventResults.Weight(), + podQueueBytes: s.podResults.Weight(), + }) + case <-queueLogTicker.C: + s.logQueuesSize() + case <-s.exit: + return + } + } + }() + + return nil +} + +func (s *checkSubmitter) Stop() { + s.processResults.Stop() + s.rtProcessResults.Stop() + s.connectionsResults.Stop() + s.podResults.Stop() + s.eventResults.Stop() + + s.processForwarder.Stop() + s.rtProcessForwarder.Stop() + s.connectionsForwarder.Stop() + s.podForwarder.Stop() + s.eventForwarder.Stop() + + close(s.exit) + s.wg.Wait() +} + +func (s *checkSubmitter) consumePayloads(results *api.WeightedQueue, fwd forwarder.Forwarder) { + for { + // results.Poll() will return ok=false when stopped + item, ok := results.Poll() + if !ok { + return + } + result := item.(*checkResult) + for _, payload := range result.payloads { + var ( + forwarderPayload = transaction.NewBytesPayloadsWithoutMetaData([]*[]byte{&payload.body}) + responses chan forwarder.Response + err error + updateRTStatus bool + ) + + if s.shouldDropPayload(result.name) { + continue + } + + switch result.name { + case checks.ProcessCheckName: + updateRTStatus = true + responses, err = fwd.SubmitProcessChecks(forwarderPayload, payload.headers) + case checks.RTProcessCheckName: + updateRTStatus = true + responses, err = fwd.SubmitRTProcessChecks(forwarderPayload, payload.headers) + case checks.ContainerCheckName: + updateRTStatus = true + responses, err = fwd.SubmitContainerChecks(forwarderPayload, payload.headers) + case checks.RTContainerCheckName: + updateRTStatus = true + responses, err = fwd.SubmitRTContainerChecks(forwarderPayload, payload.headers) + case checks.ConnectionsCheckName: + updateRTStatus = true + responses, err = fwd.SubmitConnectionChecks(forwarderPayload, payload.headers) + // Pod check metadata + case checks.PodCheckName: + responses, err = fwd.SubmitOrchestratorChecks(forwarderPayload, payload.headers, int(orchestrator.K8sPod)) + // Pod check manifest data + case checks.PodCheckManifestName: + responses, err = fwd.SubmitOrchestratorManifests(forwarderPayload, payload.headers) + case checks.ProcessDiscovery.Name(): + // A Process Discovery check does not change the RT mode + responses, err = fwd.SubmitProcessDiscoveryChecks(forwarderPayload, payload.headers) + case checks.ProcessEventsCheckName: + responses, err = fwd.SubmitProcessEventChecks(forwarderPayload, payload.headers) + default: + err = fmt.Errorf("unsupported payload type: %s", result.name) + } + + if err != nil { + log.Errorf("Unable to submit payload: %s", err) + continue + } + + if statuses := readResponseStatuses(result.name, responses); len(statuses) > 0 { + if updateRTStatus && s.updateRTStatusCallback != nil { + s.updateRTStatusCallback(statuses) + } + } + } + } +} + +func (s *checkSubmitter) resultsQueueForCheck(name string) *api.WeightedQueue { + switch name { + case checks.PodCheckName: + return s.podResults + case checks.RTProcessCheckName, checks.RTContainerCheckName: + return s.rtProcessResults + case checks.ConnectionsCheckName: + return s.connectionsResults + case checks.ProcessEventsCheckName: + return s.eventResults + } + return s.processResults +} + +func (s *checkSubmitter) logQueuesSize() { + var ( + processSize = s.processResults.Len() + rtProcessSize = s.rtProcessResults.Len() + connectionsSize = s.connectionsResults.Len() + eventsSize = s.eventResults.Len() + podSize = s.podResults.Len() + ) + + if processSize == 0 && + rtProcessSize == 0 && + connectionsSize == 0 && + eventsSize == 0 && + podSize == 0 { + return + } + + log.Infof( + "Delivery queues: process[size=%d, weight=%d], rtprocess[size=%d, weight=%d], connections[size=%d, weight=%d], event[size=%d, weight=%d], pod[size=%d, weight=%d]", + processSize, s.processResults.Weight(), + rtProcessSize, s.rtProcessResults.Weight(), + connectionsSize, s.connectionsResults.Weight(), + eventsSize, s.eventResults.Weight(), + podSize, s.podResults.Weight(), + ) +} + +func (s *checkSubmitter) messagesToResultsQueue(start time.Time, name string, messages []model.MessageBody, queue *api.WeightedQueue) { + result := s.messagesToCheckResult(start, name, messages) + if result == nil { + return + } + queue.Add(result) + // update proc and container count for info + updateProcContainerCount(messages) +} + +func (s *checkSubmitter) messagesToCheckResult(start time.Time, name string, messages []model.MessageBody) *checkResult { + if len(messages) == 0 { + return nil + } + + payloads := make([]checkPayload, 0, len(messages)) + sizeInBytes := 0 + + for messageIndex, m := range messages { + body, err := api.EncodePayload(m) + if err != nil { + log.Errorf("Unable to encode message: %s", err) + continue + } + + agentVersion, _ := version.Agent() + extraHeaders := make(http.Header) + extraHeaders.Set(headers.TimestampHeader, strconv.Itoa(int(start.Unix()))) + extraHeaders.Set(headers.HostHeader, s.hostname) + extraHeaders.Set(headers.ProcessVersionHeader, agentVersion.GetNumber()) + extraHeaders.Set(headers.ContainerCountHeader, strconv.Itoa(getContainerCount(m))) + extraHeaders.Set(headers.ContentTypeHeader, headers.ProtobufContentType) + + if s.orchestrator.OrchestrationCollectionEnabled { + if cid, err := clustername.GetClusterID(); err == nil && cid != "" { + extraHeaders.Set(headers.ClusterIDHeader, cid) + } + extraHeaders.Set(headers.EVPOriginHeader, "process-agent") + extraHeaders.Set(headers.EVPOriginVersionHeader, version.AgentVersion) + } + + switch name { + case checks.ProcessEvents.Name(): + extraHeaders.Set(headers.EVPOriginHeader, "process-agent") + extraHeaders.Set(headers.EVPOriginVersionHeader, version.AgentVersion) + case checks.Connections.Name(), checks.Process.Name(): + requestID := s.getRequestID(start, messageIndex) + log.Debugf("the request id of the current message: %s", requestID) + extraHeaders.Set(headers.RequestIDHeader, requestID) + } + + payloads = append(payloads, checkPayload{ + body: body, + headers: extraHeaders, + }) + + sizeInBytes += len(body) + } + + return &checkResult{ + name: name, + payloads: payloads, + sizeInBytes: int64(sizeInBytes), + } +} + +// getRequestID generates a unique identifier (string representation of 64 bits integer) that is composed as follows: +// 1. 22 bits of the seconds in the current month. +// 2. 28 bits of hash of the hostname and process agent pid. +// 3. 14 bits of the current message in the batch being sent to the server. +func (s *checkSubmitter) getRequestID(start time.Time, chunkIndex int) string { + // The epoch is the beginning of the month of the `start` variable. + epoch := time.Date(start.Year(), start.Month(), 1, 0, 0, 0, 0, start.Location()) + // We are taking the seconds in the current month, and representing them under 22 bits. + // In a month we have 60 seconds per minute * 60 minutes per hour * 24 hours per day * maximum 31 days a month + // which is 2678400, and it can be represented with log2(2678400) = 21.35 bits. + seconds := (uint64(start.Sub(epoch).Seconds()) & secondsMask) << (hashNumberOfBits + chunkNumberOfBits) + + //// Next, we want 28 bits of hashed hostname & process agent pid. + if s.requestIDCachedHash == nil { + hash := fnv.New32() + hash.Write([]byte(s.hostname)) + hash.Write([]byte(strconv.Itoa(os.Getpid()))) + hostNamePIDHash := (uint64(hash.Sum32()) & hashMask) << chunkNumberOfBits + s.requestIDCachedHash = &hostNamePIDHash + } + + // Next, we take up to 14 bits to represent the message index in the batch. + // It means that we support up to 16384 (2 ^ 14) different messages being sent on the same batch. + chunk := uint64(chunkIndex & chunkMask) + return fmt.Sprintf("%d", seconds+*s.requestIDCachedHash+chunk) +} + +func (s *checkSubmitter) shouldDropPayload(check string) bool { + for _, d := range s.dropCheckPayloads { + if d == check { + return true + } + } + + return false +} diff --git a/cmd/process-agent/submitter_test.go b/cmd/process-agent/submitter_test.go new file mode 100644 index 00000000000000..1a4faa452743ed --- /dev/null +++ b/cmd/process-agent/submitter_test.go @@ -0,0 +1,310 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package main + +import ( + "strconv" + "testing" + "time" + + "github.com/stretchr/testify/assert" + + model "github.com/DataDog/agent-payload/v5/process" + ddconfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/process/util/api/headers" + "github.com/DataDog/datadog-agent/pkg/version" +) + +func TestNewCollectorQueueSize(t *testing.T) { + tests := []struct { + name string + override bool + queueSize int + expectedQueueSize int + }{ + { + name: "default queue size", + override: false, + queueSize: 42, + expectedQueueSize: ddconfig.DefaultProcessQueueSize, + }, + { + name: "valid queue size override", + override: true, + queueSize: 42, + expectedQueueSize: 42, + }, + { + name: "invalid negative queue size override", + override: true, + queueSize: -10, + expectedQueueSize: ddconfig.DefaultProcessQueueSize, + }, + { + name: "invalid 0 queue size override", + override: true, + queueSize: 0, + expectedQueueSize: ddconfig.DefaultProcessQueueSize, + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + mockConfig := ddconfig.Mock(t) + if tc.override { + mockConfig.Set("process_config.queue_size", tc.queueSize) + } + + c, err := NewSubmitter(testHostName, nil) + assert.NoError(t, err) + assert.Equal(t, tc.expectedQueueSize, c.processResults.MaxSize()) + assert.Equal(t, tc.expectedQueueSize, c.podResults.MaxSize()) + }) + } +} + +func TestNewCollectorRTQueueSize(t *testing.T) { + tests := []struct { + name string + override bool + queueSize int + expectedQueueSize int + }{ + { + name: "default queue size", + override: false, + queueSize: 2, + expectedQueueSize: ddconfig.DefaultProcessRTQueueSize, + }, + { + name: "valid queue size override", + override: true, + queueSize: 2, + expectedQueueSize: 2, + }, + { + name: "invalid negative size override", + override: true, + queueSize: -2, + expectedQueueSize: ddconfig.DefaultProcessRTQueueSize, + }, + { + name: "invalid 0 queue size override", + override: true, + queueSize: 0, + expectedQueueSize: ddconfig.DefaultProcessRTQueueSize, + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + mockConfig := ddconfig.Mock(t) + if tc.override { + mockConfig.Set("process_config.rt_queue_size", tc.queueSize) + } + + c, err := NewSubmitter(testHostName, nil) + assert.NoError(t, err) + assert.Equal(t, tc.expectedQueueSize, c.rtProcessResults.MaxSize()) + }) + } +} + +func TestNewCollectorProcessQueueBytes(t *testing.T) { + tests := []struct { + name string + override bool + queueBytes int + expectedQueueSize int + }{ + { + name: "default queue size", + override: false, + queueBytes: 42000, + expectedQueueSize: ddconfig.DefaultProcessQueueBytes, + }, + { + name: "valid queue size override", + override: true, + queueBytes: 42000, + expectedQueueSize: 42000, + }, + { + name: "invalid negative queue size override", + override: true, + queueBytes: -2, + expectedQueueSize: ddconfig.DefaultProcessQueueBytes, + }, + { + name: "invalid 0 queue size override", + override: true, + queueBytes: 0, + expectedQueueSize: ddconfig.DefaultProcessQueueBytes, + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + mockConfig := ddconfig.Mock(t) + if tc.override { + mockConfig.Set("process_config.process_queue_bytes", tc.queueBytes) + } + + s, err := NewSubmitter(testHostName, nil) + assert.NoError(t, err) + assert.Equal(t, int64(tc.expectedQueueSize), s.processResults.MaxWeight()) + assert.Equal(t, int64(tc.expectedQueueSize), s.rtProcessResults.MaxWeight()) + assert.Equal(t, tc.expectedQueueSize, s.forwarderRetryMaxQueueBytes) + }) + } +} + +func TestCollectorMessagesToCheckResult(t *testing.T) { + submitter, err := NewSubmitter(testHostName, nil) + assert.NoError(t, err) + + now := time.Now() + agentVersion, _ := version.Agent() + + requestID := submitter.getRequestID(now, 0) + + tests := []struct { + name string + message model.MessageBody + expectHeaders map[string]string + }{ + { + name: "process", + message: &model.CollectorProc{ + Containers: []*model.Container{ + {}, {}, {}, + }, + }, + expectHeaders: map[string]string{ + headers.TimestampHeader: strconv.Itoa(int(now.Unix())), + headers.HostHeader: testHostName, + headers.ProcessVersionHeader: agentVersion.GetNumber(), + headers.ContainerCountHeader: "3", + headers.ContentTypeHeader: headers.ProtobufContentType, + headers.RequestIDHeader: requestID, + }, + }, + { + name: "rt_process", + message: &model.CollectorRealTime{ + ContainerStats: []*model.ContainerStat{ + {}, {}, {}, + }, + }, + expectHeaders: map[string]string{ + headers.TimestampHeader: strconv.Itoa(int(now.Unix())), + headers.HostHeader: testHostName, + headers.ProcessVersionHeader: agentVersion.GetNumber(), + headers.ContainerCountHeader: "3", + headers.ContentTypeHeader: headers.ProtobufContentType, + }, + }, + { + name: "container", + message: &model.CollectorContainer{ + Containers: []*model.Container{ + {}, {}, + }, + }, + expectHeaders: map[string]string{ + headers.TimestampHeader: strconv.Itoa(int(now.Unix())), + headers.HostHeader: testHostName, + headers.ProcessVersionHeader: agentVersion.GetNumber(), + headers.ContainerCountHeader: "2", + headers.ContentTypeHeader: headers.ProtobufContentType, + }, + }, + { + name: "rt_container", + message: &model.CollectorContainerRealTime{ + Stats: []*model.ContainerStat{ + {}, {}, {}, {}, {}, + }, + }, + expectHeaders: map[string]string{ + headers.TimestampHeader: strconv.Itoa(int(now.Unix())), + headers.HostHeader: testHostName, + headers.ProcessVersionHeader: agentVersion.GetNumber(), + headers.ContainerCountHeader: "5", + headers.ContentTypeHeader: headers.ProtobufContentType, + }, + }, + { + name: "process_discovery", + message: &model.CollectorProcDiscovery{}, + expectHeaders: map[string]string{ + headers.TimestampHeader: strconv.Itoa(int(now.Unix())), + headers.HostHeader: testHostName, + headers.ProcessVersionHeader: agentVersion.GetNumber(), + headers.ContainerCountHeader: "0", + headers.ContentTypeHeader: headers.ProtobufContentType, + }, + }, + { + name: "process_events", + message: &model.CollectorProcEvent{}, + expectHeaders: map[string]string{ + headers.TimestampHeader: strconv.Itoa(int(now.Unix())), + headers.HostHeader: testHostName, + headers.ProcessVersionHeader: agentVersion.GetNumber(), + headers.ContainerCountHeader: "0", + headers.ContentTypeHeader: headers.ProtobufContentType, + headers.EVPOriginHeader: "process-agent", + headers.EVPOriginVersionHeader: version.AgentVersion, + }, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + messages := []model.MessageBody{ + test.message, + } + result := submitter.messagesToCheckResult(now, test.name, messages) + assert.Equal(t, test.name, result.name) + assert.Len(t, result.payloads, 1) + payload := result.payloads[0] + assert.Len(t, payload.headers, len(test.expectHeaders)) + for k, v := range test.expectHeaders { + assert.Equal(t, v, payload.headers.Get(k)) + } + }) + } +} + +func Test_getRequestID(t *testing.T) { + s, err := NewSubmitter(testHostName, nil) + assert.NoError(t, err) + + fixedDate1 := time.Date(2022, 9, 1, 0, 0, 1, 0, time.Local) + id1 := s.getRequestID(fixedDate1, 1) + id2 := s.getRequestID(fixedDate1, 1) + // The calculation should be deterministic, so making sure the parameters generates the same id. + assert.Equal(t, id1, id2) + fixedDate2 := time.Date(2022, 9, 1, 0, 0, 2, 0, time.Local) + id3 := s.getRequestID(fixedDate2, 1) + + // The request id is based on time, so if the difference it only the time, then the new ID should be greater. + id1Num, _ := strconv.ParseUint(id1, 10, 64) + id3Num, _ := strconv.ParseUint(id3, 10, 64) + assert.Greater(t, id3Num, id1Num) + + // Increasing the chunk index should increase the id. + id4 := s.getRequestID(fixedDate2, 3) + id4Num, _ := strconv.ParseUint(id4, 10, 64) + assert.Equal(t, id3Num+2, id4Num) + + // Changing the host -> changing the hash. + s.hostname = "host2" + s.requestIDCachedHash = nil + id5 := s.getRequestID(fixedDate1, 1) + assert.NotEqual(t, id1, id5) +} diff --git a/cmd/security-agent/app/app.go b/cmd/security-agent/app/app.go index 22e7ff71e90d34..8e7e3c913cfb83 100644 --- a/cmd/security-agent/app/app.go +++ b/cmd/security-agent/app/app.go @@ -21,20 +21,20 @@ import ( "github.com/fatih/color" "github.com/spf13/cobra" - ddgostatsd "github.com/DataDog/datadog-go/v5/statsd" - commonagent "github.com/DataDog/datadog-agent/cmd/agent/common" "github.com/DataDog/datadog-agent/cmd/manager" "github.com/DataDog/datadog-agent/cmd/security-agent/api" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/subcommands/compliance" - subconfig "github.com/DataDog/datadog-agent/cmd/security-agent/app/subcommands/config" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/subcommands/flare" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/subcommands/runtime" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/subcommands/status" - subversion "github.com/DataDog/datadog-agent/cmd/security-agent/app/subcommands/version" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/cmd/security-agent/flags" + "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/compliance" + subconfig "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/config" + "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/flare" + "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/runtime" + "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/status" + "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/version" compconfig "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/pkg/aggregator" + coreconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/config/resolver" "github.com/DataDog/datadog-agent/pkg/config/settings" "github.com/DataDog/datadog-agent/pkg/forwarder" @@ -48,15 +48,14 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/profiling" "github.com/DataDog/datadog-agent/pkg/util/startstop" - "github.com/DataDog/datadog-agent/pkg/version" + pkgversion "github.com/DataDog/datadog-agent/pkg/version" "github.com/DataDog/datadog-agent/pkg/workloadmeta" - - coreconfig "github.com/DataDog/datadog-agent/pkg/config" + ddgostatsd "github.com/DataDog/datadog-go/v5/statsd" ) const ( // loggerName is the name of the security agent logger - loggerName coreconfig.LoggerName = common.LoggerName + loggerName coreconfig.LoggerName = command.LoggerName ) var ( @@ -66,7 +65,7 @@ var ( ) func CreateSecurityAgentCmd() *cobra.Command { - globalParams := common.GlobalParams{} + globalParams := command.GlobalParams{} var flagNoColor bool SecurityAgentCmd := &cobra.Command{ @@ -81,7 +80,7 @@ Datadog Security Agent takes care of running compliance and security checks.`, } // TODO(paulcacheux): remove this once all subcommands have been converted to use config component - _, err := compconfig.MergeConfigurationFiles("datadog", globalParams.ConfPathArray, cmd.Flags().Lookup("cfgpath").Changed) + _, err := compconfig.MergeConfigurationFiles("datadog", globalParams.ConfigFilePaths, cmd.Flags().Lookup(flags.CfgPath).Changed) return err }, PersistentPostRun: func(cmd *cobra.Command, args []string) { @@ -89,20 +88,20 @@ Datadog Security Agent takes care of running compliance and security checks.`, }, } - defaultConfPathArray := []string{ + defaultConfigFilePaths := []string{ path.Join(commonagent.DefaultConfPath, "datadog.yaml"), path.Join(commonagent.DefaultConfPath, "security-agent.yaml"), } - SecurityAgentCmd.PersistentFlags().StringArrayVarP(&globalParams.ConfPathArray, "cfgpath", "c", defaultConfPathArray, "path to a yaml configuration file") - SecurityAgentCmd.PersistentFlags().BoolVarP(&flagNoColor, "no-color", "n", false, "disable color output") + SecurityAgentCmd.PersistentFlags().StringArrayVarP(&globalParams.ConfigFilePaths, flags.CfgPath, "c", defaultConfigFilePaths, "path to a yaml configuration file") + SecurityAgentCmd.PersistentFlags().BoolVarP(&flagNoColor, flags.NoColor, "n", false, "disable color output") - factories := []common.SubcommandFactory{ + factories := []command.SubcommandFactory{ status.Commands, flare.Commands, subconfig.Commands, compliance.Commands, runtime.Commands, - subversion.Commands, + version.Commands, StartCommands, } @@ -167,7 +166,12 @@ func RunAgent(ctx context.Context, pidfilePath string) (err error) { if !coreconfig.Datadog.IsSet("api_key") { log.Critical("no API key configured, exiting") - return nil + + // A sleep is necessary so that sysV doesn't think the agent has failed + // to startup because of an error. Only applies on Debian 7. + time.Sleep(5 * time.Second) + + return errAllComponentsDisabled } err = manager.ConfigureAutoExit(ctx) @@ -213,7 +217,7 @@ func RunAgent(ctx context.Context, pidfilePath string) (err error) { opts.UseOrchestratorForwarder = false opts.UseContainerLifecycleForwarder = false demux := aggregator.InitAndStartAgentDemultiplexer(opts, hostnameDetected) - demux.AddAgentStartupTelemetry(fmt.Sprintf("%s - Datadog Security Agent", version.AgentVersion)) + demux.AddAgentStartupTelemetry(fmt.Sprintf("%s - Datadog Security Agent", pkgversion.AgentVersion)) stopper = startstop.NewSerialStopper() @@ -327,7 +331,7 @@ func StopAgent(cancel context.CancelFunc) { func setupInternalProfiling() error { cfg := coreconfig.Datadog if cfg.GetBool(secAgentKey("internal_profiling.enabled")) { - v, _ := version.Agent() + v, _ := pkgversion.Agent() cfgSite := cfg.GetString(secAgentKey("internal_profiling.site")) cfgURL := cfg.GetString(secAgentKey("security_agent.internal_profiling.profile_dd_url")) diff --git a/cmd/security-agent/app/start.go b/cmd/security-agent/app/start.go index 66411cc18814cb..5616a05e400b41 100644 --- a/cmd/security-agent/app/start.go +++ b/cmd/security-agent/app/start.go @@ -8,23 +8,24 @@ package app import ( "context" "errors" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/spf13/cobra" "os" "os/signal" "syscall" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" + "github.com/DataDog/datadog-agent/cmd/security-agent/flags" "github.com/DataDog/datadog-agent/pkg/tagger" "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/spf13/cobra" ) type startCliParams struct { - *common.GlobalParams + *command.GlobalParams pidfilePath string } -func StartCommands(globalParams *common.GlobalParams) []*cobra.Command { +func StartCommands(globalParams *command.GlobalParams) []*cobra.Command { cliParams := startCliParams{ GlobalParams: globalParams, } @@ -38,7 +39,7 @@ func StartCommands(globalParams *common.GlobalParams) []*cobra.Command { }, } - startCmd.Flags().StringVarP(&cliParams.pidfilePath, "pidfile", "p", "", "path to the pidfile") + startCmd.Flags().StringVarP(&cliParams.pidfilePath, flags.PidFile, "p", "", "path to the pidfile") return []*cobra.Command{startCmd} } diff --git a/cmd/security-agent/app/subcommands/config/config.go b/cmd/security-agent/app/subcommands/config/config.go deleted file mode 100644 index 8be053de769e39..00000000000000 --- a/cmd/security-agent/app/subcommands/config/config.go +++ /dev/null @@ -1,49 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubeapiserver -// +build kubeapiserver - -package config - -import ( - "fmt" - - "github.com/spf13/cobra" - - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" - cmdconfig "github.com/DataDog/datadog-agent/cmd/security-agent/commands/config" - "github.com/DataDog/datadog-agent/pkg/api/util" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/config/settings" - settingshttp "github.com/DataDog/datadog-agent/pkg/config/settings/http" -) - -func Commands(globalParams *common.GlobalParams) []*cobra.Command { - cmd := cmdconfig.Config(getSettingsClient) - return []*cobra.Command{cmd} -} - -func setupConfig(cmd *cobra.Command) error { - err := config.SetupLogger(common.LoggerName, config.GetEnvDefault("DD_LOG_LEVEL", "off"), "", "", false, true, false) - if err != nil { - fmt.Printf("Cannot setup logger, exiting: %v\n", err) - return err - } - - return util.SetAuthToken() -} - -func getSettingsClient(cmd *cobra.Command, _ []string) (settings.Client, error) { - err := setupConfig(cmd) - if err != nil { - return nil, err - } - - c := util.GetClient(false) - apiConfigURL := fmt.Sprintf("https://localhost:%v/agent/config", config.Datadog.GetInt("security_agent.cmd_port")) - - return settingshttp.NewClient(c, apiConfigURL, "security-agent"), nil -} diff --git a/cmd/cluster-agent/app/health.go b/cmd/security-agent/command/command.go similarity index 54% rename from cmd/cluster-agent/app/health.go rename to cmd/security-agent/command/command.go index 8d4b852e6062a3..d0f9fa7f2b8941 100644 --- a/cmd/cluster-agent/app/health.go +++ b/cmd/security-agent/command/command.go @@ -3,15 +3,16 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:build kubeapiserver -// +build kubeapiserver - -package app +package command import ( - "github.com/DataDog/datadog-agent/cmd/cluster-agent/commands" + "github.com/spf13/cobra" ) -func init() { - ClusterAgentCmd.AddCommand(commands.Health(loggerName, &confPath, &flagNoColor)) +type GlobalParams struct { + ConfigFilePaths []string } + +type SubcommandFactory func(globalParams *GlobalParams) []*cobra.Command + +const LoggerName = "SECURITY" diff --git a/cmd/security-agent/commands/config/config.go b/cmd/security-agent/commands/config/config.go deleted file mode 100644 index 3bc6dc10d66eee..00000000000000 --- a/cmd/security-agent/commands/config/config.go +++ /dev/null @@ -1,143 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package config - -import ( - "fmt" - - "github.com/DataDog/datadog-agent/pkg/config/settings" - - "github.com/spf13/cobra" -) - -// Config returns the main cobra config command. -func Config(getClient settings.ClientBuilder) *cobra.Command { - cmd := &cobra.Command{ - Use: "config", - Short: "Print the runtime configuration of a running agent", - Long: ``, - RunE: func(cmd *cobra.Command, args []string) error { return showRuntimeConfiguration(getClient, cmd, args) }, - } - - cmd.AddCommand(listRuntime(getClient)) - cmd.AddCommand(set(getClient)) - cmd.AddCommand(get(getClient)) - - return cmd -} - -// listRuntime returns a cobra command to list the settings that can be changed at runtime. -func listRuntime(getClient settings.ClientBuilder) *cobra.Command { - return &cobra.Command{ - Use: "list-runtime", - Short: "List settings that can be changed at runtime", - Long: ``, - RunE: func(cmd *cobra.Command, args []string) error { - return listRuntimeConfigurableValue(getClient, cmd, args) - }, - } -} - -// set returns a cobra command to set a config value at runtime. -func set(getClient settings.ClientBuilder) *cobra.Command { - return &cobra.Command{ - Use: "set [setting] [value]", - Short: "Set, for the current runtime, the value of a given configuration setting", - Long: ``, - RunE: func(cmd *cobra.Command, args []string) error { return setConfigValue(getClient, cmd, args) }, - } -} - -// get returns a cobra command to get a runtime config value. -func get(getClient settings.ClientBuilder) *cobra.Command { - return &cobra.Command{ - Use: "get [setting]", - Short: "Get, for the current runtime, the value of a given configuration setting", - Long: ``, - RunE: func(cmd *cobra.Command, args []string) error { return getConfigValue(getClient, cmd, args) }, - } -} - -func showRuntimeConfiguration(getClient settings.ClientBuilder, cmd *cobra.Command, args []string) error { - c, err := getClient(cmd, args) - if err != nil { - return err - } - - runtimeConfig, err := c.FullConfig() - if err != nil { - return err - } - - fmt.Println(runtimeConfig) - - return nil -} - -func listRuntimeConfigurableValue(getClient settings.ClientBuilder, cmd *cobra.Command, args []string) error { - c, err := getClient(cmd, args) - if err != nil { - return err - } - - settingsList, err := c.List() - if err != nil { - return err - } - - fmt.Println("=== Settings that can be changed at runtime ===") - for setting, details := range settingsList { - if !details.Hidden { - fmt.Printf("%-30s %s\n", setting, details.Description) - } - } - - return nil -} - -func setConfigValue(getClient settings.ClientBuilder, cmd *cobra.Command, args []string) error { - if len(args) != 2 { - return fmt.Errorf("exactly two parameters are required: the setting name and its value") - } - - c, err := getClient(cmd, args) - if err != nil { - return err - } - - hidden, err := c.Set(args[0], args[1]) - if err != nil { - return err - } - - if hidden { - fmt.Printf("IMPORTANT: you have modified a hidden option, this may incur billing charges or have other unexpected side-effects.\n") - } - - fmt.Printf("Configuration setting %s is now set to: %s\n", args[0], args[1]) - - return nil -} - -func getConfigValue(getClient settings.ClientBuilder, cmd *cobra.Command, args []string) error { - if len(args) != 1 { - return fmt.Errorf("a single setting name must be specified") - } - - c, err := getClient(cmd, args) - if err != nil { - return err - } - - value, err := c.Get(args[0]) - if err != nil { - return err - } - - fmt.Printf("%s is set to: %v\n", args[0], value) - - return nil -} diff --git a/cmd/security-agent/flags/flags_common.go b/cmd/security-agent/flags/flags_common.go new file mode 100644 index 00000000000000..4d580bfd97d753 --- /dev/null +++ b/cmd/security-agent/flags/flags_common.go @@ -0,0 +1,64 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package flags + +const ( + // Start Subcommand + // CfgPath defines the cfgpath flag + CfgPath = "cfgpath" + NoColor = "no-color" + PidFile = "pidfile" + + // Status Subcommand + JSON = "json" + PrettyJSON = "pretty-json" + File = "file" // Also for check subcommand + + // Flare Subcommand + Email = "email" + Send = "send" + + // Runtime Subcommand + PoliciesDir = "policies-dir" + EventFile = "event-file" + Debug = "debug" + Check = "check" + OutputPath = "output-path" + WithArgs = "with-args" + SnapshotInterfaces = "snapshot-interfaces" + RuleID = "rule-id" // Also for compliance subcommand + + // Runtime Activity Dump Subcommand + Name = "name" + ContainerID = "containerID" + Comm = "comm" + Timeout = "timeout" + DifferentiateArgs = "differentiate-args" + Output = "output" // TODO: unify with OutputPath + Compression = "compression" + Format = "format" + RemoteCompression = "remote-compression" + RemoteFormat = "remote-format" + Input = "input" + Remote = "remote" + + // Compliance Subcommand + SourceType = "source-type" + SourceName = "source-name" + ResourceID = "resource-id" + ResourceType = "resource-type" + Tags = "tags" + Data = "data" + + // Check Subcommand + Framework = "framework" + Verbose = "verbose" + Report = "report" + OverrideRegoInput = "override-rego-input" + DumpRegoInput = "dump-rego-input" + DumpReports = "dump-reports" // TODO: Unify with OutputPath + SkipRegoEval = "skip-rego-eval" +) diff --git a/cmd/security-agent/main_windows.go b/cmd/security-agent/main_windows.go deleted file mode 100644 index 0fca3ac5fbedd7..00000000000000 --- a/cmd/security-agent/main_windows.go +++ /dev/null @@ -1,153 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package main - -import ( - "context" - "fmt" - _ "net/http/pprof" - "os" - "path/filepath" - - "time" - - "github.com/DataDog/datadog-agent/cmd/security-agent/app" - - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/util/flavor" - "github.com/DataDog/datadog-agent/pkg/util/log" - - "github.com/DataDog/datadog-agent/pkg/util/winutil" - - "golang.org/x/sys/windows/svc" - "golang.org/x/sys/windows/svc/debug" - "golang.org/x/sys/windows/svc/eventlog" -) - -var ( - elog debug.Log - defaultLogFile = "c:\\programdata\\datadog\\logs\\security-agent.log" - - // DefaultConfPath points to the folder containing datadog.yaml - DefaultConfPath = "c:\\programdata\\datadog" -) - -func init() { - // ISSUE: We need to make change to the MSI to install Security Agent. - pd, err := winutil.GetProgramDataDirForProduct("Datadog Security Agent") - if err == nil { - DefaultConfPath = pd - defaultLogFile = filepath.Join(pd, "logs", "security-agent.log") - } else { - winutil.LogEventViewer(ServiceName, 0x8000000F, defaultLogFile) - } -} - -// ServiceName is the name of the service in service control manager -const ServiceName = "datadog-security-agent" - -// EnableLoggingToFile -- set up logging to file - -func main() { - // set the Agent flavor - flavor.SetFlavor(flavor.Dogstatsd) - config.Datadog.AddConfigPath(DefaultConfPath) - - isIntSess, err := svc.IsAnInteractiveSession() - if err != nil { - fmt.Printf("failed to determine if we are running in an interactive session: %v\n", err) - } - if !isIntSess { - // confPath = DefaultConfPath - runService(false) - return - } - defer log.Flush() - - if err = app.CreateSecurityAgentCmd().Execute(); err != nil { - log.Error(err) - os.Exit(-1) - } -} - -type myservice struct{} - -func (m *myservice) Execute(args []string, r <-chan svc.ChangeRequest, changes chan<- svc.Status) (ssec bool, errno uint32) { - const cmdsAccepted = svc.AcceptStop | svc.AcceptShutdown - changes <- svc.Status{State: svc.StartPending} - - log.Infof("Service control function") - - ctx, cancel := context.WithCancel(context.Background()) - err := app.RunAgent(ctx, "") - - if err != nil { - log.Errorf("Failed to start agent %v", err) - elog.Error(0xc0000008, err.Error()) - errno = 1 // indicates non-successful return from handler. - app.StopAgent(cancel) - changes <- svc.Status{State: svc.Stopped} - return - } - elog.Info(0x40000003, ServiceName) - - changes <- svc.Status{State: svc.Running, Accepts: cmdsAccepted} - -loop: - for c := range r { - switch c.Cmd { - case svc.Interrogate: - changes <- c.CurrentStatus - // Testing deadlock from https://code.google.com/p/winsvc/issues/detail?id=4 - time.Sleep(100 * time.Millisecond) - changes <- c.CurrentStatus - case svc.Stop: - log.Info("Received stop message from service control manager") - elog.Info(0x4000000b, ServiceName) - break loop - case svc.PreShutdown: - log.Info("Received pre-shutdown message from service control manager") - elog.Info(0x4000000d, config.ServiceName) - break loop - case svc.Shutdown: - log.Info("Received shutdown message from service control manager") - elog.Info(0x4000000c, ServiceName) - break loop - default: - log.Warnf("unexpected control request #%d", c) - elog.Warning(0xc0000005, fmt.Sprint(c.Cmd)) - } - } - elog.Info(0x40000006, ServiceName) - log.Infof("Initiating service shutdown") - changes <- svc.Status{State: svc.StopPending} - app.StopAgent(cancel) - changes <- svc.Status{State: svc.Stopped} - return -} - -func runService(isDebug bool) { - var err error - if isDebug { - elog = debug.New(ServiceName) - } else { - elog, err = eventlog.Open(ServiceName) - if err != nil { - return - } - } - defer elog.Close() - - elog.Info(0x40000007, ServiceName) - run := svc.Run - - err = run(ServiceName, &myservice{}) - if err != nil { - elog.Error(0xc0000008, err.Error()) - return - } - elog.Info(0x40000004, ServiceName) -} diff --git a/cmd/security-agent/app/subcommands/check/command.go b/cmd/security-agent/subcommands/check/command.go similarity index 65% rename from cmd/security-agent/app/subcommands/check/command.go rename to cmd/security-agent/subcommands/check/command.go index aeee937641384c..7dc48dfa78d1e3 100644 --- a/cmd/security-agent/app/subcommands/check/command.go +++ b/cmd/security-agent/subcommands/check/command.go @@ -17,13 +17,13 @@ import ( "github.com/spf13/cobra" "go.uber.org/fx" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/cmd/security-agent/flags" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/comp/core/log" "github.com/DataDog/datadog-agent/pkg/compliance/agent" "github.com/DataDog/datadog-agent/pkg/compliance/checks" - pkgconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/util/flavor" "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/hostname" @@ -31,7 +31,10 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/startstop" ) -type checkCliParams struct { +// CliParams needs to be exported because the compliance subcommand is tightly coupled to this subcommand and tests need to be able to access this type. +type CliParams struct { + *command.GlobalParams + args []string framework string @@ -44,19 +47,19 @@ type checkCliParams struct { skipRegoEval bool } -func SecAgentCommands(globalParams *common.GlobalParams) []*cobra.Command { - bp := core.CreateBundleParams( - "", - core.WithSecurityAgentConfigFilePaths(globalParams.ConfPathArray), - core.WithConfigLoadSecurityAgent(true), - ).LogForOneShot(common.LoggerName, "info", true) +// Commands returns a cobra command to run security agent checks +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + bundleParams := core.BundleParams{ + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "info", true), + } - return Commands(bp) + return CommandsWrapped(bundleParams) } -// Commands returns a cobra command to run security agent checks -func Commands(bundleParams core.BundleParams) []*cobra.Command { - checkArgs := &checkCliParams{} +// CommandsWrapped exists to allow for an entry point from the Cluster-Agent. We should remove this and refactor once Check becomes a component that both the Cluster Agent and the Security Agent can use. +func CommandsWrapped(bundleParams core.BundleParams) []*cobra.Command { + checkArgs := &CliParams{} cmd := &cobra.Command{ Use: "check", @@ -64,7 +67,11 @@ func Commands(bundleParams core.BundleParams) []*cobra.Command { Long: ``, RunE: func(cmd *cobra.Command, args []string) error { checkArgs.args = args - return fxutil.OneShot(runCheck, + if checkArgs.verbose { + bundleParams.LogParams = log.LogForOneShot(bundleParams.LogParams.LoggerName(), "trace", true) + } + + return fxutil.OneShot(RunCheck, fx.Supply(checkArgs), fx.Supply(bundleParams), core.Bundle, @@ -72,19 +79,19 @@ func Commands(bundleParams core.BundleParams) []*cobra.Command { }, } - cmd.Flags().StringVarP(&checkArgs.framework, "framework", "", "", "Framework to run the checks from") - cmd.Flags().StringVarP(&checkArgs.file, "file", "f", "", "Compliance suite file to read rules from") - cmd.Flags().BoolVarP(&checkArgs.verbose, "verbose", "v", false, "Include verbose details") - cmd.Flags().BoolVarP(&checkArgs.report, "report", "r", false, "Send report") - cmd.Flags().StringVarP(&checkArgs.overrideRegoInput, "override-rego-input", "", "", "Rego input to use when running rego checks") - cmd.Flags().StringVarP(&checkArgs.dumpRegoInput, "dump-rego-input", "", "", "Path to file where to dump the Rego input JSON") - cmd.Flags().StringVarP(&checkArgs.dumpReports, "dump-reports", "", "", "Path to file where to dump reports") - cmd.Flags().BoolVarP(&checkArgs.skipRegoEval, "skip-rego-eval", "", false, "Skip rego evaluation") + cmd.Flags().StringVarP(&checkArgs.framework, flags.Framework, "", "", "Framework to run the checks from") + cmd.Flags().StringVarP(&checkArgs.file, flags.File, "f", "", "Compliance suite file to read rules from") + cmd.Flags().BoolVarP(&checkArgs.verbose, flags.Verbose, "v", false, "Include verbose details") + cmd.Flags().BoolVarP(&checkArgs.report, flags.Report, "r", false, "Send report") + cmd.Flags().StringVarP(&checkArgs.overrideRegoInput, flags.OverrideRegoInput, "", "", "Rego input to use when running rego checks") + cmd.Flags().StringVarP(&checkArgs.dumpRegoInput, flags.DumpRegoInput, "", "", "Path to file where to dump the Rego input JSON") + cmd.Flags().StringVarP(&checkArgs.dumpReports, flags.DumpReports, "", "", "Path to file where to dump reports") + cmd.Flags().BoolVarP(&checkArgs.skipRegoEval, flags.SkipRegoEval, "", false, "Skip rego evaluation") return []*cobra.Command{cmd} } -func runCheck(log log.Component, config config.Component, checkArgs *checkCliParams) error { +func RunCheck(log log.Component, config config.Component, checkArgs *CliParams) error { if checkArgs.skipRegoEval && checkArgs.dumpReports != "" { return errors.New("skipping the rego evaluation does not allow the generation of reports") } @@ -107,15 +114,6 @@ func runCheck(log log.Component, config config.Component, checkArgs *checkCliPar checks.MayFail(checks.WithDocker()), checks.MayFail(checks.WithAudit()), }...) - - if pkgconfig.IsKubernetes() { - nodeLabels, err := agent.WaitGetNodeLabels() - if err != nil { - log.Error(err) - } else { - options = append(options, checks.WithNodeLabels(nodeLabels)) - } - } } var ruleID string diff --git a/cmd/security-agent/subcommands/check/command_test.go b/cmd/security-agent/subcommands/check/command_test.go new file mode 100644 index 00000000000000..4bb1d74bd61f13 --- /dev/null +++ b/cmd/security-agent/subcommands/check/command_test.go @@ -0,0 +1,53 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +package check + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +func TestCommands(t *testing.T) { + tests := []struct { + name string + cliInput []string + check func(cliParams *CliParams, params core.BundleParams) + }{ + { + name: "check", + cliInput: []string{"check"}, + check: func(cliParams *CliParams, params core.BundleParams) { + require.Equal(t, command.LoggerName, params.LoggerName(), "logger name not matching") + require.Equal(t, "info", params.LogLevelFn(nil), "params.LogLevelFn not matching") + }, + }, + { + name: "verbose", + cliInput: []string{"check", "--verbose"}, + check: func(cliParams *CliParams, params core.BundleParams) { + require.Equal(t, command.LoggerName, params.LoggerName(), "logger name not matching") + require.Equal(t, "trace", params.LogLevelFn(nil), "params.LogLevelFn not matching") + }, + }, + } + + for _, test := range tests { + fxutil.TestOneShotSubcommand(t, + Commands(&command.GlobalParams{}), + test.cliInput, + RunCheck, + test.check, + ) + } +} diff --git a/cmd/security-agent/app/subcommands/check/command_unsupported.go b/cmd/security-agent/subcommands/check/command_unsupported.go similarity index 71% rename from cmd/security-agent/app/subcommands/check/command_unsupported.go rename to cmd/security-agent/subcommands/check/command_unsupported.go index 79a85fa25d747d..96580a4bcbe02c 100644 --- a/cmd/security-agent/app/subcommands/check/command_unsupported.go +++ b/cmd/security-agent/subcommands/check/command_unsupported.go @@ -8,11 +8,10 @@ package check import ( + "github.com/DataDog/datadog-agent/cmd/security-agent/command" "github.com/spf13/cobra" - - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" ) -func SecAgentCommands(globalParams *common.GlobalParams) []*cobra.Command { +func Commands(globalParams *command.GlobalParams) []*cobra.Command { return nil } diff --git a/cmd/security-agent/app/subcommands/check/reporter.go b/cmd/security-agent/subcommands/check/reporter.go similarity index 100% rename from cmd/security-agent/app/subcommands/check/reporter.go rename to cmd/security-agent/subcommands/check/reporter.go diff --git a/cmd/security-agent/app/subcommands/compliance/command.go b/cmd/security-agent/subcommands/compliance/command.go similarity index 58% rename from cmd/security-agent/app/subcommands/compliance/command.go rename to cmd/security-agent/subcommands/compliance/command.go index 172825d38e972f..f42a8078646940 100644 --- a/cmd/security-agent/app/subcommands/compliance/command.go +++ b/cmd/security-agent/subcommands/compliance/command.go @@ -7,15 +7,19 @@ package compliance import ( "fmt" + "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/cmd/security-agent/flags" "strings" "github.com/spf13/cobra" "go.uber.org/fx" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/subcommands/check" + "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/check" "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" compconfig "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" complog "github.com/DataDog/datadog-agent/comp/core/log" "github.com/DataDog/datadog-agent/pkg/compliance/event" coreconfig "github.com/DataDog/datadog-agent/pkg/config" @@ -23,20 +27,20 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/startstop" ) -func Commands(globalParams *common.GlobalParams) []*cobra.Command { +func Commands(globalParams *command.GlobalParams) []*cobra.Command { complianceCmd := &cobra.Command{ Use: "compliance", Short: "Compliance Agent utility commands", } complianceCmd.AddCommand(complianceEventCommand(globalParams)) - complianceCmd.AddCommand(check.SecAgentCommands(globalParams)...) + complianceCmd.AddCommand(check.Commands(globalParams)...) return []*cobra.Command{complianceCmd} } -type eventCliParams struct { - *common.GlobalParams +type cliParams struct { + *command.GlobalParams sourceName string sourceType string @@ -44,8 +48,8 @@ type eventCliParams struct { data []string } -func complianceEventCommand(globalParams *common.GlobalParams) *cobra.Command { - eventArgs := &eventCliParams{ +func complianceEventCommand(globalParams *command.GlobalParams) *cobra.Command { + eventArgs := &cliParams{ GlobalParams: globalParams, } @@ -55,29 +59,28 @@ func complianceEventCommand(globalParams *common.GlobalParams) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(eventRun, fx.Supply(eventArgs), - fx.Supply(core.CreateBundleParams( - "", - core.WithSecurityAgentConfigFilePaths(globalParams.ConfPathArray), - core.WithConfigLoadSecurityAgent(true), - ).LogForOneShot(common.LoggerName, "info", true)), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "info", true), + }), core.Bundle, ) }, Hidden: true, } - eventCmd.Flags().StringVarP(&eventArgs.sourceType, "source-type", "", "compliance", "Log source name") - eventCmd.Flags().StringVarP(&eventArgs.sourceName, "source-name", "", "compliance-agent", "Log source name") - eventCmd.Flags().StringVarP(&eventArgs.event.AgentRuleID, "rule-id", "", "", "Rule ID") - eventCmd.Flags().StringVarP(&eventArgs.event.ResourceID, "resource-id", "", "", "Resource ID") - eventCmd.Flags().StringVarP(&eventArgs.event.ResourceType, "resource-type", "", "", "Resource type") - eventCmd.Flags().StringSliceVarP(&eventArgs.event.Tags, "tags", "t", []string{"security:compliance"}, "Tags") - eventCmd.Flags().StringSliceVarP(&eventArgs.data, "data", "d", []string{}, "Data KV fields") + eventCmd.Flags().StringVarP(&eventArgs.sourceType, flags.SourceType, "", "compliance", "Log source name") + eventCmd.Flags().StringVarP(&eventArgs.sourceName, flags.SourceName, "", "compliance-agent", "Log source name") + eventCmd.Flags().StringVarP(&eventArgs.event.AgentRuleID, flags.RuleID, "", "", "Rule ID") + eventCmd.Flags().StringVarP(&eventArgs.event.ResourceID, flags.ResourceID, "", "", "Resource ID") + eventCmd.Flags().StringVarP(&eventArgs.event.ResourceType, flags.ResourceType, "", "", "Resource type") + eventCmd.Flags().StringSliceVarP(&eventArgs.event.Tags, flags.Tags, "t", []string{"security:compliance"}, "Tags") + eventCmd.Flags().StringSliceVarP(&eventArgs.data, flags.Data, "d", []string{}, "Data KV fields") return eventCmd } -func eventRun(log complog.Component, config compconfig.Component, eventArgs *eventCliParams) error { +func eventRun(log complog.Component, config compconfig.Component, eventArgs *cliParams) error { stopper := startstop.NewSerialStopper() defer stopper.Stop() diff --git a/cmd/security-agent/subcommands/compliance/command_kubeapiserver_test.go b/cmd/security-agent/subcommands/compliance/command_kubeapiserver_test.go new file mode 100644 index 00000000000000..2c643fef45bdd0 --- /dev/null +++ b/cmd/security-agent/subcommands/compliance/command_kubeapiserver_test.go @@ -0,0 +1,93 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +package compliance + +import ( + "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/check" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/comp/core" +) + +// This test suite requires build flags because the check child command requires them. +// go test ./cmd/security-agent/subcommands/compliance --tags=\!windows,kubeapiserver + +// TestCheckSubcommand ultimately uses the check package, so its dependencies are different from the event subcommand +func TestCheckSubcommand(t *testing.T) { + tests := []struct { + name string + cliInput []string + check func(cliParams *check.CliParams, params core.BundleParams) + }{ + { + name: "compliance check", + cliInput: []string{"compliance", "check"}, + check: func(cliParams *check.CliParams, params core.BundleParams) { + require.Equal(t, command.LoggerName, params.LoggerName(), "logger name not matching") + require.Equal(t, "info", params.LogLevelFn(nil), "params.LogLevelFn not matching") + }, + }, + { + name: "compliance check verbose", + cliInput: []string{"compliance", "check", "--verbose"}, + check: func(cliParams *check.CliParams, params core.BundleParams) { + require.Equal(t, command.LoggerName, params.LoggerName(), "logger name not matching") + require.Equal(t, "trace", params.LogLevelFn(nil), "params.LogLevelFn not matching") + }, + }, + } + + for _, test := range tests { + fxutil.TestOneShotSubcommand(t, + Commands(&command.GlobalParams{}), + test.cliInput, + check.RunCheck, + test.check, + ) + } +} + +func TestCommand_kubeapiserver(t *testing.T) { + tests := []struct { + name string + cliInput []string + check func(cliParams *cliParams, params core.BundleParams) + }{ + { + name: "compliance event tags", + cliInput: []string{"compliance", "event", "--tags", "test:tag"}, + check: func(cliParams *cliParams, params core.BundleParams) { + require.Equal(t, command.LoggerName, params.LoggerName(), "logger name not matching") + require.Equal(t, "info", params.LogLevelFn(nil), "params.LogLevelFn not matching") + require.Equal(t, []string{"test:tag"}, cliParams.event.Tags, "tags arg input not matching") + }, + }, + } + + for _, test := range tests { + rootCommand := Commands(&command.GlobalParams{})[0] + + var subcommandNames []string + for _, subcommand := range rootCommand.Commands() { + subcommandNames = append(subcommandNames, subcommand.Use) + } + require.Equal(t, []string{"check", "event"}, subcommandNames, "subcommand missing") + + fxutil.TestOneShotSubcommand(t, + Commands(&command.GlobalParams{}), + test.cliInput, + eventRun, + test.check, + ) + } +} diff --git a/cmd/security-agent/subcommands/compliance/command_test.go b/cmd/security-agent/subcommands/compliance/command_test.go new file mode 100644 index 00000000000000..c853a30e96df16 --- /dev/null +++ b/cmd/security-agent/subcommands/compliance/command_test.go @@ -0,0 +1,57 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build windows || !kubeapiserver + +package compliance + +import ( + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/comp/core" +) + +// This test suite requires the opposite build flags of the check package +// in order to test the compliance command in environments that cannot have the check subcommand. + +func TestCommands(t *testing.T) { + tests := []struct { + name string + cliInput []string + check func(cliParams *cliParams, params core.BundleParams) + }{ + { + name: "compliance event tags", + cliInput: []string{"compliance", "event", "--tags", "test:tag"}, + check: func(cliParams *cliParams, params core.BundleParams) { + require.Equal(t, command.LoggerName, params.LoggerName(), "logger name not matching") + require.Equal(t, "info", params.LogLevelFn(nil), "log level not matching") + require.Equal(t, []string{"test:tag"}, cliParams.event.Tags, "tags arg input not matching") + }, + }, + } + + for _, test := range tests { + rootCommand := Commands(&command.GlobalParams{})[0] + + var subcommandNames []string + for _, subcommand := range rootCommand.Commands() { + subcommandNames = append(subcommandNames, subcommand.Use) + } + + require.Equal(t, []string{"event"}, subcommandNames, "subcommand missing") + + fxutil.TestOneShotSubcommand(t, + Commands(&command.GlobalParams{}), + test.cliInput, + eventRun, + test.check, + ) + } +} diff --git a/cmd/security-agent/app/subcommands/compliance/compliance.go b/cmd/security-agent/subcommands/compliance/compliance.go similarity index 92% rename from cmd/security-agent/app/subcommands/compliance/compliance.go rename to cmd/security-agent/subcommands/compliance/compliance.go index cdea0851b2c608..425b2e98991b63 100644 --- a/cmd/security-agent/app/subcommands/compliance/compliance.go +++ b/cmd/security-agent/subcommands/compliance/compliance.go @@ -7,12 +7,10 @@ package compliance import ( "fmt" + "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" "os" "time" - ddgostatsd "github.com/DataDog/datadog-go/v5/statsd" - - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" "github.com/DataDog/datadog-agent/pkg/collector/runner" "github.com/DataDog/datadog-agent/pkg/collector/scheduler" "github.com/DataDog/datadog-agent/pkg/compliance/agent" @@ -22,6 +20,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/startstop" "github.com/DataDog/datadog-agent/pkg/version" + ddgostatsd "github.com/DataDog/datadog-go/v5/statsd" ) func StartCompliance(hostname string, stopper startstop.Stopper, statsdClient *ddgostatsd.Client) (*agent.Agent, error) { @@ -62,15 +61,6 @@ func StartCompliance(hostname string, stopper startstop.Stopper, statsdClient *d checks.WithStatsd(statsdClient), } - if coreconfig.IsKubernetes() { - nodeLabels, err := agent.WaitGetNodeLabels() - if err != nil { - log.Error(err) - } else { - options = append(options, checks.WithNodeLabels(nodeLabels)) - } - } - agent, err := agent.New( reporter, scheduler, @@ -89,7 +79,7 @@ func StartCompliance(hostname string, stopper startstop.Stopper, statsdClient *d } stopper.Add(agent) - log.Infof("Running compliance checks every %s", checkInterval.String()) + log.Infof("Running compliance checks every %s", checkInterval) // Send the compliance 'running' metrics periodically ticker := sendRunningMetrics(statsdClient, "compliance") diff --git a/cmd/cluster-agent/commands/config/config.go b/cmd/security-agent/subcommands/config/config.go similarity index 77% rename from cmd/cluster-agent/commands/config/config.go rename to cmd/security-agent/subcommands/config/config.go index 3bc6dc10d66eee..c2fc1b197e9719 100644 --- a/cmd/cluster-agent/commands/config/config.go +++ b/cmd/security-agent/subcommands/config/config.go @@ -3,18 +3,30 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. +//go:build kubeapiserver +// +build kubeapiserver + package config import ( "fmt" + "github.com/spf13/cobra" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/pkg/api/util" + "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/config/settings" - - "github.com/spf13/cobra" + settingshttp "github.com/DataDog/datadog-agent/pkg/config/settings/http" ) +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cmd := Config(getSettingsClient) + return []*cobra.Command{cmd} +} + // Config returns the main cobra config command. func Config(getClient settings.ClientBuilder) *cobra.Command { + // TODO: Convert to fx cmd := &cobra.Command{ Use: "config", Short: "Print the runtime configuration of a running agent", @@ -29,6 +41,44 @@ func Config(getClient settings.ClientBuilder) *cobra.Command { return cmd } +func getSettingsClient(cmd *cobra.Command, _ []string) (settings.Client, error) { + err := setupConfig(cmd) + if err != nil { + return nil, err + } + + c := util.GetClient(false) + apiConfigURL := fmt.Sprintf("https://localhost:%v/agent/config", config.Datadog.GetInt("security_agent.cmd_port")) + + return settingshttp.NewClient(c, apiConfigURL, "security-agent"), nil +} + +func setupConfig(cmd *cobra.Command) error { + err := config.SetupLogger(command.LoggerName, config.GetEnvDefault("DD_LOG_LEVEL", "off"), "", "", false, true, false) + if err != nil { + fmt.Printf("Cannot setup logger, exiting: %v\n", err) + return err + } + + return util.SetAuthToken() +} + +func showRuntimeConfiguration(getClient settings.ClientBuilder, cmd *cobra.Command, args []string) error { + c, err := getClient(cmd, args) + if err != nil { + return err + } + + runtimeConfig, err := c.FullConfig() + if err != nil { + return err + } + + fmt.Println(runtimeConfig) + + return nil +} + // listRuntime returns a cobra command to list the settings that can be changed at runtime. func listRuntime(getClient settings.ClientBuilder) *cobra.Command { return &cobra.Command{ @@ -61,43 +111,6 @@ func get(getClient settings.ClientBuilder) *cobra.Command { } } -func showRuntimeConfiguration(getClient settings.ClientBuilder, cmd *cobra.Command, args []string) error { - c, err := getClient(cmd, args) - if err != nil { - return err - } - - runtimeConfig, err := c.FullConfig() - if err != nil { - return err - } - - fmt.Println(runtimeConfig) - - return nil -} - -func listRuntimeConfigurableValue(getClient settings.ClientBuilder, cmd *cobra.Command, args []string) error { - c, err := getClient(cmd, args) - if err != nil { - return err - } - - settingsList, err := c.List() - if err != nil { - return err - } - - fmt.Println("=== Settings that can be changed at runtime ===") - for setting, details := range settingsList { - if !details.Hidden { - fmt.Printf("%-30s %s\n", setting, details.Description) - } - } - - return nil -} - func setConfigValue(getClient settings.ClientBuilder, cmd *cobra.Command, args []string) error { if len(args) != 2 { return fmt.Errorf("exactly two parameters are required: the setting name and its value") @@ -141,3 +154,24 @@ func getConfigValue(getClient settings.ClientBuilder, cmd *cobra.Command, args [ return nil } + +func listRuntimeConfigurableValue(getClient settings.ClientBuilder, cmd *cobra.Command, args []string) error { + c, err := getClient(cmd, args) + if err != nil { + return err + } + + settingsList, err := c.List() + if err != nil { + return err + } + + fmt.Println("=== Settings that can be changed at runtime ===") + for setting, details := range settingsList { + if !details.Hidden { + fmt.Printf("%-30s %s\n", setting, details.Description) + } + } + + return nil +} diff --git a/cmd/security-agent/app/subcommands/config/config_unsupported.go b/cmd/security-agent/subcommands/config/config_unsupported.go similarity index 73% rename from cmd/security-agent/app/subcommands/config/config_unsupported.go rename to cmd/security-agent/subcommands/config/config_unsupported.go index 45280794d61587..2275667db5d7f5 100644 --- a/cmd/security-agent/app/subcommands/config/config_unsupported.go +++ b/cmd/security-agent/subcommands/config/config_unsupported.go @@ -9,11 +9,10 @@ package config import ( + "github.com/DataDog/datadog-agent/cmd/security-agent/command" "github.com/spf13/cobra" - - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" ) -func Commands(globalParams *common.GlobalParams) []*cobra.Command { +func Commands(*command.GlobalParams) []*cobra.Command { return nil } diff --git a/cmd/security-agent/app/subcommands/flare/command.go b/cmd/security-agent/subcommands/flare/command.go similarity index 79% rename from cmd/security-agent/app/subcommands/flare/command.go rename to cmd/security-agent/subcommands/flare/command.go index 15a66a33e1433e..1cb09114610e29 100644 --- a/cmd/security-agent/app/subcommands/flare/command.go +++ b/cmd/security-agent/subcommands/flare/command.go @@ -13,25 +13,27 @@ import ( "github.com/spf13/cobra" "go.uber.org/fx" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/cmd/security-agent/flags" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" "github.com/DataDog/datadog-agent/pkg/api/util" "github.com/DataDog/datadog-agent/pkg/flare" "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/input" ) -type flareCliParams struct { - *common.GlobalParams +type cliParams struct { + *command.GlobalParams customerEmail string autoconfirm bool caseID string } -func Commands(globalParams *common.GlobalParams) []*cobra.Command { - cliParams := &flareCliParams{ +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cliParams := &cliParams{ GlobalParams: globalParams, } @@ -47,24 +49,22 @@ func Commands(globalParams *common.GlobalParams) []*cobra.Command { // The flare command should not log anything, all errors should be reported directly to the console without the log format return fxutil.OneShot(requestFlare, fx.Supply(cliParams), - fx.Supply(core.CreateBundleParams( - "", - core.WithSecurityAgentConfigFilePaths(globalParams.ConfPathArray), - core.WithConfigLoadSecurityAgent(true), - ).LogForOneShot(common.LoggerName, "off", true)), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "off", true)}), core.Bundle, ) }, } - flareCmd.Flags().StringVarP(&cliParams.customerEmail, "email", "e", "", "Your email") - flareCmd.Flags().BoolVarP(&cliParams.autoconfirm, "send", "s", false, "Automatically send flare (don't prompt for confirmation)") + flareCmd.Flags().StringVarP(&cliParams.customerEmail, flags.Email, "e", "", "Your email") + flareCmd.Flags().BoolVarP(&cliParams.autoconfirm, flags.Send, "s", false, "Automatically send flare (don't prompt for confirmation)") flareCmd.SetArgs([]string{"caseID"}) return []*cobra.Command{flareCmd} } -func requestFlare(log config.Component, config config.Component, params *flareCliParams) error { +func requestFlare(log log.Component, config config.Component, params *cliParams) error { if params.customerEmail == "" { var err error params.customerEmail, err = input.AskForEmail() diff --git a/cmd/security-agent/subcommands/flare/command_test.go b/cmd/security-agent/subcommands/flare/command_test.go new file mode 100644 index 00000000000000..d67e4054498855 --- /dev/null +++ b/cmd/security-agent/subcommands/flare/command_test.go @@ -0,0 +1,51 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package flare + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +func TestCommands(t *testing.T) { + tests := []struct { + name string + cliInput []string + check func(cliParams *cliParams, params core.BundleParams) + }{ + { + name: "flare", + cliInput: []string{"flare"}, + check: func(cliParams *cliParams, params core.BundleParams) { + require.Equal(t, command.LoggerName, params.LoggerName(), "logger name not matching") + require.Equal(t, "off", params.LogLevelFn(nil), "log level not matching") + }, + }, + { + name: "flare 001", + cliInput: []string{"flare", "001"}, + check: func(cliParams *cliParams, params core.BundleParams) { + require.Equal(t, command.LoggerName, params.LoggerName(), "logger name not matching") + require.Equal(t, "off", params.LogLevelFn(nil), "log level not matching") + require.Equal(t, "001", cliParams.caseID, "case ID not matching") + }, + }, + } + + for _, test := range tests { + fxutil.TestOneShotSubcommand(t, + Commands(&command.GlobalParams{}), + test.cliInput, + requestFlare, + test.check, + ) + } +} diff --git a/cmd/security-agent/app/subcommands/runtime/activity_dump.go b/cmd/security-agent/subcommands/runtime/activity_dump.go similarity index 86% rename from cmd/security-agent/app/subcommands/runtime/activity_dump.go rename to cmd/security-agent/subcommands/runtime/activity_dump.go index 78e29ca76f2766..9c8188c8f98f3a 100644 --- a/cmd/security-agent/app/subcommands/runtime/activity_dump.go +++ b/cmd/security-agent/subcommands/runtime/activity_dump.go @@ -10,8 +10,9 @@ package runtime import ( "fmt" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/cmd/security-agent/flags" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" "github.com/DataDog/datadog-agent/comp/core" compconfig "github.com/DataDog/datadog-agent/comp/core/config" complog "github.com/DataDog/datadog-agent/comp/core/log" @@ -26,7 +27,7 @@ import ( ) type activityDumpCliParams struct { - *common.GlobalParams + *command.GlobalParams name string containerID string @@ -42,7 +43,7 @@ type activityDumpCliParams struct { remoteRequest bool } -func activityDumpCommands(globalParams *common.GlobalParams) []*cobra.Command { +func activityDumpCommands(globalParams *command.GlobalParams) []*cobra.Command { activityDumpCmd := &cobra.Command{ Use: "activity-dump", Short: "activity dump command", @@ -55,17 +56,15 @@ func activityDumpCommands(globalParams *common.GlobalParams) []*cobra.Command { return []*cobra.Command{activityDumpCmd} } -func listCommands(globalParams *common.GlobalParams) []*cobra.Command { +func listCommands(globalParams *command.GlobalParams) []*cobra.Command { activityDumpListCmd := &cobra.Command{ Use: "list", Short: "get the list of running activity dumps", RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(listActivityDumps, - fx.Supply(core.CreateBundleParams( - "", - core.WithSecurityAgentConfigFilePaths(globalParams.ConfPathArray), - core.WithConfigLoadSecurityAgent(true), - ).LogForOneShot(common.LoggerName, "info", true)), + fx.Supply(core.BundleParams{ + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, @@ -74,7 +73,7 @@ func listCommands(globalParams *common.GlobalParams) []*cobra.Command { return []*cobra.Command{activityDumpListCmd} } -func stopCommands(globalParams *common.GlobalParams) []*cobra.Command { +func stopCommands(globalParams *command.GlobalParams) []*cobra.Command { cliParams := &activityDumpCliParams{ GlobalParams: globalParams, } @@ -85,11 +84,9 @@ func stopCommands(globalParams *common.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(stopActivityDump, fx.Supply(cliParams), - fx.Supply(core.CreateBundleParams( - "", - core.WithSecurityAgentConfigFilePaths(globalParams.ConfPathArray), - core.WithConfigLoadSecurityAgent(true), - ).LogForOneShot(common.LoggerName, "info", true)), + fx.Supply(core.BundleParams{ + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, @@ -97,19 +94,19 @@ func stopCommands(globalParams *common.GlobalParams) []*cobra.Command { activityDumpStopCmd.Flags().StringVar( &cliParams.name, - "name", + flags.Name, "", "an activity dump name can be used to filter the activity dump.", ) activityDumpStopCmd.Flags().StringVar( &cliParams.containerID, - "containerID", + flags.ContainerID, "", "an containerID can be used to filter the activity dump.", ) activityDumpStopCmd.Flags().StringVar( &cliParams.comm, - "comm", + flags.Comm, "", "a process command can be used to filter the activity dump from a specific process.", ) @@ -117,7 +114,7 @@ func stopCommands(globalParams *common.GlobalParams) []*cobra.Command { return []*cobra.Command{activityDumpStopCmd} } -func generateCommands(globalParams *common.GlobalParams) []*cobra.Command { +func generateCommands(globalParams *command.GlobalParams) []*cobra.Command { activityDumpGenerateCmd := &cobra.Command{ Use: "generate", Short: "generate command for activity dumps", @@ -129,7 +126,7 @@ func generateCommands(globalParams *common.GlobalParams) []*cobra.Command { return []*cobra.Command{activityDumpGenerateCmd} } -func generateDumpCommands(globalParams *common.GlobalParams) []*cobra.Command { +func generateDumpCommands(globalParams *command.GlobalParams) []*cobra.Command { cliParams := &activityDumpCliParams{ GlobalParams: globalParams, } @@ -140,11 +137,9 @@ func generateDumpCommands(globalParams *common.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(generateActivityDump, fx.Supply(cliParams), - fx.Supply(core.CreateBundleParams( - "", - core.WithSecurityAgentConfigFilePaths(globalParams.ConfPathArray), - core.WithConfigLoadSecurityAgent(true), - ).LogForOneShot(common.LoggerName, "info", true)), + fx.Supply(core.BundleParams{ + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, @@ -152,49 +147,49 @@ func generateDumpCommands(globalParams *common.GlobalParams) []*cobra.Command { activityDumpGenerateDumpCmd.Flags().StringVar( &cliParams.comm, - "comm", + flags.Comm, "", "a process command can be used to filter the activity dump from a specific process.", ) activityDumpGenerateDumpCmd.Flags().IntVar( &cliParams.timeout, - "timeout", + flags.Timeout, 60, "timeout for the activity dump in minutes", ) activityDumpGenerateDumpCmd.Flags().BoolVar( &cliParams.differentiateArgs, - "differentiate-args", + flags.DifferentiateArgs, true, "add the arguments in the process node merge algorithm", ) activityDumpGenerateDumpCmd.Flags().StringVar( &cliParams.localStorageDirectory, - "output", + flags.Output, "/tmp/activity_dumps/", "local storage output directory", ) activityDumpGenerateDumpCmd.Flags().BoolVar( &cliParams.localStorageCompression, - "compression", + flags.Compression, false, "defines if the local storage output should be compressed before persisting the data to disk", ) activityDumpGenerateDumpCmd.Flags().StringArrayVar( &cliParams.localStorageFormats, - "format", + flags.Format, []string{}, fmt.Sprintf("local storage output formats. Available options are %v.", config.AllStorageFormats()), ) activityDumpGenerateDumpCmd.Flags().BoolVar( &cliParams.remoteStorageCompression, - "remote-compression", + flags.RemoteCompression, true, "defines if the remote storage output should be compressed before sending the data", ) activityDumpGenerateDumpCmd.Flags().StringArrayVar( &cliParams.remoteStorageFormats, - "remote-format", + flags.RemoteFormat, []string{}, fmt.Sprintf("remote storage output formats. Available options are %v.", config.AllStorageFormats()), ) @@ -202,7 +197,7 @@ func generateDumpCommands(globalParams *common.GlobalParams) []*cobra.Command { return []*cobra.Command{activityDumpGenerateDumpCmd} } -func generateEncodingCommands(globalParams *common.GlobalParams) []*cobra.Command { +func generateEncodingCommands(globalParams *command.GlobalParams) []*cobra.Command { cliParams := &activityDumpCliParams{ GlobalParams: globalParams, } @@ -213,11 +208,9 @@ func generateEncodingCommands(globalParams *common.GlobalParams) []*cobra.Comman RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(generateEncodingFromActivityDump, fx.Supply(cliParams), - fx.Supply(core.CreateBundleParams( - "", - core.WithSecurityAgentConfigFilePaths(globalParams.ConfPathArray), - core.WithConfigLoadSecurityAgent(true), - ).LogForOneShot(common.LoggerName, "info", true)), + fx.Supply(core.BundleParams{ + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, @@ -225,44 +218,44 @@ func generateEncodingCommands(globalParams *common.GlobalParams) []*cobra.Comman activityDumpGenerateEncodingCmd.Flags().StringVar( &cliParams.file, - "input", + flags.Input, "", "path to the activity dump file", ) - _ = activityDumpGenerateEncodingCmd.MarkFlagRequired("input") + _ = activityDumpGenerateEncodingCmd.MarkFlagRequired(flags.Input) activityDumpGenerateEncodingCmd.Flags().StringVar( &cliParams.localStorageDirectory, - "output", + flags.Output, "/tmp/activity_dumps/", "local storage output directory", ) activityDumpGenerateEncodingCmd.Flags().BoolVar( &cliParams.localStorageCompression, - "compression", + flags.Compression, false, "defines if the local storage output should be compressed before persisting the data to disk", ) activityDumpGenerateEncodingCmd.Flags().StringArrayVar( &cliParams.localStorageFormats, - "format", + flags.Format, []string{}, fmt.Sprintf("local storage output formats. Available options are %v.", config.AllStorageFormats()), ) activityDumpGenerateEncodingCmd.Flags().BoolVar( &cliParams.remoteStorageCompression, - "remote-compression", + flags.RemoteCompression, true, "defines if the remote storage output should be compressed before sending the data", ) activityDumpGenerateEncodingCmd.Flags().StringArrayVar( &cliParams.remoteStorageFormats, - "remote-format", + flags.RemoteFormat, []string{}, fmt.Sprintf("remote storage output formats. Available options are %v.", config.AllStorageFormats()), ) activityDumpGenerateEncodingCmd.Flags().BoolVar( &cliParams.remoteRequest, - "remote", + flags.Remote, false, "when set, the transcoding will be done by system-probe instead of the current security-agent instance", ) diff --git a/cmd/security-agent/app/subcommands/runtime/command.go b/cmd/security-agent/subcommands/runtime/command.go similarity index 81% rename from cmd/security-agent/app/subcommands/runtime/command.go rename to cmd/security-agent/subcommands/runtime/command.go index ee205ed6a362b7..53d0ecb21c247b 100644 --- a/cmd/security-agent/app/subcommands/runtime/command.go +++ b/cmd/security-agent/subcommands/runtime/command.go @@ -25,6 +25,8 @@ import ( "go.uber.org/fx" "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/cmd/security-agent/flags" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/pkg/compliance/event" coreconfig "github.com/DataDog/datadog-agent/pkg/config" @@ -37,6 +39,7 @@ import ( secagent "github.com/DataDog/datadog-agent/pkg/security/agent" "github.com/DataDog/datadog-agent/pkg/security/api" secconfig "github.com/DataDog/datadog-agent/pkg/security/config" + "github.com/DataDog/datadog-agent/pkg/security/events" sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" "github.com/DataDog/datadog-agent/pkg/security/secl/model" @@ -58,7 +61,7 @@ const ( cwsIntakeOrigin config.IntakeOrigin = "cloud-workload-security" ) -func Commands(globalParams *common.GlobalParams) []*cobra.Command { +func Commands(globalParams *command.GlobalParams) []*cobra.Command { runtimeCmd := &cobra.Command{ Use: "runtime", Short: "runtime Agent utility commands", @@ -77,12 +80,12 @@ func Commands(globalParams *common.GlobalParams) []*cobra.Command { } type checkPoliciesCliParams struct { - *common.GlobalParams + *command.GlobalParams dir string } -func checkPoliciesCommands(globalParams *common.GlobalParams) []*cobra.Command { +func checkPoliciesCommands(globalParams *command.GlobalParams) []*cobra.Command { cliParams := &checkPoliciesCliParams{ GlobalParams: globalParams, } @@ -93,33 +96,29 @@ func checkPoliciesCommands(globalParams *common.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(checkPolicies, fx.Supply(cliParams), - fx.Supply(core.CreateBundleParams( - "", - core.WithSecurityAgentConfigFilePaths(globalParams.ConfPathArray), - core.WithConfigLoadSecurityAgent(true), - ).LogForOneShot(common.LoggerName, "off", false)), + fx.Supply(core.BundleParams{ + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "off", false)}), core.Bundle, ) }, Deprecated: "please use `security-agent runtime policy check` instead", } - checkPoliciesCmd.Flags().StringVar(&cliParams.dir, "policies-dir", coreconfig.DefaultRuntimePoliciesDir, "Path to policies directory") + checkPoliciesCmd.Flags().StringVar(&cliParams.dir, flags.PoliciesDir, coreconfig.DefaultRuntimePoliciesDir, "Path to policies directory") return []*cobra.Command{checkPoliciesCmd} } -func reloadPoliciesCommands(globalParams *common.GlobalParams) []*cobra.Command { +func reloadPoliciesCommands(globalParams *command.GlobalParams) []*cobra.Command { reloadPoliciesCmd := &cobra.Command{ Use: "reload", Short: "Reload policies", RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(reloadRuntimePolicies, - fx.Supply(core.CreateBundleParams( - "", - core.WithSecurityAgentConfigFilePaths(globalParams.ConfPathArray), - core.WithConfigLoadSecurityAgent(true), - ).LogForOneShot(common.LoggerName, "info", true)), + fx.Supply(core.BundleParams{ + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, @@ -128,7 +127,7 @@ func reloadPoliciesCommands(globalParams *common.GlobalParams) []*cobra.Command return []*cobra.Command{reloadPoliciesCmd} } -func commonPolicyCommands(globalParams *common.GlobalParams) []*cobra.Command { +func commonPolicyCommands(globalParams *command.GlobalParams) []*cobra.Command { commonPolicyCmd := &cobra.Command{ Use: "policy", Short: "Policy related commands", @@ -143,7 +142,7 @@ func commonPolicyCommands(globalParams *common.GlobalParams) []*cobra.Command { } type evalCliParams struct { - *common.GlobalParams + *command.GlobalParams dir string ruleID string @@ -151,7 +150,7 @@ type evalCliParams struct { debug bool } -func evalCommands(globalParams *common.GlobalParams) []*cobra.Command { +func evalCommands(globalParams *command.GlobalParams) []*cobra.Command { evalArgs := &evalCliParams{ GlobalParams: globalParams, } @@ -162,27 +161,25 @@ func evalCommands(globalParams *common.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(evalRule, fx.Supply(evalArgs), - fx.Supply(core.CreateBundleParams( - "", - core.WithSecurityAgentConfigFilePaths(globalParams.ConfPathArray), - core.WithConfigLoadSecurityAgent(true), - ).LogForOneShot(common.LoggerName, "off", false)), + fx.Supply(core.BundleParams{ + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "off", false)}), core.Bundle, ) }, } - evalCmd.Flags().StringVar(&evalArgs.dir, "policies-dir", coreconfig.DefaultRuntimePoliciesDir, "Path to policies directory") - evalCmd.Flags().StringVar(&evalArgs.ruleID, "rule-id", "", "Rule ID to evaluate") - _ = evalCmd.MarkFlagRequired("rule-id") - evalCmd.Flags().StringVar(&evalArgs.eventFile, "event-file", "", "File of the event data") - _ = evalCmd.MarkFlagRequired("event-file") - evalCmd.Flags().BoolVar(&evalArgs.debug, "debug", false, "Display an event dump if the evaluation fail") + evalCmd.Flags().StringVar(&evalArgs.dir, flags.PoliciesDir, coreconfig.DefaultRuntimePoliciesDir, "Path to policies directory") + evalCmd.Flags().StringVar(&evalArgs.ruleID, flags.RuleID, "", "Rule ID to evaluate") + _ = evalCmd.MarkFlagRequired(flags.RuleID) + evalCmd.Flags().StringVar(&evalArgs.eventFile, flags.EventFile, "", "File of the event data") + _ = evalCmd.MarkFlagRequired(flags.EventFile) + evalCmd.Flags().BoolVar(&evalArgs.debug, flags.Debug, false, "Display an event dump if the evaluation fail") return []*cobra.Command{evalCmd} } -func commonCheckPoliciesCommands(globalParams *common.GlobalParams) []*cobra.Command { +func commonCheckPoliciesCommands(globalParams *command.GlobalParams) []*cobra.Command { cliParams := &checkPoliciesCliParams{ GlobalParams: globalParams, } @@ -193,32 +190,28 @@ func commonCheckPoliciesCommands(globalParams *common.GlobalParams) []*cobra.Com RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(checkPolicies, fx.Supply(cliParams), - fx.Supply(core.CreateBundleParams( - "", - core.WithSecurityAgentConfigFilePaths(globalParams.ConfPathArray), - core.WithConfigLoadSecurityAgent(true), - ).LogForOneShot(common.LoggerName, "off", false)), + fx.Supply(core.BundleParams{ + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "off", false)}), core.Bundle, ) }, } - commonCheckPoliciesCmd.Flags().StringVar(&cliParams.dir, "policies-dir", coreconfig.DefaultRuntimePoliciesDir, "Path to policies directory") + commonCheckPoliciesCmd.Flags().StringVar(&cliParams.dir, flags.PoliciesDir, coreconfig.DefaultRuntimePoliciesDir, "Path to policies directory") return []*cobra.Command{commonCheckPoliciesCmd} } -func commonReloadPoliciesCommands(globalParams *common.GlobalParams) []*cobra.Command { +func commonReloadPoliciesCommands(globalParams *command.GlobalParams) []*cobra.Command { commonReloadPoliciesCmd := &cobra.Command{ Use: "reload", Short: "Reload policies", RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(reloadRuntimePolicies, - fx.Supply(core.CreateBundleParams( - "", - core.WithSecurityAgentConfigFilePaths(globalParams.ConfPathArray), - core.WithConfigLoadSecurityAgent(true), - ).LogForOneShot(common.LoggerName, "info", true)), + fx.Supply(core.BundleParams{ + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, @@ -226,17 +219,15 @@ func commonReloadPoliciesCommands(globalParams *common.GlobalParams) []*cobra.Co return []*cobra.Command{commonReloadPoliciesCmd} } -func selfTestCommands(globalParams *common.GlobalParams) []*cobra.Command { +func selfTestCommands(globalParams *command.GlobalParams) []*cobra.Command { selfTestCmd := &cobra.Command{ Use: "self-test", Short: "Run runtime self test", RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(runRuntimeSelfTest, - fx.Supply(core.CreateBundleParams( - "", - core.WithSecurityAgentConfigFilePaths(globalParams.ConfPathArray), - core.WithConfigLoadSecurityAgent(true), - ).LogForOneShot(common.LoggerName, "info", true)), + fx.Supply(core.BundleParams{ + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, @@ -246,13 +237,13 @@ func selfTestCommands(globalParams *common.GlobalParams) []*cobra.Command { } type downloadPolicyCliParams struct { - *common.GlobalParams + *command.GlobalParams check bool outputPath string } -func downloadPolicyCommands(globalParams *common.GlobalParams) []*cobra.Command { +func downloadPolicyCommands(globalParams *command.GlobalParams) []*cobra.Command { downloadPolicyArgs := &downloadPolicyCliParams{ GlobalParams: globalParams, } @@ -263,29 +254,27 @@ func downloadPolicyCommands(globalParams *common.GlobalParams) []*cobra.Command RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(downloadPolicy, fx.Supply(downloadPolicyArgs), - fx.Supply(core.CreateBundleParams( - "", - core.WithSecurityAgentConfigFilePaths(globalParams.ConfPathArray), - core.WithConfigLoadSecurityAgent(true), - ).LogForOneShot(common.LoggerName, "off", false)), + fx.Supply(core.BundleParams{ + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "off", false)}), core.Bundle, ) }, } - downloadPolicyCmd.Flags().BoolVar(&downloadPolicyArgs.check, "check", false, "Check policies after downloading") - downloadPolicyCmd.Flags().StringVar(&downloadPolicyArgs.outputPath, "output-path", "", "Output path for downloaded policies") + downloadPolicyCmd.Flags().BoolVar(&downloadPolicyArgs.check, flags.Check, false, "Check policies after downloading") + downloadPolicyCmd.Flags().StringVar(&downloadPolicyArgs.outputPath, flags.OutputPath, "", "Output path for downloaded policies") return []*cobra.Command{downloadPolicyCmd} } type processCacheDumpCliParams struct { - *common.GlobalParams + *command.GlobalParams withArgs bool } -func processCacheCommands(globalParams *common.GlobalParams) []*cobra.Command { +func processCacheCommands(globalParams *command.GlobalParams) []*cobra.Command { cliParams := &processCacheDumpCliParams{ GlobalParams: globalParams, } @@ -296,16 +285,14 @@ func processCacheCommands(globalParams *common.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(dumpProcessCache, fx.Supply(cliParams), - fx.Supply(core.CreateBundleParams( - "", - core.WithSecurityAgentConfigFilePaths(globalParams.ConfPathArray), - core.WithConfigLoadSecurityAgent(true), - ).LogForOneShot(common.LoggerName, "info", true)), + fx.Supply(core.BundleParams{ + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, } - processCacheDumpCmd.Flags().BoolVar(&cliParams.withArgs, "with-args", false, "add process arguments to the dump") + processCacheDumpCmd.Flags().BoolVar(&cliParams.withArgs, flags.WithArgs, false, "add process arguments to the dump") processCacheCmd := &cobra.Command{ Use: "process-cache", @@ -317,12 +304,12 @@ func processCacheCommands(globalParams *common.GlobalParams) []*cobra.Command { } type dumpNetworkNamespaceCliParams struct { - *common.GlobalParams + *command.GlobalParams snapshotInterfaces bool } -func networkNamespaceCommands(globalParams *common.GlobalParams) []*cobra.Command { +func networkNamespaceCommands(globalParams *command.GlobalParams) []*cobra.Command { cliParams := &dumpNetworkNamespaceCliParams{ GlobalParams: globalParams, } @@ -333,16 +320,14 @@ func networkNamespaceCommands(globalParams *common.GlobalParams) []*cobra.Comman RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(dumpNetworkNamespace, fx.Supply(cliParams), - fx.Supply(core.CreateBundleParams( - "", - core.WithSecurityAgentConfigFilePaths(globalParams.ConfPathArray), - core.WithConfigLoadSecurityAgent(true), - ).LogForOneShot(common.LoggerName, "info", true)), + fx.Supply(core.BundleParams{ + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, } - dumpNetworkNamespaceCmd.Flags().BoolVar(&cliParams.snapshotInterfaces, "snapshot-interfaces", true, "snapshot the interfaces of each network namespace during the dump") + dumpNetworkNamespaceCmd.Flags().BoolVar(&cliParams.snapshotInterfaces, flags.SnapshotInterfaces, true, "snapshot the interfaces of each network namespace during the dump") networkNamespaceCmd := &cobra.Command{ Use: "network-namespace", @@ -353,18 +338,16 @@ func networkNamespaceCommands(globalParams *common.GlobalParams) []*cobra.Comman return []*cobra.Command{networkNamespaceCmd} } -func discardersCommands(globalParams *common.GlobalParams) []*cobra.Command { +func discardersCommands(globalParams *command.GlobalParams) []*cobra.Command { dumpDiscardersCmd := &cobra.Command{ Use: "dump", Short: "dump discarders", RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(dumpDiscarders, - fx.Supply(core.CreateBundleParams( - "", - core.WithSecurityAgentConfigFilePaths(globalParams.ConfPathArray), - core.WithConfigLoadSecurityAgent(true), - ).LogForOneShot(common.LoggerName, "info", true)), + fx.Supply(core.BundleParams{ + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, @@ -477,18 +460,17 @@ func checkPoliciesInner(dir string) error { opts. WithSupportedDiscarders(sprobe.SupportedDiscarders). WithEventTypeEnabled(enabled). - WithReservedRuleIDs(sprobe.AllCustomRuleIDs()). + WithReservedRuleIDs(events.AllCustomRuleIDs()). WithStateScopes(map[rules.Scope]rules.VariableProviderFactory{ "process": func() rules.VariableProvider { return eval.NewScopedVariables(func(ctx *eval.Context) unsafe.Pointer { - return unsafe.Pointer(&(*model.Event)(ctx.Object).ProcessContext) + return unsafe.Pointer(&ctx.Event.(*model.Event).ProcessContext) }, nil) }, }). WithLogger(seclog.DefaultLogger) - model := &model.Model{} - ruleSet := rules.NewRuleSet(model, model.NewEvent, &opts, &evalOpts, &eval.MacroStore{}) + ruleSet := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) agentVersionFilter, err := newAgentVersionFilter() if err != nil { @@ -572,7 +554,7 @@ func eventDataFromJSON(file string) (eval.Event, error) { } m := &model.Model{} - event := m.NewEventWithType(kind) + event := m.NewDefaultEventWithType(kind) event.Init() for k, v := range eventData.Values { @@ -617,11 +599,11 @@ func evalRule(log complog.Component, config compconfig.Component, evalArgs *eval opts. WithSupportedDiscarders(sprobe.SupportedDiscarders). WithEventTypeEnabled(enabled). - WithReservedRuleIDs(sprobe.AllCustomRuleIDs()). + WithReservedRuleIDs(events.AllCustomRuleIDs()). WithLogger(seclog.DefaultLogger) - model := &model.Model{} - ruleSet := rules.NewRuleSet(model, model.NewEvent, &opts, &evalOpts, &eval.MacroStore{}) + m := &model.Model{} + ruleSet := rules.NewRuleSet(m, model.NewDefaultEvent, &opts, &evalOpts) agentVersionFilter, err := newAgentVersionFilter() if err != nil { diff --git a/cmd/security-agent/app/subcommands/runtime/command_unsupported.go b/cmd/security-agent/subcommands/runtime/command_unsupported.go similarity index 90% rename from cmd/security-agent/app/subcommands/runtime/command_unsupported.go rename to cmd/security-agent/subcommands/runtime/command_unsupported.go index 2efc1f9c61a2ae..59441cbb255498 100644 --- a/cmd/security-agent/app/subcommands/runtime/command_unsupported.go +++ b/cmd/security-agent/subcommands/runtime/command_unsupported.go @@ -18,16 +18,15 @@ import ( "github.com/spf13/cobra" - ddgostatsd "github.com/DataDog/datadog-go/v5/statsd" - - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" coreconfig "github.com/DataDog/datadog-agent/pkg/config" secagent "github.com/DataDog/datadog-agent/pkg/security/agent" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/startstop" + ddgostatsd "github.com/DataDog/datadog-go/v5/statsd" ) -func Commands(globalParams *common.GlobalParams) []*cobra.Command { +func Commands(globalParams *command.GlobalParams) []*cobra.Command { return nil } diff --git a/cmd/security-agent/app/subcommands/status/command.go b/cmd/security-agent/subcommands/status/command.go similarity index 76% rename from cmd/security-agent/app/subcommands/status/command.go rename to cmd/security-agent/subcommands/status/command.go index d58a9cc3659387..33792811b515f0 100644 --- a/cmd/security-agent/app/subcommands/status/command.go +++ b/cmd/security-agent/subcommands/status/command.go @@ -9,12 +9,12 @@ import ( "bytes" "encoding/json" "fmt" - "os" - "github.com/spf13/cobra" "go.uber.org/fx" + "os" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/cmd/security-agent/flags" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/comp/core/log" @@ -23,16 +23,16 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/fxutil" ) -type statusCliParams struct { - *common.GlobalParams +type cliParams struct { + *command.GlobalParams json bool prettyPrintJSON bool file string } -func Commands(globalParams *common.GlobalParams) []*cobra.Command { - cliParams := &statusCliParams{ +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cliParams := &cliParams{ GlobalParams: globalParams, } @@ -43,24 +43,22 @@ func Commands(globalParams *common.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(runStatus, fx.Supply(cliParams), - fx.Supply(core.CreateBundleParams( - "", - core.WithSecurityAgentConfigFilePaths(globalParams.ConfPathArray), - core.WithConfigLoadSecurityAgent(true), - ).LogForOneShot(common.LoggerName, "off", true)), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "off", true)}), core.Bundle, ) }, } - statusCmd.Flags().BoolVarP(&cliParams.json, "json", "j", false, "print out raw json") - statusCmd.Flags().BoolVarP(&cliParams.prettyPrintJSON, "pretty-json", "p", false, "pretty print JSON") - statusCmd.Flags().StringVarP(&cliParams.file, "file", "o", "", "Output the status command to a file") + statusCmd.Flags().BoolVarP(&cliParams.json, flags.JSON, "j", false, "print out raw json") + statusCmd.Flags().BoolVarP(&cliParams.prettyPrintJSON, flags.PrettyJSON, "p", false, "pretty print JSON") + statusCmd.Flags().StringVarP(&cliParams.file, flags.File, "o", "", "Output the status command to a file") return []*cobra.Command{statusCmd} } -func runStatus(log log.Component, config config.Component, params *statusCliParams) error { +func runStatus(log log.Component, config config.Component, params *cliParams) error { fmt.Printf("Getting the status from the agent.\n") var e error var s string diff --git a/cmd/security-agent/subcommands/status/command_test.go b/cmd/security-agent/subcommands/status/command_test.go new file mode 100644 index 00000000000000..4909ec73a8084b --- /dev/null +++ b/cmd/security-agent/subcommands/status/command_test.go @@ -0,0 +1,43 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package status + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +func TestCommand(t *testing.T) { + tests := []struct { + name string + cliInput []string + check func(cliParams *cliParams, params core.BundleParams) + }{ + { + name: "status", + cliInput: []string{"status"}, + check: func(cliParams *cliParams, params core.BundleParams) { + // Verify logger defaults + require.Equal(t, command.LoggerName, params.LoggerName(), "logger name not matching") + require.Equal(t, "off", params.LogLevelFn(nil), "log level not matching") + }, + }, + } + + for _, test := range tests { + fxutil.TestOneShotSubcommand(t, + Commands(&command.GlobalParams{}), + test.cliInput, + runStatus, + test.check, + ) + } +} diff --git a/cmd/security-agent/app/subcommands/version/command.go b/cmd/security-agent/subcommands/version/command.go similarity index 61% rename from cmd/security-agent/app/subcommands/version/command.go rename to cmd/security-agent/subcommands/version/command.go index a3250971634a7f..a76fee57de158d 100644 --- a/cmd/security-agent/app/subcommands/version/command.go +++ b/cmd/security-agent/subcommands/version/command.go @@ -7,31 +7,29 @@ package version import ( "fmt" + "github.com/fatih/color" + "github.com/spf13/cobra" + "go.uber.org/fx" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" "github.com/DataDog/datadog-agent/comp/core" - compconfig "github.com/DataDog/datadog-agent/comp/core/config" - complog "github.com/DataDog/datadog-agent/comp/core/log" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" "github.com/DataDog/datadog-agent/pkg/serializer" "github.com/DataDog/datadog-agent/pkg/util/fxutil" - "github.com/DataDog/datadog-agent/pkg/version" - "github.com/fatih/color" - "github.com/spf13/cobra" - "go.uber.org/fx" + pkgversion "github.com/DataDog/datadog-agent/pkg/version" ) -func Commands(globalParams *common.GlobalParams) []*cobra.Command { +func Commands(globalParams *command.GlobalParams) []*cobra.Command { versionCmd := &cobra.Command{ Use: "version", Short: "Print the version info", Long: ``, RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(displayVersion, - fx.Supply(core.CreateBundleParams( - "", - core.WithSecurityAgentConfigFilePaths(globalParams.ConfPathArray), - core.WithConfigLoadSecurityAgent(true), - ).LogForOneShot(common.LoggerName, "off", true)), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "off", true)}), core.Bundle, ) }, @@ -40,8 +38,8 @@ func Commands(globalParams *common.GlobalParams) []*cobra.Command { return []*cobra.Command{versionCmd} } -func displayVersion(log complog.Component, config compconfig.Component) { - av, _ := version.Agent() +func displayVersion(log log.Component, config config.Component) { + av, _ := pkgversion.Agent() meta := "" if av.Meta != "" { meta = fmt.Sprintf("- Meta: %s ", color.YellowString(av.Meta)) @@ -50,7 +48,7 @@ func displayVersion(log complog.Component, config compconfig.Component) { fmt.Fprintf(color.Output, "Security agent %s %s- Commit: '%s' - Serialization version: %s\n", color.BlueString(av.GetNumberAndPre()), meta, - color.GreenString(version.Commit), + color.GreenString(pkgversion.Commit), color.MagentaString(serializer.AgentPayloadVersion), ) } diff --git a/cmd/security-agent/subcommands/version/command_test.go b/cmd/security-agent/subcommands/version/command_test.go new file mode 100644 index 00000000000000..605607153e2951 --- /dev/null +++ b/cmd/security-agent/subcommands/version/command_test.go @@ -0,0 +1,43 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package version + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +func TestCommand(t *testing.T) { + tests := []struct { + name string + cliInput []string + check func(params core.BundleParams) + }{ + { + name: "version", + cliInput: []string{"version"}, + check: func(params core.BundleParams) { + // Verify logger defaults + require.Equal(t, command.LoggerName, params.LoggerName(), "logger name not matching") + require.Equal(t, "off", params.LogLevelFn(nil), "log level not matching") + }, + }, + } + + for _, test := range tests { + fxutil.TestOneShotSubcommand(t, + Commands(&command.GlobalParams{}), + test.cliInput, + displayVersion, + test.check, + ) + } +} diff --git a/cmd/security-agent/windows_resources/security-agent-msg.mc b/cmd/security-agent/windows_resources/security-agent-msg.mc deleted file mode 100644 index c241eeccebb604..00000000000000 --- a/cmd/security-agent/windows_resources/security-agent-msg.mc +++ /dev/null @@ -1,85 +0,0 @@ -;// Header -MessageIdTypedef=DWORD - -LanguageNames=( - English=0x409:MSG00409 -) - - -;// Messages -MessageId=3 -SymbolicName=MSG_SERVICE_STARTED -Severity=Informational -Language=English -The %1 service has started. -. - -MessageId=4 -SymbolicName=MSG_SERVICE_STOPPED -Severity=Informational -Language=English -The %1 service has stopped. -. - -MessageId=5 -SymbolicName=MSG_UNKNOWN_CONTROL_REQUEST -Severity=Warning -Language=English -Unexpected control request %1 -. - -MessageId=6 -SymbolicName=MSG_SERVICE_STOPPING -Severity=Informational -Language=English -Received stop command, shutting down -. - -MessageId=7 -SymbolicName=MSG_SERVICE_STARTED -Severity=Informational -Language=English -starting the %1 service. -. - -MessageId=8 -SymbolicName=MSG_SERVICE_FAILED -Severity=Error -Language=English -The Service failed: %1 -. - -MessageId=9 -SymbolicName=MSG_SERVICE_FAILED -Severity=Warning -Language=English -The Service failed. %1 -. - -MessageId=10 -SymbolicName=MSG_UNEXPECTED_CONTROL_REQUEST -Severity=Error -Language=English -The Service failed: %1 -. - -MessageId=11 -SymbolicName=MSG_RECEIVED_STOP_COMMAND -Severity=Informational -Language=English -The service %1 received the stop command, shutting down. -. - -MessageId=12 -SymbolicName=MSG_RECEIVED_SHUTDOWN_COMMAND -Severity=Informational -Language=English -The service %1 received the shutdown command, shutting down. -. - -MessageId=13 -SymbolicName=MSG_AGENT_PRE_SHUTDOWN_STARTING -Severity=Informational -Language=English -The service %1 service is initiating pre-shutdown. -. diff --git a/cmd/security-agent/windows_resources/security-agent-msg.rc b/cmd/security-agent/windows_resources/security-agent-msg.rc deleted file mode 100644 index c559925b94f863..00000000000000 --- a/cmd/security-agent/windows_resources/security-agent-msg.rc +++ /dev/null @@ -1,9 +0,0 @@ -/* Do not edit this file manually. - This file is autogenerated by windmc. */ - - -// Country: United States -// Language: English -#pragma code_page(437) -LANGUAGE 0x9, 0x1 -1 MESSAGETABLE "MSG00409.bin" diff --git a/cmd/security-agent/windows_resources/security-agent.rc b/cmd/security-agent/windows_resources/security-agent.rc deleted file mode 100644 index dcb4476e1ca25f..00000000000000 --- a/cmd/security-agent/windows_resources/security-agent.rc +++ /dev/null @@ -1,50 +0,0 @@ -#include "version.h" -#define RT_MANIFEST 24 -#define APP_MANIFEST 1 - - -//APP_MANIFEST RT_MANIFEST agent.exe.manifest - -#define MAIN_ICON 1 - -MAIN_ICON ICON "..\\..\\..\omnibus\\resources\\agent\\msi\\assets\\project.ico" - -#define VS_VERSION_INFO 1 -VS_VERSION_INFO VERSIONINFO - FILEVERSION RC_FILE_VERSION - PRODUCTVERSION RC_FILE_VERSION - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x40004L - FILETYPE 0x0L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "CompanyName", "Datadog, Inc." - VALUE "FileDescription", "Datadog Security Agent" - VALUE "FileVersion", FILE_VERSION_STRING - VALUE "InternalName", "security-agent" - VALUE "LegalCopyright", "Copyright (C) 2021" - VALUE "OriginalFilename", "security-agent.exe" - VALUE "ProductName", "Datadog Security Agent" - VALUE "ProductVersion", FILE_VERSION_STRING - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END - -// Country: United States -// Language: English -#pragma code_page(437) -LANGUAGE 0x9, 0x1 -1 MESSAGETABLE "MSG00409.bin" diff --git a/cmd/security-agent/windows_resources/version.h b/cmd/security-agent/windows_resources/version.h deleted file mode 100644 index 083087b04bffff..00000000000000 --- a/cmd/security-agent/windows_resources/version.h +++ /dev/null @@ -1,7 +0,0 @@ - -#define RC_FILE_VERSION MAJ_VER,MIN_VER,PATCH_VER,0 - -#define STRINGIFY(x) #x -#define TO_STRING(x) STRINGIFY(x) - -#define FILE_VERSION_STRING TO_STRING(MAJ_VER.MIN_VER.PATCH_VER.0) \ No newline at end of file diff --git a/cmd/serverless-init/main.go b/cmd/serverless-init/main.go index b1fd96e4567588..c3e893c7a7d42e 100644 --- a/cmd/serverless-init/main.go +++ b/cmd/serverless-init/main.go @@ -19,6 +19,7 @@ import ( "github.com/DataDog/datadog-agent/cmd/serverless-init/tag" "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/serverless/metrics" + "github.com/DataDog/datadog-agent/pkg/serverless/random" "github.com/DataDog/datadog-agent/pkg/serverless/trace" ) @@ -50,7 +51,7 @@ func main() { } func setupTraceAgent(traceAgent *trace.ServerlessTraceAgent, tags map[string]string) { - traceAgent.Start(config.Datadog.GetBool("apm_config.enabled"), &trace.LoadConfig{Path: datadogConfigPath}, nil) + traceAgent.Start(config.Datadog.GetBool("apm_config.enabled"), &trace.LoadConfig{Path: datadogConfigPath}, nil, random.Random.Uint64()) traceAgent.SetTags(tag.GetBaseTagsMapWithMetadata(tags)) for range time.Tick(3 * time.Second) { traceAgent.Flush() diff --git a/cmd/serverless/main.go b/cmd/serverless/main.go index ec2ab86e468450..081cf46ec8c5d9 100644 --- a/cmd/serverless/main.go +++ b/cmd/serverless/main.go @@ -24,9 +24,11 @@ import ( serverlessLogs "github.com/DataDog/datadog-agent/pkg/serverless/logs" "github.com/DataDog/datadog-agent/pkg/serverless/metrics" "github.com/DataDog/datadog-agent/pkg/serverless/proxy" + "github.com/DataDog/datadog-agent/pkg/serverless/random" "github.com/DataDog/datadog-agent/pkg/serverless/registration" "github.com/DataDog/datadog-agent/pkg/serverless/trace" "github.com/DataDog/datadog-agent/pkg/serverless/trace/inferredspan" + "github.com/DataDog/datadog-agent/pkg/trace/pb" "github.com/DataDog/datadog-agent/pkg/util/flavor" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -118,7 +120,7 @@ func runAgent(stopCh chan struct{}) (serverlessDaemon *daemon.Daemon, err error) if err != nil { log.Debug("Unable to restore the state from file") } else { - serverlessDaemon.ComputeGlobalTags(config.GetConfiguredTags(true)) + serverlessDaemon.ComputeGlobalTags(config.GetGlobalConfiguredTags(true)) serverlessDaemon.StartLogCollection() } // serverless parts @@ -211,11 +213,14 @@ func runAgent(stopCh chan struct{}) (serverlessDaemon *daemon.Daemon, err error) } config.LoadProxyFromEnv(config.Datadog) logChannel := make(chan *logConfig.ChannelMessage) - + // Channels for ColdStartCreator + lambdaSpanChan := make(chan *pb.Span) + initDurationChan := make(chan float64) + coldStartSpanId := random.Random.Uint64() metricAgent := &metrics.ServerlessMetricAgent{} metricAgent.Start(daemon.FlushTimeout, &metrics.MetricConfig{}, &metrics.MetricDogStatsD{}) serverlessDaemon.SetStatsdServer(metricAgent) - serverlessDaemon.SetupLogCollectionHandler(logsAPICollectionRoute, logChannel, config.Datadog.GetBool("serverless.logs_enabled"), config.Datadog.GetBool("enhanced_metrics")) + serverlessDaemon.SetupLogCollectionHandler(logsAPICollectionRoute, logChannel, config.Datadog.GetBool("serverless.logs_enabled"), config.Datadog.GetBool("enhanced_metrics"), initDurationChan) // Concurrently start heavyweight features var wg sync.WaitGroup @@ -225,7 +230,7 @@ func runAgent(stopCh chan struct{}) (serverlessDaemon *daemon.Daemon, err error) go func() { defer wg.Done() traceAgent := &trace.ServerlessTraceAgent{} - traceAgent.Start(config.Datadog.GetBool("apm_config.enabled"), &trace.LoadConfig{Path: datadogConfigPath}, serverlessDaemon.ExecutionContext) + traceAgent.Start(config.Datadog.GetBool("apm_config.enabled"), &trace.LoadConfig{Path: datadogConfigPath}, lambdaSpanChan, coldStartSpanId) serverlessDaemon.SetTraceAgent(traceAgent) }() @@ -269,6 +274,19 @@ func runAgent(stopCh chan struct{}) (serverlessDaemon *daemon.Daemon, err error) wg.Wait() + coldStartSpanCreator := &trace.ColdStartSpanCreator{ + LambdaSpanChan: lambdaSpanChan, + InitDurationChan: initDurationChan, + TraceAgent: serverlessDaemon.TraceAgent, + StopChan: make(chan struct{}), + ColdStartSpanId: coldStartSpanId, + } + + log.Debug("Starting ColdStartSpanCreator") + coldStartSpanCreator.Run() + log.Debug("Setting ColdStartSpanCreator on Daemon") + serverlessDaemon.SetColdStartSpanCreator(coldStartSpanCreator) + // set up invocation processor in the serverless Daemon to be used for the proxy and/or lifecycle API serverlessDaemon.InvocationProcessor = &invocationlifecycle.LifecycleProcessor{ ExtraTags: serverlessDaemon.ExtraTags, diff --git a/cmd/systray/command/command.go b/cmd/systray/command/command.go new file mode 100644 index 00000000000000..a793be32e76c38 --- /dev/null +++ b/cmd/systray/command/command.go @@ -0,0 +1,103 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. +//go:build windows +// +build windows + +// Package command implements the top-level `systray` binary, including its subcommands. +package command + +import ( + "fmt" + "os" + "path/filepath" + + "github.com/spf13/cobra" + + "github.com/DataDog/datadog-agent/cmd/agent/common" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" + "github.com/DataDog/datadog-agent/comp/systray/systray" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "github.com/DataDog/datadog-agent/pkg/util/winutil" + "go.uber.org/fx" +) + +const ( + defaultLogFile = "c:\\programdata\\datadog\\logs\\ddtray.log" +) + +var ( + // set by the build task and used to configure the logger to output to console when debugging. + // This value should correspond to the subsystem in the PE header. + // + // In normal circumstances, we don't want the systray to launch a console window when it runs + // so the default subsystem is "windows". However, console output can be useful for debugging. + // Console output can be viewd by setting the PE subsystem to "console". + subsystem = "windows" +) + +func init() { + // disable cobra mouse trap so cobra doesn't immediately kill our GUI app + cobra.MousetrapHelpText = "" +} + +// MakeCommand makes the top-level Cobra command for this app. +func MakeCommand() *cobra.Command { + systrayParams := systray.Params{} + + // log file path + var logFilePath string + confPath, err := winutil.GetProgramDataDir() + if err == nil { + logFilePath = filepath.Join(confPath, "logs", "ddtray.log") + } else { + logFilePath = defaultLogFile + } + + // log params + var logParams log.Params + if subsystem == "windows" { + logParams = log.LogForDaemon("TRAY", "system_tray.log_file", logFilePath) + } else if subsystem == "console" { + logParams = log.LogForOneShot("TRAY", "info", true) + } + + // root command + cmd := &cobra.Command{ + Use: fmt.Sprintf("%s", os.Args[0]), + SilenceUsage: true, + RunE: func(cmd *cobra.Command, args []string) error { + return fxutil.Run( + // core + fx.Supply(core.BundleParams{ + ConfigParams: config.NewParams(common.DefaultConfPath), + LogParams: logParams, + }), + core.Bundle, + // systray + fx.Supply(systrayParams), + systray.Module, + // require the systray component, causing it to start + fx.Invoke(func(_ systray.Component) {}), + ) + }, + } + + // + // NOTE: The command line help/usage will not be visible in the release binary because the PE subsystem is "windows" + // + + cmd.PersistentFlags().BoolVar(&systrayParams.LaunchGuiFlag, "launch-gui", false, "Launch browser configuration and exit") + + // launch-elev=true only means the process should have been elevated so that it will not elevate again. If the + // parameter is specified but the process is not elevated, some operation will fail due to access denied. + cmd.PersistentFlags().BoolVar(&systrayParams.LaunchElevatedFlag, "launch-elev", false, "Launch program as elevated, internal use only") + + // If this parameter is specified, the process will try to carry out the command before the message loop. + cmd.PersistentFlags().StringVar(&systrayParams.LaunchCommand, "launch-cmd", "", "Carry out a specific command after launch") + + return cmd +} diff --git a/cmd/systray/ddtray.exe.manifest b/cmd/systray/ddtray.exe.manifest index 54d6cb1df9ea35..2cd320f3d310cb 100644 --- a/cmd/systray/ddtray.exe.manifest +++ b/cmd/systray/ddtray.exe.manifest @@ -10,7 +10,7 @@ diff --git a/cmd/systray/main_windows.go b/cmd/systray/main_windows.go new file mode 100644 index 00000000000000..6dd2b9e8f6a750 --- /dev/null +++ b/cmd/systray/main_windows.go @@ -0,0 +1,23 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package main + +import ( + "os" + + "github.com/DataDog/datadog-agent/cmd/internal/runcmd" + "github.com/DataDog/datadog-agent/cmd/systray/command" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +func main() { + exitcode := 0 + defer func() { + log.Flush() + os.Exit(exitcode) + }() + exitcode = runcmd.Run(command.MakeCommand()) +} diff --git a/cmd/systray/systray.go b/cmd/systray/systray.go deleted file mode 100644 index c71b413f050276..00000000000000 --- a/cmd/systray/systray.go +++ /dev/null @@ -1,395 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. -//go:build windows -// +build windows - -package main - -//#include -// -//BOOL LaunchUnelevated(LPCWSTR CommandLine) -//{ -// BOOL result = FALSE; -// HWND hwnd = GetShellWindow(); -// -// if (hwnd != NULL) -// { -// DWORD pid; -// if (GetWindowThreadProcessId(hwnd, &pid) != 0) -// { -// HANDLE process = OpenProcess(PROCESS_CREATE_PROCESS, FALSE, pid); -// -// if (process != NULL) -// { -// SIZE_T size; -// if ((!InitializeProcThreadAttributeList(NULL, 1, 0, &size)) && (GetLastError() == ERROR_INSUFFICIENT_BUFFER)) -// { -// LPPROC_THREAD_ATTRIBUTE_LIST p = (LPPROC_THREAD_ATTRIBUTE_LIST)malloc(size); -// if (p != NULL) -// { -// if (InitializeProcThreadAttributeList(p, 1, 0, &size)) -// { -// if (UpdateProcThreadAttribute(p, 0, -// PROC_THREAD_ATTRIBUTE_PARENT_PROCESS, -// &process, sizeof(process), -// NULL, NULL)) -// { -// STARTUPINFOEXW siex = {0}; -// siex.lpAttributeList = p; -// siex.StartupInfo.cb = sizeof(siex); -// PROCESS_INFORMATION pi = {0}; -// -// size_t cmdlen = wcslen(CommandLine); -// size_t rawcmdlen = (cmdlen + 1) * sizeof(WCHAR); -// PWSTR cmdstr = (PWSTR)malloc(rawcmdlen); -// if (cmdstr != NULL) -// { -// memcpy(cmdstr, CommandLine, rawcmdlen); -// if (CreateProcessW(NULL, cmdstr, NULL, NULL, FALSE, -// CREATE_NEW_CONSOLE | EXTENDED_STARTUPINFO_PRESENT, -// NULL, NULL, &siex.StartupInfo, &pi)) -// { -// result = TRUE; -// CloseHandle(pi.hProcess); -// CloseHandle(pi.hThread); -// } -// free(cmdstr); -// } -// } -// } -// free(p); -// } -// } -// CloseHandle(process); -// } -// } -// } -// return result; -//} -import "C" - -import ( - "flag" - "fmt" - "os" - "os/exec" - "runtime" - "strings" - "time" - "unsafe" - - seelog "github.com/cihub/seelog" - - "github.com/DataDog/datadog-agent/pkg/util/log" - - "github.com/DataDog/datadog-agent/pkg/version" - - "github.com/lxn/walk" - "golang.org/x/sys/windows" -) - -type menuItem struct { - label string - handler walk.EventHandler - enabled bool -} - -const ( - cmdTextStartService = "StartService" - cmdTextStopService = "StopService" - cmdTextRestartService = "RestartService" - cmdTextConfig = "Config" -) - -var ( - separator = "SEPARATOR" - launchGraceTime = 2 - ni *walk.NotifyIcon - launchgui bool - launchelev bool - launchcmd string - eventname = windows.StringToUTF16Ptr("ddtray-event") - isUserAdmin bool - cmds = map[string]func(){ - cmdTextStartService: onStart, - cmdTextStopService: onStop, - cmdTextRestartService: onRestart, - cmdTextConfig: onConfigure, - } -) - -func init() { - enableLoggingToFile() - - isAdmin, err := isUserAnAdmin() - isUserAdmin = isAdmin - - if err != nil { - log.Warnf("Failed to call isUserAnAdmin %v", err) - // If we cannot determine if the user is admin or not let the user allow to click on the buttons. - isUserAdmin = true - } -} - -func createMenuItems(notifyIcon *walk.NotifyIcon) []menuItem { - av, _ := version.Agent() - verstring := av.GetNumberAndPre() - - menuHandler := func(cmd string) func() { - return func() { - execCmdOrElevate(cmd) - } - } - - menuitems := make([]menuItem, 0) - menuitems = append(menuitems, menuItem{label: verstring, enabled: false}) - menuitems = append(menuitems, menuItem{label: separator}) - menuitems = append(menuitems, menuItem{label: "&Start", handler: menuHandler(cmdTextStartService), enabled: true}) - menuitems = append(menuitems, menuItem{label: "S&top", handler: menuHandler(cmdTextStopService), enabled: true}) - menuitems = append(menuitems, menuItem{label: "&Restart", handler: menuHandler(cmdTextRestartService), enabled: true}) - menuitems = append(menuitems, menuItem{label: "&Configure", handler: menuHandler(cmdTextConfig), enabled: true}) - menuitems = append(menuitems, menuItem{label: "&Flare", handler: onFlare, enabled: true}) - menuitems = append(menuitems, menuItem{label: separator}) - menuitems = append(menuitems, menuItem{label: "E&xit", handler: onExit, enabled: true}) - - return menuitems -} - -func isUserAnAdmin() (bool, error) { - shell32 := windows.NewLazySystemDLL("Shell32.dll") - defer windows.FreeLibrary(windows.Handle(shell32.Handle())) - - isUserAnAdminProc := shell32.NewProc("IsUserAnAdmin") - ret, _, winError := isUserAnAdminProc.Call() - - if winError != windows.NTE_OP_OK { - return false, fmt.Errorf("IsUserAnAdmin returns error code %d", winError) - } - if ret == 0 { - return false, nil - } - return true, nil -} - -func showCustomMessage(notifyIcon *walk.NotifyIcon, message string) { - if err := notifyIcon.ShowCustom("Datadog Agent Manager", message); err != nil { - log.Warnf("Failed to show custom message %v", err) - } -} - -func onExit() { - walk.App().Exit(0) -} - -func main() { - // Following https://github.com/lxn/win/commit/d9566253ae00d0a7dc7e4c9bda651dcfee029001 - // it's up to the caller to lock OS threads - runtime.LockOSThread() - defer runtime.UnlockOSThread() - - flag.BoolVar(&launchgui, "launch-gui", false, "Launch browser configuration and exit") - - // launch-elev=true only means the process should have been elevated so that it will not elevate again. If the - // parameter is specified but the process is not elevated, some operation will fail due to access denied. - flag.BoolVar(&launchelev, "launch-elev", false, "Launch program as elevated, internal use only") - - // If this parameter is specified, the process will try to carry out the command before the message loop. - flag.StringVar(&launchcmd, "launch-cmd", "", "Carry out a specific command after launch") - flag.Parse() - - log.Debugf("launch-gui is %v, launch-elev is %v, launch-cmd is %v", launchgui, launchelev, launchcmd) - - if launchgui { - //enableLoggingToConsole() - defer log.Flush() - log.Debug("Preparing to launch configuration interface...") - onConfigure() - } - - // Check to see if the process is already running - h, _ := windows.OpenEvent(0x1F0003, // EVENT_ALL_ACCESS - false, - eventname) - - if h != windows.Handle(0) { - // Process already running. - windows.CloseHandle(h) - - // Wait a short period and recheck in case the other process will quit. - time.Sleep(time.Duration(launchGraceTime) * time.Second) - - // Try again - h, _ := windows.OpenEvent(0x1F0003, // EVENT_ALL_ACCESS - false, - eventname) - - if h != windows.Handle(0) { - windows.CloseHandle(h) - return - } - } - - // otherwise, create the handle so that nobody else will - h, _ = windows.CreateEvent(nil, 0, 0, eventname) - // should never fail; test just to make sure we don't close unopened handle - if h != windows.Handle(0) { - defer windows.CloseHandle(h) - } - // We need either a walk.MainWindow or a walk.Dialog for their message loop. - // We will not make it visible in this example, though. - mw, err := walk.NewMainWindow() - if err != nil { - log.Errorf("Failed to create main window %v", err) - os.Exit(1) - } - - // 1 is the ID of the MAIN_ICON in systray.rc - icon, err := walk.NewIconFromResourceId(1) - if err != nil { - log.Warnf("Failed to load icon %v", err) - } - // Create the notify icon and make sure we clean it up on exit. - ni, err = walk.NewNotifyIcon() - if err != nil { - log.Errorf("Failed to create newNotifyIcon %v", err) - os.Exit(2) - } - defer ni.Dispose() - - // Set the icon and a tool tip text. - if err := ni.SetIcon(icon); err != nil { - log.Warnf("Failed to set icon %v", err) - } - if err := ni.SetToolTip("Click for info or use the context menu to exit."); err != nil { - log.Warnf("Failed to set tooltip text %v", err) - } - - // When the left mouse button is pressed, bring up our balloon. - ni.MouseDown().Attach(func(x, y int, button walk.MouseButton) { - if button != walk.LeftButton { - return - } - showCustomMessage(ni, "Please right click to display available options.") - }) - - menuitems := createMenuItems(ni) - - for _, item := range menuitems { - var action *walk.Action - if item.label == separator { - action = walk.NewSeparatorAction() - } else { - action = walk.NewAction() - if err := action.SetText(item.label); err != nil { - log.Warnf("Failed to set text for item %s %v", item.label, err) - continue - } - err = action.SetEnabled(item.enabled) - if err != nil { - log.Warnf("Failed to set enabled for item %s %v", item.label, err) - continue - } - if item.handler != nil { - _ = action.Triggered().Attach(item.handler) - } - } - err = ni.ContextMenu().Actions().Add(action) - if err != nil { - log.Warnf("Failed to add action for item %s to context menu %v", item.label, err) - continue - } - } - - // The notify icon is hidden initially, so we have to make it visible. - if err := ni.SetVisible(true); err != nil { - log.Warnf("Failed to set window visibility %v", err) - } - - // If a command is specified in process command line, carry it out. - if launchcmd != "" { - execCmdOrElevate(launchcmd) - } - - // Run the message loop. - mw.Run() -} - -// opens a browser window at the specified URL -func open(url string) error { - cmdptr := windows.StringToUTF16Ptr("rundll32.exe url.dll,FileProtocolHandler " + url) - if C.LaunchUnelevated(C.LPCWSTR(unsafe.Pointer(cmdptr))) == 0 { - // Failed to run process non-elevated, retry with normal launch. - log.Warnf("Failed to launch configuration page as non-elevated, will launch as current process.") - return exec.Command("rundll32", "url.dll,FileProtocolHandler", url).Start() - } - - // Succeeded, return no error. - return nil -} - -func enableLoggingToFile() { - seeConfig := ` - - - - - ` - logger, _ := seelog.LoggerFromConfigAsBytes([]byte(seeConfig)) - log.ReplaceLogger(logger) -} - -//nolint:deadcode // for debugging -func enableLoggingToConsole() { - seeConfig := ` - - - - - ` - logger, _ := seelog.LoggerFromConfigAsBytes([]byte(seeConfig)) - log.ReplaceLogger(logger) -} - -// execCmdOrElevate carries out a command. If current process is not elevated and is not supposed to be elevated, it will launch -// itself as elevated and quit from the current instance. -func execCmdOrElevate(cmd string) { - if !launchelev && !isUserAdmin { - // If not launched as elevated and user is not admin, relaunch self. Use AND here to prevent from dead loop. - relaunchElevated(cmd) - - // If elevation failed, just quit to the caller. - return - } - - if cmds[cmd] != nil { - cmds[cmd]() - } -} - -// relaunchElevated launch another instance of the current process asking it to carry out a command as admin. -// If the function succeeds, it will quit the process, otherwise the function will return to the caller. -func relaunchElevated(cmd string) { - verb := "runas" - exe, _ := os.Executable() - cwd, _ := os.Getwd() - - // Reconstruct arguments, drop launch-gui and tell the new process it should have been elevated. - xargs := []string{"-launch-elev=true", "-launch-cmd=" + cmd} - args := strings.Join(xargs, " ") - - verbPtr, _ := windows.UTF16PtrFromString(verb) - exePtr, _ := windows.UTF16PtrFromString(exe) - cwdPtr, _ := windows.UTF16PtrFromString(cwd) - argPtr, _ := windows.UTF16PtrFromString(args) - - var showCmd int32 = 1 //SW_NORMAL - - err := windows.ShellExecute(0, verbPtr, exePtr, argPtr, cwdPtr, showCmd) - if err != nil { - log.Warnf("Failed to launch self as elevated %v", err) - } else { - onExit() - } -} diff --git a/cmd/trace-agent/config/config.go b/cmd/trace-agent/config/config.go index bb108ff6f8b5a4..ec011c64a01671 100644 --- a/cmd/trace-agent/config/config.go +++ b/cmd/trace-agent/config/config.go @@ -75,17 +75,12 @@ func prepareConfig(path string) (*config.AgentConfig, error) { cfg.DDAgentBin = defaultDDAgentBin cfg.AgentVersion = version.AgentVersion cfg.GitCommit = version.Commit - ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) - orch := fargate.GetOrchestrator(ctx) - cancel() - if err := ctx.Err(); err != nil && err != context.Canceled { - log.Errorf("Failed to get Fargate orchestrator. This may cause issues if you are in a Fargate instance: %v", err) - } - cfg.FargateOrchestrator = config.FargateOrchestratorName(orch) coreconfig.Datadog.SetConfigFile(path) if _, err := coreconfig.Load(); err != nil { return cfg, err } + orch := fargate.GetOrchestrator() // Needs to be after loading config, because it relies on feature auto-detection + cfg.FargateOrchestrator = config.FargateOrchestratorName(orch) if p := coreconfig.GetProxies(); p != nil { cfg.Proxy = httputils.GetProxyTransportFunc(p) } @@ -326,13 +321,7 @@ func applyDatadogConfig(c *config.AgentConfig) error { } } - // undocumented - if coreconfig.Datadog.IsSet("apm_config.max_cpu_percent") { - c.MaxCPU = coreconfig.Datadog.GetFloat64("apm_config.max_cpu_percent") / 100 - } - if coreconfig.Datadog.IsSet("apm_config.max_memory") { - c.MaxMemory = coreconfig.Datadog.GetFloat64("apm_config.max_memory") - } + setMaxMemCPU(c, coreconfig.IsContainerized()) // undocumented writers for key, cfg := range map[string]*config.WriterConfig{ @@ -669,3 +658,20 @@ func SetHandler() http.Handler { func httpError(w http.ResponseWriter, status int, err error) { http.Error(w, fmt.Sprintf(`{"error": %q}`, err.Error()), status) } + +// setMaxMemCPU sets watchdog's max_memory and max_cpu_percent parameters. +// If the agent is containerized, max_memory and max_cpu_percent are disabled by default. +// Resource limits are better handled by container runtimes and orchestrators. +func setMaxMemCPU(c *config.AgentConfig, isContainerized bool) { + if coreconfig.Datadog.IsSet("apm_config.max_cpu_percent") { + c.MaxCPU = coreconfig.Datadog.GetFloat64("apm_config.max_cpu_percent") / 100 + } else if isContainerized { + c.MaxCPU = 0 + } + + if coreconfig.Datadog.IsSet("apm_config.max_memory") { + c.MaxMemory = coreconfig.Datadog.GetFloat64("apm_config.max_memory") + } else if isContainerized { + c.MaxMemory = 0 + } +} diff --git a/cmd/trace-agent/config/config_otlp_test.go b/cmd/trace-agent/config/config_otlp_test.go index 43658bcb2003a6..e33f65fb42d736 100644 --- a/cmd/trace-agent/config/config_otlp_test.go +++ b/cmd/trace-agent/config/config_otlp_test.go @@ -32,6 +32,5 @@ func TestFullYamlConfigWithOTLP(t *testing.T) { assert.NoError(applyDatadogConfig(c)) assert.Equal("0.0.0.0", c.OTLPReceiver.BindHost) - assert.Equal(0, c.OTLPReceiver.HTTPPort) assert.Equal(50053, c.OTLPReceiver.GRPCPort) } diff --git a/cmd/trace-agent/config/config_test.go b/cmd/trace-agent/config/config_test.go index 470b381e3105d4..7e34fb7d61f4b6 100644 --- a/cmd/trace-agent/config/config_test.go +++ b/cmd/trace-agent/config/config_test.go @@ -14,6 +14,7 @@ import ( "path/filepath" "reflect" "regexp" + "runtime" "strings" "testing" "time" @@ -990,3 +991,88 @@ func TestLoadEnv(t *testing.T) { } }) } + +func TestFargateConfig(t *testing.T) { + assert := assert.New(t) + type testData struct { + name string + envKey string + envValue string + orchestrator config.FargateOrchestratorName + } + for _, data := range []testData{ + { + name: "ecs_fargate", + envKey: "ECS_FARGATE", + envValue: "true", + orchestrator: config.OrchestratorECS, + }, + { + name: "eks_fargate", + envKey: "DD_EKS_FARGATE", + envValue: "true", + orchestrator: config.OrchestratorEKS, + }, + { + name: "unknown", + envKey: "ECS_FARGATE", + envValue: "", + orchestrator: config.OrchestratorUnknown, + }, + } { + t.Run("", func(t *testing.T) { + defer cleanConfig()() + t.Setenv(data.envKey, data.envValue) + cfg, err := LoadConfigFile("./testdata/no_apm_config.yaml") + assert.NoError(err) + + if runtime.GOOS == "darwin" { + assert.Equal(config.OrchestratorUnknown, cfg.FargateOrchestrator) + } else { + assert.Equal(data.orchestrator, cfg.FargateOrchestrator) + } + }) + } +} + +func TestSetMaxMemCPU(t *testing.T) { + t.Run("default, non-containerized", func(t *testing.T) { + cleanConfig() + defer cleanConfig() + c := config.New() + setMaxMemCPU(c, false) + assert.Equal(t, 0.5, c.MaxCPU) + assert.Equal(t, 5e8, c.MaxMemory) + }) + + t.Run("default, containerized", func(t *testing.T) { + cleanConfig() + defer cleanConfig() + c := config.New() + setMaxMemCPU(c, true) + assert.Equal(t, 0.0, c.MaxCPU) + assert.Equal(t, 0.0, c.MaxMemory) + }) + + t.Run("limits set, non-containerized", func(t *testing.T) { + cleanConfig() + defer cleanConfig() + c := config.New() + coreconfig.Datadog.Set("apm_config.max_cpu_percent", "20") + coreconfig.Datadog.Set("apm_config.max_memory", "200") + setMaxMemCPU(c, false) + assert.Equal(t, 0.2, c.MaxCPU) + assert.Equal(t, 200.0, c.MaxMemory) + }) + + t.Run("limits set, containerized", func(t *testing.T) { + cleanConfig() + defer cleanConfig() + c := config.New() + coreconfig.Datadog.Set("apm_config.max_cpu_percent", "30") + coreconfig.Datadog.Set("apm_config.max_memory", "300") + setMaxMemCPU(c, true) + assert.Equal(t, 0.3, c.MaxCPU) + assert.Equal(t, 300.0, c.MaxMemory) + }) +} diff --git a/cmd/trace-agent/remote_config.go b/cmd/trace-agent/remote_config.go index 8f0b6471e3ff8e..b7922f846c5c46 100644 --- a/cmd/trace-agent/remote_config.go +++ b/cmd/trace-agent/remote_config.go @@ -42,7 +42,7 @@ func putBuffer(buffer *bytes.Buffer) { } func remoteConfigHandler(r *api.HTTPReceiver, client pbgo.AgentSecureClient, token string, cfg *config.AgentConfig) http.Handler { - cidProvider := api.NewIDProvider("/proc") + cidProvider := api.NewIDProvider(cfg.ContainerProcRoot) return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { defer timing.Since("datadog.trace_agent.receiver.config_process_ms", time.Now()) tags := r.TagStats(api.V07, req.Header).AsTags() diff --git a/cmd/trace-agent/test/testsuite/traces_test.go b/cmd/trace-agent/test/testsuite/traces_test.go index d601f84786503e..c7bfcda5ab6f68 100644 --- a/cmd/trace-agent/test/testsuite/traces_test.go +++ b/cmd/trace-agent/test/testsuite/traces_test.go @@ -9,11 +9,12 @@ import ( "testing" "time" + "github.com/stretchr/testify/assert" + "github.com/DataDog/datadog-agent/cmd/trace-agent/test" "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/pb" "github.com/DataDog/datadog-agent/pkg/trace/testutil" - "github.com/stretchr/testify/assert" ) // create a new config to access default config values diff --git a/comp/README.md b/comp/README.md index 794a17fc446f3e..bbb2b04e33c4aa 100644 --- a/comp/README.md +++ b/comp/README.md @@ -16,6 +16,43 @@ agent flavors and binaries. Package config implements a component to handle agent configuration. This component temporarily wraps pkg/config. +### [comp/core/flare](https://pkg.go.dev/github.com/DataDog/dd-agent-comp-experiments/comp/core/flare) + +Package flare implements a component to generate flares from the agent. + ### [comp/core/log](https://pkg.go.dev/github.com/DataDog/dd-agent-comp-experiments/comp/core/log) Package log implements a component to handle logging internal to the agent. + +## [comp/process](https://pkg.go.dev/github.com/DataDog/dd-agent-comp-experiments/comp/process) (Component Bundle) + +*Datadog Team*: processes + +Package process implements the "process" bundle, providing components for the Process Agent + +### [comp/process/containercheck](https://pkg.go.dev/github.com/DataDog/dd-agent-comp-experiments/comp/process/containercheck) + +Package containercheck implements a component to handle Container data collection in the Process Agent. + +### [comp/process/processcheck](https://pkg.go.dev/github.com/DataDog/dd-agent-comp-experiments/comp/process/processcheck) + +Package processcheck implements a component to handle Process data collection in the Process Agent. + +### [comp/process/runner](https://pkg.go.dev/github.com/DataDog/dd-agent-comp-experiments/comp/process/runner) + +Package runner implements a component to run data collection checks in the Process Agent. + +### [comp/process/submitter](https://pkg.go.dev/github.com/DataDog/dd-agent-comp-experiments/comp/process/submitter) + +Package submitter implements a component to submit collected data in the Process Agent to +supported Datadog intakes. + +## [comp/systray](https://pkg.go.dev/github.com/DataDog/dd-agent-comp-experiments/comp/systray) (Component Bundle) + +*Datadog Team*: windows-agent + +Package systray implements the Datadog Agent Manager System Tray + +### [comp/systray/systray](https://pkg.go.dev/github.com/DataDog/dd-agent-comp-experiments/comp/systray/systray) + +Package systray diff --git a/comp/core/bundle.go b/comp/core/bundle.go index 04ed9b34459426..513636d78d06c7 100644 --- a/comp/core/bundle.go +++ b/comp/core/bundle.go @@ -14,20 +14,28 @@ package core import ( "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/flare" "github.com/DataDog/datadog-agent/comp/core/log" "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "go.uber.org/fx" ) // team: agent-shared-components // Bundle defines the fx options for this bundle. var Bundle = fxutil.Bundle( + // As `config.Module` expects `config.Params` as a parameter, it is require to define how to get `config.Params` from `BundleParams`. + fx.Provide(func(params BundleParams) config.Params { return params.ConfigParams }), config.Module, + fx.Provide(func(params BundleParams) log.Params { return params.LogParams }), log.Module, + flare.Module, ) // MockBundle defines the mock fx options for this bundle. var MockBundle = fxutil.Bundle( - config.MockModule, + fx.Provide(func(params BundleParams) config.Params { return params.ConfigParams }), + config.Module, + fx.Provide(func(params BundleParams) log.Params { return params.LogParams }), log.Module, ) diff --git a/comp/core/bundle_params.go b/comp/core/bundle_params.go index 81d97749cdf9b8..1522577adda5e0 100644 --- a/comp/core/bundle_params.go +++ b/comp/core/bundle_params.go @@ -6,88 +6,20 @@ package core import ( - "github.com/DataDog/datadog-agent/cmd/agent/common" - "github.com/DataDog/datadog-agent/comp/core/internal" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" ) // BundleParams defines the parameters for this bundle. -type BundleParams = internal.BundleParams - -// CreateAgentBundleParams creates a new BundleParams for the Core Agent -func CreateAgentBundleParams(confFilePath string, configLoadSecrets bool, options ...func(*BundleParams)) BundleParams { - params := CreateBundleParams(common.DefaultConfPath, options...) - params.ConfFilePath = confFilePath - params.ConfigLoadSecrets = configLoadSecrets - return params -} - -// CreateBundleParams creates a new BundleParams -func CreateBundleParams(defaultConfPath string, options ...func(*BundleParams)) BundleParams { - bundleParams := BundleParams{ - DefaultConfPath: defaultConfPath, - } - for _, o := range options { - o(&bundleParams) - } - return bundleParams -} - -func WithConfigName(name string) func(*BundleParams) { - return func(b *BundleParams) { - b.ConfigName = name - } -} - -func WithConfigMissingOK(v bool) func(*BundleParams) { - return func(b *BundleParams) { - b.ConfigMissingOK = v - } -} - -func WithConfigLoadSysProbe(v bool) func(*BundleParams) { - return func(b *BundleParams) { - b.ConfigLoadSysProbe = v - } -} - -func WithSecurityAgentConfigFilePaths(securityAgentConfigFilePaths []string) func(*BundleParams) { - return func(b *BundleParams) { - b.SecurityAgentConfigFilePaths = securityAgentConfigFilePaths - } -} - -func WithConfigLoadSecurityAgent(configLoadSecurityAgent bool) func(*BundleParams) { - return func(b *BundleParams) { - b.ConfigLoadSecurityAgent = configLoadSecurityAgent - } -} - -func WithConfFilePath(confFilePath string) func(*BundleParams) { - return func(b *BundleParams) { - b.ConfFilePath = confFilePath - } -} - -func WithConfigLoadSecrets(configLoadSecrets bool) func(*BundleParams) { - return func(b *BundleParams) { - b.ConfigLoadSecrets = configLoadSecrets - } -} - -func WithLogForOneShot(loggerName, level string, overrideFromEnv bool) func(*BundleParams) { - return func(b *BundleParams) { - *b = b.LogForOneShot(loggerName, level, overrideFromEnv) - } -} - -func WithLogForDaemon(loggerName, logFileConfig, defaultLogFile string) func(*BundleParams) { - return func(b *BundleParams) { - *b = b.LogForDaemon(loggerName, logFileConfig, defaultLogFile) - } -} - -func WithLogToFile(logFile string) func(*BundleParams) { - return func(b *BundleParams) { - *b = b.LogToFile(logFile) - } -} +// +// Logs-related parameters are implemented as unexported fields containing +// callbacks. These fields can be set with the `LogXxx()` methods, which +// return the updated BundleParams. One of `LogForOneShot` or `LogForDaemon` +// must be called. +type BundleParams struct { + ConfigParams + LogParams +} + +type ConfigParams = config.Params +type LogParams = log.Params diff --git a/comp/core/bundle_test.go b/comp/core/bundle_test.go index cf1873139660b5..d2fe2c00139a97 100644 --- a/comp/core/bundle_test.go +++ b/comp/core/bundle_test.go @@ -12,6 +12,7 @@ import ( "go.uber.org/fx" "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/flare" "github.com/DataDog/datadog-agent/comp/core/log" ) @@ -21,6 +22,7 @@ func TestBundleDependencies(t *testing.T) { // automatically. fx.Invoke(func(config.Component) {}), fx.Invoke(func(log.Component) {}), + fx.Invoke(func(flare.Component) {}), fx.Supply(BundleParams{}), Bundle)) diff --git a/comp/core/config/config.go b/comp/core/config/config.go index 0aadb48cc7382f..e5cc5ceb05cbef 100644 --- a/comp/core/config/config.go +++ b/comp/core/config/config.go @@ -15,7 +15,6 @@ import ( secconfig "github.com/DataDog/datadog-agent/cmd/security-agent/config" sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" - "github.com/DataDog/datadog-agent/comp/core/internal" "github.com/DataDog/datadog-agent/pkg/config" ) @@ -31,29 +30,24 @@ type cfg struct { type dependencies struct { fx.In - Params internal.BundleParams + Params Params } func newConfig(deps dependencies) (Component, error) { - warnings, err := setupConfig( - deps.Params.ConfFilePath, - deps.Params.ConfigName, - !deps.Params.ConfigLoadSecrets, - !deps.Params.ConfigMissingOK, - deps.Params.DefaultConfPath) + warnings, err := setupConfig(deps) if err != nil { return nil, err } - if deps.Params.ConfigLoadSysProbe { - _, err := sysconfig.Merge(deps.Params.SysProbeConfFilePath) + if deps.Params.configLoadSysProbe { + _, err := sysconfig.Merge(deps.Params.sysProbeConfFilePath) if err != nil { return &cfg{warnings}, err } } - if deps.Params.ConfigLoadSecurityAgent { - if err := secconfig.Merge(deps.Params.SecurityAgentConfigFilePaths); err != nil { + if deps.Params.configLoadSecurityAgent { + if err := secconfig.Merge(deps.Params.securityAgentConfigFilePaths); err != nil { return &cfg{warnings}, err } } diff --git a/comp/core/config/config_test.go b/comp/core/config/config_test.go index 62f651369b6045..2ba6b71cced7b5 100644 --- a/comp/core/config/config_test.go +++ b/comp/core/config/config_test.go @@ -14,7 +14,6 @@ import ( "github.com/stretchr/testify/require" - "github.com/DataDog/datadog-agent/comp/core/internal" "github.com/DataDog/datadog-agent/pkg/util/fxutil" ) @@ -28,10 +27,11 @@ func TestRealConfig(t *testing.T) { defer func() { os.Unsetenv("DD_DD_URL") }() fxutil.Test(t, fx.Options( - fx.Supply(internal.BundleParams{ - ConfigMissingOK: true, - ConfFilePath: dir, - }), + fx.Supply(NewParams( + "", + WithConfigMissingOK(true), + WithConfFilePath(dir), + )), Module, ), func(config Component) { require.Equal(t, "https://example.com", config.GetString("dd_url")) @@ -46,7 +46,7 @@ func TestMockConfig(t *testing.T) { defer func() { os.Unsetenv("DD_DD_URL") }() fxutil.Test(t, fx.Options( - fx.Supply(internal.BundleParams{}), + fx.Supply(Params{}), MockModule, ), func(config Component) { // values aren't set from env.. diff --git a/comp/core/config/params.go b/comp/core/config/params.go new file mode 100644 index 00000000000000..0b72c8f1b2f7f3 --- /dev/null +++ b/comp/core/config/params.go @@ -0,0 +1,168 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package config + +import "github.com/DataDog/datadog-agent/cmd/agent/common" + +// Params defines the parameters for the config component. +type Params struct { + // confFilePath is the path at which to look for configuration, usually + // given by the --cfgpath command-line flag. + confFilePath string + + // configName is the root of the name of the configuration file. The + // comp/core/config component will search for a file with this name + // in ConfFilePath, using a variety of extensions. The default is + // "datadog". + configName string + + // sysProbeConfFilePath is the path at which to look for system-probe + // configuration, usually given by --sysprobecfgpath. This is not used + // unless ConfigLoadSysProbe is true. + sysProbeConfFilePath string + + // ConfigLoadSysProbe determines whether to read the system-probe.yaml into + // the component's config data. + configLoadSysProbe bool + + // securityAgentConfigFilePaths are the paths at which to look for security-aegnt + // configuration, usually given by the --cfgpath command-line flag. + securityAgentConfigFilePaths []string + + // configLoadSecurityAgent determines whether to read the config from + // SecurityAgentConfigFilePaths or from ConfFilePath. + configLoadSecurityAgent bool + + // ConfigLoadSecrets determines whether secrets in the configuration file + // should be evaluated. This is typically false for one-shot commands. + configLoadSecrets bool + + // configMissingOK determines whether it is a fatal error if the config + // file does not exist. + configMissingOK bool + + // defaultConfPath determines the default configuration path. + // if defaultConfPath is empty, then no default configuration path is used. + defaultConfPath string +} + +// NewParams creates a new instance of Params +func NewParams(defaultConfPath string, options ...func(*Params)) Params { + params := Params{ + defaultConfPath: defaultConfPath, + } + for _, o := range options { + o(¶ms) + } + return params +} + +// NewAgentParamsWithSecrets creates a new instance of Params using secrets for the Agent. +func NewAgentParamsWithSecrets(confFilePath string, options ...func(*Params)) Params { + return newAgentParams(confFilePath, true, options...) +} + +// NewAgentParamsWithoutSecrets creates a new instance of Params without using secrets for the Agent. +func NewAgentParamsWithoutSecrets(confFilePath string, options ...func(*Params)) Params { + return newAgentParams(confFilePath, false, options...) +} + +func newAgentParams(confFilePath string, configLoadSecrets bool, options ...func(*Params)) Params { + params := NewParams(common.DefaultConfPath, options...) + params.confFilePath = confFilePath + params.configLoadSecrets = configLoadSecrets + return params +} + +// NewSecurityAgentParams creates a new instance of Params for the Security Agent. +func NewSecurityAgentParams(securityAgentConfigFilePaths []string, options ...func(*Params)) Params { + params := NewParams(common.DefaultConfPath, options...) + // TODO: Uncomment once we stop using the MergeConfigurationFiles for SecAgent launch + // This code block currently breaks the setup of only have security-agent.yaml and NOT datadog.yaml + //if len(securityAgentConfigFilePaths) > 0 { + // params.confFilePath = securityAgentConfigFilePaths[0] + //} + params.securityAgentConfigFilePaths = securityAgentConfigFilePaths + params.configLoadSecurityAgent = true + + params.configLoadSecrets = true + params.configMissingOK = false + return params +} + +func NewClusterAgentParams(configFilePath string, options ...func(*Params)) Params { + return NewParams(common.DefaultConfPath, + WithConfFilePath(configFilePath), + WithConfigName("datadog-cluster")) +} + +func WithConfigName(name string) func(*Params) { + return func(b *Params) { + b.configName = name + } +} + +func WithConfigMissingOK(v bool) func(*Params) { + return func(b *Params) { + b.configMissingOK = v + } +} + +func WithConfigLoadSysProbe(v bool) func(*Params) { + return func(b *Params) { + b.configLoadSysProbe = v + } +} + +func WithSecurityAgentConfigFilePaths(securityAgentConfigFilePaths []string) func(*Params) { + return func(b *Params) { + b.securityAgentConfigFilePaths = securityAgentConfigFilePaths + } +} + +func WithConfigLoadSecurityAgent(configLoadSecurityAgent bool) func(*Params) { + return func(b *Params) { + b.configLoadSecurityAgent = configLoadSecurityAgent + } +} + +func WithConfFilePath(confFilePath string) func(*Params) { + return func(b *Params) { + b.confFilePath = confFilePath + } +} + +func WithConfigLoadSecrets(configLoadSecrets bool) func(*Params) { + return func(b *Params) { + b.configLoadSecrets = configLoadSecrets + } +} + +func WithSysProbeConfFilePath(sysProbeConfFilePath string) func(*Params) { + return func(b *Params) { + b.sysProbeConfFilePath = sysProbeConfFilePath + } +} + +// These functions are used in unit tests. + +// ConfigLoadSecrets determines whether secrets in the configuration file +// should be evaluated. This is typically false for one-shot commands. +func (p Params) ConfigLoadSecrets() bool { + return p.configLoadSecrets +} + +// ConfigMissingOK determines whether it is a fatal error if the config +// file does not exist. +func (p Params) ConfigMissingOK() bool { + return p.configMissingOK +} + +// ConfigLoadSysProbe determines whether to read the system-probe.yaml into +// the component's config data. +func (p Params) ConfigLoadSysProbe() bool { + return p.configLoadSysProbe +} diff --git a/comp/core/config/params_test.go b/comp/core/config/params_test.go new file mode 100644 index 00000000000000..a349d195749584 --- /dev/null +++ b/comp/core/config/params_test.go @@ -0,0 +1,54 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package config + +import ( + "github.com/DataDog/datadog-agent/cmd/agent/common" + "github.com/stretchr/testify/require" + "testing" +) + +func TestNewSecurityAgentParams(t *testing.T) { + tests := []struct { + name string + input []string + check func(params Params) + }{ + { + name: "no security agent config file paths", + input: []string{}, + check: func(params Params) { + require.Equal(t, "", params.confFilePath) + require.Equal(t, []string{}, params.securityAgentConfigFilePaths, "Security Agent Config File Paths not matching") + }, + }, + { + name: "1 security agent config file path", + input: []string{"/etc/datadog-agent/security-agent.yaml"}, + check: func(params Params) { + require.Equal(t, "/etc/datadog-agent/security-agent.yaml", params.confFilePath) + require.Equal(t, []string{"/etc/datadog-agent/security-agent.yaml"}, params.securityAgentConfigFilePaths, "Security Agent config file paths not matching") + }, + }, + { + name: "more than 1 security agent config file paths", + input: []string{"/etc/datadog-agent/security-agent.yaml", "/etc/datadog-agent/other.yaml"}, + check: func(params Params) { + require.Equal(t, "/etc/datadog-agent/security-agent.yaml", params.confFilePath) + require.Equal(t, []string{"/etc/datadog-agent/security-agent.yaml"}, params.securityAgentConfigFilePaths, "Security Agent config file paths not matching") + }, + }, + } + + for _, test := range tests { + configComponentParams := NewSecurityAgentParams(test.input) + + require.Equal(t, true, configComponentParams.configLoadSecurityAgent, "configLoadSecurityAgent values not matching") + require.Equal(t, common.DefaultConfPath, configComponentParams.defaultConfPath, "defaultConfPath values not matching") + require.Equal(t, true, configComponentParams.configLoadSecrets, "configLoadSecrets values not matching") + require.Equal(t, false, configComponentParams.configMissingOK, "configMissingOK values not matching") + } +} diff --git a/comp/core/config/setup.go b/comp/core/config/setup.go index 1631d2e055cfd2..0e0e220020afe9 100644 --- a/comp/core/config/setup.go +++ b/comp/core/config/setup.go @@ -13,21 +13,22 @@ import ( "runtime" "strings" - "github.com/DataDog/viper" - "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/viper" ) // setupConfig is copied from cmd/agent/common/helpers.go. -func setupConfig( - confFilePath string, - configName string, - withoutSecrets bool, - failOnMissingFile bool, - defaultConfPath string) (*config.Warnings, error) { +func setupConfig(deps dependencies) (*config.Warnings, error) { + confFilePath := deps.Params.confFilePath + configName := deps.Params.configName + withoutSecrets := !deps.Params.configLoadSecrets + failOnMissingFile := !deps.Params.configMissingOK + defaultConfPath := deps.Params.defaultConfPath + if configName != "" { config.Datadog.SetConfigName(configName) } + // set the paths where a config file is expected if len(confFilePath) != 0 { // if the configuration file path was supplied on the command line, @@ -69,8 +70,8 @@ func setupConfig( return warnings, nil } -// MergeConfigurationFiles reads an array of configuration filenames and attempts to merge them. The userDefined value is used to specify that configurationFilesArray contains filenames defined on the command line -// TODO(paulcacheux): change this a component method once all security-agent commands have been converted to fx +// MergeConfigurationFiles reads an array of configuration filenames and attempts to merge them. The userDefined value is used to specify that configurationFilesArray contains filenames defined on the command line. +// TODO: This is ONLY for SecAgent use! Deleting this once all SecAgent commands have been converted to fx func MergeConfigurationFiles(configName string, configurationFilesArray []string, userDefined bool) (*config.Warnings, error) { // we'll search for a config file named `datadog.yaml` config.Datadog.SetConfigName(configName) @@ -79,6 +80,7 @@ func MergeConfigurationFiles(configName string, configurationFilesArray []string loadedConfiguration := false var warnings *config.Warnings + var deps dependencies // Load and merge configuration files for _, configurationFilename := range configurationFilesArray { @@ -89,7 +91,14 @@ func MergeConfigurationFiles(configName string, configurationFilesArray []string continue } if !loadedConfiguration { - w, err := setupConfig(configurationFilename, "", false, true, "") + deps.Params.confFilePath = configurationFilename + deps.Params.configName = "" + deps.Params.configLoadSecrets = true + deps.Params.configMissingOK = false + deps.Params.defaultConfPath = "" + deps.Params.configLoadSecurityAgent = true + + w, err := setupConfig(deps) if err != nil { if userDefined { fmt.Printf("Warning: unable to open %s\n", configurationFilename) diff --git a/comp/core/flare/component.go b/comp/core/flare/component.go new file mode 100644 index 00000000000000..fa84173c042c47 --- /dev/null +++ b/comp/core/flare/component.go @@ -0,0 +1,32 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +// Package flare implements a component to generate flares from the agent. +// +// A flare is a archive containing all the information necessary to troubleshoot the Agent. When openeing a support +// ticket a flare might be requested. Flares contain the Agent logs, configurations and much more. +package flare + +import ( + pkgFlare "github.com/DataDog/datadog-agent/pkg/flare" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "go.uber.org/fx" +) + +// team: agent-shared-components + +// Component is the component type. +type Component interface { + // Create creates a new flare locally and returns the path to the flare file. + Create(local bool, distPath, pyChecksPath string, logFilePaths []string, pdata pkgFlare.ProfileData, ipcError error) (string, error) +} + +// Module defines the fx options for this component. +var Module = fxutil.Component( + fx.Provide(newFlare), +) + +// The flare component doesn't provides a mock since other component don't use it directly. Other component will use the +// mock for the FlareBuilder instead. diff --git a/comp/core/flare/flare.go b/comp/core/flare/flare.go new file mode 100644 index 00000000000000..98e8636fa457c7 --- /dev/null +++ b/comp/core/flare/flare.go @@ -0,0 +1,54 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package flare + +import ( + "reflect" + "runtime" + + "github.com/DataDog/datadog-agent/comp/core/flare/helpers" + "github.com/DataDog/datadog-agent/comp/core/log" + pkgFlare "github.com/DataDog/datadog-agent/pkg/flare" + "go.uber.org/fx" +) + +type dependencies struct { + fx.In + + Log log.Component + Providers []helpers.FlareProvider `group:"flare"` +} + +type flare struct { + log log.Component + providers []helpers.FlareProvider +} + +func newFlare(deps dependencies) (Component, error) { + return &flare{ + log: deps.Log, + providers: deps.Providers, + }, nil +} + +func (f *flare) Create(local bool, distPath, pyChecksPath string, logFilePaths []string, pdata pkgFlare.ProfileData, ipcError error) (string, error) { + fb, err := helpers.NewFlareBuilder() + if err != nil { + return "", err + } + + for _, p := range f.providers { + err = p.Callback(fb) + f.log.Error("error calling '%s' for flare creation: %s", + runtime.FuncForPC(reflect.ValueOf(p.Callback).Pointer()).Name(), // reflect p.Callback function name + err) + } + + // Legacy flare code + pkgFlare.CompleteFlare(fb, local, distPath, pyChecksPath, logFilePaths, pdata, ipcError) + + return fb.Save() +} diff --git a/comp/core/flare/helpers/builder.go b/comp/core/flare/helpers/builder.go new file mode 100644 index 00000000000000..ab6181fa147052 --- /dev/null +++ b/comp/core/flare/helpers/builder.go @@ -0,0 +1,295 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package helpers + +import ( + "context" + "fmt" + "os" + "path/filepath" + "regexp" + "strings" + "time" + + "github.com/DataDog/datadog-agent/pkg/util/filesystem" + "github.com/DataDog/datadog-agent/pkg/util/hostname" + "github.com/DataDog/datadog-agent/pkg/util/hostname/validate" + "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/util/scrubber" + "github.com/mholt/archiver/v3" +) + +const ( + filePerm = 0644 +) + +func newBuilder(root string, hostname string) (*builder, error) { + fb := &builder{ + tmpDir: root, + permsInfos: permissionsInfos{}, + } + + fb.flareDir = filepath.Join(fb.tmpDir, hostname) + if err := os.MkdirAll(fb.flareDir, os.ModePerm); err != nil { + return nil, fmt.Errorf("Could not create root dir '%s' for flare: %v", fb.flareDir, err) + } + + fb.scrubber = scrubber.New() + scrubber.AddDefaultReplacers(fb.scrubber) + + // The default scrubber doesn't deal with api keys of other services, for + // example powerDNS which has an "api_key" field in its YAML configuration. + // We add a replacer to scrub even those credentials. + // + // It is a best effort to match the api key field without matching our + // own already scrubbed (we don't want to match: "**************************abcde") + // Basically we allow many special chars while forbidding *. + // + // We want the value to be at least 2 characters which will avoid matching the first '"' from the regular + // replacer for api_key. + otherAPIKeysRx := regexp.MustCompile(`api_key\s*:\s*[a-zA-Z0-9\\\/\^\]\[\(\){}!|%:;"~><=#@$_\-\+]{2,}`) + fb.scrubber.AddReplacer(scrubber.SingleLine, scrubber.Replacer{ + Regex: otherAPIKeysRx, + ReplFunc: func(b []byte) []byte { + return []byte("api_key: \"********\"") + }, + }) + + logPath, err := fb.PrepareFilePath("flare_creation.log") + if err != nil { + return nil, err + } + + f, err := os.OpenFile(logPath, os.O_CREATE|os.O_WRONLY, filePerm) + if err != nil { + return nil, fmt.Errorf("Could not create flare_creation.log file: %s", err) + } + fb.logFile = f + + return fb, nil +} + +// NewFlareBuilder returns a new FlareBuilder ready to be used. You need to call the Save method to archive all the data +// pushed to the flare as well as cleanup the temporary directories created. Not calling 'Save' after NewFlareBuilder +// will leave temporary directory on the file system. +func NewFlareBuilder() (FlareBuilder, error) { + tmpDir, err := os.MkdirTemp("", "") + if err != nil { + return nil, fmt.Errorf("Could not create temp dir for flare: %s", err) + } + + // Get hostname, if there's an error in getting the hostname, + // set the hostname to unknown + hostname, err := hostname.Get(context.TODO()) + if err != nil { + hostname = "unknown" + } + hostname = validate.CleanHostnameDir(hostname) + + fperm, err := filesystem.NewPermission() + if err != nil { + return nil, err + } + err = fperm.RemoveAccessToOtherUsers(tmpDir) + if err != nil { + return nil, err + } + + return newBuilder(tmpDir, hostname) +} + +// builder implements the FlareBuilder interface +type builder struct { + // tmpDir is the temp directory to store data before being archived + tmpDir string + // flareDir is the top directory to add file to. This is the equivalent to tmpDir/ + flareDir string + // permsInfos stores the original rights for the files/dirs that were copied into the flare + permsInfos permissionsInfos + + // specialized scrubber for flare content + scrubber *scrubber.Scrubber + + logFile *os.File +} + +func getArchiveName() string { + t := time.Now().UTC() + timeString := strings.ReplaceAll(t.Format(time.RFC3339), ":", "-") + + logLevel, err := log.GetLogLevel() + logLevelString := "" + if err == nil { + logLevelString = fmt.Sprintf("-%s", logLevel.String()) + } + + return fmt.Sprintf("datadog-agent-%s%s.zip", timeString, logLevelString) +} + +func (fb *builder) Save() (string, error) { + defer fb.clean() + + _ = fb.AddFileFromFunc("permissions.log", fb.permsInfos.commit) + _ = fb.logFile.Close() + + archiveName := getArchiveName() + archiveTmpPath := filepath.Join(fb.tmpDir, archiveName) + archiveFinalPath := filepath.Join(os.TempDir(), archiveName) + + // We first create the archive in our fb.tmpDir directory which is only readable by the current user (and + // SYSTEM/ADMIN on Windows). Then we retrict the archive permissions before moving it to the system temporary + // directory. This prevents other users from being able to read local flares. + + // File format is determined based on archivePath extension, so zip + err := archiver.Archive([]string{fb.flareDir}, archiveTmpPath) + if err != nil { + return "", err + } + + fperm, err := filesystem.NewPermission() + if err != nil { + return "", err + } + err = fperm.RemoveAccessToOtherUsers(archiveTmpPath) + if err != nil { + return "", err + } + + return archiveFinalPath, os.Rename(archiveTmpPath, archiveFinalPath) +} + +func (fb *builder) clean() { + os.RemoveAll(fb.tmpDir) +} + +func (fb *builder) logError(format string, params ...interface{}) error { + err := log.Errorf(format, params...) + _, _ = fb.logFile.WriteString(err.Error() + "\n") + return err +} + +func (fb *builder) AddFileFromFunc(destFile string, cb func() ([]byte, error)) error { + content, err := cb() + if err != nil { + return fb.logError("error collecting data from callback for '%s': %s", destFile, err) + } + + return fb.AddFile(destFile, content) +} + +func (fb *builder) AddFile(destFile string, content []byte) error { + content, err := fb.scrubber.ScrubBytes(content) + if err != nil { + return fb.logError("error scrubbing content for '%s': %s", destFile, err) + } + + f, err := fb.PrepareFilePath(destFile) + if err != nil { + return err + } + + if err := os.WriteFile(f, content, filePerm); err != nil { + return fb.logError("error writing data to '%s': %s", destFile, err) + } + return nil +} + +func (fb *builder) copyFileTo(shouldScrub bool, srcFile string, destFile string) error { + fb.permsInfos.add(srcFile) + + path, err := fb.PrepareFilePath(destFile) + if err != nil { + return err + } + + content, err := os.ReadFile(srcFile) + if err != nil { + return fb.logError("error reading file '%s' to be copy to '%s': %s", srcFile, destFile, err) + } + + if shouldScrub { + var err error + content, err = fb.scrubber.ScrubBytes(content) + if err != nil { + return fb.logError("error scrubbing content for file '%s': %s", destFile, err) + } + } + + err = os.WriteFile(path, content, filePerm) + if err != nil { + return fb.logError("error writing file '%s': %s", destFile, err) + } + + return nil +} + +func (fb *builder) CopyFileTo(srcFile string, destFile string) error { + return fb.copyFileTo(true, srcFile, destFile) +} + +func (fb *builder) CopyFile(srcFile string) error { + return fb.copyFileTo(true, srcFile, filepath.Base(srcFile)) +} + +func (fb *builder) copyDirTo(shouldScrub bool, srcDir string, destDir string, shouldInclude func(string) bool) error { + srcDir, err := filepath.Abs(srcDir) + if err != nil { + return fb.logError("error getting absolute path for '%s': %s", srcDir, err) + } + fb.permsInfos.add(srcDir) + + err = filepath.Walk(srcDir, func(src string, f os.FileInfo, err error) error { + if f == nil { + return nil + } + if f.IsDir() { + return nil + } + + if !shouldInclude(src) { + return nil + } + + targetFile := filepath.Join(destDir, strings.Replace(src, srcDir, "", 1)) + _ = fb.copyFileTo(shouldScrub, src, targetFile) + return nil + }) + if err != nil { + return fb.logError("error walking dir '%s': %s", srcDir, err) + } + return nil +} + +func (fb *builder) CopyDirToWithoutScrubbing(srcDir string, destDir string, shouldInclude func(string) bool) error { + return fb.copyDirTo(false, srcDir, destDir, shouldInclude) +} + +func (fb *builder) CopyDirTo(srcDir string, destDir string, shouldInclude func(string) bool) error { + return fb.copyDirTo(true, srcDir, destDir, shouldInclude) +} + +func (fb *builder) PrepareFilePath(path string) (string, error) { + p := filepath.Join(fb.flareDir, path) + + err := os.MkdirAll(filepath.Dir(p), os.ModePerm) + if err != nil { + return "", fb.logError("error creating directory for file '%s': %s", path, err) + } + return p, nil +} + +func (fb *builder) RegisterFilePerm(path string) { + fb.permsInfos.add(path) +} + +func (fb *builder) RegisterDirPerm(path string) { + _ = filepath.Walk(path, func(src string, f os.FileInfo, err error) error { + if f != nil { + fb.RegisterFilePerm(src) + } + return nil + }) +} diff --git a/comp/core/flare/helpers/builder_mock.go b/comp/core/flare/helpers/builder_mock.go new file mode 100644 index 00000000000000..200051a9e7765a --- /dev/null +++ b/comp/core/flare/helpers/builder_mock.go @@ -0,0 +1,75 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package helpers + +import ( + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +type FlareBuilderMock struct { + Fb FlareBuilder + Root string + t *testing.T +} + +func NewFlareBuilderMock(t *testing.T) *FlareBuilderMock { + root := t.TempDir() + + builder, err := newBuilder(root, "test-hostname") + require.NoError(t, err) + + fb := &FlareBuilderMock{ + Fb: builder, + Root: builder.flareDir, + t: t, + } + t.Cleanup(func() { builder.logFile.Close() }) + return fb +} +func (m *FlareBuilderMock) filePath(path ...string) string { + return filepath.Join( + append( + []string{m.Root}, + path..., + )...) +} + +// AssertFileExists asserts that a file exists within the flare +func (m *FlareBuilderMock) AssertFileExists(paths ...string) bool { + return assert.FileExists(m.t, m.filePath(paths...)) +} + +// AssertFileContent asserts that a file exists within the flare and has the correct content +func (m *FlareBuilderMock) AssertFileContent(content string, paths ...string) { + path := m.filePath(paths...) + + if assert.FileExists(m.t, path) { + data, err := os.ReadFile(path) + require.NoError(m.t, err) + assert.Equal(m.t, content, string(data), "Content of file %s is different from expected", path) + } +} + +// AssertFileContent asserts that a file exists within the flare and has the correct content +func (m *FlareBuilderMock) AssertFileContentMatch(pattern string, paths ...string) { + path := m.filePath(paths...) + + if assert.FileExists(m.t, path) { + data, err := os.ReadFile(path) + require.NoError(m.t, err) + assert.Regexp(m.t, pattern, string(data), "Content of file %s does not match Regexp", path) + } +} + +// AssertNoFileExists asserts that a file does not exists within the flare +func (m *FlareBuilderMock) AssertNoFileExists(paths ...string) bool { + return assert.NoFileExists(m.t, m.filePath(paths...)) +} diff --git a/comp/core/flare/helpers/builder_test.go b/comp/core/flare/helpers/builder_test.go new file mode 100644 index 00000000000000..4611c34ca6e7a6 --- /dev/null +++ b/comp/core/flare/helpers/builder_test.go @@ -0,0 +1,266 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package helpers + +import ( + "context" + "fmt" + "os" + "path/filepath" + "testing" + + "github.com/mholt/archiver/v3" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/pkg/util/hostname" + "github.com/DataDog/datadog-agent/pkg/util/hostname/validate" +) + +var FromSlash = filepath.FromSlash + +func setupDirWithData(t *testing.T) string { + root := filepath.Join(t.TempDir(), "root") + require.NoError(t, os.MkdirAll(filepath.Join(root, "depth1", "depth2"), os.ModePerm)) + + f1 := filepath.Join(root, "test1") + f2 := filepath.Join(root, "test2") + f3 := filepath.Join(root, "depth1", "test3") + f4 := filepath.Join(root, "depth1", "depth2", "test4") + + require.NoError(t, os.WriteFile(f1, []byte("some data"), os.ModePerm)) + require.NoError(t, os.WriteFile(f2, []byte("some data\napi_key: 123456789006789009"), os.ModePerm)) + require.NoError(t, os.WriteFile(f3, []byte("some data"), os.ModePerm)) + require.NoError(t, os.WriteFile(f4, []byte("some data"), os.ModePerm)) + + return root +} + +func assertFileContent(t *testing.T, fb *builder, expected string, path string) { + path = filepath.Join(fb.flareDir, FromSlash(path)) + + require.FileExists(t, path) + content, err := os.ReadFile(path) + require.NoError(t, err) + assert.Equal(t, []byte(expected), content) +} + +func getNewBuilder(t *testing.T) *builder { + f, err := NewFlareBuilder() + require.NotNil(t, f) + require.NoError(t, err) + + fb, success := f.(*builder) + require.True(t, success, "FlareBuilder returned by FlareBuilder is not a *builder type") + return fb +} + +func TestNewFlareBuilder(t *testing.T) { + fb := getNewBuilder(t) + + require.DirExists(t, fb.tmpDir) + require.DirExists(t, fb.flareDir) + require.FileExists(t, filepath.Join(fb.flareDir, "flare_creation.log")) + + archive, err := fb.Save() + assert.NoError(t, err) + assert.FileExists(t, archive) + os.RemoveAll(archive) + + assert.NoDirExists(t, fb.tmpDir) + assert.NoDirExists(t, fb.flareDir) +} + +func TestSave(t *testing.T) { + fb := getNewBuilder(t) + + root := setupDirWithData(t) + fb.CopyDirTo(root, "test", func(string) bool { return true }) + fb.AddFile("test.data", []byte("some data")) + + archivePath, err := fb.Save() + require.NoError(t, err) + assert.NoDirExists(t, fb.tmpDir) + require.FileExists(t, archivePath) + + defer os.RemoveAll(archivePath) + + tmpDir := t.TempDir() + + hostname, err := hostname.Get(context.TODO()) + if err != nil { + hostname = "unknown" + } + hostname = validate.CleanHostnameDir(hostname) + + archiver.Unarchive(archivePath, tmpDir) + assert.FileExists(t, filepath.Join(tmpDir, hostname, "test.data")) + assert.FileExists(t, filepath.Join(tmpDir, hostname, "test/depth1/depth2/test4")) +} + +func TestAddFileFromFunc(t *testing.T) { + fb := getNewBuilder(t) + defer fb.clean() + + fb.AddFileFromFunc(FromSlash("test/AddFileFromFunc"), func() ([]byte, error) { + return []byte("some data"), nil + }) + assertFileContent(t, fb, "some data", "test/AddFileFromFunc") + + fb.AddFileFromFunc(FromSlash("test/AddFileFromFunc_nil"), func() ([]byte, error) { + return nil, nil + }) + assertFileContent(t, fb, "", "test/AddFileFromFunc_nil") + + err := fb.AddFileFromFunc(FromSlash("test/AddFileFromFunc_error"), func() ([]byte, error) { + return nil, fmt.Errorf("some error") + }) + assert.Error(t, err) + assert.Equal(t, FromSlash("error collecting data from callback for 'test/AddFileFromFunc_error': some error"), err.Error()) + assert.NoFileExists(t, filepath.Join(fb.flareDir, "test", "AddFileFromFunc_error")) +} + +func TestAddFile(t *testing.T) { + fb := getNewBuilder(t) + defer fb.clean() + + fb.AddFile(FromSlash("test/AddFile"), []byte("some data")) + assertFileContent(t, fb, "some data", "test/AddFile") + + fb.AddFile(FromSlash("test/AddFile_scrubbed_api_key"), []byte("api_key : 123456789006789009")) + assertFileContent(t, fb, "api_key: \"********\"", "test/AddFile_scrubbed_api_key") +} + +// Test that writeScrubbedFile actually scrubs third-party API keys. +func TestRedactingOtherServicesApiKey(t *testing.T) { + fb := getNewBuilder(t) + defer fb.clean() + + clear := []byte(`init_config: +instances: +- host: 127.0.0.1 + api_key: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + port: 8082 + api_key: dGhpc2++lzM+XBhc3N3b3JkW113aXRo/c29tZWN]oYXJzMTIzCg== + version: 4 # omit this line if you're running pdns_recursor version 3.x`) + redacted := `init_config: +instances: +- host: 127.0.0.1 + api_key: "***************************aaaaa" + port: 8082 + api_key: "********" + version: 4 # omit this line if you're running pdns_recursor version 3.x` + + fb.AddFile("test.conf", clear) + assertFileContent(t, fb, redacted, "test.conf") +} + +func TestCopyFileTo(t *testing.T) { + fb := getNewBuilder(t) + defer fb.clean() + + path := filepath.Join(t.TempDir(), "test.data") + os.WriteFile(path, []byte("some data"), os.ModePerm) + + assert.NoError(t, fb.CopyFileTo(path, FromSlash("test/copy/test.data"))) + assertFileContent(t, fb, "some data", "test/copy/test.data") + assert.NoError(t, fb.CopyFileTo(path, FromSlash("test/copy2/new.data"))) + assertFileContent(t, fb, "some data", "test/copy2/new.data") + assert.NoError(t, fb.CopyFileTo(path, FromSlash("new.data"))) + assertFileContent(t, fb, "some data", "new.data") +} + +func TestCopyFile(t *testing.T) { + fb := getNewBuilder(t) + defer fb.clean() + + path := filepath.Join(t.TempDir(), "test.data") + os.WriteFile(path, []byte("some data"), os.ModePerm) + + assert.NoError(t, fb.CopyFile(path)) + assertFileContent(t, fb, "some data", "test.data") +} + +func TestCopyDirTo(t *testing.T) { + fb := getNewBuilder(t) + defer fb.clean() + + root := setupDirWithData(t) + + require.NoError(t, fb.CopyDirTo( + root, + "test", + func(f string) bool { + return filepath.Base(f) != "test3" + }, + )) + + assertFileContent(t, fb, "some data", filepath.Join("test", "test1")) + assertFileContent(t, fb, "some data\napi_key: \"********\"", filepath.Join("test", "test2")) + assert.NoFileExists(t, filepath.Join(fb.flareDir, "test", "depth1", "test3")) + assertFileContent(t, fb, "some data", filepath.Join("test", "depth1", "depth2", "test4")) +} + +func TestCopyDirToWithoutScrubbing(t *testing.T) { + fb := getNewBuilder(t) + defer fb.clean() + + root := setupDirWithData(t) + + require.NoError(t, fb.CopyDirToWithoutScrubbing( + root, + "test", + func(f string) bool { + return filepath.Base(f) != "test3" + }, + )) + + assertFileContent(t, fb, "some data", filepath.Join("test", "test1")) + assertFileContent(t, fb, "some data\napi_key: 123456789006789009", filepath.Join("test", "test2")) + assert.NoFileExists(t, filepath.Join(fb.flareDir, "test", "depth1", "test3")) + assertFileContent(t, fb, "some data", filepath.Join("test", "depth1", "depth2", "test4")) +} + +func TestPrepareFilePath(t *testing.T) { + fb := getNewBuilder(t) + defer fb.clean() + + fb.PrepareFilePath("a") + assert.NoDirExists(t, filepath.Join(fb.flareDir, "a")) + + fb.PrepareFilePath(FromSlash("a/")) + assert.NoDirExists(t, filepath.Join(fb.flareDir, "a")) + + fb.PrepareFilePath(FromSlash("a/file")) + assert.DirExists(t, filepath.Join(fb.flareDir, "a")) + + fb.PrepareFilePath(FromSlash("a/b/c/d/file")) + assert.DirExists(t, filepath.Join(fb.flareDir, "a", "b", "c", "d")) +} + +func TestRegisterDirPerm(t *testing.T) { + fb := getNewBuilder(t) + defer fb.clean() + + root := setupDirWithData(t) + + fb.RegisterDirPerm(root) + + expectedPaths := []string{ + fmt.Sprintf("%s", root), + fmt.Sprintf("%s/test1", root), + fmt.Sprintf("%s/test2", root), + fmt.Sprintf("%s/depth1", root), + fmt.Sprintf("%s/depth1/test3", root), + fmt.Sprintf("%s/depth1/depth2", root), + fmt.Sprintf("%s/depth1/depth2/test4", root), + } + + require.Len(t, fb.permsInfos, len(expectedPaths)) + for _, path := range expectedPaths { + assert.Contains(t, fb.permsInfos, path) + } +} diff --git a/comp/core/flare/helpers/helpers.go b/comp/core/flare/helpers/helpers.go new file mode 100644 index 00000000000000..b34586ca68cf48 --- /dev/null +++ b/comp/core/flare/helpers/helpers.go @@ -0,0 +1,143 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package helpers + +import ( + "go.uber.org/fx" +) + +// FlareBuilder contains all the helpers to add files to a flare archive. +// +// When adding data to a flare the builder will do multiple things internally. +// +// First a log of the archive creation will be kept and shipped with the flare. When using the the FlareBuilder you +// should not stop at the first error. We want to collect as much as possible. Any error returned by the a FlareBuilder +// method is added to the flare log. In general, you can safely ignore those errors unless sending a flare without some +// file/information would not make sense. +// +// The builder will automatically scrub any sensitive data from content and copied files. Still carefully analyze what +// is being added to ensure that it contains no credentials or unnecessary user-specific data. The FlareBuilder scrubs +// secrets that match pre-programmed patterns, but it is always better to not capture data containing secrets, than to +// scrub that data. +// +// Everytime a file is copied to the flare the original permissions and ownership of the file is recorded (Unix only). +// +// There are reserved path in the flare: "permissions.log" and "flare-creationg.log" (both at the root of the flare). +// Note as well that the flare does nothing to prevent files to be overwritten by different calls. It's up to the caller +// to make sure the path used in the flare doesn't clash with other modules. +type FlareBuilder interface { + // AddFile creates a new file in the flare with the content. + // + // 'destFile' is a path relative to the flare root (ex: "some/path/to/a/file"). Any necessary directory will + // automatically be created. + // + // 'content' is automatically scrubbed of any sensitive informations before being added to the flare. + AddFile(destFile string, content []byte) error + + // AddFileFromFunc creates a new file in the flare with the content returned by the callback. + // + // 'destFile' is a path relative to the flare root (ex: "some/path/to/a/file"). Any necessary directory will + // automatically be created. + // + // If the 'cb' returns an error, the file will not be created, the error is added to the flare's logs and returned to + // the caller. + // + // The data returned by 'cb' is automatically scrubbed of any sensitive informations before being added to the flare. + AddFileFromFunc(destFile string, cb func() ([]byte, error)) error + + // CopyFile copies the content of 'srcFile' to the root of the flare. + // + // The data is automatically scrubbed of any sensitive informations before being copied. + // + // Example: CopyFile("/etc/datadog/datadog.yaml") will create a copy of "/etc/datadog/datadog.yaml", named + // "datadog.yaml", at the root of the flare. + CopyFile(srcFile string) error + + // CopyFileTo copies the content of 'srcFile' to 'destFile' in the flare. + // + // The data is automatically scrubbed of any sensitive informations before being copied. + // + // 'destFile' is a path relative to the flare root (ex: "path/to/a/file"). Any necessary directory will + // automatically be created. + // + // Example: CopyFile("/etc/datadog/datadog.yaml", "etc/datadog.yaml") will create a copy of "/etc/datadog/datadog.yaml" + // at "etc/datadog.yaml" at the root of the flare. + CopyFileTo(srcFile string, destFile string) error + + // CopyDirTo copies files from the 'srcDir' to a specific directory in the flare. + // + // The path for each file in 'srcDir' is passed to the 'shouldInclude' callback. If 'shouldInclude' returns true, the + // file is copies to the flare. If not, the file is ignored. + // + // 'destDir' is a path relative to the flare root (ex: "some/path/to/a/dir"). + // + // The data of each copied file is automatically scrubbed of any sensitive informations before being copied. + // + // Example: CopyDir("/var/log/datadog/agent", "logs", ) will copy files from "/var/log/datadog/agent/" to + // "logs/agent/" in the flare. + CopyDirTo(srcDir string, destDir string, shouldInclude func(string) bool) error + + // CopyDirTo copies files from the 'srcDir' to a specific directory in the flare. + // + // The path for each file in 'srcDir' is passed to the 'shouldInclude' callback. If 'shouldInclude' returns true, the + // file is copies to the flare. If not, the file is ignored. + // + // 'destDir' is a path relative to the flare root (ex: "some/path/to/a/dir"). + // + // The data of each copied file is NOT scrubbed of any sensitive informations before being copied. Only files + // already scrubbed should be added in this way (ex: agent logs that are scrubbed at creation). + // + // Example: CopyDir("/var/log/datadog/agent", "logs", ) will copy files from "/var/log/datadog/agent/" to + // "logs/agent/" in the flare. + CopyDirToWithoutScrubbing(srcDir string, destDir string, shouldInclude func(string) bool) error + + // PrepareFilePath returns the full path of a file in the flare. + // + // PrepareFilePath will create the necessary directories in the flare temporary dir so that file can be create, but will + // not create the file. This method should only be used when the data is generated by another program/library. + // + // Example: PrepareFilePath("db-monitoring/db-dump.log") will create the 'db-monitoring' directory at the root of the + // flare and return the full path to db-dump.log: "/path/to/the/flare/db-monitoring/db-dump.log". + PrepareFilePath(path string) (string, error) + + // RegisterFilePerm add the current permissions for a file to the flare's permissions.log. + RegisterFilePerm(path string) + + // RegisterDirPerm add the current permissions for all the files in a directory to the flare's permissions.log. + RegisterDirPerm(path string) + + // Save archives all the data added to the flare, cleanup all the temporary directories and return the path to + // the archive file. Upon error the cleanup is still done. + // Error or not, once Save as been called the FlareBuilder is no longer capable of receiving new data. It is the caller + // responsibility to make sure of this. + // + // This method must not be used by flare callbacks and will be removed once all flare code has been migrated to + // components. + Save() (string, error) +} + +type flareCallback func(fb FlareBuilder) error + +// FlareProvider represents a callback to be used when creating a flare +type FlareProvider struct { + Callback flareCallback +} + +// Provider is provided by other components to register themselves to provide flare data. +type Provider struct { + fx.Out + + Provider FlareProvider `group:"flare"` +} + +// NewProvider returns a new Provider to be called when a flare is created +func NewProvider(callback flareCallback) Provider { + return Provider{ + Provider: FlareProvider{ + Callback: callback, + }, + } +} diff --git a/pkg/process/config/config_windows.go b/comp/core/flare/helpers/perm_info.go similarity index 55% rename from pkg/process/config/config_windows.go rename to comp/core/flare/helpers/perm_info.go index fc74322c321eab..b363648841c2d3 100644 --- a/pkg/process/config/config_windows.go +++ b/comp/core/flare/helpers/perm_info.go @@ -3,10 +3,9 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:build windows -// +build windows +package helpers -package config - -// defaultSystemProbeAddress is the default address to be used for connecting to the system probe -const defaultSystemProbeAddress = "localhost:3333" +// permissionsInfos holds permissions info about the files shipped +// in the flare. +// The key is the filepath of the file. +type permissionsInfos map[string]*filePermsInfo diff --git a/comp/core/flare/helpers/perm_info_nix.go b/comp/core/flare/helpers/perm_info_nix.go new file mode 100644 index 00000000000000..118da0452e8d03 --- /dev/null +++ b/comp/core/flare/helpers/perm_info_nix.go @@ -0,0 +1,105 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows +// +build !windows + +package helpers + +import ( + "bytes" + "fmt" + "os" + "os/user" + "strconv" + "strings" + "syscall" +) + +// filePermsInfo represents file rights on linux +type filePermsInfo struct { + path string + mode string + owner string + group string + err error +} + +// Add puts the given filepath in the map +// of files to process later during the commit phase. +func (p permissionsInfos) add(filePath string) { + info := filePermsInfo{ + path: filePath, + } + p[filePath] = &info + + fi, err := os.Stat(filePath) + if err != nil { + info.err = fmt.Errorf("could not stat file %s: %s", filePath, err) + return + } + info.mode = fi.Mode().String() + + var sys syscall.Stat_t + if err := syscall.Stat(filePath, &sys); err != nil { + info.err = fmt.Errorf("can't retrieve file %s uid/gid infos: %s", filePath, err) + return + } + + var uid = strconv.Itoa(int(sys.Uid)) + u, err := user.LookupId(uid) + if err != nil { + // User not found, eg: it was deleted from the system + info.owner = uid + } else if len(u.Name) > 0 { + info.owner = u.Name + } else { + info.owner = u.Username + } + + var gid = strconv.Itoa(int(sys.Gid)) + g, err := user.LookupGroupId(gid) + if err != nil { + // Group not found, eg: it was deleted from the system + info.group = gid + } else { + info.group = g.Name + } +} + +// Commit resolves the infos of every stacked files in the map +// and then writes the permissions.log file on the filesystem. +func (p permissionsInfos) commit() ([]byte, error) { + f := &bytes.Buffer{} + // write headers + s := fmt.Sprintf("%-50s | %-5s | %-10s | %-10s | %-10s|\n", "File path", "mode", "owner", "group", "error") + if _, err := f.Write([]byte(s)); err != nil { + return nil, err + } + if _, err := f.Write([]byte(strings.Repeat("-", len(s)) + "\n")); err != nil { + return nil, err + } + + // write each file permissions infos + for _, info := range p { + infoError := "" + if info.err != nil { + infoError = info.err.Error() + } + + _, err := f.Write([]byte( + fmt.Sprintf("%-50s | %-5s | %-10s | %-10s | %-10s|\n", + info.path, + info.mode, + info.owner, + info.group, + infoError, + ))) + if err != nil { + return f.Bytes(), err + } + } + return f.Bytes(), nil +} diff --git a/comp/core/flare/helpers/perm_info_nix_test.go b/comp/core/flare/helpers/perm_info_nix_test.go new file mode 100644 index 00000000000000..83d8d314be3ea1 --- /dev/null +++ b/comp/core/flare/helpers/perm_info_nix_test.go @@ -0,0 +1,88 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows +// +build !windows + +package helpers + +import ( + "os" + "path/filepath" + "regexp" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func createPermsTestFile(t *testing.T) (string, string, string) { + tempDir := t.TempDir() + + f1 := filepath.Join(tempDir, "file_1") + f2 := filepath.Join(tempDir, "file_2") + f3 := filepath.Join(tempDir, "file_3") + + os.WriteFile(f1, nil, 0765) + os.WriteFile(f2, nil, 0400) + return f1, f2, f3 +} + +func TestPermsFileAdd(t *testing.T) { + f1, f2, f3 := createPermsTestFile(t) + + pi := permissionsInfos{} + + pi.add(f1) + pi.add(f2) + pi.add(f3) + + require.Len(t, pi, 3) + + assert.Equal(t, f1, pi[f1].path) + assert.Equal(t, "-rwxrw----", pi[f1].mode) + assert.NotNil(t, pi[f1].owner) + assert.NotNil(t, pi[f1].group) + assert.Nil(t, pi[f1].err) + + assert.Equal(t, f2, pi[f2].path) + assert.Equal(t, "-r--------", pi[f2].mode) + assert.NotNil(t, pi[f2].owner) + assert.NotNil(t, pi[f2].group) + assert.Nil(t, pi[f2].err) + + assert.Equal(t, f2, pi[f2].path) + assert.Equal(t, "-r--------", pi[f2].mode) + assert.NotNil(t, pi[f2].owner) + assert.NotNil(t, pi[f2].group) + assert.Nil(t, pi[f2].err) + + assert.Equal(t, f3, pi[f3].path) + assert.Empty(t, pi[f3].mode) + assert.Empty(t, pi[f3].owner) + assert.Empty(t, pi[f3].group) + assert.NotNil(t, pi[f3].err) +} + +func TestPermsFileCommit(t *testing.T) { + f1, f2, f3 := createPermsTestFile(t) + + pi := permissionsInfos{} + pi.add(f1) + pi.add(f2) + pi.add(f3) + + b, err := pi.commit() + require.NoError(t, err) + + pattern := []byte(`File path | mode | owner | group | error | +--------------------------------------------------------------------------------------------------- +.+/file_a | -rwxrw---- | \w+\s*| \w+\s*| | +.+/file_a | -r-------- | \w+\s*| \w+\s*| | +.+/file_a | | | | could not stat file .+/file_3: stat .+/file_3: no such file or directory|`) + + res, _ := regexp.Match(string(b), pattern) + assert.True(t, res) +} diff --git a/comp/core/flare/helpers/perm_info_win.go b/comp/core/flare/helpers/perm_info_win.go new file mode 100644 index 00000000000000..11cdfdafd7adfb --- /dev/null +++ b/comp/core/flare/helpers/perm_info_win.go @@ -0,0 +1,20 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build windows +// +build windows + +package helpers + +// filePermsInfo represents file rights on windows. +type filePermsInfo struct{} + +func (p permissionsInfos) add(filePath string) error { + return nil +} + +func (p permissionsInfos) commit() ([]byte, error) { + return nil, nil +} diff --git a/comp/core/flare/helpers/perm_info_win_test.go b/comp/core/flare/helpers/perm_info_win_test.go new file mode 100644 index 00000000000000..b81e8e3add962c --- /dev/null +++ b/comp/core/flare/helpers/perm_info_win_test.go @@ -0,0 +1,26 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build windows +// +build windows + +package helpers + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +// Test that addParentPerms does not loop on Windows. +func TestPermissionsInfosAddWindows(t *testing.T) { + permsInfos := make(permissionsInfos) + expectedParentPerms := map[string]filePermsInfo{} + + // Basic Case + path := "C:\\a\\b\\c\\d" + permsInfos.Add(path) + assert.NotContains(t, permsInfos, path) +} diff --git a/comp/core/internal/params.go b/comp/core/internal/params.go deleted file mode 100644 index 5b84c5985533b5..00000000000000 --- a/comp/core/internal/params.go +++ /dev/null @@ -1,170 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package internal - -import ( - "runtime" - - "github.com/DataDog/datadog-agent/pkg/config" -) - -// BundleParams defines the parameters for this bundle. -// -// Logs-related parameters are implemented as unexported fields containing -// callbacks. These fields can be set with the `LogXxx()` methods, which -// return the updated BundleParams. One of `LogForOneShot` or `LogForDaemon` -// must be called. -type BundleParams struct { - // ConfFilePath is the path at which to look for configuration, usually - // given by the --cfgpath command-line flag. - ConfFilePath string - - // ConfigName is the root of the name of the configuration file. The - // comp/core/config component will search for a file with this name - // in ConfFilePath, using a variety of extensions. The default is - // "datadog". - ConfigName string - - // SysProbeConfFilePath is the path at which to look for system-probe - // configuration, usually given by --sysprobecfgpath. This is not used - // unless ConfigLoadSysProbe is true. - SysProbeConfFilePath string - - // ConfigLoadSysProbe determines whether to read the system-probe.yaml into - // the component's config data. - ConfigLoadSysProbe bool - - // SecurityAgentConfigFilePaths are the paths at which to look for security-aegnt - // configuration, usually given by the --cfgpath command-line flag. - SecurityAgentConfigFilePaths []string - - // ConfigLoadSecurityAgent determines whether to read the config from - // SecurityAgentConfigFilePaths or from ConfFilePath. - ConfigLoadSecurityAgent bool - - // ConfigLoadSecrets determines whether secrets in the configuration file - // should be evaluated. This is typically false for one-shot commands. - ConfigLoadSecrets bool - - // ConfigMissingOK determines whether it is a fatal error if the config - // file does not exist. - ConfigMissingOK bool - - // LoggerName is the name that appears in the logfile - LoggerName string - - // DefaultConfPath determines the default configuration path. - // if DefaultConfPath is empty, then no default configuration path is used. - DefaultConfPath string - - // LogLevelFn returns the log level. This field is set by methods on this - // type. - LogLevelFn func(configGetter) string - - // LogFileFn returns the log file. This field is set by methods on this type. - LogFileFn func(configGetter) string - - // LogSyslogURIFn returns the syslog URI. This field is set by methods on this type. - LogSyslogURIFn func(configGetter) string - - // LogSyslogRFCFn returns a boolean determining whether to use syslog RFC - // 5424. This field is set by methods on this type. - LogSyslogRFCFn func(configGetter) bool - - // LogToConsoleFn returns a boolean determining whether to write logs to - // the console. This field is set by methods on this type. - LogToConsoleFn func(configGetter) bool - - // LogFormatJSONFn returns a boolean determining whether logs should be - // written in JSON format. - LogFormatJSONFn func(configGetter) bool -} - -// configGetter is a subset of the comp/core/config component, able to get -// config values for the xxxFn fields in BundleParams. comp/core/log uses -// this interface to get parameters that may depend on a configuration value. -type configGetter interface { - GetString(key string) string - GetBool(key string) bool -} - -// LogForOneShot sets up logging parameters for a one-shot app. -// -// If overrideFromEnv is set, then DD_LOG_LEVEL will override the given level. -// -// Otherwise, file logging is disabled, syslog is disabled, console logging is -// enabled, and JSON formatting is disabled. -func (params BundleParams) LogForOneShot(loggerName, level string, overrideFromEnv bool) BundleParams { - params.LoggerName = loggerName - if overrideFromEnv { - params.LogLevelFn = func(configGetter) string { return config.GetEnvDefault("DD_LOG_LEVEL", level) } - } else { - params.LogLevelFn = func(configGetter) string { return level } - } - params.LogFileFn = func(configGetter) string { return "" } - params.LogSyslogURIFn = func(configGetter) string { return "" } - params.LogSyslogRFCFn = func(configGetter) bool { return false } - params.LogToConsoleFn = func(configGetter) bool { return true } - params.LogFormatJSONFn = func(configGetter) bool { return false } - return params -} - -// LogForDaemon sets up logging parameters for a daemon app. -// -// The log level is set based on the `log_level` config parameter. -// -// The log file is set based on the logFileConfig config parameter, -// or disabled if `disable_file_logging` is set. -// -// On platforms which support it, syslog is enabled if `log_to_syslog` is set, -// using `syslog_uri` or defaulting to "unixgram:///dev/log" if that is empty. -// The `syslog_rfc` config parameter determines whether this produces 5424-compliant -// output. -// -// Console logging is enabled if `log_to_console` is set. Lots are formatted -// as JSON if `log_format_json` is set. -func (params BundleParams) LogForDaemon(loggerName, logFileConfig, defaultLogFile string) BundleParams { - params.LoggerName = loggerName - params.LogLevelFn = func(g configGetter) string { return g.GetString("log_level") } - params.LogFileFn = func(g configGetter) string { - if g.GetBool("disable_file_logging") { - return "" - } - logFile := g.GetString(logFileConfig) - if logFile == "" { - logFile = defaultLogFile - } - return logFile - } - params.LogSyslogURIFn = func(g configGetter) string { - if runtime.GOOS == "windows" { - return "" // syslog not supported on Windows - } - enabled := g.GetBool("log_to_syslog") - uri := g.GetString("syslog_uri") - - if !enabled { - return "" - } - - if uri == "" { - return "unixgram:///dev/log" - } - - return uri - } - params.LogSyslogRFCFn = func(g configGetter) bool { return g.GetBool("syslog_rfc") } - params.LogToConsoleFn = func(g configGetter) bool { return g.GetBool("log_to_console") } - params.LogFormatJSONFn = func(g configGetter) bool { return g.GetBool("log_format_json") } - return params -} - -// LogToFile modifies the parameters to set the destination log file, overriding any -// previous logfile parameter. -func (params BundleParams) LogToFile(logFile string) BundleParams { - params.LogFileFn = func(configGetter) string { return logFile } - return params -} diff --git a/comp/core/internal/params_test.go b/comp/core/internal/params_test.go deleted file mode 100644 index 76ef9d3443fd6a..00000000000000 --- a/comp/core/internal/params_test.go +++ /dev/null @@ -1,172 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package internal - -import ( - "runtime" - "testing" - - "github.com/stretchr/testify/require" -) - -type getter struct { - strs map[string]string - bools map[string]bool -} - -func (g *getter) GetString(k string) string { - return g.strs[k] -} - -func (g *getter) GetBool(k string) bool { - return g.bools[k] -} - -func TestLogForOneShot_noOverride(t *testing.T) { - params := BundleParams{}.LogForOneShot("TEST", "trace", false) - g := &getter{} - t.Setenv("DD_LOG_LEVEL", "debug") - - require.Equal(t, "TEST", params.LoggerName) - require.Equal(t, "trace", params.LogLevelFn(g)) - require.Equal(t, "", params.LogFileFn(g)) - require.Equal(t, "", params.LogSyslogURIFn(g)) - require.Equal(t, false, params.LogSyslogRFCFn(g)) - require.Equal(t, true, params.LogToConsoleFn(g)) - require.Equal(t, false, params.LogFormatJSONFn(g)) -} - -func TestLogForOneShot_override(t *testing.T) { - params := BundleParams{}.LogForOneShot("TEST", "trace", true) - g := &getter{} - t.Setenv("DD_LOG_LEVEL", "debug") - - require.Equal(t, "TEST", params.LoggerName) - require.Equal(t, "debug", params.LogLevelFn(g)) - require.Equal(t, "", params.LogFileFn(g)) - require.Equal(t, "", params.LogSyslogURIFn(g)) - require.Equal(t, false, params.LogSyslogRFCFn(g)) - require.Equal(t, true, params.LogToConsoleFn(g)) - require.Equal(t, false, params.LogFormatJSONFn(g)) -} - -func TestLogForDaemon_windows(t *testing.T) { - if runtime.GOOS != "windows" { - t.Skip() - } - params := BundleParams{}.LogForDaemon("TEST", "unused", "unused") - g := &getter{ - strs: map[string]string{ - "log_level": "trace", - }, - bools: map[string]bool{ - "log_to_syslog": true, // enabled, but doesn't exist on windows - }, - } - - require.Equal(t, "TEST", params.LoggerName) - require.Equal(t, "trace", params.LogLevelFn(g)) - require.Equal(t, "", params.LogFileFn(g)) - require.Equal(t, "", params.LogSyslogURIFn(g)) // still empty - require.Equal(t, false, params.LogSyslogRFCFn(g)) - require.Equal(t, true, params.LogToConsoleFn(g)) - require.Equal(t, false, params.LogFormatJSONFn(g)) -} - -func TestLogForDaemon_linux(t *testing.T) { - if runtime.GOOS != "linux" { - t.Skip() - } - makeGetter := func() *getter { - return &getter{ - strs: map[string]string{ - "log_level": "trace", - "log_file": "", - "syslog_uri": "", - }, - bools: map[string]bool{ - "disable_file_logging": false, - "log_to_syslog": false, - "syslog_rfc": true, - "log_to_console": false, - "log_format_json": true, - }, - } - } - - t.Run("log_file config", func(t *testing.T) { - params := BundleParams{}.LogForDaemon("TEST", "log_file", "unused") - g := makeGetter() - g.strs["log_file"] = "/foo/bar" - require.Equal(t, "TEST", params.LoggerName) - require.Equal(t, "trace", params.LogLevelFn(g)) - require.Equal(t, "/foo/bar", params.LogFileFn(g)) - require.Equal(t, "", params.LogSyslogURIFn(g)) - require.Equal(t, true, params.LogSyslogRFCFn(g)) - require.Equal(t, false, params.LogToConsoleFn(g)) - require.Equal(t, true, params.LogFormatJSONFn(g)) - }) - - t.Run("log_file default", func(t *testing.T) { - params := BundleParams{}.LogForDaemon("TEST", "log_file", "/default/log") - g := makeGetter() - g.strs["log_file"] = "" - require.Equal(t, "TEST", params.LoggerName) - require.Equal(t, "trace", params.LogLevelFn(g)) - require.Equal(t, "/default/log", params.LogFileFn(g)) - require.Equal(t, "", params.LogSyslogURIFn(g)) - require.Equal(t, true, params.LogSyslogRFCFn(g)) - require.Equal(t, false, params.LogToConsoleFn(g)) - require.Equal(t, true, params.LogFormatJSONFn(g)) - }) - - t.Run("disable_file_logging", func(t *testing.T) { - params := BundleParams{}.LogForDaemon("TEST", "log_file", "/default/log") - g := makeGetter() - g.bools["disable_file_logging"] = true - require.Equal(t, "TEST", params.LoggerName) - require.Equal(t, "trace", params.LogLevelFn(g)) - require.Equal(t, "", params.LogFileFn(g)) - require.Equal(t, "", params.LogSyslogURIFn(g)) - require.Equal(t, true, params.LogSyslogRFCFn(g)) - require.Equal(t, false, params.LogToConsoleFn(g)) - require.Equal(t, true, params.LogFormatJSONFn(g)) - }) - - t.Run("log to syslog", func(t *testing.T) { - params := BundleParams{}.LogForDaemon("TEST", "log_file", "/default/log") - g := makeGetter() - g.bools["log_to_syslog"] = true - require.Equal(t, "TEST", params.LoggerName) - require.Equal(t, "trace", params.LogLevelFn(g)) - require.Equal(t, "/default/log", params.LogFileFn(g)) - require.Equal(t, "unixgram:///dev/log", params.LogSyslogURIFn(g)) - require.Equal(t, true, params.LogSyslogRFCFn(g)) - require.Equal(t, false, params.LogToConsoleFn(g)) - require.Equal(t, true, params.LogFormatJSONFn(g)) - }) - - t.Run("log to syslog with uri", func(t *testing.T) { - params := BundleParams{}.LogForDaemon("TEST", "log_file", "/default/log") - g := makeGetter() - g.bools["log_to_syslog"] = true - g.strs["syslog_uri"] = "test:///" - require.Equal(t, "TEST", params.LoggerName) - require.Equal(t, "trace", params.LogLevelFn(g)) - require.Equal(t, "/default/log", params.LogFileFn(g)) - require.Equal(t, "test:///", params.LogSyslogURIFn(g)) - require.Equal(t, true, params.LogSyslogRFCFn(g)) - require.Equal(t, false, params.LogToConsoleFn(g)) - require.Equal(t, true, params.LogFormatJSONFn(g)) - }) -} - -func TestLogToFile(t *testing.T) { - params := BundleParams{}.LogForOneShot("TEST", "trace", true).LogToFile("/some/file") - g := &getter{} - - require.Equal(t, "/some/file", params.LogFileFn(g)) -} diff --git a/comp/core/log/logger.go b/comp/core/log/logger.go index ab481b0b8b9a89..fcfe3416671b60 100644 --- a/comp/core/log/logger.go +++ b/comp/core/log/logger.go @@ -9,7 +9,6 @@ import ( "errors" "github.com/DataDog/datadog-agent/comp/core/config" - "github.com/DataDog/datadog-agent/comp/core/internal" pkgconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -20,18 +19,18 @@ type logger struct { // pkg/util/log, and uses globals in that package. } -func newLogger(params internal.BundleParams, config config.Component) (Component, error) { - if params.LogLevelFn == nil { +func newLogger(params Params, config config.Component) (Component, error) { + if params.logLevelFn == nil { return nil, errors.New("must call one of core.BundleParams.LogForOneShot or LogForDaemon") } err := pkgconfig.SetupLogger( - pkgconfig.LoggerName(params.LoggerName), - params.LogLevelFn(config), - params.LogFileFn(config), - params.LogSyslogURIFn(config), - params.LogSyslogRFCFn(config), - params.LogToConsoleFn(config), - params.LogFormatJSONFn(config)) + pkgconfig.LoggerName(params.loggerName), + params.logLevelFn(config), + params.logFileFn(config), + params.logSyslogURIFn(config), + params.logSyslogRFCFn(config), + params.logToConsoleFn(config), + params.logFormatJSONFn(config)) if err != nil { return nil, err } diff --git a/comp/core/log/logger_test.go b/comp/core/log/logger_test.go index f10b9f386283a1..1c1ca68257e7c8 100644 --- a/comp/core/log/logger_test.go +++ b/comp/core/log/logger_test.go @@ -11,13 +11,13 @@ import ( "go.uber.org/fx" "github.com/DataDog/datadog-agent/comp/core/config" - "github.com/DataDog/datadog-agent/comp/core/internal" "github.com/DataDog/datadog-agent/pkg/util/fxutil" ) func TestLogging(t *testing.T) { fxutil.Test(t, fx.Options( - fx.Supply(internal.BundleParams{}.LogForOneShot("TEST", "debug", false)), + fx.Supply(LogForOneShot("TEST", "debug", false)), + fx.Supply(config.Params{}), config.MockModule, Module, ), func(log Component) { diff --git a/comp/core/log/mock_test.go b/comp/core/log/mock_test.go index 296ec2b7e495e0..979a6a6bc2399e 100644 --- a/comp/core/log/mock_test.go +++ b/comp/core/log/mock_test.go @@ -11,13 +11,12 @@ import ( "go.uber.org/fx" "github.com/DataDog/datadog-agent/comp/core/config" - "github.com/DataDog/datadog-agent/comp/core/internal" "github.com/DataDog/datadog-agent/pkg/util/fxutil" ) func TestMockLogging(t *testing.T) { fxutil.Test(t, fx.Options( - fx.Supply(internal.BundleParams{}), + fx.Supply(Params{}), config.MockModule, MockModule, ), func(log Component) { diff --git a/comp/core/log/params.go b/comp/core/log/params.go new file mode 100644 index 00000000000000..14bb04ac2d8254 --- /dev/null +++ b/comp/core/log/params.go @@ -0,0 +1,149 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package log + +import ( + "runtime" + + "github.com/DataDog/datadog-agent/pkg/config" +) + +// Params defines the parameters for this log component. +// +// Logs-related parameters are implemented as unexported fields containing +// callbacks. These fields can be set with the `LogXxx()` methods, which +// return the updated LogParams. One of `LogForOneShot` or `LogForDaemon` +// must be called. +type Params struct { + // loggerName is the name that appears in the logfile + loggerName string + + // logLevelFn returns the log level. This field is set by methods on this + // type. + logLevelFn func(configGetter) string + + // logFileFn returns the log file. This field is set by methods on this type. + logFileFn func(configGetter) string + + // logSyslogURIFn returns the syslog URI. This field is set by methods on this type. + logSyslogURIFn func(configGetter) string + + // logSyslogRFCFn returns a boolean determining whether to use syslog RFC + // 5424. This field is set by methods on this type. + logSyslogRFCFn func(configGetter) bool + + // logToConsoleFn returns a boolean determining whether to write logs to + // the console. This field is set by methods on this type. + logToConsoleFn func(configGetter) bool + + // logFormatJSONFn returns a boolean determining whether logs should be + // written in JSON format. + logFormatJSONFn func(configGetter) bool +} + +// configGetter is a subset of the comp/core/config component, able to get +// config values for the xxxFn fields in LogParams. comp/core/log uses +// this interface to get parameters that may depend on a configuration value. +type configGetter interface { + GetString(key string) string + GetBool(key string) bool +} + +// LogForOneShot sets up logging parameters for a one-shot app. +// +// If overrideFromEnv is set, then DD_LOG_LEVEL will override the given level. +// +// Otherwise, file logging is disabled, syslog is disabled, console logging is +// enabled, and JSON formatting is disabled. +func LogForOneShot(loggerName, level string, overrideFromEnv bool) Params { + params := Params{} + params.loggerName = loggerName + if overrideFromEnv { + params.logLevelFn = func(configGetter) string { return config.GetEnvDefault("DD_LOG_LEVEL", level) } + } else { + params.logLevelFn = func(configGetter) string { return level } + } + params.logFileFn = func(configGetter) string { return "" } + params.logSyslogURIFn = func(configGetter) string { return "" } + params.logSyslogRFCFn = func(configGetter) bool { return false } + params.logToConsoleFn = func(configGetter) bool { return true } + params.logFormatJSONFn = func(configGetter) bool { return false } + return params +} + +// LogForDaemon sets up logging parameters for a daemon app. +// +// The log level is set based on the `log_level` config parameter. +// +// The log file is set based on the logFileConfig config parameter, +// or disabled if `disable_file_logging` is set. +// +// On platforms which support it, syslog is enabled if `log_to_syslog` is set, +// using `syslog_uri` or defaulting to "unixgram:///dev/log" if that is empty. +// The `syslog_rfc` config parameter determines whether this produces 5424-compliant +// output. +// +// Console logging is enabled if `log_to_console` is set. Lots are formatted +// as JSON if `log_format_json` is set. +func LogForDaemon(loggerName, logFileConfig, defaultLogFile string) Params { + params := Params{} + params.loggerName = loggerName + params.logLevelFn = func(g configGetter) string { return g.GetString("log_level") } + params.logFileFn = func(g configGetter) string { + if g.GetBool("disable_file_logging") { + return "" + } + logFile := g.GetString(logFileConfig) + if logFile == "" { + logFile = defaultLogFile + } + return logFile + } + params.logSyslogURIFn = func(g configGetter) string { + if runtime.GOOS == "windows" { + return "" // syslog not supported on Windows + } + enabled := g.GetBool("log_to_syslog") + uri := g.GetString("syslog_uri") + + if !enabled { + return "" + } + + if uri == "" { + return "unixgram:///dev/log" + } + + return uri + } + params.logSyslogRFCFn = func(g configGetter) bool { return g.GetBool("syslog_rfc") } + params.logToConsoleFn = func(g configGetter) bool { return g.GetBool("log_to_console") } + params.logFormatJSONFn = func(g configGetter) bool { return g.GetBool("log_format_json") } + return params +} + +// LogToFile modifies the parameters to set the destination log file, overriding any +// previous logfile parameter. +func (params *Params) LogToFile(logFile string) { + params.logFileFn = func(configGetter) string { return logFile } +} + +// LoggerName is the name that appears in the logfile +func (params Params) LoggerName() string { + return params.loggerName +} + +// These functions are used in unit tests. + +// LogLevelFn returns the log level +func (params Params) LogLevelFn(c configGetter) string { + return params.logLevelFn(c) +} + +// LogFileFn returns the log file +func (params Params) LogFileFn(c configGetter) string { + return params.logFileFn(c) +} diff --git a/comp/core/log/params_test.go b/comp/core/log/params_test.go new file mode 100644 index 00000000000000..98ef53786f24a7 --- /dev/null +++ b/comp/core/log/params_test.go @@ -0,0 +1,173 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package log + +import ( + "runtime" + "testing" + + "github.com/stretchr/testify/require" +) + +type getter struct { + strs map[string]string + bools map[string]bool +} + +func (g *getter) GetString(k string) string { + return g.strs[k] +} + +func (g *getter) GetBool(k string) bool { + return g.bools[k] +} + +func TestLogForOneShot_noOverride(t *testing.T) { + params := LogForOneShot("TEST", "trace", false) + g := &getter{} + t.Setenv("DD_LOG_LEVEL", "debug") + + require.Equal(t, "TEST", params.loggerName) + require.Equal(t, "trace", params.logLevelFn(g)) + require.Equal(t, "", params.logFileFn(g)) + require.Equal(t, "", params.logSyslogURIFn(g)) + require.Equal(t, false, params.logSyslogRFCFn(g)) + require.Equal(t, true, params.logToConsoleFn(g)) + require.Equal(t, false, params.logFormatJSONFn(g)) +} + +func TestLogForOneShot_override(t *testing.T) { + params := LogForOneShot("TEST", "trace", true) + g := &getter{} + t.Setenv("DD_LOG_LEVEL", "debug") + + require.Equal(t, "TEST", params.loggerName) + require.Equal(t, "debug", params.logLevelFn(g)) + require.Equal(t, "", params.logFileFn(g)) + require.Equal(t, "", params.logSyslogURIFn(g)) + require.Equal(t, false, params.logSyslogRFCFn(g)) + require.Equal(t, true, params.logToConsoleFn(g)) + require.Equal(t, false, params.logFormatJSONFn(g)) +} + +func TestLogForDaemon_windows(t *testing.T) { + if runtime.GOOS != "windows" { + t.Skip() + } + params := LogForDaemon("TEST", "unused", "unused") + g := &getter{ + strs: map[string]string{ + "log_level": "trace", + }, + bools: map[string]bool{ + "log_to_syslog": true, // enabled, but doesn't exist on windows + }, + } + + require.Equal(t, "TEST", params.loggerName) + require.Equal(t, "trace", params.logLevelFn(g)) + require.Equal(t, "", params.logFileFn(g)) + require.Equal(t, "", params.logSyslogURIFn(g)) // still empty + require.Equal(t, false, params.logSyslogRFCFn(g)) + require.Equal(t, true, params.logToConsoleFn(g)) + require.Equal(t, false, params.logFormatJSONFn(g)) +} + +func TestLogForDaemon_linux(t *testing.T) { + if runtime.GOOS != "linux" { + t.Skip() + } + makeGetter := func() *getter { + return &getter{ + strs: map[string]string{ + "log_level": "trace", + "log_file": "", + "syslog_uri": "", + }, + bools: map[string]bool{ + "disable_file_logging": false, + "log_to_syslog": false, + "syslog_rfc": true, + "log_to_console": false, + "log_format_json": true, + }, + } + } + + t.Run("log_file config", func(t *testing.T) { + params := LogForDaemon("TEST", "log_file", "unused") + g := makeGetter() + g.strs["log_file"] = "/foo/bar" + require.Equal(t, "TEST", params.loggerName) + require.Equal(t, "trace", params.logLevelFn(g)) + require.Equal(t, "/foo/bar", params.logFileFn(g)) + require.Equal(t, "", params.logSyslogURIFn(g)) + require.Equal(t, true, params.logSyslogRFCFn(g)) + require.Equal(t, false, params.logToConsoleFn(g)) + require.Equal(t, true, params.logFormatJSONFn(g)) + }) + + t.Run("log_file default", func(t *testing.T) { + params := LogForDaemon("TEST", "log_file", "/default/log") + g := makeGetter() + g.strs["log_file"] = "" + require.Equal(t, "TEST", params.loggerName) + require.Equal(t, "trace", params.logLevelFn(g)) + require.Equal(t, "/default/log", params.logFileFn(g)) + require.Equal(t, "", params.logSyslogURIFn(g)) + require.Equal(t, true, params.logSyslogRFCFn(g)) + require.Equal(t, false, params.logToConsoleFn(g)) + require.Equal(t, true, params.logFormatJSONFn(g)) + }) + + t.Run("disable_file_logging", func(t *testing.T) { + params := LogForDaemon("TEST", "log_file", "/default/log") + g := makeGetter() + g.bools["disable_file_logging"] = true + require.Equal(t, "TEST", params.loggerName) + require.Equal(t, "trace", params.logLevelFn(g)) + require.Equal(t, "", params.logFileFn(g)) + require.Equal(t, "", params.logSyslogURIFn(g)) + require.Equal(t, true, params.logSyslogRFCFn(g)) + require.Equal(t, false, params.logToConsoleFn(g)) + require.Equal(t, true, params.logFormatJSONFn(g)) + }) + + t.Run("log to syslog", func(t *testing.T) { + params := LogForDaemon("TEST", "log_file", "/default/log") + g := makeGetter() + g.bools["log_to_syslog"] = true + require.Equal(t, "TEST", params.loggerName) + require.Equal(t, "trace", params.logLevelFn(g)) + require.Equal(t, "/default/log", params.logFileFn(g)) + require.Equal(t, "unixgram:///dev/log", params.logSyslogURIFn(g)) + require.Equal(t, true, params.logSyslogRFCFn(g)) + require.Equal(t, false, params.logToConsoleFn(g)) + require.Equal(t, true, params.logFormatJSONFn(g)) + }) + + t.Run("log to syslog with uri", func(t *testing.T) { + params := LogForDaemon("TEST", "log_file", "/default/log") + g := makeGetter() + g.bools["log_to_syslog"] = true + g.strs["syslog_uri"] = "test:///" + require.Equal(t, "TEST", params.loggerName) + require.Equal(t, "trace", params.logLevelFn(g)) + require.Equal(t, "/default/log", params.logFileFn(g)) + require.Equal(t, "test:///", params.logSyslogURIFn(g)) + require.Equal(t, true, params.logSyslogRFCFn(g)) + require.Equal(t, false, params.logToConsoleFn(g)) + require.Equal(t, true, params.logFormatJSONFn(g)) + }) +} + +func TestLogToFile(t *testing.T) { + params := LogForOneShot("TEST", "trace", true) + params.LogToFile("/some/file") + g := &getter{} + + require.Equal(t, "/some/file", params.logFileFn(g)) +} diff --git a/comp/process/bundle.go b/comp/process/bundle.go new file mode 100644 index 00000000000000..4fd026dd3113c4 --- /dev/null +++ b/comp/process/bundle.go @@ -0,0 +1,30 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +// Package process implements the "process" bundle, providing components for the Process Agent +// +// The constituent components serve as utilities and are mostly independent of +// one another. Other components should depend on any components they need. +// +// This bundle does not depend on any other bundles. +package process + +import ( + "github.com/DataDog/datadog-agent/comp/process/containercheck" + "github.com/DataDog/datadog-agent/comp/process/processcheck" + "github.com/DataDog/datadog-agent/comp/process/runner" + "github.com/DataDog/datadog-agent/comp/process/submitter" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +// team: processes + +// Bundle defines the fx options for this bundle. +var Bundle = fxutil.Bundle( + runner.Module, + submitter.Module, + processcheck.Module, + containercheck.Module, +) diff --git a/comp/process/bundle_test.go b/comp/process/bundle_test.go new file mode 100644 index 00000000000000..c10f8729ce6df8 --- /dev/null +++ b/comp/process/bundle_test.go @@ -0,0 +1,48 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package process + +import ( + "context" + "testing" + + "github.com/stretchr/testify/require" + "go.uber.org/fx" + + "github.com/DataDog/datadog-agent/comp/process/runner" + "github.com/DataDog/datadog-agent/comp/process/submitter" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +func TestBundleDependencies(t *testing.T) { + require.NoError(t, fx.ValidateApp( + // instantiate all of the process components, since this is not done + // automatically. + fx.Invoke(func(r runner.Component) {}), + fx.Invoke(func(r submitter.Component) {}), + Bundle)) +} + +func TestBundleOneShot(t *testing.T) { + runCmd := func(r runner.Component) { + checks := r.GetChecks() + require.Len(t, checks, 2) + + names := []string{} + for _, c := range checks { + require.True(t, c.IsEnabled()) + names = append(names, c.Name()) + } + require.ElementsMatch(t, []string{"process", "container"}, names) + + require.NoError(t, r.Run(context.TODO())) + } + + err := fxutil.OneShot(runCmd, + Bundle, + ) + require.NoError(t, err) +} diff --git a/comp/process/containercheck/check.go b/comp/process/containercheck/check.go new file mode 100644 index 00000000000000..cf811b4389c720 --- /dev/null +++ b/comp/process/containercheck/check.go @@ -0,0 +1,37 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package containercheck + +import ( + "go.uber.org/fx" + + "github.com/DataDog/datadog-agent/comp/process/types" +) + +type check struct { +} + +func (c *check) IsEnabled() bool { + return true +} + +func (c *check) Run() (*types.Payload, error) { + return &types.Payload{}, nil +} + +func (c *check) Name() string { + return "container" +} + +type dependencies struct { + fx.In +} + +func newCheck(deps dependencies) types.ProvidesCheck { + return types.ProvidesCheck{ + Check: &check{}, + } +} diff --git a/comp/process/containercheck/component.go b/comp/process/containercheck/component.go new file mode 100644 index 00000000000000..c78d6ec17d313c --- /dev/null +++ b/comp/process/containercheck/component.go @@ -0,0 +1,24 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +// Package containercheck implements a component to handle Container data collection in the Process Agent. +package containercheck + +import ( + "go.uber.org/fx" + + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +// team: processes + +// Component is the component type. +type Component interface { +} + +// Module defines the fx options for this component. +var Module = fxutil.Component( + fx.Provide(newCheck), +) diff --git a/comp/process/processcheck/check.go b/comp/process/processcheck/check.go new file mode 100644 index 00000000000000..cdd55a37622af7 --- /dev/null +++ b/comp/process/processcheck/check.go @@ -0,0 +1,37 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package processcheck + +import ( + "go.uber.org/fx" + + "github.com/DataDog/datadog-agent/comp/process/types" +) + +type check struct { +} + +func (c *check) IsEnabled() bool { + return true +} + +func (c *check) Run() (*types.Payload, error) { + return &types.Payload{}, nil +} + +func (c *check) Name() string { + return "process" +} + +type dependencies struct { + fx.In +} + +func newCheck(deps dependencies) types.ProvidesCheck { + return types.ProvidesCheck{ + Check: &check{}, + } +} diff --git a/comp/process/processcheck/component.go b/comp/process/processcheck/component.go new file mode 100644 index 00000000000000..0c5fd63b3d8d83 --- /dev/null +++ b/comp/process/processcheck/component.go @@ -0,0 +1,24 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +// Package processcheck implements a component to handle Process data collection in the Process Agent. +package processcheck + +import ( + "go.uber.org/fx" + + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +// team: processes + +// Component is the component type. +type Component interface { +} + +// Module defines the fx options for this component. +var Module = fxutil.Component( + fx.Provide(newCheck), +) diff --git a/comp/process/runner/component.go b/comp/process/runner/component.go new file mode 100644 index 00000000000000..4476f3f681bd82 --- /dev/null +++ b/comp/process/runner/component.go @@ -0,0 +1,39 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +// Package runner implements a component to run data collection checks in the Process Agent. +package runner + +import ( + "context" + + "go.uber.org/fx" + + "github.com/DataDog/datadog-agent/comp/process/types" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +// team: processes + +// Component is the component type. +type Component interface { + GetChecks() []types.Check + Run(ctx context.Context) error +} + +// Mock implements mock-specific methods. +type Mock interface { + Component +} + +// Module defines the fx options for this component. +var Module = fxutil.Component( + fx.Provide(newRunner), +) + +// MockModule defines the fx options for the mock component. +var MockModule = fxutil.Component( + fx.Provide(newMock), +) diff --git a/comp/process/runner/runner.go b/comp/process/runner/runner.go new file mode 100644 index 00000000000000..9f7222ea00e53c --- /dev/null +++ b/comp/process/runner/runner.go @@ -0,0 +1,62 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package runner + +import ( + "context" + "testing" + "time" + + "go.uber.org/fx" + + "github.com/DataDog/datadog-agent/comp/process/submitter" + "github.com/DataDog/datadog-agent/comp/process/types" +) + +// runner implements the Component. +type runner struct { + checks []types.Check + submitter submitter.Component +} + +type dependencies struct { + fx.In + + Checks []types.Check `group:"check"` + Submitter submitter.Component +} + +func newRunner(deps dependencies) (Component, error) { + return &runner{ + checks: deps.Checks, + submitter: deps.Submitter, + }, nil +} + +func (r *runner) Run(ctx context.Context) error { + + for _, c := range r.checks { + if !c.IsEnabled() { + continue + } + + payload, err := c.Run() + if err != nil { + return err + } + r.submitter.Submit(time.Now(), c.Name(), payload) + } + return nil +} + +func (r *runner) GetChecks() []types.Check { + return r.checks +} + +func newMock(deps dependencies, t testing.TB) Component { + // TODO + return nil +} diff --git a/comp/process/submitter/component.go b/comp/process/submitter/component.go new file mode 100644 index 00000000000000..d5fbde0ff18e0e --- /dev/null +++ b/comp/process/submitter/component.go @@ -0,0 +1,41 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +// Package submitter implements a component to submit collected data in the Process Agent to +// supported Datadog intakes. +package submitter + +import ( + "time" + + "go.uber.org/fx" + + "github.com/DataDog/datadog-agent/comp/process/types" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +// team: processes + +// Component is the component type. +type Component interface { + Submit(start time.Time, checkName string, payload *types.Payload) + Start() error + Stop() +} + +// Mock implements mock-specific methods. +type Mock interface { + Component +} + +// Module defines the fx options for this component. +var Module = fxutil.Component( + fx.Provide(newSubmitter), +) + +// MockModule defines the fx options for the mock component. +var MockModule = fxutil.Component( + fx.Provide(newMock), +) diff --git a/comp/process/submitter/submitter.go b/comp/process/submitter/submitter.go new file mode 100644 index 00000000000000..fd67e17d33c593 --- /dev/null +++ b/comp/process/submitter/submitter.go @@ -0,0 +1,44 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package submitter + +import ( + "testing" + "time" + + "go.uber.org/fx" + + "github.com/DataDog/datadog-agent/comp/process/types" +) + +// submitter implements the Component. +type submitter struct { +} + +type dependencies struct { + fx.In +} + +func newSubmitter(deps dependencies) (Component, error) { + return &submitter{}, nil +} + +func (s *submitter) Submit(start time.Time, checkName string, payload *types.Payload) { + +} + +func (s *submitter) Start() error { + return nil +} + +func (s *submitter) Stop() { + +} + +func newMock(deps dependencies, t testing.TB) Component { + // TODO + return nil +} diff --git a/comp/process/types/check.go b/comp/process/types/check.go new file mode 100644 index 00000000000000..6dce8ae694f6ea --- /dev/null +++ b/comp/process/types/check.go @@ -0,0 +1,28 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package types + +import ( + "go.uber.org/fx" +) + +// Payload defines payload from the check +type Payload struct { +} + +// Check defines an interface implemented by checks +type Check interface { + IsEnabled() bool + Name() string + Run() (*Payload, error) +} + +// ProvidesCheck wraps a check implementation for consumption in components +type ProvidesCheck struct { + fx.Out + + Check Check `group:"check"` +} diff --git a/pkg/metadata/inventories/host_metadata_win.go b/comp/systray/bundle.go similarity index 72% rename from pkg/metadata/inventories/host_metadata_win.go rename to comp/systray/bundle.go index 92a0c7c5dd0a55..64ad9d8fb9b242 100644 --- a/pkg/metadata/inventories/host_metadata_win.go +++ b/comp/systray/bundle.go @@ -2,10 +2,10 @@ // under the Apache License Version 2.0. // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. - //go:build windows // +build windows -package inventories +// Package systray implements the Datadog Agent Manager System Tray +package systray -func getSystemSpecificHosttMetadata(metadata *HostMetadata) {} +// team: windows-agent diff --git a/comp/systray/systray/component.go b/comp/systray/systray/component.go new file mode 100644 index 00000000000000..93c34786c545d5 --- /dev/null +++ b/comp/systray/systray/component.go @@ -0,0 +1,29 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. +//go:build windows +// +build windows + +// Package systray +package systray + +import ( + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "go.uber.org/fx" +) + +// team: windows-agent + +type Params struct { + LaunchGuiFlag bool + LaunchElevatedFlag bool + LaunchCommand string +} + +type Component interface { +} + +var Module = fxutil.Component( + fx.Provide(newSystray), +) diff --git a/cmd/systray/doconfigure.go b/comp/systray/systray/doconfigure.go similarity index 74% rename from cmd/systray/doconfigure.go rename to comp/systray/systray/doconfigure.go index 98fea326296806..c6321e10ae986b 100644 --- a/cmd/systray/doconfigure.go +++ b/comp/systray/systray/doconfigure.go @@ -5,37 +5,29 @@ //go:build windows // +build windows -package main +package systray import ( "encoding/json" "fmt" - "github.com/DataDog/datadog-agent/cmd/agent/common" "github.com/DataDog/datadog-agent/pkg/api/security" "github.com/DataDog/datadog-agent/pkg/api/util" - "github.com/DataDog/datadog-agent/pkg/config" - - "github.com/DataDog/datadog-agent/pkg/util/log" + pkgconfig "github.com/DataDog/datadog-agent/pkg/config" ) -func onConfigure() { +func onConfigure(s *systray) { // seems like a waste. However, the handler function doesn't expect an error code. // this just eats the error code. - err := doConfigure() + err := doConfigure(s) if err != nil { - log.Warnf("Failed to launch gui %v", err) + s.log.Warnf("Failed to launch gui %v", err) } return } -func doConfigure() error { - - err := common.SetupConfigWithoutSecrets("", "") - if err != nil { - return fmt.Errorf("unable to set up global agent configuration: %v", err) - } +func doConfigure(s *systray) error { - guiPort := config.Datadog.GetString("GUI_port") + guiPort := s.config.GetString("GUI_port") if guiPort == "-1" { return fmt.Errorf("GUI not enabled: to enable, please set an appropriate port in your datadog.yaml file") } @@ -48,11 +40,11 @@ func doConfigure() error { // Get the CSRF token from the agent c := util.GetClient(false) // FIX: get certificates right then make this true - ipcAddress, err := config.GetIPCAddress() + ipcAddress, err := pkgconfig.GetIPCAddress() if err != nil { return err } - urlstr := fmt.Sprintf("https://%v:%v/agent/gui/csrf-token", ipcAddress, config.Datadog.GetInt("cmd_port")) + urlstr := fmt.Sprintf("https://%v:%v/agent/gui/csrf-token", ipcAddress, s.config.GetInt("cmd_port")) err = util.SetAuthToken() if err != nil { return err @@ -74,6 +66,6 @@ func doConfigure() error { return fmt.Errorf("error opening GUI: " + err.Error()) } - log.Debugf("GUI opened at 127.0.0.1:" + guiPort + "\n") + s.log.Debugf("GUI opened at 127.0.0.1:" + guiPort + "\n") return nil } diff --git a/cmd/systray/doflare.go b/comp/systray/systray/doflare.go similarity index 79% rename from cmd/systray/doflare.go rename to comp/systray/systray/doflare.go index 33cb5b7dad1952..d8c145d880e395 100644 --- a/cmd/systray/doflare.go +++ b/comp/systray/systray/doflare.go @@ -5,7 +5,7 @@ //go:build windows // +build windows -package main +package systray import ( "bytes" @@ -21,8 +21,8 @@ import ( "github.com/DataDog/datadog-agent/cmd/agent/common" "github.com/DataDog/datadog-agent/pkg/api/util" "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/flare" - "github.com/DataDog/datadog-agent/pkg/util/log" + pkgflare "github.com/DataDog/datadog-agent/pkg/flare" + pkglog "github.com/DataDog/datadog-agent/pkg/util/log" ) const ( @@ -83,11 +83,11 @@ func dialogProc(hwnd win.HWND, msg uint32, wParam, lParam uintptr) (result uintp x, y, _, _ := calcPos(wndrect, dlgrect) r, _, err = procSetWindowPos.Call(uintptr(hwnd), 0, uintptr(x), uintptr(y), uintptr(0), uintptr(0), uintptr(0x0041)) if r != 0 { - log.Debugf("failed to set window pos %v", err) + pkglog.Debugf("failed to set window pos %v", err) } } } else { - log.Debugf("failed to get pos %v", err) + pkglog.Debugf("failed to get pos %v", err) } } // set the "OK" to disabled until there's something approximating an email @@ -122,11 +122,11 @@ func dialogProc(hwnd win.HWND, msg uint32, wParam, lParam uintptr) (result uintp win.SendDlgItemMessage(hwnd, IDC_TICKET_EDIT, win.WM_GETTEXT, 255, uintptr(unsafe.Pointer(&buf[0]))) info.caseid = windows.UTF16ToString(buf) - log.Debugf("ticket number %s", info.caseid) + pkglog.Debugf("ticket number %s", info.caseid) win.SendDlgItemMessage(hwnd, IDC_EMAIL_EDIT, win.WM_GETTEXT, 255, uintptr(unsafe.Pointer(&buf[0]))) info.email = windows.UTF16ToString(buf) - log.Debugf("email %s", info.email) + pkglog.Debugf("email %s", info.email) win.EndDialog(hwnd, win.IDOK) return uintptr(1) @@ -137,21 +137,22 @@ func dialogProc(hwnd win.HWND, msg uint32, wParam, lParam uintptr) (result uintp } return uintptr(0) } -func onFlare() { +func onFlare(s *systray) { + // Create a dialog box to prompt for ticket number and email, then create and submit the flare // library will allow multiple calls (multi-threaded window proc?) // however, we're using a single instance of the info structure to // pass data around. Don't allow multiple dialogs to be displayed // (in go1.18, this could be done with sync.Mutex#TryLock) if !inProgress.CAS(false, true) { - log.Warn("Dialog already in progress, skipping") + s.log.Warn("Dialog already in progress, skipping") return } defer inProgress.Store(false) myInst := win.GetModuleHandle(nil) if myInst == win.HINSTANCE(0) { - log.Errorf("Failed to get my own module handle") + s.log.Errorf("Failed to get my own module handle") return } ret := win.DialogBoxParam(myInst, win.MAKEINTRESOURCE(uintptr(IDD_DIALOG1)), win.HWND(0), windows.NewCallback(dialogProc), uintptr(0)) @@ -161,7 +162,7 @@ func onFlare() { // got a non number, just create a new case info.caseid = "0" } - r, e := requestFlare(info.caseid, info.email) + r, e := requestFlare(s, info.caseid, info.email) caption, _ := windows.UTF16PtrFromString("Datadog Flare") var text *uint16 if e == nil { @@ -171,17 +172,14 @@ func onFlare() { } win.MessageBox(win.HWND(0), text, caption, win.MB_OK) } - log.Debugf("DialogBoxParam returns %d", ret) + s.log.Debugf("DialogBoxParam returns %d", ret) } -func requestFlare(caseID, customerEmail string) (response string, e error) { - log.Debug("Asking the agent to build the flare archive.") +func requestFlare(s *systray, caseID, customerEmail string) (response string, e error) { + // For first try, ask the agent to build the flare + s.log.Debug("Asking the agent to build the flare archive.") - e = common.SetupConfig("") - if e != nil { - return - } c := util.GetClient(false) // FIX: get certificates right then make this true ipcAddress, err := config.GetIPCAddress() if err != nil { @@ -208,28 +206,29 @@ func requestFlare(caseID, customerEmail string) (response string, e error) { r, e := util.DoPost(c, urlstr, "application/json", bytes.NewBuffer([]byte{})) var filePath string if e != nil { + // The agent could not make the flare, try create one from this context if r != nil && string(r) != "" { - log.Warnf("The agent ran into an error while making the flare: %s\n", r) + s.log.Warnf("The agent ran into an error while making the flare: %s\n", r) e = fmt.Errorf("Error getting flare from running agent: %s", r) } else { - log.Debug("The agent was unable to make the flare.") + s.log.Debug("The agent was unable to make the flare.") e = fmt.Errorf("Error getting flare from running agent: %w", e) } - log.Debug("Initiating flare locally.") + s.log.Debug("Initiating flare locally.") - filePath, e = flare.CreateArchive(true, common.GetDistPath(), common.PyChecksPath, []string{logFile, jmxLogFile}, nil, e) + filePath, e = s.flare.Create(true, common.GetDistPath(), common.PyChecksPath, []string{logFile, jmxLogFile}, nil, e) if e != nil { - log.Errorf("The flare zipfile failed to be created: %s\n", e) + s.log.Errorf("The flare zipfile failed to be created: %s\n", e) return } } else { filePath = string(r) } - log.Warnf("%s is going to be uploaded to Datadog\n", filePath) + s.log.Warnf("%s is going to be uploaded to Datadog\n", filePath) - response, e = flare.SendFlare(filePath, caseID, customerEmail) - log.Debug(response) + response, e = pkgflare.SendFlare(filePath, caseID, customerEmail) + s.log.Debug(response) if e != nil { return } diff --git a/cmd/systray/doservicecontrol.go b/comp/systray/systray/doservicecontrol.go similarity index 65% rename from cmd/systray/doservicecontrol.go rename to comp/systray/systray/doservicecontrol.go index 3915d981a46ff6..a6e6323ef423b4 100644 --- a/cmd/systray/doservicecontrol.go +++ b/comp/systray/systray/doservicecontrol.go @@ -6,29 +6,26 @@ //go:build windows // +build windows -package main +package systray import ( "github.com/DataDog/datadog-agent/cmd/agent/windows/controlsvc" - "github.com/DataDog/datadog-agent/pkg/util/log" ) -func onRestart() { +func onRestart(s *systray) { if err := controlsvc.RestartService(); err != nil { - log.Warnf("Failed to restart datadog service %v", err) + s.log.Warnf("Failed to restart datadog service %v", err) } - } -func onStart() { + +func onStart(s *systray) { if err := controlsvc.StartService(); err != nil { - log.Warnf("Failed to start datadog service %v", err) + s.log.Warnf("Failed to start datadog service %v", err) } - } -func onStop() { +func onStop(s *systray) { if err := controlsvc.StopService(); err != nil { - log.Warnf("Failed to stop datadog service %v", err) + s.log.Warnf("Failed to stop datadog service %v", err) } - } diff --git a/comp/systray/systray/systray.go b/comp/systray/systray/systray.go new file mode 100644 index 00000000000000..8f809082a76db0 --- /dev/null +++ b/comp/systray/systray/systray.go @@ -0,0 +1,413 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. +//go:build windows +// +build windows + +package systray + +//#include "uac.h" +import "C" + +import ( + "context" + "fmt" + "os" + "os/exec" + "runtime" + "strings" + "sync" + "time" + "unsafe" + + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/flare" + "github.com/DataDog/datadog-agent/comp/core/log" + pkglog "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/util/winutil" + "github.com/DataDog/datadog-agent/pkg/version" + + "github.com/lxn/walk" + "github.com/lxn/win" + "go.uber.org/fx" + "golang.org/x/sys/windows" +) + +type dependencies struct { + fx.In + + Lc fx.Lifecycle + Shutdowner fx.Shutdowner + + Log log.Component + Config config.Component + Flare flare.Component + Params Params +} + +type systray struct { + // For triggering Shutdown + shutdowner fx.Shutdowner + + log log.Component + config config.Component + flare flare.Component + params Params + + isUserAdmin bool + + // allocated in start, destroyed in stop + singletonEventHandle windows.Handle + + // Window management + notifyWindowToStop func() + routineWaitGroup sync.WaitGroup +} + +type menuItem struct { + label string + handler walk.EventHandler + enabled bool +} + +const ( + launchGraceTime = 2 + eventname = "ddtray-event" + cmdTextStartService = "StartService" + cmdTextStopService = "StopService" + cmdTextRestartService = "RestartService" + cmdTextConfig = "Config" + menuSeparator = "SEPARATOR" +) + +var ( + cmds = map[string]func(*systray){ + cmdTextStartService: onStart, + cmdTextStopService: onStop, + cmdTextRestartService: onRestart, + cmdTextConfig: onConfigure, + } +) + +// newSystray creates a new systray component, which will start and stop based on +// the fx Lifecycle +func newSystray(deps dependencies) Component { + // fx init + s := &systray{ + log: deps.Log, + config: deps.Config, + flare: deps.Flare, + params: deps.Params, + shutdowner: deps.Shutdowner, + } + + // fx lifecycle hooks + deps.Lc.Append(fx.Hook{OnStart: s.start, OnStop: s.stop}) + + // init vars + isAdmin, err := winutil.IsUserAnAdmin() + if err != nil { + s.log.Warnf("Failed to call IsUserAnAdmin %v", err) + // If we cannot determine if the user is admin or not let the user allow to click on the buttons. + s.isUserAdmin = true + } else { + s.isUserAdmin = isAdmin + } + + return s +} + +// start hook has a fx enforced timeout, so don't do long running things +func (s *systray) start(ctx context.Context) error { + var err error + + s.log.Debugf("launch-gui is %v, launch-elev is %v, launch-cmd is %v", s.params.LaunchGuiFlag, s.params.LaunchElevatedFlag, s.params.LaunchCommand) + + if s.params.LaunchGuiFlag { + s.log.Debug("Preparing to launch configuration interface...") + go onConfigure(s) + } + + s.singletonEventHandle, err = acquireProcessSingleton(eventname) + if err != nil { + s.log.Errorf("Failed to acquire singleton %v", err) + return err + } + + s.routineWaitGroup.Add(1) + go windowRoutine(s) + + // If a command is specified in process command line, carry it out. + if s.params.LaunchCommand != "" { + go execCmdOrElevate(s, s.params.LaunchCommand) + } + + return nil +} + +func (s *systray) stop(ctx context.Context) error { + if s.notifyWindowToStop != nil { + // Send stop message to window (stops windowRoutine goroutine) + s.notifyWindowToStop() + } + + // wait for goroutine to finish + s.routineWaitGroup.Wait() + + // release our singleton + if s.singletonEventHandle != windows.Handle(0) { + windows.CloseHandle(s.singletonEventHandle) + } + + return nil +} + +// Run window setup and message loop in a single threadlocked goroutine +// https://github.com/lxn/walk/issues/601 +// Use the notifyWindowToStop function to stop the message loop +// Use routineWaitGroup to wait until the routine exits +func windowRoutine(s *systray) { + // Following https://github.com/lxn/win/commit/d9566253ae00d0a7dc7e4c9bda651dcfee029001 + // it's up to the caller to lock OS threads + runtime.LockOSThread() + defer runtime.UnlockOSThread() + + defer s.routineWaitGroup.Done() + + // We need either a walk.MainWindow or a walk.Dialog for their message loop. + mw, err := walk.NewMainWindow() + if err != nil { + s.log.Errorf("Failed to create main window %v", err) + return + } + defer mw.Dispose() + + ni, err := createNotifyIcon(s, mw) + if err != nil { + s.log.Errorf("Failed to create notification tray icon %v", err) + return + } + defer ni.Dispose() + + // Provide a function that will trigger this thread to run PostQuitMessage() + // which will cause the message loop to return + s.notifyWindowToStop = func() { + mw.Synchronize(func() { + win.PostQuitMessage(0) + }) + } + + // Run the message loop + // use the notifyWindowToStop function to stop the message loop + mw.Run() +} + +func acquireProcessSingleton(eventname string) (windows.Handle, error) { + var utf16EventName = windows.StringToUTF16Ptr(eventname) + + // Check to see if the process is already running + h, _ := windows.OpenEvent(windows.EVENT_ALL_ACCESS, + false, + utf16EventName) + + if h != windows.Handle(0) { + // Process already running. + windows.CloseHandle(h) + + // Wait a short period and recheck in case the other process will quit. + time.Sleep(time.Duration(launchGraceTime) * time.Second) + + // Try again + h, _ := windows.OpenEvent(windows.EVENT_ALL_ACCESS, + false, + utf16EventName) + + if h != windows.Handle(0) { + windows.CloseHandle(h) + return windows.Handle(0), fmt.Errorf("systray is already running") + } + } + + // otherwise, create the handle so that nobody else will + h, err := windows.CreateEvent(nil, 0, 0, utf16EventName) + if err != nil { + // can fail with ERROR_ALREADY_EXISTS if we lost a race + if h != windows.Handle(0) { + windows.CloseHandle(h) + } + return windows.Handle(0), err + } + + return h, nil +} + +// this function must be called from and the NotifyIcon used from a single thread locked goroutine +// https://github.com/lxn/walk/issues/601 +func createNotifyIcon(s *systray, mw *walk.MainWindow) (ni *walk.NotifyIcon, err error) { + // Create the notify icon (must be cleaned up) + ni, err = walk.NewNotifyIcon(mw) + if err != nil { + return nil, err + } + defer func() { + if err != nil { + ni.Dispose() + ni = nil + } + }() + + // Set the icon and a tool tip text. + // 1 is the ID of the MAIN_ICON in systray.rc + icon, err := walk.NewIconFromResourceId(1) + if err != nil { + s.log.Warnf("Failed to load icon %v", err) + } + if err := ni.SetIcon(icon); err != nil { + s.log.Warnf("Failed to set icon %v", err) + } + + // Set mouseover tooltip + if err := ni.SetToolTip("Click for info or use the context menu to exit."); err != nil { + s.log.Warnf("Failed to set tooltip text %v", err) + } + + // When the left mouse button is pressed, bring up our balloon. + ni.MouseDown().Attach(func(x, y int, button walk.MouseButton) { + if button != walk.LeftButton { + return + } + showCustomMessage(ni, "Please right click to display available options.") + }) + + menuitems := createMenuItems(s, ni) + + for _, item := range menuitems { + var action *walk.Action + if item.label == menuSeparator { + action = walk.NewSeparatorAction() + } else { + action = walk.NewAction() + if err := action.SetText(item.label); err != nil { + s.log.Warnf("Failed to set text for item %s %v", item.label, err) + continue + } + err = action.SetEnabled(item.enabled) + if err != nil { + s.log.Warnf("Failed to set enabled for item %s %v", item.label, err) + continue + } + if item.handler != nil { + _ = action.Triggered().Attach(item.handler) + } + } + err = ni.ContextMenu().Actions().Add(action) + if err != nil { + s.log.Warnf("Failed to add action for item %s to context menu %v", item.label, err) + continue + } + } + + // The notify icon is hidden initially, so we have to make it visible. + if err := ni.SetVisible(true); err != nil { + s.log.Warnf("Failed to set window visibility %v", err) + } + + return ni, nil +} + +func showCustomMessage(notifyIcon *walk.NotifyIcon, message string) { + if err := notifyIcon.ShowCustom("Datadog Agent Manager", message, nil); err != nil { + pkglog.Warnf("Failed to show custom message %v", err) + } +} + +func triggerShutdown(s *systray) { + if s != nil { + // Tell fx to begin shutdown process + s.shutdowner.Shutdown() + } +} + +func onExit(s *systray) { + triggerShutdown(s) +} + +func createMenuItems(s *systray, notifyIcon *walk.NotifyIcon) []menuItem { + av, _ := version.Agent() + verstring := av.GetNumberAndPre() + + menuHandler := func(cmd string) func() { + return func() { + execCmdOrElevate(s, cmd) + } + } + + menuitems := make([]menuItem, 0) + menuitems = append(menuitems, menuItem{label: verstring, enabled: false}) + menuitems = append(menuitems, menuItem{label: menuSeparator}) + menuitems = append(menuitems, menuItem{label: "&Start", handler: menuHandler(cmdTextStartService), enabled: true}) + menuitems = append(menuitems, menuItem{label: "S&top", handler: menuHandler(cmdTextStopService), enabled: true}) + menuitems = append(menuitems, menuItem{label: "&Restart", handler: menuHandler(cmdTextRestartService), enabled: true}) + menuitems = append(menuitems, menuItem{label: "&Configure", handler: menuHandler(cmdTextConfig), enabled: true}) + menuitems = append(menuitems, menuItem{label: "&Flare", handler: func() { onFlare(s) }, enabled: true}) + menuitems = append(menuitems, menuItem{label: menuSeparator}) + menuitems = append(menuitems, menuItem{label: "E&xit", handler: func() { onExit(s) }, enabled: true}) + + return menuitems +} + +// opens a browser window at the specified URL +func open(url string) error { + cmdptr := windows.StringToUTF16Ptr("rundll32.exe url.dll,FileProtocolHandler " + url) + if C.LaunchUnelevated(C.LPCWSTR(unsafe.Pointer(cmdptr))) == 0 { + // Failed to run process non-elevated, retry with normal launch. + pkglog.Warnf("Failed to launch configuration page as non-elevated, will launch as current process.") + return exec.Command("rundll32", "url.dll,FileProtocolHandler", url).Start() + } + + // Succeeded, return no error. + return nil +} + +// execCmdOrElevate carries out a command. If current process is not elevated and is not supposed to be elevated, it will launch +// itself as elevated and quit from the current instance. +func execCmdOrElevate(s *systray, cmd string) { + if !s.params.LaunchElevatedFlag && !s.isUserAdmin { + // If not launched as elevated and user is not admin, relaunch self. Use AND here to prevent from dead loop. + relaunchElevated(s, cmd) + + // If elevation failed, just quit to the caller. + return + } + + if cmds[cmd] != nil { + cmds[cmd](s) + } +} + +// relaunchElevated launch another instance of the current process asking it to carry out a command as admin. +// If the function succeeds, it will quit the process, otherwise the function will return to the caller. +func relaunchElevated(s *systray, cmd string) { + verb := "runas" + exe, _ := os.Executable() + cwd, _ := os.Getwd() + + // Reconstruct arguments, drop launch-gui and tell the new process it should have been elevated. + xargs := []string{"--launch-elev=true", "--launch-cmd=" + cmd} + args := strings.Join(xargs, " ") + + verbPtr, _ := windows.UTF16PtrFromString(verb) + exePtr, _ := windows.UTF16PtrFromString(exe) + cwdPtr, _ := windows.UTF16PtrFromString(cwd) + argPtr, _ := windows.UTF16PtrFromString(args) + + var showCmd int32 = 1 //SW_NORMAL + + err := windows.ShellExecute(0, verbPtr, exePtr, argPtr, cwdPtr, showCmd) + if err != nil { + s.log.Warnf("Failed to launch self as elevated %v", err) + } else { + triggerShutdown(s) + } +} diff --git a/comp/systray/systray/uac.c b/comp/systray/systray/uac.c new file mode 100644 index 00000000000000..4f90235728a5e9 --- /dev/null +++ b/comp/systray/systray/uac.c @@ -0,0 +1,84 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +#include "uac.h" + +// Attempts to drop privileges from an elevated process by creating a new process and +// setting the parent process to be the user's explorer.exe. This causes the new process to +// inherit its access token from explorer.exe. +// +// Technique relies on having permission to open explorer.exe with PROCESS_CREATE_PROCESS, +// this access is verified against the explorer.exe process DACL. +// Generally, +// If the current process was elevated via a consent prompt, the user account is the same and access will be granted. +// If the current process was elevated via a credential prompt, the user account is different and access will be denied. +// https://learn.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works +// +// TODO: Try to enable SeDebugPrivilege. This will allow this function to support credential prompts +// if group policy has not been modified to remove SeDebugPrivilege from Administrators. +BOOL LaunchUnelevated(LPCWSTR CommandLine) +{ + BOOL result = FALSE; + // Get handle to the Shell's desktop window + // https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getshellwindow + HWND hwnd = GetShellWindow(); + + if (hwnd != NULL) + { + DWORD pid; + // Get pid that created the window, this should be PID of explorer.exe + if (GetWindowThreadProcessId(hwnd, &pid) != 0) + { + HANDLE process = OpenProcess(PROCESS_CREATE_PROCESS, FALSE, pid); + + if (process != NULL) + { + // To set the parent process, create a thread attribute list containing PROC_THREAD_ATTRIBUTE_PARENT_PROCESS + SIZE_T size; + if ((!InitializeProcThreadAttributeList(NULL, 1, 0, &size)) && (GetLastError() == ERROR_INSUFFICIENT_BUFFER)) + { + LPPROC_THREAD_ATTRIBUTE_LIST p = (LPPROC_THREAD_ATTRIBUTE_LIST)malloc(size); + if (p != NULL) + { + if (InitializeProcThreadAttributeList(p, 1, 0, &size)) + { + if (UpdateProcThreadAttribute(p, 0, + PROC_THREAD_ATTRIBUTE_PARENT_PROCESS, + &process, sizeof(process), + NULL, NULL)) + { + STARTUPINFOEXW siex = {0}; + siex.lpAttributeList = p; + siex.StartupInfo.cb = sizeof(siex); + PROCESS_INFORMATION pi = {0}; + + size_t cmdlen = wcslen(CommandLine); + size_t rawcmdlen = (cmdlen + 1) * sizeof(WCHAR); + PWSTR cmdstr = (PWSTR)malloc(rawcmdlen); + if (cmdstr != NULL) + { + memcpy(cmdstr, CommandLine, rawcmdlen); + if (CreateProcessW(NULL, cmdstr, NULL, NULL, FALSE, + CREATE_NEW_CONSOLE | EXTENDED_STARTUPINFO_PRESENT, + NULL, NULL, &siex.StartupInfo, &pi)) + { + result = TRUE; + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + } + free(cmdstr); + } + } + } + DeleteProcThreadAttributeList(p); + free(p); + } + } + CloseHandle(process); + } + } + } + return result; +} diff --git a/cmd/cluster-agent/app/dummy.go b/comp/systray/systray/uac.h similarity index 52% rename from cmd/cluster-agent/app/dummy.go rename to comp/systray/systray/uac.h index 125c4446fa14c9..5b591464c2eb1f 100644 --- a/cmd/cluster-agent/app/dummy.go +++ b/comp/systray/systray/uac.h @@ -3,13 +3,6 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:build !kubeapiserver -// +build !kubeapiserver +#include -package app - -// this file is to allow go vet to look at something in this directory, as everything -// else currently is excluded (on windows) by build flags -func init() { - -} +BOOL LaunchUnelevated(LPCWSTR CommandLine); diff --git a/docs/cloud-workload-security/README.md b/docs/cloud-workload-security/README.md index efe33c1c87c76a..c3bca36160d542 100644 --- a/docs/cloud-workload-security/README.md +++ b/docs/cloud-workload-security/README.md @@ -75,7 +75,7 @@ The Cloud Workload Security (CWS) part of the Agent sends events to the backend. ### Editing files -To change the documentation of one of the fields in the schema, edit the correct field in `pkg/security/probe/serializers.go`. The documentation of a field is added through the `jsonschema_description` tag of the field. +To change the documentation of one of the fields in the schema, edit the correct field in `pkg/security/probe/serializers.go`. The documentation of a field is added through the commont of the field. For example: diff --git a/docs/components/README.md b/docs/components/README.md index ae630d11f4f71d..280d86a4b88711 100644 --- a/docs/components/README.md +++ b/docs/components/README.md @@ -9,3 +9,4 @@ * [Defining Apps and Binaries](./defining-apps.md) * [Registrations](./registrations.md) * [Subscriptions](./subscriptions.md) + * [Migrating to components](./migrating-to-components.md) diff --git a/docs/components/defining-bundles.md b/docs/components/defining-bundles.md index 0a0342ff33afb3..0b8b58a98a0bfe 100644 --- a/docs/components/defining-bundles.md +++ b/docs/components/defining-bundles.md @@ -16,7 +16,7 @@ The package must have the following defined in `bundle.go`: * A team-name comment of the form `// team: `. This is used to generate CODEOWNERS information. - * `BundleParams` -- the type of the bundle's parameters (see below). + * An optional `BundleParams` -- the type of the bundle's parameters (see below). This item should have a formulaic doc string like `// BundleParams defines the parameters for this bundle.` * `Bundle` -- an `fx.Option` that can be included in an `fx.App` to make this bundle's components available. @@ -37,41 +37,31 @@ These parameters are limited to two kinds: Anything else is runtime configuration and should be handled vi `comp/core/config` or another mechanism. -To avoid Go package cycles, the `BundleParams` type must be defined in the bundle's internal package, and re-exported from the bundle package: - -```go -// --- comp//internal/params.go --- - -// BundleParams defines the parameters for this bundle. -type BundleParams struct { - ... -} -``` +Bundle parameters must stored only `Params` types for sub components. The reason is that each sub component +must be usable without `BundleParams`. ```go // --- comp//bundle.go --- -import ".../comp//internal" import ".../comp//foo" +import ".../comp//bar" // ... // BundleParams defines the parameters for this bundle. -type BundleParams = internal.BundleParams +type BundleParams struct { + Foo foo.Params + Bar bar.Params +} var Bundle = fxutil.Bundle( + // You must tell to fx how to get foo.Params from BundleParams. + fx.Provide(func(params BundleParams) foo.Params { return params.Foo }), foo.Module, + // You must tell to fx how to get bar.Params from BundleParams. + fx.Provide(func(params BundleParams) bar.Params { return params.Bar }), + bar.Module, ) ``` -Components within the bundle can then require `internal.BundleParams` and modify their behavior appropriately: - -```go -// --- comp//foo/foo.go - -func newFoo(..., params internal.BundleParams) provides { - if params.HyperMode { ... } -} -``` - ## Testing A bundle should have a test file, `bundle_test.go`, to verify the documentation's claim about its dependencies. diff --git a/docs/components/migrating-to-components.md b/docs/components/migrating-to-components.md new file mode 100644 index 00000000000000..b6c5b47a59c0f0 --- /dev/null +++ b/docs/components/migrating-to-components.md @@ -0,0 +1,89 @@ +# Migrating to Components + +After your component has been created you can link it to other components such as flares (other like status pages, or health will come later). + +This page documents how to fully integrate your component in the Agent life cycle. + +## Flare + +The general idea is to register a callback within your component to be called each time a flare is created. This use fx +groups under the hood, but helpers are there to abstract all of that for you. + +Then, migrate the code related to your component's domain from `pkg/flare` to your component and delete it from `pkg/flare` once done. + +### Creating a callback + +To add data to a flare you will first need to register a callback, aka a `FlareBuilder`. + +Within your component create a method with the following signature `func (c *yourComp) fillFlare(fb flarehelpers.FlareBuilder) error`. + +This function is called every time the Agent generates a flare, either from the CLI or from the running Agent. This +callback receives a `comp/core/flare/helpers:FlareBuilder`. The `FlareBuilder` interface provides all the +helpers functions needed to add data to a flare (adding files, copying directories, scrubbing data, and so on). + +Example: + +```golang +import ( + yaml "gopkg.in/yaml.v2" + + flarehelpers "github.com/DataDog/datadog-agent/comp/core/flare/helpers" +) + +func (c *myComponent) fillFlare(fb flarehelpers.FlareBuilder) error { + fb.AddFileFromFunc( + "runtime_config_dump.yaml", + func () ([]byte, error) { + return yaml.Marshal(c.AllSettings()) + }, + ) + + fb.CopyFile("/etc/datadog-agent/datadog.yaml") + return nil +} +``` + +Read the package documentation for `FlareBuilder` for more information on the API. + +All errors returned by the `FlareBuilder` are automatically added to a log file shipped within the flare. Ship as much +data as possible in a flare instead of stopping at the first error. Returning an error does not stop the flare from +being created or sent. + +While you can register multiple callbacks from the same component, keep all the flare code in a single callback. + +### Register your callback + +Now you need to register you callback to be called each time a flare is created. To do so your component constructor +need to provide a new `comp/core/flare/helpers:Provider`. Use `comp/core/flare/helpers:NewProvider` for this. + +Example: +```golang +import ( + flarehelpers "github.com/DataDog/datadog-agent/comp/core/flare/helpers" +) + +type provides struct { + fx.Out + + // [...] + FlareProvider flarehelpers.Provider // Your component will provides a new FlareProvider + // [...] +} + +func newComponent(deps dependencies) (provides, error) { + // [...] + return provides{ + // [...] + FlareProvider: flarehelpers.NewProvider(myComponent.fillFlare), // NewProvider will wrap your callback in order to be use as a 'FlareProvider' + // [...] + }, nil +} +``` + +### Migrating your code + +Now migrate the require code from `pkg/flare` to you component callback. The code in `pkg/flare` already uses the +`FlareBuilder` interface, simplifying migration. Don't forget to migrate the tests too and expand them (most of the +flare features are not tested). `flarehelpers.NewFlareBuilderMock` will provides helpers for your tests. + +Keep in mind that the goal is to delete `pkg/flare` once the migration to component is done. diff --git a/docs/dev/agent_dev_env.md b/docs/dev/agent_dev_env.md index af00117c0a1840..eaf0aa911a7bca 100644 --- a/docs/dev/agent_dev_env.md +++ b/docs/dev/agent_dev_env.md @@ -1,6 +1,8 @@ -# Linux and MacOS Development Environments +# Development Environments -## Python +## Linux and MacOS + +### Python The Agent embeds a full-fledged CPython interpreter so it requires the development files to be available in the dev env. The Agent can embed Python2 @@ -28,7 +30,7 @@ sudo apt-get install python3.8-dev On Windows, install Python 2.7 and/or 3.8 via the [official installer](https://www.python.org/downloads/). -### Additional Windows Tools +#### Additional Windows Tools You will also need the Visual Studio for [Visual Studio for Python installer](http://aka.ms/vcpython27) Download the [gcc toolchain](http://win-builds.org/). @@ -37,9 +39,9 @@ Download the [gcc toolchain](http://win-builds.org/). - Add installation folder to the `%PATH%`. -### Python Dependencies +#### Python Dependencies -#### Preface +##### Preface To protect and isolate your system-wide python installation, a python virtual environment is _highly_ recommended (though optional). It will help keep a @@ -66,7 +68,7 @@ though). PYTHONPATH="./venv/lib/python3.8/site-packages:$PYTHONPATH" ./agent run ... ``` -### Invoke +#### Invoke [Invoke](http://www.pyinvoke.org/) is a task runner written in Python that is extensively used in this project to orchestrate builds and test @@ -91,7 +93,7 @@ are used in the official build. Such values are listed in the `invoke.yaml` file at the root of this repo and can be overridden by setting `INVOKE_*` env variables (see Invoke docs for more details). -## Golang +### Golang You must [install Golang](https://golang.org/doc/install) version `1.18.9` or higher. Make sure that `$GOPATH/bin` is in your `$PATH` otherwise `invoke` @@ -102,18 +104,18 @@ specified in our build images (see e.g. [here](https://github.com/DataDog/datado may not be able to build the agent and/or the [rtloader](https://github.com/DataDog/datadog-agent/tree/main/rtloader) binary properly.** -## Installing tooling +### Installing tooling From the root of `datadog-agent`, run `invoke install-tools` to install go tooling. This uses `go` to install the necessary dependencies. -## System or Embedded? +### System or Embedded? When working on the Agent codebase you can choose among two different ways to build the binary, informally named _System_ and _Embedded_ builds. For most contribution scenarios you should rely on the System build (the default) and use the Embedded one only for specific use cases. Let's explore the differences. -### System build +#### System build _System_ builds use your operating system's standard system libraries to satisfy the Agent's external dependencies. Since, for example, macOS 10.11 may provide a @@ -126,7 +128,7 @@ sure you have system copies of all the Agent's dependencies, skip the _Embedded build_ section below and read on to see how to install them via your usual package manager (apt, yum, brew, etc). -### Embedded build +#### Embedded build _Embedded_ builds download specifically-versioned dependencies and compile them locally from sources. We run Embedded builds to create Datadog's official Agent @@ -146,7 +148,7 @@ and build dependencies, so you need a recent `ruby` environment with `bundler` installed. See [how to build Agent packages with Omnibus][agent-omnibus] for more details. -### Systemd +#### Systemd The agent is able to collect systemd journal logs using a wrapper on the systemd utility library. @@ -160,7 +162,7 @@ On Redhat/CentOS: sudo yum install systemd-devel ``` -## Docker +### Docker If you want to build a Docker image containing the Agent, or if you wan to run [system and integration tests][testing] you need to run a recent version of Docker in your @@ -173,7 +175,7 @@ dev environment. [integrations-core]: https://github.com/DataDog/integrations-core [datadog_checks_base]: https://github.com/DataDog/integrations-core/tree/master/datadog_checks_base -## Doxygen +### Doxygen We use [Doxygen](http://www.doxygen.nl/) to generate the documentation for the `rtloader` part of the Agent. @@ -182,11 +184,11 @@ Alternatively, you can use already-compiled Doxygen binaries from [here](http:// To get the dependency graphs, you may also need to install the `dot` executable from [graphviz](http://www.graphviz.org/) and add it to your `$PATH`. -## Pre-commit hooks +### Pre-commit hooks It is optional but recommended to install `pre-commit` to run a number of checks done by the CI locally. -### Installation +#### Installation To install it, run: @@ -204,11 +206,11 @@ inv install-shellcheck --destination (by default, the shellcheck binary is installed in `/usr/local/bin`). -### Skipping `pre-commit` +#### Skipping `pre-commit` If you want to skip `pre-commit` for a specific commit you can add `--no-verify` to the `git commit` command. -### Running `pre-commit` manually +#### Running `pre-commit` manually If you want to run one of the checks manually, you can run `pre-commit run `. @@ -219,10 +221,24 @@ pre-commit run flake8 --all-files # run flake8 on all files See `pre-commit run --help` for further options. -# Setting up your Windows development environment +### Setting up Visual Studio Code Dev Container + +[Microsoft Visual Studio Code](https://code.visualstudio.com/download) with the [devcontainer plugin](https://code.visualstudio.com/docs/remote/containers) allow to use a container as remote development environment in vscode. It simplify and isolate +the dependencies needed to develop in this repository. + +To configure the vscode editor to use a container as remote development environment you need to: + +- Install the [devcontainer plugin](https://code.visualstudio.com/docs/remote/containers) and the [golang language plugin](https://code.visualstudio.com/docs/languages/go). +- Run the following invoke command `invoke vscode.setup-devcontainer --image ""`. + This command will create the devcontainer configuration file `./devcontainer/devcontainer.json`. +- Start or restart your vscode editor. +- A pop-up should show-up to propose to "reopen in container" your workspace. +- The first start, it might propose you to install the golang plugin dependencies/tooling. + +## Windows development environment -## Code editor +### Code editor [Microsoft Visual Studio Code](https://code.visualstudio.com/download) is recommended as it's lightweight and versatile. -Building on Windows would require multiple 3rd-party softwares to be installed. To avoid the complexity, it is recommended to make the code change in VS Code then do the build in Docker image. For complete information, see [Build the Agent packages](https://github.com/DataDog/datadog-agent/blob/main/docs/dev/agent_omnibus.md) +Building on Windows requires multiple 3rd-party software to be installed. To avoid the complexity, Datadog recommends to make the code change in VS Code, and then do the build in Docker image. For complete information, see [Build the Agent packages](https://github.com/DataDog/datadog-agent/blob/main/docs/dev/agent_omnibus.md) diff --git a/docs/dev/agent_memory.md b/docs/dev/agent_memory.md index ba99fc5f8bd64d..ff0c3e42db55ac 100644 --- a/docs/dev/agent_memory.md +++ b/docs/dev/agent_memory.md @@ -136,9 +136,40 @@ available in the links below. Python, another runtime in the Agent process, is also garbage collected. Datadog offers two tools with the Agent that can help you identify memory issues: -- Trracemalloc +- Python memory telemetry (Python 3 only) +- Tracemalloc - Pympler +### Python memory telemetry + +Python memory telemetry hooks into low-level allocator routines, to +provide a coarse view of the total memory allocated by the Python +memory manager. + +Python memory telemetry is only available when using Python 3 (Python +2 lacks the hooks necessary to implement this). + +Python memory telemetry is part of the Agent internal telemetry and is +enabled by default. Set `telemetry.python_memory: false` to disable. + +| Internal name | Default metric name | Description | +|----------------|-----------------------------|----------------------------------------------------------------| +| `pymem__alloc` | `datadog.agent.pymem.alloc` | Total number of bytes allocated since the start of the Agent. | +| `pymem__inuse` | `datadog.agent.pymem.inuse` | Number of bytes currently allocated by the Python interpreter. | + +The Python memory manager internally maintains a small reserve of +unused memory, so the numbers provided by this tool may be slightly +larger than the memory actually used by the Python code. + +This telemetry represents memory allocated by pymalloc and the raw +allocator (See [Memory management] in the Python manual). It does not +include memory allocated by native extensions and libraries directly +via libc. + +[Memory management]: https://docs.python.org/3/c-api/memory.html + +### Tracemalloc + Tracemalloc is part of the CPython interpreter, and tracks allocations and frees. It's implemented efficiently and runs with relatively low overhead. It also allows the user to compare memory in different points in time to diff --git a/go.mod b/go.mod index 7c1d62389aa92b..56593dfa922b9e 100644 --- a/go.mod +++ b/go.mod @@ -20,7 +20,6 @@ replace ( github.com/cihub/seelog => github.com/cihub/seelog v0.0.0-20151216151435-d2c6e5aa9fbf // v2.6 github.com/coreos/go-systemd => github.com/coreos/go-systemd v0.0.0-20180202092358-40e2722dffea github.com/docker/distribution => github.com/docker/distribution v2.8.1+incompatible - github.com/lxn/walk => github.com/lxn/walk v0.0.0-20180521183810-02935bac0ab8 github.com/mholt/archiver => github.com/mholt/archiver v2.0.1-0.20171012052341-26cf5bb32d07+incompatible github.com/spf13/cast => github.com/DataDog/cast v1.3.1-0.20190301154711-1ee8c8bd14a3 github.com/ugorji/go => github.com/ugorji/go v1.1.7 @@ -42,7 +41,7 @@ require ( code.cloudfoundry.org/bbs v0.0.0-20200403215808-d7bc971db0db code.cloudfoundry.org/garden v0.0.0-20210208153517-580cadd489d2 code.cloudfoundry.org/lager v2.0.0+incompatible - github.com/DataDog/agent-payload/v5 v5.0.46 + github.com/DataDog/agent-payload/v5 v5.0.61 github.com/DataDog/datadog-agent/pkg/obfuscate v0.42.0-rc.3 github.com/DataDog/datadog-agent/pkg/otlp/model v0.42.0-rc.3 github.com/DataDog/datadog-agent/pkg/quantile v0.42.0-rc.3 @@ -67,12 +66,12 @@ require ( github.com/Masterminds/semver v1.5.0 github.com/Masterminds/sprig/v3 v3.2.3 github.com/Microsoft/go-winio v0.5.2 - github.com/Microsoft/hcsshim v0.9.4 + github.com/Microsoft/hcsshim v0.9.6 github.com/acobaugh/osrelease v0.1.0 github.com/alecthomas/participle v0.7.1 github.com/alecthomas/repr v0.0.0-20181024024818-d37bc2a10ba1 github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 - github.com/avast/retry-go/v4 v4.3.1 + github.com/avast/retry-go/v4 v4.3.2 github.com/aws/aws-lambda-go v1.32.0 github.com/aws/aws-sdk-go v1.44.117 github.com/beevik/ntp v0.3.0 @@ -128,11 +127,11 @@ require ( github.com/imdario/mergo v0.3.13 github.com/invopop/jsonschema v0.7.0 github.com/iovisor/gobpf v0.2.0 - github.com/itchyny/gojq v0.12.10 + github.com/itchyny/gojq v0.12.11 github.com/json-iterator/go v1.1.12 github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 - github.com/lxn/walk v0.0.0-20191128110447-55ccb3a9f5c1 - github.com/lxn/win v0.0.0-20191128105842-2da648fda5b4 + github.com/lxn/walk v0.0.0-20210112085537-c389da54e794 + github.com/lxn/win v0.0.0-20210218163916-a377121e959e github.com/mailru/easyjson v0.7.7 github.com/mdlayher/netlink v1.6.2 github.com/mholt/archiver/v3 v3.5.1 @@ -144,7 +143,7 @@ require ( github.com/olekukonko/tablewriter v0.0.5 github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852 github.com/open-policy-agent/opa v0.45.0 - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.64.0 + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.68.0 github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799 github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 github.com/openshift/api v3.9.0+incompatible @@ -175,26 +174,27 @@ require ( github.com/xeipuuv/gojsonschema v1.2.0 go.etcd.io/bbolt v1.3.6 go.etcd.io/etcd/client/v2 v2.306.0-alpha.0 - go.opentelemetry.io/collector v0.66.0 - go.opentelemetry.io/collector/component v0.66.0 - go.opentelemetry.io/collector/exporter/loggingexporter v0.66.0 - go.opentelemetry.io/collector/exporter/otlpexporter v0.66.0 - go.opentelemetry.io/collector/pdata v0.66.0 - go.opentelemetry.io/collector/processor/batchprocessor v0.66.0 - go.opentelemetry.io/collector/receiver/otlpreceiver v0.66.0 + go.opentelemetry.io/collector v0.68.0 + go.opentelemetry.io/collector/component v0.68.0 + go.opentelemetry.io/collector/confmap v0.68.0 + go.opentelemetry.io/collector/exporter/loggingexporter v0.68.0 + go.opentelemetry.io/collector/exporter/otlpexporter v0.68.0 + go.opentelemetry.io/collector/pdata v1.0.0-rc2 + go.opentelemetry.io/collector/processor/batchprocessor v0.68.0 + go.opentelemetry.io/collector/receiver/otlpreceiver v0.68.0 go.uber.org/atomic v1.10.0 go.uber.org/automaxprocs v1.5.1 - go.uber.org/multierr v1.8.0 - go.uber.org/zap v1.23.0 + go.uber.org/multierr v1.9.0 + go.uber.org/zap v1.24.0 go4.org/netipx v0.0.0-20220812043211-3cc044ffd68d golang.org/x/arch v0.0.0-20190927153633-4e8777c89be4 golang.org/x/exp v0.0.0-20221114191408-850992195362 - golang.org/x/net v0.4.0 + golang.org/x/net v0.5.0 golang.org/x/sync v0.1.0 - golang.org/x/sys v0.3.0 - golang.org/x/text v0.5.0 + golang.org/x/sys v0.4.0 + golang.org/x/text v0.6.0 golang.org/x/time v0.0.0-20220411224347-583f2d630306 - golang.org/x/tools v0.3.0 + golang.org/x/tools v0.5.0 google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c google.golang.org/grpc v1.51.0 google.golang.org/grpc/examples v0.0.0-20221020162917-9127159caf5a @@ -268,7 +268,6 @@ require ( github.com/containernetworking/plugins v1.1.1 // indirect github.com/coreos/go-systemd/v22 v22.3.2 // indirect github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f // indirect - github.com/dgraph-io/ristretto v0.1.0 // indirect github.com/dgryski/go-jump v0.0.0-20211018200510-ba001c3ffce0 // indirect github.com/docker/distribution v2.7.1+incompatible // indirect github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect @@ -276,7 +275,7 @@ require ( github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 // indirect github.com/emicklei/go-restful v2.16.0+incompatible // indirect github.com/emicklei/go-restful-swagger12 v0.0.0-20201014110547-68ccff494617 // indirect - github.com/evanphx/json-patch v4.12.0+incompatible // indirect + github.com/evanphx/json-patch v4.12.0+incompatible github.com/felixge/httpsnoop v1.0.3 // indirect github.com/fsnotify/fsnotify v1.6.0 github.com/ghodss/yaml v1.0.0 // indirect @@ -292,7 +291,7 @@ require ( github.com/gogo/googleapis v1.4.0 // indirect github.com/golang/glog v1.0.0 // indirect github.com/golang/snappy v0.0.4 // indirect - github.com/google/gofuzz v1.2.0 // indirect + github.com/google/gofuzz v1.2.0 github.com/google/uuid v1.3.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.0 // indirect github.com/googleapis/gax-go/v2 v2.7.0 // indirect @@ -320,16 +319,16 @@ require ( github.com/josharian/native v1.0.0 // indirect github.com/karrick/godirwalk v1.17.0 // indirect github.com/kjk/lzma v0.0.0-20161016003348-3fd93898850d // indirect - github.com/klauspost/compress v1.15.12 // indirect + github.com/klauspost/compress v1.15.13 // indirect github.com/klauspost/pgzip v1.2.5 // indirect github.com/knadh/koanf v1.4.4 // indirect github.com/libp2p/go-reuseport v0.1.0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect github.com/magiconair/properties v1.8.6 // indirect - github.com/mattn/go-colorable v0.1.12 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.16 // indirect github.com/mattn/go-runewidth v0.0.14 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.2 // indirect github.com/mdlayher/socket v0.2.3 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect @@ -354,16 +353,17 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect github.com/prometheus/client_model v0.3.0 - github.com/prometheus/common v0.37.0 // indirect - github.com/prometheus/procfs v0.8.0 + github.com/prometheus/common v0.38.0 // indirect + github.com/prometheus/procfs v0.9.0 github.com/prometheus/statsd_exporter v0.22.7 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/rivo/uniseg v0.2.0 // indirect + github.com/rogpeppe/go-internal v1.8.1 // indirect github.com/rs/cors v1.8.2 // indirect github.com/sassoftware/go-rpmutils v0.2.0 // indirect github.com/secure-systems-lab/go-securesystemslib v0.4.0 github.com/shopspring/decimal v1.2.0 // indirect - github.com/skydive-project/go-debouncer v1.0.0 // indirect + github.com/skydive-project/go-debouncer v1.0.0 github.com/smira/go-ftp-protocol v0.0.0-20140829150050-066b75c2b70d // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/stretchr/objx v0.5.0 // indirect @@ -392,24 +392,24 @@ require ( go.etcd.io/etcd/client/v3 v3.6.0-alpha.0 // indirect go.etcd.io/etcd/server/v3 v3.6.0-alpha.0.0.20220522111935-c3bc4116dcd1 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/collector/consumer v0.66.0 // indirect - go.opentelemetry.io/collector/featuregate v0.66.0 // indirect - go.opentelemetry.io/collector/semconv v0.66.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.4 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.36.4 // indirect - go.opentelemetry.io/contrib/propagators/b3 v1.11.1 // indirect - go.opentelemetry.io/otel v1.11.1 // indirect - go.opentelemetry.io/otel/exporters/prometheus v0.33.0 // indirect - go.opentelemetry.io/otel/metric v0.33.0 // indirect - go.opentelemetry.io/otel/sdk v1.11.1 // indirect - go.opentelemetry.io/otel/sdk/metric v0.33.0 // indirect - go.opentelemetry.io/otel/trace v1.11.1 // indirect + go.opentelemetry.io/collector/consumer v0.68.0 // indirect + go.opentelemetry.io/collector/featuregate v0.68.0 // indirect + go.opentelemetry.io/collector/semconv v0.68.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.37.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.37.0 // indirect + go.opentelemetry.io/contrib/propagators/b3 v1.12.0 // indirect + go.opentelemetry.io/otel v1.11.2 // indirect + go.opentelemetry.io/otel/exporters/prometheus v0.34.0 // indirect + go.opentelemetry.io/otel/metric v0.34.0 // indirect + go.opentelemetry.io/otel/sdk v1.11.2 // indirect + go.opentelemetry.io/otel/sdk/metric v0.34.0 // indirect + go.opentelemetry.io/otel/trace v1.11.2 // indirect go.uber.org/dig v1.15.0 go.uber.org/fx v1.18.2 - golang.org/x/crypto v0.3.0 // indirect + golang.org/x/crypto v0.5.0 // indirect golang.org/x/mod v0.7.0 // indirect golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 // indirect - golang.org/x/term v0.3.0 // indirect + golang.org/x/term v0.4.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/api v0.103.0 // indirect google.golang.org/appengine v1.6.7 // indirect @@ -426,9 +426,33 @@ require ( sigs.k8s.io/yaml v1.3.0 // indirect ) -require github.com/DataDog/go-libddwaf v0.0.0-20221118110754-0372d7c76b8a +require ( + github.com/CycloneDX/cyclonedx-go v0.6.0 + github.com/DataDog/go-libddwaf v0.0.0-20221118110754-0372d7c76b8a + github.com/go-redis/redis/v9 v9.0.0-rc.2 + github.com/safchain/baloum v0.0.0-20221229104256-b1fc8f70a86b + github.com/streadway/amqp v1.0.0 + github.com/uptrace/bun v1.1.9 + github.com/uptrace/bun/dialect/pgdialect v1.1.9 + github.com/uptrace/bun/driver/pgdriver v1.1.9 + go.mongodb.org/mongo-driver v1.11.1 +) -require gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect +require ( + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/jinzhu/inflection v1.0.0 // indirect + github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect + github.com/outcaste-io/ristretto v0.2.0 // indirect + github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc // indirect + github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect + github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect + github.com/xdg-go/pbkdf2 v1.0.0 // indirect + github.com/xdg-go/scram v1.1.1 // indirect + github.com/xdg-go/stringprep v1.0.3 // indirect + github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect + gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect + mellium.im/sasl v0.3.1 // indirect +) replace github.com/pahanini/go-grpc-bidirectional-streaming-example v0.0.0-20211027164128-cc6111af44be => github.com/DataDog/go-grpc-bidirectional-streaming-example v0.0.0-20221024060302-b9cf785c02fe diff --git a/go.sum b/go.sum index 9089892f6f126f..a790b34521d4ac 100644 --- a/go.sum +++ b/go.sum @@ -119,8 +119,10 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/toml v1.1.0 h1:ksErzDEI1khOiGPgpwuI7x2ebx/uXQNw7xJpn9Eq1+I= github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/DataDog/agent-payload/v5 v5.0.46 h1:flmDbLb7QFTLNvbfjkL0BiwFfwP5umS17tQ4ZUeJ9r8= -github.com/DataDog/agent-payload/v5 v5.0.46/go.mod h1:vhXPNG7eNDOLeW94Z7dLNUBv61kRBHK7vXnQ+RQfckk= +github.com/CycloneDX/cyclonedx-go v0.6.0 h1:SizWGbZzFTC/O/1yh072XQBMxfvsoWqd//oKCIyzFyE= +github.com/CycloneDX/cyclonedx-go v0.6.0/go.mod h1:nQCiF4Tvrg5Ieu8qPhYMvzPGMu5I7fANZkrSsJjl5mg= +github.com/DataDog/agent-payload/v5 v5.0.61 h1:3HC4B1NpHgAedZHmM9/oCJvFo6pu/ugDAjrISK5AJsk= +github.com/DataDog/agent-payload/v5 v5.0.61/go.mod h1:oQZi1VZp1e3QvlSUX4iphZCpJaFepUxWq0hNXxihKBM= github.com/DataDog/aptly v1.5.0 h1:Oy6JVRC9iDgnmpeVYa4diXwP/exU7wJ/U1kuI4Zacxg= github.com/DataDog/aptly v1.5.0/go.mod h1:KVyvkYXGcFugxadGFZ+u5Fc3M6q/EfzFZyeTD9HVbkY= github.com/DataDog/cast v1.3.1-0.20190301154711-1ee8c8bd14a3 h1:SobA9WYm4K/MUtWlbKaomWTmnuYp1KhIm8Wlx3vmpsg= @@ -196,8 +198,8 @@ github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2 github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00= github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600= github.com/Microsoft/hcsshim v0.8.21/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4= -github.com/Microsoft/hcsshim v0.9.4 h1:mnUj0ivWy6UzbB1uLFqKR6F+ZyiDc7j4iGgHTpO+5+I= -github.com/Microsoft/hcsshim v0.9.4/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= +github.com/Microsoft/hcsshim v0.9.6 h1:VwnDOgLeoi2du6dAznfmspNqTiwczvjv4K7NxuY9jsY= +github.com/Microsoft/hcsshim v0.9.6/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I= @@ -253,8 +255,8 @@ github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/avast/retry-go/v4 v4.3.1 h1:Mtg11F9PdAIMkMiio2RKcYauoVHjl2aB3zQJJlzD4cE= -github.com/avast/retry-go/v4 v4.3.1/go.mod h1:rg6XFaiuFYII0Xu3RDbZQkxCofFwruZKW8oEF1jpWiU= +github.com/avast/retry-go/v4 v4.3.2 h1:x4sTEu3jSwr7zNjya8NTdIN+U88u/jtO/q3OupBoDtM= +github.com/avast/retry-go/v4 v4.3.2/go.mod h1:rg6XFaiuFYII0Xu3RDbZQkxCofFwruZKW8oEF1jpWiU= github.com/awalterschulze/gographviz v0.0.0-20160912181450-761fd5fbb34e/go.mod h1:GEV5wmg4YquNw7v1kkyoX9etIk8yVmXj+AkDHuuETHs= github.com/awalterschulze/gographviz v2.0.1+incompatible h1:XIECBRq9VPEQqkQL5pw2OtjCAdrtIgFKoJU8eT98AS8= github.com/awalterschulze/gographviz v2.0.1+incompatible/go.mod h1:GEV5wmg4YquNw7v1kkyoX9etIk8yVmXj+AkDHuuETHs= @@ -313,6 +315,8 @@ github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dR github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40 h1:y4B3+GPxKlrigF1ha5FFErxK+sr6sWxQovRMzwMhejo= github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= github.com/bradfitz/gomemcache v0.0.0-20220106215444-fb4bf637b56d/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA= +github.com/bradleyjkemp/cupaloy/v2 v2.7.0 h1:AT0vOjO68RcLyenLCHOGZzSNiuto7ziqzq6Q1/3xzMQ= +github.com/bradleyjkemp/cupaloy/v2 v2.7.0/go.mod h1:bm7JXdkRd4BHJk9HpwqAI8BoAY1lps46Enkdqw6aRX0= github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= github.com/bytecodealliance/wasmtime-go v1.0.0 h1:9u9gqaUiaJeN5IoD1L7egD8atOnTGyJcNp8BhkL9cUU= github.com/cavaliergopher/grab/v3 v3.0.1 h1:4z7TkBfmPjmLAAmkkAZNX/6QJ1nNFdv3SdIHXju0Fr4= @@ -498,11 +502,11 @@ github.com/denisenkom/go-mssqldb v0.11.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27 github.com/derekparker/trie v0.0.0-20200317170641-1fdf38b7b0e9/go.mod h1:D6ICZm05D9VN1n/8iOtBxLpXtoGp6HDFUJ1RNVieOSE= github.com/dgraph-io/badger/v3 v3.2103.2 h1:dpyM5eCJAtQCBcMCZcT4UBZchuTJgCywerHHgmxfxM8= github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= -github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-jump v0.0.0-20211018200510-ba001c3ffce0 h1:0wH6nO9QEa02Qx8sIQGw6ieKdz+BXjpccSOo9vXNl4U= github.com/dgryski/go-jump v0.0.0-20211018200510-ba001c3ffce0/go.mod h1:4hKCXuwrJoYvHZxJ86+bRVTOMyJ0Ej+RqfSm8mHi6KA= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48 h1:fRzb/w+pyskVMQ+UbP35JkH8yB7MYb4q/qhBarqZE6g= @@ -673,6 +677,8 @@ github.com/go-playground/validator/v10 v10.10.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4 github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= github.com/go-redis/redis/v7 v7.1.0/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg= github.com/go-redis/redis/v8 v8.0.0/go.mod h1:isLoQT/NFSP7V67lyvM9GmdvLdyZ7pEhsXvvyQtnQTo= +github.com/go-redis/redis/v9 v9.0.0-rc.2 h1:IN1eI8AvJJeWHjMW/hlFAv2sAfvTun2DVksDDJ3a6a0= +github.com/go-redis/redis/v9 v9.0.0-rc.2/go.mod h1:cgBknjwcBJa2prbnuHH/4k/Mlj4r0pWNV2HBanHujfY= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= @@ -999,8 +1005,8 @@ github.com/invopop/jsonschema v0.7.0 h1:2vgQcBz1n256N+FpX3Jq7Y17AjYt46Ig3zIWyy77 github.com/invopop/jsonschema v0.7.0/go.mod h1:O9uiLokuu0+MGFlyiaqtWxwqJm41/+8Nj0lD7A36YH0= github.com/iovisor/gobpf v0.2.0 h1:34xkQxft+35GagXBk3n23eqhm0v7q0ejeVirb8sqEOQ= github.com/iovisor/gobpf v0.2.0/go.mod h1:WSY9Jj5RhdgC3ci1QaacvbFdQ8cbrEjrpiZbLHLt2s4= -github.com/itchyny/gojq v0.12.10 h1:6TcS0VYWS6wgntpF/4tnrzwdCMjiTxRAxIqZWfDsDQU= -github.com/itchyny/gojq v0.12.10/go.mod h1:o3FT8Gkbg/geT4pLI0tF3hvip5F3Y/uskjRz9OYa38g= +github.com/itchyny/gojq v0.12.11 h1:YhLueoHhHiN4mkfM+3AyJV6EPcCxKZsOnYf+aVSwaQw= +github.com/itchyny/gojq v0.12.11/go.mod h1:o3FT8Gkbg/geT4pLI0tF3hvip5F3Y/uskjRz9OYa38g= github.com/itchyny/timefmt-go v0.1.5 h1:G0INE2la8S6ru/ZI5JecgyzbbJNs5lG1RcBqa7Jm6GE= github.com/itchyny/timefmt-go v0.1.5/go.mod h1:nEP7L+2YmAbT2kZ2HfSs1d8Xtw9LY8D2stDBckWakZ8= github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= @@ -1062,6 +1068,7 @@ github.com/jackc/puddle v1.2.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dv github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= github.com/jinzhu/gorm v1.9.1/go.mod h1:Vla75njaFJ8clLU1W44h34PjIkijhjHIYnZxMqCdxqo= +github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jinzhu/now v1.1.3/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= @@ -1127,8 +1134,8 @@ github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8 github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.14.2/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= -github.com/klauspost/compress v1.15.12 h1:YClS/PImqYbn+UILDnqxQCZ3RehC9N318SU3kElDUEM= -github.com/klauspost/compress v1.15.12/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.15.13 h1:NFn1Wr8cfnenSJSA46lLq4wHCcBzKTSjnBIexDMMOV0= +github.com/klauspost/compress v1.15.13/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/crc32 v1.2.0/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE= @@ -1169,10 +1176,10 @@ github.com/linuxkit/virtsock v0.0.0-20201010232012-f8cee7dfc7a3/go.mod h1:3r6x7q github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c h1:VtwQ41oftZwlMnOEbMWQtSEUgU64U4s+GHk7hZK+jtY= github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c/go.mod h1:JKx41uQRwqlTZabZc+kILPrO/3jlKnQ2Z8b7YiVw5cE= -github.com/lxn/walk v0.0.0-20180521183810-02935bac0ab8 h1:kqUcMNgwsZClDdT80kUmq8sidJQKQS2KyQQ0DTgbqNU= -github.com/lxn/walk v0.0.0-20180521183810-02935bac0ab8/go.mod h1:E23UucZGqpuUANJooIbHWCufXvOcT6E7Stq81gU+CSQ= -github.com/lxn/win v0.0.0-20191128105842-2da648fda5b4 h1:5BmtGkQbch91lglMHQ9JIDGiYCL3kBRBA0ItZTvOcEI= -github.com/lxn/win v0.0.0-20191128105842-2da648fda5b4/go.mod h1:ouWl4wViUNh8tPSIwxTVMuS014WakR1hqvBc2I0bMoA= +github.com/lxn/walk v0.0.0-20210112085537-c389da54e794 h1:NVRJ0Uy0SOFcXSKLsS65OmI1sgCCfiDUPj+cwnH7GZw= +github.com/lxn/walk v0.0.0-20210112085537-c389da54e794/go.mod h1:E23UucZGqpuUANJooIbHWCufXvOcT6E7Stq81gU+CSQ= +github.com/lxn/win v0.0.0-20210218163916-a377121e959e h1:H+t6A/QJMbhCSEH5rAuRxh+CtW96g0Or0Fxa9IKr4uc= +github.com/lxn/win v0.0.0-20210218163916-a377121e959e/go.mod h1:KxxjdtRkfNoYDCUP5ryK7XJJNTnpC8atvtmTheChOtk= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= @@ -1198,8 +1205,8 @@ github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= @@ -1224,8 +1231,9 @@ github.com/mattn/go-shellwords v1.0.6/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vq github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.14.12/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/matttproud/golang_protobuf_extensions v1.0.2 h1:hAHbPm5IJGijwng3PWk09JkG9WeqChjprR5s9bBZ+OM= +github.com/matttproud/golang_protobuf_extensions v1.0.2/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY= github.com/mdlayher/netlink v1.6.2 h1:D2zGSkvYsJ6NreeED3JiVTu1lj2sIYATqSaZlhPzUgQ= github.com/mdlayher/netlink v1.6.2/go.mod h1:O1HXX2sIWSMJ3Qn1BYZk1yZM+7iMki/uYGGiwGyq/iU= @@ -1291,6 +1299,7 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb h1:e+l77LJOEqXTIQihQJVkA6ZxPOUmfPM5e4H7rcpgtSk= github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= @@ -1354,12 +1363,12 @@ github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7 github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= -github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= +github.com/onsi/gomega v1.24.1 h1:KORJXNNTzJXzu4ScJWssJfJMnJ+2QJqhoQSRwNlze9E= github.com/open-policy-agent/opa v0.45.0 h1:P5nuhVRtR+e58fk3CMMbiqr6ZFyWQPNOC3otsorGsFs= github.com/open-policy-agent/opa v0.45.0/go.mod h1:/OnsYljNEWJ6DXeFOOnoGn8CvwZGMUS4iRqzYdJvmBI= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.64.0 h1:q/eqvFPeeAxZ+By7v7kZCboH0Qd8SlGoZhSJm0+Ep7I= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.64.0 h1:s+o8etLMu6wLm+iNE0A2mj71hqn1gMy/EmMvs99gpnc= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.64.0/go.mod h1:NXLo+jR2eisTG28/+UAtk7GJxdag/osWRP99PFbc0Is= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.68.0 h1:l3RvyAu1bGY9fPBl0+gFo//DAupNWxKZKYw5ZVlB/yE= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.68.0 h1:7OiB9jr6Dz3zg4LmHzbqVYFT76+4dm9hI8QF50JEZf4= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.68.0/go.mod h1:gxnTVPa/XgVQHXE53fFQfSBA89Pj2ISn/oBJdksBMEU= github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= @@ -1392,6 +1401,8 @@ github.com/openshift/api v3.9.0+incompatible/go.mod h1:dh9o4Fs58gpFXGSYfnVxGR9Pn github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/outcaste-io/ristretto v0.2.0 h1:47w059XTZWFt01OucwjcBt8mEa3VUUhntUWEfmgVBFc= +github.com/outcaste-io/ristretto v0.2.0/go.mod h1:iBZA7RCt6jaOr0z6hiBQ6t662/oZ6Gx/yauuPvIWHAI= github.com/oxtoacart/bpool v0.0.0-20150712133111-4e1c5567d7c2 h1:CXwSGu/LYmbjEab5aMCs5usQRVBGThelUKBNnoSOuso= github.com/oxtoacart/bpool v0.0.0-20150712133111-4e1c5567d7c2/go.mod h1:L3UMQOThbttwfYRNFOWLLVXMhk5Lkio4GGOtw5UrxS0= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= @@ -1471,8 +1482,9 @@ github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9 github.com/prometheus/common v0.28.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.35.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= -github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/common v0.38.0 h1:VTQitp6mXTdUoCmDMugDVOJ1opi6ADftKfp/yeqTR/E= +github.com/prometheus/common v0.38.0/go.mod h1:MBXfmBQZrK5XpbCkjofnXs96LD2QQ7fEq4C0xjC/yec= github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -1486,8 +1498,9 @@ github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= +github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= +github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0= github.com/prometheus/statsd_exporter v0.22.7/go.mod h1:N/TevpjkIh9ccs6nuzY3jQn9dFqnUakOjnEuMPJJJnI= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= @@ -1507,8 +1520,9 @@ github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= +github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= +github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= @@ -1519,6 +1533,8 @@ github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= +github.com/safchain/baloum v0.0.0-20221229104256-b1fc8f70a86b h1:cTiH46CYvPhgOlE0t82N+rgQw44b7vB39ay+P+wiVz8= +github.com/safchain/baloum v0.0.0-20221229104256-b1fc8f70a86b/go.mod h1:1+GWOH32bsIEAHknYja6/H1efcDs+/Q2XrtYMM200Ho= github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da h1:p3Vo3i64TCLY7gIfzeQaUJ+kppEO5WQG3cL8iE8tGHU= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= @@ -1604,6 +1620,8 @@ github.com/square/certstrap v1.2.0 h1:ecgyABrbFLr8jSbOC6oTBmBek0t/HqtgrMUZCPuyfd github.com/square/certstrap v1.2.0/go.mod h1:CUHqV+fxJW0Y5UQFnnbYwQ7bpKXO1AKbic9g73799yw= github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= +github.com/streadway/amqp v1.0.0 h1:kuuDrUJFZL1QYL9hUNuCxNObNzB0bV/ZG5jV3RWAQgo= +github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -1679,6 +1697,7 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20200122045848-3419fae592fc/go.mod h1 github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75 h1:6fotK7otjonDflCTK0BCfls4SPy3NcCVb5dqqmbRknE= github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75/go.mod h1:KO6IkyS8Y3j8OdNO85qEYBsRPuteD+YciPomcXdrMnk= +github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc h1:9lRDQMhESg+zvGYmW5DyG0UqvY96Bu5QYsTLvCHdrgo= github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc/go.mod h1:bciPuU6GHm1iF1pBvUfxfsH0Wmnc2VbpgvbI9ZWuIRs= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= @@ -1693,6 +1712,12 @@ github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oW github.com/ulikunitz/xz v0.5.9/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.10 h1:t92gobL9l3HE202wg3rlk19F6X+JOxl9BBrCCMYEYd8= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/uptrace/bun v1.1.9 h1:6zs+YJcgw8oj67c+YmI8edQokDFeyR4BE/ykNWjGYYs= +github.com/uptrace/bun v1.1.9/go.mod h1:fpYRCGyruLCyP7dNjMfqulYn4VBP/fH0enc0j0yW/Cs= +github.com/uptrace/bun/dialect/pgdialect v1.1.9 h1:V23SU89WfjqtePLFPRXVXCwmSyYb0XKeg8Z6BMXgyHg= +github.com/uptrace/bun/dialect/pgdialect v1.1.9/go.mod h1:+ux7PjC4NYsNMdGE9b2ERxCi2jJai8Z8zniXFExq0Ns= +github.com/uptrace/bun/driver/pgdriver v1.1.9 h1:Dy9g/EpgOG15RP3mDAuJd/hnfXAUdBsfxpg9On27M+Y= +github.com/uptrace/bun/driver/pgdriver v1.1.9/go.mod h1:YnPHzR4fT24PXrBTcadclXfdtkR9dYouqk2HwOiKf2g= github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.21.0/go.mod h1:lxDj6qX9Q6lWQxIrbrT0nwecwUtRnhVZAJjJZrVUZZQ= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= @@ -1717,9 +1742,12 @@ github.com/vmihailenco/msgpack/v4 v4.3.12 h1:07s4sz9IReOgdikxLTKNbBdqDMLsjPKXwvC github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= github.com/vmihailenco/msgpack/v5 v5.0.0-beta.1/go.mod h1:xlngVLeyQ/Qi05oQxhQ+oTuqa03RjMwMfk/7/TCs+QI= github.com/vmihailenco/msgpack/v5 v5.3.4/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= +github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU= +github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= github.com/vmihailenco/tagparser v0.1.2 h1:gnjoVuB/kljJ5wICEEOpx98oXMWPLj22G67Vbd1qPqc= github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= +github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= github.com/wI2L/jsondiff v0.3.0 h1:iTzQ9u/d86GE9RsBzVHX88f2EA1vQUboHwLhSQFc1s4= github.com/wI2L/jsondiff v0.3.0/go.mod h1:y1IMzNNjlSsk3IUoJdRJO7VRBtzMvRgyo4Vu0LdHpTc= @@ -1727,9 +1755,14 @@ github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= github.com/wsxiaoys/terminal v0.0.0-20160513160801-0940f3fc43a0 h1:3UeQBvD0TFrlVjOeLOBz+CPAI8dnbqNSVwUwRrkp7vQ= github.com/wsxiaoys/terminal v0.0.0-20160513160801-0940f3fc43a0/go.mod h1:IXCdmsXIht47RaVFLEdVnh1t+pgYtTAhQGj73kz+2DM= +github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= +github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E= +github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= +github.com/xdg-go/stringprep v1.0.3 h1:kdwGpVNwPFtjs98xCGkHjQtGKh86rDcRZN17QEMCOIs= +github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= @@ -1748,6 +1781,7 @@ github.com/xor-gate/ar v0.0.0-20170530204233-5c72ae81e2b7/go.mod h1:TCWCUPhQU1j7 github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yashtewari/glob-intersection v0.1.0 h1:6gJvMYQlTDOL3dMsPF6J0+26vwX9MB8/1q3uAdhmTrg= github.com/yashtewari/glob-intersection v0.1.0/go.mod h1:LK7pIC3piUjovexikBbJ26Yml7g8xa5bsjfx2v1fwok= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -1790,6 +1824,8 @@ go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVd go.etcd.io/etcd/server/v3 v3.6.0-alpha.0.0.20220522111935-c3bc4116dcd1 h1:S801WVTlIcQnS+pA7srsyxgxg4qNYx4Fm/YToSDde+w= go.etcd.io/etcd/server/v3 v3.6.0-alpha.0.0.20220522111935-c3bc4116dcd1/go.mod h1:sw82kLjlBpuhowfKyi54jk2s8qK8W4YG5EwlY/BleOY= go.mongodb.org/mongo-driver v1.5.1/go.mod h1:gRXCHX4Jo7J0IJ1oDQyUxF7jfy19UfxniMS4xxMmUqw= +go.mongodb.org/mongo-driver v1.11.1 h1:QP0znIRTuL0jf1oBQoAoM0C6ZJfBK4kx0Uumtv1A7w8= +go.mongodb.org/mongo-driver v1.11.1/go.mod h1:s7p5vEtfbeR1gYi6pnj3c3/urpbLv2T5Sfd6Rp2HBB8= go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= @@ -1800,63 +1836,65 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/collector v0.66.0 h1:5+0N2PCyqHoE3MYV8tgCsyeD86KbmIVDKmqKF9A7u9k= -go.opentelemetry.io/collector v0.66.0/go.mod h1:hE6jCs+0rfiufCrVPucKZTMwfHit1okfDPnwPT2eW1I= -go.opentelemetry.io/collector/component v0.66.0 h1:M2kI+BXGilmqEs8Kufo5nu0xiO+5cvwdPflV/r4pGkE= -go.opentelemetry.io/collector/component v0.66.0/go.mod h1:0c84EqXUhvYe6KW7hJfh76tiI/5yjWCH2amwyQ06XLM= -go.opentelemetry.io/collector/consumer v0.66.0 h1:wDx0MmqqsHGBcEa24HS0MlvDbLR0jT/936CSZ7vvP4M= -go.opentelemetry.io/collector/consumer v0.66.0/go.mod h1:WtoRZa5SnxQO1ZEQdVxYpFcXCmq62rakv0oUSlPO0NQ= -go.opentelemetry.io/collector/exporter/loggingexporter v0.66.0 h1:LLgWAS3zGce/H7UVB/EwPm49n3qNRbh/Gkd1IPORJDg= -go.opentelemetry.io/collector/exporter/loggingexporter v0.66.0/go.mod h1:X7fNHTbcgvOOio9QDEyVk0WbIm1JaVYby4z3VzsOc2k= -go.opentelemetry.io/collector/exporter/otlpexporter v0.66.0 h1:uXNkGlAXHyvUZL51qsQR8hS8oSt80m1ncbqwXRRkJMk= -go.opentelemetry.io/collector/exporter/otlpexporter v0.66.0/go.mod h1:IOoHR1lsV1r2TFOVctPogn9RUXT4jiU7kH+IhfUlP1w= -go.opentelemetry.io/collector/extension/zpagesextension v0.65.0 h1:T5JJIJ3cmClqdSMgkbjoIiP9p059AAvbfcd3houJkxM= -go.opentelemetry.io/collector/featuregate v0.66.0 h1:WW3IYWxOu9cfXa6fQwov0jswlf2Y/NEBHgiDkRPm4Uw= -go.opentelemetry.io/collector/featuregate v0.66.0/go.mod h1:tewuFKJYalWBU0bmNKg++MC1ipINXUr6szYzOw2p1GI= -go.opentelemetry.io/collector/pdata v0.66.0 h1:UdE5U6MsDNzuiWaXdjGx2lC3ElVqWmN/hiUE8vyvSuM= -go.opentelemetry.io/collector/pdata v0.66.0/go.mod h1:pqyaznLzk21m+1KL6fwOsRryRELL+zNM0qiVSn0MbVc= -go.opentelemetry.io/collector/processor/batchprocessor v0.66.0 h1:3GNIEOmGiVUSWljlisFGmjvIfsVKhn0OCafirS53YAs= -go.opentelemetry.io/collector/processor/batchprocessor v0.66.0/go.mod h1:XhGTsC1B/bq4gpg8IZ/QYBLXkzE4Gw3r7Xu2+ik8A1Q= -go.opentelemetry.io/collector/receiver/otlpreceiver v0.66.0 h1:ZHEOeGOIYIDTKhI9xs30/obFfhUbb9b2+e/eahp1fJA= -go.opentelemetry.io/collector/receiver/otlpreceiver v0.66.0/go.mod h1:pb+dcV+KJ44dP+CqV0N6L6dTeDDvCXB8StCqwlrrSkM= -go.opentelemetry.io/collector/semconv v0.66.0 h1:gz4fYzOVOt1EQCcOL6pbSmTRj93pZErjHD+H100pH+4= -go.opentelemetry.io/collector/semconv v0.66.0/go.mod h1:5o9yhOa+ABt7g2E5JABDxGZ1PQPbtfxrKNbYn+LOTXU= +go.opentelemetry.io/collector v0.68.0 h1:+Jk+wOP1flo8hK1ozAMDr7iN5U2gnmLu1UMp7LbNx1k= +go.opentelemetry.io/collector v0.68.0/go.mod h1:cxJgs+tqF/KAxlfT+Ev9gAahcSc3j9zdpN+sGSfeCGQ= +go.opentelemetry.io/collector/component v0.68.0 h1:QkzZb8mpFHcltR1AV/WTj2N3DFA9MLHDZ8PYGFuVngU= +go.opentelemetry.io/collector/component v0.68.0/go.mod h1:3826mXASuiwSwKoCKkRLSiIndvViflYiwg4QxV/Dw7g= +go.opentelemetry.io/collector/confmap v0.68.0 h1:TYXfjHDQct9R7RW8Cfe0BOi50o7R1bnC5rlwOxa+JP0= +go.opentelemetry.io/collector/confmap v0.68.0/go.mod h1:gvG/g1eSLVHGKbRmn91g7ukfLuBx36hbuMf/ecpSzlE= +go.opentelemetry.io/collector/consumer v0.68.0 h1:TWctBeEhNZz4Vtkk4hybQkJOowEKIBFMWT3iZlvJc24= +go.opentelemetry.io/collector/consumer v0.68.0/go.mod h1:t6eNCk7ii4nPN+yMC+Wc+7FWRAnzDU7z06/RqQ9E8R0= +go.opentelemetry.io/collector/exporter/loggingexporter v0.68.0 h1:bI83kCp6mQ09efJ90bEqQwIKWB+dQ2YPckaMAlfNm3I= +go.opentelemetry.io/collector/exporter/loggingexporter v0.68.0/go.mod h1:TX0T4dExxa338akVeJHF+YIY+IutDn5UpkKIIC2Zb/s= +go.opentelemetry.io/collector/exporter/otlpexporter v0.68.0 h1:JFE3ulfQwT++BMY2Fj9qjDZ8mGnHk1Y98E779DsFPa0= +go.opentelemetry.io/collector/exporter/otlpexporter v0.68.0/go.mod h1:ht2Iup34EnVSPkSYqCjmulB+GcuV9y30wkb0FiDmUmw= +go.opentelemetry.io/collector/extension/zpagesextension v0.68.0 h1:Y/EDCLKJO6nggpvqs1uKu+jrZCL4UD4TjCpM3MRM0pM= +go.opentelemetry.io/collector/featuregate v0.68.0 h1:weK0hx7VTDChvIXO7/BUUiJvOlQpB8wMCeUc0XNYJ/Y= +go.opentelemetry.io/collector/featuregate v0.68.0/go.mod h1:tewuFKJYalWBU0bmNKg++MC1ipINXUr6szYzOw2p1GI= +go.opentelemetry.io/collector/pdata v1.0.0-rc2 h1:sNWuA5wlrT578sv+DhADQ3DCRFG+5+H0D2xCHtQmnis= +go.opentelemetry.io/collector/pdata v1.0.0-rc2/go.mod h1:3gknzI1BqPVbEprOIbtaPQgPAYvjRf8kdkpGMJjv14E= +go.opentelemetry.io/collector/processor/batchprocessor v0.68.0 h1:DWPFd83KRrLp1zO7j/SB3jRK+pma8XjAIZS+k6z/YqU= +go.opentelemetry.io/collector/processor/batchprocessor v0.68.0/go.mod h1:4hGQ8EB2zkEASePuyA84RtQvCDgqSVRDbavqMROv3KY= +go.opentelemetry.io/collector/receiver/otlpreceiver v0.68.0 h1:E+MEOguE/oXwgcDL9WDE8hd1LOoWKWtHRENmUgfZpNU= +go.opentelemetry.io/collector/receiver/otlpreceiver v0.68.0/go.mod h1:gWzZ44PCS/RoPlpvWoEIYZDYz3FpCLFdZ6uXTOIV4Dw= +go.opentelemetry.io/collector/semconv v0.68.0 h1:DUDowH6l4OFlecQg8zyffTmUrhu3N9qwr3wtS9Oy6pE= +go.opentelemetry.io/collector/semconv v0.68.0/go.mod h1:5o9yhOa+ABt7g2E5JABDxGZ1PQPbtfxrKNbYn+LOTXU= go.opentelemetry.io/contrib v0.20.0 h1:ubFQUn0VCZ0gPwIoJfBJVpeBlyRMxu8Mm/huKWYd9p0= go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.4 h1:PRXhsszxTt5bbPriTjmaweWUsAnJYeWBhUMLRetUgBU= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.4/go.mod h1:05eWWy6ZWzmpeImD3UowLTB3VjDMU1yxQ+ENuVWDM3c= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.37.0 h1:+uFejS4DCfNH6d3xODVIGsdhzgzhh45p9gpbHQMbdZI= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.37.0/go.mod h1:HSmzQvagH8pS2/xrK7ScWsk0vAMtRTGbMFgInXCi8Tc= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.36.4 h1:aUEBEdCa6iamGzg6fuYxDA8ThxvOG240mAvWDU+XLio= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.36.4/go.mod h1:l2MdsbKTocpPS5nQZscqTR9jd8u96VYZdcpF8Sye7mA= -go.opentelemetry.io/contrib/propagators/b3 v1.11.1 h1:icQ6ttRV+r/2fnU46BIo/g/mPu6Rs5Ug8Rtohe3KqzI= -go.opentelemetry.io/contrib/propagators/b3 v1.11.1/go.mod h1:ECIveyMXgnl4gorxFcA7RYjJY/Ql9n20ubhbfDc3QfA= -go.opentelemetry.io/contrib/zpages v0.36.4 h1:Z2VK5WsDhWs9VwZ1p0TM5RyusTOgAQfdMMDDQPRnlmY= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.37.0 h1:yt2NKzK7Vyo6h0+X8BA4FpreZQTlVEIarnsBP/H5mzs= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.37.0/go.mod h1:+ARmXlUlc51J7sZeCBkBJNdHGySrdOzgzxp6VWRWM1U= +go.opentelemetry.io/contrib/propagators/b3 v1.12.0 h1:OtfTF8bneN8qTeo/j92kcvc0iDDm4bm/c3RzaUJfiu0= +go.opentelemetry.io/contrib/propagators/b3 v1.12.0/go.mod h1:0JDB4elfPUWGsCH/qhaMkDzP1l8nB0ANVx8zXuAYEwg= +go.opentelemetry.io/contrib/zpages v0.37.0 h1:lFEw7jgrW75kZ40gkXtywV0jTJt8q7w85oTLGc1IZBU= go.opentelemetry.io/otel v0.11.0/go.mod h1:G8UCk+KooF2HLkgo8RHX9epABH/aRGYET7gQOqBVdB0= go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= -go.opentelemetry.io/otel v1.11.1 h1:4WLLAmcfkmDk2ukNXJyq3/kiz/3UzCaYq6PskJsaou4= -go.opentelemetry.io/otel v1.11.1/go.mod h1:1nNhXBbWSD0nsL38H6btgnFN2k4i0sNLHNNMZMSbUGE= +go.opentelemetry.io/otel v1.11.2 h1:YBZcQlsVekzFsFbjygXMOXSs6pialIZxcjfO/mBDmR0= +go.opentelemetry.io/otel v1.11.2/go.mod h1:7p4EUV+AqgdlNV9gL97IgUZiVR3yrFXYo53f9BM3tRI= go.opentelemetry.io/otel/exporters/otlp v0.20.0 h1:PTNgq9MRmQqqJY0REVbZFvwkYOA85vbdQU/nVfxDyqg= go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM= go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.7.0 h1:7Yxsak1q4XrJ5y7XBnNwqWx9amMZvoidCctv62XOQ6Y= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.7.0 h1:cMDtmgJ5FpRvqx9x2Aq+Mm0O6K/zcUkH73SFz20TuBw= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.7.0 h1:MFAyzUPrTwLOwCi+cltN0ZVyy4phU41lwH+lyMyQTS4= -go.opentelemetry.io/otel/exporters/prometheus v0.33.0 h1:xXhPj7SLKWU5/Zd4Hxmd+X1C4jdmvc0Xy+kvjFx2z60= -go.opentelemetry.io/otel/exporters/prometheus v0.33.0/go.mod h1:ZSmYfKdYWEdSDBB4njLBIwTf4AU2JNsH3n2quVQDebI= +go.opentelemetry.io/otel/exporters/prometheus v0.34.0 h1:L5D+HxdaC/ORB47ribbTBbkXRZs9JzPjq0EoIOMWncM= +go.opentelemetry.io/otel/exporters/prometheus v0.34.0/go.mod h1:6gUoJyfhoWqF0tOLaY0ZmKgkQRcvEQx6p5rVlKHp3s4= go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= -go.opentelemetry.io/otel/metric v0.33.0 h1:xQAyl7uGEYvrLAiV/09iTJlp1pZnQ9Wl793qbVvED1E= -go.opentelemetry.io/otel/metric v0.33.0/go.mod h1:QlTYc+EnYNq/M2mNk1qDDMRLpqCOj2f/r5c7Fd5FYaI= +go.opentelemetry.io/otel/metric v0.34.0 h1:MCPoQxcg/26EuuJwpYN1mZTeCYAUGx8ABxfW07YkjP8= +go.opentelemetry.io/otel/metric v0.34.0/go.mod h1:ZFuI4yQGNCupurTXCwkeD/zHBt+C2bR7bw5JqUm/AP8= go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc= -go.opentelemetry.io/otel/sdk v1.11.1 h1:F7KmQgoHljhUuJyA+9BiU+EkJfyX5nVVF4wyzWZpKxs= -go.opentelemetry.io/otel/sdk v1.11.1/go.mod h1:/l3FE4SupHJ12TduVjUkZtlfFqDCQJlOlithYrdktys= +go.opentelemetry.io/otel/sdk v1.11.2 h1:GF4JoaEx7iihdMFu30sOyRx52HDHOkl9xQ8SMqNXUiU= +go.opentelemetry.io/otel/sdk v1.11.2/go.mod h1:wZ1WxImwpq+lVRo4vsmSOxdd+xwoUJ6rqyLc3SyX9aU= go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE= go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE= -go.opentelemetry.io/otel/sdk/metric v0.33.0 h1:oTqyWfksgKoJmbrs2q7O7ahkJzt+Ipekihf8vhpa9qo= -go.opentelemetry.io/otel/sdk/metric v0.33.0/go.mod h1:xdypMeA21JBOvjjzDUtD0kzIcHO/SPez+a8HOzJPGp0= +go.opentelemetry.io/otel/sdk/metric v0.34.0 h1:7ElxfQpXCFZlRTvVRTkcUvK8Gt5DC8QzmzsLsO2gdzo= +go.opentelemetry.io/otel/sdk/metric v0.34.0/go.mod h1:l4r16BIqiqPy5rd14kkxllPy/fOI4tWo1jkpD9Z3ffQ= go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= -go.opentelemetry.io/otel/trace v1.11.1 h1:ofxdnzsNrGBYXbP7t7zpUK281+go5rF7dvdIZXF8gdQ= -go.opentelemetry.io/otel/trace v1.11.1/go.mod h1:f/Q9G7vzk5u91PhbmKbg1Qn0rzH1LJ4vbPHFGkTPtOk= +go.opentelemetry.io/otel/trace v1.11.2 h1:Xf7hWSF2Glv0DE3MH7fBHvtpSBsjcBUe5MYAmZM/+y0= +go.opentelemetry.io/otel/trace v1.11.2/go.mod h1:4N+yC7QEz7TTsG9BSRLNAa63eg5E06ObSbKPmxQ/pKA= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.16.0 h1:WHzDWdXUvbc5bG2ObdrGfaNpQz7ft7QN9HHmJlbiB1E= go.starlark.net v0.0.0-20220816155156-cfacd8902214/go.mod h1:VZcBMdr3cT3PnBoWunTabuSEXwVAH+ZJ5zxfs3AdASk= @@ -1880,8 +1918,8 @@ go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/ go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= @@ -1889,8 +1927,8 @@ go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.14.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= -go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= +go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= go4.org/netipx v0.0.0-20220812043211-3cc044ffd68d h1:ggxwEf5eu0l8v+87VhX1czFh8zJul3hK16Gmruxn7hw= go4.org/netipx v0.0.0-20220812043211-3cc044ffd68d/go.mod h1:tgPU4N2u9RByaTN3NC2p9xOzyFpte4jYwsIIRF7XlSc= golang.org/x/arch v0.0.0-20190927153633-4e8777c89be4 h1:QlVATYS7JBoZMVaf+cNjb90WD/beKVHnIxFKT4QaHVI= @@ -1937,8 +1975,10 @@ golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.3.0 h1:a06MkbcxBrEFc0w0QIZWXrH/9cCX6KJyWbBOIwAn+7A= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= +golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -2058,8 +2098,8 @@ golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220923203811-8be639271d50/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU= -golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190130055435-99b60b757ec1/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -2177,6 +2217,7 @@ golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201018230417-eeed37f84f13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2230,15 +2271,15 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.3.0 h1:qoo4akIqOcDME5bhc/NgxUdovd6BSS2uMsVjB56q1xI= -golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= +golang.org/x/term v0.4.0 h1:O7UWfv5+A2qiuulQk30kVinPoMtoIPeVaKLEgLpVkvg= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -2251,8 +2292,8 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM= -golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -2346,8 +2387,8 @@ golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyj golang.org/x/tools v0.1.6-0.20210820212750-d4cc65f0b2ff/go.mod h1:YD9qOF0M9xpSpdWTBbzEl5e/RnCefISl8E5Noe10jFM= golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.3.0 h1:SrNbZl6ECOS1qFzgTdQfWXZM9XBkiA6tkFrH9YSTPHM= -golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= +golang.org/x/tools v0.5.0 h1:+bSpV5HIeWkuvgaMfI3UmKRThoTA5ODJTUd8T17NO+4= +golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -2657,6 +2698,8 @@ k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/ k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 h1:HNSDgDCrr/6Ly3WEGKZftiE7IY19Vz2GdbOCyI4qqhc= k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= mellium.im/sasl v0.2.1/go.mod h1:ROaEDLQNuf9vjKqE1SrAfnsobm2YKXT1gnN1uDp1PjQ= +mellium.im/sasl v0.3.1 h1:wE0LW6g7U83vhvxjC1IY8DnXM+EU095yeo8XClvCdfo= +mellium.im/sasl v0.3.1/go.mod h1:xm59PUYpZHhgQ9ZqoJ5QaCqzWMi8IeS49dhp6plPCzw= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= diff --git a/internal/tools/go.mod b/internal/tools/go.mod index 1251999de3251a..2f4b1f48517d23 100644 --- a/internal/tools/go.mod +++ b/internal/tools/go.mod @@ -9,7 +9,7 @@ require ( github.com/goware/modvendor v0.5.0 github.com/mgechev/revive v1.2.4 github.com/stormcat24/protodep v0.0.0-20210106175019-c95189bc461b - github.com/vektra/mockery/v2 v2.15.0 + github.com/vektra/mockery/v2 v2.16.0 golang.org/x/mobile v0.0.0-20201217150744-e6ae53a27f4f golang.org/x/perf v0.0.0-20210220033136-40a54f11e909 gotest.tools/gotestsum v1.8.2 @@ -43,6 +43,7 @@ require ( github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/charithe/durationcheck v0.0.9 // indirect github.com/chavacava/garif v0.0.0-20220630083739-93517212f375 // indirect + github.com/chigopher/pathlib v0.12.0 // indirect github.com/daixiang0/gci v0.6.3 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/denis-tingaikin/go-header v0.4.3 // indirect diff --git a/internal/tools/go.sum b/internal/tools/go.sum index 4dddac8d323303..622218f609cb22 100644 --- a/internal/tools/go.sum +++ b/internal/tools/go.sum @@ -105,6 +105,8 @@ github.com/charithe/durationcheck v0.0.9 h1:mPP4ucLrf/rKZiIG/a9IPXHGlh8p4CzgpyTy github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= github.com/chavacava/garif v0.0.0-20220630083739-93517212f375 h1:E7LT642ysztPWE0dfz43cWOvMiF42DyTRC+eZIaO4yI= github.com/chavacava/garif v0.0.0-20220630083739-93517212f375/go.mod h1:4m1Rv7xfuwWPNKXlThldNuJvutYM6J95wNuuVmn55To= +github.com/chigopher/pathlib v0.12.0 h1:1GM7fN/IwXXmOHbd1jkMqHD2wUhYqUvafgxTwmLT/q8= +github.com/chigopher/pathlib v0.12.0/go.mod h1:EJ5UtJ/sK8Nt6q3VWN+EwZLZ3g0afJiG8NegYiQQ/gQ= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= @@ -502,6 +504,7 @@ github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -586,6 +589,7 @@ github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4l github.com/sourcegraph/go-diff v0.6.1 h1:hmA1LzxW0n1c3Q4YbrFgg4P99GSnebYa3x8gr0HZqLQ= github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.4.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo= github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= @@ -653,8 +657,8 @@ github.com/ultraware/whitespace v0.0.5 h1:hh+/cpIcopyMYbZNVov9iSxvJU3OYQg78Sfaqz github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= github.com/uudashr/gocognit v1.0.6 h1:2Cgi6MweCsdB6kpcVQp7EW4U23iBFQWfTXiWlyp842Y= github.com/uudashr/gocognit v1.0.6/go.mod h1:nAIUuVBnYU7pcninia3BHOvQkpQCeO76Uscky5BOwcY= -github.com/vektra/mockery/v2 v2.15.0 h1:5Egbxoancm1hhkJUoAF+cf0FBzC9oxS28LL/ZKbC980= -github.com/vektra/mockery/v2 v2.15.0/go.mod h1:RswGtsqDbCR9j4UcgBQuAZY7OFxI+TgtHevc0gR0kCY= +github.com/vektra/mockery/v2 v2.16.0 h1:NMfQMZ4dKAHxR0rTHCt47HyJlBgFdYmrLlHhZIj2yeo= +github.com/vektra/mockery/v2 v2.16.0/go.mod h1:OZL0JSpvEWEHgyNr150zNbP1ktxr6yPZ/W82RHaTHl0= github.com/xanzy/ssh-agent v0.2.1 h1:TCbipTQL2JiiCprBWx9frJ2eJlCYT00NmctrHxVAr70= github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= @@ -690,6 +694,7 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= diff --git a/omnibus/config/projects/agent-binaries.rb b/omnibus/config/projects/agent-binaries.rb index b1c9eeb4e4e783..d4e543538d3b23 100644 --- a/omnibus/config/projects/agent-binaries.rb +++ b/omnibus/config/projects/agent-binaries.rb @@ -56,7 +56,6 @@ additional_sign_files [ - "#{Omnibus::Config.source_dir()}\\cf-root\\bin\\agent\\security-agent.exe", "#{Omnibus::Config.source_dir()}\\cf-root\\bin\\agent\\process-agent.exe", "#{Omnibus::Config.source_dir()}\\cf-root\\bin\\agent\\trace-agent.exe", "#{Omnibus::Config.source_dir()}\\cf-root\\bin\\agent\\dogstatsd.exe", diff --git a/omnibus/config/projects/agent.rb b/omnibus/config/projects/agent.rb index e46bca98da9763..38eb1b2bff132f 100644 --- a/omnibus/config/projects/agent.rb +++ b/omnibus/config/projects/agent.rb @@ -155,7 +155,6 @@ # Always sign everything for binaries zip # noinspection RubyLiteralArrayInspection additional_sign_files [ - "#{Omnibus::Config.source_dir()}\\cf-root\\bin\\agent\\security-agent.exe", "#{Omnibus::Config.source_dir()}\\cf-root\\bin\\agent\\process-agent.exe", "#{Omnibus::Config.source_dir()}\\cf-root\\bin\\agent\\trace-agent.exe", "#{Omnibus::Config.source_dir()}\\cf-root\\bin\\agent.exe", @@ -186,7 +185,6 @@ # noinspection RubyLiteralArrayInspection additional_sign_files_list = [ - "#{Omnibus::Config.source_dir()}\\datadog-agent\\src\\github.com\\DataDog\\datadog-agent\\bin\\agent\\security-agent.exe", "#{Omnibus::Config.source_dir()}\\datadog-agent\\src\\github.com\\DataDog\\datadog-agent\\bin\\agent\\process-agent.exe", "#{Omnibus::Config.source_dir()}\\datadog-agent\\src\\github.com\\DataDog\\datadog-agent\\bin\\agent\\trace-agent.exe", "#{Omnibus::Config.source_dir()}\\datadog-agent\\src\\github.com\\DataDog\\datadog-agent\\bin\\agent\\agent.exe", @@ -365,11 +363,9 @@ def generate_embedded_archive(version) # # For Windows build, files need to be stripped must be specified here. # - windows_symbol_stripping_file "#{Omnibus::Config.source_dir()}\\cf-root\\bin\\agent\\security-agent.exe" windows_symbol_stripping_file "#{Omnibus::Config.source_dir()}\\cf-root\\bin\\agent\\process-agent.exe" windows_symbol_stripping_file "#{Omnibus::Config.source_dir()}\\cf-root\\bin\\agent\\trace-agent.exe" windows_symbol_stripping_file "#{Omnibus::Config.source_dir()}\\cf-root\\bin\\agent.exe" - windows_symbol_stripping_file "#{Omnibus::Config.source_dir()}\\datadog-agent\\src\\github.com\\DataDog\\datadog-agent\\bin\\agent\\security-agent.exe" windows_symbol_stripping_file "#{Omnibus::Config.source_dir()}\\datadog-agent\\src\\github.com\\DataDog\\datadog-agent\\bin\\agent\\process-agent.exe" windows_symbol_stripping_file "#{Omnibus::Config.source_dir()}\\datadog-agent\\src\\github.com\\DataDog\\datadog-agent\\bin\\agent\\trace-agent.exe" windows_symbol_stripping_file "#{Omnibus::Config.source_dir()}\\datadog-agent\\src\\github.com\\DataDog\\datadog-agent\\bin\\agent\\agent.exe" diff --git a/omnibus/config/software/datadog-agent-finalize.rb b/omnibus/config/software/datadog-agent-finalize.rb index 2b3b1eda2a235e..e54a9e8ca0ea88 100644 --- a/omnibus/config/software/datadog-agent-finalize.rb +++ b/omnibus/config/software/datadog-agent-finalize.rb @@ -197,6 +197,7 @@ strip_exclude("*runtime-security*") strip_exclude("*dns*") strip_exclude("*oom-kill*") + strip_exclude("*tcp-queue-length*") end if osx? diff --git a/omnibus/config/software/datadog-agent-integrations-py2.rb b/omnibus/config/software/datadog-agent-integrations-py2.rb index 2bca760a1b45b8..9e449eda2f5486 100644 --- a/omnibus/config/software/datadog-agent-integrations-py2.rb +++ b/omnibus/config/software/datadog-agent-integrations-py2.rb @@ -119,6 +119,13 @@ python = "#{install_dir}/embedded/bin/python2" end + # If a python_mirror was set, it's passed through a pip config file so that we're not leaking the API key in the CI Output + # Else the pip config file so pip will act casually + pip_config_file = ENV['PIP_CONFIG_FILE'] + pre_build_env = { + "PIP_CONFIG_FILE" => "#{pip_config_file}" + } + # Install the checks along with their dependencies block do if windows? @@ -133,14 +140,15 @@ # Prepare the build env, these dependencies are only needed to build and # install the core integrations. # - command "#{pip} download --dest #{build_deps_dir} hatchling==0.25.1" - command "#{pip} download --dest #{build_deps_dir} setuptools==40.9.0" # Version from ./setuptools2.rb - command "#{pip} install wheel==0.34.1" - command "#{pip} install setuptools-scm==5.0.2" # Pin to the last version that supports Python 2 - command "#{pip} install pip-tools==5.4.0" + command "#{pip} download --dest #{build_deps_dir} hatchling==0.25.1", :env => pre_build_env + command "#{pip} download --dest #{build_deps_dir} setuptools==40.9.0", :env => pre_build_env # Version from ./setuptools2.rb + command "#{pip} install wheel==0.37.1", :env => pre_build_env # Pin to the last version that supports Python 2 + command "#{pip} install setuptools-scm==5.0.2", :env => pre_build_env # Pin to the last version that supports Python 2 + command "#{pip} install pip-tools==5.4.0", :env => pre_build_env uninstall_buildtime_deps = ['rtloader', 'click', 'first', 'pip-tools'] nix_build_env = { "PIP_FIND_LINKS" => "#{build_deps_dir}", + "PIP_CONFIG_FILE" => "#{pip_config_file}", "CFLAGS" => "-I#{install_dir}/embedded/include -I/opt/mqm/inc", "CXXFLAGS" => "-I#{install_dir}/embedded/include -I/opt/mqm/inc", "LDFLAGS" => "-L#{install_dir}/embedded/lib -L/opt/mqm/lib64 -L/opt/mqm/lib", @@ -149,6 +157,7 @@ } win_build_env = { "PIP_FIND_LINKS" => "#{build_deps_dir}", + "PIP_CONFIG_FILE" => "#{pip_config_file}", } # Some libraries (looking at you, aerospike-client-python) need EXT_CFLAGS instead of CFLAGS. specific_build_env = { @@ -244,8 +253,6 @@ if windows? command "#{python} -m pip wheel . --no-deps --no-index --wheel-dir=#{wheel_build_dir}", :env => win_build_env, :cwd => "#{windows_safe_path(project_dir)}\\datadog_checks_base" command "#{python} -m pip install datadog_checks_base --no-deps --no-index --find-links=#{wheel_build_dir}" - command "#{python} -m pip wheel . --no-deps --no-index --wheel-dir=#{wheel_build_dir}", :env => win_build_env, :cwd => "#{windows_safe_path(project_dir)}\\datadog_checks_downloader" - command "#{python} -m pip install datadog_checks_downloader --no-deps --no-index --find-links=#{wheel_build_dir}" command "#{python} -m piptools compile --generate-hashes --output-file #{windows_safe_path(install_dir)}\\#{agent_requirements_file} #{static_reqs_out_file} " \ "--pip-args \"--retries #{pip_max_retries} --timeout #{pip_timeout}\"", :env => win_build_env # Pip-compiling seperately each lib that needs a custom build installation @@ -256,8 +263,6 @@ else command "#{pip} wheel . --no-deps --no-index --wheel-dir=#{wheel_build_dir}", :env => nix_build_env, :cwd => "#{project_dir}/datadog_checks_base" command "#{pip} install datadog_checks_base --no-deps --no-index --find-links=#{wheel_build_dir}" - command "#{pip} wheel . --no-deps --no-index --wheel-dir=#{wheel_build_dir}", :env => nix_build_env, :cwd => "#{project_dir}/datadog_checks_downloader" - command "#{pip} install datadog_checks_downloader --no-deps --no-index --find-links=#{wheel_build_dir}" command "#{python} -m piptools compile --generate-hashes --output-file #{install_dir}/#{agent_requirements_file} #{static_reqs_out_file} " \ "--pip-args \"--retries #{pip_max_retries} --timeout #{pip_timeout}\"", :env => nix_build_env # Pip-compiling seperately each lib that needs a custom build installation diff --git a/omnibus/config/software/datadog-agent-integrations-py3.rb b/omnibus/config/software/datadog-agent-integrations-py3.rb index 6f2e1075de6914..fc2658dbb1a66a 100644 --- a/omnibus/config/software/datadog-agent-integrations-py3.rb +++ b/omnibus/config/software/datadog-agent-integrations-py3.rb @@ -124,6 +124,12 @@ python = "#{install_dir}/embedded/bin/python3" end + # If a python_mirror is set, it is set in a pip config file so that we do not leak the token in the CI output + pip_config_file = ENV['PIP_CONFIG_FILE'] + pre_build_env = { + "PIP_CONFIG_FILE" => "#{pip_config_file}" + } + # Install the checks along with their dependencies block do if windows? @@ -138,13 +144,14 @@ # Prepare the build env, these dependencies are only needed to build and # install the core integrations. # - command "#{pip} download --dest #{build_deps_dir} hatchling==0.25.1" - command "#{pip} download --dest #{build_deps_dir} setuptools==40.9.0" # Version from ./setuptools3.rb - command "#{pip} install wheel==0.34.1" - command "#{pip} install pip-tools==6.4.0" + command "#{pip} download --dest #{build_deps_dir} hatchling==0.25.1", :env => pre_build_env + command "#{pip} download --dest #{build_deps_dir} setuptools==40.9.0", :env => pre_build_env # Version from ./setuptools3.rb + command "#{pip} install wheel==0.38.4", :env => pre_build_env + command "#{pip} install pip-tools==6.4.0", :env => pre_build_env uninstall_buildtime_deps = ['rtloader', 'click', 'first', 'pip-tools'] nix_build_env = { "PIP_FIND_LINKS" => "#{build_deps_dir}", + "PIP_CONFIG_FILE" => "#{pip_config_file}", # Specify C99 standard explicitly to avoid issues while building some # wheels (eg. ddtrace) "CFLAGS" => "-I#{install_dir}/embedded/include -I/opt/mqm/inc", @@ -155,6 +162,7 @@ } win_build_env = { "PIP_FIND_LINKS" => "#{build_deps_dir}", + "PIP_CONFIG_FILE" => "#{pip_config_file}", } # Some libraries (looking at you, aerospike-client-python) need EXT_CFLAGS instead of CFLAGS. specific_build_env = { diff --git a/omnibus/config/software/datadog-agent.rb b/omnibus/config/software/datadog-agent.rb index 62406563e08f3b..9413ad936b20ff 100644 --- a/omnibus/config/software/datadog-agent.rb +++ b/omnibus/config/software/datadog-agent.rb @@ -151,12 +151,7 @@ end # Security agent - if windows? - platform = windows_arch_i386? ? "x86" : "x64" - command "invoke -e security-agent.build --major-version #{major_version_arg} --arch #{platform}", :env => env - - copy 'bin/security-agent/security-agent.exe', "#{Omnibus::Config.source_dir()}/datadog-agent/src/github.com/DataDog/datadog-agent/bin/agent" - else + unless windows? command "invoke -e security-agent.build --major-version #{major_version_arg}", :env => env copy 'bin/security-agent/security-agent', "#{install_dir}/embedded/bin" move 'bin/agent/dist/security-agent.yaml', "#{conf_dir}/security-agent.yaml.example" diff --git a/omnibus/config/software/datadog-buildpack-finalize.rb b/omnibus/config/software/datadog-buildpack-finalize.rb index c53e1c7af800cc..0e578bbba19a7d 100644 --- a/omnibus/config/software/datadog-buildpack-finalize.rb +++ b/omnibus/config/software/datadog-buildpack-finalize.rb @@ -35,7 +35,6 @@ copy "#{dsd_source_root}/agent/dogstatsd.exe", "#{cf_bin_root_bin}/agent" copy "#{cf_source_root}/agent/process-agent.exe", "#{cf_bin_root_bin}/agent" copy "#{cf_source_root}/agent/trace-agent.exe", "#{cf_bin_root_bin}/agent" - copy "#{cf_source_root}/agent/security-agent.exe", "#{cf_bin_root_bin}/agent" delete "#{install_dir}/bin/agent/agent.exe" end diff --git a/omnibus/config/software/datadog-cf-finalize.rb b/omnibus/config/software/datadog-cf-finalize.rb index 608f88934fbb02..e207784c5bd610 100644 --- a/omnibus/config/software/datadog-cf-finalize.rb +++ b/omnibus/config/software/datadog-cf-finalize.rb @@ -38,7 +38,6 @@ copy "#{cf_source_root}/agent/process-agent.exe", "#{cf_bin_root_bin}/agent" copy "#{cf_source_root}/agent/trace-agent.exe", "#{cf_bin_root_bin}/agent" - copy "#{cf_source_root}/agent/security-agent.exe", "#{cf_bin_root_bin}/agent" end end end diff --git a/omnibus/config/software/datadog-iot-agent.rb b/omnibus/config/software/datadog-iot-agent.rb index 9c54bd61df1bb6..b98f84f5b476c9 100644 --- a/omnibus/config/software/datadog-iot-agent.rb +++ b/omnibus/config/software/datadog-iot-agent.rb @@ -118,17 +118,6 @@ copy 'bin/trace-agent/trace-agent.exe', "#{Omnibus::Config.source_dir()}/datadog-iot-agent/src/github.com/DataDog/datadog-agent/bin/agent" end end - block do - # defer compilation step in a block to allow getting the project's build version, which is populated - # only once the software that the project takes its version from (i.e. `datadog-agent`) has finished building - if windows? - platform = windows_arch_i386? ? "x86" : "x64" - # Build the security-agent with the correct go version for windows - command "invoke -e security-agent.build --major-version #{major_version_arg} --arch #{platform}", :env => env - - copy 'bin/security-agent/security-agent.exe', "#{Omnibus::Config.source_dir()}/datadog-iot-agent/src/github.com/DataDog/datadog-agent/bin/agent" - end - end # The file below is touched by software builds that don't put anything in the installation # directory (libgcc right now) so that the git_cache gets updated let's remove it from the diff --git a/omnibus/config/software/pylint2.rb b/omnibus/config/software/pylint2.rb index 59ba020a90049e..564a5d992e9398 100644 --- a/omnibus/config/software/pylint2.rb +++ b/omnibus/config/software/pylint2.rb @@ -17,14 +17,21 @@ python2 = "#{install_dir}/embedded/bin/python2" end + # If a python_mirror was set, it's passed through a pip config file so that we're not leaking the API key in the CI Output + # Else the pip config file so pip will act casually + pip_config_file = ENV['PIP_CONFIG_FILE'] + build_env = { + "PIP_CONFIG_FILE" => "#{pip_config_file}" + } + # pin 2 dependencies of pylint: # - configparser: later versions (up to v3.7.1) are broken # - lazy-object-proxy 1.7.0 broken on python 2 https://github.com/ionelmc/python-lazy-object-proxy/issues/61 if windows? - command "#{python2} -m pip install configparser==3.5.0 lazy-object-proxy==1.6.0" - command "#{python2} -m pip install pylint==#{version}" + command "#{python2} -m pip install configparser==3.5.0 lazy-object-proxy==1.6.0", :env => build_env + command "#{python2} -m pip install pylint==#{version}", :env => build_env else - command "#{pip2} install configparser==3.5.0 lazy-object-proxy==1.6.0" - command "#{pip2} install pylint==#{version}" + command "#{pip2} install configparser==3.5.0 lazy-object-proxy==1.6.0", :env => build_env + command "#{pip2} install pylint==#{version}", :env => build_env end end diff --git a/omnibus/config/software/python3.rb b/omnibus/config/software/python3.rb index 8e076b0aeaaee4..a54967b3b3e762 100644 --- a/omnibus/config/software/python3.rb +++ b/omnibus/config/software/python3.rb @@ -1,7 +1,7 @@ name "python3" if ohai["platform"] != "windows" - default_version "3.8.14" + default_version "3.8.16" dependency "libxcrypt" dependency "libffi" @@ -15,7 +15,7 @@ dependency "libyaml" source :url => "https://python.org/ftp/python/#{version}/Python-#{version}.tgz", - :sha256 => "41f959c480c59211feb55d5a28851a56c7e22d02ef91035606ebb21011723c31" + :sha256 => "71ca9d935637ed2feb59e90a368361dc91eca472a90acb1d344a2e8178ccaf10" relative_path "Python-#{version}" @@ -66,19 +66,19 @@ end else - default_version "3.8.14-4e8b020" + default_version "3.8.16-2609a9b" dependency "vc_redist_14" if windows_arch_i386? dependency "vc_ucrt_redist" source :url => "https://dd-agent-omnibus.s3.amazonaws.com/python-windows-#{version}-x86.zip", - :sha256 => "5234E8506BCD00C99B044845298B8E8AE23078D9A69650D373053E9ADB006612".downcase + :sha256 => "07A1CD790D258AE925502E362701DED8B7362418766B89FE3CF53DB16D349A9C".downcase else # note that startring with 3.7.3 on Windows, the zip should be created without the built-in pip source :url => "https://dd-agent-omnibus.s3.amazonaws.com/python-windows-#{version}-x64.zip", - :sha256 => "ADE9A2CFD7EF66BB3488350A80C8EBFE1C322784CDC17E5A6783216F8EA89181".downcase + :sha256 => "E93C7A7290F422FDC09131B01DCE1F9FD94DC5273F26149FCDF8CC6B26454DE1".downcase end vcrt140_root = "#{Omnibus::Config.source_dir()}/vc_redist_140/expanded" diff --git a/omnibus/config/software/system-probe.rb b/omnibus/config/software/system-probe.rb index e1362ac4184e53..633f40c6fd698f 100644 --- a/omnibus/config/software/system-probe.rb +++ b/omnibus/config/software/system-probe.rb @@ -32,6 +32,7 @@ copy "#{ENV['SYSTEM_PROBE_BIN']}/runtime-security-syscall-wrapper.o", "#{install_dir}/embedded/share/system-probe/ebpf/" copy "#{ENV['SYSTEM_PROBE_BIN']}/runtime-security-offset-guesser.o", "#{install_dir}/embedded/share/system-probe/ebpf/" copy "#{ENV['SYSTEM_PROBE_BIN']}/oom-kill-co-re.o", "#{install_dir}/embedded/share/system-probe/ebpf/co-re/oom-kill.o" + copy "#{ENV['SYSTEM_PROBE_BIN']}/tcp-queue-length-co-re.o", "#{install_dir}/embedded/share/system-probe/ebpf/co-re/tcp-queue-length.o" copy "#{ENV['SYSTEM_PROBE_BIN']}/tracer.c", "#{install_dir}/embedded/share/system-probe/ebpf/runtime/" copy "#{ENV['SYSTEM_PROBE_BIN']}/http.c", "#{install_dir}/embedded/share/system-probe/ebpf/runtime/" copy "#{ENV['SYSTEM_PROBE_BIN']}/runtime-security.c", "#{install_dir}/embedded/share/system-probe/ebpf/runtime/" diff --git a/omnibus/resources/agent/msi/localization-en-us.wxl.erb b/omnibus/resources/agent/msi/localization-en-us.wxl.erb index 2e96fa0c740615..cb512822e2d53b 100644 --- a/omnibus/resources/agent/msi/localization-en-us.wxl.erb +++ b/omnibus/resources/agent/msi/localization-en-us.wxl.erb @@ -21,7 +21,7 @@ {\WixUI_Font_Normal_White}Select the way you want features to be installed. {\WixUI_Font_Title_White}Files in Use - WixUI_Font_Normal_White}Some files that need to be updated are currently in use. + {\WixUI_Font_Normal_White}Some files that need to be updated are currently in use. {\WixUI_Font_Title_White}Destination Folder {\WixUI_Font_Normal_White}Click Next to install to the default folder or click Change to choose another. diff --git a/omnibus/resources/agent/msi/source.wxs.erb b/omnibus/resources/agent/msi/source.wxs.erb index d9b6d66688cbce..ec5a09da306373 100644 --- a/omnibus/resources/agent/msi/source.wxs.erb +++ b/omnibus/resources/agent/msi/source.wxs.erb @@ -186,7 +186,7 @@ Directory="AGENT" Execute="immediate" Return="asyncNoWait" - ExeCommand=""[AGENT]ddtray.exe" "-launch-gui"" /> + ExeCommand=""[AGENT]ddtray.exe" "--launch-gui"" /> @@ -367,7 +367,7 @@ Name="Datadog Agent Manager" Description="Manage your Datadog Agent" Target="[AGENT]ddtray.exe" - Arguments= ""-launch-gui"" + Arguments= ""--launch-gui"" WorkingDirectory="AGENT"/> diff --git a/omnibus/resources/iot/msi/source.wxs.erb b/omnibus/resources/iot/msi/source.wxs.erb index 1218d4a75fb4b6..1e75203e026570 100644 --- a/omnibus/resources/iot/msi/source.wxs.erb +++ b/omnibus/resources/iot/msi/source.wxs.erb @@ -109,7 +109,7 @@ Directory="AGENT" Execute="immediate" Return="asyncNoWait" - ExeCommand=""[AGENT]ddtray.exe" "-launch-gui"" /> + ExeCommand=""[AGENT]ddtray.exe" "--launch-gui"" /> @@ -291,7 +291,7 @@ Name="Datadog Agent Manager" Description="Manage your Datadog Agent" Target="[AGENT]ddtray.exe" - Arguments= ""-launch-gui"" + Arguments= ""--launch-gui"" WorkingDirectory="AGENT"/> diff --git a/pkg/aggregator/aggregator.go b/pkg/aggregator/aggregator.go index 5283c3ef0dc61c..ccbd54f1d2c7f3 100644 --- a/pkg/aggregator/aggregator.go +++ b/pkg/aggregator/aggregator.go @@ -124,6 +124,10 @@ var ( aggregatorEventPlatformEventsErrors = expvar.Map{} aggregatorContainerLifecycleEvents = expvar.Int{} aggregatorContainerLifecycleEventsErrors = expvar.Int{} + aggregatorContainerImages = expvar.Int{} + aggregatorContainerImagesErrors = expvar.Int{} + aggregatorSBOM = expvar.Int{} + aggregatorSBOMErrors = expvar.Int{} tlmFlush = telemetry.NewCounter("aggregator", "flush", []string{"data_type", "state"}, "Number of metrics/service checks/events flushed") @@ -179,6 +183,10 @@ func init() { aggregatorExpvars.Set("EventPlatformEventsErrors", &aggregatorEventPlatformEventsErrors) aggregatorExpvars.Set("ContainerLifecycleEvents", &aggregatorContainerLifecycleEvents) aggregatorExpvars.Set("ContainerLifecycleEventsErrors", &aggregatorContainerLifecycleEventsErrors) + aggregatorExpvars.Set("ContainerImages", &aggregatorContainerImages) + aggregatorExpvars.Set("ContainerImagesErrors", &aggregatorContainerImagesErrors) + aggregatorExpvars.Set("SBOM", &aggregatorSBOM) + aggregatorExpvars.Set("SBOMErrors", &aggregatorSBOMErrors) contextsByMtypeMap := expvar.Map{} aggregatorDogstatsdContextsByMtype = make([]expvar.Int, int(metrics.NumMetricTypes)) @@ -212,6 +220,16 @@ type BufferedAggregator struct { contLcycleStopper chan struct{} contLcycleDequeueOnce sync.Once + contImageIn chan senderContainerImage + contImageBuffer chan senderContainerImage + contImageStopper chan struct{} + contImageDequeueOnce sync.Once + + sbomIn chan senderSBOM + sbomBuffer chan senderSBOM + sbomStopper chan struct{} + sbomDequeueOnce sync.Once + // metricSamplePool is a pool of slices of metric sample to avoid allocations. // Used by the Dogstatsd Batcher. MetricSamplePool *metrics.MetricSamplePool @@ -290,6 +308,14 @@ func NewBufferedAggregator(s serializer.MetricSerializer, eventPlatformForwarder contLcycleBuffer: make(chan senderContainerLifecycleEvent, bufferSize), contLcycleStopper: make(chan struct{}), + contImageIn: make(chan senderContainerImage, bufferSize), + contImageBuffer: make(chan senderContainerImage, bufferSize), + contImageStopper: make(chan struct{}), + + sbomIn: make(chan senderSBOM, bufferSize), + sbomBuffer: make(chan senderSBOM, bufferSize), + sbomStopper: make(chan struct{}), + tagsStore: tagsStore, checkSamplers: make(map[check.ID]*CheckSampler), flushInterval: flushInterval, @@ -785,6 +811,12 @@ func (agg *BufferedAggregator) run() { case event := <-agg.contLcycleIn: aggregatorContainerLifecycleEvents.Add(1) agg.handleContainerLifecycleEvent(event) + case event := <-agg.contImageIn: + aggregatorContainerImages.Add(1) + agg.handleContainerImage(event) + case event := <-agg.sbomIn: + aggregatorSBOM.Add(1) + agg.handleSBOM(event) } } } @@ -805,6 +837,38 @@ func (agg *BufferedAggregator) dequeueContainerLifecycleEvents() { } } +// dequeueContainerImages consumes buffered container image. +// It is blocking so it should be started in its own routine and only one instance should be started. +func (agg *BufferedAggregator) dequeueContainerImages() { + for { + select { + case event := <-agg.contImageBuffer: + if err := agg.serializer.SendContainerImage(event.msgs, agg.hostname); err != nil { + aggregatorContainerImagesErrors.Add(1) + log.Warnf("Error submitting container image data: %v", err) + } + case <-agg.contImageStopper: + return + } + } +} + +// dequeueSBOM consumes buffered SBOM. +// It is blocking so it should be started in its own routine and only one instance should be started. +func (agg *BufferedAggregator) dequeueSBOM() { + for { + select { + case event := <-agg.sbomBuffer: + if err := agg.serializer.SendSBOM(event.msgs, agg.hostname); err != nil { + aggregatorSBOMErrors.Add(1) + log.Warnf("Error submitting SBOM data: %v", err) + } + case <-agg.sbomStopper: + return + } + } +} + // handleContainerLifecycleEvent forwards container lifecycle events to the buffering channel. func (agg *BufferedAggregator) handleContainerLifecycleEvent(event senderContainerLifecycleEvent) { select { @@ -816,6 +880,28 @@ func (agg *BufferedAggregator) handleContainerLifecycleEvent(event senderContain } } +// handleContainerImage forwards container image to the buffering channel. +func (agg *BufferedAggregator) handleContainerImage(event senderContainerImage) { + select { + case agg.contImageBuffer <- event: + return + default: + aggregatorContainerImagesErrors.Add(1) + log.Warn("Container image channel is full") + } +} + +// handleSBOM forwards SBOM to the buffering channel. +func (agg *BufferedAggregator) handleSBOM(event senderSBOM) { + select { + case agg.sbomBuffer <- event: + return + default: + aggregatorSBOMErrors.Add(1) + log.Warn("SBOM channel is full") + } +} + // tags returns the list of tags that should be added to the agent telemetry metrics // Container agent tags may be missing in the first seconds after agent startup func (agg *BufferedAggregator) tags(withVersion bool) []string { diff --git a/pkg/aggregator/context_resolver.go b/pkg/aggregator/context_resolver.go index 9a75bcc34396ca..e8c0ff13daa32f 100644 --- a/pkg/aggregator/context_resolver.go +++ b/pkg/aggregator/context_resolver.go @@ -111,6 +111,36 @@ func (cr *contextResolver) release() { } } +func (c *contextResolver) sendOriginTelemetry(timestamp float64, series metrics.SerieSink, hostname string, constTags []string) { + // Within the contextResolver, each set of tags is represented by a unique pointer. + perOrigin := map[*tags.Entry]uint64{} + for _, cx := range c.contextsByKey { + perOrigin[cx.taggerTags]++ + } + + // We send metrics directly to the sink, instead of using + // pkg/telemetry for a few reasons: + // + // 1. We can send full set of tagger tags for higher level + // aggregations (pod, namespace, etc). pkg/telemetry only + // allows a fixed set of tags. + // 2. Avoid the need to manually create and delete tag values + // inside a telemetry Gauge. + // 3. Cardinality is automatically limited to origins verified by + // the tagger (although broken applications sending invalid + // origin id would coalesce to no origin, making this less + // useful for troubleshooting). + for entry, count := range perOrigin { + series.Append(&metrics.Serie{ + Name: "datadog.agent.aggregator.dogstatsd_contexts_by_origin", + Host: hostname, + Tags: tagset.NewCompositeTags(constTags, entry.Tags()), + MType: metrics.APIGaugeType, + Points: []metrics.Point{{Ts: timestamp, Value: float64(count)}}, + }) + } +} + // timestampContextResolver allows tracking and expiring contexts based on time. type timestampContextResolver struct { resolver *contextResolver @@ -177,6 +207,10 @@ func (cr *timestampContextResolver) expireContexts(expireTimestamp float64, keep return expiredContextKeys } +func (cr *timestampContextResolver) sendOriginTelemetry(timestamp float64, series metrics.SerieSink, hostname string, tags []string) { + cr.resolver.sendOriginTelemetry(timestamp, series, hostname, tags) +} + // countBasedContextResolver allows tracking and expiring contexts based on the number // of calls of `expireContexts`. type countBasedContextResolver struct { diff --git a/pkg/aggregator/context_resolver_test.go b/pkg/aggregator/context_resolver_test.go index 297b474d34d3d5..b5a97f5c6aa6d0 100644 --- a/pkg/aggregator/context_resolver_test.go +++ b/pkg/aggregator/context_resolver_test.go @@ -257,3 +257,56 @@ func testTagDeduplication(t *testing.T, store *tags.Store) { func TestTagDeduplication(t *testing.T) { testWithTagsStore(t, testTagDeduplication) } + +type mockSink []*metrics.Serie + +func (s *mockSink) Append(ms *metrics.Serie) { + *s = append(*s, ms) +} + +type mockSample struct { + name string + taggerTags []string + metricTags []string +} + +func (s *mockSample) GetName() string { return s.name } +func (s *mockSample) GetHost() string { return "noop" } +func (s *mockSample) GetMetricType() metrics.MetricType { return metrics.GaugeType } +func (s *mockSample) IsNoIndex() bool { return false } +func (s *mockSample) GetTags(tb, mb tagset.TagsAccumulator) { + tb.Append(s.taggerTags...) + mb.Append(s.metricTags...) +} + +func TestOriginTelemetry(t *testing.T) { + r := newContextResolver(tags.NewStore(true, "test")) + r.trackContext(&mockSample{"foo", []string{"foo"}, []string{"ook"}}) + r.trackContext(&mockSample{"foo", []string{"foo"}, []string{"eek"}}) + r.trackContext(&mockSample{"foo", []string{"bar"}, []string{"ook"}}) + r.trackContext(&mockSample{"bar", []string{"bar"}, []string{}}) + r.trackContext(&mockSample{"bar", []string{"baz"}, []string{}}) + sink := mockSink{} + ts := 1672835152.0 + r.sendOriginTelemetry(ts, &sink, "test", []string{"test"}) + + assert.ElementsMatch(t, sink, []*metrics.Serie{{ + Name: "datadog.agent.aggregator.dogstatsd_contexts_by_origin", + Host: "test", + Tags: tagset.NewCompositeTags([]string{"test"}, []string{"foo"}), + MType: metrics.APIGaugeType, + Points: []metrics.Point{{Ts: ts, Value: 2.0 }}, + }, { + Name: "datadog.agent.aggregator.dogstatsd_contexts_by_origin", + Host: "test", + Tags: tagset.NewCompositeTags([]string{"test"}, []string{"bar"}), + MType: metrics.APIGaugeType, + Points: []metrics.Point{{Ts: ts, Value: 2.0 }}, + }, { + Name: "datadog.agent.aggregator.dogstatsd_contexts_by_origin", + Host: "test", + Tags: tagset.NewCompositeTags([]string{"test"}, []string{"baz"}), + MType: metrics.APIGaugeType, + Points: []metrics.Point{{Ts: ts, Value: 1.0 }}, + }}) +} diff --git a/pkg/aggregator/demultiplexer_agent.go b/pkg/aggregator/demultiplexer_agent.go index f0e43925318c8a..559fadac433547 100644 --- a/pkg/aggregator/demultiplexer_agent.go +++ b/pkg/aggregator/demultiplexer_agent.go @@ -12,10 +12,12 @@ import ( "github.com/DataDog/datadog-agent/pkg/aggregator/internal/tags" "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/containerimage" "github.com/DataDog/datadog-agent/pkg/containerlifecycle" "github.com/DataDog/datadog-agent/pkg/epforwarder" "github.com/DataDog/datadog-agent/pkg/forwarder" "github.com/DataDog/datadog-agent/pkg/metrics" + "github.com/DataDog/datadog-agent/pkg/sbom" "github.com/DataDog/datadog-agent/pkg/serializer" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -61,6 +63,8 @@ type AgentDemultiplexerOptions struct { UseEventPlatformForwarder bool UseOrchestratorForwarder bool UseContainerLifecycleForwarder bool + UseContainerImageForwarder bool + UseSBOMForwarder bool FlushInterval time.Duration EnableNoAggregationPipeline bool @@ -83,6 +87,8 @@ func DefaultAgentDemultiplexerOptions(options *forwarder.Options) AgentDemultipl UseNoopEventPlatformForwarder: false, UseNoopOrchestratorForwarder: false, UseContainerLifecycleForwarder: false, + UseContainerImageForwarder: false, + UseSBOMForwarder: false, // the different agents/binaries enable it on a per-need basis EnableNoAggregationPipeline: false, } @@ -108,6 +114,8 @@ type forwarders struct { orchestrator forwarder.Forwarder eventPlatform epforwarder.EventPlatformForwarder containerLifecycle *forwarder.DefaultForwarder + containerImage *forwarder.DefaultForwarder + sbom *forwarder.DefaultForwarder } type dataOutputs struct { @@ -162,6 +170,18 @@ func initAgentDemultiplexer(options AgentDemultiplexerOptions, hostname string) containerLifecycleForwarder = containerlifecycle.NewForwarder() } + // setup the container image forwarder + var containerImageForwarder *forwarder.DefaultForwarder + if options.UseContainerImageForwarder { + containerImageForwarder = containerimage.NewForwarder() + } + + // setup the SBOM forwarder + var sbomForwarder *forwarder.DefaultForwarder + if options.UseSBOMForwarder { + sbomForwarder = sbom.NewForwarder() + } + var sharedForwarder forwarder.Forwarder if options.UseNoopForwarder { sharedForwarder = forwarder.NoopForwarder{} @@ -169,10 +189,15 @@ func initAgentDemultiplexer(options AgentDemultiplexerOptions, hostname string) sharedForwarder = forwarder.NewDefaultForwarder(options.SharedForwarderOptions) } + if config.Datadog.GetBool("telemetry.enabled") && config.Datadog.GetBool("telemetry.dogstatsd_origin") && !config.Datadog.GetBool("aggregator_use_tags_store") { + log.Warn("DogStatsD origin telemetry is not supported when aggregator_use_tags_store is disabled.") + config.Datadog.Set("telemetry.dogstatsd_origin", false) + } + // prepare the serializer // ---------------------- - sharedSerializer := serializer.NewSerializer(sharedForwarder, orchestratorForwarder, containerLifecycleForwarder) + sharedSerializer := serializer.NewSerializer(sharedForwarder, orchestratorForwarder, containerLifecycleForwarder, containerImageForwarder, sbomForwarder) // prepare the embedded aggregator // -- @@ -193,7 +218,7 @@ func initAgentDemultiplexer(options AgentDemultiplexerOptions, hostname string) for i := 0; i < statsdPipelinesCount; i++ { // the sampler tagsStore := tags.NewStore(config.Datadog.GetBool("aggregator_use_tags_store"), fmt.Sprintf("timesampler #%d", i)) - statsdSampler := NewTimeSampler(TimeSamplerID(i), bucketSize, tagsStore) + statsdSampler := NewTimeSampler(TimeSamplerID(i), bucketSize, tagsStore, agg.hostname) // its worker (process loop + flush/serialization mechanism) @@ -204,7 +229,7 @@ func initAgentDemultiplexer(options AgentDemultiplexerOptions, hostname string) var noAggWorker *noAggregationStreamWorker var noAggSerializer serializer.MetricSerializer if options.EnableNoAggregationPipeline { - noAggSerializer = serializer.NewSerializer(sharedForwarder, orchestratorForwarder, containerLifecycleForwarder) + noAggSerializer = serializer.NewSerializer(sharedForwarder, orchestratorForwarder, containerLifecycleForwarder, containerImageForwarder, sbomForwarder) noAggWorker = newNoAggregationStreamWorker( config.Datadog.GetInt("dogstatsd_no_aggregation_pipeline_batch_size"), noAggSerializer, @@ -230,6 +255,8 @@ func initAgentDemultiplexer(options AgentDemultiplexerOptions, hostname string) orchestrator: orchestratorForwarder, eventPlatform: eventPlatformForwarder, containerLifecycle: containerLifecycleForwarder, + containerImage: containerImageForwarder, + sbom: sbomForwarder, }, sharedSerializer: sharedSerializer, @@ -309,6 +336,24 @@ func (d *AgentDemultiplexer) Run() { log.Debug("not starting the container lifecycle forwarder") } + // container image forwarder + if d.forwarders.containerImage != nil { + if err := d.forwarders.containerImage.Start(); err != nil { + log.Errorf("error starting container image forwarder: %v", err) + } + } else { + log.Debug("not starting the container image forwarder") + } + + // sbom forwarder + if d.forwarders.sbom != nil { + if err := d.forwarders.sbom.Start(); err != nil { + log.Errorf("error starting SBOM forwarder: %v", err) + } + } else { + log.Debug("not starting the SBOM forwarder") + } + // shared forwarder if d.forwarders.shared != nil { d.forwarders.shared.Start() //nolint:errcheck @@ -322,6 +367,14 @@ func (d *AgentDemultiplexer) Run() { d.aggregator.contLcycleDequeueOnce.Do(func() { go d.aggregator.dequeueContainerLifecycleEvents() }) } + if d.options.UseContainerImageForwarder { + d.aggregator.contImageDequeueOnce.Do(func() { go d.aggregator.dequeueContainerImages() }) + } + + if d.options.UseSBOMForwarder { + d.aggregator.sbomDequeueOnce.Do(func() { go d.aggregator.dequeueSBOM() }) + } + for _, w := range d.statsd.workers { go w.run() } @@ -417,6 +470,14 @@ func (d *AgentDemultiplexer) Stop(flush bool) { d.dataOutputs.forwarders.containerLifecycle.Stop() d.dataOutputs.forwarders.containerLifecycle = nil } + if d.dataOutputs.forwarders.containerImage != nil { + d.dataOutputs.forwarders.containerImage.Stop() + d.dataOutputs.forwarders.containerImage = nil + } + if d.dataOutputs.forwarders.sbom != nil { + d.dataOutputs.forwarders.sbom.Stop() + d.dataOutputs.forwarders.sbom = nil + } if d.dataOutputs.forwarders.shared != nil { d.dataOutputs.forwarders.shared.Stop() d.dataOutputs.forwarders.shared = nil diff --git a/pkg/aggregator/demultiplexer_senders.go b/pkg/aggregator/demultiplexer_senders.go index 34ddcf68435a31..4fcbb3e3753dc9 100644 --- a/pkg/aggregator/demultiplexer_senders.go +++ b/pkg/aggregator/demultiplexer_senders.go @@ -74,6 +74,8 @@ func (s *senders) GetDefaultSender() (Sender, error) { s.agg.orchestratorManifestIn, s.agg.eventPlatformIn, s.agg.contLcycleIn, + s.agg.contImageIn, + s.agg.sbomIn, ) }) return s.defaultSender, nil diff --git a/pkg/aggregator/demultiplexer_serverless.go b/pkg/aggregator/demultiplexer_serverless.go index 80ae33cfec5161..d1b7ed8227a360 100644 --- a/pkg/aggregator/demultiplexer_serverless.go +++ b/pkg/aggregator/demultiplexer_serverless.go @@ -39,11 +39,11 @@ type ServerlessDemultiplexer struct { func InitAndStartServerlessDemultiplexer(domainResolvers map[string]resolver.DomainResolver, forwarderTimeout time.Duration) *ServerlessDemultiplexer { bufferSize := config.Datadog.GetInt("aggregator_buffer_size") forwarder := forwarder.NewSyncForwarder(domainResolvers, forwarderTimeout) - serializer := serializer.NewSerializer(forwarder, nil, nil) + serializer := serializer.NewSerializer(forwarder, nil, nil, nil, nil) metricSamplePool := metrics.NewMetricSamplePool(MetricSamplePoolBatchSize) tagsStore := tags.NewStore(config.Datadog.GetBool("aggregator_use_tags_store"), "timesampler") - statsdSampler := NewTimeSampler(TimeSamplerID(0), bucketSize, tagsStore) + statsdSampler := NewTimeSampler(TimeSamplerID(0), bucketSize, tagsStore, "") flushAndSerializeInParallel := NewFlushAndSerializeInParallel(config.Datadog) statsdWorker := newTimeSamplerWorker(statsdSampler, DefaultFlushInterval, bufferSize, metricSamplePool, flushAndSerializeInParallel, tagsStore) diff --git a/pkg/aggregator/mocksender/asserts.go b/pkg/aggregator/mocksender/asserts.go index d450d0f697ff93..0c3918127edf99 100644 --- a/pkg/aggregator/mocksender/asserts.go +++ b/pkg/aggregator/mocksender/asserts.go @@ -12,6 +12,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" + "github.com/DataDog/agent-payload/v5/contimage" + "github.com/DataDog/agent-payload/v5/sbom" "github.com/DataDog/datadog-agent/pkg/metrics" ) @@ -70,6 +72,16 @@ func (m *MockSender) AssertEventPlatformEvent(t *testing.T, expectedRawEvent str return m.Mock.AssertCalled(t, "EventPlatformEvent", expectedRawEvent, expectedEventType) } +// AssertContainerImage assert the expected event was emitted with the following values +func (m *MockSender) AssertContainerImage(t *testing.T, expectedContainerImages []contimage.ContainerImagePayload) bool { + return m.Mock.AssertCalled(t, "ContainerImage", expectedContainerImages) +} + +// AssertSBOM assert the expected event was emitted with the following values +func (m *MockSender) AssertSBOM(t *testing.T, expectedSBOM []sbom.SBOMPayload) bool { + return m.Mock.AssertCalled(t, "SBOM", expectedSBOM) +} + // AssertEventMissing assert the expectedEvent was never emitted with the following values: // AggregationKey, Priority, SourceTypeName, EventType, Host and a Ts range weighted with the parameter allowedDelta func (m *MockSender) AssertEventMissing(t *testing.T, expectedEvent metrics.Event, allowedDelta time.Duration) bool { diff --git a/pkg/aggregator/mocksender/mocked_methods.go b/pkg/aggregator/mocksender/mocked_methods.go index 85a463bf649b78..39828183497765 100644 --- a/pkg/aggregator/mocksender/mocked_methods.go +++ b/pkg/aggregator/mocksender/mocked_methods.go @@ -117,6 +117,16 @@ func (m *MockSender) ContainerLifecycleEvent(msgs []serializer.ContainerLifecycl m.Called(msgs) } +// ContainerImage submit container image messages +func (m *MockSender) ContainerImage(msgs []serializer.ContainerImageMessage) { + m.Called(msgs) +} + +// SBOM submit sbom data +func (m *MockSender) SBOM(msgs []serializer.SBOMMessage) { + m.Called(msgs) +} + // OrchestratorManifest submit orchestrator manifest messages func (m *MockSender) OrchestratorManifest(msgs []serializer.ProcessMessageBody, clusterID string) { m.Called(msgs, clusterID) diff --git a/pkg/aggregator/sender.go b/pkg/aggregator/sender.go index 8a4acd1e31d916..97b33c50f20eb5 100644 --- a/pkg/aggregator/sender.go +++ b/pkg/aggregator/sender.go @@ -41,6 +41,8 @@ type Sender interface { OrchestratorMetadata(msgs []serializer.ProcessMessageBody, clusterID string, nodeType int) OrchestratorManifest(msgs []serializer.ProcessMessageBody, clusterID string) ContainerLifecycleEvent(msgs []serializer.ContainerLifecycleMessage) + ContainerImage(msgs []serializer.ContainerImageMessage) + SBOM(msgs []serializer.SBOMMessage) } // RawSender interface to submit samples to aggregator directly @@ -64,6 +66,8 @@ type checkSender struct { orchestratorMetadataOut chan<- senderOrchestratorMetadata orchestratorManifestOut chan<- senderOrchestratorManifest contlcycleOut chan<- senderContainerLifecycleEvent + contimageOut chan<- senderContainerImage + sbomOut chan<- senderSBOM eventPlatformOut chan<- senderEventPlatformEvent checkTags []string service string @@ -109,6 +113,14 @@ type senderContainerLifecycleEvent struct { msgs []serializer.ContainerLifecycleMessage } +type senderContainerImage struct { + msgs []serializer.ContainerImageMessage +} + +type senderSBOM struct { + msgs []serializer.SBOMMessage +} + type senderOrchestratorManifest struct { msgs []serializer.ProcessMessageBody clusterID string @@ -130,6 +142,8 @@ func newCheckSender( orchestratorManifestOut chan<- senderOrchestratorManifest, eventPlatformOut chan<- senderEventPlatformEvent, contlcycleOut chan<- senderContainerLifecycleEvent, + contimageOut chan<- senderContainerImage, + sbomOut chan<- senderSBOM, ) *checkSender { return &checkSender{ id: id, @@ -143,6 +157,8 @@ func newCheckSender( orchestratorManifestOut: orchestratorManifestOut, eventPlatformOut: eventPlatformOut, contlcycleOut: contlcycleOut, + contimageOut: contimageOut, + sbomOut: sbomOut, } } @@ -434,10 +450,19 @@ func (s *checkSender) OrchestratorManifest(msgs []serializer.ProcessMessageBody, } s.orchestratorManifestOut <- om } + func (s *checkSender) ContainerLifecycleEvent(msgs []serializer.ContainerLifecycleMessage) { s.contlcycleOut <- senderContainerLifecycleEvent{msgs: msgs} } +func (s *checkSender) ContainerImage(msgs []serializer.ContainerImageMessage) { + s.contimageOut <- senderContainerImage{msgs: msgs} +} + +func (s *checkSender) SBOM(msgs []serializer.SBOMMessage) { + s.sbomOut <- senderSBOM{msgs: msgs} +} + func (sp *checkSenderPool) getSender(id check.ID) (Sender, error) { sp.m.Lock() defer sp.m.Unlock() @@ -463,6 +488,8 @@ func (sp *checkSenderPool) mkSender(id check.ID) (Sender, error) { sp.agg.orchestratorManifestIn, sp.agg.eventPlatformIn, sp.agg.contLcycleIn, + sp.agg.contImageIn, + sp.agg.sbomIn, ) sp.senders[id] = sender return sender, err diff --git a/pkg/aggregator/sender_test.go b/pkg/aggregator/sender_test.go index 462368ab56f5e5..1fa8e15fcc070e 100644 --- a/pkg/aggregator/sender_test.go +++ b/pkg/aggregator/sender_test.go @@ -28,6 +28,8 @@ type senderWithChans struct { orchestratorManifestChan chan senderOrchestratorManifest eventPlatformEventChan chan senderEventPlatformEvent contlcycleOut chan senderContainerLifecycleEvent + contimageOut chan senderContainerImage + sbomOut chan senderSBOM sender *checkSender } @@ -39,7 +41,9 @@ func initSender(id check.ID, defaultHostname string) (s senderWithChans) { s.orchestratorManifestChan = make(chan senderOrchestratorManifest, 10) s.eventPlatformEventChan = make(chan senderEventPlatformEvent, 10) s.contlcycleOut = make(chan senderContainerLifecycleEvent, 10) - s.sender = newCheckSender(id, defaultHostname, s.itemChan, s.serviceCheckChan, s.eventChan, s.orchestratorChan, s.orchestratorManifestChan, s.eventPlatformEventChan, s.contlcycleOut) + s.contimageOut = make(chan senderContainerImage, 10) + s.sbomOut = make(chan senderSBOM, 10) + s.sender = newCheckSender(id, defaultHostname, s.itemChan, s.serviceCheckChan, s.eventChan, s.orchestratorChan, s.orchestratorManifestChan, s.eventPlatformEventChan, s.contlcycleOut, s.contimageOut, s.sbomOut) return s } @@ -175,7 +179,9 @@ func TestGetAndSetSender(t *testing.T) { orchestratorManifestChan := make(chan senderOrchestratorManifest, 10) eventPlatformChan := make(chan senderEventPlatformEvent, 10) contlcycleChan := make(chan senderContainerLifecycleEvent, 10) - testCheckSender := newCheckSender(checkID1, "", itemChan, serviceCheckChan, eventChan, orchestratorChan, orchestratorManifestChan, eventPlatformChan, contlcycleChan) + contimageChan := make(chan senderContainerImage, 10) + sbomChan := make(chan senderSBOM, 10) + testCheckSender := newCheckSender(checkID1, "", itemChan, serviceCheckChan, eventChan, orchestratorChan, orchestratorManifestChan, eventPlatformChan, contlcycleChan, contimageChan, sbomChan) err := demux.SetSender(testCheckSender, checkID1) assert.Nil(t, err) diff --git a/pkg/aggregator/time_sampler.go b/pkg/aggregator/time_sampler.go index 61eaa78944ccf3..a1bf20f875a909 100644 --- a/pkg/aggregator/time_sampler.go +++ b/pkg/aggregator/time_sampler.go @@ -6,6 +6,8 @@ package aggregator import ( + "fmt" + "github.com/DataDog/datadog-agent/pkg/aggregator/ckey" "github.com/DataDog/datadog-agent/pkg/aggregator/internal/tags" "github.com/DataDog/datadog-agent/pkg/config" @@ -35,10 +37,12 @@ type TimeSampler struct { // id is a number to differentiate multiple time samplers // since we start running more than one with the demultiplexer introduction id TimeSamplerID + + hostname string } // NewTimeSampler returns a newly initialized TimeSampler -func NewTimeSampler(id TimeSamplerID, interval int64, cache *tags.Store) *TimeSampler { +func NewTimeSampler(id TimeSamplerID, interval int64, cache *tags.Store, hostname string) *TimeSampler { if interval == 0 { interval = bucketSize } @@ -52,6 +56,7 @@ func NewTimeSampler(id TimeSamplerID, interval int64, cache *tags.Store) *TimeSa counterLastSampledByContext: map[ckey.ContextKey]float64{}, sketchMap: make(sketchMap), id: id, + hostname: hostname, } return s @@ -229,6 +234,10 @@ func (s *TimeSampler) flush(timestamp float64, series metrics.SerieSink, sketche aggregatorDogstatsdContextsByMtype[i].Set(int64(count)) tlmDogstatsdContextsByMtype.Set(float64(count), mtype) } + + if config.Datadog.GetBool("telemetry.enabled") && config.Datadog.GetBool("telemetry.dogstatsd_origin") { + s.sendOriginTelemetry(timestamp, series) + } } // flushContextMetrics flushes the contextMetrics inside contextMetricsFlusher, handles its errors, @@ -275,3 +284,14 @@ func (s *TimeSampler) countersSampleZeroValue(timestamp int64, contextMetrics me } } } + +func (s *TimeSampler) sendOriginTelemetry(timestamp float64, series metrics.SerieSink) { + // If multiple samplers are used, this avoids the need to + // aggregate the stats agent-side, and allows us to see amount of + // tags duplication between shards. + tags := []string{ + fmt.Sprintf("sampler_id:%d", s.id), + } + + s.contextResolver.sendOriginTelemetry(timestamp, series, s.hostname, tags) +} diff --git a/pkg/aggregator/time_sampler_test.go b/pkg/aggregator/time_sampler_test.go index 5b63900aa0273f..9d7f2cb20a3d09 100644 --- a/pkg/aggregator/time_sampler_test.go +++ b/pkg/aggregator/time_sampler_test.go @@ -33,7 +33,7 @@ func generateSerieContextKey(serie *metrics.Serie) ckey.ContextKey { } func testTimeSampler() *TimeSampler { - sampler := NewTimeSampler(TimeSamplerID(0), 10, tags.NewStore(false, "test")) + sampler := NewTimeSampler(TimeSamplerID(0), 10, tags.NewStore(false, "test"), "host") return sampler } diff --git a/pkg/autodiscovery/autoconfig.go b/pkg/autodiscovery/autoconfig.go index e491952728d89b..e930bb4e66197b 100644 --- a/pkg/autodiscovery/autoconfig.go +++ b/pkg/autodiscovery/autoconfig.go @@ -21,8 +21,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/status/health" "github.com/DataDog/datadog-agent/pkg/tagger" - "github.com/DataDog/datadog-agent/pkg/util" - "github.com/DataDog/datadog-agent/pkg/util/containers" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/retry" ) @@ -75,12 +73,7 @@ func NewAutoConfig(scheduler *scheduler.MetaScheduler) *AutoConfig { // NewAutoConfigNoStart creates an AutoConfig instance. func NewAutoConfigNoStart(scheduler *scheduler.MetaScheduler) *AutoConfig { - var cfgMgr configManager - if util.CcaInAD() { - cfgMgr = newReconcilingConfigManager() - } else { - cfgMgr = newSimpleConfigManager() - } + cfgMgr := newReconcilingConfigManager() ac := &AutoConfig{ configPollers: make([]*configPoller, 0, 9), listenerCandidates: make(map[string]*listenerCandidate), @@ -423,18 +416,6 @@ func (ac *AutoConfig) processNewService(ctx context.Context, svc listeners.Servi } changes := ac.cfgMgr.processNewService(ADIdentifiers, svc) - - if !util.CcaInAD() { - // schedule a "service config" for logs-agent's benefit - changes.ScheduleConfig(integration.Config{ - LogsConfig: integration.Data{}, - ServiceID: svc.GetServiceID(), - TaggerEntity: svc.GetTaggerEntity(), - MetricsExcluded: svc.HasFilter(containers.MetricsFilter), - LogsExcluded: svc.HasFilter(containers.LogsFilter), - }) - } - ac.applyChanges(changes) } @@ -443,18 +424,6 @@ func (ac *AutoConfig) processDelService(ctx context.Context, svc listeners.Servi ac.store.removeServiceForEntity(svc.GetServiceID()) changes := ac.cfgMgr.processDelService(ctx, svc) ac.store.removeTagsHashForService(svc.GetTaggerEntity()) - - if !util.CcaInAD() { - // unschedule the "service config" - changes.UnscheduleConfig(integration.Config{ - LogsConfig: integration.Data{}, - ServiceID: svc.GetServiceID(), - TaggerEntity: svc.GetTaggerEntity(), - MetricsExcluded: svc.HasFilter(containers.MetricsFilter), - LogsExcluded: svc.HasFilter(containers.LogsFilter), - }) - } - ac.applyChanges(changes) } diff --git a/pkg/autodiscovery/common/types/prometheus.go b/pkg/autodiscovery/common/types/prometheus.go index fbe48e34a807df..4dcaa213c241e2 100644 --- a/pkg/autodiscovery/common/types/prometheus.go +++ b/pkg/autodiscovery/common/types/prometheus.go @@ -88,16 +88,18 @@ type OpenmetricsInstance struct { MinCollectInterval int `mapstructure:"min_collection_interval" yaml:"min_collection_interval,omitempty" json:"min_collection_interval,omitempty"` EmptyDefaultHost bool `mapstructure:"empty_default_hostname" yaml:"empty_default_hostname,omitempty" json:"empty_default_hostname,omitempty"` MaxReturnedMetrics int `mapstructure:"max_returned_metrics" yaml:"max_returned_metrics,omitempty" json:"max_returned_metrics,omitempty"` + TagByEndpoint *bool `mapstructure:"tag_by_endpoint" yaml:"tag_by_endpoint,omitempty" json:"tag_by_endpoint,omitempty"` // openmetrics v2 specific fields - OpenMetricsEndpoint string `mapstructure:"openmetrics_endpoint" yaml:"openmetrics_endpoint,omitempty" json:"openmetrics_endpoint,omitempty"` // Supersedes `prometheus_url` - ExcludeMetrics []string `mapstructure:"exclude_metrics" yaml:"exclude_metrics,omitempty" json:"exclude_metrics,omitempty"` // Supersedes `ignore_metrics` - RawPrefix string `mapstructure:"raw_metric_prefix" yaml:"raw_metric_prefix,omitempty" json:"raw_metric_prefix,omitempty"` // Supersedes `prometheus_metrics_prefix` - EnableHealthCheck *bool `mapstructure:"enable_health_service_check" yaml:"enable_health_service_check,omitempty" json:"enable_health_service_check,omitempty"` // Supersedes `health_service_check` - RenameLabels map[string]string `mapstructure:"rename_labels" yaml:"rename_labels,omitempty" json:"rename_labels,omitempty"` // Supersedes `labels_mapper` - ShareLabels map[string]ShareLabelsConfig `mapstructure:"share_labels" yaml:"share_labels,omitempty" json:"share_labels,omitempty"` // Supersedes `label_joins` - CollectHistogramBuckets *bool `mapstructure:"collect_histogram_buckets" yaml:"collect_histogram_buckets,omitempty" json:"collect_histogram_buckets,omitempty"` // Supersedes `send_histograms_buckets` - HistogramBucketsAsDistributions bool `mapstructure:"histogram_buckets_as_distributions" yaml:"histogram_buckets_as_distributions,omitempty" json:"histogram_buckets_as_distributions,omitempty"` // Supersedes `send_distribution_buckets` + OpenMetricsEndpoint string `mapstructure:"openmetrics_endpoint" yaml:"openmetrics_endpoint,omitempty" json:"openmetrics_endpoint,omitempty"` // Supersedes `prometheus_url` + ExcludeMetrics []string `mapstructure:"exclude_metrics" yaml:"exclude_metrics,omitempty" json:"exclude_metrics,omitempty"` // Supersedes `ignore_metrics` + RawPrefix string `mapstructure:"raw_metric_prefix" yaml:"raw_metric_prefix,omitempty" json:"raw_metric_prefix,omitempty"` // Supersedes `prometheus_metrics_prefix` + EnableHealthCheck *bool `mapstructure:"enable_health_service_check" yaml:"enable_health_service_check,omitempty" json:"enable_health_service_check,omitempty"` // Supersedes `health_service_check` + RenameLabels map[string]string `mapstructure:"rename_labels" yaml:"rename_labels,omitempty" json:"rename_labels,omitempty"` // Supersedes `labels_mapper` + ShareLabels map[string]ShareLabelsConfig `mapstructure:"share_labels" yaml:"share_labels,omitempty" json:"share_labels,omitempty"` // Supersedes `label_joins` + CollectHistogramBuckets *bool `mapstructure:"collect_histogram_buckets" yaml:"collect_histogram_buckets,omitempty" json:"collect_histogram_buckets,omitempty"` // Supersedes `send_histograms_buckets` + HistogramBucketsAsDistributions bool `mapstructure:"histogram_buckets_as_distributions" yaml:"histogram_buckets_as_distributions,omitempty" json:"histogram_buckets_as_distributions,omitempty"` // Supersedes `send_distribution_buckets` + CollectCountersWithDistributions bool `mapstructure:"collect_counters_with_distributions" yaml:"collect_counters_with_distributions,omitempty" json:"collect_counters_with_distributions,omitempty"` } // LabelJoinsConfig contains the label join configuration fields diff --git a/pkg/autodiscovery/common/utils/prometheus_apiserver.go b/pkg/autodiscovery/common/utils/prometheus_apiserver.go index ce50ecfa6388b8..a3cbc0c1aa039f 100644 --- a/pkg/autodiscovery/common/utils/prometheus_apiserver.go +++ b/pkg/autodiscovery/common/utils/prometheus_apiserver.go @@ -34,6 +34,13 @@ func ConfigsForService(pc *types.PrometheusCheck, svc *v1.Service) []integration return configs } + // Ignore headless services because we can't resolve the IP. + // Ref: https://kubernetes.io/docs/concepts/services-networking/service/#headless-services + if svc.Spec.ClusterIP == "None" { + log.Debugf("ignoring Prometheus-annotated headless service: %s", namespacedName) + return configs + } + instances, found := buildInstances(pc, svc.GetAnnotations(), namespacedName) if found { serviceID := apiserver.EntityForService(svc) diff --git a/pkg/autodiscovery/common/utils/prometheus_apiserver_test.go b/pkg/autodiscovery/common/utils/prometheus_apiserver_test.go index 0ef1dc1da87c46..c3924f15258027 100644 --- a/pkg/autodiscovery/common/utils/prometheus_apiserver_test.go +++ b/pkg/autodiscovery/common/utils/prometheus_apiserver_test.go @@ -201,6 +201,23 @@ func TestConfigsForService(t *testing.T) { }, }, }, + { + name: "headless service is ignored", + check: types.DefaultPrometheusCheck, + version: 1, + svc: &corev1.Service{ + ObjectMeta: metav1.ObjectMeta{ + UID: k8stypes.UID("foo-uid"), + Name: "svc-foo", + Annotations: map[string]string{"prometheus.io/scrape": "true"}, + Namespace: "ns", + }, + Spec: corev1.ServiceSpec{ + ClusterIP: "None", + }, + }, + want: nil, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { diff --git a/pkg/autodiscovery/configmgr_test.go b/pkg/autodiscovery/configmgr_test.go index bdbf138eb11ce3..034cb45673200c 100644 --- a/pkg/autodiscovery/configmgr_test.go +++ b/pkg/autodiscovery/configmgr_test.go @@ -414,10 +414,6 @@ func (suite *ConfigManagerSuite) TestFuzz() { }) } -func TestSimpleConfigManagement(t *testing.T) { - suite.Run(t, &ConfigManagerSuite{factory: newSimpleConfigManager}) -} - type ReconcilingConfigManagerSuite struct { ConfigManagerSuite // include all ConfigManager tests, and more.. } diff --git a/pkg/autodiscovery/configresolver/configresolver.go b/pkg/autodiscovery/configresolver/configresolver.go index f36c9c0a21be6e..2977607e3f0320 100644 --- a/pkg/autodiscovery/configresolver/configresolver.go +++ b/pkg/autodiscovery/configresolver/configresolver.go @@ -20,7 +20,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" "github.com/DataDog/datadog-agent/pkg/autodiscovery/listeners" "github.com/DataDog/datadog-agent/pkg/autodiscovery/providers/names" - "github.com/DataDog/datadog-agent/pkg/util" "github.com/DataDog/datadog-agent/pkg/util/containers" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -84,30 +83,6 @@ func Resolve(tpl integration.Config, svc listeners.Service) (integration.Config, copy(resolvedConfig.InitConfig, tpl.InitConfig) copy(resolvedConfig.Instances, tpl.Instances) - // Ignore the config from file if it's overridden by an empty config or by - // a different config for the same check. If - // `logs_config.cca_in_ad` is set, this is not necessary as the - // relevant services will filter out these configs. - if !util.CcaInAD() { - if tpl.Provider == names.File && svc.GetCheckNames(ctx) != nil { - checkNames := svc.GetCheckNames(ctx) - lenCheckNames := len(checkNames) - if lenCheckNames == 0 || (lenCheckNames == 1 && checkNames[0] == "") { - // Empty check names on k8s annotations or container labels override the check config from file - // Used to deactivate unneeded OOTB autodiscovery checks defined in files - // The checkNames slice is considered empty also if it contains one single empty string - return resolvedConfig, fmt.Errorf("ignoring config from %s: another empty config is defined with the same AD identifier: %v", tpl.Source, tpl.ADIdentifiers) - } - for _, checkName := range checkNames { - if tpl.Name == checkName { - // Ignore config from file when the same check is activated on the same service via other config providers (k8s annotations or container labels) - return resolvedConfig, fmt.Errorf("ignoring config from %s: another config is defined for the check %s", tpl.Source, tpl.Name) - } - } - - } - } - if resolvedConfig.IsCheckConfig() && !svc.IsReady(ctx) { return resolvedConfig, errors.New("unable to resolve, service not ready") } diff --git a/pkg/autodiscovery/listeners/container.go b/pkg/autodiscovery/listeners/container.go index 9aca9e2d3caf7f..cc7fdc502d20be 100644 --- a/pkg/autodiscovery/listeners/container.go +++ b/pkg/autodiscovery/listeners/container.go @@ -189,7 +189,7 @@ func computeContainerServiceIDs(entity string, image string, labels map[string]s ids := []string{entity} // Add Image names (long then short if different) - long, short, _, err := containers.SplitImageName(image) + long, _, short, _, err := containers.SplitImageName(image) if err != nil { log.Warnf("error while spliting image name: %s", err) } diff --git a/pkg/autodiscovery/listeners/service.go b/pkg/autodiscovery/listeners/service.go index e0d40ceb71c958..05e112636b99dd 100644 --- a/pkg/autodiscovery/listeners/service.go +++ b/pkg/autodiscovery/listeners/service.go @@ -14,7 +14,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/autodiscovery/providers/names" "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/tagger" - "github.com/DataDog/datadog-agent/pkg/util" "github.com/DataDog/datadog-agent/pkg/util/containers" "github.com/DataDog/datadog-agent/pkg/util/kubernetes/kubelet" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -122,18 +121,10 @@ func (s *service) HasFilter(filter containers.FilterType) bool { // FilterTemplates implements Service#FilterTemplates. func (s *service) FilterTemplates(configs map[string]integration.Config) { - if !util.CcaInAD() { - // only applies when `logs_config.cca_in_ad` is set - return - } - // These two overrides are handled in - // pkg/autodiscovery/configresolver/configresolver.go when - // logs_config.cca_in_ad is false + // pkg/autodiscovery/configresolver/configresolver.go s.filterTemplatesEmptyOverrides(configs) s.filterTemplatesOverriddenChecks(configs) - - // this is handled in the logs agent when logs_config.cca_in_ad is false s.filterTemplatesContainerCollectAll(configs) } diff --git a/pkg/autodiscovery/listeners/types.go b/pkg/autodiscovery/listeners/types.go index 9010f5604c231f..a91f075c81ef1a 100644 --- a/pkg/autodiscovery/listeners/types.go +++ b/pkg/autodiscovery/listeners/types.go @@ -44,8 +44,6 @@ type Service interface { // with the full set of templates matching this service. It must not rely // on any non-static information except the given configs, and it must not // modify the configs in the map. - // - // This method is only called with `logs_config.cca_in_ad` is set. FilterTemplates(map[string]integration.Config) } diff --git a/pkg/autodiscovery/providers/clusterchecks.go b/pkg/autodiscovery/providers/clusterchecks.go index f1536163e1ccc3..e7b99f98e6ae33 100644 --- a/pkg/autodiscovery/providers/clusterchecks.go +++ b/pkg/autodiscovery/providers/clusterchecks.go @@ -123,7 +123,7 @@ func (c *ClusterChecksConfigProvider) IsUpToDate(ctx context.Context) (bool, err if reply.IsUpToDate { log.Tracef("Up to date with change %d", c.lastChange) } else { - log.Tracef("Not up to date with change %d", c.lastChange) + log.Infof("Not up to date with change %d", c.lastChange) } return reply.IsUpToDate, nil } diff --git a/pkg/autodiscovery/providers/config_reader.go b/pkg/autodiscovery/providers/config_reader.go index f6db7a5f5c851d..756324c94df786 100644 --- a/pkg/autodiscovery/providers/config_reader.go +++ b/pkg/autodiscovery/providers/config_reader.go @@ -6,7 +6,6 @@ package providers import ( - "context" "errors" "fmt" "os" @@ -381,10 +380,10 @@ func GetIntegrationConfigFromFile(name, fpath string) (integration.Config, error // at this point the Yaml was already parsed, no need to check the error rawConf, _ := yaml.Marshal(instance) dataConf := (integration.Data)(rawConf) - if fargate.IsFargateInstance(context.TODO()) { + if fargate.IsFargateInstance() { // In Fargate, since no host tags are applied in the backend, // add the configured DD_TAGS/DD_EXTRA_TAGS to the instance tags. - tags := config.GetConfiguredTags(false) + tags := config.GetGlobalConfiguredTags(false) err := dataConf.MergeAdditionalTags(tags) if err != nil { log.Debugf("Could not add agent-level tags to instance of %v: %v", fpath, err) diff --git a/pkg/autodiscovery/providers/container.go b/pkg/autodiscovery/providers/container.go index c3c262c6cb13b2..903b8c8cd805c1 100644 --- a/pkg/autodiscovery/providers/container.go +++ b/pkg/autodiscovery/providers/container.go @@ -10,201 +10,308 @@ package providers import ( "context" + "fmt" + "strings" "sync" - "time" "github.com/DataDog/datadog-agent/pkg/autodiscovery/common/utils" "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" "github.com/DataDog/datadog-agent/pkg/autodiscovery/providers/names" "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/status/health" - "github.com/DataDog/datadog-agent/pkg/util" "github.com/DataDog/datadog-agent/pkg/util/containers" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/workloadmeta" ) -const ( - delayDuration = 5 * time.Second -) - -// ContainerConfigProvider implements the ConfigProvider interface for container labels. +// ContainerConfigProvider implements the ConfigProvider interface for both pods and containers type ContainerConfigProvider struct { - sync.RWMutex workloadmetaStore workloadmeta.Store - upToDate bool - streaming bool - containerCache map[string]*workloadmeta.Container - containerFilter *containers.Filter - once sync.Once + configErrors map[string]ErrorMsgSet // map[entity name]ErrorMsgSet + configCache map[string]map[string]integration.Config // map[entity name]map[config digest]integration.Config + mu sync.RWMutex } -// NewContainerConfigProvider creates a new ContainerConfigProvider +// NewContainerConfigProvider returns a new ConfigProvider subscribed to both container +// and pods func NewContainerConfigProvider(*config.ConfigurationProviders) (ConfigProvider, error) { - containerFilter, err := containers.NewAutodiscoveryFilter(containers.GlobalFilter) - if err != nil { - log.Warnf("Can't get container include/exclude filter, no filtering will be applied: %v", err) - } - return &ContainerConfigProvider{ workloadmetaStore: workloadmeta.GetGlobalStore(), - containerCache: make(map[string]*workloadmeta.Container), - containerFilter: containerFilter, + configCache: make(map[string]map[string]integration.Config), + configErrors: make(map[string]ErrorMsgSet), }, nil } // String returns a string representation of the ContainerConfigProvider -func (d *ContainerConfigProvider) String() string { - return names.Container +func (k *ContainerConfigProvider) String() string { + return names.KubeContainer } -// Collect retrieves all running containers and extract AD templates from their labels. -func (d *ContainerConfigProvider) Collect(ctx context.Context) ([]integration.Config, error) { - d.once.Do(func() { - ch := make(chan struct{}) - go d.listen(ch) - <-ch - }) - - d.Lock() - d.upToDate = true - d.Unlock() - - d.RLock() - defer d.RUnlock() - return d.generateConfigs() -} - -// listen, closing the given channel after the initial set of events are received -func (d *ContainerConfigProvider) listen(ch chan struct{}) { - d.Lock() - d.streaming = true - health := health.RegisterLiveness("ad-containerprovider") - defer func() { - err := health.Deregister() - if err != nil { - log.Warnf("error de-registering health check: %s", err) - } - }() - d.Unlock() +// Stream starts listening to workloadmeta to generate configs as they come +// instead of relying on a periodic call to Collect. +func (k *ContainerConfigProvider) Stream(ctx context.Context) <-chan integration.ConfigChanges { + const name = "ad-kubecontainerprovider" - var ranOnce bool + // outCh must be unbuffered. processing of workloadmeta events must not + // proceed until the config is processed by autodiscovery, as configs + // need to be generated before any associated services. + outCh := make(chan integration.ConfigChanges) - workloadmetaEventsChannel := d.workloadmetaStore.Subscribe("ad-containerprovider", workloadmeta.NormalPriority, workloadmeta.NewFilter( - []workloadmeta.Kind{workloadmeta.KindContainer}, - workloadmeta.SourceRuntime, + inCh := k.workloadmetaStore.Subscribe(name, workloadmeta.ConfigProviderPriority, workloadmeta.NewFilter( + []workloadmeta.Kind{workloadmeta.KindKubernetesPod, workloadmeta.KindContainer}, + workloadmeta.SourceAll, workloadmeta.EventTypeAll, )) - for { - select { - case evBundle, ok := <-workloadmetaEventsChannel: - if !ok { - return - } + go func() { + for { + select { + case <-ctx.Done(): + k.workloadmetaStore.Unsubscribe(inCh) - d.processEvents(evBundle) - - if !ranOnce { - close(ch) - ranOnce = true - } + case evBundle, ok := <-inCh: + if !ok { + return + } - case <-health.C: + // send changes even when they're empty, as we + // need to signal that an event has been + // received, for flow control reasons + outCh <- k.processEvents(evBundle) + close(evBundle.Ch) + } } - } + }() + + return outCh } -func (d *ContainerConfigProvider) processEvents(eventBundle workloadmeta.EventBundle) { - close(eventBundle.Ch) +func (k *ContainerConfigProvider) processEvents(evBundle workloadmeta.EventBundle) integration.ConfigChanges { + k.mu.Lock() + defer k.mu.Unlock() - for _, event := range eventBundle.Events { - containerID := event.Entity.GetID().ID + changes := integration.ConfigChanges{} + + for _, event := range evBundle.Events { + entityName := buildEntityName(event.Entity) switch event.Type { case workloadmeta.EventTypeSet: - container := event.Entity.(*workloadmeta.Container) - - d.RLock() - _, containerSeen := d.containerCache[container.ID] - d.RUnlock() - if containerSeen { - // Container restarted with the same ID within 5 seconds. - // This delay is needed because of the delay introduced in the - // EventTypeUnset case. - time.AfterFunc(delayDuration, func() { - d.addContainer(containerID, container) - }) + configs, err := k.generateConfig(event.Entity) + + if err != nil { + k.configErrors[entityName] = err } else { - d.addContainer(containerID, container) + delete(k.configErrors, entityName) + } + + configCache, ok := k.configCache[entityName] + if !ok { + configCache = make(map[string]integration.Config) + k.configCache[entityName] = configCache + } + + configsToUnschedule := make(map[string]integration.Config) + for digest, config := range configCache { + configsToUnschedule[digest] = config + } + + for _, config := range configs { + digest := config.Digest() + if _, ok := configCache[digest]; ok { + delete(configsToUnschedule, digest) + } else { + configCache[digest] = config + changes.ScheduleConfig(config) + } + } + + for oldDigest, oldConfig := range configsToUnschedule { + delete(configCache, oldDigest) + changes.UnscheduleConfig(oldConfig) } case workloadmeta.EventTypeUnset: - // delay for short-lived detection - time.AfterFunc(delayDuration, func() { - d.deleteContainer(containerID) - }) + oldConfigs, found := k.configCache[entityName] + if !found { + log.Debugf("entity %q removed from workloadmeta store but not found in cache. skipping", entityName) + continue + } + + for _, oldConfig := range oldConfigs { + changes.UnscheduleConfig(oldConfig) + } + + delete(k.configCache, entityName) + delete(k.configErrors, entityName) default: log.Errorf("cannot handle event of type %d", event.Type) } } + return changes } -// IsUpToDate checks whether we have new containers to parse, based on events -// received by the listen goroutine. If listening fails, we fallback to -// collecting everytime. -func (d *ContainerConfigProvider) IsUpToDate(ctx context.Context) (bool, error) { - d.RLock() - defer d.RUnlock() - return d.streaming && d.upToDate, nil -} +func (k *ContainerConfigProvider) generateConfig(e workloadmeta.Entity) ([]integration.Config, ErrorMsgSet) { + var ( + errMsgSet ErrorMsgSet + errs []error + configs []integration.Config + ) + + switch entity := e.(type) { + case *workloadmeta.Container: + // kubernetes containers need to be handled together with their + // pod, so they generate a single []integration.Config. + // otherwise, it's possible for a container that belongs to an + // AD-annotated pod to briefly be scheduled without its + // annotations. + if !findKubernetesInLabels(entity.Labels) { + configs, errs = k.generateContainerConfig(entity) + + containerID := entity.ID + containerEntityName := containers.BuildEntityName(string(entity.Runtime), containerID) + configs = utils.AddContainerCollectAllConfigs(configs, containerEntityName) + + for idx := range configs { + configs[idx].Source = names.Container + ":" + containerEntityName + } + } -// addLabels updates the cache for a given container -func (d *ContainerConfigProvider) addContainer(containerID string, container *workloadmeta.Container) { - d.Lock() - defer d.Unlock() - d.containerCache[containerID] = container - d.upToDate = false -} + case *workloadmeta.KubernetesPod: + containerIdentifiers := map[string]struct{}{} + containerNames := map[string]struct{}{} + for _, podContainer := range entity.Containers { + container, err := k.workloadmetaStore.GetContainer(podContainer.ID) + if err != nil { + log.Debugf("Pod %q has reference to non-existing container %q", entity.Name, podContainer.ID) + continue + } -func (d *ContainerConfigProvider) deleteContainer(containerID string) { - d.Lock() - defer d.Unlock() - delete(d.containerCache, containerID) - d.upToDate = false -} + var ( + c []integration.Config + errors []error + ) -func (d *ContainerConfigProvider) generateConfigs() ([]integration.Config, error) { - var configs []integration.Config - for containerID, container := range d.containerCache { - containerEntityName := containers.BuildEntityName(string(container.Runtime), containerID) - c, errors := utils.ExtractTemplatesFromContainerLabels(containerEntityName, container.Labels) + c, errors = k.generateContainerConfig(container) + configs = append(configs, c...) + errs = append(errs, errors...) - for _, err := range errors { - log.Errorf("Can't parse template for container %s: %s", containerID, err) - } + adIdentifier := podContainer.Name + if customADID, found := utils.ExtractCheckIDFromPodAnnotations(entity.Annotations, podContainer.Name); found { + adIdentifier = customADID + } + + containerEntity := containers.BuildEntityName(string(container.Runtime), container.ID) + c, errors = utils.ExtractTemplatesFromPodAnnotations( + containerEntity, + entity.Annotations, + adIdentifier, + ) + + // container_collect_all configs must be added after + // configs generated from annotations, since services + // are reconciled against configs one-by-one instead of + // as a set, so if a container_collect_all config + // appears before an annotation one, it'll cause a logs + // config to be scheduled as container_collect_all, + // unscheduled, and then re-scheduled correctly. + c = utils.AddContainerCollectAllConfigs(c, containerEntity) + + if len(errors) > 0 { + errs = append(errs, errors...) + if len(c) == 0 { + // Only got errors, no valid configs so + // let's move on to the next container. + continue + } + } + + containerIdentifiers[adIdentifier] = struct{}{} + containerNames[podContainer.Name] = struct{}{} + + for idx := range c { + c[idx].Source = names.Container + ":" + containerEntity + } - if util.CcaInAD() { - c = utils.AddContainerCollectAllConfigs(c, containerEntityName) + configs = append(configs, c...) } - for idx := range c { - c[idx].Source = names.Container + ":" + containerEntityName + errs = append(errs, utils.ValidateAnnotationsMatching( + entity.Annotations, + containerIdentifiers, + containerNames)...) + + default: + log.Errorf("cannot handle entity of kind %s", e.GetID().Kind) + } + + if len(errs) > 0 { + errMsgSet = make(ErrorMsgSet) + for _, err := range errs { + errMsgSet[err.Error()] = struct{}{} } + } - configs = append(configs, c...) + return configs, errMsgSet +} + +func (k *ContainerConfigProvider) generateContainerConfig(container *workloadmeta.Container) ([]integration.Config, []error) { + var ( + errs []error + configs []integration.Config + ) + + containerID := container.ID + containerEntityName := containers.BuildEntityName(string(container.Runtime), containerID) + configs, errs = utils.ExtractTemplatesFromContainerLabels(containerEntityName, container.Labels) + + return configs, errs +} + +// GetConfigErrors returns a map of configuration errors for each namespace/pod +func (k *ContainerConfigProvider) GetConfigErrors() map[string]ErrorMsgSet { + k.mu.RLock() + defer k.mu.RUnlock() + + errors := make(map[string]ErrorMsgSet, len(k.configErrors)) + + for entity, errset := range k.configErrors { + errors[entity] = errset } - return configs, nil + + return errors } -func init() { - RegisterProvider(names.Container, NewContainerConfigProvider) +// buildEntityName is also used as display key in `agent status` "Configuration Errors" display. +// (for instance, incorrect annotation syntax or unknown container name). +// That's why it does not simply use Kind + ID. +// It needs to be unique over time. +// (for instance, namespace+name is not unique for a POD as it can be deleted/created with a different UID, see STS rollout) +func buildEntityName(e workloadmeta.Entity) string { + entityID := e.GetID() + switch entity := e.(type) { + case *workloadmeta.KubernetesPod: + return fmt.Sprintf("%s/%s (%s)", entity.Namespace, entity.Name, entity.ID) + case *workloadmeta.Container: + return containers.BuildEntityName(string(entity.Runtime), entityID.ID) + default: + return fmt.Sprintf("%s://%s", entityID.Kind, entityID.ID) + } +} + +// findKubernetesInLabels traverses a map of container labels and +// returns true if a kubernetes label is detected +func findKubernetesInLabels(labels map[string]string) bool { + for name := range labels { + if strings.HasPrefix(name, "io.kubernetes.") { + return true + } + } + return false } -// GetConfigErrors is not implemented for the ContainerConfigProvider -func (d *ContainerConfigProvider) GetConfigErrors() map[string]ErrorMsgSet { - return make(map[string]ErrorMsgSet) +func init() { + RegisterProvider(names.KubeContainer, NewContainerConfigProvider) } diff --git a/pkg/autodiscovery/providers/container_test.go b/pkg/autodiscovery/providers/container_test.go index 70de5fcafe9f47..3f16a9b3a0a262 100644 --- a/pkg/autodiscovery/providers/container_test.go +++ b/pkg/autodiscovery/providers/container_test.go @@ -13,46 +13,446 @@ import ( "github.com/stretchr/testify/assert" + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" + "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/workloadmeta" + workloadmetatesting "github.com/DataDog/datadog-agent/pkg/workloadmeta/testing" ) -// Only testing generateConfigs, lifecycle should be tested in end-to-end test +func TestProcessEvents(t *testing.T) { + store := workloadmetatesting.NewStore() -func TestGenerateConfigs_Container(t *testing.T) { - configProvider := ContainerConfigProvider{ - containerCache: map[string]*workloadmeta.Container{ - "nolabels": { - Runtime: workloadmeta.ContainerRuntimeContainerd, + cp := &ContainerConfigProvider{ + workloadmetaStore: store, + configCache: make(map[string]map[string]integration.Config), + configErrors: make(map[string]ErrorMsgSet), + } + + tests := []struct { + name string + events []workloadmeta.Event + changes integration.ConfigChanges + }{ + { + name: "create config", + events: []workloadmeta.Event{ + { + Type: workloadmeta.EventTypeSet, + Entity: basicDockerContainer(), + }, + }, + changes: integration.ConfigChanges{ + Schedule: basicDockerConfigs(), + }, + }, + { + name: "replace config", + events: []workloadmeta.Event{ + { + Type: workloadmeta.EventTypeSet, + Entity: basicDockerContainerSingleCheck(), + }, + }, + changes: integration.ConfigChanges{ + Unschedule: []integration.Config{ + basicDockerConfigs()[1], + }, + }, + }, + { + name: "delete config", + events: []workloadmeta.Event{ + { + Type: workloadmeta.EventTypeUnset, + Entity: basicDockerContainer(), + }, + }, + changes: integration.ConfigChanges{ + Unschedule: []integration.Config{ + basicDockerConfigs()[0], + }, + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + changes := cp.processEvents(workloadmeta.EventBundle{ + Events: tt.events, + }) + + assert.Equal(t, tt.changes.Schedule, changes.Schedule) + assert.Equal(t, tt.changes.Unschedule, changes.Unschedule) + }) + } +} + +func TestGenerateConfig(t *testing.T) { + tests := []struct { + name string + entity workloadmeta.Entity + expectedConfigs []integration.Config + expectedErr ErrorMsgSet + containerCollectAll bool + }{ + { + name: "container check", + entity: basicDockerContainer(), + expectedConfigs: basicDockerConfigs(), + }, + { + name: "No annotations", + entity: &workloadmeta.KubernetesPod{ + Containers: []workloadmeta.OrchestratorContainer{ + { + Name: "testName", + ID: "testID", + }, + }, + }, + }, + { + name: "v2 annotations", + entity: &workloadmeta.KubernetesPod{ + EntityMeta: workloadmeta.EntityMeta{ + Annotations: map[string]string{ + "ad.datadoghq.com/apache.checks": `{ + "http_check": { + "instances": [ + { + "name": "My service", + "url": "http://%%host%%", + "timeout": 1 + } + ] + } + }`, + "ad.datadoghq.com/apache.check_names": "[\"invalid\"]", + "ad.datadoghq.com/apache.init_configs": "[{}]", + "ad.datadoghq.com/apache.instances": "[{}]", + }, + }, + Containers: []workloadmeta.OrchestratorContainer{ + { + Name: "apache", + ID: "3b8efe0c50e8", + }, + }, + }, + expectedConfigs: []integration.Config{ + { + Name: "http_check", + ADIdentifiers: []string{"docker://3b8efe0c50e8"}, + InitConfig: integration.Data("{}"), + Instances: []integration.Data{integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, + Source: "container:docker://3b8efe0c50e8", + }, }, - "3b8efe0c50e8": { + expectedErr: nil, + }, + { + name: "New + old, new takes over", + entity: &workloadmeta.KubernetesPod{ + EntityMeta: workloadmeta.EntityMeta{ + Annotations: map[string]string{ + "ad.datadoghq.com/apache.check_names": "[\"http_check\"]", + "ad.datadoghq.com/apache.init_configs": "[{}]", + "ad.datadoghq.com/apache.instances": "[{\"name\": \"My service\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", + "service-discovery.datadoghq.com/apache.check_names": "[\"invalid\"]", + "service-discovery.datadoghq.com/apache.init_configs": "[{}]", + "service-discovery.datadoghq.com/apache.instances": "[{}]", + }, + }, + Containers: []workloadmeta.OrchestratorContainer{ + { + Name: "apache", + ID: "3b8efe0c50e8", + }, + }, + }, + expectedConfigs: []integration.Config{ + { + Name: "http_check", + ADIdentifiers: []string{"docker://3b8efe0c50e8"}, + InitConfig: integration.Data("{}"), + Instances: []integration.Data{integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, + Source: "container:docker://3b8efe0c50e8", + }, + }, + expectedErr: nil, + }, + { + name: "New annotation prefix, two templates", + entity: &workloadmeta.KubernetesPod{ EntityMeta: workloadmeta.EntityMeta{ - Labels: map[string]string{ - "com.datadoghq.ad.check_names": "[\"apache\",\"http_check\"]", - "com.datadoghq.ad.init_configs": "[{}, {}]", - "com.datadoghq.ad.instances": "[{\"apache_status_url\": \"http://%%host%%/server-status?auto\"},{\"name\": \"My service\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", + Annotations: map[string]string{ + "ad.datadoghq.com/apache.check_names": "[\"http_check\"]", + "ad.datadoghq.com/apache.init_configs": "[{}]", + "ad.datadoghq.com/apache.instances": "[{\"name\": \"My service\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", + "ad.datadoghq.com/nginx.check_names": "[\"http_check\"]", + "ad.datadoghq.com/nginx.init_configs": "[{}]", + "ad.datadoghq.com/nginx.instances": "[{\"name\": \"Other service\", \"url\": \"http://%%host_external%%\", \"timeout\": 1}]", }, }, + Containers: []workloadmeta.OrchestratorContainer{ + { + Name: "apache", + ID: "3b8efe0c50e8", + }, + { + Name: "nginx", + ID: "4ac8352d70bf1", + }, + }, + }, + expectedConfigs: []integration.Config{ + { + Name: "http_check", + ADIdentifiers: []string{"docker://3b8efe0c50e8"}, + InitConfig: integration.Data("{}"), + Instances: []integration.Data{integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, + Source: "container:docker://3b8efe0c50e8", + }, + { + Name: "http_check", + ADIdentifiers: []string{"docker://4ac8352d70bf1"}, + InitConfig: integration.Data("{}"), + Instances: []integration.Data{integration.Data("{\"name\":\"Other service\",\"timeout\":1,\"url\":\"http://%%host_external%%\"}")}, + Source: "container:docker://4ac8352d70bf1", + }, + }, + expectedErr: nil, + }, + { + name: "Legacy annotation prefix, two checks in one template", + entity: &workloadmeta.KubernetesPod{ + EntityMeta: workloadmeta.EntityMeta{ + Annotations: map[string]string{ + "service-discovery.datadoghq.com/apache.check_names": "[\"apache\",\"http_check\"]", + "service-discovery.datadoghq.com/apache.init_configs": "[{},{}]", + "service-discovery.datadoghq.com/apache.instances": "[{\"apache_status_url\": \"http://%%host%%/server-status?auto\"},{\"name\": \"My service\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", + }, + }, + Containers: []workloadmeta.OrchestratorContainer{ + { + Name: "apache", + ID: "3b8efe0c50e8", + }, + }, + }, + expectedConfigs: []integration.Config{ + { + Name: "apache", + ADIdentifiers: []string{"docker://3b8efe0c50e8"}, + InitConfig: integration.Data("{}"), + Instances: []integration.Data{integration.Data("{\"apache_status_url\":\"http://%%host%%/server-status?auto\"}")}, + Source: "container:docker://3b8efe0c50e8", + }, + { + Name: "http_check", + ADIdentifiers: []string{"docker://3b8efe0c50e8"}, + InitConfig: integration.Data("{}"), + Instances: []integration.Data{integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, + Source: "container:docker://3b8efe0c50e8", + }, + }, + expectedErr: nil, + }, + { + name: "Custom check ID", + entity: &workloadmeta.KubernetesPod{ + EntityMeta: workloadmeta.EntityMeta{ + Annotations: map[string]string{ + "ad.datadoghq.com/nginx.check.id": "nginx-custom", + "ad.datadoghq.com/nginx-custom.check_names": "[\"http_check\"]", + "ad.datadoghq.com/nginx-custom.init_configs": "[{}]", + "ad.datadoghq.com/nginx-custom.instances": "[{\"name\": \"Other service\", \"url\": \"http://%%host_external%%\", \"timeout\": 1}]", + }, + }, + Containers: []workloadmeta.OrchestratorContainer{ + { + Name: "nginx", + ID: "4ac8352d70bf1", + }, + }, + }, + expectedConfigs: []integration.Config{ + { + Name: "http_check", + ADIdentifiers: []string{"docker://4ac8352d70bf1"}, + InitConfig: integration.Data("{}"), + Instances: []integration.Data{integration.Data("{\"name\":\"Other service\",\"timeout\":1,\"url\":\"http://%%host_external%%\"}")}, + Source: "container:docker://4ac8352d70bf1", + }, + }, + expectedErr: nil, + }, + { + name: "Non-duplicate errors", + entity: &workloadmeta.KubernetesPod{ + EntityMeta: workloadmeta.EntityMeta{ + Name: "nginx-1752f8c774-wtjql", + Namespace: "testNamespace", + Annotations: map[string]string{ + "ad.datadoghq.com/nonmatching.check_names": "[\"http_check\"]", + "ad.datadoghq.com/nonmatching.init_configs": "[{}]", + "ad.datadoghq.com/nonmatching.instances": "[{\"name\": \"Other service\", \"url\": \"http://%%host_external%%\", \"timeout\": 1}]", + }, + }, + Containers: []workloadmeta.OrchestratorContainer{ + { + Name: "nginx", + ID: "4ac8352d70bf1", + }, + { + Name: "apache", + ID: "3b8efe0c50e8", + }, + }, + }, + expectedErr: ErrorMsgSet{ + "annotation ad.datadoghq.com/nonmatching.check_names is invalid: nonmatching doesn't match a container identifier [apache nginx]": {}, + "annotation ad.datadoghq.com/nonmatching.init_configs is invalid: nonmatching doesn't match a container identifier [apache nginx]": {}, + "annotation ad.datadoghq.com/nonmatching.instances is invalid: nonmatching doesn't match a container identifier [apache nginx]": {}, + }, + }, + { + name: "One invalid config, one valid config", + entity: &workloadmeta.KubernetesPod{ + EntityMeta: workloadmeta.EntityMeta{ + Annotations: map[string]string{ + "ad.datadoghq.com/nginx.check_names": "[\"http_check\"]", + "ad.datadoghq.com/nginx.init_configs": "[{}]", + "ad.datadoghq.com/nginx.instances": "[{\"name\": \"nginx\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", + "ad.datadoghq.com/nginx.logs": "[{\"source\": \"nginx\" \"service\": \"nginx\"}]", // invalid json + }, + }, + Containers: []workloadmeta.OrchestratorContainer{ + { + Name: "nginx", + ID: "4ac8352d70bf1", + }, + }, + }, + expectedConfigs: []integration.Config{ + { + Name: "http_check", + ADIdentifiers: []string{"docker://4ac8352d70bf1"}, + InitConfig: integration.Data("{}"), + Instances: []integration.Data{integration.Data("{\"name\":\"nginx\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, + Source: "container:docker://4ac8352d70bf1", + }, + }, + expectedErr: ErrorMsgSet{ + "could not extract logs config: in logs: invalid character '\"' after object key:value pair": {}, + }, + }, + { + name: "bare container, container collect all", + entity: &workloadmeta.Container{ + EntityID: workloadmeta.EntityID{ + ID: "3b8efe0c50e8", + }, Runtime: workloadmeta.ContainerRuntimeDocker, }, + expectedConfigs: []integration.Config{ + { + Name: "container_collect_all", + Source: "container:docker://3b8efe0c50e8", + LogsConfig: integration.Data("[{}]"), + ADIdentifiers: []string{"docker://3b8efe0c50e8"}, + }, + }, + containerCollectAll: true, }, } - checks, err := configProvider.generateConfigs() - assert.Nil(t, err) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + config.Datadog.Set("logs_config.container_collect_all", tt.containerCollectAll) + defer config.Datadog.Set("logs_config.container_collect_all", false) + + store := workloadmetatesting.NewStore() - assert.Len(t, checks, 2) + if pod, ok := tt.entity.(*workloadmeta.KubernetesPod); ok { + for _, c := range pod.Containers { + store.Set(&workloadmeta.Container{ + EntityID: workloadmeta.EntityID{ + Kind: workloadmeta.KindContainer, + ID: c.ID, + }, + Runtime: workloadmeta.ContainerRuntimeDocker, + }) + } + } + + cp := &ContainerConfigProvider{ + workloadmetaStore: store, + configCache: make(map[string]map[string]integration.Config), + configErrors: make(map[string]ErrorMsgSet), + } + + configs, err := cp.generateConfig(tt.entity) + + assert.Equal(t, tt.expectedConfigs, configs) + assert.Equal(t, tt.expectedErr, err) + }) + } +} + +func basicDockerContainer() *workloadmeta.Container { + return &workloadmeta.Container{ + EntityID: workloadmeta.EntityID{ + ID: "3b8efe0c50e8", + Kind: workloadmeta.KindContainer, + }, + EntityMeta: workloadmeta.EntityMeta{ + Labels: map[string]string{ + "com.datadoghq.ad.check_names": "[\"apache\",\"http_check\"]", + "com.datadoghq.ad.init_configs": "[{}, {}]", + "com.datadoghq.ad.instances": "[{\"apache_status_url\": \"http://%%host%%/server-status?auto\"},{\"name\": \"My service\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", + }, + }, + Runtime: workloadmeta.ContainerRuntimeDocker, + } +} - assert.Equal(t, []string{"docker://3b8efe0c50e8"}, checks[0].ADIdentifiers) - assert.Equal(t, "{}", string(checks[0].InitConfig)) - assert.Equal(t, "container:docker://3b8efe0c50e8", checks[0].Source) - assert.Len(t, checks[0].Instances, 1) - assert.Equal(t, "{\"apache_status_url\":\"http://%%host%%/server-status?auto\"}", string(checks[0].Instances[0])) - assert.Equal(t, "apache", checks[0].Name) +func basicDockerContainerSingleCheck() *workloadmeta.Container { + return &workloadmeta.Container{ + EntityID: workloadmeta.EntityID{ + ID: "3b8efe0c50e8", + Kind: workloadmeta.KindContainer, + }, + EntityMeta: workloadmeta.EntityMeta{ + Labels: map[string]string{ + "com.datadoghq.ad.check_names": "[\"apache\"]", + "com.datadoghq.ad.init_configs": "[{}]", + "com.datadoghq.ad.instances": "[{\"apache_status_url\": \"http://%%host%%/server-status?auto\"}]", + }, + }, + Runtime: workloadmeta.ContainerRuntimeDocker, + } +} - assert.Equal(t, []string{"docker://3b8efe0c50e8"}, checks[1].ADIdentifiers) - assert.Equal(t, "{}", string(checks[1].InitConfig)) - assert.Equal(t, "container:docker://3b8efe0c50e8", checks[1].Source) - assert.Len(t, checks[1].Instances, 1) - assert.Equal(t, "{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}", string(checks[1].Instances[0])) - assert.Equal(t, "http_check", checks[1].Name) +func basicDockerConfigs() []integration.Config { + return []integration.Config{ + { + Name: "apache", + ADIdentifiers: []string{"docker://3b8efe0c50e8"}, + InitConfig: integration.Data("{}"), + Source: "container:docker://3b8efe0c50e8", + Instances: []integration.Data{ + integration.Data("{\"apache_status_url\":\"http://%%host%%/server-status?auto\"}"), + }, + }, + { + Name: "http_check", + ADIdentifiers: []string{"docker://3b8efe0c50e8"}, + InitConfig: integration.Data("{}"), + Source: "container:docker://3b8efe0c50e8", + Instances: []integration.Data{ + integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}"), + }, + }, + } } diff --git a/pkg/autodiscovery/providers/kubecontainer.go b/pkg/autodiscovery/providers/kubecontainer.go deleted file mode 100644 index aca93f7ac4cd92..00000000000000 --- a/pkg/autodiscovery/providers/kubecontainer.go +++ /dev/null @@ -1,321 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build !serverless -// +build !serverless - -package providers - -import ( - "context" - "fmt" - "strings" - "sync" - - "github.com/DataDog/datadog-agent/pkg/autodiscovery/common/utils" - "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" - "github.com/DataDog/datadog-agent/pkg/autodiscovery/providers/names" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/util/containers" - "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/DataDog/datadog-agent/pkg/workloadmeta" -) - -// KubeContainerConfigProvider implements the ConfigProvider interface for both pods and containers -// This provider is meant to replace both the `ContainerConfigProvider` and the `KubeletConfigProvider` components. -// Once the rollout is complete, `pkg/autodiscovery/providers/container.go` and `pkg/autodiscovery/providers/kubelet.go` -// should be deleted and this provider should be renamed to something more generic such as -// `ContainerConfigProvider` -type KubeContainerConfigProvider struct { - workloadmetaStore workloadmeta.Store - configErrors map[string]ErrorMsgSet // map[entity name]ErrorMsgSet - configCache map[string]map[string]integration.Config // map[entity name]map[config digest]integration.Config - mu sync.RWMutex -} - -// NewKubeContainerConfigProvider returns a new ConfigProvider subscribed to both container -// and pods -func NewKubeContainerConfigProvider(*config.ConfigurationProviders) (ConfigProvider, error) { - return &KubeContainerConfigProvider{ - workloadmetaStore: workloadmeta.GetGlobalStore(), - configCache: make(map[string]map[string]integration.Config), - configErrors: make(map[string]ErrorMsgSet), - }, nil -} - -// String returns a string representation of the KubeContainerConfigProvider -func (k *KubeContainerConfigProvider) String() string { - return names.KubeContainer -} - -// Stream starts listening to workloadmeta to generate configs as they come -// instead of relying on a periodic call to Collect. -func (k *KubeContainerConfigProvider) Stream(ctx context.Context) <-chan integration.ConfigChanges { - const name = "ad-kubecontainerprovider" - - // outCh must be unbuffered. processing of workloadmeta events must not - // proceed until the config is processed by autodiscovery, as configs - // need to be generated before any associated services. - outCh := make(chan integration.ConfigChanges) - - inCh := k.workloadmetaStore.Subscribe(name, workloadmeta.ConfigProviderPriority, workloadmeta.NewFilter( - []workloadmeta.Kind{workloadmeta.KindKubernetesPod, workloadmeta.KindContainer}, - workloadmeta.SourceAll, - workloadmeta.EventTypeAll, - )) - - go func() { - for { - select { - case <-ctx.Done(): - k.workloadmetaStore.Unsubscribe(inCh) - - case evBundle, ok := <-inCh: - if !ok { - return - } - - // send changes even when they're empty, as we - // need to signal that an event has been - // received, for flow control reasons - outCh <- k.processEvents(evBundle) - - close(evBundle.Ch) - } - } - }() - - return outCh -} - -func (k *KubeContainerConfigProvider) processEvents(evBundle workloadmeta.EventBundle) integration.ConfigChanges { - k.mu.Lock() - defer k.mu.Unlock() - - changes := integration.ConfigChanges{} - - for _, event := range evBundle.Events { - entityName := buildEntityName(event.Entity) - - switch event.Type { - case workloadmeta.EventTypeSet: - configs, err := k.generateConfig(event.Entity) - - if err != nil { - k.configErrors[entityName] = err - } else { - delete(k.configErrors, entityName) - } - - configCache, ok := k.configCache[entityName] - if !ok { - configCache = make(map[string]integration.Config) - k.configCache[entityName] = configCache - } - - configsToUnschedule := make(map[string]integration.Config) - for digest, config := range configCache { - configsToUnschedule[digest] = config - } - - for _, config := range configs { - digest := config.Digest() - if _, ok := configCache[digest]; ok { - delete(configsToUnschedule, digest) - } else { - configCache[digest] = config - changes.ScheduleConfig(config) - } - } - - for oldDigest, oldConfig := range configsToUnschedule { - delete(configCache, oldDigest) - changes.UnscheduleConfig(oldConfig) - } - - case workloadmeta.EventTypeUnset: - oldConfigs, found := k.configCache[entityName] - if !found { - log.Debugf("entity %q removed from workloadmeta store but not found in cache. skipping", entityName) - continue - } - - for _, oldConfig := range oldConfigs { - changes.UnscheduleConfig(oldConfig) - } - - delete(k.configCache, entityName) - delete(k.configErrors, entityName) - - default: - log.Errorf("cannot handle event of type %d", event.Type) - } - } - - return changes -} - -func (k *KubeContainerConfigProvider) generateConfig(e workloadmeta.Entity) ([]integration.Config, ErrorMsgSet) { - var ( - errMsgSet ErrorMsgSet - errs []error - configs []integration.Config - ) - - switch entity := e.(type) { - case *workloadmeta.Container: - // kubernetes containers need to be handled together with their - // pod, so they generate a single []integration.Config. - // otherwise, it's possible for a container that belongs to an - // AD-annotated pod to briefly be scheduled without its - // annotations. - if !findKubernetesInLabels(entity.Labels) { - configs, errs = k.generateContainerConfig(entity) - - containerID := entity.ID - containerEntityName := containers.BuildEntityName(string(entity.Runtime), containerID) - configs = utils.AddContainerCollectAllConfigs(configs, containerEntityName) - - for idx := range configs { - configs[idx].Source = names.Container + ":" + containerEntityName - } - } - - case *workloadmeta.KubernetesPod: - containerIdentifiers := map[string]struct{}{} - containerNames := map[string]struct{}{} - for _, podContainer := range entity.Containers { - container, err := k.workloadmetaStore.GetContainer(podContainer.ID) - if err != nil { - log.Debugf("Pod %q has reference to non-existing container %q", entity.Name, podContainer.ID) - continue - } - - var ( - c []integration.Config - errors []error - ) - - c, errors = k.generateContainerConfig(container) - configs = append(configs, c...) - errs = append(errs, errors...) - - adIdentifier := podContainer.Name - if customADID, found := utils.ExtractCheckIDFromPodAnnotations(entity.Annotations, podContainer.Name); found { - adIdentifier = customADID - } - - containerEntity := containers.BuildEntityName(string(container.Runtime), container.ID) - c, errors = utils.ExtractTemplatesFromPodAnnotations( - containerEntity, - entity.Annotations, - adIdentifier, - ) - - // container_collect_all configs must be added after - // configs generated from annotations, since services - // are reconciled against configs one-by-one instead of - // as a set, so if a container_collect_all config - // appears before an annotation one, it'll cause a logs - // config to be scheduled as container_collect_all, - // unscheduled, and then re-scheduled correctly. - c = utils.AddContainerCollectAllConfigs(c, containerEntity) - - if len(errors) > 0 { - errs = append(errs, errors...) - if len(c) == 0 { - // Only got errors, no valid configs so - // let's move on to the next container. - continue - } - } - - containerIdentifiers[adIdentifier] = struct{}{} - containerNames[podContainer.Name] = struct{}{} - - for idx := range c { - c[idx].Source = names.Container + ":" + containerEntity - } - - configs = append(configs, c...) - } - - errs = append(errs, utils.ValidateAnnotationsMatching( - entity.Annotations, - containerIdentifiers, - containerNames)...) - - default: - log.Errorf("cannot handle entity of kind %s", e.GetID().Kind) - } - - if len(errs) > 0 { - errMsgSet = make(ErrorMsgSet) - for _, err := range errs { - errMsgSet[err.Error()] = struct{}{} - } - } - - return configs, errMsgSet -} - -func (k *KubeContainerConfigProvider) generateContainerConfig(container *workloadmeta.Container) ([]integration.Config, []error) { - var ( - errs []error - configs []integration.Config - ) - - containerID := container.ID - containerEntityName := containers.BuildEntityName(string(container.Runtime), containerID) - configs, errs = utils.ExtractTemplatesFromContainerLabels(containerEntityName, container.Labels) - - return configs, errs -} - -// GetConfigErrors returns a map of configuration errors for each namespace/pod -func (k *KubeContainerConfigProvider) GetConfigErrors() map[string]ErrorMsgSet { - k.mu.RLock() - defer k.mu.RUnlock() - - errors := make(map[string]ErrorMsgSet, len(k.configErrors)) - - for entity, errset := range k.configErrors { - errors[entity] = errset - } - - return errors -} - -// buildEntityName is also used as display key in `agent status` "Configuration Errors" display. -// (for instance, incorrect annotation syntax or unknown container name). -// That's why it does not simply use Kind + ID. -// It needs to be unique over time. -// (for instance, namespace+name is not unique for a POD as it can be deleted/created with a different UID, see STS rollout) -func buildEntityName(e workloadmeta.Entity) string { - entityID := e.GetID() - switch entity := e.(type) { - case *workloadmeta.KubernetesPod: - return fmt.Sprintf("%s/%s (%s)", entity.Namespace, entity.Name, entity.ID) - case *workloadmeta.Container: - return containers.BuildEntityName(string(entity.Runtime), entityID.ID) - default: - return fmt.Sprintf("%s://%s", entityID.Kind, entityID.ID) - } -} - -// findKubernetesInLabels traverses a map of container labels and -// returns true if a kubernetes label is detected -func findKubernetesInLabels(labels map[string]string) bool { - for name := range labels { - if strings.HasPrefix(name, "io.kubernetes.") { - return true - } - } - return false -} - -func init() { - RegisterProvider(names.KubeContainer, NewKubeContainerConfigProvider) -} diff --git a/pkg/autodiscovery/providers/kubecontainer_test.go b/pkg/autodiscovery/providers/kubecontainer_test.go deleted file mode 100644 index f084234ca7e88f..00000000000000 --- a/pkg/autodiscovery/providers/kubecontainer_test.go +++ /dev/null @@ -1,458 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build !serverless -// +build !serverless - -package providers - -import ( - "testing" - - "github.com/stretchr/testify/assert" - - "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/workloadmeta" - workloadmetatesting "github.com/DataDog/datadog-agent/pkg/workloadmeta/testing" -) - -func TestProcessEvents(t *testing.T) { - store := workloadmetatesting.NewStore() - - cp := &KubeContainerConfigProvider{ - workloadmetaStore: store, - configCache: make(map[string]map[string]integration.Config), - configErrors: make(map[string]ErrorMsgSet), - } - - tests := []struct { - name string - events []workloadmeta.Event - changes integration.ConfigChanges - }{ - { - name: "create config", - events: []workloadmeta.Event{ - { - Type: workloadmeta.EventTypeSet, - Entity: basicDockerContainer(), - }, - }, - changes: integration.ConfigChanges{ - Schedule: basicDockerConfigs(), - }, - }, - { - name: "replace config", - events: []workloadmeta.Event{ - { - Type: workloadmeta.EventTypeSet, - Entity: basicDockerContainerSingleCheck(), - }, - }, - changes: integration.ConfigChanges{ - Unschedule: []integration.Config{ - basicDockerConfigs()[1], - }, - }, - }, - { - name: "delete config", - events: []workloadmeta.Event{ - { - Type: workloadmeta.EventTypeUnset, - Entity: basicDockerContainer(), - }, - }, - changes: integration.ConfigChanges{ - Unschedule: []integration.Config{ - basicDockerConfigs()[0], - }, - }, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - changes := cp.processEvents(workloadmeta.EventBundle{ - Events: tt.events, - }) - - assert.Equal(t, tt.changes.Schedule, changes.Schedule) - assert.Equal(t, tt.changes.Unschedule, changes.Unschedule) - }) - } -} - -func TestGenerateConfig(t *testing.T) { - tests := []struct { - name string - entity workloadmeta.Entity - expectedConfigs []integration.Config - expectedErr ErrorMsgSet - containerCollectAll bool - }{ - { - name: "container check", - entity: basicDockerContainer(), - expectedConfigs: basicDockerConfigs(), - }, - { - name: "No annotations", - entity: &workloadmeta.KubernetesPod{ - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "testName", - ID: "testID", - }, - }, - }, - }, - { - name: "v2 annotations", - entity: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Annotations: map[string]string{ - "ad.datadoghq.com/apache.checks": `{ - "http_check": { - "instances": [ - { - "name": "My service", - "url": "http://%%host%%", - "timeout": 1 - } - ] - } - }`, - "ad.datadoghq.com/apache.check_names": "[\"invalid\"]", - "ad.datadoghq.com/apache.init_configs": "[{}]", - "ad.datadoghq.com/apache.instances": "[{}]", - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "apache", - ID: "3b8efe0c50e8", - }, - }, - }, - expectedConfigs: []integration.Config{ - { - Name: "http_check", - ADIdentifiers: []string{"docker://3b8efe0c50e8"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, - Source: "container:docker://3b8efe0c50e8", - }, - }, - expectedErr: nil, - }, - { - name: "New + old, new takes over", - entity: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Annotations: map[string]string{ - "ad.datadoghq.com/apache.check_names": "[\"http_check\"]", - "ad.datadoghq.com/apache.init_configs": "[{}]", - "ad.datadoghq.com/apache.instances": "[{\"name\": \"My service\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", - "service-discovery.datadoghq.com/apache.check_names": "[\"invalid\"]", - "service-discovery.datadoghq.com/apache.init_configs": "[{}]", - "service-discovery.datadoghq.com/apache.instances": "[{}]", - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "apache", - ID: "3b8efe0c50e8", - }, - }, - }, - expectedConfigs: []integration.Config{ - { - Name: "http_check", - ADIdentifiers: []string{"docker://3b8efe0c50e8"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, - Source: "container:docker://3b8efe0c50e8", - }, - }, - expectedErr: nil, - }, - { - name: "New annotation prefix, two templates", - entity: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Annotations: map[string]string{ - "ad.datadoghq.com/apache.check_names": "[\"http_check\"]", - "ad.datadoghq.com/apache.init_configs": "[{}]", - "ad.datadoghq.com/apache.instances": "[{\"name\": \"My service\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", - "ad.datadoghq.com/nginx.check_names": "[\"http_check\"]", - "ad.datadoghq.com/nginx.init_configs": "[{}]", - "ad.datadoghq.com/nginx.instances": "[{\"name\": \"Other service\", \"url\": \"http://%%host_external%%\", \"timeout\": 1}]", - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "apache", - ID: "3b8efe0c50e8", - }, - { - Name: "nginx", - ID: "4ac8352d70bf1", - }, - }, - }, - expectedConfigs: []integration.Config{ - { - Name: "http_check", - ADIdentifiers: []string{"docker://3b8efe0c50e8"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, - Source: "container:docker://3b8efe0c50e8", - }, - { - Name: "http_check", - ADIdentifiers: []string{"docker://4ac8352d70bf1"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"Other service\",\"timeout\":1,\"url\":\"http://%%host_external%%\"}")}, - Source: "container:docker://4ac8352d70bf1", - }, - }, - expectedErr: nil, - }, - { - name: "Legacy annotation prefix, two checks in one template", - entity: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Annotations: map[string]string{ - "service-discovery.datadoghq.com/apache.check_names": "[\"apache\",\"http_check\"]", - "service-discovery.datadoghq.com/apache.init_configs": "[{},{}]", - "service-discovery.datadoghq.com/apache.instances": "[{\"apache_status_url\": \"http://%%host%%/server-status?auto\"},{\"name\": \"My service\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "apache", - ID: "3b8efe0c50e8", - }, - }, - }, - expectedConfigs: []integration.Config{ - { - Name: "apache", - ADIdentifiers: []string{"docker://3b8efe0c50e8"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"apache_status_url\":\"http://%%host%%/server-status?auto\"}")}, - Source: "container:docker://3b8efe0c50e8", - }, - { - Name: "http_check", - ADIdentifiers: []string{"docker://3b8efe0c50e8"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, - Source: "container:docker://3b8efe0c50e8", - }, - }, - expectedErr: nil, - }, - { - name: "Custom check ID", - entity: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Annotations: map[string]string{ - "ad.datadoghq.com/nginx.check.id": "nginx-custom", - "ad.datadoghq.com/nginx-custom.check_names": "[\"http_check\"]", - "ad.datadoghq.com/nginx-custom.init_configs": "[{}]", - "ad.datadoghq.com/nginx-custom.instances": "[{\"name\": \"Other service\", \"url\": \"http://%%host_external%%\", \"timeout\": 1}]", - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "nginx", - ID: "4ac8352d70bf1", - }, - }, - }, - expectedConfigs: []integration.Config{ - { - Name: "http_check", - ADIdentifiers: []string{"docker://4ac8352d70bf1"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"Other service\",\"timeout\":1,\"url\":\"http://%%host_external%%\"}")}, - Source: "container:docker://4ac8352d70bf1", - }, - }, - expectedErr: nil, - }, - { - name: "Non-duplicate errors", - entity: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Name: "nginx-1752f8c774-wtjql", - Namespace: "testNamespace", - Annotations: map[string]string{ - "ad.datadoghq.com/nonmatching.check_names": "[\"http_check\"]", - "ad.datadoghq.com/nonmatching.init_configs": "[{}]", - "ad.datadoghq.com/nonmatching.instances": "[{\"name\": \"Other service\", \"url\": \"http://%%host_external%%\", \"timeout\": 1}]", - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "nginx", - ID: "4ac8352d70bf1", - }, - { - Name: "apache", - ID: "3b8efe0c50e8", - }, - }, - }, - expectedErr: ErrorMsgSet{ - "annotation ad.datadoghq.com/nonmatching.check_names is invalid: nonmatching doesn't match a container identifier [apache nginx]": {}, - "annotation ad.datadoghq.com/nonmatching.init_configs is invalid: nonmatching doesn't match a container identifier [apache nginx]": {}, - "annotation ad.datadoghq.com/nonmatching.instances is invalid: nonmatching doesn't match a container identifier [apache nginx]": {}, - }, - }, - { - name: "One invalid config, one valid config", - entity: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Annotations: map[string]string{ - "ad.datadoghq.com/nginx.check_names": "[\"http_check\"]", - "ad.datadoghq.com/nginx.init_configs": "[{}]", - "ad.datadoghq.com/nginx.instances": "[{\"name\": \"nginx\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", - "ad.datadoghq.com/nginx.logs": "[{\"source\": \"nginx\" \"service\": \"nginx\"}]", // invalid json - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "nginx", - ID: "4ac8352d70bf1", - }, - }, - }, - expectedConfigs: []integration.Config{ - { - Name: "http_check", - ADIdentifiers: []string{"docker://4ac8352d70bf1"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"nginx\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, - Source: "container:docker://4ac8352d70bf1", - }, - }, - expectedErr: ErrorMsgSet{ - "could not extract logs config: in logs: invalid character '\"' after object key:value pair": {}, - }, - }, - { - name: "bare container, container collect all", - entity: &workloadmeta.Container{ - EntityID: workloadmeta.EntityID{ - ID: "3b8efe0c50e8", - }, - Runtime: workloadmeta.ContainerRuntimeDocker, - }, - expectedConfigs: []integration.Config{ - { - Name: "container_collect_all", - Source: "container:docker://3b8efe0c50e8", - LogsConfig: integration.Data("[{}]"), - ADIdentifiers: []string{"docker://3b8efe0c50e8"}, - }, - }, - containerCollectAll: true, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - config.Datadog.Set("logs_config.container_collect_all", tt.containerCollectAll) - defer config.Datadog.Set("logs_config.container_collect_all", false) - - store := workloadmetatesting.NewStore() - - if pod, ok := tt.entity.(*workloadmeta.KubernetesPod); ok { - for _, c := range pod.Containers { - store.Set(&workloadmeta.Container{ - EntityID: workloadmeta.EntityID{ - Kind: workloadmeta.KindContainer, - ID: c.ID, - }, - Runtime: workloadmeta.ContainerRuntimeDocker, - }) - } - } - - cp := &KubeContainerConfigProvider{ - workloadmetaStore: store, - configCache: make(map[string]map[string]integration.Config), - configErrors: make(map[string]ErrorMsgSet), - } - - configs, err := cp.generateConfig(tt.entity) - - assert.Equal(t, tt.expectedConfigs, configs) - assert.Equal(t, tt.expectedErr, err) - }) - } -} - -func basicDockerContainer() *workloadmeta.Container { - return &workloadmeta.Container{ - EntityID: workloadmeta.EntityID{ - ID: "3b8efe0c50e8", - Kind: workloadmeta.KindContainer, - }, - EntityMeta: workloadmeta.EntityMeta{ - Labels: map[string]string{ - "com.datadoghq.ad.check_names": "[\"apache\",\"http_check\"]", - "com.datadoghq.ad.init_configs": "[{}, {}]", - "com.datadoghq.ad.instances": "[{\"apache_status_url\": \"http://%%host%%/server-status?auto\"},{\"name\": \"My service\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", - }, - }, - Runtime: workloadmeta.ContainerRuntimeDocker, - } -} - -func basicDockerContainerSingleCheck() *workloadmeta.Container { - return &workloadmeta.Container{ - EntityID: workloadmeta.EntityID{ - ID: "3b8efe0c50e8", - Kind: workloadmeta.KindContainer, - }, - EntityMeta: workloadmeta.EntityMeta{ - Labels: map[string]string{ - "com.datadoghq.ad.check_names": "[\"apache\"]", - "com.datadoghq.ad.init_configs": "[{}]", - "com.datadoghq.ad.instances": "[{\"apache_status_url\": \"http://%%host%%/server-status?auto\"}]", - }, - }, - Runtime: workloadmeta.ContainerRuntimeDocker, - } -} - -func basicDockerConfigs() []integration.Config { - return []integration.Config{ - { - Name: "apache", - ADIdentifiers: []string{"docker://3b8efe0c50e8"}, - InitConfig: integration.Data("{}"), - Source: "container:docker://3b8efe0c50e8", - Instances: []integration.Data{ - integration.Data("{\"apache_status_url\":\"http://%%host%%/server-status?auto\"}"), - }, - }, - { - Name: "http_check", - ADIdentifiers: []string{"docker://3b8efe0c50e8"}, - InitConfig: integration.Data("{}"), - Source: "container:docker://3b8efe0c50e8", - Instances: []integration.Data{ - integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}"), - }, - }, - } -} diff --git a/pkg/autodiscovery/providers/kubelet.go b/pkg/autodiscovery/providers/kubelet.go deleted file mode 100644 index 80aca671470bcf..00000000000000 --- a/pkg/autodiscovery/providers/kubelet.go +++ /dev/null @@ -1,236 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build !serverless -// +build !serverless - -package providers - -import ( - "context" - "sync" - - "github.com/DataDog/datadog-agent/pkg/autodiscovery/common/utils" - "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" - "github.com/DataDog/datadog-agent/pkg/autodiscovery/providers/names" - "github.com/DataDog/datadog-agent/pkg/autodiscovery/telemetry" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/status/health" - "github.com/DataDog/datadog-agent/pkg/util" - "github.com/DataDog/datadog-agent/pkg/util/containers" - "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/DataDog/datadog-agent/pkg/workloadmeta" -) - -// KubeletConfigProvider implements the ConfigProvider interface for the kubelet. -type KubeletConfigProvider struct { - workloadmetaStore workloadmeta.Store - podCache map[string]*workloadmeta.KubernetesPod - configErrors map[string]ErrorMsgSet - upToDate bool - streaming bool - once sync.Once - sync.RWMutex -} - -// NewKubeletConfigProvider returns a new ConfigProvider connected to kubelet. -// Connectivity is not checked at this stage to allow for retries, Collect will do it. -func NewKubeletConfigProvider(*config.ConfigurationProviders) (ConfigProvider, error) { - return &KubeletConfigProvider{ - workloadmetaStore: workloadmeta.GetGlobalStore(), - configErrors: make(map[string]ErrorMsgSet), - podCache: make(map[string]*workloadmeta.KubernetesPod), - }, nil -} - -// String returns a string representation of the KubeletConfigProvider -func (k *KubeletConfigProvider) String() string { - return names.Kubernetes -} - -// Collect retrieves all running pods and extract AD templates from their annotations. -func (k *KubeletConfigProvider) Collect(ctx context.Context) ([]integration.Config, error) { - k.once.Do(func() { - ch := make(chan struct{}) - go k.listen(ch) - <-ch - }) - - k.Lock() - k.upToDate = true - k.Unlock() - - return k.generateConfigs() -} - -// listen, closing the given channel after the initial set of events are received -func (k *KubeletConfigProvider) listen(ch chan struct{}) { - const name = "ad-kubeletprovider" - - k.Lock() - k.streaming = true - health := health.RegisterLiveness(name) - defer func() { - err := health.Deregister() - if err != nil { - log.Warnf("error de-registering health check: %s", err) - } - }() - k.Unlock() - - var ranOnce bool - - wlmetaCh := k.workloadmetaStore.Subscribe(name, workloadmeta.NormalPriority, workloadmeta.NewFilter( - []workloadmeta.Kind{workloadmeta.KindKubernetesPod}, - workloadmeta.SourceNodeOrchestrator, - workloadmeta.EventTypeAll, - )) - - for { - select { - case evBundle, ok := <-wlmetaCh: - if !ok { - return - } - - k.processEvents(evBundle) - - if !ranOnce { - close(ch) - ranOnce = true - } - - case <-health.C: - - } - } -} -func (k *KubeletConfigProvider) processEvents(evBundle workloadmeta.EventBundle) { - close(evBundle.Ch) - - for _, event := range evBundle.Events { - switch event.Type { - case workloadmeta.EventTypeSet: - k.addPod(event.Entity) - case workloadmeta.EventTypeUnset: - k.deletePod(event.Entity) - - default: - log.Errorf("cannot handle event of type %d", event.Type) - } - } - -} - -func (k *KubeletConfigProvider) addPod(entity workloadmeta.Entity) { - k.Lock() - defer k.Unlock() - pod := entity.(*workloadmeta.KubernetesPod) - k.podCache[pod.GetID().ID] = pod - k.upToDate = false -} - -func (k *KubeletConfigProvider) deletePod(entity workloadmeta.Entity) { - k.Lock() - defer k.Unlock() - delete(k.podCache, entity.GetID().ID) - k.upToDate = false -} - -func (k *KubeletConfigProvider) generateConfigs() ([]integration.Config, error) { - k.Lock() - defer k.Unlock() - - adErrors := make(map[string]ErrorMsgSet) - - var configs []integration.Config - for _, pod := range k.podCache { - var errs []error - containerIdentifiers := map[string]struct{}{} - containerNames := map[string]struct{}{} - for _, podContainer := range pod.Containers { - container, err := k.workloadmetaStore.GetContainer(podContainer.ID) - if err != nil { - log.Debugf("Pod %q has reference to non-existing container %q", pod.Name, podContainer.ID) - continue - } - - adIdentifier := podContainer.Name - if customADID, found := utils.ExtractCheckIDFromPodAnnotations(pod.Annotations, podContainer.Name); found { - adIdentifier = customADID - } - - containerEntity := containers.BuildEntityName(string(container.Runtime), container.ID) - c, errors := utils.ExtractTemplatesFromPodAnnotations( - containerEntity, - pod.Annotations, - adIdentifier, - ) - - if len(errors) > 0 { - for _, err := range errors { - log.Errorf("Can't parse template for pod %s: %s", pod.Name, err) - errs = append(errs, err) - } - if len(c) == 0 { - // Only got errors, no valid configs so let's move on to the next container. - continue - } - } - - if util.CcaInAD() { - c = utils.AddContainerCollectAllConfigs(c, containerEntity) - } - - containerIdentifiers[adIdentifier] = struct{}{} - containerNames[podContainer.Name] = struct{}{} - - for idx := range c { - c[idx].Source = "kubelet:" + containerEntity - } - - configs = append(configs, c...) - } - - errs = append(errs, utils.ValidateAnnotationsMatching( - pod.Annotations, - containerIdentifiers, - containerNames)...) - - namespacedName := pod.Namespace + "/" + pod.Name - for _, err := range errs { - if _, found := adErrors[namespacedName]; !found { - adErrors[namespacedName] = map[string]struct{}{err.Error(): {}} - } else { - adErrors[namespacedName][err.Error()] = struct{}{} - } - } - } - - k.configErrors = adErrors - telemetry.Errors.Set(float64(len(adErrors)), names.Kubernetes) - - return configs, nil -} - -// IsUpToDate checks whether we have new pods to parse, based on events -// received by the listen goroutine. If listening fails, we fallback to -// collecting everytime. -func (k *KubeletConfigProvider) IsUpToDate(ctx context.Context) (bool, error) { - k.RLock() - defer k.RUnlock() - return k.streaming && k.upToDate, nil -} - -func init() { - RegisterProvider(names.KubeletRegisterName, NewKubeletConfigProvider) -} - -// GetConfigErrors returns a map of configuration errors for each namespace/pod -func (k *KubeletConfigProvider) GetConfigErrors() map[string]ErrorMsgSet { - k.RLock() - defer k.RUnlock() - return k.configErrors -} diff --git a/pkg/autodiscovery/providers/kubelet_test.go b/pkg/autodiscovery/providers/kubelet_test.go deleted file mode 100644 index c4ef3db441dd92..00000000000000 --- a/pkg/autodiscovery/providers/kubelet_test.go +++ /dev/null @@ -1,312 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build !serverless -// +build !serverless - -package providers - -import ( - "fmt" - "testing" - - "github.com/stretchr/testify/assert" - - "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" - "github.com/DataDog/datadog-agent/pkg/workloadmeta" - workloadmetatesting "github.com/DataDog/datadog-agent/pkg/workloadmeta/testing" -) - -func TestParseKubeletPodlist(t *testing.T) { - for nb, tc := range []struct { - desc string - pod *workloadmeta.KubernetesPod - expectedCfg []integration.Config - expectedErr ErrorMsgSet - }{ - { - desc: "No annotations", - pod: &workloadmeta.KubernetesPod{ - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "testName", - ID: "testID", - }, - }, - }, - expectedCfg: nil, - expectedErr: nil, - }, - { - desc: "v2 annotations", - pod: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Annotations: map[string]string{ - "ad.datadoghq.com/apache.checks": `{ - "http_check": { - "instances": [ - { - "name": "My service", - "url": "http://%%host%%", - "timeout": 1 - } - ] - } - }`, - "ad.datadoghq.com/apache.check_names": "[\"invalid\"]", - "ad.datadoghq.com/apache.init_configs": "[{}]", - "ad.datadoghq.com/apache.instances": "[{}]", - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "apache", - ID: "3b8efe0c50e8", - }, - }, - }, - expectedCfg: []integration.Config{ - { - Name: "http_check", - ADIdentifiers: []string{"docker://3b8efe0c50e8"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, - Source: "kubelet:docker://3b8efe0c50e8", - }, - }, - expectedErr: nil, - }, - { - desc: "New + old, new takes over", - pod: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Annotations: map[string]string{ - "ad.datadoghq.com/apache.check_names": "[\"http_check\"]", - "ad.datadoghq.com/apache.init_configs": "[{}]", - "ad.datadoghq.com/apache.instances": "[{\"name\": \"My service\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", - "service-discovery.datadoghq.com/apache.check_names": "[\"invalid\"]", - "service-discovery.datadoghq.com/apache.init_configs": "[{}]", - "service-discovery.datadoghq.com/apache.instances": "[{}]", - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "apache", - ID: "3b8efe0c50e8", - }, - }, - }, - expectedCfg: []integration.Config{ - { - Name: "http_check", - ADIdentifiers: []string{"docker://3b8efe0c50e8"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, - Source: "kubelet:docker://3b8efe0c50e8", - }, - }, - expectedErr: nil, - }, - { - desc: "New annotation prefix, two templates", - pod: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Annotations: map[string]string{ - "ad.datadoghq.com/apache.check_names": "[\"http_check\"]", - "ad.datadoghq.com/apache.init_configs": "[{}]", - "ad.datadoghq.com/apache.instances": "[{\"name\": \"My service\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", - "ad.datadoghq.com/nginx.check_names": "[\"http_check\"]", - "ad.datadoghq.com/nginx.init_configs": "[{}]", - "ad.datadoghq.com/nginx.instances": "[{\"name\": \"Other service\", \"url\": \"http://%%host_external%%\", \"timeout\": 1}]", - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "apache", - ID: "3b8efe0c50e8", - }, - { - Name: "nginx", - ID: "4ac8352d70bf1", - }, - }, - }, - expectedCfg: []integration.Config{ - { - Name: "http_check", - ADIdentifiers: []string{"docker://3b8efe0c50e8"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, - Source: "kubelet:docker://3b8efe0c50e8", - }, - { - Name: "http_check", - ADIdentifiers: []string{"docker://4ac8352d70bf1"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"Other service\",\"timeout\":1,\"url\":\"http://%%host_external%%\"}")}, - Source: "kubelet:docker://4ac8352d70bf1", - }, - }, - expectedErr: nil, - }, - { - desc: "Legacy annotation prefix, two checks in one template", - pod: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Annotations: map[string]string{ - "service-discovery.datadoghq.com/apache.check_names": "[\"apache\",\"http_check\"]", - "service-discovery.datadoghq.com/apache.init_configs": "[{},{}]", - "service-discovery.datadoghq.com/apache.instances": "[{\"apache_status_url\": \"http://%%host%%/server-status?auto\"},{\"name\": \"My service\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "apache", - ID: "3b8efe0c50e8", - }, - }, - }, - expectedCfg: []integration.Config{ - { - Name: "apache", - ADIdentifiers: []string{"docker://3b8efe0c50e8"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"apache_status_url\":\"http://%%host%%/server-status?auto\"}")}, - Source: "kubelet:docker://3b8efe0c50e8", - }, - { - Name: "http_check", - ADIdentifiers: []string{"docker://3b8efe0c50e8"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, - Source: "kubelet:docker://3b8efe0c50e8", - }, - }, - expectedErr: nil, - }, - { - desc: "Custom check ID", - pod: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Annotations: map[string]string{ - "ad.datadoghq.com/nginx.check.id": "nginx-custom", - "ad.datadoghq.com/nginx-custom.check_names": "[\"http_check\"]", - "ad.datadoghq.com/nginx-custom.init_configs": "[{}]", - "ad.datadoghq.com/nginx-custom.instances": "[{\"name\": \"Other service\", \"url\": \"http://%%host_external%%\", \"timeout\": 1}]", - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "nginx", - ID: "4ac8352d70bf1", - }, - }, - }, - expectedCfg: []integration.Config{ - { - Name: "http_check", - ADIdentifiers: []string{"docker://4ac8352d70bf1"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"Other service\",\"timeout\":1,\"url\":\"http://%%host_external%%\"}")}, - Source: "kubelet:docker://4ac8352d70bf1", - }, - }, - expectedErr: nil, - }, - { - desc: "Non-duplicate errors", - pod: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Name: "nginx-1752f8c774-wtjql", - Namespace: "testNamespace", - Annotations: map[string]string{ - "ad.datadoghq.com/nonmatching.check_names": "[\"http_check\"]", - "ad.datadoghq.com/nonmatching.init_configs": "[{}]", - "ad.datadoghq.com/nonmatching.instances": "[{\"name\": \"Other service\", \"url\": \"http://%%host_external%%\", \"timeout\": 1}]", - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "nginx", - ID: "4ac8352d70bf1", - }, - { - Name: "apache", - ID: "3b8efe0c50e8", - }, - }, - }, - expectedCfg: nil, - expectedErr: ErrorMsgSet{ - "annotation ad.datadoghq.com/nonmatching.check_names is invalid: nonmatching doesn't match a container identifier [apache nginx]": {}, - "annotation ad.datadoghq.com/nonmatching.init_configs is invalid: nonmatching doesn't match a container identifier [apache nginx]": {}, - "annotation ad.datadoghq.com/nonmatching.instances is invalid: nonmatching doesn't match a container identifier [apache nginx]": {}, - }, - }, - { - desc: "One invalid config, one valid config", - pod: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Annotations: map[string]string{ - "ad.datadoghq.com/nginx.check_names": "[\"http_check\"]", - "ad.datadoghq.com/nginx.init_configs": "[{}]", - "ad.datadoghq.com/nginx.instances": "[{\"name\": \"nginx\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", - "ad.datadoghq.com/nginx.logs": "[{\"source\": \"nginx\" \"service\": \"nginx\"}]", // invalid json - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "nginx", - ID: "4ac8352d70bf1", - }, - }, - }, - expectedCfg: []integration.Config{ - { - Name: "http_check", - ADIdentifiers: []string{"docker://4ac8352d70bf1"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"nginx\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, - Source: "kubelet:docker://4ac8352d70bf1", - }, - }, - expectedErr: ErrorMsgSet{ - "could not extract logs config: in logs: invalid character '\"' after object key:value pair": {}, - }, - }, - } { - t.Run(fmt.Sprintf("case %d: %s", nb, tc.desc), func(t *testing.T) { - store := workloadmetatesting.NewStore() - - for _, c := range tc.pod.Containers { - store.Set(&workloadmeta.Container{ - EntityID: workloadmeta.EntityID{ - Kind: workloadmeta.KindContainer, - ID: c.ID, - }, - Runtime: workloadmeta.ContainerRuntimeDocker, - }) - } - - m := &KubeletConfigProvider{ - workloadmetaStore: store, - configErrors: make(map[string]ErrorMsgSet), - podCache: map[string]*workloadmeta.KubernetesPod{ - tc.pod.GetID().ID: tc.pod, - }, - } - - checks, err := m.generateConfigs() - assert.NoError(t, err) - - assert.Equal(t, len(tc.expectedCfg), len(checks)) - assert.EqualValues(t, tc.expectedCfg, checks) - - namespacedName := tc.pod.Namespace + "/" + tc.pod.Name - assert.Equal(t, len(tc.expectedErr), len(m.configErrors[namespacedName])) - assert.EqualValues(t, tc.expectedErr, m.configErrors[namespacedName]) - }) - } -} diff --git a/pkg/autodiscovery/simple_configmgr.go b/pkg/autodiscovery/simple_configmgr.go deleted file mode 100644 index 75c26921de7083..00000000000000 --- a/pkg/autodiscovery/simple_configmgr.go +++ /dev/null @@ -1,249 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2022-present Datadog, Inc. - -package autodiscovery - -import ( - "context" - "fmt" - "sync" - - "github.com/DataDog/datadog-agent/pkg/autodiscovery/configresolver" - "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" - "github.com/DataDog/datadog-agent/pkg/autodiscovery/listeners" - "github.com/DataDog/datadog-agent/pkg/util/log" -) - -// simpleConfigManager implements the "simple" config manager that reconciles -// services and templates without any priority, using a store as a backend. -// -// simpleConfigManager will be fully replaced by reconcilingConfigManager when -// the `logs_config.cca_in_ad` feature flag is removed. -type simpleConfigManager struct { - // m synchronizes all operations on this struct. - m sync.Mutex - - // store contains the data tracked by this manager. - store *store -} - -// newSimpleConfigManager creates a new, empty simpleConfigManager. -func newSimpleConfigManager() configManager { - return &simpleConfigManager{ - store: newStore(), - } -} - -// processNewService implements configManager#processNewService. -func (cm *simpleConfigManager) processNewService(adIdentifiers []string, svc listeners.Service) integration.ConfigChanges { - cm.m.Lock() - defer cm.m.Unlock() - - cm.store.setServiceForEntity(svc, svc.GetServiceID()) - - var templates []integration.Config - for _, adID := range adIdentifiers { - // map the AD identifier to this service for reverse lookup - cm.store.setADIDForServices(adID, svc.GetServiceID()) - tpls, err := cm.store.templateCache.get(adID) - if err != nil { - log.Debugf("Unable to fetch templates from the cache: %v", err) - } - templates = append(templates, tpls...) - } - - resolvedSet := map[string]integration.Config{} - for _, template := range templates { - // resolve the template - resolvedConfig, err := cm.resolveTemplateForService(template, svc) - if err != nil { - continue - } - - resolvedSet[resolvedConfig.Digest()] = resolvedConfig - } - - // build the config changes to return - changes := integration.ConfigChanges{} - for _, v := range resolvedSet { - changes.ScheduleConfig(v) - } - - return changes -} - -// processDelService implements configManager#processDelService. -func (cm *simpleConfigManager) processDelService(ctx context.Context, svc listeners.Service) integration.ConfigChanges { - cm.m.Lock() - defer cm.m.Unlock() - - cm.store.removeServiceForEntity(svc.GetServiceID()) - adIdentifiers, err := svc.GetADIdentifiers(ctx) - if err != nil { - log.Warnf("Couldn't get AD identifiers for service %q while removing it: %v", svc.GetServiceID(), err) - } else { - cm.store.removeServiceForADID(svc.GetServiceID(), adIdentifiers) - } - - removedConfigs := cm.store.removeConfigsForService(svc.GetServiceID()) - changes := integration.ConfigChanges{} - for _, c := range removedConfigs { - if cm.store.removeLoadedConfig(c) { - changes.UnscheduleConfig(c) - } - } - - return changes -} - -// processNewConfig implements configManager#processNewConfig. -func (cm *simpleConfigManager) processNewConfig(config integration.Config) integration.ConfigChanges { - cm.m.Lock() - defer cm.m.Unlock() - changes := integration.ConfigChanges{} - - if config.IsTemplate() { - // store the template in the cache in any case - if err := cm.store.templateCache.set(config); err != nil { - log.Errorf("Unable to store Check configuration in the cache: %s", err) - } - - // try to resolve the template - resolvedConfigs := cm.resolveTemplate(config) - if resolvedConfigs.IsEmpty() { - e := fmt.Sprintf("Can't resolve the template for %s at this moment.", config.Name) - errorStats.setResolveWarning(config.Name, e) - log.Debug(e) - return changes // empty result - } - - return resolvedConfigs - } - - // decrypt and store non-template config in AC as well - config, err := decryptConfig(config) - if err != nil { - log.Errorf("Dropping conf for '%s': %s", config.Name, err.Error()) - return changes // empty result - } - changes.ScheduleConfig(config) - cm.store.setLoadedConfig(config) - - return changes -} - -// processDelConfigs implements configManager#processDelConfigs. -func (cm *simpleConfigManager) processDelConfigs(configs []integration.Config) integration.ConfigChanges { - cm.m.Lock() - defer cm.m.Unlock() - changes := integration.ConfigChanges{} - - for _, c := range configs { - if c.IsTemplate() { - // Remove the resolved configurations - tplDigest := c.Digest() - removedConfigs := cm.store.removeConfigsForTemplate(tplDigest) - for _, rc := range removedConfigs { - if cm.store.removeLoadedConfig(rc) { - changes.UnscheduleConfig(rc) - } - } - - // Remove template from the cache - err := cm.store.templateCache.del(c) - if err != nil { - log.Debugf("Could not delete template: %v", err) - } - } else { - // Secrets need to be resolved before being unscheduled as otherwise - // the computed hashes can be different from the ones computed at schedule time. - c, err := decryptConfig(c) - if err != nil { - log.Errorf("Unable to resolve secrets for config '%s', check may not be unscheduled properly, err: %s", c.Name, err.Error()) - } - - cm.store.removeLoadedConfig(c) - changes.UnscheduleConfig(c) - } - } - - return changes -} - -// mapOverLoadedConfigs implements configManager#mapOverLoadedConfigs. -func (cm *simpleConfigManager) mapOverLoadedConfigs(f func(map[string]integration.Config)) { - cm.m.Lock() - defer cm.m.Unlock() - cm.store.mapOverLoadedConfigs(f) -} - -// resolveTemplateForService resolves a template config for the given service -func (cm *simpleConfigManager) resolveTemplateForService(tpl integration.Config, svc listeners.Service) (integration.Config, error) { - config, err := configresolver.Resolve(tpl, svc) - if err != nil { - newErr := fmt.Errorf("error resolving template %s for service %s: %v", tpl.Name, svc.GetServiceID(), err) - errorStats.setResolveWarning(tpl.Name, newErr.Error()) - return tpl, log.Warn(newErr) - } - resolvedConfig, err := decryptConfig(config) - if err != nil { - newErr := fmt.Errorf("error decrypting secrets in config %s for service %s: %v", config.Name, svc.GetServiceID(), err) - return config, log.Warn(newErr) - } - cm.store.setLoadedConfig(resolvedConfig) - cm.store.addConfigForService(svc.GetServiceID(), resolvedConfig) - cm.store.addConfigForTemplate(tpl.Digest(), resolvedConfig) - errorStats.removeResolveWarnings(tpl.Name) - return resolvedConfig, nil -} - -// resolveTemplate attempts to resolve a configuration template using the AD -// identifiers in the `integration.Config` struct to match a Service. -// -// The function might return more than one configuration for a single template, -// for example when the `ad_identifiers` section of a config.yaml file contains -// multiple entries, or when more than one Service has the same identifier, -// e.g. 'redis'. -// -// The function might return an empty list in the case the configuration has a -// list of Autodiscovery identifiers for services that are unknown to the -// resolver at this moment. -func (cm *simpleConfigManager) resolveTemplate(tpl integration.Config) integration.ConfigChanges { - // use a map to dedupe configurations - resolvedSet := map[string]integration.Config{} - - // go through the AD identifiers provided by the template - for _, id := range tpl.ADIdentifiers { - // check out whether any service we know has this identifier - serviceIds, found := cm.store.getServiceEntitiesForADID(id) - if !found { - s := fmt.Sprintf("No service found with this AD identifier: %s", id) - errorStats.setResolveWarning(tpl.Name, s) - log.Debugf(s) - continue - } - - for serviceID := range serviceIds { - svc := cm.store.getServiceForEntity(serviceID) - if svc == nil { - log.Warnf("Service %s was removed before we could resolve its config", serviceID) - continue - } - resolvedConfig, err := cm.resolveTemplateForService(tpl, svc) - if err != nil { - continue - } - resolvedSet[resolvedConfig.Digest()] = resolvedConfig - } - } - - // build the config changes to return - changes := integration.ConfigChanges{} - for _, v := range resolvedSet { - changes.ScheduleConfig(v) - } - - return changes -} diff --git a/pkg/autodiscovery/store.go b/pkg/autodiscovery/store.go index 53013793354437..17da45084851dd 100644 --- a/pkg/autodiscovery/store.go +++ b/pkg/autodiscovery/store.go @@ -128,34 +128,6 @@ func (s *store) setTagsHashForService(serviceEntity string, hash string) { s.serviceToTagsHash[serviceEntity] = hash } -// setLoadedConfig stores a resolved config by its digest -func (s *store) setLoadedConfig(config integration.Config) { - s.m.Lock() - defer s.m.Unlock() - s.loadedConfigs[config.Digest()] = config -} - -// removeLoadedConfig removes a loaded config by its digest, returning true if it was found. -func (s *store) removeLoadedConfig(config integration.Config) bool { - s.m.Lock() - defer s.m.Unlock() - digest := config.Digest() - if _, found := s.loadedConfigs[digest]; found { - delete(s.loadedConfigs, digest) - return true - } - return false -} - -// mapOverLoadedConfigs calls the given function with the map of all -// loaded configs. This is done with the config store locked, so -// callers should perform minimal work within f. -func (s *store) mapOverLoadedConfigs(f func(map[string]integration.Config)) { - s.m.RLock() - defer s.m.RUnlock() - f(s.loadedConfigs) -} - // setJMXMetricsForConfigName stores the jmx metrics config for a config name func (s *store) setJMXMetricsForConfigName(config string, metrics integration.Data) { s.m.Lock() @@ -186,12 +158,6 @@ func (s *store) setServiceForEntity(svc listeners.Service, entity string) { s.entityToService[entity] = svc } -func (s *store) getServiceForEntity(entity string) listeners.Service { - s.m.Lock() - defer s.m.Unlock() - return s.entityToService[entity] -} - func (s *store) removeServiceForEntity(entity string) { s.m.Lock() defer s.m.Unlock() diff --git a/pkg/cli/standalone/jmx.go b/pkg/cli/standalone/jmx.go index 0fc9bcd870b753..2f9060b0da44cb 100644 --- a/pkg/cli/standalone/jmx.go +++ b/pkg/cli/standalone/jmx.go @@ -55,7 +55,7 @@ func ExecJmxListWithRateMetricsJSON(selectedChecks []string, logLevel string, co // The common utils, including AutoConfig, must have already been initialized. func execJmxCommand(command string, selectedChecks []string, reporter jmxfetch.JMXReporter, output func(...interface{}), logLevel string, configs []integration.Config) error { // start the cmd HTTP server - if err := api.StartServer(nil); err != nil { + if err := api.StartServer(nil, nil); err != nil { return fmt.Errorf("Error while starting api server, exiting: %v", err) } diff --git a/pkg/cli/subcommands/check/command.go b/pkg/cli/subcommands/check/command.go index 40a30207009b3b..e67366184d5944 100644 --- a/pkg/cli/subcommands/check/command.go +++ b/pkg/cli/subcommands/check/command.go @@ -57,6 +57,7 @@ type cliParams struct { checkPause int checkName string checkDelay int + instanceFilter string logLevel string formatJSON bool formatTable bool @@ -105,8 +106,9 @@ func MakeCommand(globalParamsGetter func() GlobalParams) *cobra.Command { disableCmdPort() return fxutil.OneShot(run, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, true, core.WithConfigName(globalParams.ConfigName)). - LogForOneShot(globalParams.LoggerName, "off", true)), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithSecrets(globalParams.ConfFilePath, config.WithConfigName(globalParams.ConfigName)), + LogParams: log.LogForOneShot(globalParams.LoggerName, "off", true)}), core.Bundle, ) }, @@ -117,6 +119,7 @@ func MakeCommand(globalParamsGetter func() GlobalParams) *cobra.Command { cmd.Flags().IntVar(&cliParams.checkPause, "pause", 0, "pause between multiple runs of the check, in milliseconds") cmd.Flags().StringVarP(&cliParams.logLevel, "log-level", "l", "", "set the log level (default 'off') (deprecated, use the env var DD_LOG_LEVEL instead)") cmd.Flags().IntVarP(&cliParams.checkDelay, "delay", "d", 100, "delay between running the check and grabbing the metrics in milliseconds") + cmd.Flags().StringVarP(&cliParams.instanceFilter, "instance-filter", "", "", "filter instances using jq style syntax, example: --instance-filter '.ip_address == \"127.0.0.51\"'") cmd.Flags().BoolVarP(&cliParams.formatJSON, "json", "", false, "format aggregator and check runner output as json") cmd.Flags().BoolVarP(&cliParams.formatTable, "table", "", false, "format aggregator and check runner output as an ascii table") cmd.Flags().StringVarP(&cliParams.breakPoint, "breakpoint", "b", "", "set a breakpoint at a particular line number (Python checks only)") @@ -149,11 +152,17 @@ func MakeCommand(globalParamsGetter func() GlobalParams) *cobra.Command { func run(log log.Component, config config.Component, cliParams *cliParams) error { previousIntegrationTracing := false + previousIntegrationTracingExhaustive := false if cliParams.generateIntegrationTraces { if pkgconfig.Datadog.IsSet("integration_tracing") { previousIntegrationTracing = pkgconfig.Datadog.GetBool("integration_tracing") + + } + if pkgconfig.Datadog.IsSet("integration_tracing_exhaustive") { + previousIntegrationTracingExhaustive = pkgconfig.Datadog.GetBool("integration_tracing_exhaustive") } pkgconfig.Datadog.Set("integration_tracing", true) + pkgconfig.Datadog.Set("integration_tracing_exhaustive", true) } if len(cliParams.args) != 0 { @@ -186,8 +195,12 @@ func run(log log.Component, config config.Component, cliParams *cliParams) error waitCtx, cancelTimeout := context.WithTimeout( context.Background(), time.Duration(cliParams.discoveryTimeout)*time.Second) - allConfigs := common.WaitForConfigsFromAD(waitCtx, []string{cliParams.checkName}, int(cliParams.discoveryMinInstances)) + + allConfigs, err := common.WaitForConfigsFromAD(waitCtx, []string{cliParams.checkName}, int(cliParams.discoveryMinInstances), cliParams.instanceFilter) cancelTimeout() + if err != nil { + return err + } // make sure the checks in cs are not JMX checks for idx := range allConfigs { @@ -476,6 +489,7 @@ func run(log log.Component, config config.Component, cliParams *cliParams) error if cliParams.generateIntegrationTraces { pkgconfig.Datadog.Set("integration_tracing", previousIntegrationTracing) + pkgconfig.Datadog.Set("integration_tracing_exhaustive", previousIntegrationTracingExhaustive) } return nil diff --git a/pkg/cli/subcommands/check/command_test.go b/pkg/cli/subcommands/check/command_test.go index 1fb825557acb3a..6be7e7e86db24d 100644 --- a/pkg/cli/subcommands/check/command_test.go +++ b/pkg/cli/subcommands/check/command_test.go @@ -31,6 +31,6 @@ func TestCommand(t *testing.T) { require.Equal(t, []string{"cleopatra"}, cliParams.args) require.Equal(t, 1, cliParams.checkDelay) require.True(t, cliParams.saveFlare) - require.Equal(t, true, coreParams.ConfigLoadSecrets) + require.Equal(t, true, coreParams.ConfigLoadSecrets()) }) } diff --git a/pkg/cli/subcommands/clusterchecks/command.go b/pkg/cli/subcommands/clusterchecks/command.go new file mode 100644 index 00000000000000..109e55e342e5f1 --- /dev/null +++ b/pkg/cli/subcommands/clusterchecks/command.go @@ -0,0 +1,135 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +// Package clusterchecks builds a 'clusterchecks' command to be used in binaries. +package clusterchecks + +import ( + "bytes" + "encoding/json" + "fmt" + + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" + "github.com/DataDog/datadog-agent/pkg/api/util" + "github.com/DataDog/datadog-agent/pkg/clusteragent/clusterchecks/types" + pkgconfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/flare" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "github.com/fatih/color" + "github.com/spf13/cobra" + "go.uber.org/fx" +) + +const ( + loggerName = "CLUSTER" + defaultLogLevel = "off" +) + +type GlobalParams struct { + ConfFilePath string +} + +type cliParams struct { + checkName string +} + +// MakeCommand returns a `clusterchecks` command to be used by cluster-agent +// binaries. +func MakeCommand(globalParamsGetter func() GlobalParams) *cobra.Command { + cliParams := &cliParams{} + + cmd := &cobra.Command{ + Use: "clusterchecks", + Short: "Prints the active cluster check configurations", + Long: ``, + RunE: func(cmd *cobra.Command, args []string) error { + globalParams := globalParamsGetter() + + return fxutil.OneShot(run, + fx.Supply(cliParams), + fx.Supply(bundleParams(globalParams)), + core.Bundle, + ) + }, + } + + cmd.Flags().StringVarP(&cliParams.checkName, "check", "", "", "the check name to filter for") + + rebalanceCmd := &cobra.Command{ + Use: "rebalance", + Short: "Rebalances cluster checks", + Long: ``, + RunE: func(cmd *cobra.Command, args []string) error { + globalParams := globalParamsGetter() + + return fxutil.OneShot(rebalance, + fx.Supply(bundleParams(globalParams)), + core.Bundle, + ) + }, + } + + cmd.AddCommand(rebalanceCmd) + + return cmd +} + +func bundleParams(globalParams GlobalParams) core.BundleParams { + return core.BundleParams{ + ConfigParams: config.NewClusterAgentParams(globalParams.ConfFilePath, config.WithConfigLoadSecrets(true)), + LogParams: log.LogForOneShot(loggerName, defaultLogLevel, true), + } +} + +func run(log log.Component, config config.Component, cliParams *cliParams) error { + if err := flare.GetClusterChecks(color.Output, cliParams.checkName); err != nil { + return err + } + + return flare.GetEndpointsChecks(color.Output, cliParams.checkName) +} + +func rebalance(log log.Component, config config.Component) error { + fmt.Println("Requesting a cluster check rebalance...") + c := util.GetClient(false) // FIX: get certificates right then make this true + urlstr := fmt.Sprintf("https://localhost:%v/api/v1/clusterchecks/rebalance", pkgconfig.Datadog.GetInt("cluster_agent.cmd_port")) + + // Set session token + err := util.SetAuthToken() + if err != nil { + return err + } + + r, err := util.DoPost(c, urlstr, "application/json", bytes.NewBuffer([]byte{})) + if err != nil { + var errMap = make(map[string]string) + json.Unmarshal(r, &errMap) //nolint:errcheck + // If the error has been marshalled into a json object, check it and return it properly + if e, found := errMap["error"]; found { + err = fmt.Errorf(e) + } + + fmt.Printf(` + Could not reach agent: %v + Make sure the agent is running before requesting the cluster checks rebalancing. + Contact support if you continue having issues.`, err) + + return err + } + + checksMoved := make([]types.RebalanceResponse, 0) + json.Unmarshal(r, &checksMoved) //nolint:errcheck + + fmt.Printf("%d cluster checks rebalanced successfully\n", len(checksMoved)) + + for _, check := range checksMoved { + fmt.Printf("Check %s with weight %d moved from node %s to %s. source diff: %d, dest diff: %d\n", + check.CheckID, check.CheckWeight, check.SourceNodeName, check.DestNodeName, check.SourceDiff, check.DestDiff) + } + + return nil +} diff --git a/pkg/cli/subcommands/clusterchecks/command_test.go b/pkg/cli/subcommands/clusterchecks/command_test.go new file mode 100644 index 00000000000000..ac2ecfccaef2ff --- /dev/null +++ b/pkg/cli/subcommands/clusterchecks/command_test.go @@ -0,0 +1,44 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +package clusterchecks + +import ( + "testing" + + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "github.com/spf13/cobra" +) + +func TestCommand(t *testing.T) { + commands := []*cobra.Command{ + MakeCommand(func() GlobalParams { + return GlobalParams{} + }), + } + + fxutil.TestOneShotSubcommand(t, + commands, + []string{"clusterchecks"}, + run, + func() {}) +} + +func TestRebalance(t *testing.T) { + commands := []*cobra.Command{ + MakeCommand(func() GlobalParams { + return GlobalParams{} + }), + } + + fxutil.TestOneShotSubcommand(t, + commands, + []string{"clusterchecks", "rebalance"}, + rebalance, + func() {}) +} diff --git a/pkg/cli/subcommands/config/command.go b/pkg/cli/subcommands/config/command.go index 916f80ba601e09..d81323f83034b2 100644 --- a/pkg/cli/subcommands/config/command.go +++ b/pkg/cli/subcommands/config/command.go @@ -50,8 +50,9 @@ func MakeCommand(globalParamsGetter func() GlobalParams) *cobra.Command { return fxutil.OneShot(callback, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithConfigName(globalParams.ConfigName)). - LogForOneShot(globalParams.LoggerName, "off", true)), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath, config.WithConfigName(globalParams.ConfigName)), + LogParams: log.LogForOneShot(globalParams.LoggerName, "off", true)}), core.Bundle, ) } diff --git a/pkg/cli/subcommands/config/command_test.go b/pkg/cli/subcommands/config/command_test.go index 7579061dd678a5..1c8807e5583380 100644 --- a/pkg/cli/subcommands/config/command_test.go +++ b/pkg/cli/subcommands/config/command_test.go @@ -28,7 +28,7 @@ func TestConfigCommand(t *testing.T) { showRuntimeConfiguration, func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, []string{}, cliParams.args) - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } @@ -45,7 +45,7 @@ func TestConfigListRuntimeCommand(t *testing.T) { listRuntimeConfigurableValue, func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, []string{}, cliParams.args) - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } @@ -62,7 +62,7 @@ func TestConfigSetCommand(t *testing.T) { setConfigValue, func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, []string{"foo", "bar"}, cliParams.args) - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } @@ -79,6 +79,6 @@ func TestConfigGetCommand(t *testing.T) { getConfigValue, func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, []string{"foo"}, cliParams.args) - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } diff --git a/pkg/cli/subcommands/dcaconfigcheck/command.go b/pkg/cli/subcommands/dcaconfigcheck/command.go new file mode 100644 index 00000000000000..d08decd206f5ce --- /dev/null +++ b/pkg/cli/subcommands/dcaconfigcheck/command.go @@ -0,0 +1,58 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +// Package dcaconfigcheck builds a 'configcheck' command to be used in binaries. +package dcaconfigcheck + +import ( + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" + "github.com/DataDog/datadog-agent/pkg/flare" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "github.com/fatih/color" + "github.com/spf13/cobra" + "go.uber.org/fx" +) + +type GlobalParams struct { + ConfFilePath string +} + +type cliParams struct { + verbose bool +} + +// MakeCommand returns a `configcheck` command to be used by cluster-agent +// binaries. +func MakeCommand(globalParamsGetter func() GlobalParams) *cobra.Command { + cliParams := &cliParams{} + cmd := &cobra.Command{ + Use: "configcheck", + Aliases: []string{"checkconfig"}, + Short: "Print all configurations loaded & resolved of a running cluster agent", + Long: ``, + RunE: func(cmd *cobra.Command, args []string) error { + globalParams := globalParamsGetter() + + return fxutil.OneShot(run, + fx.Supply(cliParams), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewClusterAgentParams(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CLUSTER", "off", true), + }), + core.Bundle, + ) + }, + } + + cmd.Flags().BoolVarP(&cliParams.verbose, "verbose", "v", false, "print additional debug info") + + return cmd +} + +func run(log log.Component, config config.Component, cliParams *cliParams) error { + return flare.GetClusterAgentConfigCheck(color.Output, cliParams.verbose) +} diff --git a/pkg/cli/subcommands/dcaconfigcheck/command_test.go b/pkg/cli/subcommands/dcaconfigcheck/command_test.go new file mode 100644 index 00000000000000..c7136be5a09c62 --- /dev/null +++ b/pkg/cli/subcommands/dcaconfigcheck/command_test.go @@ -0,0 +1,30 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +package dcaconfigcheck + +import ( + "testing" + + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "github.com/spf13/cobra" +) + +func TestCommand(t *testing.T) { + commands := []*cobra.Command{ + MakeCommand(func() GlobalParams { + return GlobalParams{} + }), + } + + fxutil.TestOneShotSubcommand(t, + commands, + []string{"configcheck"}, + run, + func() {}) +} diff --git a/pkg/cli/subcommands/health/command.go b/pkg/cli/subcommands/health/command.go index 3818d72f69e5a3..a5bbe8510e2e14 100644 --- a/pkg/cli/subcommands/health/command.go +++ b/pkg/cli/subcommands/health/command.go @@ -44,8 +44,9 @@ func MakeCommand(globalParamsGetter func() GlobalParams) *cobra.Command { globalParams := globalParamsGetter() return fxutil.OneShot(requestHealth, - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithConfigName(globalParams.ConfigName)). - LogForOneShot(globalParams.LoggerName, "off", true)), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath, config.WithConfigName(globalParams.ConfigName)), + LogParams: log.LogForOneShot(globalParams.LoggerName, "off", true)}), core.Bundle, ) }, diff --git a/pkg/cli/subcommands/health/command_test.go b/pkg/cli/subcommands/health/command_test.go index 6e1d34a4509044..b55c8d36858f5b 100644 --- a/pkg/cli/subcommands/health/command_test.go +++ b/pkg/cli/subcommands/health/command_test.go @@ -27,6 +27,6 @@ func TestCommand(t *testing.T) { []string{"health"}, requestHealth, func(coreParams core.BundleParams) { - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } diff --git a/pkg/cloudfoundry/containertagger/container_tagger.go b/pkg/cloudfoundry/containertagger/container_tagger.go index 9a263910ee35b0..3fc0d8f0305a81 100644 --- a/pkg/cloudfoundry/containertagger/container_tagger.go +++ b/pkg/cloudfoundry/containertagger/container_tagger.go @@ -87,10 +87,13 @@ func (c *ContainerTagger) Start(ctx context.Context) { } func (c *ContainerTagger) processEvent(ctx context.Context, evt workloadmeta.Event) error { - containerID := evt.Entity.GetID().ID - + entity := evt.Entity + containerID := entity.GetID().ID if evt.Type == workloadmeta.EventTypeSet { - storeContainer := evt.Entity.(*workloadmeta.Container) + eventTimestamp := time.Now().UnixNano() + storeContainer := entity.(*workloadmeta.Container) + eventID := fmt.Sprintf("%s-%d", containerID, eventTimestamp) + log.Debugf("Processing Event (id %s): %+v", eventID, storeContainer) // extract tags hostTags := host.GetHostTags(ctx, true) @@ -121,13 +124,14 @@ func (c *ContainerTagger) processEvent(ctx context.Context, evt workloadmeta.Eve go func() { var exitCode int var err error - for retry := 0; retry < c.retryCount; retry++ { - log.Infof("Updating tags in container `%s` retry #%d", containerID, retry) + for attempt := 1; attempt <= c.retryCount; attempt++ { + log.Infof("Updating tags in container `%s` attempt #%d", containerID, attempt) + log.Debugf("Update attempt #%d for event %s", attempt, eventID) exitCode, err = updateTagsInContainer(container, tags) if err != nil { log.Warnf("Error running a process inside container `%s`: %v", containerID, err) } else if exitCode == 0 { - log.Debugf("Successfully updated tags in container `%s`", containerID) + log.Infof("Successfully updated tags in container `%s`", containerID) return } log.Debugf("Process for container '%s' exited with code: %d", containerID, exitCode) diff --git a/pkg/clusteragent/admission/common/const.go b/pkg/clusteragent/admission/common/const.go index 24feb5ac0edb9e..4687f693f9f04c 100644 --- a/pkg/clusteragent/admission/common/const.go +++ b/pkg/clusteragent/admission/common/const.go @@ -14,4 +14,16 @@ const ( // InjectionModeLabelKey pod label to chose the config injection at the pod level. InjectionModeLabelKey = "admission.datadoghq.com/config.mode" + + // LibVersionAnnotKeyFormat is the format of the library version annotation + LibVersionAnnotKeyFormat = "admission.datadoghq.com/%s-lib.version" + + // LibConfigV1AnnotKeyFormat is the format of the library config annotation + LibConfigV1AnnotKeyFormat = "admission.datadoghq.com/%s-lib.config.v1" + + // RcIDAnnotKey is the format of the RC ID annotation + RcIDAnnotKeyFormat = "admission.datadoghq.com/%s-lib.rc.id" + + // RcRevisionAnnotKey is the format of the RC revision annotation + RcRevisionAnnotKeyFormat = "admission.datadoghq.com/%s-lib.rc.rev" ) diff --git a/pkg/clusteragent/admission/common/lib_config.go b/pkg/clusteragent/admission/common/lib_config.go new file mode 100644 index 00000000000000..c91bec5d415b89 --- /dev/null +++ b/pkg/clusteragent/admission/common/lib_config.go @@ -0,0 +1,192 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver +// +build kubeapiserver + +package common + +import ( + "fmt" + "strings" + + corev1 "k8s.io/api/core/v1" +) + +// LibConfig holds the APM library configuration +type LibConfig struct { + Language string `yaml:"library_language" json:"library_language"` + Version string `yaml:"library_version" json:"library_version"` + + ServiceName *string `yaml:"service_name,omitempty" json:"service_name,omitempty"` + Env *string `yaml:"env,omitempty" json:"env,omitempty"` + + Tracing *bool `yaml:"tracing_enabled,omitempty" json:"tracing_enabled,omitempty"` + LogInjection *bool `yaml:"log_injection_enabled,omitempty" json:"log_injection_enabled,omitempty"` + HealthMetrics *bool `yaml:"health_metrics_enabled,omitempty" json:"health_metrics_enabled,omitempty"` + RuntimeMetrics *bool `yaml:"runtime_metrics_enabled,omitempty" json:"runtime_metrics_enabled,omitempty"` + + TracingSamplingRate *float64 `yaml:"tracing_sampling_rate" json:"tracing_sampling_rate,omitempty"` + TracingRateLimit *int `yaml:"tracing_rate_limit" json:"tracing_rate_limit,omitempty"` + TracingTags []string `yaml:"tracing_tags" json:"tracing_tags,omitempty"` + + TracingServiceMapping []TracingServiceMapEntry `yaml:"tracing_service_mapping" json:"tracing_service_mapping,omitempty"` + TracingAgentTimeout *int `yaml:"tracing_agent_timeout" json:"tracing_agent_timeout,omitempty"` + TracingHeaderTags []TracingHeaderTagEntry `yaml:"tracing_header_tags" json:"tracing_header_tags,omitempty"` + TracingPartialFlushMinSpans *int `yaml:"tracing_partial_flush_min_spans" json:"tracing_partial_flush_min_spans,omitempty"` + TracingDebug *bool `yaml:"tracing_debug" json:"tracing_debug,omitempty"` + TracingLogLevel *string `yaml:"tracing_log_level" json:"tracing_log_level,omitempty"` + TracingMethods []string `yaml:"tracing_methods" json:"tracing_methods,omitempty"` + TracingPropagationStyleInject []string `yaml:"tracing_propagation_style_inject" json:"tracing_propagation_style_inject,omitempty"` + TracingPropagationStyleExtract []string `yaml:"tracing_propagation_style_extract" json:"tracing_propagation_style_extract,omitempty"` +} + +// TracingServiceMapEntry holds service mapping config +type TracingServiceMapEntry struct { + FromKey string `yaml:"from_key" json:"from_key"` + ToName string `yaml:"to_name" json:"to_name"` +} + +// TracingHeaderTagEntry holds header tags config +type TracingHeaderTagEntry struct { + Header string `yaml:"header" json:"header"` + TagName string `yaml:"tag_name" json:"tag_name"` +} + +// ToEnvs converts the config fields into environment variables +func (lc LibConfig) ToEnvs() []corev1.EnvVar { + var envs []corev1.EnvVar + if lc.ServiceName != nil { + envs = append(envs, corev1.EnvVar{ + Name: "DD_SERVICE", + Value: *lc.ServiceName, + }) + } + if lc.Env != nil { + envs = append(envs, corev1.EnvVar{ + Name: "DD_ENV", + Value: *lc.Env, + }) + } + if val, defined := checkFormatVal(lc.Tracing); defined { + envs = append(envs, corev1.EnvVar{ + Name: "DD_TRACE_ENABLED", + Value: val, + }) + } + if val, defined := checkFormatVal(lc.LogInjection); defined { + envs = append(envs, corev1.EnvVar{ + Name: "DD_LOGS_INJECTION", + Value: val, + }) + } + if val, defined := checkFormatVal(lc.HealthMetrics); defined { + envs = append(envs, corev1.EnvVar{ + Name: "DD_TRACE_HEALTH_METRICS_ENABLED", + Value: val, + }) + } + if val, defined := checkFormatVal(lc.RuntimeMetrics); defined { + envs = append(envs, corev1.EnvVar{ + Name: "DD_RUNTIME_METRICS_ENABLED", + Value: val, + }) + } + if val, defined := checkFormatFloat(lc.TracingSamplingRate); defined { + envs = append(envs, corev1.EnvVar{ + Name: "DD_TRACE_SAMPLE_RATE", + Value: val, + }) + } + if val, defined := checkFormatVal(lc.TracingRateLimit); defined { + envs = append(envs, corev1.EnvVar{ + Name: "DD_TRACE_RATE_LIMIT", + Value: val, + }) + } + if lc.TracingTags != nil { + envs = append(envs, corev1.EnvVar{ + Name: "DD_TAGS", + Value: strings.Join(lc.TracingTags, ","), + }) + } + if lc.TracingServiceMapping != nil { + pairs := make([]string, 0, len(lc.TracingServiceMapping)) + for _, m := range lc.TracingServiceMapping { + pairs = append(pairs, fmt.Sprintf("%s:%s", m.FromKey, m.ToName)) + } + envs = append(envs, corev1.EnvVar{ + Name: "DD_TRACE_SERVICE_MAPPING", + Value: strings.Join(pairs, ", "), + }) + } + if val, defined := checkFormatVal(lc.TracingAgentTimeout); defined { + envs = append(envs, corev1.EnvVar{ + Name: "DD_TRACE_AGENT_TIMEOUT", + Value: val, + }) + } + if lc.TracingHeaderTags != nil { + pairs := make([]string, 0, len(lc.TracingHeaderTags)) + for _, m := range lc.TracingHeaderTags { + pairs = append(pairs, fmt.Sprintf("%s:%s", m.Header, m.TagName)) + } + envs = append(envs, corev1.EnvVar{ + Name: "DD_TRACE_HEADER_TAGS", + Value: strings.Join(pairs, ", "), + }) + } + if val, defined := checkFormatVal(lc.TracingPartialFlushMinSpans); defined { + envs = append(envs, corev1.EnvVar{ + Name: "DD_TRACE_PARTIAL_FLUSH_MIN_SPANS", + Value: val, + }) + } + if val, defined := checkFormatVal(lc.TracingDebug); defined { + envs = append(envs, corev1.EnvVar{ + Name: "DD_TRACE_DEBUG", + Value: val, + }) + } + if lc.TracingLogLevel != nil { + envs = append(envs, corev1.EnvVar{ + Name: "DD_TRACE_LOG_LEVEL", + Value: *lc.TracingLogLevel, + }) + } + if lc.TracingMethods != nil { + envs = append(envs, corev1.EnvVar{ + Name: "DD_TRACE_METHODS", + Value: strings.Join(lc.TracingMethods, ";"), + }) + } + if lc.TracingPropagationStyleInject != nil { + envs = append(envs, corev1.EnvVar{ + Name: "DD_PROPAGATION_STYLE_INJECT", + Value: strings.Join(lc.TracingPropagationStyleInject, ","), + }) + } + if lc.TracingPropagationStyleExtract != nil { + envs = append(envs, corev1.EnvVar{ + Name: "DD_PROPAGATION_STYLE_EXTRACT", + Value: strings.Join(lc.TracingPropagationStyleExtract, ","), + }) + } + return envs +} + +func checkFormatVal[T int | bool](val *T) (string, bool) { + if val == nil { + return "", false + } + return fmt.Sprintf("%v", *val), true +} + +func checkFormatFloat(val *float64) (string, bool) { + if val == nil { + return "", false + } + return fmt.Sprintf("%.2f", *val), true +} diff --git a/pkg/clusteragent/admission/common/lib_config_test.go b/pkg/clusteragent/admission/common/lib_config_test.go new file mode 100644 index 00000000000000..39fb05e97d4afd --- /dev/null +++ b/pkg/clusteragent/admission/common/lib_config_test.go @@ -0,0 +1,211 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver +// +build kubeapiserver + +package common + +import ( + "testing" + + "github.com/stretchr/testify/require" + corev1 "k8s.io/api/core/v1" +) + +func TestLibConfig_ToEnvs(t *testing.T) { + type fields struct { + ServiceName *string + Env *string + Tracing *bool + LogInjection *bool + HealthMetrics *bool + RuntimeMetrics *bool + TracingSamplingRate *float64 + TracingRateLimit *int + TracingTags []string + + TracingServiceMapping []TracingServiceMapEntry + TracingAgentTimeout *int + TracingHeaderTags []TracingHeaderTagEntry + TracingPartialFlushMinSpans *int + TracingDebug *bool + TracingLogLevel *string + TracingMethods []string + TracingPropagationStyleInject []string + TracingPropagationStyleExtract []string + } + tests := []struct { + name string + fields fields + want []corev1.EnvVar + }{ + { + name: "all", + fields: fields{ + ServiceName: ptr("svc"), + Env: ptr("dev"), + Tracing: ptr(true), + LogInjection: ptr(true), + HealthMetrics: ptr(true), + RuntimeMetrics: ptr(true), + TracingSamplingRate: ptr(0.5), + TracingRateLimit: ptr(50), + TracingTags: []string{"k1:v1", "k2:v2"}, + TracingServiceMapping: []TracingServiceMapEntry{{ + FromKey: "svc1", + ToName: "svc2", + }, { + FromKey: "svc3", + ToName: "svc4", + }, + }, + TracingAgentTimeout: ptr(2), + TracingHeaderTags: []TracingHeaderTagEntry{ + { + Header: "X-Test-Header", + TagName: "x.test.header", + }, + { + Header: "X-Test-Other-Header", + TagName: "x.test.other.header", + }, + }, + TracingPartialFlushMinSpans: ptr(100), + TracingDebug: ptr(true), + TracingLogLevel: ptr("DEBUG"), + TracingMethods: []string{"modA.method", "modB.method"}, + TracingPropagationStyleInject: []string{"Datadog", "B3", "W3C"}, + TracingPropagationStyleExtract: []string{"W3C", "B3", "Datadog"}, + }, + want: []corev1.EnvVar{ + { + Name: "DD_SERVICE", + Value: "svc", + }, + { + Name: "DD_ENV", + Value: "dev", + }, + { + Name: "DD_TRACE_ENABLED", + Value: "true", + }, + { + Name: "DD_LOGS_INJECTION", + Value: "true", + }, + { + Name: "DD_TRACE_HEALTH_METRICS_ENABLED", + Value: "true", + }, + { + Name: "DD_RUNTIME_METRICS_ENABLED", + Value: "true", + }, + { + Name: "DD_TRACE_SAMPLE_RATE", + Value: "0.50", + }, + { + Name: "DD_TRACE_RATE_LIMIT", + Value: "50", + }, + { + Name: "DD_TAGS", + Value: "k1:v1,k2:v2", + }, + { + Name: "DD_TRACE_SERVICE_MAPPING", + Value: "svc1:svc2, svc3:svc4", + }, + { + Name: "DD_TRACE_AGENT_TIMEOUT", + Value: "2", + }, + { + Name: "DD_TRACE_HEADER_TAGS", + Value: "X-Test-Header:x.test.header, X-Test-Other-Header:x.test.other.header", + }, + { + Name: "DD_TRACE_PARTIAL_FLUSH_MIN_SPANS", + Value: "100", + }, + { + Name: "DD_TRACE_DEBUG", + Value: "true", + }, + { + Name: "DD_TRACE_LOG_LEVEL", + Value: "DEBUG", + }, + { + Name: "DD_TRACE_METHODS", + Value: "modA.method;modB.method", + }, + { + Name: "DD_PROPAGATION_STYLE_INJECT", + Value: "Datadog,B3,W3C", + }, + { + Name: "DD_PROPAGATION_STYLE_EXTRACT", + Value: "W3C,B3,Datadog", + }, + }, + }, + { + name: "only service and env", + fields: fields{ + ServiceName: ptr("svc"), + Env: ptr("dev"), + }, + want: []corev1.EnvVar{ + { + Name: "DD_SERVICE", + Value: "svc", + }, + { + Name: "DD_ENV", + Value: "dev", + }, + }, + }, + { + name: "empty", + fields: fields{}, + want: nil, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + lc := LibConfig{ + ServiceName: tt.fields.ServiceName, + Env: tt.fields.Env, + Tracing: tt.fields.Tracing, + LogInjection: tt.fields.LogInjection, + HealthMetrics: tt.fields.HealthMetrics, + RuntimeMetrics: tt.fields.RuntimeMetrics, + TracingSamplingRate: tt.fields.TracingSamplingRate, + TracingRateLimit: tt.fields.TracingRateLimit, + TracingTags: tt.fields.TracingTags, + + TracingServiceMapping: tt.fields.TracingServiceMapping, + TracingAgentTimeout: tt.fields.TracingAgentTimeout, + TracingHeaderTags: tt.fields.TracingHeaderTags, + TracingPartialFlushMinSpans: tt.fields.TracingPartialFlushMinSpans, + TracingDebug: tt.fields.TracingDebug, + TracingLogLevel: tt.fields.TracingLogLevel, + TracingMethods: tt.fields.TracingMethods, + TracingPropagationStyleInject: tt.fields.TracingPropagationStyleInject, + TracingPropagationStyleExtract: tt.fields.TracingPropagationStyleExtract, + } + require.EqualValues(t, tt.want, lc.ToEnvs()) + }) + } +} + +func ptr[T int | bool | string | float64](val T) *T { + return &val +} diff --git a/pkg/clusteragent/admission/mutate/auto_instrumentation.go b/pkg/clusteragent/admission/mutate/auto_instrumentation.go index 383a2ce31eddee..1726b739b81105 100644 --- a/pkg/clusteragent/admission/mutate/auto_instrumentation.go +++ b/pkg/clusteragent/admission/mutate/auto_instrumentation.go @@ -9,11 +9,13 @@ package mutate import ( + "encoding/json" "errors" "fmt" "strconv" "strings" + "github.com/DataDog/datadog-agent/pkg/clusteragent/admission/common" "github.com/DataDog/datadog-agent/pkg/clusteragent/admission/metrics" "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -50,9 +52,8 @@ const ( ) var ( - libVersionAnnotationKeyFormat = "admission.datadoghq.com/%s-lib.version" - customLibAnnotationKeyFormat = "admission.datadoghq.com/%s-lib.custom-image" - supportedLanguages = []language{java, js, python} + customLibAnnotationKeyFormat = "admission.datadoghq.com/%s-lib.custom-image" + supportedLanguages = []language{java, js, python} ) // InjectAutoInstrumentation injects APM libraries into pods @@ -90,7 +91,7 @@ func extractLibInfo(pod *corev1.Pod, containerRegistry string) (language, string return lang, image, true } - libVersionAnnotation := strings.ToLower(fmt.Sprintf(libVersionAnnotationKeyFormat, lang)) + libVersionAnnotation := strings.ToLower(fmt.Sprintf(common.LibVersionAnnotKeyFormat, lang)) if version, found := podAnnotations[libVersionAnnotation]; found { image := fmt.Sprintf("%s/dd-lib-%s-init:%s", containerRegistry, lang, version) return lang, image, true @@ -107,36 +108,33 @@ func injectAutoInstruConfig(pod *corev1.Pod, lang language, image string) error metrics.LibInjectionAttempts.Inc(langStr, strconv.FormatBool(injected)) }() + var langEnvKey string + var langEnvFunc envValFunc switch lang { case java: - injectLibInitContainer(pod, image) - err := injectLibConfig(pod, javaToolOptionsKey, javaEnvValFunc) - if err != nil { - metrics.LibInjectionErrors.Inc(langStr) - return err - } - + langEnvKey = javaToolOptionsKey + langEnvFunc = javaEnvValFunc case js: - injectLibInitContainer(pod, image) - err := injectLibConfig(pod, nodeOptionsKey, jsEnvValFunc) - if err != nil { - metrics.LibInjectionErrors.Inc(langStr) - return err - } - + langEnvKey = nodeOptionsKey + langEnvFunc = jsEnvValFunc case python: - injectLibInitContainer(pod, image) - err := injectLibConfig(pod, pythonPathKey, pythonEnvValFunc) - if err != nil { - metrics.LibInjectionErrors.Inc(langStr) - return err - } - + langEnvKey = pythonPathKey + langEnvFunc = pythonEnvValFunc default: metrics.LibInjectionErrors.Inc(langStr) return fmt.Errorf("language %q is not supported. Supported languages are %v", lang, supportedLanguages) } - + injectLibInitContainer(pod, image) + err := injectLibRequirements(pod, langEnvKey, langEnvFunc) + if err != nil { + metrics.LibInjectionErrors.Inc(langStr) + return err + } + err = injectLibConfig(pod, lang) + if err != nil { + metrics.LibInjectionErrors.Inc(langStr) + return err + } injectLibVolume(pod) injected = true @@ -160,7 +158,8 @@ func injectLibInitContainer(pod *corev1.Pod, image string) { }, pod.Spec.InitContainers...) } -func injectLibConfig(pod *corev1.Pod, envKey string, envVal envValFunc) error { +// injectLibRequirements injects the minimal config requirements to enable instrumentation +func injectLibRequirements(pod *corev1.Pod, envKey string, envVal envValFunc) error { for i, ctr := range pod.Spec.Containers { index := envIndex(ctr.Env, envKey) if index < 0 { @@ -182,6 +181,26 @@ func injectLibConfig(pod *corev1.Pod, envKey string, envVal envValFunc) error { return nil } +// injectLibConfig injects additional library configuration extracted from pod annotations +func injectLibConfig(pod *corev1.Pod, lang language) error { + configAnnotKey := fmt.Sprintf(common.LibConfigV1AnnotKeyFormat, lang) + confString, found := pod.GetAnnotations()[configAnnotKey] + if !found { + log.Debugf("Config annotation key %q not found on pod %s, skipping config injection", configAnnotKey, podString(pod)) + return nil + } + log.Infof("Config annotation key %q found on pod %s, config: %q", configAnnotKey, podString(pod), confString) + var libConfig common.LibConfig + err := json.Unmarshal([]byte(confString), &libConfig) + if err != nil { + return fmt.Errorf("invalid json config in annotation %s=%s: %w", configAnnotKey, confString, err) + } + for _, env := range libConfig.ToEnvs() { + _ = injectEnv(pod, env) + } + return nil +} + func injectLibVolume(pod *corev1.Pod) { pod.Spec.Volumes = append(pod.Spec.Volumes, corev1.Volume{ Name: volumeName, diff --git a/pkg/clusteragent/admission/mutate/auto_instrumentation_test.go b/pkg/clusteragent/admission/mutate/auto_instrumentation_test.go index 6ce2ca9443108c..2cf3706e549c7e 100644 --- a/pkg/clusteragent/admission/mutate/auto_instrumentation_test.go +++ b/pkg/clusteragent/admission/mutate/auto_instrumentation_test.go @@ -115,12 +115,12 @@ func TestInjectAutoInstruConfig(t *testing.T) { if err != nil { return } - assertLibConfig(t, tt.pod, tt.image, tt.expectedEnvKey, tt.expectedEnvVal) + assertLibReq(t, tt.pod, tt.image, tt.expectedEnvKey, tt.expectedEnvVal) }) } } -func assertLibConfig(t *testing.T, pod *corev1.Pod, image, envKey, envVal string) { +func assertLibReq(t *testing.T, pod *corev1.Pod, image, envKey, envVal string) { // Empty dir volume volumeFound := false for _, volume := range pod.Spec.Volumes { @@ -220,3 +220,58 @@ func TestExtractLibInfo(t *testing.T) { }) } } + +func TestInjectLibConfig(t *testing.T) { + tests := []struct { + name string + pod *corev1.Pod + lang language + wantErr bool + expectedEnvs []corev1.EnvVar + }{ + { + name: "nominal case", + pod: fakePodWithAnnotation("admission.datadoghq.com/java-lib.config.v1", `{"version":1,"service_language":"java","runtime_metrics_enabled":true,"tracing_rate_limit":50}`), + lang: java, + wantErr: false, + expectedEnvs: []corev1.EnvVar{ + { + Name: "DD_RUNTIME_METRICS_ENABLED", + Value: "true", + }, + { + Name: "DD_TRACE_RATE_LIMIT", + Value: "50", + }, + }, + }, + { + name: "invalid json", + pod: fakePodWithAnnotation("admission.datadoghq.com/java-lib.config.v1", "invalid"), + lang: java, + wantErr: true, + expectedEnvs: nil, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := injectLibConfig(tt.pod, tt.lang) + require.False(t, (err != nil) != tt.wantErr) + if err != nil { + return + } + container := tt.pod.Spec.Containers[0] + envCount := 0 + for _, expectEnv := range tt.expectedEnvs { + for _, contEnv := range container.Env { + if expectEnv.Name == contEnv.Name { + require.Equal(t, expectEnv.Value, contEnv.Value) + envCount++ + break + } + } + } + require.Equal(t, len(tt.expectedEnvs), envCount) + }) + } +} diff --git a/pkg/clusteragent/admission/mutate/test_utils.go b/pkg/clusteragent/admission/mutate/test_utils.go index f3f501dcd51abc..f609d06403f96e 100644 --- a/pkg/clusteragent/admission/mutate/test_utils.go +++ b/pkg/clusteragent/admission/mutate/test_utils.go @@ -86,13 +86,15 @@ func fakePodWithLabel(k, v string) *corev1.Pod { } func fakePodWithAnnotation(k, v string) *corev1.Pod { - return &corev1.Pod{ + pod := &corev1.Pod{ ObjectMeta: metav1.ObjectMeta{ + Name: "pod", Annotations: map[string]string{ k: v, }, }, } + return withContainer(pod, "-container") } func fakePodWithEnv(name, env string) *corev1.Pod { diff --git a/pkg/clusteragent/admission/patch/file_provider.go b/pkg/clusteragent/admission/patch/file_provider.go new file mode 100644 index 00000000000000..efa7b6ab6a73de --- /dev/null +++ b/pkg/clusteragent/admission/patch/file_provider.go @@ -0,0 +1,98 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver +// +build kubeapiserver + +package patch + +import ( + "encoding/json" + "os" + "time" + + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +// filePatchProvider this is a stub and will be used for e2e testing only +type filePatchProvider struct { + file string + pollInterval time.Duration + subscribers map[TargetObjKind]chan PatchRequest + lastSuccessfulRefresh time.Time + clusterName string +} + +var _ patchProvider = &filePatchProvider{} + +func newfileProvider(clusterName string) *filePatchProvider { + return &filePatchProvider{ + file: "/etc/datadog-agent/auto-instru.json", + pollInterval: 15 * time.Second, + subscribers: make(map[TargetObjKind]chan PatchRequest), + clusterName: clusterName, + } +} + +func (fpp *filePatchProvider) subscribe(kind TargetObjKind) chan PatchRequest { + ch := make(chan PatchRequest, 10) + fpp.subscribers[kind] = ch + return ch +} + +func (fpp *filePatchProvider) start(stopCh <-chan struct{}) { + ticker := time.NewTicker(fpp.pollInterval) + defer ticker.Stop() + for { + select { + case <-ticker.C: + if err := fpp.refresh(); err != nil { + log.Errorf(err.Error()) + } + case <-stopCh: + log.Info("Shutting down patch provider") + return + } + } +} + +func (fpp *filePatchProvider) refresh() error { + requests, err := fpp.poll() + if err != nil { + return err + } + log.Debugf("Got %d new patch requests", len(requests)) + for _, req := range requests { + if err := req.Validate(fpp.clusterName); err != nil { + log.Errorf("Skipping invalid patch request: %s", err) + continue + } + if ch, found := fpp.subscribers[req.K8sTarget.Kind]; found { + log.Infof("Publishing patch requests for target %s", req.K8sTarget) + ch <- req + } + } + fpp.lastSuccessfulRefresh = time.Now() + return nil +} + +func (fpp *filePatchProvider) poll() ([]PatchRequest, error) { + info, err := os.Stat(fpp.file) + if err != nil { + return nil, err + } + modTime := info.ModTime() + if fpp.lastSuccessfulRefresh.After(modTime) { + log.Debugf("File %q hasn't changed since the last Successful refresh at %v", fpp.file, fpp.lastSuccessfulRefresh) + return []PatchRequest{}, nil + } + content, err := os.ReadFile(fpp.file) + if err != nil { + return nil, err + } + var requests []PatchRequest + err = json.Unmarshal(content, &requests) + return requests, err +} diff --git a/pkg/clusteragent/admission/patch/patch_request.go b/pkg/clusteragent/admission/patch/patch_request.go new file mode 100644 index 00000000000000..084484a9b13588 --- /dev/null +++ b/pkg/clusteragent/admission/patch/patch_request.go @@ -0,0 +1,90 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver +// +build kubeapiserver + +package patch + +import ( + "errors" + "fmt" + + "github.com/DataDog/datadog-agent/pkg/clusteragent/admission/common" +) + +// TargetObjKind represents the supported k8s object kinds +type TargetObjKind string + +const ( + // KindDeployment refers to k8s deployment objects + KindDeployment TargetObjKind = "deployment" +) + +// Action is the action requested in the patch +type Action string + +const ( + // EnableConfig instructs the patcher to apply the patch request + EnableConfig Action = "enable" + // DisableConfig instructs the patcher to disable library injection + DisableConfig Action = "disable" +) + +// PatchRequest holds the required data to target a k8s object and apply library configuration +type PatchRequest struct { + ID string `json:"id"` + Revision int64 `json:"revision"` + SchemaVersion string `json:"schema_version"` + Action Action `json:"action"` + + // Library parameters + LibConfig common.LibConfig `json:"lib_config"` + + // Target k8s object + K8sTarget K8sTarget `json:"k8s_target"` +} + +// Validate returns whether a patch request is applicable +func (pr PatchRequest) Validate(clusterName string) error { + if pr.LibConfig.Language == "" { + return errors.New("library language is empty") + } + if pr.LibConfig.Version == "" { + return errors.New("library version is empty") + } + return pr.K8sTarget.validate(clusterName) +} + +// K8sTarget represent the targetet k8s object +type K8sTarget struct { + Cluster string `json:"cluster"` + Kind TargetObjKind `json:"kind"` + Name string `json:"name"` + Namespace string `json:"namespace"` +} + +// String returns a string representation of the targeted k8s object +func (k K8sTarget) String() string { + return fmt.Sprintf("Obj %s/%s of kind %s", k.Namespace, k.Name, k.Kind) +} + +func (k K8sTarget) validate(clusterName string) error { + if k.Cluster != clusterName { + return fmt.Errorf("target cluster name %q is different from the local one %q", k.Cluster, clusterName) + } + if k.Name == "" { + return errors.New("target object name is empty") + } + if k.Namespace == "" { + return errors.New("target object namespace is empty") + } + switch k.Kind { + case KindDeployment: + default: + return fmt.Errorf("target kind %q is not supported", k.Kind) + } + return nil +} diff --git a/pkg/clusteragent/admission/patch/patch_request_test.go b/pkg/clusteragent/admission/patch/patch_request_test.go new file mode 100644 index 00000000000000..df972089db4c8e --- /dev/null +++ b/pkg/clusteragent/admission/patch/patch_request_test.go @@ -0,0 +1,93 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver +// +build kubeapiserver + +package patch + +import ( + "testing" + + "github.com/DataDog/datadog-agent/pkg/clusteragent/admission/common" + "github.com/stretchr/testify/require" +) + +func TestPatchRequestValidate(t *testing.T) { + tests := []struct { + name string + LibConfig common.LibConfig + K8sTarget K8sTarget + clusterName string + valid bool + }{ + { + name: "valid", + LibConfig: common.LibConfig{Language: "lang", Version: "latest"}, + K8sTarget: K8sTarget{Cluster: "cluster", Kind: "deployment", Name: "name", Namespace: "ns"}, + clusterName: "cluster", + valid: true, + }, + { + name: "empty version", + LibConfig: common.LibConfig{Language: "lang"}, + K8sTarget: K8sTarget{Cluster: "cluster", Kind: "deployment", Name: "name", Namespace: "ns"}, + clusterName: "cluster", + valid: false, + }, + { + name: "empty language", + LibConfig: common.LibConfig{Version: "latest"}, + K8sTarget: K8sTarget{Cluster: "cluster", Kind: "deployment", Name: "name", Namespace: "ns"}, + clusterName: "cluster", + valid: false, + }, + { + name: "empty cluster", + LibConfig: common.LibConfig{Language: "lang", Version: "latest"}, + K8sTarget: K8sTarget{Kind: "deployment", Name: "name", Namespace: "ns"}, + clusterName: "cluster", + valid: false, + }, + { + name: "wrong cluster", + LibConfig: common.LibConfig{Language: "lang", Version: "latest"}, + K8sTarget: K8sTarget{Cluster: "wrong-cluster", Kind: "deployment", Name: "name", Namespace: "ns"}, + clusterName: "cluster", + valid: false, + }, + { + name: "empty kind", + LibConfig: common.LibConfig{Language: "lang", Version: "latest"}, + K8sTarget: K8sTarget{Cluster: "cluster", Name: "name", Namespace: "ns"}, + clusterName: "cluster", + valid: false, + }, + { + name: "empty name", + LibConfig: common.LibConfig{Language: "lang", Version: "latest"}, + K8sTarget: K8sTarget{Cluster: "cluster", Kind: "deployment", Namespace: "ns"}, + clusterName: "cluster", + valid: false, + }, + { + name: "empty namesapce", + LibConfig: common.LibConfig{Language: "lang", Version: "latest"}, + K8sTarget: K8sTarget{Cluster: "cluster", Kind: "deployment", Name: "name"}, + clusterName: "cluster", + valid: false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + pr := PatchRequest{ + LibConfig: tt.LibConfig, + K8sTarget: tt.K8sTarget, + } + err := pr.Validate(tt.clusterName) + require.True(t, (err == nil) == tt.valid) + }) + } +} diff --git a/pkg/clusteragent/admission/patch/patcher.go b/pkg/clusteragent/admission/patch/patcher.go new file mode 100644 index 00000000000000..36c990a28d5f0d --- /dev/null +++ b/pkg/clusteragent/admission/patch/patcher.go @@ -0,0 +1,135 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver +// +build kubeapiserver + +package patch + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/DataDog/datadog-agent/pkg/clusteragent/admission/common" + "github.com/DataDog/datadog-agent/pkg/util/log" + + jsonpatch "github.com/evanphx/json-patch" + corev1 "k8s.io/api/apps/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/kubernetes" +) + +type patcher struct { + k8sClient kubernetes.Interface + isLeader func() bool + deploymentsQueue chan PatchRequest +} + +func newPatcher(k8sClient kubernetes.Interface, isLeaderFunc func() bool, pp patchProvider) *patcher { + return &patcher{ + k8sClient: k8sClient, + isLeader: isLeaderFunc, + deploymentsQueue: pp.subscribe(KindDeployment), + } +} + +func (p *patcher) start(stopCh <-chan struct{}) { + for { + select { + case req := <-p.deploymentsQueue: + if err := p.patchDeployment(req); err != nil { + log.Error(err.Error()) + } + case <-stopCh: + log.Info("Shutting down patcher") + return + } + } +} + +// patchDeployment applies a patch request to a k8s target deployment +func (p *patcher) patchDeployment(req PatchRequest) error { + if !p.isLeader() { + log.Debug("Not leader, skipping") + return nil + } + deploy, err := p.k8sClient.AppsV1().Deployments(req.K8sTarget.Namespace).Get(context.TODO(), req.K8sTarget.Name, metav1.GetOptions{}) + if err != nil { + return err + } + oldObj, err := json.Marshal(deploy) + if err != nil { + return fmt.Errorf("failed to encode object: %v", err) + } + rcIDAnnotKey := fmt.Sprintf(common.RcIDAnnotKeyFormat, req.LibConfig.Language) + rcRevAnnotKey := fmt.Sprintf(common.RcRevisionAnnotKeyFormat, req.LibConfig.Language) + revision := fmt.Sprint(req.Revision) + if deploy.Annotations == nil { + deploy.Annotations = make(map[string]string) + } + if deploy.Annotations[rcIDAnnotKey] == req.ID && deploy.Annotations[rcRevAnnotKey] == revision { + log.Infof("Remote Config ID %q with revision %q has already been applied to object %s, skipping", req.ID, revision, req.K8sTarget) + return nil + } + log.Infof("Applying Remote Config ID %q with revision %q to object %s", req.ID, revision, req.K8sTarget) + switch req.Action { + case EnableConfig: + if err := enableConfig(deploy, req); err != nil { + return err + } + case DisableConfig: + disableConfig(deploy, req) + default: + return fmt.Errorf("unknown action %q", req.Action) + } + deploy.Annotations[rcIDAnnotKey] = req.ID + deploy.Annotations[rcRevAnnotKey] = revision + newObj, err := json.Marshal(deploy) + if err != nil { + return fmt.Errorf("failed to encode object: %v", err) + } + patch, err := jsonpatch.CreateMergePatch(oldObj, newObj) + if err != nil { + return fmt.Errorf("failed to build the JSON patch: %v", err) + } + log.Infof("Patching %s with patch %s", req.K8sTarget, string(patch)) + _, err = p.k8sClient.AppsV1().Deployments(req.K8sTarget.Namespace).Patch(context.TODO(), req.K8sTarget.Name, types.StrategicMergePatchType, patch, metav1.PatchOptions{}) + return err +} + +func enableConfig(deploy *corev1.Deployment, req PatchRequest) error { + if deploy.Spec.Template.Labels == nil { + deploy.Spec.Template.Labels = make(map[string]string) + } + deploy.Spec.Template.Labels[common.EnabledLabelKey] = "true" + if deploy.Spec.Template.Annotations == nil { + deploy.Spec.Template.Annotations = make(map[string]string) + } + versionAnnotKey := fmt.Sprintf(common.LibVersionAnnotKeyFormat, req.LibConfig.Language) + deploy.Spec.Template.Annotations[versionAnnotKey] = req.LibConfig.Version + conf, err := json.Marshal(req.LibConfig) + if err != nil { + return fmt.Errorf("failed to encode library config: %v", err) + } + configAnnotKey := fmt.Sprintf(common.LibConfigV1AnnotKeyFormat, req.LibConfig.Language) + deploy.Spec.Template.Annotations[configAnnotKey] = string(conf) + return nil +} + +func disableConfig(deploy *corev1.Deployment, req PatchRequest) { + if deploy.Spec.Template.Labels == nil { + deploy.Spec.Template.Labels = make(map[string]string) + } + if val, found := deploy.Spec.Template.Labels[common.EnabledLabelKey]; found { + log.Debugf("Found pod label %q=%q in target %s. Setting it to false", common.EnabledLabelKey, val, req.K8sTarget) + } + deploy.Spec.Template.Labels[common.EnabledLabelKey] = "false" + versionAnnotKey := fmt.Sprintf(common.LibVersionAnnotKeyFormat, req.LibConfig.Language) + delete(deploy.Spec.Template.Annotations, versionAnnotKey) + configAnnotKey := fmt.Sprintf(common.LibConfigV1AnnotKeyFormat, req.LibConfig.Language) + delete(deploy.Spec.Template.Annotations, configAnnotKey) +} diff --git a/pkg/clusteragent/admission/patch/patcher_test.go b/pkg/clusteragent/admission/patch/patcher_test.go new file mode 100644 index 00000000000000..529442a4152506 --- /dev/null +++ b/pkg/clusteragent/admission/patch/patcher_test.go @@ -0,0 +1,89 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver +// +build kubeapiserver + +package patch + +import ( + "context" + "testing" + + "github.com/DataDog/datadog-agent/pkg/clusteragent/admission/common" + + "github.com/stretchr/testify/require" + appsv1 "k8s.io/api/apps/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/kubernetes/fake" +) + +func TestPatchDeployment(t *testing.T) { + client := fake.NewSimpleClientset() + name := "target-deploy" + ns := "default" + + // Create target deployment + deploy := appsv1.Deployment{} + deploy.ObjectMeta.Name = name + deploy.ObjectMeta.Namespace = ns + deploy.Spec.Template.Labels = make(map[string]string) + deploy.Spec.Template.Annotations = make(map[string]string) + client.AppsV1().Deployments(ns).Create(context.TODO(), &deploy, metav1.CreateOptions{}) + + // Create patcher + p := patcher{ + k8sClient: client, + isLeader: func() bool { return true }, + } + + // Apply first patch + req := PatchRequest{ + ID: "id", + Revision: 123, + Action: EnableConfig, + K8sTarget: K8sTarget{Kind: KindDeployment, Namespace: ns, Name: name}, + LibConfig: common.LibConfig{Language: "java", Version: "latest"}, + } + require.NoError(t, p.patchDeployment(req)) + + // Check the patch + got, err := client.AppsV1().Deployments(ns).Get(context.TODO(), name, metav1.GetOptions{}) + require.NoError(t, err) + require.Equal(t, got.Spec.Template.Labels["admission.datadoghq.com/enabled"], "true") + require.Equal(t, got.Spec.Template.Annotations["admission.datadoghq.com/java-lib.version"], "latest") + require.Equal(t, got.Spec.Template.Annotations["admission.datadoghq.com/java-lib.config.v1"], `{"library_language":"java","library_version":"latest"}`) + require.Equal(t, got.Annotations["admission.datadoghq.com/java-lib.rc.id"], "id") + require.Equal(t, got.Annotations["admission.datadoghq.com/java-lib.rc.rev"], "123") + + // Patch again to disable lib injection (aka revert) + req.Action = DisableConfig + req.Revision = 1234 + require.NoError(t, p.patchDeployment(req)) + + // Check the new patch + got, err = client.AppsV1().Deployments(ns).Get(context.TODO(), name, metav1.GetOptions{}) + require.NoError(t, err) + require.Equal(t, got.Spec.Template.Labels["admission.datadoghq.com/enabled"], "false") + require.NotContains(t, got.Spec.Template.Annotations, "admission.datadoghq.com/java-lib.version") + require.NotContains(t, got.Spec.Template.Annotations, "admission.datadoghq.com/java-lib.config.v1") + require.Equal(t, got.Annotations["admission.datadoghq.com/java-lib.rc.id"], "id") + require.Equal(t, got.Annotations["admission.datadoghq.com/java-lib.rc.rev"], "1234") + + // Apply a new patch with a new config + req.Action = EnableConfig + req.Revision = 12345 + req.LibConfig = common.LibConfig{Language: "java", Version: "latest", TracingTags: []string{"k1:v1", "k2:v2"}} + require.NoError(t, p.patchDeployment(req)) + + // Check the new patch + got, err = client.AppsV1().Deployments(ns).Get(context.TODO(), name, metav1.GetOptions{}) + require.NoError(t, err) + require.Equal(t, got.Spec.Template.Labels["admission.datadoghq.com/enabled"], "true") + require.Equal(t, got.Spec.Template.Annotations["admission.datadoghq.com/java-lib.version"], "latest") + require.Equal(t, got.Spec.Template.Annotations["admission.datadoghq.com/java-lib.config.v1"], `{"library_language":"java","library_version":"latest","tracing_tags":["k1:v1","k2:v2"]}`) + require.Equal(t, got.Annotations["admission.datadoghq.com/java-lib.rc.id"], "id") + require.Equal(t, got.Annotations["admission.datadoghq.com/java-lib.rc.rev"], "12345") +} diff --git a/pkg/clusteragent/admission/patch/provider.go b/pkg/clusteragent/admission/patch/provider.go new file mode 100644 index 00000000000000..dc0904f9067e35 --- /dev/null +++ b/pkg/clusteragent/admission/patch/provider.go @@ -0,0 +1,32 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver +// +build kubeapiserver + +package patch + +import ( + "errors" + + "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/config/remote" +) + +type patchProvider interface { + start(stopCh <-chan struct{}) + subscribe(kind TargetObjKind) chan PatchRequest +} + +func newPatchProvider(rcClient *remote.Client, isLeaderNotif <-chan struct{}, clusterName string) (patchProvider, error) { + if config.Datadog.GetBool("remote_configuration.enabled") { + return newRemoteConfigProvider(rcClient, isLeaderNotif, clusterName) + } + if config.Datadog.GetBool("admission_controller.auto_instrumentation.patcher.fallback_to_file_provider") { + // Use the file config provider for e2e testing only (it replaces RC as a source of configs) + return newfileProvider(clusterName), nil + } + return nil, errors.New("remote config is disabled") +} diff --git a/pkg/clusteragent/admission/patch/rc_provider.go b/pkg/clusteragent/admission/patch/rc_provider.go new file mode 100644 index 00000000000000..96cb4b52eda967 --- /dev/null +++ b/pkg/clusteragent/admission/patch/rc_provider.go @@ -0,0 +1,86 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver +// +build kubeapiserver + +package patch + +import ( + "encoding/json" + "errors" + + "github.com/DataDog/datadog-agent/pkg/config/remote" + "github.com/DataDog/datadog-agent/pkg/remoteconfig/state" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +// remoteConfigProvider consumes tracing configs from RC and delivers them to the patcher +type remoteConfigProvider struct { + client *remote.Client + isLeaderNotif <-chan struct{} + subscribers map[TargetObjKind]chan PatchRequest + clusterName string +} + +var _ patchProvider = &remoteConfigProvider{} + +func newRemoteConfigProvider(client *remote.Client, isLeaderNotif <-chan struct{}, clusterName string) (*remoteConfigProvider, error) { + if client == nil { + return nil, errors.New("remote config client not initialized") + } + return &remoteConfigProvider{ + client: client, + isLeaderNotif: isLeaderNotif, + subscribers: make(map[TargetObjKind]chan PatchRequest), + clusterName: clusterName, + }, nil +} + +func (rcp *remoteConfigProvider) start(stopCh <-chan struct{}) { + log.Info("Starting remote-config patch provider") + rcp.client.RegisterAPMTracing(rcp.process) + rcp.client.Start() + for { + select { + case <-rcp.isLeaderNotif: + log.Info("Got a leader notification, polling from remote-config") + rcp.process(rcp.client.APMTracingConfigs()) + case <-stopCh: + log.Info("Shutting down remote-config patch provider") + rcp.client.Close() + return + } + } +} + +func (rcp *remoteConfigProvider) subscribe(kind TargetObjKind) chan PatchRequest { + ch := make(chan PatchRequest, 10) + rcp.subscribers[kind] = ch + return ch +} + +// process is the event handler called by the RC client on config updates +func (rcp *remoteConfigProvider) process(update map[string]state.APMTracingConfig) { + log.Infof("Got %d updates from remote-config", len(update)) + for path, config := range update { + log.Debugf("Parsing config %s from path %s", config.Config, path) + var req PatchRequest + err := json.Unmarshal(config.Config, &req) + if err != nil { + log.Errorf("Error while parsing config: %v", err) + continue + } + log.Debugf("Patch request parsed %+v", req) + if err := req.Validate(rcp.clusterName); err != nil { + log.Errorf("Skipping invalid patch request: %s", err) + continue + } + if ch, found := rcp.subscribers[req.K8sTarget.Kind]; found { + log.Debugf("Publishing patch request for target %s", req.K8sTarget) + ch <- req + } + } +} diff --git a/pkg/clusteragent/admission/patch/rc_provider_test.go b/pkg/clusteragent/admission/patch/rc_provider_test.go new file mode 100644 index 00000000000000..078d3d136a2c6b --- /dev/null +++ b/pkg/clusteragent/admission/patch/rc_provider_test.go @@ -0,0 +1,64 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver +// +build kubeapiserver + +package patch + +import ( + "fmt" + "testing" + + "github.com/DataDog/datadog-agent/pkg/config/remote" + "github.com/DataDog/datadog-agent/pkg/remoteconfig/state" + "github.com/stretchr/testify/require" +) + +func TestProcess(t *testing.T) { + genConfig := func(cluster, kind string) []byte { + base := ` +{ + "id": "17945471932432318983", + "revision": 1673513604823158800, + "schema_version": "v1.0.0", + "action": "enable", + "lib_config": { + "library_language": "java", + "library_version": "latest" + }, + "k8s_target": { + "cluster": "%s", + "kind": "%s", + "name": "my-java-app", + "namespace": "default" + } +} +` + return []byte(fmt.Sprintf(base, cluster, kind)) + } + rcp, err := newRemoteConfigProvider(&remote.Client{}, make(chan struct{}), "dev") + require.NoError(t, err) + notifs := rcp.subscribe(KindDeployment) + in := map[string]state.APMTracingConfig{ + "path1": {Config: genConfig("dev", "deployment")}, // valid config + "path2": {Config: []byte("invalid")}, // invalid json + "path3": {Config: genConfig("dev", "wrong")}, // kind mismatch + "path4": {Config: genConfig("wrong", "deployment")}, // cluster mismatch + } + rcp.process(in) + require.Len(t, notifs, 1) + pr := <-notifs + require.Equal(t, "17945471932432318983", pr.ID) + require.Equal(t, int64(1673513604823158800), pr.Revision) + require.Equal(t, "v1.0.0", pr.SchemaVersion) + require.Equal(t, "java", pr.LibConfig.Language) + require.Equal(t, "latest", pr.LibConfig.Version) + require.Equal(t, "dev", pr.K8sTarget.Cluster) + require.Equal(t, KindDeployment, pr.K8sTarget.Kind) + require.Equal(t, "my-java-app", pr.K8sTarget.Name) + require.Equal(t, "default", pr.K8sTarget.Namespace) + require.Len(t, notifs, 0) +} diff --git a/pkg/clusteragent/admission/patch/start.go b/pkg/clusteragent/admission/patch/start.go new file mode 100644 index 00000000000000..2a827a3962bab9 --- /dev/null +++ b/pkg/clusteragent/admission/patch/start.go @@ -0,0 +1,39 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver +// +build kubeapiserver + +package patch + +import ( + "github.com/DataDog/datadog-agent/pkg/config/remote" + "github.com/DataDog/datadog-agent/pkg/util/log" + + "k8s.io/client-go/kubernetes" +) + +// ControllerContext holds necessary context for the patch controller +type ControllerContext struct { + IsLeaderFunc func() bool + LeaderSubscribeFunc func() <-chan struct{} + K8sClient kubernetes.Interface + RcClient *remote.Client + ClusterName string + StopCh chan struct{} +} + +// StartControllers starts the patch controllers +func StartControllers(ctx ControllerContext) error { + log.Info("Starting patch controllers") + provider, err := newPatchProvider(ctx.RcClient, ctx.LeaderSubscribeFunc(), ctx.ClusterName) + if err != nil { + return err + } + patcher := newPatcher(ctx.K8sClient, ctx.IsLeaderFunc, provider) + go provider.start(ctx.StopCh) + go patcher.start(ctx.StopCh) + return nil +} diff --git a/pkg/clusteragent/clusterchecks/dispatcher_nodes.go b/pkg/clusteragent/clusterchecks/dispatcher_nodes.go index d91beadf01c364..16bb58dab50f61 100644 --- a/pkg/clusteragent/clusterchecks/dispatcher_nodes.go +++ b/pkg/clusteragent/clusterchecks/dispatcher_nodes.go @@ -33,7 +33,7 @@ func (d *dispatcher) getClusterCheckConfigs(nodeName string) ([]integration.Conf node.RLock() defer node.RUnlock() - return makeConfigArray(node.digestToConfig), node.configVersion.Load(), nil + return makeConfigArray(node.digestToConfig), node.lastConfigChange, nil } // processNodeStatus keeps the node's status in the store, and returns true @@ -53,7 +53,7 @@ func (d *dispatcher) processNodeStatus(nodeName, clientIP string, status types.N node.lastStatus = status node.heartbeat = timestampNow() - if node.configVersion.Load() == status.LastChange { + if node.lastConfigChange == status.LastChange { // Node-agent is up to date return true, nil } @@ -66,6 +66,7 @@ func (d *dispatcher) processNodeStatus(nodeName, clientIP string, status types.N } // Node-agent needs to pull updated configs + log.Infof("Node %s needs to poll config, cluster config version: %d, node config version: %d", nodeName, node.lastConfigChange, status.LastChange) return false, nil } diff --git a/pkg/clusteragent/clusterchecks/dispatcher_test.go b/pkg/clusteragent/clusterchecks/dispatcher_test.go index 2ff554aadbb71d..8154c2c58bcd31 100644 --- a/pkg/clusteragent/clusterchecks/dispatcher_test.go +++ b/pkg/clusteragent/clusterchecks/dispatcher_test.go @@ -212,9 +212,9 @@ func TestProcessNodeStatus(t *testing.T) { assert.False(t, upToDate) // Give changes - node1.configVersion.Inc() + node1.lastConfigChange = timestampNowNano() node1.heartbeat = node1.heartbeat - 50 - status2 := types.NodeStatus{LastChange: node1.configVersion.Load() - 2} + status2 := types.NodeStatus{LastChange: node1.lastConfigChange - 2} upToDate, err = dispatcher.processNodeStatus("node1", "10.0.0.1", status2) assert.NoError(t, err) assert.False(t, upToDate) @@ -222,7 +222,7 @@ func TestProcessNodeStatus(t *testing.T) { assert.True(t, timestampNow() <= node1.heartbeat+1) // No change - status3 := types.NodeStatus{LastChange: node1.configVersion.Load()} + status3 := types.NodeStatus{LastChange: node1.lastConfigChange} upToDate, err = dispatcher.processNodeStatus("node1", "10.0.0.1", status3) assert.NoError(t, err) assert.True(t, upToDate) diff --git a/pkg/clusteragent/clusterchecks/helpers.go b/pkg/clusteragent/clusterchecks/helpers.go index 6340e66ae627a6..aadac3f6a8bb3e 100644 --- a/pkg/clusteragent/clusterchecks/helpers.go +++ b/pkg/clusteragent/clusterchecks/helpers.go @@ -32,6 +32,10 @@ func makeConfigArray(configMap map[string]integration.Config) []integration.Conf return configSlice } +func timestampNowNano() int64 { + return time.Now().UnixNano() +} + // timestampNow provides a consistent way to keep a seconds timestamp func timestampNow() int64 { return time.Now().Unix() diff --git a/pkg/clusteragent/clusterchecks/stores.go b/pkg/clusteragent/clusterchecks/stores.go index b7beb78bbc7784..059ceb05668b0f 100644 --- a/pkg/clusteragent/clusterchecks/stores.go +++ b/pkg/clusteragent/clusterchecks/stores.go @@ -17,8 +17,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/collector/check" le "github.com/DataDog/datadog-agent/pkg/util/kubernetes/apiserver/leaderelection/metrics" "github.com/DataDog/datadog-agent/pkg/util/log" - - "go.uber.org/atomic" ) // clusterStore holds the state of cluster-check management. @@ -84,20 +82,19 @@ func (s *clusterStore) clearDangling() { // Lock is to be held by the user (dispatcher) type nodeStore struct { sync.RWMutex - name string - heartbeat int64 - lastStatus types.NodeStatus - configVersion *atomic.Int64 - digestToConfig map[string]integration.Config - clientIP string - clcRunnerStats types.CLCRunnersStats - busyness int + name string + heartbeat int64 + lastStatus types.NodeStatus + lastConfigChange int64 + digestToConfig map[string]integration.Config + clientIP string + clcRunnerStats types.CLCRunnersStats + busyness int } func newNodeStore(name, clientIP string) *nodeStore { return &nodeStore{ name: name, - configVersion: atomic.NewInt64(0), clientIP: clientIP, digestToConfig: make(map[string]integration.Config), clcRunnerStats: types.CLCRunnersStats{}, @@ -106,8 +103,8 @@ func newNodeStore(name, clientIP string) *nodeStore { } func (s *nodeStore) addConfig(config integration.Config) { + s.lastConfigChange = timestampNowNano() s.digestToConfig[config.Digest()] = config - s.configVersion.Inc() dispatchedConfigs.Inc(s.name, le.JoinLeaderValue) } @@ -117,8 +114,8 @@ func (s *nodeStore) removeConfig(digest string) { log.Debugf("unknown digest %s, skipping", digest) return } + s.lastConfigChange = timestampNowNano() delete(s.digestToConfig, digest) - s.configVersion.Inc() dispatchedConfigs.Dec(s.name, le.JoinLeaderValue) } diff --git a/pkg/collector/collector_demux_test.go b/pkg/collector/collector_demux_test.go index 9d63d34981460b..5483f51830d81e 100644 --- a/pkg/collector/collector_demux_test.go +++ b/pkg/collector/collector_demux_test.go @@ -6,7 +6,6 @@ //go:build test // +build test - package collector import ( diff --git a/pkg/collector/corechecks/cluster/ksm/kubernetes_state.go b/pkg/collector/corechecks/cluster/ksm/kubernetes_state.go index 80fca971db5e16..cf2e397c2ae471 100644 --- a/pkg/collector/corechecks/cluster/ksm/kubernetes_state.go +++ b/pkg/collector/corechecks/cluster/ksm/kubernetes_state.go @@ -146,6 +146,7 @@ type KSMConfig struct { // KSMCheck wraps the config and the metric stores needed to run the check type KSMCheck struct { core.CheckBase + agentConfig config.Config instance *KSMConfig allStores [][]cache.Store telemetry *telemetryCache @@ -197,6 +198,7 @@ func init() { // Configure prepares the configuration of the KSM check instance func (k *KSMCheck) Configure(integrationConfigDigest uint64, config, initConfig integration.Data, source string) error { k.BuildID(integrationConfigDigest, config, initConfig) + k.agentConfig = ddconfig.Datadog err := k.CommonConfigure(integrationConfigDigest, initConfig, config, source) if err != nil { @@ -713,7 +715,7 @@ func (k *KSMCheck) initTags() { } if !k.instance.DisableGlobalTags { - k.instance.Tags = append(k.instance.Tags, config.GetConfiguredTags(false)...) + k.instance.Tags = append(k.instance.Tags, config.GetConfiguredTags(k.agentConfig, false)...) } } diff --git a/pkg/collector/corechecks/cluster/ksm/kubernetes_state_test.go b/pkg/collector/corechecks/cluster/ksm/kubernetes_state_test.go index 851abd3cd184e3..b517a0d3732173 100644 --- a/pkg/collector/corechecks/cluster/ksm/kubernetes_state_test.go +++ b/pkg/collector/corechecks/cluster/ksm/kubernetes_state_test.go @@ -1359,22 +1359,21 @@ func lenMetrics(metricsToProcess map[string][]ksmstore.DDMetricsFam) int { } func TestKSMCheckInitTags(t *testing.T) { - mockConfig := config.Mock(t) type fields struct { instance *KSMConfig clusterName string } tests := []struct { name string - loadFunc func() - resetFunc func() + loadFunc func(*config.MockConfig) + resetFunc func(*config.MockConfig) fields fields expected []string }{ { name: "with check tags", - loadFunc: func() {}, - resetFunc: func() {}, + loadFunc: func(*config.MockConfig) {}, + resetFunc: func(*config.MockConfig) {}, fields: fields{ instance: &KSMConfig{Tags: []string{"check:tag1", "check:tag2"}}, }, @@ -1382,8 +1381,8 @@ func TestKSMCheckInitTags(t *testing.T) { }, { name: "with cluster name", - loadFunc: func() {}, - resetFunc: func() {}, + loadFunc: func(*config.MockConfig) {}, + resetFunc: func(*config.MockConfig) {}, fields: fields{ instance: &KSMConfig{}, clusterName: "clustername", @@ -1392,15 +1391,15 @@ func TestKSMCheckInitTags(t *testing.T) { }, { name: "with global tags", - loadFunc: func() { mockConfig.Set("tags", []string{"global:tag1", "global:tag2"}) }, - resetFunc: func() { mockConfig.Set("tags", []string{}) }, + loadFunc: func(mockConfig *config.MockConfig) { mockConfig.Set("tags", []string{"global:tag1", "global:tag2"}) }, + resetFunc: func(mockConfig *config.MockConfig) { mockConfig.Set("tags", []string{}) }, fields: fields{instance: &KSMConfig{}}, expected: []string{"global:tag1", "global:tag2"}, }, { name: "with everything", - loadFunc: func() { mockConfig.Set("tags", []string{"global:tag1", "global:tag2"}) }, - resetFunc: func() { mockConfig.Set("tags", []string{}) }, + loadFunc: func(mockConfig *config.MockConfig) { mockConfig.Set("tags", []string{"global:tag1", "global:tag2"}) }, + resetFunc: func(mockConfig *config.MockConfig) { mockConfig.Set("tags", []string{}) }, fields: fields{ instance: &KSMConfig{Tags: []string{"check:tag1", "check:tag2"}}, clusterName: "clustername", @@ -1409,8 +1408,8 @@ func TestKSMCheckInitTags(t *testing.T) { }, { name: "with disable_global_tags", - loadFunc: func() { mockConfig.Set("tags", []string{"global:tag1", "global:tag2"}) }, - resetFunc: func() { mockConfig.Set("tags", []string{}) }, + loadFunc: func(mockConfig *config.MockConfig) { mockConfig.Set("tags", []string{"global:tag1", "global:tag2"}) }, + resetFunc: func(mockConfig *config.MockConfig) { mockConfig.Set("tags", []string{}) }, fields: fields{ instance: &KSMConfig{Tags: []string{"check:tag1", "check:tag2"}, DisableGlobalTags: true}, clusterName: "clustername", @@ -1420,15 +1419,18 @@ func TestKSMCheckInitTags(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { + mockConfig := config.Mock(t) + k := &KSMCheck{ instance: tt.fields.instance, clusterName: tt.fields.clusterName, + agentConfig: mockConfig, } - tt.loadFunc() + tt.loadFunc(mockConfig) k.initTags() assert.ElementsMatch(t, tt.expected, k.instance.Tags) - tt.resetFunc() + tt.resetFunc(mockConfig) }) } } diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/inventory/inventory.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/inventory/inventory.go index b6730019b28fee..4f110e797d8b91 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/collectors/inventory/inventory.go +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/inventory/inventory.go @@ -45,6 +45,7 @@ func NewCollectorInventory() *CollectorInventory { k8sCollectors.NewServiceAccountCollectorVersions(), k8sCollectors.NewStatefulSetCollectorVersions(), k8sCollectors.NewUnassignedPodCollectorVersions(), + k8sCollectors.NewVerticalPodAutoscalerCollectorVersions(), }, } } diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/verticalpodautoscaler.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/verticalpodautoscaler.go new file mode 100644 index 00000000000000..e869b1835e703d --- /dev/null +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/verticalpodautoscaler.go @@ -0,0 +1,104 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver && orchestrator +// +build kubeapiserver,orchestrator + +package k8s + +import ( + "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/collectors" + "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/processors" + k8sProcessors "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/processors/k8s" + "github.com/DataDog/datadog-agent/pkg/orchestrator" + + v1Informers "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions/autoscaling.k8s.io/v1" + v1Listers "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/listers/autoscaling.k8s.io/v1" + + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// NewVerticalPodAutoscalerCollectorVersions builds the group of collector versions. +func NewVerticalPodAutoscalerCollectorVersions() collectors.CollectorVersions { + return collectors.NewCollectorVersions( + NewVerticalPodAutoscalerCollector(), + ) +} + +// VerticalPodAutoscalerCollector is a collector for Kubernetes VPAs. +type VerticalPodAutoscalerCollector struct { + informer v1Informers.VerticalPodAutoscalerInformer + lister v1Listers.VerticalPodAutoscalerLister + metadata *collectors.CollectorMetadata + processor *processors.Processor +} + +// NewVerticalPodAutoscalerCollector creates a new collector for the Kubernetes +// VerticalPodAutoscaler resource. +func NewVerticalPodAutoscalerCollector() *VerticalPodAutoscalerCollector { + return &VerticalPodAutoscalerCollector{ + metadata: &collectors.CollectorMetadata{ + IsDefaultVersion: true, + IsStable: false, + IsMetadataProducer: true, + IsManifestProducer: true, + SupportsManifestBuffering: true, + Name: "verticalpodautoscalers", + NodeType: orchestrator.K8sVerticalPodAutoscaler, + Version: "v1", + }, + processor: processors.NewProcessor(new(k8sProcessors.VerticalPodAutoscalerHandlers)), + } +} + +// Informer returns the shared informer. +func (c *VerticalPodAutoscalerCollector) Informer() cache.SharedInformer { + return c.informer.Informer() +} + +// Init is used to initialize the collector. +func (c *VerticalPodAutoscalerCollector) Init(rcfg *collectors.CollectorRunConfig) { + c.informer = rcfg.APIClient.VPAInformerFactory.Autoscaling().V1().VerticalPodAutoscalers() + c.lister = c.informer.Lister() +} + +// IsAvailable returns whether the collector is available. +func (c *VerticalPodAutoscalerCollector) IsAvailable() bool { return true } + +// Metadata is used to access information about the collector. +func (c *VerticalPodAutoscalerCollector) Metadata() *collectors.CollectorMetadata { + return c.metadata +} + +// Run triggers the collection process. +func (c *VerticalPodAutoscalerCollector) Run(rcfg *collectors.CollectorRunConfig) (*collectors.CollectorRunResult, error) { + list, err := c.lister.List(labels.Everything()) + if err != nil { + return nil, collectors.NewListingError(err) + } + + ctx := &processors.ProcessorContext{ + APIClient: rcfg.APIClient, + Cfg: rcfg.Config, + ClusterID: rcfg.ClusterID, + MsgGroupID: rcfg.MsgGroupRef.Inc(), + NodeType: c.metadata.NodeType, + } + + processResult, processed := c.processor.Process(ctx, list) + + if processed == -1 { + return nil, collectors.ErrProcessingPanic + } + + result := &collectors.CollectorRunResult{ + Result: processResult, + ResourcesListed: len(list), + ResourcesProcessed: processed, + } + + return result, nil +} diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/verticalpodautoscaler.go b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/verticalpodautoscaler.go new file mode 100644 index 00000000000000..1df81328cb5e4d --- /dev/null +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/verticalpodautoscaler.go @@ -0,0 +1,85 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build orchestrator +// +build orchestrator + +package k8s + +import ( + model "github.com/DataDog/agent-payload/v5/process" + "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/processors" + k8sTransformers "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s" + "github.com/DataDog/datadog-agent/pkg/orchestrator/redact" + "k8s.io/apimachinery/pkg/types" + v1 "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1" +) + +// VerticalPodAutoscalerHandlers implements the Handlers interface for Kuberenetes VPAs +type VerticalPodAutoscalerHandlers struct { + BaseHandlers +} + +// AfterMarshalling is a handler called after resource marshalling. +func (h *VerticalPodAutoscalerHandlers) AfterMarshalling(ctx *processors.ProcessorContext, resource, resourceModel interface{}, yaml []byte) (skip bool) { + m := resourceModel.(*model.VerticalPodAutoscaler) + m.Yaml = yaml + return +} + +// BuildMessageBody is a handler called to build a message body out of a list of +// extracted resources. +func (h *VerticalPodAutoscalerHandlers) BuildMessageBody(ctx *processors.ProcessorContext, resourceModels []interface{}, groupSize int) model.MessageBody { + models := make([]*model.VerticalPodAutoscaler, 0, len(resourceModels)) + + for _, m := range resourceModels { + models = append(models, m.(*model.VerticalPodAutoscaler)) + } + + return &model.CollectorVerticalPodAutoscaler{ + ClusterName: ctx.Cfg.KubeClusterName, + ClusterId: ctx.ClusterID, + GroupId: ctx.MsgGroupID, + GroupSize: int32(groupSize), + VerticalPodAutoscalers: models, + Tags: ctx.Cfg.ExtraTags, + } +} + +// ExtractResource is a handler called to extract the resource model out of a raw resource. +func (h *VerticalPodAutoscalerHandlers) ExtractResource(ctx *processors.ProcessorContext, resource interface{}) (verticalPodAutoscalerModel interface{}) { + r := resource.(*v1.VerticalPodAutoscaler) + return k8sTransformers.ExtractVerticalPodAutoscaler(r) +} + +// ResourceList is a handler called to convert a list passed as a generic +// interface to a list of generic interfaces. +func (h *VerticalPodAutoscalerHandlers) ResourceList(ctx *processors.ProcessorContext, list interface{}) (resources []interface{}) { + resourceList := list.([]*v1.VerticalPodAutoscaler) + resources = make([]interface{}, 0, len(resourceList)) + + for _, resource := range resourceList { + resources = append(resources, resource) + } + + return resources +} + +// ResourceUID is a handler called to retrieve the resource UID. +func (h *VerticalPodAutoscalerHandlers) ResourceUID(ctx *processors.ProcessorContext, resource interface{}) types.UID { + return resource.(*v1.VerticalPodAutoscaler).UID +} + +// ResourceVersion is a handler called to retrieve the resource version. +func (h *VerticalPodAutoscalerHandlers) ResourceVersion(ctx *processors.ProcessorContext, resource, resourceModel interface{}) string { + return resource.(*v1.VerticalPodAutoscaler).ResourceVersion +} + +// ScrubBeforeExtraction is a handler called to redact the raw resource before +// it is extracted as an internal resource model. +func (h *VerticalPodAutoscalerHandlers) ScrubBeforeExtraction(ctx *processors.ProcessorContext, resource interface{}) { + r := resource.(*v1.VerticalPodAutoscaler) + redact.RemoveLastAppliedConfigurationAnnotation(r.Annotations) +} diff --git a/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/verticalpodautoscaler.go b/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/verticalpodautoscaler.go new file mode 100644 index 00000000000000..096c8649c68769 --- /dev/null +++ b/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/verticalpodautoscaler.go @@ -0,0 +1,137 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build orchestrator +// +build orchestrator + +package k8s + +import ( + model "github.com/DataDog/agent-payload/v5/process" + "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/transformers" + corev1 "k8s.io/api/core/v1" + v1 "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1" +) + +// ExtractVerticalPodAutoscaler returns the protobuf model corresponding to a Kubernetes Vertical Pod Autoscaler resource. +func ExtractVerticalPodAutoscaler(v *v1.VerticalPodAutoscaler) *model.VerticalPodAutoscaler { + m := &model.VerticalPodAutoscaler{ + Metadata: extractMetadata(&v.ObjectMeta), + Spec: extractVerticalPodAutoscalerSpec(&v.Spec), + Status: extractVerticalPodAutoscalerStatus(&v.Status), + } + m.Tags = append(m.Tags, transformers.RetrieveUnifiedServiceTags(v.ObjectMeta.Labels)...) + return m +} + +// extractVerticalPodAutoscalerSpec converts the Kubernetes spec to our custom one +// https://github.com/kubernetes/autoscaler/blob/master/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1/types.go#L73 +func extractVerticalPodAutoscalerSpec(s *v1.VerticalPodAutoscalerSpec) *model.VerticalPodAutoscalerSpec { + spec := &model.VerticalPodAutoscalerSpec{ + Target: &model.VerticalPodAutoscalerTarget{ + Kind: s.TargetRef.Kind, + Name: s.TargetRef.Name, + }, + ResourcePolicies: extractContainerResourcePolicies(s.ResourcePolicy), + } + if s.UpdatePolicy != nil && s.UpdatePolicy.UpdateMode != nil { + spec.UpdateMode = string(*s.UpdatePolicy.UpdateMode) + } + return spec +} + +// extractContainerResourcePolicy pulls the ContainerResourcePolicy out of PodResourcePolicy +// and converts it to our protobuf model +// https://github.com/kubernetes/autoscaler/blob/master/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1/types.go#L149 +func extractContainerResourcePolicies(p *v1.PodResourcePolicy) []*model.ContainerResourcePolicy { + policies := []*model.ContainerResourcePolicy{} + + for _, policy := range p.ContainerPolicies { + m := model.ContainerResourcePolicy{ + ContainerName: policy.ContainerName, + MinAllowed: extractResourceList(&policy.MinAllowed), + MaxAllowed: extractResourceList(&policy.MaxAllowed), + ControlledResource: extractControlledResources(policy.ControlledResources), + } + if policy.Mode != nil { + m.Mode = string(*policy.Mode) + } + if policy.ControlledValues != nil { + m.ControlledValues = string(*policy.ControlledValues) + } + policies = append(policies, &m) + } + return policies +} + +// extractResourceList converts Kuberentes ResourceLists to our protobuf model +// https://github.com/kubernetes/api/blob/v0.23.8/core/v1/types.go#L5176 +func extractResourceList(rl *corev1.ResourceList) *model.ResourceList { + if rl == nil { + return &model.ResourceList{} + } + + mv := map[string]float64{} + for name, quantity := range *rl { + value, valid := quantity.AsInt64() + if valid { + mv[string(name)] = float64(value) + } else { + mv[string(name)] = quantity.ToDec().AsApproximateFloat64() + } + } + return &model.ResourceList{ + MetricValues: mv, + } +} + +// extractControlledResources converts typed Kuberentes ResourceNames to a slice of strings +// https://github.com/kubernetes/api/blob/v0.23.8/core/v1/types.go#L5147 +func extractControlledResources(rn *[]corev1.ResourceName) []string { + if rn == nil { + return []string{} + } + + names := []string{} + for _, name := range *rn { + names = append(names, string(name)) + } + return names +} + +// extractVerticalPodAutoscalerStatus converts Kubernetes PodAutoscalerStatus to our protobuf model +// https://github.com/kubernetes/autoscaler/blob/master/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1/types.go#L218 +func extractVerticalPodAutoscalerStatus(s *v1.VerticalPodAutoscalerStatus) *model.VerticalPodAutoscalerStatus { + if s == nil { + return &model.VerticalPodAutoscalerStatus{} + } + + status := model.VerticalPodAutoscalerStatus{} + for _, condition := range s.Conditions { + if condition.Type == v1.RecommendationProvided && + condition.Status == corev1.ConditionTrue { + status.LastRecommendedDate = condition.LastTransitionTime.Unix() + } + } + status.Recommendations = extractContainerRecommendations(s.Recommendation.ContainerRecommendations) + return &status +} + +// extractContainerRecommendations converts Kuberentes Recommendations to our protobuf model +// https://github.com/kubernetes/autoscaler/blob/master/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1/types.go#L245 +func extractContainerRecommendations(cr []v1.RecommendedContainerResources) []*model.ContainerRecommendations { + recs := []*model.ContainerRecommendations{} + for _, r := range cr { + rec := model.ContainerRecommendations{ + ContainerName: r.ContainerName, + Target: extractResourceList(&r.Target), + LowerBound: extractResourceList(&r.LowerBound), + UpperBound: extractResourceList(&r.UpperBound), + UncappedTarget: extractResourceList(&r.UncappedTarget), + } + recs = append(recs, &rec) + } + return recs +} diff --git a/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/verticalpodautoscaler_test.go b/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/verticalpodautoscaler_test.go new file mode 100644 index 00000000000000..5c18bf349cb467 --- /dev/null +++ b/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/verticalpodautoscaler_test.go @@ -0,0 +1,184 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build orchestrator +// +build orchestrator + +package k8s + +import ( + "testing" + "time" + + model "github.com/DataDog/agent-payload/v5/process" + "github.com/stretchr/testify/assert" + autoscaling "k8s.io/api/autoscaling/v1" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + v1 "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1" +) + +func TestExtractVerticalPodAutoscaler(t *testing.T) { + exampleTime := metav1.NewTime(time.Date(2021, time.April, 16, 14, 30, 0, 0, time.UTC)) + mode := v1.ContainerScalingModeAuto + updateMode := v1.UpdateModeOff + controlledValues := v1.ContainerControlledValuesRequestsAndLimits + + tests := map[string]struct { + input v1.VerticalPodAutoscaler + expected model.VerticalPodAutoscaler + }{ + "standard": { + input: v1.VerticalPodAutoscaler{ + TypeMeta: metav1.TypeMeta{}, + ObjectMeta: metav1.ObjectMeta{ + Name: "VPATest", + Namespace: "Namespace", + UID: "326331f4-77e2-11ed-a1eb-0242ac120002", + CreationTimestamp: exampleTime, + DeletionTimestamp: &exampleTime, + Labels: map[string]string{ + "app": "my-app", + }, + Annotations: map[string]string{ + "annotation": "my-annotation", + }, + Finalizers: []string{"final", "izers"}, + }, + Spec: v1.VerticalPodAutoscalerSpec{ + TargetRef: &autoscaling.CrossVersionObjectReference{ + Kind: "Deployment", + Name: "My Service", + }, + UpdatePolicy: &v1.PodUpdatePolicy{ + UpdateMode: &updateMode, + }, + ResourcePolicy: &v1.PodResourcePolicy{ + ContainerPolicies: []v1.ContainerResourcePolicy{ + { + ContainerName: "TestContainer", + Mode: &mode, + MinAllowed: map[corev1.ResourceName]resource.Quantity{ + corev1.ResourceCPU: resource.MustParse("12345"), + }, + MaxAllowed: map[corev1.ResourceName]resource.Quantity{ + corev1.ResourceMemory: resource.MustParse("6789"), + }, + ControlledResources: &[]corev1.ResourceName{ + corev1.ResourceCPU, + }, + ControlledValues: &controlledValues, + }, + }, + }, + Recommenders: []*v1.VerticalPodAutoscalerRecommenderSelector{ + { + Name: "Test", + }, + }, + }, + Status: v1.VerticalPodAutoscalerStatus{ + Recommendation: &v1.RecommendedPodResources{ + ContainerRecommendations: []v1.RecommendedContainerResources{ + { + ContainerName: "TestContainer", + Target: map[corev1.ResourceName]resource.Quantity{ + corev1.ResourceCPU: resource.MustParse("2"), + }, + LowerBound: map[corev1.ResourceName]resource.Quantity{ + corev1.ResourceCPU: resource.MustParse("1"), + }, + UpperBound: map[corev1.ResourceName]resource.Quantity{ + corev1.ResourceCPU: resource.MustParse("3"), + }, + UncappedTarget: map[corev1.ResourceName]resource.Quantity{ + corev1.ResourceCPU: resource.MustParse("4"), + }, + }, + }, + }, + Conditions: []v1.VerticalPodAutoscalerCondition{ + { + Type: v1.RecommendationProvided, + Status: corev1.ConditionTrue, + LastTransitionTime: exampleTime, + }, + }, + }, + }, + expected: model.VerticalPodAutoscaler{ + Metadata: &model.Metadata{ + Name: "VPATest", + Namespace: "Namespace", + Uid: "326331f4-77e2-11ed-a1eb-0242ac120002", + CreationTimestamp: exampleTime.Unix(), + DeletionTimestamp: exampleTime.Unix(), + Labels: []string{"app:my-app"}, + Annotations: []string{"annotation:my-annotation"}, + Finalizers: []string{"final", "izers"}, + }, + Spec: &model.VerticalPodAutoscalerSpec{ + Target: &model.VerticalPodAutoscalerTarget{ + Kind: "Deployment", + Name: "My Service", + }, + UpdateMode: string(updateMode), + ResourcePolicies: []*model.ContainerResourcePolicy{ + { + ContainerName: "TestContainer", + Mode: string(mode), + MinAllowed: &model.ResourceList{ + MetricValues: map[string]float64{ + "cpu": float64(12345), + }, + }, + MaxAllowed: &model.ResourceList{ + MetricValues: map[string]float64{ + "memory": float64(6789), + }, + }, + ControlledResource: []string{"cpu"}, + ControlledValues: string(controlledValues), + }, + }, + }, + Status: &model.VerticalPodAutoscalerStatus{ + LastRecommendedDate: exampleTime.Unix(), + Recommendations: []*model.ContainerRecommendations{ + { + ContainerName: "TestContainer", + Target: &model.ResourceList{ + MetricValues: map[string]float64{ + "cpu": float64(2), + }, + }, + LowerBound: &model.ResourceList{ + MetricValues: map[string]float64{ + "cpu": float64(1), + }, + }, + UpperBound: &model.ResourceList{ + MetricValues: map[string]float64{ + "cpu": float64(3), + }, + }, + UncappedTarget: &model.ResourceList{ + MetricValues: map[string]float64{ + "cpu": float64(4), + }, + }, + }, + }, + }, + }, + }, + } + for name, tc := range tests { + t.Run(name, func(t *testing.T) { + assert.Equal(t, &tc.expected, ExtractVerticalPodAutoscaler(&tc.input)) + }) + } +} diff --git a/pkg/collector/corechecks/containerimage/check.go b/pkg/collector/corechecks/containerimage/check.go new file mode 100644 index 00000000000000..15f1fdcebf464d --- /dev/null +++ b/pkg/collector/corechecks/containerimage/check.go @@ -0,0 +1,166 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package containerimage + +import ( + "errors" + "time" + + yaml "gopkg.in/yaml.v2" + + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" + "github.com/DataDog/datadog-agent/pkg/collector/check" + core "github.com/DataDog/datadog-agent/pkg/collector/corechecks" + ddConfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/workloadmeta" +) + +const ( + checkName = "container_image" +) + +func init() { + core.RegisterCheck(checkName, CheckFactory) +} + +// Config holds the container_image check configuration +type Config struct { + chunkSize int `yaml:"chunk_size"` + newImagesMaxLatencySeconds int `yaml:"new_images_max_latency_seconds"` + periodicRefreshSeconds int `yaml:"periodic_refresh_seconds"` +} + +type configValueRange struct { + min int + max int + default_ int +} + +var /* const */ ( + chunkSizeValueRange = &configValueRange{ + min: 1, + max: 100, + default_: 10, + } + + newImagesMaxLatencySecondsValueRange = &configValueRange{ + min: 1, // 1 s + max: 300, // 5 min + default_: 30, // 30 s + } + + periodicRefreshSecondsValueRange = &configValueRange{ + min: 60, // 1 min + max: 86400, // 1 day + default_: 300, // 5 min + } +) + +func validateValue(val *int, range_ *configValueRange) { + if *val == 0 { + *val = range_.default_ + } else if *val < range_.min { + *val = range_.min + } else if *val > range_.max { + *val = range_.max + } +} + +func (c *Config) Parse(data []byte) error { + if err := yaml.Unmarshal(data, c); err != nil { + return err + } + + validateValue(&c.chunkSize, chunkSizeValueRange) + validateValue(&c.newImagesMaxLatencySeconds, newImagesMaxLatencySecondsValueRange) + validateValue(&c.periodicRefreshSeconds, periodicRefreshSecondsValueRange) + + return nil +} + +// Check reports container images +type Check struct { + core.CheckBase + workloadmetaStore workloadmeta.Store + instance *Config + processor *processor + stopCh chan struct{} +} + +// CheckFactory registers the container_image check +func CheckFactory() check.Check { + return &Check{ + CheckBase: core.NewCheckBase(checkName), + workloadmetaStore: workloadmeta.GetGlobalStore(), + instance: &Config{}, + stopCh: make(chan struct{}), + } +} + +// Configure parses the check configuration and initializes the container_image check +func (c *Check) Configure(integrationConfigDigest uint64, config, initConfig integration.Data, source string) error { + if !ddConfig.Datadog.GetBool("container_image.enabled") { + return errors.New("collection of container images is disabled") + } + + if err := c.CommonConfigure(integrationConfigDigest, initConfig, config, source); err != nil { + return err + } + + if err := c.instance.Parse(config); err != nil { + return err + } + + sender, err := c.GetSender() + if err != nil { + return err + } + + c.processor = newProcessor(sender, c.instance.chunkSize, time.Duration(c.instance.newImagesMaxLatencySeconds)*time.Second) + + return nil +} + +// Run starts the container_image check +func (c *Check) Run() error { + log.Infof("Starting long-running check %q", c.ID()) + defer log.Infof("Shutting down long-running check %q", c.ID()) + + imgEventsCh := c.workloadmetaStore.Subscribe( + checkName, + workloadmeta.NormalPriority, + workloadmeta.NewFilter( + []workloadmeta.Kind{workloadmeta.KindContainerImageMetadata}, + workloadmeta.SourceAll, + workloadmeta.EventTypeSet, // We don’t care about images removal because we just have to wait for them to expire on BE side once we stopped refreshing them periodically. + ), + ) + + imgRefreshTicker := time.NewTicker(time.Duration(c.instance.periodicRefreshSeconds) * time.Second) + + for { + select { + case eventBundle := <-imgEventsCh: + c.processor.processEvents(eventBundle) + case <-imgRefreshTicker.C: + c.processor.processRefresh(c.workloadmetaStore.ListImages()) + case <-c.stopCh: + c.processor.stop() + return nil + } + } +} + +// Stop stops the container_image check +func (c *Check) Stop() { + close(c.stopCh) +} + +// Interval returns 0. It makes container_image a long-running check +func (c *Check) Interval() time.Duration { + return 0 +} diff --git a/pkg/collector/corechecks/containerimage/processor.go b/pkg/collector/corechecks/containerimage/processor.go new file mode 100644 index 00000000000000..64defa7e53ee7c --- /dev/null +++ b/pkg/collector/corechecks/containerimage/processor.go @@ -0,0 +1,85 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package containerimage + +import ( + "time" + + "github.com/DataDog/datadog-agent/pkg/aggregator" + queue "github.com/DataDog/datadog-agent/pkg/util/aggregatingqueue" + "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/workloadmeta" + + "github.com/DataDog/agent-payload/v5/contimage" + model "github.com/DataDog/agent-payload/v5/contimage" +) + +type processor struct { + queue chan *model.ContainerImage +} + +func newProcessor(sender aggregator.Sender, maxNbItem int, maxRetentionTime time.Duration) *processor { + return &processor{ + queue: queue.NewQueue(maxNbItem, maxRetentionTime, func(images []*model.ContainerImage) { + sender.ContainerImage([]contimage.ContainerImagePayload{ + { + Version: "v1", + Images: images, + }, + }) + }), + } +} + +func (p *processor) processEvents(evBundle workloadmeta.EventBundle) { + close(evBundle.Ch) + + log.Tracef("Processing %d events", len(evBundle.Events)) + + for _, event := range evBundle.Events { + p.processImage(event.Entity.(*workloadmeta.ContainerImageMetadata)) + } +} + +func (p *processor) processRefresh(allImages []*workloadmeta.ContainerImageMetadata) { + // So far, the check is refreshing all the images every 5 minutes all together. + for _, img := range allImages { + p.processImage(img) + } +} + +func (p *processor) processImage(img *workloadmeta.ContainerImageMetadata) { + layers := make([]*model.ContainerImage_ContainerImageLayer, 0, len(img.Layers)) + for _, layer := range img.Layers { + layers = append(layers, &model.ContainerImage_ContainerImageLayer{ + Urls: layer.URLs, + MediaType: layer.MediaType, + Digest: layer.Digest, + Size: layer.SizeBytes, + }) + } + + p.queue <- &model.ContainerImage{ + Id: img.ID, + Name: img.Name, + Registry: img.Registry, + ShortName: img.ShortName, + Tags: img.RepoTags, + Digest: img.ID, + Size: img.SizeBytes, + RepoDigests: img.RepoDigests, + Os: &model.ContainerImage_OperatingSystem{ + Name: img.OS, + Version: img.OSVersion, + Architecture: img.Architecture, + }, + Layers: layers, + } +} + +func (p *processor) stop() { + close(p.queue) +} diff --git a/pkg/collector/corechecks/containerimage/processor_test.go b/pkg/collector/corechecks/containerimage/processor_test.go new file mode 100644 index 00000000000000..771956ed9f6a6a --- /dev/null +++ b/pkg/collector/corechecks/containerimage/processor_test.go @@ -0,0 +1,166 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package containerimage + +import ( + "fmt" + "strconv" + "testing" + "time" + + model "github.com/DataDog/agent-payload/v5/contimage" + "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" + "github.com/DataDog/datadog-agent/pkg/collector/check" + "github.com/DataDog/datadog-agent/pkg/workloadmeta" + "github.com/stretchr/testify/mock" +) + +func TestProcessEvents(t *testing.T) { + sender := mocksender.NewMockSender(check.ID("")) + sender.On("ContainerImage", mock.Anything, mock.Anything).Return() + p := newProcessor(sender, 2, 50*time.Millisecond) + + for i := 0; i < 3; i++ { + p.processEvents(workloadmeta.EventBundle{ + Events: []workloadmeta.Event{ + { + Type: workloadmeta.EventTypeSet, + Entity: &workloadmeta.ContainerImageMetadata{ + EntityID: workloadmeta.EntityID{ + Kind: workloadmeta.KindContainerImageMetadata, + ID: strconv.Itoa(i), + }, + ShortName: fmt.Sprintf("short_name_%d", i), + RepoTags: []string{"tag_1", "tag_2"}, + RepoDigests: []string{fmt.Sprintf("digest_%d", i)}, + SizeBytes: 42, + OS: "DOS", + OSVersion: "6.22", + Architecture: "80486DX", + Layers: []workloadmeta.ContainerImageLayer{ + { + MediaType: "media", + Digest: fmt.Sprintf("digest_layer_1_%d", i), + SizeBytes: 43, + URLs: []string{"url"}, + }, + { + MediaType: "media", + Digest: fmt.Sprintf("digest_layer_2_%d", i), + URLs: []string{"url"}, + SizeBytes: 44, + }, + }, + }, + }, + }, + Ch: make(chan struct{}), + }) + } + + sender.AssertNumberOfCalls(t, "ContainerImage", 1) + sender.AssertContainerImage(t, []model.ContainerImagePayload{ + { + Version: "v1", + Images: []*model.ContainerImage{ + { + Id: "0", + ShortName: "short_name_0", + Tags: []string{"tag_1", "tag_2"}, + Digest: "0", + Size: 42, + RepoDigests: []string{"digest_0"}, + Os: &model.ContainerImage_OperatingSystem{ + Name: "DOS", + Version: "6.22", + Architecture: "80486DX", + }, + Layers: []*model.ContainerImage_ContainerImageLayer{ + { + Urls: []string{"url"}, + MediaType: "media", + Digest: "digest_layer_1_0", + Size: 43, + }, + { + Urls: []string{"url"}, + MediaType: "media", + Digest: "digest_layer_2_0", + Size: 44, + }, + }, + }, + { + Id: "1", + ShortName: "short_name_1", + Tags: []string{"tag_1", "tag_2"}, + Digest: "1", + Size: 42, + RepoDigests: []string{"digest_1"}, + Os: &model.ContainerImage_OperatingSystem{ + Name: "DOS", + Version: "6.22", + Architecture: "80486DX", + }, + Layers: []*model.ContainerImage_ContainerImageLayer{ + { + Urls: []string{"url"}, + MediaType: "media", + Digest: "digest_layer_1_1", + Size: 43, + }, + { + Urls: []string{"url"}, + MediaType: "media", + Digest: "digest_layer_2_1", + Size: 44, + }, + }, + }, + }, + }, + }) + + time.Sleep(100 * time.Millisecond) + + sender.AssertNumberOfCalls(t, "ContainerImage", 2) + sender.AssertContainerImage(t, []model.ContainerImagePayload{ + { + Version: "v1", + Images: []*model.ContainerImage{ + { + Id: "2", + ShortName: "short_name_2", + Tags: []string{"tag_1", "tag_2"}, + Digest: "2", + Size: 42, + RepoDigests: []string{"digest_2"}, + Os: &model.ContainerImage_OperatingSystem{ + Name: "DOS", + Version: "6.22", + Architecture: "80486DX", + }, + Layers: []*model.ContainerImage_ContainerImageLayer{ + { + Urls: []string{"url"}, + MediaType: "media", + Digest: "digest_layer_1_2", + Size: 43, + }, + { + Urls: []string{"url"}, + MediaType: "media", + Digest: "digest_layer_2_2", + Size: 44, + }, + }, + }, + }, + }, + }) + + p.stop() +} diff --git a/pkg/collector/corechecks/containers/containerd/utils.go b/pkg/collector/corechecks/containers/containerd/utils.go index 13f385bc0d838a..9bd5c48863dc42 100644 --- a/pkg/collector/corechecks/containers/containerd/utils.go +++ b/pkg/collector/corechecks/containers/containerd/utils.go @@ -27,7 +27,7 @@ func getProcessorFilter(legacyFilter *containers.Filter) generic.ContainerFilter } func getImageTags(imageName string) []string { - long, short, tag, err := containers.SplitImageName(imageName) + long, _, short, tag, err := containers.SplitImageName(imageName) if err != nil { return []string{fmt.Sprintf("image:%s", imageName)} } diff --git a/pkg/collector/corechecks/containers/docker/utils.go b/pkg/collector/corechecks/containers/docker/utils.go index b5a449dde440bd..49d76d2f77923f 100644 --- a/pkg/collector/corechecks/containers/docker/utils.go +++ b/pkg/collector/corechecks/containers/docker/utils.go @@ -42,7 +42,7 @@ func getImageTagsFromContainer(taggerEntityID string, resolvedImageName string, } func getImageTags(imageName string) ([]string, error) { - long, short, tag, err := containers.SplitImageName(imageName) + long, _, short, tag, err := containers.SplitImageName(imageName) if err != nil { return nil, err } diff --git a/pkg/collector/corechecks/ebpf/c/runtime/cgroup.h b/pkg/collector/corechecks/ebpf/c/runtime/cgroup.h index f3f225f5535144..3ddc3d994dc2bc 100644 --- a/pkg/collector/corechecks/ebpf/c/runtime/cgroup.h +++ b/pkg/collector/corechecks/ebpf/c/runtime/cgroup.h @@ -10,7 +10,7 @@ static __always_inline int get_cgroup_name(char *buf, size_t sz) { if (!bpf_helper_exists(BPF_FUNC_get_current_task)) { - return -1; + return 0; } __builtin_memset(buf, 0, sz); struct task_struct *cur_tsk = (struct task_struct *)bpf_get_current_task(); @@ -25,10 +25,10 @@ static __always_inline int get_cgroup_name(char *buf, size_t sz) { #endif const char *name = BPF_CORE_READ(cur_tsk, cgroups, subsys[cgrp_id], cgroup, kn, name); if (bpf_probe_read_kernel_str(buf, sz, name) < 0) { - return -1; + return 0; } - return 0; + return 1; } #endif /* defined(BPF_CGROUP_H) */ diff --git a/pkg/collector/corechecks/ebpf/c/runtime/tcp-queue-length-kern-user.h b/pkg/collector/corechecks/ebpf/c/runtime/tcp-queue-length-kern-user.h index 14b048d23b6a49..5bc7c44c34d4c3 100644 --- a/pkg/collector/corechecks/ebpf/c/runtime/tcp-queue-length-kern-user.h +++ b/pkg/collector/corechecks/ebpf/c/runtime/tcp-queue-length-kern-user.h @@ -1,7 +1,7 @@ #ifndef TCP_QUEUE_LENGTH_KERN_USER_H #define TCP_QUEUE_LENGTH_KERN_USER_H -#include +#include "ktypes.h" struct stats_key { char cgroup_name[129]; diff --git a/pkg/collector/corechecks/ebpf/c/runtime/tcp-queue-length-kern.c b/pkg/collector/corechecks/ebpf/c/runtime/tcp-queue-length-kern.c index 02c0267655d7e5..9bacfd2d633cd8 100644 --- a/pkg/collector/corechecks/ebpf/c/runtime/tcp-queue-length-kern.c +++ b/pkg/collector/corechecks/ebpf/c/runtime/tcp-queue-length-kern.c @@ -1,16 +1,21 @@ -#include "kconfig.h" #include "ktypes.h" -#include -#include "bpf_helpers.h" -#include "map-defs.h" -#include "cgroup.h" -#include "tcp-queue-length-kern-user.h" +#ifdef COMPILE_RUNTIME +#include "kconfig.h" +#include #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 8, 0) // 4.8 is the first version where `bpf_get_current_task` is available #error Versions of Linux previous to 4.8.0 are not supported by this probe #endif +#endif + +#include "tcp-queue-length-kern-user.h" +#include "cgroup.h" + +#include "bpf_tracing.h" +#include "bpf_core_read.h" +#include "map-defs.h" /* * The `tcp_queue_stats` map is used to share with the userland program system-probe @@ -26,7 +31,6 @@ BPF_HASH_MAP(who_recvmsg, u64, struct sock *, 100) BPF_HASH_MAP(who_sendmsg, u64, struct sock *, 100) -// TODO: replace all `bpf_probe_read` by `bpf_probe_read_kernel` once we can assume that we have at least kernel 5.5 static __always_inline int check_sock(struct sock *sk) { struct stats_value zero = { .read_buffer_max_usage = 0, @@ -34,7 +38,9 @@ static __always_inline int check_sock(struct sock *sk) { }; struct stats_key k; - get_cgroup_name(k.cgroup_name, sizeof(k.cgroup_name)); + if (!get_cgroup_name(k.cgroup_name, sizeof(k.cgroup_name))) { + return 0; + } bpf_map_update_elem(&tcp_queue_stats, &k, &zero, BPF_NOEXIST); struct stats_value *v = bpf_map_lookup_elem(&tcp_queue_stats, &k); @@ -42,55 +48,55 @@ static __always_inline int check_sock(struct sock *sk) { return 0; } - int rqueue_size, wqueue_size; - bpf_probe_read(&rqueue_size, sizeof(rqueue_size), (void *)&sk->sk_rcvbuf); - bpf_probe_read(&wqueue_size, sizeof(wqueue_size), (void *)&sk->sk_sndbuf); + int rqueue_size = BPF_CORE_READ(sk, sk_rcvbuf); + int wqueue_size = BPF_CORE_READ(sk, sk_sndbuf); - const struct tcp_sock *tp = tcp_sk(sk); - u32 rcv_nxt, copied_seq, write_seq, snd_una; - bpf_probe_read(&rcv_nxt, sizeof(rcv_nxt), (void *)&tp->rcv_nxt); // What we want to receive next - bpf_probe_read(&copied_seq, sizeof(copied_seq), (void *)&tp->copied_seq); // Head of yet unread data - bpf_probe_read(&write_seq, sizeof(write_seq), (void *)&tp->write_seq); // Tail(+1) of data held in tcp send buffer - bpf_probe_read(&snd_una, sizeof(snd_una), (void *)&tp->snd_una); // First byte we want an ack for + const struct tcp_sock *tp = (struct tcp_sock *)sk; + u32 rcv_nxt = BPF_CORE_READ(tp, rcv_nxt); // What we want to receive next + u32 copied_seq = BPF_CORE_READ(tp, copied_seq); // Head of yet unread data + u32 write_seq = BPF_CORE_READ(tp, write_seq); // Tail(+1) of data held in tcp send buffer + u32 snd_una = BPF_CORE_READ(tp, snd_una); // First byte we want an ack for u32 rqueue = rcv_nxt < copied_seq ? 0 : rcv_nxt - copied_seq; - if (rqueue < 0) + if (rqueue < 0) { rqueue = 0; + } u32 wqueue = write_seq - snd_una; u32 rqueue_usage = 1000 * rqueue / rqueue_size; u32 wqueue_usage = 1000 * wqueue / wqueue_size; - if (rqueue_usage > v->read_buffer_max_usage) + if (rqueue_usage > v->read_buffer_max_usage) { v->read_buffer_max_usage = rqueue_usage; - if (wqueue_usage > v->write_buffer_max_usage) + } + if (wqueue_usage > v->write_buffer_max_usage) { v->write_buffer_max_usage = wqueue_usage; + } return 0; } SEC("kprobe/tcp_recvmsg") -int kprobe__tcp_recvmsg(struct pt_regs *ctx) { - struct sock *sk = (struct sock*)PT_REGS_PARM1(ctx); +int BPF_KPROBE(kprobe__tcp_recvmsg, struct sock *sk) { u64 pid_tgid = bpf_get_current_pid_tgid(); bpf_map_update_elem(&who_recvmsg, &pid_tgid, &sk, BPF_ANY); return check_sock(sk); } SEC("kretprobe/tcp_recvmsg") -int kretprobe__tcp_recvmsg(struct pt_regs *ctx) { +int BPF_KRETPROBE(kretprobe__tcp_recvmsg) { u64 pid_tgid = bpf_get_current_pid_tgid(); struct sock **sk = bpf_map_lookup_elem(&who_recvmsg, &pid_tgid); bpf_map_delete_elem(&who_recvmsg, &pid_tgid); - if (sk) + if (sk) { return check_sock(*sk); + } return 0; } SEC("kprobe/tcp_sendmsg") -int kprobe__tcp_sendmsg(struct pt_regs *ctx) { - struct sock *sk = (struct sock*)PT_REGS_PARM1(ctx); +int BPF_KPROBE(kprobe__tcp_sendmsg, struct sock *sk) { u64 pid_tgid = bpf_get_current_pid_tgid(); bpf_map_update_elem(&who_sendmsg, &pid_tgid, &sk, BPF_ANY); @@ -98,17 +104,16 @@ int kprobe__tcp_sendmsg(struct pt_regs *ctx) { } SEC("kretprobe/tcp_sendmsg") -int kretprobe__tcp_sendmsg(struct pt_regs *ctx) { +int BPF_KRETPROBE(kretprobe__tcp_sendmsg) { u64 pid_tgid = bpf_get_current_pid_tgid(); struct sock **sk = bpf_map_lookup_elem(&who_sendmsg, &pid_tgid); bpf_map_delete_elem(&who_sendmsg, &pid_tgid); - if (sk) + if (sk) { return check_sock(*sk); + } return 0; } -// This number will be interpreted by elf-loader to set the current running kernel version -__u32 _version SEC("version") = 0xFFFFFFFE; // NOLINT(bugprone-reserved-identifier) - -char _license[] SEC("license") = "GPL"; // NOLINT(bugprone-reserved-identifier) +__u32 _version SEC("version") = 0xFFFFFFFE; +char _license[] SEC("license") = "GPL"; diff --git a/pkg/collector/corechecks/ebpf/probe/oom_kill.go b/pkg/collector/corechecks/ebpf/probe/oom_kill.go index 46392b04ee14d6..5cf784701b3b59 100644 --- a/pkg/collector/corechecks/ebpf/probe/oom_kill.go +++ b/pkg/collector/corechecks/ebpf/probe/oom_kill.go @@ -45,21 +45,21 @@ type OOMKillProbe struct { func NewOOMKillProbe(cfg *ebpf.Config) (*OOMKillProbe, error) { if cfg.EnableCORE { - probe, err := loadCOREProbe(cfg) + probe, err := loadOOMKillCOREProbe(cfg) if err == nil { - return probe, err + return probe, nil } if !cfg.AllowRuntimeCompiledFallback { - return nil, fmt.Errorf("error loading CO-RE oom-kill probe: %s. set system_probe_config.allow_runtime_compiled_fallback to true to allow fallback to runtime compilation.", err) + return nil, fmt.Errorf("error loading CO-RE oom-kill probe: %s. set system_probe_config.allow_runtime_compiled_fallback to true to allow fallback to runtime compilation", err) } log.Warnf("error loading CO-RE oom-kill probe: %s. falling back to runtime compiled probe", err) } - return loadRuntimeCompiledProbe(cfg) + return loadOOMKillRuntimeCompiledProbe(cfg) } -func loadCOREProbe(cfg *ebpf.Config) (*OOMKillProbe, error) { +func loadOOMKillCOREProbe(cfg *ebpf.Config) (*OOMKillProbe, error) { kv, err := kernel.HostVersion() if err != nil { return nil, fmt.Errorf("error detecting kernel version: %s", err) @@ -81,7 +81,7 @@ func loadCOREProbe(cfg *ebpf.Config) (*OOMKillProbe, error) { return probe, nil } -func loadRuntimeCompiledProbe(cfg *ebpf.Config) (*OOMKillProbe, error) { +func loadOOMKillRuntimeCompiledProbe(cfg *ebpf.Config) (*OOMKillProbe, error) { buf, err := runtime.OomKill.Compile(cfg, getCFlags(cfg), statsd.Client) if err != nil { return nil, err diff --git a/pkg/collector/corechecks/ebpf/probe/oom_kill_test.go b/pkg/collector/corechecks/ebpf/probe/oom_kill_test.go index ebf25ce74691c1..ee0beb3027ccaa 100644 --- a/pkg/collector/corechecks/ebpf/probe/oom_kill_test.go +++ b/pkg/collector/corechecks/ebpf/probe/oom_kill_test.go @@ -79,7 +79,7 @@ func TestOOMKillProbe(t *testing.T) { cfg := testConfig() fullKV := host.GetStatusInformation().KernelVersion - if cfg.EnableCORE && (fullKV == "4.18.0-1018-azure" || fullKV == "4.18.0-147.43.1.el8_1.x86_64") { + if cfg.EnableCORE && isMissingBTF(fullKV) { t.Skipf("Skipping CO-RE tests for kernel version %v due to missing BTFs", fullKV) } diff --git a/pkg/collector/corechecks/ebpf/probe/tcp_queue_length.go b/pkg/collector/corechecks/ebpf/probe/tcp_queue_length.go index 1b09ba1b519241..d3f8042c92f76a 100644 --- a/pkg/collector/corechecks/ebpf/probe/tcp_queue_length.go +++ b/pkg/collector/corechecks/ebpf/probe/tcp_queue_length.go @@ -23,8 +23,10 @@ import ( bpflib "github.com/cilium/ebpf" "github.com/DataDog/datadog-agent/pkg/ebpf" + "github.com/DataDog/datadog-agent/pkg/ebpf/bytecode" "github.com/DataDog/datadog-agent/pkg/ebpf/bytecode/runtime" "github.com/DataDog/datadog-agent/pkg/process/statsd" + "github.com/DataDog/datadog-agent/pkg/util/kernel" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -44,12 +46,22 @@ type TCPQueueLengthTracer struct { } func NewTCPQueueLengthTracer(cfg *ebpf.Config) (*TCPQueueLengthTracer, error) { - compiledOutput, err := runtime.TcpQueueLength.Compile(cfg, []string{"-g"}, statsd.Client) - if err != nil { - return nil, err + if cfg.EnableCORE { + probe, err := loadTCPQueueLengthCOREProbe(cfg) + if err != nil { + if !cfg.AllowRuntimeCompiledFallback { + return nil, fmt.Errorf("error loading CO-RE tcp-queue-length probe: %s. set system_probe_config.allow_runtime_compiled_fallback to true to allow fallback to runtime compilation", err) + } + log.Warnf("error loading CO-RE tcp-queue-length probe: %s. falling back to runtime compiled probe", err) + } else { + return probe, nil + } } - defer compiledOutput.Close() + return loadTCPQueueLengthRuntimeCompiledProbe(cfg) +} + +func startTCPQueueLengthProbe(buf bytecode.AssetReader, managerOptions manager.Options) (*TCPQueueLengthTracer, error) { probes := []*manager.Probe{ {ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFSection: "kprobe/tcp_recvmsg", EBPFFuncName: "kprobe__tcp_recvmsg", UID: "tcpq"}}, {ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFSection: "kretprobe/tcp_recvmsg", EBPFFuncName: "kretprobe__tcp_recvmsg", UID: "tcpq"}}, @@ -68,14 +80,12 @@ func NewTCPQueueLengthTracer(cfg *ebpf.Config) (*TCPQueueLengthTracer, error) { Maps: maps, } - managerOptions := manager.Options{ - RLimit: &unix.Rlimit{ - Cur: math.MaxUint64, - Max: math.MaxUint64, - }, + managerOptions.RLimit = &unix.Rlimit{ + Cur: math.MaxUint64, + Max: math.MaxUint64, } - if err := m.InitWithOptions(compiledOutput, managerOptions); err != nil { + if err := m.InitWithOptions(buf, managerOptions); err != nil { return nil, fmt.Errorf("failed to init manager: %w", err) } @@ -145,3 +155,35 @@ func (t *TCPQueueLengthTracer) GetAndFlush() TCPQueueLengthStats { return result } + +func loadTCPQueueLengthCOREProbe(cfg *ebpf.Config) (*TCPQueueLengthTracer, error) { + kv, err := kernel.HostVersion() + if err != nil { + return nil, fmt.Errorf("error detecting kernel version: %s", err) + } + if kv < kernel.VersionCode(4, 8, 0) { + return nil, fmt.Errorf("detected kernel version %s, but tcp-queue-length probe requires a kernel version of at least 4.8.0", kv) + } + + var probe *TCPQueueLengthTracer + err = ebpf.LoadCOREAsset(cfg, "tcp-queue-length.o", func(buf bytecode.AssetReader, opts manager.Options) error { + probe, err = startTCPQueueLengthProbe(buf, opts) + return err + }) + if err != nil { + return nil, err + } + + log.Debugf("successfully loaded CO-RE version of tcp-queue-length probe") + return probe, nil +} + +func loadTCPQueueLengthRuntimeCompiledProbe(cfg *ebpf.Config) (*TCPQueueLengthTracer, error) { + compiledOutput, err := runtime.TcpQueueLength.Compile(cfg, []string{"-g"}, statsd.Client) + if err != nil { + return nil, err + } + defer compiledOutput.Close() + + return startTCPQueueLengthProbe(compiledOutput, manager.Options{}) +} diff --git a/pkg/collector/corechecks/ebpf/probe/tcp_queue_length_test.go b/pkg/collector/corechecks/ebpf/probe/tcp_queue_length_test.go index 9ef2770ff3b33f..05620ba56f9a80 100644 --- a/pkg/collector/corechecks/ebpf/probe/tcp_queue_length_test.go +++ b/pkg/collector/corechecks/ebpf/probe/tcp_queue_length_test.go @@ -18,10 +18,23 @@ import ( "github.com/DataDog/datadog-agent/pkg/ebpf" "github.com/DataDog/datadog-agent/pkg/ebpf/bytecode/runtime" + "github.com/DataDog/datadog-agent/pkg/metadata/host" "github.com/DataDog/datadog-agent/pkg/process/statsd" "github.com/DataDog/datadog-agent/pkg/util/kernel" ) +var ( + missingBTFS = map[string]struct{}{ + "4.18.0-1018-azure": {}, + "4.18.0-147.43.1.el8_1.x86_64": {}, + } +) + +func isMissingBTF(kv string) bool { + _, ok := missingBTFS[kv] + return ok +} + func TestTCPQueueLengthCompile(t *testing.T) { kv, err := kernel.HostVersion() if err != nil { @@ -48,6 +61,11 @@ func TestTCPQueueLengthTracer(t *testing.T) { cfg := ebpf.NewConfig() + fullKV := host.GetStatusInformation().KernelVersion + if cfg.EnableCORE && isMissingBTF(fullKV) { + t.Skipf("Skipping CO-RE tests for kernel version %v due to missing BTFs", fullKV) + } + tcpTracer, err := NewTCPQueueLengthTracer(cfg) if err != nil { t.Fatal(err) diff --git a/pkg/collector/corechecks/embed/jmx/check.go b/pkg/collector/corechecks/embed/jmx/check.go index 64bb31517b6e75..3f15ca0ca31eb5 100644 --- a/pkg/collector/corechecks/embed/jmx/check.go +++ b/pkg/collector/corechecks/embed/jmx/check.go @@ -18,7 +18,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/log" ) -// JMXCheck TODO : IML-199 +// JMXCheck represents a JMXFetch check type JMXCheck struct { id check.ID name string @@ -45,7 +45,7 @@ func newJMXCheck(config integration.Config, source string) *JMXCheck { return check } -// Run TODO : IML-199 +// Run schedules this JMXCheck to run func (c *JMXCheck) Run() error { err := state.scheduleCheck(c) if err != nil { @@ -62,68 +62,69 @@ func (c *JMXCheck) Run() error { return nil } -// Stop TODO : IML-199 +// Stop forces the JMXCheck to stop and will unschedule it func (c *JMXCheck) Stop() { close(c.stop) state.unscheduleCheck(c) } -// Cancel TODO : IML-199 +// Cancel is a noop func (c *JMXCheck) Cancel() {} -// String TODO : IML-199 +// String provides a printable version of the JMXCheck func (c *JMXCheck) String() string { return c.name } -// Version TODO : IML-199 +// Version returns the version of the JMXCheck +// (note, returns an empty string) func (c *JMXCheck) Version() string { return "" } -// ConfigSource TODO : IML-199 +// ConfigSource returns the source of the configuration of the JMXCheck func (c *JMXCheck) ConfigSource() string { return c.source } -// InitConfig TODO : IML-199 +// InitConfig returns the init_config in YAML or JSON of the JMXCheck func (c *JMXCheck) InitConfig() string { return c.initConfig } -// InstanceConfig TODO : IML-199 +// InstanceConfig returns the metric config in YAML or JSON of the JMXCheck func (c *JMXCheck) InstanceConfig() string { return c.instanceConfig } -// Configure TODO : IML-199 +// Configure configures this JMXCheck, setting InitConfig and InstanceConfig func (c *JMXCheck) Configure(integrationConfigDigest uint64, config integration.Data, initConfig integration.Data, source string) error { c.initConfig = string(config) c.instanceConfig = string(initConfig) return nil } -// Interval TODO : IML-199 +// Interval returns the scheduling time for the check (0 for JMXCheck) func (c *JMXCheck) Interval() time.Duration { return 0 } -// ID TODO : IML-199 +// ID provides a unique identifier for this JMXCheck instance func (c *JMXCheck) ID() check.ID { return c.id } -// IsTelemetryEnabled TODO : IML-199 +// IsTelemetryEnabled returns if telemetry is enabled for this JMXCheck func (c *JMXCheck) IsTelemetryEnabled() bool { return c.telemetry } -// GetWarnings TODO : IML-199 +// GetWarnings returns the last warning registered by this JMXCheck (currently an empty slice) func (c *JMXCheck) GetWarnings() []error { return []error{} } -// GetSenderStats TODO : IML-199 +// GetSenderStats returns the stats from the last run of this JMXCheck func (c *JMXCheck) GetSenderStats() (check.SenderStats, error) { return check.NewSenderStats(), nil } diff --git a/pkg/collector/corechecks/sbom/check.go b/pkg/collector/corechecks/sbom/check.go new file mode 100644 index 00000000000000..d587d8e9109384 --- /dev/null +++ b/pkg/collector/corechecks/sbom/check.go @@ -0,0 +1,166 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package sbom + +import ( + "errors" + "time" + + yaml "gopkg.in/yaml.v2" + + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" + "github.com/DataDog/datadog-agent/pkg/collector/check" + core "github.com/DataDog/datadog-agent/pkg/collector/corechecks" + ddConfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/workloadmeta" +) + +const ( + checkName = "sbom" +) + +func init() { + core.RegisterCheck(checkName, CheckFactory) +} + +// Config holds the container_image check configuration +type Config struct { + chunkSize int `yaml:"chunk_size"` + newSBOMMaxLatencySeconds int `yaml:"new_images_max_latency_seconds"` + periodicRefreshSeconds int `yaml:"periodic_refresh_seconds"` +} + +type configValueRange struct { + min int + max int + default_ int +} + +var /* const */ ( + chunkSizeValueRange = &configValueRange{ + min: 1, + max: 100, + default_: 1, + } + + newSBOMMaxLatencySecondsValueRange = &configValueRange{ + min: 1, // 1 s + max: 300, // 5 min + default_: 30, // 30 s + } + + periodicRefreshSecondsValueRange = &configValueRange{ + min: 60, // 1 min + max: 604800, // 1 week + default_: 3600, // 1h + } +) + +func validateValue(val *int, range_ *configValueRange) { + if *val == 0 { + *val = range_.default_ + } else if *val < range_.min { + *val = range_.min + } else if *val > range_.max { + *val = range_.max + } +} + +func (c *Config) Parse(data []byte) error { + if err := yaml.Unmarshal(data, c); err != nil { + return err + } + + validateValue(&c.chunkSize, chunkSizeValueRange) + validateValue(&c.newSBOMMaxLatencySeconds, newSBOMMaxLatencySecondsValueRange) + validateValue(&c.periodicRefreshSeconds, periodicRefreshSecondsValueRange) + + return nil +} + +// Check reports SBOM +type Check struct { + core.CheckBase + workloadmetaStore workloadmeta.Store + instance *Config + processor *processor + stopCh chan struct{} +} + +// CheckFactory registers the sbom check +func CheckFactory() check.Check { + return &Check{ + CheckBase: core.NewCheckBase(checkName), + workloadmetaStore: workloadmeta.GetGlobalStore(), + instance: &Config{}, + stopCh: make(chan struct{}), + } +} + +// Configure parses the check configuration and initializes the sbom check +func (c *Check) Configure(integrationConfigDigest uint64, config, initConfig integration.Data, source string) error { + if !ddConfig.Datadog.GetBool("sbom.enabled") { + return errors.New("collection of SBOM is disabled") + } + + if err := c.CommonConfigure(integrationConfigDigest, initConfig, config, source); err != nil { + return err + } + + if err := c.instance.Parse(config); err != nil { + return err + } + + sender, err := c.GetSender() + if err != nil { + return err + } + + c.processor = newProcessor(sender, c.instance.chunkSize, time.Duration(c.instance.newSBOMMaxLatencySeconds)*time.Second) + + return nil +} + +// Run starts the sbom check +func (c *Check) Run() error { + log.Infof("Starting long-running check %q", c.ID()) + defer log.Infof("Shutting down long-running check %q", c.ID()) + + imgEventsCh := c.workloadmetaStore.Subscribe( + checkName, + workloadmeta.NormalPriority, + workloadmeta.NewFilter( + []workloadmeta.Kind{workloadmeta.KindContainerImageMetadata}, + workloadmeta.SourceAll, + workloadmeta.EventTypeSet, // We don’t care about SBOM removal because we just have to wait for them to expire on BE side once we stopped refreshing them periodically. + ), + ) + + imgRefreshTicker := time.NewTicker(time.Duration(c.instance.periodicRefreshSeconds) * time.Second) + + for { + select { + case eventBundle := <-imgEventsCh: + c.processor.processEvents(eventBundle) + case <-imgRefreshTicker.C: + c.processor.processRefresh(c.workloadmetaStore.ListImages()) + case <-c.stopCh: + c.processor.stop() + return nil + } + } +} + +// Stop stops the sbom check +func (c *Check) Stop() { + close(c.stopCh) +} + +// Interval returns 0. It makes sbom a long-running check +func (c *Check) Interval() time.Duration { + return 0 +} diff --git a/pkg/collector/corechecks/sbom/convert.go b/pkg/collector/corechecks/sbom/convert.go new file mode 100644 index 00000000000000..fd53d95f284c0a --- /dev/null +++ b/pkg/collector/corechecks/sbom/convert.go @@ -0,0 +1,1022 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package sbom + +import ( + "time" + "unsafe" + + "github.com/DataDog/datadog-agent/pkg/util/pointer" + + "github.com/CycloneDX/cyclonedx-go" + "github.com/DataDog/agent-payload/v5/cyclonedx_v1_4" + "google.golang.org/protobuf/types/known/timestamppb" +) + +func stringPtr(in string) *string { + if in == "" { + return nil + } else { + return &in + } +} + +func strSliceDeref(in *[]string) []string { + if in == nil { + return nil + } else { + return *in + } +} + +type inArrayElement interface { + cyclonedx.Advisory | + cyclonedx.AffectedVersions | + cyclonedx.Affects | + cyclonedx.Commit | + cyclonedx.Component | + cyclonedx.Composition | + cyclonedx.Copyright | + cyclonedx.DataClassification | + cyclonedx.Dependency | + cyclonedx.ExternalReference | + cyclonedx.Hash | + cyclonedx.Issue | + cyclonedx.LicenseChoice | + cyclonedx.Note | + cyclonedx.OrganizationalContact | + cyclonedx.OrganizationalEntity | + cyclonedx.Patch | + cyclonedx.Property | + cyclonedx.Service | + cyclonedx.Tool | + cyclonedx.Vulnerability | + cyclonedx.VulnerabilityRating | + cyclonedx.VulnerabilityReference +} + +type outArrayElement interface { + cyclonedx_v1_4.Advisory | + cyclonedx_v1_4.Commit | + cyclonedx_v1_4.Component | + cyclonedx_v1_4.Composition | + cyclonedx_v1_4.DataClassification | + cyclonedx_v1_4.Dependency | + cyclonedx_v1_4.EvidenceCopyright | + cyclonedx_v1_4.ExternalReference | + cyclonedx_v1_4.Hash | + cyclonedx_v1_4.Issue | + cyclonedx_v1_4.LicenseChoice | + cyclonedx_v1_4.Note | + cyclonedx_v1_4.OrganizationalContact | + cyclonedx_v1_4.OrganizationalEntity | + cyclonedx_v1_4.Patch | + cyclonedx_v1_4.Property | + cyclonedx_v1_4.Service | + cyclonedx_v1_4.Tool | + cyclonedx_v1_4.Vulnerability | + cyclonedx_v1_4.VulnerabilityAffectedVersions | + cyclonedx_v1_4.VulnerabilityAffects | + cyclonedx_v1_4.VulnerabilityRating | + cyclonedx_v1_4.VulnerabilityReference +} + +func convertArray[In inArrayElement, Out outArrayElement](in *[]In, convert func(*In) *Out) (out []*Out) { + if in == nil { + return nil + } + + out = make([]*Out, 0, len(*in)) + for _, e := range *in { + out = append(out, convert(&e)) + } + return out +} + +func convertAdvisory(in *cyclonedx.Advisory) *cyclonedx_v1_4.Advisory { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Advisory{ + Title: stringPtr(in.Title), + Url: in.URL, + } +} + +func convertAttachedText(in *cyclonedx.AttachedText) *cyclonedx_v1_4.AttachedText { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.AttachedText{ + ContentType: stringPtr(in.ContentType), + Encoding: stringPtr(in.Encoding), + Value: in.Content, + } +} + +func convertBOM(in *cyclonedx.BOM) *cyclonedx_v1_4.Bom { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Bom{ + SpecVersion: in.SpecVersion, + Version: pointer.Int32Ptr(int32(in.Version)), + SerialNumber: stringPtr(in.SerialNumber), + Metadata: convertMetadata(in.Metadata), + Components: convertArray(in.Components, convertComponent), + Services: convertArray(in.Services, convertService), + ExternalReferences: convertArray(in.ExternalReferences, convertExternalReference), + Dependencies: convertArray(in.Dependencies, convertDependency), + Compositions: convertArray(in.Compositions, convertComposition), + Vulnerabilities: convertArray(in.Vulnerabilities, convertVulnerability), + } +} + +func convertCommit(in *cyclonedx.Commit) *cyclonedx_v1_4.Commit { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Commit{ + Uid: stringPtr(in.UID), + Url: stringPtr(in.URL), + Author: convertIdentifiableAction(in.Author), + Committer: convertIdentifiableAction(in.Committer), + Message: stringPtr(in.Message), + } +} + +func convertComponent(in *cyclonedx.Component) *cyclonedx_v1_4.Component { + if in == nil { + return nil + } + + var evidence []*cyclonedx_v1_4.Evidence + if in.Evidence != nil { + evidence = []*cyclonedx_v1_4.Evidence{convertEvidence(in.Evidence)} + } + + return &cyclonedx_v1_4.Component{ + Type: convertComponentType(in.Type), + MimeType: stringPtr(in.MIMEType), + BomRef: stringPtr(in.BOMRef), + Supplier: convertOrganizationalEntity(in.Supplier), + Author: stringPtr(in.Author), + Publisher: stringPtr(in.Publisher), + Group: stringPtr(in.Group), + Name: in.Name, + Version: in.Version, + Description: stringPtr(in.Description), + Scope: convertScope(in.Scope), + Hashes: convertArray(in.Hashes, convertHash), + Licenses: convertArray(castLicenses(in.Licenses), convertLicenseChoice), + Copyright: stringPtr(in.Copyright), + Cpe: stringPtr(in.CPE), + Purl: stringPtr(in.PackageURL), + Swid: convertSwid(in.SWID), + Modified: in.Modified, + Pedigree: convertPedigree(in.Pedigree), + ExternalReferences: convertArray(in.ExternalReferences, convertExternalReference), + Components: convertArray(in.Components, convertComponent), + Properties: convertArray(in.Properties, convertProperty), + Evidence: evidence, + ReleaseNotes: convertReleaseNotes(in.ReleaseNotes), + } +} + +func convertComponentType(in cyclonedx.ComponentType) cyclonedx_v1_4.Classification { + switch in { + case cyclonedx.ComponentTypeApplication: + return cyclonedx_v1_4.Classification_CLASSIFICATION_APPLICATION + case cyclonedx.ComponentTypeContainer: + return cyclonedx_v1_4.Classification_CLASSIFICATION_CONTAINER + case cyclonedx.ComponentTypeDevice: + return cyclonedx_v1_4.Classification_CLASSIFICATION_DEVICE + case cyclonedx.ComponentTypeFile: + return cyclonedx_v1_4.Classification_CLASSIFICATION_FILE + case cyclonedx.ComponentTypeFirmware: + return cyclonedx_v1_4.Classification_CLASSIFICATION_FIRMWARE + case cyclonedx.ComponentTypeFramework: + return cyclonedx_v1_4.Classification_CLASSIFICATION_FRAMEWORK + case cyclonedx.ComponentTypeLibrary: + return cyclonedx_v1_4.Classification_CLASSIFICATION_LIBRARY + case cyclonedx.ComponentTypeOS: + return cyclonedx_v1_4.Classification_CLASSIFICATION_OPERATING_SYSTEM + default: + return cyclonedx_v1_4.Classification_CLASSIFICATION_NULL + } +} + +func convertComposition(in *cyclonedx.Composition) (out *cyclonedx_v1_4.Composition) { + if in == nil { + return nil + } + + out = &cyclonedx_v1_4.Composition{ + Aggregate: convertCompositionAggregate(in.Aggregate), + } + + if in.Assemblies != nil { + out.Assemblies = *(*[]string)(unsafe.Pointer(in.Assemblies)) + } + + if in.Dependencies != nil { + out.Dependencies = *(*[]string)(unsafe.Pointer(in.Dependencies)) + } + + return out +} + +func convertCompositionAggregate(in cyclonedx.CompositionAggregate) cyclonedx_v1_4.Aggregate { + switch in { + case cyclonedx.CompositionAggregateComplete: + return cyclonedx_v1_4.Aggregate_AGGREGATE_COMPLETE + case cyclonedx.CompositionAggregateIncomplete: + return cyclonedx_v1_4.Aggregate_AGGREGATE_INCOMPLETE + case cyclonedx.CompositionAggregateIncompleteFirstPartyOnly: + return cyclonedx_v1_4.Aggregate_AGGREGATE_INCOMPLETE_FIRST_PARTY_ONLY + case cyclonedx.CompositionAggregateIncompleteThirdPartyOnly: + return cyclonedx_v1_4.Aggregate_AGGREGATE_INCOMPLETE_THIRD_PARTY_ONLY + case cyclonedx.CompositionAggregateUnknown: + return cyclonedx_v1_4.Aggregate_AGGREGATE_UNKNOWN + case cyclonedx.CompositionAggregateNotSpecified: + return cyclonedx_v1_4.Aggregate_AGGREGATE_NOT_SPECIFIED + default: + return cyclonedx_v1_4.Aggregate_AGGREGATE_NOT_SPECIFIED + } +} + +func convertCopyright(in *cyclonedx.Copyright) *cyclonedx_v1_4.EvidenceCopyright { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.EvidenceCopyright{ + Text: in.Text, + } +} + +func convertDataClassification(in *cyclonedx.DataClassification) *cyclonedx_v1_4.DataClassification { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.DataClassification{ + Flow: convertDataFlow(in.Flow), + Value: in.Classification, + } +} + +func convertDataFlow(in cyclonedx.DataFlow) cyclonedx_v1_4.DataFlow { + switch in { + case cyclonedx.DataFlowBidirectional: + return cyclonedx_v1_4.DataFlow_DATA_FLOW_BI_DIRECTIONAL + case cyclonedx.DataFlowInbound: + return cyclonedx_v1_4.DataFlow_DATA_FLOW_INBOUND + case cyclonedx.DataFlowOutbound: + return cyclonedx_v1_4.DataFlow_DATA_FLOW_OUTBOUND + case cyclonedx.DataFlowUnknown: + return cyclonedx_v1_4.DataFlow_DATA_FLOW_UNKNOWN + default: + return cyclonedx_v1_4.DataFlow_DATA_FLOW_NULL + } +} + +func convertDependency(in *cyclonedx.Dependency) *cyclonedx_v1_4.Dependency { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Dependency{ + Ref: in.Ref, + Dependencies: convertArray(in.Dependencies, convertDependency), + } +} + +func convertDiff(in *cyclonedx.Diff) *cyclonedx_v1_4.Diff { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Diff{ + Text: convertAttachedText(in.Text), + Url: stringPtr(in.URL), + } +} + +func convertEvidence(in *cyclonedx.Evidence) *cyclonedx_v1_4.Evidence { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Evidence{ + Licenses: convertArray(castLicenses(in.Licenses), convertLicenseChoice), + Copyright: convertArray(in.Copyright, convertCopyright), + } +} + +func convertExternalReference(in *cyclonedx.ExternalReference) *cyclonedx_v1_4.ExternalReference { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.ExternalReference{ + Type: convertExternalReferenceType(in.Type), + Url: in.URL, + Comment: stringPtr(in.Comment), + Hashes: convertArray(in.Hashes, convertHash), + } +} + +func convertExternalReferenceType(in cyclonedx.ExternalReferenceType) cyclonedx_v1_4.ExternalReferenceType { + switch in { + case cyclonedx.ERTypeAdvisories: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_ADVISORIES + case cyclonedx.ERTypeBOM: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_BOM + case cyclonedx.ERTypeBuildMeta: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_BUILD_META + case cyclonedx.ERTypeBuildSystem: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_BUILD_SYSTEM + case cyclonedx.ERTypeChat: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_CHAT + case cyclonedx.ERTypeDistribution: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_DISTRIBUTION + case cyclonedx.ERTypeDocumentation: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_DOCUMENTATION + case cyclonedx.ERTypeLicense: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_LICENSE + case cyclonedx.ERTypeMailingList: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_MAILING_LIST + case cyclonedx.ERTypeOther: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_OTHER + case cyclonedx.ERTypeIssueTracker: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_ISSUE_TRACKER + case cyclonedx.ERTypeReleaseNotes: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_OTHER // ?? + case cyclonedx.ERTypeSocial: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_SOCIAL + case cyclonedx.ERTypeSupport: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_SUPPORT + case cyclonedx.ERTypeVCS: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_VCS + case cyclonedx.ERTypeWebsite: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_WEBSITE + default: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_OTHER + } +} + +func convertHash(in *cyclonedx.Hash) *cyclonedx_v1_4.Hash { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Hash{ + Alg: convertHashAlgo(in.Algorithm), + Value: in.Value, + } +} + +func convertHashAlgo(in cyclonedx.HashAlgorithm) cyclonedx_v1_4.HashAlg { + switch in { + case cyclonedx.HashAlgoMD5: + return cyclonedx_v1_4.HashAlg_HASH_ALG_MD_5 + case cyclonedx.HashAlgoSHA1: + return cyclonedx_v1_4.HashAlg_HASH_ALG_SHA_1 + case cyclonedx.HashAlgoSHA256: + return cyclonedx_v1_4.HashAlg_HASH_ALG_SHA_256 + case cyclonedx.HashAlgoSHA384: + return cyclonedx_v1_4.HashAlg_HASH_ALG_SHA_384 + case cyclonedx.HashAlgoSHA512: + return cyclonedx_v1_4.HashAlg_HASH_ALG_SHA_512 + case cyclonedx.HashAlgoSHA3_256: + return cyclonedx_v1_4.HashAlg_HASH_ALG_SHA_3_256 + case cyclonedx.HashAlgoSHA3_512: + return cyclonedx_v1_4.HashAlg_HASH_ALG_SHA_3_512 + case cyclonedx.HashAlgoBlake2b_256: + return cyclonedx_v1_4.HashAlg_HASH_ALG_BLAKE_2_B_256 + case cyclonedx.HashAlgoBlake2b_384: + return cyclonedx_v1_4.HashAlg_HASH_ALG_BLAKE_2_B_384 + case cyclonedx.HashAlgoBlake2b_512: + return cyclonedx_v1_4.HashAlg_HASH_ALG_BLAKE_2_B_512 + case cyclonedx.HashAlgoBlake3: + return cyclonedx_v1_4.HashAlg_HASH_ALG_BLAKE_3 + default: + return cyclonedx_v1_4.HashAlg_HASH_ALG_NULL + } +} + +func convertIdentifiableAction(in *cyclonedx.IdentifiableAction) *cyclonedx_v1_4.IdentifiableAction { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.IdentifiableAction{ + Timestamp: convertTimestamp(in.Timestamp), + Name: stringPtr(in.Name), + Email: stringPtr(in.Email), + } +} + +func convertImpactAnalysisJustification(in cyclonedx.ImpactAnalysisJustification) *cyclonedx_v1_4.ImpactAnalysisJustification { + if in == "" { + return nil + } + + ptr := func(v cyclonedx_v1_4.ImpactAnalysisJustification) *cyclonedx_v1_4.ImpactAnalysisJustification { + return &v + } + + switch in { + case cyclonedx.IAJCodeNotPresent: + return ptr(cyclonedx_v1_4.ImpactAnalysisJustification_IMPACT_ANALYSIS_JUSTIFICATION_CODE_NOT_PRESENT) + case cyclonedx.IAJCodeNotReachable: + return ptr(cyclonedx_v1_4.ImpactAnalysisJustification_IMPACT_ANALYSIS_JUSTIFICATION_CODE_NOT_REACHABLE) + case cyclonedx.IAJRequiresConfiguration: + return ptr(cyclonedx_v1_4.ImpactAnalysisJustification_IMPACT_ANALYSIS_JUSTIFICATION_REQUIRES_CONFIGURATION) + case cyclonedx.IAJRequiresDependency: + return ptr(cyclonedx_v1_4.ImpactAnalysisJustification_IMPACT_ANALYSIS_JUSTIFICATION_REQUIRES_DEPENDENCY) + case cyclonedx.IAJRequiresEnvironment: + return ptr(cyclonedx_v1_4.ImpactAnalysisJustification_IMPACT_ANALYSIS_JUSTIFICATION_REQUIRES_ENVIRONMENT) + case cyclonedx.IAJProtectedByCompiler: + return ptr(cyclonedx_v1_4.ImpactAnalysisJustification_IMPACT_ANALYSIS_JUSTIFICATION_PROTECTED_BY_COMPILER) + case cyclonedx.IAJProtectedAtRuntime: + return ptr(cyclonedx_v1_4.ImpactAnalysisJustification_IMPACT_ANALYSIS_JUSTIFICATION_PROTECTED_AT_RUNTIME) + case cyclonedx.IAJProtectedAtPerimeter: + return ptr(cyclonedx_v1_4.ImpactAnalysisJustification_IMPACT_ANALYSIS_JUSTIFICATION_PROTECTED_AT_PERIMETER) + case cyclonedx.IAJProtectedByMitigatingControl: + return ptr(cyclonedx_v1_4.ImpactAnalysisJustification_IMPACT_ANALYSIS_JUSTIFICATION_PROTECTED_BY_MITIGATING_CONTROL) + default: + return ptr(cyclonedx_v1_4.ImpactAnalysisJustification_IMPACT_ANALYSIS_JUSTIFICATION_NULL) + } +} + +func convertImpactAnalysisResponse(in cyclonedx.ImpactAnalysisResponse) cyclonedx_v1_4.VulnerabilityResponse { + switch in { + case cyclonedx.IARCanNotFix: + return cyclonedx_v1_4.VulnerabilityResponse_VULNERABILITY_RESPONSE_CAN_NOT_FIX + case cyclonedx.IARWillNotFix: + return cyclonedx_v1_4.VulnerabilityResponse_VULNERABILITY_RESPONSE_WILL_NOT_FIX + case cyclonedx.IARUpdate: + return cyclonedx_v1_4.VulnerabilityResponse_VULNERABILITY_RESPONSE_UPDATE + case cyclonedx.IARRollback: + return cyclonedx_v1_4.VulnerabilityResponse_VULNERABILITY_RESPONSE_ROLLBACK + case cyclonedx.IARWorkaroundAvailable: + return cyclonedx_v1_4.VulnerabilityResponse_VULNERABILITY_RESPONSE_WORKAROUND_AVAILABLE + default: + return cyclonedx_v1_4.VulnerabilityResponse_VULNERABILITY_RESPONSE_NULL + } +} + +func convertImpactAnalysisState(in cyclonedx.ImpactAnalysisState) *cyclonedx_v1_4.ImpactAnalysisState { + if in == "" { + return nil + } + + ptr := func(v cyclonedx_v1_4.ImpactAnalysisState) *cyclonedx_v1_4.ImpactAnalysisState { + return &v + } + + switch in { + case cyclonedx.IASResolved: + return ptr(cyclonedx_v1_4.ImpactAnalysisState_IMPACT_ANALYSIS_STATE_RESOLVED) + case cyclonedx.IASResolvedWithPedigree: + return ptr(cyclonedx_v1_4.ImpactAnalysisState_IMPACT_ANALYSIS_STATE_RESOLVED_WITH_PEDIGREE) + case cyclonedx.IASExploitable: + return ptr(cyclonedx_v1_4.ImpactAnalysisState_IMPACT_ANALYSIS_STATE_EXPLOITABLE) + case cyclonedx.IASInTriage: + return ptr(cyclonedx_v1_4.ImpactAnalysisState_IMPACT_ANALYSIS_STATE_IN_TRIAGE) + case cyclonedx.IASFalsePositive: + return ptr(cyclonedx_v1_4.ImpactAnalysisState_IMPACT_ANALYSIS_STATE_FALSE_POSITIVE) + case cyclonedx.IASNotAffected: + return ptr(cyclonedx_v1_4.ImpactAnalysisState_IMPACT_ANALYSIS_STATE_NOT_AFFECTED) + default: + return ptr(cyclonedx_v1_4.ImpactAnalysisState_IMPACT_ANALYSIS_STATE_NULL) + } +} + +func convertIssue(in *cyclonedx.Issue) *cyclonedx_v1_4.Issue { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Issue{ + Type: convertIssueType(in.Type), + Id: stringPtr(in.ID), + Name: stringPtr(in.Name), + Description: stringPtr(in.Description), + Source: convertSource(in.Source), + References: strSliceDeref(in.References), + } +} + +func convertIssueType(in cyclonedx.IssueType) cyclonedx_v1_4.IssueClassification { + switch in { + case cyclonedx.IssueTypeDefect: + return cyclonedx_v1_4.IssueClassification_ISSUE_CLASSIFICATION_DEFECT + case cyclonedx.IssueTypeEnhancement: + return cyclonedx_v1_4.IssueClassification_ISSUE_CLASSIFICATION_ENHANCEMENT + case cyclonedx.IssueTypeSecurity: + return cyclonedx_v1_4.IssueClassification_ISSUE_CLASSIFICATION_SECURITY + default: + return cyclonedx_v1_4.IssueClassification_ISSUE_CLASSIFICATION_NULL + } +} + +func castLicenses(in *cyclonedx.Licenses) *[]cyclonedx.LicenseChoice { + if in == nil { + return nil + } + + var l []cyclonedx.LicenseChoice = *in + return &l +} + +func convertLicense(in *cyclonedx.License) (out *cyclonedx_v1_4.License) { + if in == nil { + return nil + } + + out = &cyclonedx_v1_4.License{ + Text: convertAttachedText(in.Text), + Url: stringPtr(in.URL), + } + + if in.ID != "" { + out.License = &cyclonedx_v1_4.License_Id{ + Id: in.ID, + } + } + + if in.Name != "" { + out.License = &cyclonedx_v1_4.License_Name{ + Name: in.Name, + } + } + + return out +} + +func convertLicenseChoice(in *cyclonedx.LicenseChoice) *cyclonedx_v1_4.LicenseChoice { + if in == nil { + return nil + } + + if in.License != nil { + return &cyclonedx_v1_4.LicenseChoice{ + Choice: &cyclonedx_v1_4.LicenseChoice_License{ + License: convertLicense(in.License), + }, + } + } + + if in.Expression != "" { + return &cyclonedx_v1_4.LicenseChoice{ + Choice: &cyclonedx_v1_4.LicenseChoice_Expression{ + Expression: in.Expression, + }, + } + } + + return nil +} + +func convertMetadata(in *cyclonedx.Metadata) *cyclonedx_v1_4.Metadata { + if in == nil { + return nil + } + + var licenses *cyclonedx_v1_4.LicenseChoice = nil + if in.Licenses != nil && len(*in.Licenses) > 0 { + licenses = convertLicenseChoice(&(*in.Licenses)[0]) + } + + return &cyclonedx_v1_4.Metadata{ + Timestamp: convertTimestamp(in.Timestamp), + Tools: convertArray(in.Tools, convertTool), + Authors: convertArray(in.Authors, convertOrganizationalContact), + Component: convertComponent(in.Component), + Manufacture: convertOrganizationalEntity(in.Manufacture), + Supplier: convertOrganizationalEntity(in.Supplier), + Licenses: licenses, + Properties: convertArray(in.Properties, convertProperty), + } +} + +func convertNote(in *cyclonedx.Note) *cyclonedx_v1_4.Note { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Note{ + Locale: stringPtr(in.Locale), + Text: convertAttachedText(&in.Text), + } +} + +func convertOrganizationalContact(in *cyclonedx.OrganizationalContact) *cyclonedx_v1_4.OrganizationalContact { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.OrganizationalContact{ + Name: stringPtr(in.Name), + Email: stringPtr(in.Email), + Phone: stringPtr(in.Phone), + } +} + +func convertOrganizationalEntity(in *cyclonedx.OrganizationalEntity) *cyclonedx_v1_4.OrganizationalEntity { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.OrganizationalEntity{ + Name: stringPtr(in.Name), + Url: strSliceDeref(in.URL), + Contact: convertArray(in.Contact, convertOrganizationalContact), + } +} + +func convertPatch(in *cyclonedx.Patch) *cyclonedx_v1_4.Patch { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Patch{ + Type: convertPatchType(in.Type), + Diff: convertDiff(in.Diff), + Resolves: convertArray(in.Resolves, convertIssue), + } +} + +func convertPatchType(in cyclonedx.PatchType) cyclonedx_v1_4.PatchClassification { + switch in { + case cyclonedx.PatchTypeBackport: + return cyclonedx_v1_4.PatchClassification_PATCH_CLASSIFICATION_BACKPORT + case cyclonedx.PatchTypeCherryPick: + return cyclonedx_v1_4.PatchClassification_PATCH_CLASSIFICATION_CHERRY_PICK + case cyclonedx.PatchTypeMonkey: + return cyclonedx_v1_4.PatchClassification_PATCH_CLASSIFICATION_MONKEY + case cyclonedx.PatchTypeUnofficial: + return cyclonedx_v1_4.PatchClassification_PATCH_CLASSIFICATION_UNOFFICIAL + default: + return cyclonedx_v1_4.PatchClassification_PATCH_CLASSIFICATION_NULL + } +} + +func convertPedigree(in *cyclonedx.Pedigree) *cyclonedx_v1_4.Pedigree { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Pedigree{ + Ancestors: convertArray(in.Ancestors, convertComponent), + Descendants: convertArray(in.Descendants, convertComponent), + Variants: convertArray(in.Variants, convertComponent), + Commits: convertArray(in.Commits, convertCommit), + Patches: convertArray(in.Patches, convertPatch), + Notes: stringPtr(in.Notes), + } +} + +func convertProperty(in *cyclonedx.Property) *cyclonedx_v1_4.Property { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Property{ + Name: in.Name, + Value: stringPtr(in.Value), + } +} + +func convertReleaseNotes(in *cyclonedx.ReleaseNotes) *cyclonedx_v1_4.ReleaseNotes { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.ReleaseNotes{ + Type: in.Type, + Title: stringPtr(in.Title), + FeaturedImage: stringPtr(in.FeaturedImage), + SocialImage: stringPtr(in.SocialImage), + Description: stringPtr(in.Description), + Timestamp: convertTimestamp(in.Timestamp), + Aliases: strSliceDeref(in.Aliases), + Tags: strSliceDeref(in.Tags), + Resolves: convertArray(in.Resolves, convertIssue), + Notes: convertArray(in.Notes, convertNote), + Properties: convertArray(in.Properties, convertProperty), + } +} + +func convertScope(in cyclonedx.Scope) *cyclonedx_v1_4.Scope { + if in == "" { + return nil + } + + ptr := func(v cyclonedx_v1_4.Scope) *cyclonedx_v1_4.Scope { + return &v + } + + switch in { + case cyclonedx.ScopeExcluded: + return ptr(cyclonedx_v1_4.Scope_SCOPE_EXCLUDED) + case cyclonedx.ScopeOptional: + return ptr(cyclonedx_v1_4.Scope_SCOPE_OPTIONAL) + case cyclonedx.ScopeRequired: + return ptr(cyclonedx_v1_4.Scope_SCOPE_REQUIRED) + default: + return ptr(cyclonedx_v1_4.Scope_SCOPE_UNSPECIFIED) + } +} + +func convertScoringMethod(in cyclonedx.ScoringMethod) *cyclonedx_v1_4.ScoreMethod { + if in == "" { + return nil + } + + ptr := func(v cyclonedx_v1_4.ScoreMethod) *cyclonedx_v1_4.ScoreMethod { + return &v + } + + switch in { + case cyclonedx.ScoringMethodOther: + return ptr(cyclonedx_v1_4.ScoreMethod_SCORE_METHOD_OTHER) + case cyclonedx.ScoringMethodCVSSv2: + return ptr(cyclonedx_v1_4.ScoreMethod_SCORE_METHOD_CVSSV2) + case cyclonedx.ScoringMethodCVSSv3: + return ptr(cyclonedx_v1_4.ScoreMethod_SCORE_METHOD_CVSSV3) + case cyclonedx.ScoringMethodCVSSv31: + return ptr(cyclonedx_v1_4.ScoreMethod_SCORE_METHOD_CVSSV31) + case cyclonedx.ScoringMethodOWASP: + return ptr(cyclonedx_v1_4.ScoreMethod_SCORE_METHOD_OWASP) + default: + return ptr(cyclonedx_v1_4.ScoreMethod_SCORE_METHOD_NULL) + } +} + +func convertService(in *cyclonedx.Service) *cyclonedx_v1_4.Service { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Service{ + BomRef: stringPtr(in.BOMRef), + Provider: convertOrganizationalEntity(in.Provider), + Group: stringPtr(in.Group), + Name: in.Name, + Version: stringPtr(in.Version), + Description: stringPtr(in.Description), + Endpoints: strSliceDeref(in.Endpoints), + Authenticated: in.Authenticated, + XTrustBoundary: in.CrossesTrustBoundary, + Data: convertArray(in.Data, convertDataClassification), + Licenses: convertArray(castLicenses(in.Licenses), convertLicenseChoice), + ExternalReferences: convertArray(in.ExternalReferences, convertExternalReference), + Services: convertArray(in.Services, convertService), + Properties: convertArray(in.Properties, convertProperty), + ReleaseNotes: convertReleaseNotes(in.ReleaseNotes), + } +} + +func convertSeverity(in cyclonedx.Severity) *cyclonedx_v1_4.Severity { + if in == "" { + return nil + } + + ptr := func(v cyclonedx_v1_4.Severity) *cyclonedx_v1_4.Severity { + return &v + } + + switch in { + case cyclonedx.SeverityUnknown: + return ptr(cyclonedx_v1_4.Severity_SEVERITY_UNKNOWN) + case cyclonedx.SeverityNone: + return ptr(cyclonedx_v1_4.Severity_SEVERITY_NONE) + case cyclonedx.SeverityInfo: + return ptr(cyclonedx_v1_4.Severity_SEVERITY_INFO) + case cyclonedx.SeverityLow: + return ptr(cyclonedx_v1_4.Severity_SEVERITY_LOW) + case cyclonedx.SeverityMedium: + return ptr(cyclonedx_v1_4.Severity_SEVERITY_MEDIUM) + case cyclonedx.SeverityHigh: + return ptr(cyclonedx_v1_4.Severity_SEVERITY_HIGH) + case cyclonedx.SeverityCritical: + return ptr(cyclonedx_v1_4.Severity_SEVERITY_CRITICAL) + default: + return ptr(cyclonedx_v1_4.Severity_SEVERITY_UNKNOWN) + } +} + +func convertSource(in *cyclonedx.Source) *cyclonedx_v1_4.Source { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Source{ + Name: stringPtr(in.Name), + Url: stringPtr(in.URL), + } +} + +func convertSwid(in *cyclonedx.SWID) *cyclonedx_v1_4.Swid { + if in == nil { + return nil + } + + var tagVersion *int32 = nil + if in.TagVersion != nil { + tagVersion = pointer.Int32Ptr(int32(*in.TagVersion)) + } + + return &cyclonedx_v1_4.Swid{ + TagId: in.TagID, + Name: in.Name, + Version: stringPtr(in.Version), + TagVersion: tagVersion, + Patch: in.Patch, + Text: convertAttachedText(in.Text), + Url: stringPtr(in.URL), + } +} + +func convertTimestamp(in string) *timestamppb.Timestamp { + ts, err := time.Parse("CHECK FORMAT", in) + if err != nil { + return nil + } else { + return timestamppb.New(ts) + } +} + +func convertTool(in *cyclonedx.Tool) *cyclonedx_v1_4.Tool { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Tool{ + Vendor: stringPtr(in.Vendor), + Name: stringPtr(in.Name), + Version: stringPtr(in.Version), + Hashes: convertArray(in.Hashes, convertHash), + ExternalReferences: convertArray(in.ExternalReferences, convertExternalReference), + } +} + +func convertVulnerability(in *cyclonedx.Vulnerability) *cyclonedx_v1_4.Vulnerability { + if in == nil { + return nil + } + + var cwes []int32 + if in.CWEs != nil { + cwes = make([]int32, len(*in.CWEs)) + for i := range *in.CWEs { + cwes[i] = int32((*in.CWEs)[i]) + } + } + + return &cyclonedx_v1_4.Vulnerability{ + BomRef: stringPtr(in.BOMRef), + Id: stringPtr(in.ID), + Source: convertSource(in.Source), + References: convertArray(in.References, convertVulnerabilityReference), + Ratings: convertArray(in.Ratings, convertVulnerabilityRating), + Cwes: cwes, + Description: stringPtr(in.Description), + Detail: stringPtr(in.Detail), + Recommendation: stringPtr(in.Recommendation), + Advisories: convertArray(in.Advisories, convertAdvisory), + Created: convertTimestamp(in.Created), + Published: convertTimestamp(in.Published), + Updated: convertTimestamp(in.Updated), + Credits: convertVulnerabilityCredits(in.Credits), + Tools: convertArray(in.Tools, convertTool), + Analysis: convertVulnerabilityAnalysis(in.Analysis), + Affects: convertArray(in.Affects, convertVulnerabilityAffects), + Properties: convertArray(in.Properties, convertProperty), + } +} + +func convertVulnerabilityAffectedStatus(in cyclonedx.VulnerabilityStatus) *cyclonedx_v1_4.VulnerabilityAffectedStatus { + if in == "" { + return nil + } + + ptr := func(v cyclonedx_v1_4.VulnerabilityAffectedStatus) *cyclonedx_v1_4.VulnerabilityAffectedStatus { + return &v + } + + switch in { + case cyclonedx.VulnerabilityStatusUnknown: + return ptr(cyclonedx_v1_4.VulnerabilityAffectedStatus_VULNERABILITY_AFFECTED_STATUS_UNKNOWN) + case cyclonedx.VulnerabilityStatusAffected: + return ptr(cyclonedx_v1_4.VulnerabilityAffectedStatus_VULNERABILITY_AFFECTED_STATUS_AFFECTED) + case cyclonedx.VulnerabilityStatusNotAffected: + return ptr(cyclonedx_v1_4.VulnerabilityAffectedStatus_VULNERABILITY_AFFECTED_STATUS_NOT_AFFECTED) + default: + return ptr(cyclonedx_v1_4.VulnerabilityAffectedStatus_VULNERABILITY_AFFECTED_STATUS_UNKNOWN) + } +} + +func convertVulnerabilityAffectedVersions(in *cyclonedx.AffectedVersions) (out *cyclonedx_v1_4.VulnerabilityAffectedVersions) { + if in == nil { + return nil + } + + out = &cyclonedx_v1_4.VulnerabilityAffectedVersions{ + Status: convertVulnerabilityAffectedStatus(in.Status), + } + + if in.Version != "" { + out.Choice = &cyclonedx_v1_4.VulnerabilityAffectedVersions_Version{ + Version: in.Version, + } + } + + if in.Range != "" { + out.Choice = &cyclonedx_v1_4.VulnerabilityAffectedVersions_Range{ + Range: in.Range, + } + } + + return out +} + +func convertVulnerabilityAffects(in *cyclonedx.Affects) *cyclonedx_v1_4.VulnerabilityAffects { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.VulnerabilityAffects{ + Ref: in.Ref, + Versions: convertArray(in.Range, convertVulnerabilityAffectedVersions), + } +} + +func convertVulnerabilityAnalysis(in *cyclonedx.VulnerabilityAnalysis) *cyclonedx_v1_4.VulnerabilityAnalysis { + if in == nil { + return nil + } + + var response []cyclonedx_v1_4.VulnerabilityResponse + if in.Response != nil { + response = make([]cyclonedx_v1_4.VulnerabilityResponse, 0, len(*in.Response)) + for _, e := range *in.Response { + response = append(response, convertImpactAnalysisResponse(e)) + } + } + + return &cyclonedx_v1_4.VulnerabilityAnalysis{ + State: convertImpactAnalysisState(in.State), + Justification: convertImpactAnalysisJustification(in.Justification), + Response: response, + Detail: stringPtr(in.Detail), + } +} + +func convertVulnerabilityCredits(in *cyclonedx.Credits) *cyclonedx_v1_4.VulnerabilityCredits { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.VulnerabilityCredits{ + Organizations: convertArray(in.Organizations, convertOrganizationalEntity), + Individuals: convertArray(in.Individuals, convertOrganizationalContact), + } +} + +func convertVulnerabilityRating(in *cyclonedx.VulnerabilityRating) *cyclonedx_v1_4.VulnerabilityRating { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.VulnerabilityRating{ + Source: convertSource(in.Source), + Score: in.Score, + Severity: convertSeverity(in.Severity), + Method: convertScoringMethod(in.Method), + Vector: stringPtr(in.Vector), + Justification: stringPtr(in.Justification), + } +} + +func convertVulnerabilityReference(in *cyclonedx.VulnerabilityReference) *cyclonedx_v1_4.VulnerabilityReference { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.VulnerabilityReference{ + Id: stringPtr(in.ID), + Source: convertSource(in.Source), + } +} diff --git a/pkg/collector/corechecks/sbom/convert_test.go b/pkg/collector/corechecks/sbom/convert_test.go new file mode 100644 index 00000000000000..98438ac93c9669 --- /dev/null +++ b/pkg/collector/corechecks/sbom/convert_test.go @@ -0,0 +1,28 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package sbom + +import ( + "testing" + + "github.com/CycloneDX/cyclonedx-go" + fuzz "github.com/google/gofuzz" + "github.com/stretchr/testify/assert" + "google.golang.org/protobuf/proto" +) + +func FuzzConvertBOM(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + f := fuzz.NewFromGoFuzz(data).NilChance(0.8).NumElements(0, 2) + + var bom cyclonedx.BOM + f.Fuzz(&bom) + + pb := convertBOM(&bom) + _, err := proto.Marshal(pb) + assert.Nil(t, err) + }) +} diff --git a/pkg/collector/corechecks/sbom/processor.go b/pkg/collector/corechecks/sbom/processor.go new file mode 100644 index 00000000000000..95f7da7e007374 --- /dev/null +++ b/pkg/collector/corechecks/sbom/processor.go @@ -0,0 +1,78 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package sbom + +import ( + "time" + + "github.com/DataDog/datadog-agent/pkg/aggregator" + queue "github.com/DataDog/datadog-agent/pkg/util/aggregatingqueue" + "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/workloadmeta" + + "github.com/DataDog/agent-payload/v5/sbom" + model "github.com/DataDog/agent-payload/v5/sbom" +) + +var /* const */ ( + sourceAgent = "agent" +) + +type processor struct { + queue chan *model.SBOMEntity +} + +func newProcessor(sender aggregator.Sender, maxNbItem int, maxRetentionTime time.Duration) *processor { + return &processor{ + queue: queue.NewQueue(maxNbItem, maxRetentionTime, func(entities []*model.SBOMEntity) { + sender.SBOM([]sbom.SBOMPayload{ + { + Version: 1, + Source: &sourceAgent, + Entities: entities, + }, + }) + }), + } +} + +func (p *processor) processEvents(evBundle workloadmeta.EventBundle) { + close(evBundle.Ch) + + log.Tracef("Processing %d events", len(evBundle.Events)) + + for _, event := range evBundle.Events { + p.processSBOM(event.Entity.(*workloadmeta.ContainerImageMetadata)) + } +} + +func (p *processor) processRefresh(allImages []*workloadmeta.ContainerImageMetadata) { + // So far, the check is refreshing all the images every 5 minutes all together. + for _, img := range allImages { + p.processSBOM(img) + } +} + +func (p *processor) processSBOM(img *workloadmeta.ContainerImageMetadata) { + if img.CycloneDXBOM == nil { + return + } + + p.queue <- &model.SBOMEntity{ + Type: model.SBOMSourceType_CONTAINER_IMAGE_LAYERS, + Id: img.ID, + GeneratedAt: nil, + Tags: img.RepoTags, + InUse: true, // TODO: compute this field + Sbom: &sbom.SBOMEntity_Cyclonedx{ + Cyclonedx: convertBOM(img.CycloneDXBOM), + }, + } +} + +func (p *processor) stop() { + close(p.queue) +} diff --git a/pkg/collector/corechecks/sbom/processor_test.go b/pkg/collector/corechecks/sbom/processor_test.go new file mode 100644 index 00000000000000..bdc24ede84c38a --- /dev/null +++ b/pkg/collector/corechecks/sbom/processor_test.go @@ -0,0 +1,149 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package sbom + +import ( + "strconv" + "testing" + "time" + + "github.com/CycloneDX/cyclonedx-go" + "github.com/DataDog/agent-payload/v5/cyclonedx_v1_4" + model "github.com/DataDog/agent-payload/v5/sbom" + "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" + "github.com/DataDog/datadog-agent/pkg/collector/check" + "github.com/DataDog/datadog-agent/pkg/util/pointer" + "github.com/DataDog/datadog-agent/pkg/workloadmeta" + "github.com/stretchr/testify/mock" +) + +func TestProcessEvents(t *testing.T) { + sender := mocksender.NewMockSender(check.ID("")) + sender.On("SBOM", mock.Anything, mock.Anything).Return() + p := newProcessor(sender, 2, 50*time.Millisecond) + + for i := 0; i < 3; i++ { + p.processEvents(workloadmeta.EventBundle{ + Events: []workloadmeta.Event{ + { + Type: workloadmeta.EventTypeSet, + Entity: &workloadmeta.ContainerImageMetadata{ + EntityID: workloadmeta.EntityID{ + Kind: workloadmeta.KindContainerImageMetadata, + ID: strconv.Itoa(i), + }, + CycloneDXBOM: &cyclonedx.BOM{ + SpecVersion: "1.4", + Version: 42, + Components: &[]cyclonedx.Component{ + { + Name: strconv.Itoa(100 * i), + }, + { + Name: strconv.Itoa(100*i + 1), + }, + { + Name: strconv.Itoa(100*i + 2), + }, + }, + }, + }, + }, + }, + Ch: make(chan struct{}), + }) + } + + sender.AssertNumberOfCalls(t, "SBOM", 1) + sender.AssertSBOM(t, []model.SBOMPayload{ + { + Version: 1, + Source: &sourceAgent, + Entities: []*model.SBOMEntity{ + { + Type: model.SBOMSourceType_CONTAINER_IMAGE_LAYERS, + Id: "0", + InUse: true, + Sbom: &model.SBOMEntity_Cyclonedx{ + Cyclonedx: &cyclonedx_v1_4.Bom{ + SpecVersion: "1.4", + Version: pointer.Int32Ptr(42), + Components: []*cyclonedx_v1_4.Component{ + { + Name: "0", + }, + { + Name: "1", + }, + { + Name: "2", + }, + }, + }, + }, + }, + { + Type: model.SBOMSourceType_CONTAINER_IMAGE_LAYERS, + Id: "1", + InUse: true, + Sbom: &model.SBOMEntity_Cyclonedx{ + Cyclonedx: &cyclonedx_v1_4.Bom{ + SpecVersion: "1.4", + Version: pointer.Int32Ptr(42), + Components: []*cyclonedx_v1_4.Component{ + { + Name: "100", + }, + { + Name: "101", + }, + { + Name: "102", + }, + }, + }, + }, + }, + }, + }, + }) + + time.Sleep(100 * time.Millisecond) + + sender.AssertNumberOfCalls(t, "SBOM", 2) + sender.AssertSBOM(t, []model.SBOMPayload{ + { + Version: 1, + Source: &sourceAgent, + Entities: []*model.SBOMEntity{ + { + Type: model.SBOMSourceType_CONTAINER_IMAGE_LAYERS, + Id: "2", + InUse: true, + Sbom: &model.SBOMEntity_Cyclonedx{ + Cyclonedx: &cyclonedx_v1_4.Bom{ + SpecVersion: "1.4", + Version: pointer.Int32Ptr(42), + Components: []*cyclonedx_v1_4.Component{ + { + Name: "200", + }, + { + Name: "201", + }, + { + Name: "202", + }, + }, + }, + }, + }, + }, + }, + }) + + p.stop() +} diff --git a/pkg/collector/corechecks/snmp/common/contants.go b/pkg/collector/corechecks/snmp/common/contants.go index 6d633643ec9802..9a1ea9144a9d63 100644 --- a/pkg/collector/corechecks/snmp/common/contants.go +++ b/pkg/collector/corechecks/snmp/common/contants.go @@ -13,3 +13,32 @@ const SnmpIntegrationName = "snmp" // SnmpExternalTagsSourceType is the source id used for external tags const SnmpExternalTagsSourceType = "snmp" + +type IfAdminStatus int + +const ( + AdminStatus_Up IfAdminStatus = 1 + AdminStatus_Down IfAdminStatus = 2 + AdminStatus_Testing IfAdminStatus = 3 +) + +type IfOperStatus int + +const ( + OperStatus_Up IfOperStatus = 1 + OperStatus_Down IfOperStatus = 2 + OperStatus_Testing IfOperStatus = 3 + OperStatus_Unknown IfOperStatus = 4 + OperStatus_Dormant IfOperStatus = 5 + OperStatus_NotPresent IfOperStatus = 6 + OperStatus_LowerLayerDown IfOperStatus = 7 +) + +type InterfaceStatus string + +const ( + InterfaceStatus_Up InterfaceStatus = "up" + InterfaceStatus_Down InterfaceStatus = "down" + InterfaceStatus_Warning InterfaceStatus = "warning" + InterfaceStatus_Off InterfaceStatus = "off" +) diff --git a/pkg/collector/corechecks/snmp/common/utils.go b/pkg/collector/corechecks/snmp/common/utils.go index 29b53fbf141add..3417dfb3687dc5 100644 --- a/pkg/collector/corechecks/snmp/common/utils.go +++ b/pkg/collector/corechecks/snmp/common/utils.go @@ -42,3 +42,11 @@ func CopyStrings(tags []string) []string { func GetAgentVersionTag() string { return "agent_version:" + version.AgentVersion } + +// BoolToFloat64 converts a true/false boolean into a 1.0 or 0.0 float +func BoolToFloat64(val bool) float64 { + if val { + return 1. + } + return 0. +} diff --git a/pkg/collector/corechecks/snmp/common/utils_test.go b/pkg/collector/corechecks/snmp/common/utils_test.go index 8429946e557afa..546daf6d3ef1eb 100644 --- a/pkg/collector/corechecks/snmp/common/utils_test.go +++ b/pkg/collector/corechecks/snmp/common/utils_test.go @@ -106,3 +106,9 @@ func Test_CopyStrings(t *testing.T) { assert.NotEqual(t, fmt.Sprintf("%p", tags), fmt.Sprintf("%p", newTags)) assert.NotEqual(t, fmt.Sprintf("%p", &tags[0]), fmt.Sprintf("%p", &newTags[0])) } + +func Test_BoolToFloat64(t *testing.T) { + assert.Equal(t, BoolToFloat64(true), 1.0) + assert.Equal(t, BoolToFloat64(false), 0.0) + +} diff --git a/pkg/collector/corechecks/snmp/internal/checkconfig/config_metadata.go b/pkg/collector/corechecks/snmp/internal/checkconfig/config_metadata.go index cc4db1b27662aa..6a4fffddc04bc3 100644 --- a/pkg/collector/corechecks/snmp/internal/checkconfig/config_metadata.go +++ b/pkg/collector/corechecks/snmp/internal/checkconfig/config_metadata.go @@ -84,6 +84,22 @@ var LegacyMetadataConfig = MetadataConfig{ }, }, }, + "ip_addresses": { + Fields: map[string]MetadataField{ + "if_index": { + Symbol: SymbolConfig{ + OID: "1.3.6.1.2.1.4.20.1.2", + Name: "ipAdEntIfIndex", + }, + }, + "netmask": { + Symbol: SymbolConfig{ + OID: "1.3.6.1.2.1.4.20.1.3", + Name: "ipAdEntNetMask", + }, + }, + }, + }, } var TopologyMetadataConfig = MetadataConfig{ @@ -136,6 +152,16 @@ var TopologyMetadataConfig = MetadataConfig{ // - 1.0.8802.1.1.2.1.4.1.1.12 lldpRemSysCapEnabled }, }, + "lldp_remote_management": { + Fields: map[string]MetadataField{ + "interface_id_type": { + Symbol: SymbolConfig{ + OID: "1.0.8802.1.1.2.1.4.2.1.3", + Name: "lldpRemManAddrIfSubtype", + }, + }, + }, + }, "lldp_local": { Fields: map[string]MetadataField{ "interface_id_type": { diff --git a/pkg/collector/corechecks/snmp/internal/checkconfig/config_test.go b/pkg/collector/corechecks/snmp/internal/checkconfig/config_test.go index 88b02cd9500b26..9ece5bafd9c724 100644 --- a/pkg/collector/corechecks/snmp/internal/checkconfig/config_test.go +++ b/pkg/collector/corechecks/snmp/internal/checkconfig/config_test.go @@ -975,6 +975,8 @@ func Test_snmpConfig_refreshWithProfile(t *testing.T) { "1.2.3.4.7", "1.3.6.1.2.1.2.2.1.99", "1.3.6.1.2.1.31.1.1.1.1", + "1.3.6.1.2.1.4.20.1.2", + "1.3.6.1.2.1.4.20.1.3", }, }, c.OidConfig) diff --git a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go index 975c8d365e3613..94d0f84cf06d0f 100644 --- a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go +++ b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go @@ -32,9 +32,11 @@ import ( ) const ( - snmpLoaderTag = "loader:core" - serviceCheckName = "snmp.can_check" - deviceHostnamePrefix = "device:" + snmpLoaderTag = "loader:core" + serviceCheckName = "snmp.can_check" + deviceReachableMetric = "snmp.device.reachable" + deviceUnreachableMetric = "snmp.device.unreachable" + deviceHostnamePrefix = "device:" ) // define timeNow as variable to make it possible to mock it during test @@ -114,6 +116,9 @@ func (d *DeviceCheck) Run(collectionTime time.Time) error { tags = append(tags, dynamicTags...) d.sender.ServiceCheck(serviceCheckName, metrics.ServiceCheckOK, tags, "") } + d.sender.Gauge(deviceReachableMetric, common.BoolToFloat64(deviceReachable), tags) + d.sender.Gauge(deviceUnreachableMetric, common.BoolToFloat64(!deviceReachable), tags) + if values != nil { d.sender.ReportMetrics(d.config.Metrics, values, tags) } @@ -144,7 +149,7 @@ func (d *DeviceCheck) setDeviceHostExternalTags() { if deviceHostname == "" || err != nil { return } - agentTags := config.GetConfiguredTags(false) + agentTags := config.GetGlobalConfiguredTags(false) log.Debugf("Set external tags for device host, host=`%s`, agentTags=`%v`", deviceHostname, agentTags) externalhost.SetExternalTags(deviceHostname, common.SnmpExternalTagsSourceType, agentTags) } diff --git a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go index a6e39018bfff32..d1bfc62a5798c0 100644 --- a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go +++ b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go @@ -208,7 +208,6 @@ profiles: }, { Variables: []gosnmp.SnmpPDU{ - { Name: "1.3.6.1.2.1.31.1.1.1.1.1", Type: gosnmp.OctetString, @@ -219,7 +218,16 @@ profiles: Type: gosnmp.OctetString, Value: []byte("descRow1"), }, - + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, { Name: "1.3.6.1.2.1.31.1.1.1.1.2", Type: gosnmp.OctetString, @@ -230,6 +238,21 @@ profiles: Type: gosnmp.OctetString, Value: []byte("descRow2"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.2", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.2", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, { Name: "9", // exit table Type: gosnmp.Integer, @@ -267,7 +290,7 @@ profiles: "1.3.6.1.4.1.3375.2.1.3.3.3.0", }).Return(&packets[2], nil) sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.13", "1.3.6.1.2.1.2.2.1.14", "1.3.6.1.2.1.2.2.1.6", "1.3.6.1.2.1.2.2.1.7", "1.3.6.1.2.1.2.2.1.8"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[0], nil) - sess.On("GetBulk", []string{"1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[1], nil) + sess.On("GetBulk", []string{"1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18", "1.3.6.1.2.1.4.20.1.2", "1.3.6.1.2.1.4.20.1.3"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[1], nil) err = deviceCk.Run(time.Now()) assert.Nil(t, err) @@ -500,6 +523,16 @@ experimental_detect_metrics_enabled: true Type: gosnmp.OctetString, Value: []byte("descRow1"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, { Name: "1.3.6.1.2.1.2.2.1.8.2", @@ -516,6 +549,27 @@ experimental_detect_metrics_enabled: true Type: gosnmp.OctetString, Value: []byte("descRow2"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.2", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.2", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, { Name: "9", // exit table Type: gosnmp.Integer, @@ -571,7 +625,7 @@ experimental_detect_metrics_enabled: true "1.3.6.1.4.1.3375.2.1.1.2.1.44.999", }).Return(&packets[3], nil) sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.13", "1.3.6.1.2.1.2.2.1.14", "1.3.6.1.2.1.2.2.1.2", "1.3.6.1.2.1.2.2.1.6", "1.3.6.1.2.1.2.2.1.7"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[0], nil) - sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.8", "1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[1], nil) + sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.8", "1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18", "1.3.6.1.2.1.4.20.1.2", "1.3.6.1.2.1.4.20.1.3"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[1], nil) savedAutodetectMetricsTime := deviceCk.nextAutodetectMetrics err = deviceCk.Run(time.Now()) @@ -994,6 +1048,16 @@ profiles: Type: gosnmp.OctetString, Value: []byte("descRow1"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, { Name: "1.3.6.1.2.1.31.1.1.1.1.2", @@ -1005,6 +1069,27 @@ profiles: Type: gosnmp.OctetString, Value: []byte("descRow2"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.2", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.2", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, { Name: "9", // exit table Type: gosnmp.Integer, @@ -1042,7 +1127,7 @@ profiles: "1.3.6.1.4.1.3375.2.1.3.3.3.0", }).Return(&packets[2], nil) sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.13", "1.3.6.1.2.1.2.2.1.14", "1.3.6.1.2.1.2.2.1.6", "1.3.6.1.2.1.2.2.1.7", "1.3.6.1.2.1.2.2.1.8"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[0], nil) - sess.On("GetBulk", []string{"1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[1], nil) + sess.On("GetBulk", []string{"1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18", "1.3.6.1.2.1.4.20.1.2", "1.3.6.1.2.1.4.20.1.3"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[1], nil) err = deviceCk.Run(time.Now()) assert.Nil(t, err) @@ -1051,13 +1136,17 @@ profiles: "static_tag:from_profile_root", "some_tag:some_tag_value", "prefix:f", "suffix:oo_sys_name"} sender.AssertServiceCheck(t, "snmp.can_check", metrics.ServiceCheckOK, "", snmpTags, "") + sender.AssertMetric(t, "Gauge", deviceReachableMetric, 1., "", snmpTags) + sender.AssertMetric(t, "Gauge", deviceUnreachableMetric, 0., "", snmpTags) assert.Equal(t, false, deviceCk.config.AutodetectProfile) - + sender.ResetCalls() sess.ConnectErr = fmt.Errorf("some error") err = deviceCk.Run(time.Now()) assert.Error(t, err, "some error") sender.Mock.AssertCalled(t, "ServiceCheck", "snmp.can_check", metrics.ServiceCheckCritical, "", mocksender.MatchTagsContains(snmpTags), "snmp connection error: some error") + sender.AssertMetric(t, "Gauge", deviceUnreachableMetric, 1., "", snmpTags) + sender.AssertMetric(t, "Gauge", deviceReachableMetric, 0., "", snmpTags) } func TestRun_sessionCloseError(t *testing.T) { diff --git a/pkg/collector/corechecks/snmp/internal/metadata/payload.go b/pkg/collector/corechecks/snmp/internal/metadata/payload.go index 6fb590c075acd4..d769df2bd12693 100644 --- a/pkg/collector/corechecks/snmp/internal/metadata/payload.go +++ b/pkg/collector/corechecks/snmp/internal/metadata/payload.go @@ -5,6 +5,8 @@ package metadata +import "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/common" + // PayloadMetadataBatchSize is the number of resources per event payload // Resources are devices, interfaces, etc const PayloadMetadataBatchSize = 100 @@ -37,6 +39,7 @@ type NetworkDevicesMetadata struct { Namespace string `json:"namespace"` Devices []DeviceMetadata `json:"devices,omitempty"` Interfaces []InterfaceMetadata `json:"interfaces,omitempty"` + IPAddresses []IPAddressMetadata `json:"ip_addresses,omitempty"` Links []TopologyLinkMetadata `json:"links,omitempty"` CollectTimestamp int64 `json:"collect_timestamp"` } @@ -66,15 +69,22 @@ type DeviceMetadata struct { // InterfaceMetadata contains interface metadata type InterfaceMetadata struct { - DeviceID string `json:"device_id"` - IDTags []string `json:"id_tags"` // used to correlate with interface metrics - Index int32 `json:"index"` // IF-MIB ifIndex type is InterfaceIndex (Integer32 (1..2147483647)) - Name string `json:"name,omitempty"` - Alias string `json:"alias,omitempty"` - Description string `json:"description,omitempty"` - MacAddress string `json:"mac_address,omitempty"` - AdminStatus int32 `json:"admin_status,omitempty"` // IF-MIB ifAdminStatus type is INTEGER - OperStatus int32 `json:"oper_status,omitempty"` // IF-MIB ifOperStatus type is INTEGER + DeviceID string `json:"device_id"` + IDTags []string `json:"id_tags"` // used to correlate with interface metrics + Index int32 `json:"index"` // IF-MIB ifIndex type is InterfaceIndex (Integer32 (1..2147483647)) + Name string `json:"name,omitempty"` + Alias string `json:"alias,omitempty"` + Description string `json:"description,omitempty"` + MacAddress string `json:"mac_address,omitempty"` + AdminStatus common.IfAdminStatus `json:"admin_status,omitempty"` // IF-MIB ifAdminStatus type is INTEGER + OperStatus common.IfOperStatus `json:"oper_status,omitempty"` // IF-MIB ifOperStatus type is INTEGER +} + +// IPAddressMetadata contains ip address metadata +type IPAddressMetadata struct { + InterfaceID string `json:"interface_id"` + IPAddress string `json:"ip_address"` + Prefixlen int32 `json:"prefixlen,omitempty"` } // TopologyLinkDevice contain device link data @@ -83,6 +93,7 @@ type TopologyLinkDevice struct { IDType string `json:"id_type,omitempty"` Name string `json:"name,omitempty"` Description string `json:"description,omitempty"` + IPAddress string `json:"ip_address,omitempty"` } // TopologyLinkInterface contain interface link data diff --git a/pkg/collector/corechecks/snmp/internal/report/report_device_metadata.go b/pkg/collector/corechecks/snmp/internal/report/report_device_metadata.go index 84f2ebc8b9e268..5f17af5eb10607 100644 --- a/pkg/collector/corechecks/snmp/internal/report/report_device_metadata.go +++ b/pkg/collector/corechecks/snmp/internal/report/report_device_metadata.go @@ -7,12 +7,13 @@ package report import ( json "encoding/json" - "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/lldp" "sort" "strconv" "strings" "time" + "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/lldp" + "github.com/DataDog/datadog-agent/pkg/epforwarder" "github.com/DataDog/datadog-agent/pkg/util" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -23,6 +24,8 @@ import ( "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/valuestore" ) +const interfaceStatusMetric = "snmp.interface.status" + // ReportNetworkDeviceMetadata reports device metadata func (ms *MetricSender) ReportNetworkDeviceMetadata(config *checkconfig.CheckConfig, store *valuestore.ResultValueStore, origTags []string, collectTime time.Time, deviceStatus metadata.DeviceStatus) { tags := common.CopyStrings(origTags) @@ -33,9 +36,10 @@ func (ms *MetricSender) ReportNetworkDeviceMetadata(config *checkconfig.CheckCon device := buildNetworkDeviceMetadata(config.DeviceID, config.DeviceIDTags, config, metadataStore, tags, deviceStatus) interfaces := buildNetworkInterfacesMetadata(config.DeviceID, metadataStore) - topologyLinks := buildNetworkTopologyMetadata(config.DeviceID, metadataStore) + ipAddresses := buildNetworkIPAddressesMetadata(config.DeviceID, metadataStore) + topologyLinks := buildNetworkTopologyMetadata(config.DeviceID, metadataStore, interfaces) - metadataPayloads := batchPayloads(config.Namespace, config.ResolvedSubnetName, collectTime, metadata.PayloadMetadataBatchSize, device, interfaces, topologyLinks) + metadataPayloads := batchPayloads(config.Namespace, config.ResolvedSubnetName, collectTime, metadata.PayloadMetadataBatchSize, device, interfaces, ipAddresses, topologyLinks) for _, payload := range metadataPayloads { payloadBytes, err := json.Marshal(payload) @@ -45,6 +49,42 @@ func (ms *MetricSender) ReportNetworkDeviceMetadata(config *checkconfig.CheckCon } ms.sender.EventPlatformEvent(string(payloadBytes), epforwarder.EventTypeNetworkDevicesMetadata) } + + // Telemetry + for _, interfaceStatus := range interfaces { + status := string(computeInterfaceStatus(interfaceStatus.AdminStatus, interfaceStatus.OperStatus)) + interfaceTags := []string{"status:" + status, "interface:" + interfaceStatus.Name, "interface_alias:" + interfaceStatus.Alias, "interface_index:" + strconv.Itoa(int(interfaceStatus.Index))} + interfaceTags = append(interfaceTags, tags...) + ms.sender.Gauge(interfaceStatusMetric, 1, "", interfaceTags) + } +} + +func computeInterfaceStatus(adminStatus common.IfAdminStatus, operStatus common.IfOperStatus) common.InterfaceStatus { + if adminStatus == common.AdminStatus_Up { + switch { + case operStatus == common.OperStatus_Up: + return common.InterfaceStatus_Up + case operStatus == common.OperStatus_Down: + return common.InterfaceStatus_Down + } + return common.InterfaceStatus_Warning + } + if adminStatus == common.AdminStatus_Down { + switch { + case operStatus == common.OperStatus_Up: + return common.InterfaceStatus_Down + case operStatus == common.OperStatus_Down: + return common.InterfaceStatus_Off + } + return common.InterfaceStatus_Warning + } + if adminStatus == common.AdminStatus_Testing { + switch { + case operStatus != common.OperStatus_Down: + return common.InterfaceStatus_Warning + } + } + return common.InterfaceStatus_Down } func buildMetadataStore(metadataConfigs checkconfig.MetadataConfig, values *valuestore.ResultValueStore) *metadata.Store { @@ -182,8 +222,8 @@ func buildNetworkInterfacesMetadata(deviceID string, store *metadata.Store) []me Alias: store.GetColumnAsString("interface.alias", strIndex), Description: store.GetColumnAsString("interface.description", strIndex), MacAddress: store.GetColumnAsString("interface.mac_address", strIndex), - AdminStatus: int32(store.GetColumnAsFloat("interface.admin_status", strIndex)), - OperStatus: int32(store.GetColumnAsFloat("interface.oper_status", strIndex)), + AdminStatus: common.IfAdminStatus((store.GetColumnAsFloat("interface.admin_status", strIndex))), + OperStatus: common.IfOperStatus((store.GetColumnAsFloat("interface.oper_status", strIndex))), IDTags: ifIDTags, } interfaces = append(interfaces, networkInterface) @@ -191,12 +231,43 @@ func buildNetworkInterfacesMetadata(deviceID string, store *metadata.Store) []me return interfaces } -func buildNetworkTopologyMetadata(deviceID string, store *metadata.Store) []metadata.TopologyLinkMetadata { +func buildNetworkIPAddressesMetadata(deviceID string, store *metadata.Store) []metadata.IPAddressMetadata { + if store == nil { + // it's expected that the value store is nil if we can't reach the device + // in that case, we just return a nil slice. + return nil + } + indexes := store.GetColumnIndexes("ip_addresses.if_index") + if len(indexes) == 0 { + log.Debugf("Unable to build ip addresses metadata: no ip_addresses.if_index found") + return nil + } + sort.Strings(indexes) + var ipAddresses []metadata.IPAddressMetadata + for _, strIndex := range indexes { + index := store.GetColumnAsString("ip_addresses.if_index", strIndex) + Netmask := store.GetColumnAsString("ip_addresses.netmask", strIndex) + ipAddress := metadata.IPAddressMetadata{ + InterfaceID: deviceID + ":" + index, + IPAddress: strIndex, + Prefixlen: int32(netmaskToPrefixlen(Netmask)), + } + ipAddresses = append(ipAddresses, ipAddress) + } + return ipAddresses +} + +func buildNetworkTopologyMetadata(deviceID string, store *metadata.Store, interfaces []metadata.InterfaceMetadata) []metadata.TopologyLinkMetadata { if store == nil { // it's expected that the value store is nil if we can't reach the device // in that case, we just return a nil slice. return nil } + + interfaceIndexByIDType := buildInterfaceIndexByIDType(interfaces) + + remManAddrByLLDPRemIndex := getRemManIPAddrByLLDPRemIndex(store.GetColumnIndexes("lldp_remote_management.interface_id_type")) + indexes := store.GetColumnIndexes("lldp_remote.interface_id") // using `lldp_remote.interface_id` to get indexes since it's expected to be always present if len(indexes) == 0 { log.Debugf("Unable to build links metadata: no lldp_remote indexes found") @@ -216,6 +287,7 @@ func buildNetworkTopologyMetadata(deviceID string, store *metadata.Store) []meta // See https://www.rfc-editor.org/rfc/rfc2021 localPortNum := indexElems[1] + lldpRemIndex := indexElems[2] remoteDeviceIDType := lldp.ChassisIDSubtypeMap[store.GetColumnAsString("lldp_remote.chassis_id_type", strIndex)] remoteDeviceID := formatID(remoteDeviceIDType, store, "lldp_remote.chassis_id", strIndex) @@ -226,6 +298,8 @@ func buildNetworkTopologyMetadata(deviceID string, store *metadata.Store) []meta localInterfaceIDType := lldp.PortIDSubTypeMap[store.GetColumnAsString("lldp_local.interface_id_type", localPortNum)] localInterfaceID := formatID(localInterfaceIDType, store, "lldp_local.interface_id", localPortNum) + localInterfaceIDType, localInterfaceID = resolveLocalInterface(deviceID, interfaceIndexByIDType, localInterfaceIDType, localInterfaceID) + newLink := metadata.TopologyLinkMetadata{ Remote: &metadata.TopologyLinkSide{ Device: &metadata.TopologyLinkDevice{ @@ -233,6 +307,7 @@ func buildNetworkTopologyMetadata(deviceID string, store *metadata.Store) []meta Description: store.GetColumnAsString("lldp_remote.device_desc", strIndex), ID: remoteDeviceID, IDType: remoteDeviceIDType, + IPAddress: remManAddrByLLDPRemIndex[lldpRemIndex], }, Interface: &metadata.TopologyLinkInterface{ ID: remoteInterfaceID, @@ -244,7 +319,6 @@ func buildNetworkTopologyMetadata(deviceID string, store *metadata.Store) []meta Interface: &metadata.TopologyLinkInterface{ ID: localInterfaceID, IDType: localInterfaceIDType, - // TODO: We can possibly resolve locally to ifIndex to avoid having to resolve on backend side }, Device: &metadata.TopologyLinkDevice{ ID: deviceID, @@ -257,6 +331,76 @@ func buildNetworkTopologyMetadata(deviceID string, store *metadata.Store) []meta return links } +func resolveLocalInterface(deviceID string, interfaceIndexByIDType map[string]map[string]int32, localInterfaceIDType string, localInterfaceID string) (string, string) { + if localInterfaceID == "" { + return localInterfaceIDType, localInterfaceID + } + + var typesToTry []string + if localInterfaceIDType == "" { + // "smart resolution" by multiple types when localInterfaceIDType is not provided (which is often the case). + // CAVEAT: In case the smart resolution returns false positives, the solution is to configure the device to provide a proper localInterfaceIDType. + // The order of `typesToTry` has been arbitrary define (not sure if there is an order that can lead to lower false positive). + typesToTry = []string{"mac_address", "interface_name", "interface_alias", "interface_index"} + } else { + typesToTry = []string{localInterfaceIDType} + } + for _, idType := range typesToTry { + interfaceIndexByIDValue, ok := interfaceIndexByIDType[idType] + if ok { + ifIndex, ok := interfaceIndexByIDValue[localInterfaceID] + if ok { + return metadata.IDTypeNDM, deviceID + ":" + strconv.Itoa(int(ifIndex)) + } + } + } + return localInterfaceIDType, localInterfaceID +} + +func buildInterfaceIndexByIDType(interfaces []metadata.InterfaceMetadata) map[string]map[string]int32 { + interfaceIndexByIDType := make(map[string]map[string]int32) // map[ID_TYPE]map[ID_VALUE]IF_INDEX + for _, idType := range []string{"mac_address", "interface_name", "interface_alias", "interface_index"} { + interfaceIndexByIDType[idType] = make(map[string]int32) + } + for _, devInterface := range interfaces { + interfaceIndexByIDType["mac_address"][devInterface.MacAddress] = devInterface.Index + interfaceIndexByIDType["interface_name"][devInterface.Name] = devInterface.Index + interfaceIndexByIDType["interface_alias"][devInterface.Alias] = devInterface.Index + + // interface_index is not a type defined by LLDP, it's used in local interface "smart resolution" when the idType is not present + interfaceIndexByIDType["interface_index"][strconv.Itoa(int(devInterface.Index))] = devInterface.Index + } + return interfaceIndexByIDType +} + +func getRemManIPAddrByLLDPRemIndex(remManIndexes []string) map[string]string { + remManAddrByRemIndex := make(map[string]string) + for _, fullIndex := range remManIndexes { + indexElems := strings.Split(fullIndex, ".") + if len(indexElems) < 9 { + // We expect the index to be at least 9 elements (IPv4) + // 1 lldpRemTimeMark + // 1 lldpRemLocalPortNum + // 1 lldpRemIndex + // 1 lldpRemManAddrSubtype (1 for IPv4, 2 for IPv6) + // 5|17 lldpRemManAddr (4 for IPv4 and 17 for IPv6) + // the first elements is the IP type e.g. 4 for IPv4 + continue + } + lldpRemIndex := indexElems[2] + lldpRemManAddrSubtype := indexElems[3] + ipAddrType := indexElems[4] + lldpRemManAddr := indexElems[5:] + + // We only support IPv4 for the moment + // TODO: Support IPv6 + if lldpRemManAddrSubtype == "1" && ipAddrType == "4" { + remManAddrByRemIndex[lldpRemIndex] = strings.Join(lldpRemManAddr, ".") + } + } + return remManAddrByRemIndex +} + func formatID(idType string, store *metadata.Store, field string, strIndex string) string { var remoteDeviceID string if idType == metadata.IDTypeMacAddress { @@ -267,7 +411,7 @@ func formatID(idType string, store *metadata.Store, field string, strIndex strin return remoteDeviceID } -func batchPayloads(namespace string, subnet string, collectTime time.Time, batchSize int, device metadata.DeviceMetadata, interfaces []metadata.InterfaceMetadata, topologyLinks []metadata.TopologyLinkMetadata) []metadata.NetworkDevicesMetadata { +func batchPayloads(namespace string, subnet string, collectTime time.Time, batchSize int, device metadata.DeviceMetadata, interfaces []metadata.InterfaceMetadata, ipAddresses []metadata.IPAddressMetadata, topologyLinks []metadata.TopologyLinkMetadata) []metadata.NetworkDevicesMetadata { var payloads []metadata.NetworkDevicesMetadata var resourceCount int payload := metadata.NetworkDevicesMetadata{ @@ -294,6 +438,20 @@ func batchPayloads(namespace string, subnet string, collectTime time.Time, batch payload.Interfaces = append(payload.Interfaces, interfaceMetadata) } + for _, ipAddress := range ipAddresses { + if resourceCount == batchSize { + payloads = append(payloads, payload) + payload = metadata.NetworkDevicesMetadata{ + Subnet: subnet, + Namespace: namespace, + CollectTimestamp: collectTime.Unix(), + } + resourceCount = 0 + } + resourceCount++ + payload.IPAddresses = append(payload.IPAddresses, ipAddress) + } + for _, linkMetadata := range topologyLinks { if resourceCount == batchSize { payloads = append(payloads, payload) diff --git a/pkg/collector/corechecks/snmp/internal/report/report_device_metadata_test.go b/pkg/collector/corechecks/snmp/internal/report/report_device_metadata_test.go index fa52141ee4978f..0e1301fca6f9d3 100644 --- a/pkg/collector/corechecks/snmp/internal/report/report_device_metadata_test.go +++ b/pkg/collector/corechecks/snmp/internal/report/report_device_metadata_test.go @@ -237,10 +237,15 @@ func Test_metricSender_reportNetworkDeviceMetadata_withInterfaces(t *testing.T) "1": valuestore.ResultValue{Value: float64(21)}, "2": valuestore.ResultValue{Value: float64(22)}, }, + "1.3.6.1.2.1.31.1.1.1.18": { + "1": valuestore.ResultValue{Value: "ifAlias1"}, + "2": valuestore.ResultValue{Value: "ifAlias2"}, + }, }, } sender := mocksender.NewMockSender("testID") // required to initiate aggregator sender.On("EventPlatformEvent", mock.Anything, mock.Anything).Return() + sender.On("Gauge", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return() ms := &MetricSender{ sender: sender, } @@ -260,6 +265,12 @@ func Test_metricSender_reportNetworkDeviceMetadata_withInterfaces(t *testing.T) Name: "ifName", }, }, + "alias": { + Symbol: checkconfig.SymbolConfig{ + OID: "1.3.6.1.2.1.31.1.1.1.18", + Name: "ifAlias", + }, + }, }, IDTags: checkconfig.MetricTagConfigList{ checkconfig.MetricTagConfig{ @@ -280,6 +291,11 @@ func Test_metricSender_reportNetworkDeviceMetadata_withInterfaces(t *testing.T) assert.NoError(t, err) ms.ReportNetworkDeviceMetadata(config, storeWithIfName, []string{"tag1", "tag2"}, collectTime, metadata.DeviceStatusReachable) + ifTags1 := []string{"tag1", "tag2", "status:down", "interface:21", "interface_alias:ifAlias1", "interface_index:1"} + ifTags2 := []string{"tag1", "tag2", "status:down", "interface:22", "interface_alias:ifAlias2", "interface_index:2"} + + sender.AssertMetric(t, "Gauge", interfaceStatusMetric, 1., "", ifTags1) + sender.AssertMetric(t, "Gauge", interfaceStatusMetric, 1., "", ifTags2) // language=json event := []byte(` { @@ -307,7 +323,8 @@ func Test_metricSender_reportNetworkDeviceMetadata_withInterfaces(t *testing.T) "interface:21" ], "index": 1, - "name": "21" + "name": "21", + "alias": "ifAlias1" }, { "device_id": "1234", @@ -315,7 +332,8 @@ func Test_metricSender_reportNetworkDeviceMetadata_withInterfaces(t *testing.T) "interface:22" ], "index": 2, - "name": "22" + "name": "22", + "alias": "ifAlias2" } ], "collect_timestamp":1415792726 @@ -406,6 +424,10 @@ func Test_batchPayloads(t *testing.T) { for i := 0; i < 350; i++ { interfaces = append(interfaces, metadata.InterfaceMetadata{DeviceID: deviceID, Index: int32(i)}) } + var ipAddresses []metadata.IPAddressMetadata + for i := 0; i < 100; i++ { + ipAddresses = append(ipAddresses, metadata.IPAddressMetadata{InterfaceID: deviceID + ":1", IPAddress: "1.2.3.4", Prefixlen: 24}) + } var topologyLinks []metadata.TopologyLinkMetadata for i := 0; i < 100; i++ { topologyLinks = append(topologyLinks, metadata.TopologyLinkMetadata{ @@ -413,9 +435,9 @@ func Test_batchPayloads(t *testing.T) { Remote: &metadata.TopologyLinkSide{Interface: &metadata.TopologyLinkInterface{ID: "b"}}, }) } - payloads := batchPayloads("my-ns", "127.0.0.0/30", collectTime, 100, device, interfaces, topologyLinks) + payloads := batchPayloads("my-ns", "127.0.0.0/30", collectTime, 100, device, interfaces, ipAddresses, topologyLinks) - assert.Equal(t, 5, len(payloads)) + assert.Equal(t, 6, len(payloads)) assert.Equal(t, "my-ns", payloads[0].Namespace) assert.Equal(t, "127.0.0.0/30", payloads[0].Subnet) @@ -436,12 +458,249 @@ func Test_batchPayloads(t *testing.T) { assert.Equal(t, 0, len(payloads[3].Devices)) assert.Equal(t, 51, len(payloads[3].Interfaces)) - assert.Equal(t, 49, len(payloads[3].Links)) + assert.Equal(t, 49, len(payloads[3].IPAddresses)) assert.Equal(t, interfaces[299:350], payloads[3].Interfaces) - assert.Equal(t, topologyLinks[:49], payloads[3].Links) + assert.Equal(t, ipAddresses[:49], payloads[3].IPAddresses) assert.Equal(t, 0, len(payloads[4].Devices)) - assert.Equal(t, 0, len(payloads[4].Interfaces)) - assert.Equal(t, 51, len(payloads[4].Links)) - assert.Equal(t, topologyLinks[49:100], payloads[4].Links) + assert.Equal(t, 51, len(payloads[4].IPAddresses)) + assert.Equal(t, 49, len(payloads[4].Links)) + assert.Equal(t, ipAddresses[49:], payloads[4].IPAddresses) + assert.Equal(t, topologyLinks[:49], payloads[4].Links) + + assert.Equal(t, 0, len(payloads[5].Devices)) + assert.Equal(t, 0, len(payloads[5].Interfaces)) + assert.Equal(t, 51, len(payloads[5].Links)) + assert.Equal(t, topologyLinks[49:100], payloads[5].Links) +} + +func TestComputeInterfaceStatus(t *testing.T) { + type testCase struct { + ifAdminStatus common.IfAdminStatus + ifOperStatus common.IfOperStatus + status common.InterfaceStatus + } + + // Test the method with only valid input for ifAdminStatus and ifOperStatus + allTests := []testCase{ + // Valid test cases + {common.AdminStatus_Up, common.OperStatus_Up, common.InterfaceStatus_Up}, + {common.AdminStatus_Up, common.OperStatus_Down, common.InterfaceStatus_Down}, + {common.AdminStatus_Up, common.OperStatus_Testing, common.InterfaceStatus_Warning}, + {common.AdminStatus_Up, common.OperStatus_Unknown, common.InterfaceStatus_Warning}, + {common.AdminStatus_Up, common.OperStatus_Dormant, common.InterfaceStatus_Warning}, + {common.AdminStatus_Up, common.OperStatus_NotPresent, common.InterfaceStatus_Warning}, + {common.AdminStatus_Up, common.OperStatus_LowerLayerDown, common.InterfaceStatus_Warning}, + {common.AdminStatus_Down, common.OperStatus_Up, common.InterfaceStatus_Down}, + {common.AdminStatus_Down, common.OperStatus_Down, common.InterfaceStatus_Off}, + {common.AdminStatus_Down, common.OperStatus_Testing, common.InterfaceStatus_Warning}, + {common.AdminStatus_Down, common.OperStatus_Unknown, common.InterfaceStatus_Warning}, + {common.AdminStatus_Down, common.OperStatus_Dormant, common.InterfaceStatus_Warning}, + {common.AdminStatus_Down, common.OperStatus_NotPresent, common.InterfaceStatus_Warning}, + {common.AdminStatus_Down, common.OperStatus_LowerLayerDown, common.InterfaceStatus_Warning}, + {common.AdminStatus_Testing, common.OperStatus_Up, common.InterfaceStatus_Warning}, + {common.AdminStatus_Testing, common.OperStatus_Down, common.InterfaceStatus_Down}, + {common.AdminStatus_Testing, common.OperStatus_Testing, common.InterfaceStatus_Warning}, + {common.AdminStatus_Testing, common.OperStatus_Unknown, common.InterfaceStatus_Warning}, + {common.AdminStatus_Testing, common.OperStatus_Dormant, common.InterfaceStatus_Warning}, + {common.AdminStatus_Testing, common.OperStatus_NotPresent, common.InterfaceStatus_Warning}, + {common.AdminStatus_Testing, common.OperStatus_LowerLayerDown, common.InterfaceStatus_Warning}, + + // Invalid ifOperStatus + {common.AdminStatus_Up, 0, common.InterfaceStatus_Warning}, + {common.AdminStatus_Up, 8, common.InterfaceStatus_Warning}, + {common.AdminStatus_Up, 100, common.InterfaceStatus_Warning}, + {common.AdminStatus_Down, 0, common.InterfaceStatus_Warning}, + {common.AdminStatus_Down, 8, common.InterfaceStatus_Warning}, + {common.AdminStatus_Down, 100, common.InterfaceStatus_Warning}, + {common.AdminStatus_Testing, 0, common.InterfaceStatus_Warning}, + {common.AdminStatus_Testing, 8, common.InterfaceStatus_Warning}, + {common.AdminStatus_Testing, 100, common.InterfaceStatus_Warning}, + + // Invalid ifAdminStatus + {0, common.OperStatus_Unknown, common.InterfaceStatus_Down}, + {0, common.OperStatus_Down, common.InterfaceStatus_Down}, + {0, common.OperStatus_Up, common.InterfaceStatus_Down}, + {4, common.OperStatus_Up, common.InterfaceStatus_Down}, + {4, common.OperStatus_Down, common.InterfaceStatus_Down}, + {4, common.OperStatus_Testing, common.InterfaceStatus_Down}, + {100, common.OperStatus_Up, common.InterfaceStatus_Down}, + {100, common.OperStatus_Down, common.InterfaceStatus_Down}, + {100, common.OperStatus_Testing, common.InterfaceStatus_Down}, + } + for _, test := range allTests { + assert.Equal(t, test.status, computeInterfaceStatus(test.ifAdminStatus, test.ifOperStatus)) + } +} + +func Test_getRemManIPAddrByLLDPRemIndex(t *testing.T) { + indexes := []string{ + // IPv4 + "0.102.2.1.4.10.250.0.7", + "0.102.99.1.4.10.250.0.8", + + // IPv6 + "370.5.1.2.16.254.128.0.0.0.0.0.0.26.146.164.255.254.48.12.1", + + // Invalid + "0.102.2.1.4.10.250", // too short, ignored + } + remManIPAddrByLLDPRemIndex := getRemManIPAddrByLLDPRemIndex(indexes) + expectedResult := map[string]string{ + "2": "10.250.0.7", + "99": "10.250.0.8", + } + assert.Equal(t, expectedResult, remManIPAddrByLLDPRemIndex) +} + +func Test_resolveLocalInterface(t *testing.T) { + interfaceIndexByIDType := map[string]map[string]int32{ + "mac_address": { + "00:00:00:00:00:01": 1, + "00:00:00:00:00:02": 2, + }, + "interface_name": { + "eth1": 1, + "eth2": 2, + }, + "interface_alias": { + "alias1": 1, + "alias2": 2, + }, + "interface_index": { + "1": 1, + "2": 2, + }, + } + deviceID := "default:1.2.3.4" + + tests := []struct { + name string + localIDType string + localID string + expectedIDType string + expectedID string + }{ + { + name: "mac_address", + localIDType: "mac_address", + localID: "00:00:00:00:00:01", + expectedIDType: "ndm", + expectedID: "default:1.2.3.4:1", + }, + { + name: "interface_name", + localIDType: "interface_name", + localID: "eth2", + expectedIDType: "ndm", + expectedID: "default:1.2.3.4:2", + }, + { + name: "interface_alias", + localIDType: "interface_alias", + localID: "alias2", + expectedIDType: "ndm", + expectedID: "default:1.2.3.4:2", + }, + { + name: "mac_address by trying", + localIDType: "", + localID: "00:00:00:00:00:01", + expectedIDType: "ndm", + expectedID: "default:1.2.3.4:1", + }, + { + name: "interface_name by trying", + localIDType: "", + localID: "eth2", + expectedIDType: "ndm", + expectedID: "default:1.2.3.4:2", + }, + { + name: "interface_alias by trying", + localIDType: "", + localID: "alias2", + expectedIDType: "ndm", + expectedID: "default:1.2.3.4:2", + }, + { + name: "interface_alias by trying", + localIDType: "", + localID: "alias2", + expectedIDType: "ndm", + expectedID: "default:1.2.3.4:2", + }, + { + name: "interface_index by trying", + localIDType: "", + localID: "2", + expectedIDType: "ndm", + expectedID: "default:1.2.3.4:2", + }, + { + name: "mac_address not found", + localIDType: "mac_address", + localID: "00:00:00:00:00:99", + expectedIDType: "mac_address", + expectedID: "00:00:00:00:00:99", + }, + { + name: "invalid", + localIDType: "invalid_type", + localID: "invalidID", + expectedIDType: "invalid_type", + expectedID: "invalidID", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + actualIDType, actualID := resolveLocalInterface(deviceID, interfaceIndexByIDType, tt.localIDType, tt.localID) + assert.Equal(t, tt.expectedIDType, actualIDType) + assert.Equal(t, tt.expectedID, actualID) + }) + } +} + +func Test_buildInterfaceIndexByIDType(t *testing.T) { + // Arrange + interfaces := []metadata.InterfaceMetadata{ + { + DeviceID: "default:1.2.3.4", + Index: 1, + MacAddress: "00:00:00:00:00:01", + Name: "eth1", + Alias: "alias1", + }, + { + DeviceID: "default:1.2.3.4", + Index: 2, + MacAddress: "00:00:00:00:00:02", + Name: "eth2", + Alias: "alias2", + }, + } + + // Act + interfaceIndexByIDType := buildInterfaceIndexByIDType(interfaces) + + // Assert + expectedInterfaceIndexByIDType := map[string]map[string]int32{ + "mac_address": { + "00:00:00:00:00:01": 1, + "00:00:00:00:00:02": 2, + }, + "interface_name": { + "eth1": 1, + "eth2": 2, + }, + "interface_alias": { + "alias1": 1, + "alias2": 2, + }, + "interface_index": { + "1": 1, + "2": 2, + }, + } + assert.Equal(t, expectedInterfaceIndexByIDType, interfaceIndexByIDType) } diff --git a/pkg/collector/corechecks/snmp/internal/report/report_utils.go b/pkg/collector/corechecks/snmp/internal/report/report_utils.go index e9160d75eb3236..c2fba033d27977 100644 --- a/pkg/collector/corechecks/snmp/internal/report/report_utils.go +++ b/pkg/collector/corechecks/snmp/internal/report/report_utils.go @@ -7,6 +7,7 @@ package report import ( "fmt" + "net" "strings" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/checkconfig" @@ -147,3 +148,9 @@ func transformIndex(indexes []string, transformRules []checkconfig.MetricIndexTr } return newIndex } + +func netmaskToPrefixlen(netmask string) int { + stringMask := net.IPMask(net.ParseIP(netmask).To4()) + length, _ := stringMask.Size() + return length +} diff --git a/pkg/collector/corechecks/snmp/internal/report/report_utils_test.go b/pkg/collector/corechecks/snmp/internal/report/report_utils_test.go index 0072dab3f7cd0a..2af2bd865639f7 100644 --- a/pkg/collector/corechecks/snmp/internal/report/report_utils_test.go +++ b/pkg/collector/corechecks/snmp/internal/report/report_utils_test.go @@ -689,3 +689,41 @@ metric_tags: }) } } + +func Test_netmaskToPrefixlen(t *testing.T) { + assert.Equal(t, 0, netmaskToPrefixlen("")) + assert.Equal(t, 0, netmaskToPrefixlen("invalid")) + assert.Equal(t, 32, netmaskToPrefixlen("255.255.255.255")) + assert.Equal(t, 31, netmaskToPrefixlen("255.255.255.254")) + assert.Equal(t, 30, netmaskToPrefixlen("255.255.255.252")) + assert.Equal(t, 29, netmaskToPrefixlen("255.255.255.248")) + assert.Equal(t, 28, netmaskToPrefixlen("255.255.255.240")) + assert.Equal(t, 27, netmaskToPrefixlen("255.255.255.224")) + assert.Equal(t, 26, netmaskToPrefixlen("255.255.255.192")) + assert.Equal(t, 25, netmaskToPrefixlen("255.255.255.128")) + assert.Equal(t, 24, netmaskToPrefixlen("255.255.255.0")) + assert.Equal(t, 23, netmaskToPrefixlen("255.255.254.0")) + assert.Equal(t, 22, netmaskToPrefixlen("255.255.252.0")) + assert.Equal(t, 21, netmaskToPrefixlen("255.255.248.0")) + assert.Equal(t, 20, netmaskToPrefixlen("255.255.240.0")) + assert.Equal(t, 19, netmaskToPrefixlen("255.255.224.0")) + assert.Equal(t, 18, netmaskToPrefixlen("255.255.192.0")) + assert.Equal(t, 17, netmaskToPrefixlen("255.255.128.0")) + assert.Equal(t, 16, netmaskToPrefixlen("255.255.0.0")) + assert.Equal(t, 15, netmaskToPrefixlen("255.254.0.0")) + assert.Equal(t, 14, netmaskToPrefixlen("255.252.0.0")) + assert.Equal(t, 13, netmaskToPrefixlen("255.248.0.0")) + assert.Equal(t, 12, netmaskToPrefixlen("255.240.0.0")) + assert.Equal(t, 11, netmaskToPrefixlen("255.224.0.0")) + assert.Equal(t, 10, netmaskToPrefixlen("255.192.0.0")) + assert.Equal(t, 9, netmaskToPrefixlen("255.128.0.0")) + assert.Equal(t, 8, netmaskToPrefixlen("255.0.0.0")) + assert.Equal(t, 7, netmaskToPrefixlen("254.0.0.0")) + assert.Equal(t, 6, netmaskToPrefixlen("252.0.0.0")) + assert.Equal(t, 5, netmaskToPrefixlen("248.0.0.0")) + assert.Equal(t, 4, netmaskToPrefixlen("240.0.0.0")) + assert.Equal(t, 3, netmaskToPrefixlen("224.0.0.0")) + assert.Equal(t, 2, netmaskToPrefixlen("192.0.0.0")) + assert.Equal(t, 1, netmaskToPrefixlen("128.0.0.0")) + assert.Equal(t, 0, netmaskToPrefixlen("0.0.0.0")) +} diff --git a/pkg/collector/corechecks/snmp/profile_test.go b/pkg/collector/corechecks/snmp/profile_metadata_test.go similarity index 88% rename from pkg/collector/corechecks/snmp/profile_test.go rename to pkg/collector/corechecks/snmp/profile_metadata_test.go index 47c9ae6663f95c..edbaa05615bcbe 100644 --- a/pkg/collector/corechecks/snmp/profile_test.go +++ b/pkg/collector/corechecks/snmp/profile_metadata_test.go @@ -145,7 +145,7 @@ profiles: { Name: "1.0.8802.1.1.2.1.3.7.1.3.101", Type: gosnmp.OctetString, - Value: []byte{0x01, 0x00, 0x00, 0x00, 0x01, 0x03}, + Value: []byte{0x82, 0xa5, 0x6e, 0xa5, 0xc9, 0x01}, }, { Name: "1.0.8802.1.1.2.1.4.1.1.10.0.101.1", @@ -182,6 +182,11 @@ profiles: Type: gosnmp.OctetString, Value: []byte("RemoteDev1-Name"), }, + { + Name: "1.0.8802.1.1.2.1.4.2.1.3.0.101.1.1.4.10.250.0.6", + Type: gosnmp.OctetString, + Value: []byte("RemoteDev2-Name"), + }, { Name: "1.3.6.1.2.1.2.2.1.13.1", Type: gosnmp.Integer, @@ -222,6 +227,17 @@ profiles: Type: gosnmp.OctetString, Value: []byte("descRow1"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + { Name: "1.0.8802.1.1.2.1.3.7.1.2.102", Type: gosnmp.Integer, @@ -230,7 +246,7 @@ profiles: { Name: "1.0.8802.1.1.2.1.3.7.1.3.102", Type: gosnmp.OctetString, - Value: []byte{0x01, 0x00, 0x00, 0x00, 0x02, 0x03}, + Value: []byte{0x82, 0xa5, 0x6e, 0xa5, 0xc9, 0x02}, }, { Name: "1.0.8802.1.1.2.1.4.1.1.10.0.102.2", @@ -267,6 +283,11 @@ profiles: Type: gosnmp.OctetString, Value: []byte("RemoteDev2-Name"), }, + { + Name: "1.0.8802.1.1.2.1.4.2.1.3.0.102.2.1.4.10.250.0.7", + Type: gosnmp.OctetString, + Value: []byte("RemoteDev2-Name"), + }, { Name: "1.3.6.1.2.1.2.2.1.13.2", Type: gosnmp.Integer, @@ -307,6 +328,32 @@ profiles: Type: gosnmp.OctetString, Value: []byte("descRow2"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.2", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.2", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, { Name: "9", // exit table Type: gosnmp.Integer, @@ -426,6 +473,7 @@ profiles: "1.0.8802.1.1.2.1.4.1.1.7", "1.0.8802.1.1.2.1.4.1.1.8", "1.0.8802.1.1.2.1.4.1.1.9", + "1.0.8802.1.1.2.1.4.2.1.3", "1.3.6.1.2.1.2.2.1.13", "1.3.6.1.2.1.2.2.1.14", "1.3.6.1.2.1.2.2.1.2", @@ -434,6 +482,8 @@ profiles: "1.3.6.1.2.1.2.2.1.8", "1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18", + "1.3.6.1.2.1.4.20.1.2", + "1.3.6.1.2.1.4.20.1.3", }, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPacket, nil) err = chk.Run() @@ -500,6 +550,18 @@ profiles: "oper_status": 1 } ], + "ip_addresses": [ + { + "interface_id": "profile-metadata:1.2.3.4:1", + "ip_address": "10.0.0.1", + "prefixlen": 24 + }, + { + "interface_id": "profile-metadata:1.2.3.4:1", + "ip_address": "10.0.0.2", + "prefixlen": 24 + } + ], "links": [ { "local": { @@ -508,8 +570,8 @@ profiles: "id_type": "ndm" }, "interface": { - "id": "01:00:00:00:01:03", - "id_type": "mac_address" + "id": "profile-metadata:1.2.3.4:1", + "id_type": "ndm" } }, "remote": { @@ -517,7 +579,8 @@ profiles: "id": "01:00:00:00:01:02", "id_type": "mac_address", "name": "RemoteDev1-Name", - "description": "RemoteDev1-Description" + "description": "RemoteDev1-Description", + "ip_address": "10.250.0.6" }, "interface": { "id": "01:00:00:00:01:01", @@ -533,8 +596,8 @@ profiles: "id_type": "ndm" }, "interface": { - "id": "01:00:00:00:02:03", - "id_type": "mac_address" + "id": "profile-metadata:1.2.3.4:2", + "id_type": "ndm" } }, "remote": { @@ -542,7 +605,8 @@ profiles: "id": "01:00:00:00:02:02", "id_type": "mac_address", "name": "RemoteDev2-Name", - "description": "RemoteDev2-Description" + "description": "RemoteDev2-Description", + "ip_address": "10.250.0.7" }, "interface": { "id": "01:00:00:00:02:01", diff --git a/pkg/collector/corechecks/snmp/snmp_test.go b/pkg/collector/corechecks/snmp/snmp_test.go index 0dcea196cf7d4f..7da2129093b84b 100644 --- a/pkg/collector/corechecks/snmp/snmp_test.go +++ b/pkg/collector/corechecks/snmp/snmp_test.go @@ -218,6 +218,17 @@ tags: Type: gosnmp.OctetString, Value: []byte("descRow1"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + { Name: "1.3.6.1.2.1.2.2.1.8.2", Type: gosnmp.Integer, @@ -233,6 +244,16 @@ tags: Type: gosnmp.OctetString, Value: []byte("descRow2"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.2", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.2", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, }, } @@ -251,6 +272,14 @@ tags: Name: "999", Type: gosnmp.NoSuchObject, }, + { + Name: "999", + Type: gosnmp.NoSuchObject, + }, + { + Name: "999", + Type: gosnmp.NoSuchObject, + }, }, } @@ -259,8 +288,8 @@ tags: sess.On("Get", mock.Anything).Return(&packet, nil) sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.14", "1.3.6.1.2.1.2.2.1.2", "1.3.6.1.2.1.2.2.1.20", "1.3.6.1.2.1.2.2.1.6", "1.3.6.1.2.1.2.2.1.7"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkBatch1Packet1, nil) sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.14.2", "1.3.6.1.2.1.2.2.1.2.2", "1.3.6.1.2.1.2.2.1.20.2", "1.3.6.1.2.1.2.2.1.6.2", "1.3.6.1.2.1.2.2.1.7.2"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkBatch1Packet2, nil) - sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.8", "1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkBatch2Packet1, nil) - sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.8.2", "1.3.6.1.2.1.31.1.1.1.1.2", "1.3.6.1.2.1.31.1.1.1.18.2"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkBatch2Packe2, nil) + sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.8", "1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18", "1.3.6.1.2.1.4.20.1.2", "1.3.6.1.2.1.4.20.1.3"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkBatch2Packet1, nil) + sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.8.2", "1.3.6.1.2.1.31.1.1.1.1.2", "1.3.6.1.2.1.31.1.1.1.18.2", "1.3.6.1.2.1.4.20.1.2.10.0.0.2", "1.3.6.1.2.1.4.20.1.3.10.0.0.2"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkBatch2Packe2, nil) err = chk.Run() assert.Nil(t, err) @@ -497,6 +526,17 @@ profiles: Type: gosnmp.OctetString, Value: []byte("descRow1"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + { Name: "1.3.6.1.2.1.2.2.1.13.2", Type: gosnmp.Integer, @@ -532,6 +572,27 @@ profiles: Type: gosnmp.OctetString, Value: []byte("descRow2"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.2", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.2", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, { Name: "9", // exit table Type: gosnmp.Integer, @@ -598,6 +659,8 @@ profiles: "1.3.6.1.2.1.2.2.1.8", "1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18", + "1.3.6.1.2.1.4.20.1.2", + "1.3.6.1.2.1.4.20.1.3", }, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPacket, nil) err = chk.Run() @@ -685,6 +748,18 @@ profiles: "oper_status": 1 } ], + "ip_addresses": [ + { + "interface_id": "default:1.2.3.4:1", + "ip_address": "10.0.0.1", + "prefixlen": 24 + }, + { + "interface_id": "default:1.2.3.4:1", + "ip_address": "10.0.0.2", + "prefixlen": 24 + } + ], "collect_timestamp":946684800 } `, version.AgentVersion)) @@ -1135,6 +1210,17 @@ tags: Type: gosnmp.OctetString, Value: []byte("descRow1"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + { Name: "1.3.6.1.2.1.2.2.1.2.2", Type: gosnmp.OctetString, @@ -1165,6 +1251,27 @@ tags: Type: gosnmp.OctetString, Value: []byte("descRow2"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.2", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.2", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, { Name: "9", // exit table Type: gosnmp.Integer, @@ -1216,6 +1323,8 @@ tags: "1.3.6.1.2.1.2.2.1.8", "1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18", + "1.3.6.1.2.1.4.20.1.2", + "1.3.6.1.2.1.4.20.1.3", }, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPacket, nil) err = chk.Run() @@ -1277,6 +1386,18 @@ tags: "oper_status": 1 } ], + "ip_addresses": [ + { + "interface_id": "default:1.2.3.4:1", + "ip_address": "10.0.0.1", + "prefixlen": 24 + }, + { + "interface_id": "default:1.2.3.4:1", + "ip_address": "10.0.0.2", + "prefixlen": 24 + } + ], "collect_timestamp":946684800 } `, version.AgentVersion)) @@ -1488,6 +1609,17 @@ metric_tags: Type: gosnmp.OctetString, Value: []byte("descRow1"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + { Name: "1.3.6.1.2.1.2.2.1.2.2", Type: gosnmp.OctetString, @@ -1518,6 +1650,27 @@ metric_tags: Type: gosnmp.OctetString, Value: []byte("descRow2"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.2", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.2", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, { Name: "9", // exit table Type: gosnmp.Integer, @@ -1569,6 +1722,8 @@ metric_tags: "1.3.6.1.2.1.2.2.1.8", "1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18", + "1.3.6.1.2.1.4.20.1.2", + "1.3.6.1.2.1.4.20.1.3", }, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPacket, nil) deviceMap := []struct { @@ -1647,9 +1802,21 @@ metric_tags: "oper_status": 1 } ], + "ip_addresses": [ + { + "interface_id": "%s:1", + "ip_address": "10.0.0.1", + "prefixlen": 24 + }, + { + "interface_id": "%s:1", + "ip_address": "10.0.0.2", + "prefixlen": 24 + } + ], "collect_timestamp":946684800 } -`, deviceData.deviceID, deviceData.ipAddress, version.AgentVersion, deviceData.ipAddress, deviceData.ipAddress, deviceData.deviceID, deviceData.deviceID)) +`, deviceData.deviceID, deviceData.ipAddress, version.AgentVersion, deviceData.ipAddress, deviceData.ipAddress, deviceData.deviceID, deviceData.deviceID, deviceData.deviceID, deviceData.deviceID)) compactEvent := new(bytes.Buffer) err = json.Compact(compactEvent, event) assert.NoError(t, err) @@ -1853,6 +2020,27 @@ use_device_id_as_hostname: true Type: gosnmp.OctetString, Value: []byte("ifDescRow1"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, { Name: "9", // exit table Type: gosnmp.Integer, @@ -1866,6 +2054,8 @@ use_device_id_as_hostname: true }, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[0], nil) sess.On("GetBulk", []string{ "1.3.6.1.2.1.31.1.1.1.18", + "1.3.6.1.2.1.4.20.1.2", + "1.3.6.1.2.1.4.20.1.3", }, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[1], nil) err = chk.Run() @@ -2010,6 +2200,27 @@ metrics: Type: gosnmp.OctetString, Value: []byte("ifDescRow1"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, { Name: "9", // exit table Type: gosnmp.Integer, @@ -2043,7 +2254,14 @@ metrics: }, } sess.On("GetBulk", []string{ - "1.3.6.1.2.1.2.2.1.2", "1.3.6.1.2.1.2.2.1.6", "1.3.6.1.2.1.2.2.1.7", "1.3.6.1.2.1.2.2.1.8", "1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18", + "1.3.6.1.2.1.2.2.1.2", + "1.3.6.1.2.1.2.2.1.6", + "1.3.6.1.2.1.2.2.1.7", + "1.3.6.1.2.1.2.2.1.8", + "1.3.6.1.2.1.31.1.1.1.1", + "1.3.6.1.2.1.31.1.1.1.18", + "1.3.6.1.2.1.4.20.1.2", + "1.3.6.1.2.1.4.20.1.3", }, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPacket, nil) deviceMap := []struct { diff --git a/pkg/collector/corechecks/systemd/systemd.go b/pkg/collector/corechecks/systemd/systemd.go index 139eb0e4d4e57a..d94085442f93ea 100644 --- a/pkg/collector/corechecks/systemd/systemd.go +++ b/pkg/collector/corechecks/systemd/systemd.go @@ -364,7 +364,7 @@ func (c *SystemdCheck) submitBasicUnitMetrics(sender aggregator.Sender, conn *db unitProperties, err := c.stats.GetUnitTypeProperties(conn, unit.Name, dbusTypeMap[typeUnit]) if err != nil { - log.Warnf("Error getting unit unitProperties: %s", unit.Name) + log.Warnf("Error getting unit unitProperties: %s: %v", unit.Name, err) return } activeEnterTimestamp, err := getPropertyUint64(unitProperties, "ActiveEnterTimestamp") diff --git a/pkg/collector/internal/middleware/check_wrapper.go b/pkg/collector/internal/middleware/check_wrapper.go index 640821429d404e..e9789798bbbe45 100644 --- a/pkg/collector/internal/middleware/check_wrapper.go +++ b/pkg/collector/internal/middleware/check_wrapper.go @@ -15,11 +15,14 @@ import ( ) // CheckWrapper cleans up the check sender after a check was -// descheduled, taking care to postpone it until Run returns if it is -// running. +// descheduled, taking care that Run is not executing during or after +// that. type CheckWrapper struct { inner check.Check - wg sync.WaitGroup + // done is true when the check was cancelled and must not run. + done bool + // Locked while check is running. + runM sync.Mutex } // NewCheckWrapper returns a wrapped check. @@ -31,8 +34,11 @@ func NewCheckWrapper(inner check.Check) *CheckWrapper { // Run implements Check#Run func (c *CheckWrapper) Run() error { - c.wg.Add(1) - defer c.wg.Done() + c.runM.Lock() + defer c.runM.Unlock() + if c.done { + return nil + } return c.inner.Run() } @@ -43,7 +49,10 @@ func (c *CheckWrapper) Cancel() { } func (c *CheckWrapper) destroySender() { - c.wg.Wait() + // Done must happen before Wait + c.runM.Lock() + defer c.runM.Unlock() + c.done = true aggregator.DestroySender(c.ID()) } diff --git a/pkg/collector/internal/middleware/test_utils.go b/pkg/collector/internal/middleware/test_utils.go index 2b1d043bc37e8b..e849bd86e14430 100644 --- a/pkg/collector/internal/middleware/test_utils.go +++ b/pkg/collector/internal/middleware/test_utils.go @@ -20,5 +20,6 @@ func (c *CheckWrapper) Inner() check.Check { // Wait blocks until Run() finishes execution in another // goroutine. Does not block if Run() is not executing. func (c *CheckWrapper) Wait() { - c.wg.Wait() + c.runM.Lock() + defer c.runM.Unlock() } diff --git a/pkg/collector/python/init.go b/pkg/collector/python/init.go index b62bc0cad1c680..77165995a58abf 100644 --- a/pkg/collector/python/init.go +++ b/pkg/collector/python/init.go @@ -16,12 +16,14 @@ import ( "runtime" "strings" "sync" + "time" "unsafe" "github.com/DataDog/datadog-agent/pkg/aggregator" "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/metrics" "github.com/DataDog/datadog-agent/pkg/tagset" + "github.com/DataDog/datadog-agent/pkg/telemetry" "github.com/DataDog/datadog-agent/pkg/util/cache" "github.com/DataDog/datadog-agent/pkg/util/executable" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -403,6 +405,10 @@ func Initialize(paths ...string) error { return err } + if config.Datadog.GetBool("telemetry.enabled") && config.Datadog.GetBool("telemetry.python_memory") { + initPymemTelemetry() + } + // Set the PYTHONPATH if needed. for _, p := range paths { // bounded but never released allocations with CString @@ -458,3 +464,24 @@ func Initialize(paths ...string) error { func GetRtLoader() *C.rtloader_t { return rtloader } + +func initPymemTelemetry() { + C.init_pymem_stats(rtloader) + + // "alloc" for consistency with go memstats and mallochook metrics. + alloc := telemetry.NewSimpleCounter("pymem", "alloc", "Total number of bytes allocated by the python interpreter since the start of the agent.") + inuse := telemetry.NewSimpleGauge("pymem", "inuse", "Number of bytes currently allocated by the python interpreter.") + + go func() { + t := time.NewTicker(1 * time.Second) + var prevAlloc C.size_t + + for range t.C { + var s C.pymem_stats_t + C.get_pymem_stats(rtloader, &s) + inuse.Set(float64(s.inuse)) + alloc.Add(float64(s.alloc - prevAlloc)) + prevAlloc = s.alloc + } + }() +} diff --git a/pkg/compliance/agent/agent_test.go b/pkg/compliance/agent/agent_test.go index b17d788b343ca6..9416de1640c0ec 100644 --- a/pkg/compliance/agent/agent_test.go +++ b/pkg/compliance/agent/agent_test.go @@ -137,10 +137,6 @@ func TestRunK8s(t *testing.T) { kubeClient := &mocks.KubeClient{} kubeClient.On("Resource", mock.Anything).Return(nil) - nodeLabels := map[string]string{ - "node-role.kubernetes.io/worker": "", - } - agent, err := New( reporter, scheduler, @@ -148,7 +144,6 @@ func TestRunK8s(t *testing.T) { &config.Endpoints{}, checks.WithHostname("the-host"), checks.WithHostRootMount(e.dir), - checks.WithNodeLabels(nodeLabels), checks.WithKubernetesClient(kubeClient, "kube_system_uuid"), ) assert.NoError(err) @@ -345,17 +340,12 @@ func TestRunChecksFromFile(t *testing.T) { kubeClient := &mocks.KubeClient{} - nodeLabels := map[string]string{ - "node-role.kubernetes.io/worker": "", - } - err := RunChecksFromFile( reporter, filepath.Join(e.dir, "cis-kubernetes.yaml"), checks.WithHostname("the-host"), checks.WithHostRootMount(e.dir), checks.WithDockerClient(dockerClient), - checks.WithNodeLabels(nodeLabels), checks.WithKubernetesClient(kubeClient, "kube_system_uuid"), ) assert.NoError(err) diff --git a/pkg/compliance/agent/node_labels.go b/pkg/compliance/agent/node_labels.go deleted file mode 100644 index 2474356a593f5e..00000000000000 --- a/pkg/compliance/agent/node_labels.go +++ /dev/null @@ -1,63 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package agent - -import ( - "context" - "fmt" - "math" - "time" - - "github.com/DataDog/datadog-agent/pkg/util/kubernetes/hostinfo" - "github.com/DataDog/datadog-agent/pkg/util/log" - - "github.com/cenkalti/backoff/v4" -) - -const ( - nodeLabelsCheckInitialInterval = time.Second - nodeLabelsCheckMaxInterval = 10 * time.Second - nodeLabelsCheckMultiplier = 2.0 - nodeLabelsCheckMaxElapsedTime = 1 * time.Minute -) - -// WaitGetNodeLabels waits for node labels to become available using a backoff retrier -func WaitGetNodeLabels() (map[string]string, error) { - fetcher := &labelsFetcher{} - exp := backoff.NewExponentialBackOff() - exp.InitialInterval = nodeLabelsCheckInitialInterval - exp.RandomizationFactor = 0 - exp.Multiplier = nodeLabelsCheckMultiplier - exp.MaxInterval = nodeLabelsCheckMaxInterval - exp.MaxElapsedTime = nodeLabelsCheckMaxElapsedTime - exp.Reset() - - err := backoff.RetryNotify(fetcher.fetch, exp, notifyFetchNodeLabels()) - return fetcher.nodeLabels, err -} - -type labelsFetcher struct { - nodeLabels map[string]string -} - -func (f *labelsFetcher) fetch() error { - nodeInfo, err := hostinfo.NewNodeInfo() - if err != nil { - return fmt.Errorf("unable to instantiate NodeInfo, err: %w", err) - } - f.nodeLabels, err = nodeInfo.GetNodeLabels(context.TODO()) - return err -} - -func notifyFetchNodeLabels() backoff.Notify { - attempt := 0 - return func(err error, delay time.Duration) { - attempt++ - mins := int(delay.Minutes()) - secs := int(math.Mod(delay.Seconds(), 60)) - log.Warnf("Failed to get node labels (attempt=%d): will retry in %dm%ds: %v", attempt, mins, secs, err) - } -} diff --git a/pkg/compliance/agent/testdata/configs/cis-kubernetes.yaml b/pkg/compliance/agent/testdata/configs/cis-kubernetes.yaml index 68313a77664fb1..4c097eacc71b45 100644 --- a/pkg/compliance/agent/testdata/configs/cis-kubernetes.yaml +++ b/pkg/compliance/agent/testdata/configs/cis-kubernetes.yaml @@ -7,7 +7,6 @@ rules: - id: cis-kubernetes-1 scope: - kubernetesNode - hostSelector: node.label("kubernetes.io/role") in ["worker"] input: - file: path: /files/kube-apiserver.yaml diff --git a/pkg/compliance/checks/builder.go b/pkg/compliance/checks/builder.go index e1857235bdc01a..74b2c6a8740bc8 100644 --- a/pkg/compliance/checks/builder.go +++ b/pkg/compliance/checks/builder.go @@ -35,7 +35,6 @@ import ( fileutils "github.com/DataDog/datadog-agent/pkg/compliance/utils/file" processutils "github.com/DataDog/datadog-agent/pkg/compliance/utils/process" "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/util/kubernetes/hostinfo" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-go/v5/statsd" ) @@ -229,18 +228,6 @@ func MayFail(o BuilderOption) BuilderOption { } } -// WithNodeLabels configures a builder to use specified Kubernetes node labels -func WithNodeLabels(nodeLabels map[string]string) BuilderOption { - return func(b *builder) error { - b.nodeLabels = map[string]string{} - for k, v := range nodeLabels { - k, v := hostinfo.LabelPreprocessor(k, v) - b.nodeLabels[k] = v - } - return nil - } -} - // WithRegoInput configures a builder to provide rego input based on the content // of a file instead of the current environment func WithRegoInput(regoInputPath string) BuilderOption { @@ -318,7 +305,6 @@ type builder struct { hostname string pathMapper *fileutils.PathMapper etcGroupPath string - nodeLabels map[string]string suiteMatcher SuiteMatcher ruleMatcher RuleMatcher @@ -448,153 +434,39 @@ func (b *builder) checkFromRegoRule(meta *compliance.SuiteMeta, rule *compliance return nil, err } - // skip host match check if rego input is overridden + // skip the scope checks if rego inputs were provided via CLI if b.regoInputOverride == nil { - eligible, err := b.hostMatcher(ruleScope, rule.ID, rule.HostSelector, rule.SkipOnK8s) - if err != nil { - return nil, err - } - - if !eligible { - log.Debugf("rule %s/%s discarded by hostMatcher", meta.Framework, rule.ID) - return nil, ErrRuleDoesNotApply - } - } - - return b.newRegoCheck(meta, ruleScope, rule, fallthroughReporter) -} - -func fallthroughReporter(report *compliance.Report) compliance.ReportResource { - return report.Resource -} - -func getRuleScope(meta *compliance.SuiteMeta, scopeList compliance.RuleScopeList) (compliance.RuleScope, error) { - switch { - case scopeList.Includes(compliance.DockerScope): - return compliance.DockerScope, nil - case scopeList.Includes(compliance.KubernetesNodeScope): - return compliance.KubernetesNodeScope, nil - case scopeList.Includes(compliance.KubernetesClusterScope): - return compliance.KubernetesClusterScope, nil - case scopeList.Includes(compliance.Unscoped): - return compliance.Unscoped, nil - default: - return "", ErrRuleScopeNotSupported - } -} - -func (b *builder) hostMatcher(scope compliance.RuleScope, ruleID string, hostSelector string, skipOnK8s bool) (bool, error) { - switch scope { - case compliance.DockerScope: - if skipOnK8s && config.IsKubernetes() { - log.Infof("rule %s skipped - running on a Kubernetes environment", ruleID) - return false, nil - } + switch ruleScope { + case compliance.DockerScope: + if rule.SkipOnK8s && config.IsKubernetes() { + log.Infof("rule %s skipped - running on a Kubernetes environment", rule.ID) + return nil, ErrRuleDoesNotApply + } - if b.dockerClient == nil { - log.Infof("rule %s skipped - not running in a docker environment", ruleID) - return false, nil - } - case compliance.KubernetesClusterScope: - if b.kubeClient == nil { - log.Infof("rule %s skipped - not running as Cluster Agent", ruleID) - return false, nil - } - case compliance.KubernetesNodeScope: - if config.IsKubernetes() { - ignoreHostSelectors := config.Datadog.GetBool("compliance_config.ignore_host_selectors") - if ignoreHostSelectors { - return true, nil + if b.dockerClient == nil { + log.Infof("rule %s skipped - not running in a docker environment", rule.ID) + return nil, ErrRuleDoesNotApply + } + case compliance.KubernetesClusterScope: + if b.kubeClient == nil { + log.Infof("rule %s skipped - not running as Cluster Agent", rule.ID) + return nil, ErrRuleDoesNotApply + } + case compliance.KubernetesNodeScope: + if !config.IsKubernetes() { + log.Infof("rule %s skipped - not running on a Kubernetes node", rule.ID) + return nil, ErrRuleDoesNotApply } - return b.isKubernetesNodeEligible(hostSelector) } - log.Infof("rule %s skipped - not running on a Kubernetes node", ruleID) - return false, nil - } - - return true, nil -} - -func (b *builder) isKubernetesNodeEligible(hostSelector string) (bool, error) { - if hostSelector == "" { - return true, nil - } - - expr, err := eval.ParseExpression(hostSelector) - if err != nil { - return false, err - } - - labelKeys := b.nodeLabelKeys() - nodeInstance := eval.NewInstance( - eval.VarMap{ - "node.labels": labelKeys, - }, - eval.FunctionMap{ - "node.hasLabel": b.nodeHasLabel, - "node.label": b.nodeLabel, - }, - eval.RegoInputMap{ - "labels": labelKeys, - }, - ) - - result, err := expr.Evaluate(nodeInstance) - if err != nil { - return false, err } - eligible, ok := result.(bool) - if !ok { - return false, fmt.Errorf("hostSelector %q does not evaluate to a boolean value", hostSelector) - } - - return eligible, nil -} - -func (b *builder) getNodeLabel(args ...interface{}) (string, bool, error) { - if len(args) == 0 { - return "", false, errors.New(`expecting one argument for label`) - } - label, ok := args[0].(string) - if !ok { - return "", false, fmt.Errorf(`expecting string value for label argument`) - } - if b.nodeLabels == nil { - return "", false, nil - } - v, ok := b.nodeLabels[label] - return v, ok, nil -} - -func (b *builder) nodeHasLabel(_ eval.Instance, args ...interface{}) (interface{}, error) { - _, ok, err := b.getNodeLabel(args...) - return ok, err -} - -func (b *builder) nodeLabel(_ eval.Instance, args ...interface{}) (interface{}, error) { - v, _, err := b.getNodeLabel(args...) - return v, err -} - -func (b *builder) nodeLabelKeys() []string { - var keys []string - for k := range b.nodeLabels { - keys = append(keys, k) - } - return keys -} - -func (b *builder) newRegoCheck(meta *compliance.SuiteMeta, ruleScope compliance.RuleScope, rule *compliance.RegoRule, handler resourceReporter) (compliance.Check, error) { var m metrics.Metrics - m = newRegoTelemetry() if config.Datadog.GetBool("compliance_config.opa.metrics.enabled") { m = newRegoMetrics(m, b.statsdClient) } regoCheck := rego.NewCheck(rule) - if err := regoCheck.CompileRule(rule, ruleScope, meta, m); err != nil { return nil, err } @@ -614,7 +486,7 @@ func (b *builder) newRegoCheck(meta *compliance.SuiteMeta, ruleScope compliance. suiteMeta: meta, - resourceHandler: handler, + resourceHandler: fallthroughReporter, scope: ruleScope, checkable: regoCheck, @@ -622,6 +494,25 @@ func (b *builder) newRegoCheck(meta *compliance.SuiteMeta, ruleScope compliance. }, nil } +func fallthroughReporter(report *compliance.Report) compliance.ReportResource { + return report.Resource +} + +func getRuleScope(meta *compliance.SuiteMeta, scopeList compliance.RuleScopeList) (compliance.RuleScope, error) { + switch { + case scopeList.Includes(compliance.DockerScope): + return compliance.DockerScope, nil + case scopeList.Includes(compliance.KubernetesNodeScope): + return compliance.KubernetesNodeScope, nil + case scopeList.Includes(compliance.KubernetesClusterScope): + return compliance.KubernetesClusterScope, nil + case scopeList.Includes(compliance.Unscoped): + return compliance.Unscoped, nil + default: + return "", ErrRuleScopeNotSupported + } +} + func (b *builder) Reporter() event.Reporter { return b.reporter } @@ -683,10 +574,6 @@ func (b *builder) IsLeader() bool { return true } -func (b *builder) NodeLabels() map[string]string { - return b.nodeLabels -} - func (b *builder) EvaluateFromCache(ev eval.Evaluatable) (interface{}, error) { instance := eval.NewInstance( nil, diff --git a/pkg/compliance/checks/builder_test.go b/pkg/compliance/checks/builder_test.go index 76b479b6d85b57..319f7c2311146f 100644 --- a/pkg/compliance/checks/builder_test.go +++ b/pkg/compliance/checks/builder_test.go @@ -20,95 +20,6 @@ import ( assert "github.com/stretchr/testify/require" ) -func TestKubernetesNodeEligible(t *testing.T) { - tests := []struct { - name string - selector string - labels map[string]string - expectEligible bool - expectError error - }{ - { - name: "empty selector", - selector: "", - expectEligible: true, - }, - { - name: "role only", - selector: `node.label("kubernetes.io/role") in ["master"]`, - labels: map[string]string{ - "node-role.kubernetes.io/master": "", - "foo": "bar", - }, - expectEligible: true, - }, - { - name: "role and another label", - selector: `node.label("kubernetes.io/role") == "master" && node.label("foo") == "bar"`, - labels: map[string]string{ - "node-role.kubernetes.io/master": "", - "foo": "bar", - }, - expectEligible: true, - }, - { - name: "role and missing label", - selector: `node.label("kubernetes.io/role") == "master" && node.label("foo") == "bar"`, - labels: map[string]string{ - "node-role.kubernetes.io/master": "", - "foo": "bazbar", - }, - expectEligible: false, - }, - { - name: "role and label name", - selector: `node.label("kubernetes.io/role") == "master" && "foo" in node.labels`, - labels: map[string]string{ - "node-role.kubernetes.io/master": "", - "foo": "bazbar", - }, - expectEligible: true, - }, - { - name: "not boolean", - selector: `node.label("kubernetes.io/role")`, - labels: map[string]string{ - "node-role.kubernetes.io/master": "", - "foo": "bazbar", - }, - expectEligible: false, - expectError: errors.New(`hostSelector "node.label(\"kubernetes.io/role\")" does not evaluate to a boolean value`), - }, - { - name: "bad expression", - selector: `¯\_(ツ)_/¯`, - labels: map[string]string{ - "node-role.kubernetes.io/master": "", - "foo": "bazbar", - }, - expectEligible: false, - expectError: errors.New(`1:1: no match found for ¯`), - }, - { - name: "nil labels", - selector: `node.label("kubernetes.io/role") != "master" && "foo" in node.labels`, - expectEligible: false, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - builder := &builder{} - WithNodeLabels(tt.labels)(builder) - eligible, err := builder.isKubernetesNodeEligible(tt.selector) - assert.Equal(t, tt.expectEligible, eligible) - if tt.expectError != nil { - assert.EqualError(t, err, tt.expectError.Error()) - } - }) - } -} - func TestResolveValueFrom(t *testing.T) { assert := assert.New(t) diff --git a/pkg/compliance/checks/env/env.go b/pkg/compliance/checks/env/env.go index 005a516e50a9e9..69f0b9f7a0d4b1 100644 --- a/pkg/compliance/checks/env/env.go +++ b/pkg/compliance/checks/env/env.go @@ -41,5 +41,4 @@ type Configuration interface { RelativeToHostRoot(path string) string EvaluateFromCache(e eval.Evaluatable) (interface{}, error) IsLeader() bool - NodeLabels() map[string]string } diff --git a/pkg/compliance/mocks/audit_client.go b/pkg/compliance/mocks/audit_client.go index 98c279bdf55c43..6d16a1de05b577 100644 --- a/pkg/compliance/mocks/audit_client.go +++ b/pkg/compliance/mocks/audit_client.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/mocks/builder.go b/pkg/compliance/mocks/builder.go index 34b0dbdddb4f9a..9118ed23681cfc 100644 --- a/pkg/compliance/mocks/builder.go +++ b/pkg/compliance/mocks/builder.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/mocks/clients.go b/pkg/compliance/mocks/clients.go index 47a349921ef8b6..a6b2070bae2588 100644 --- a/pkg/compliance/mocks/clients.go +++ b/pkg/compliance/mocks/clients.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/mocks/configuration.go b/pkg/compliance/mocks/configuration.go index 4ccc49903f3ed5..5fb622d5eae4c9 100644 --- a/pkg/compliance/mocks/configuration.go +++ b/pkg/compliance/mocks/configuration.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks @@ -91,22 +91,6 @@ func (_m *Configuration) MaxEventsPerRun() int { return r0 } -// NodeLabels provides a mock function with given fields: -func (_m *Configuration) NodeLabels() map[string]string { - ret := _m.Called() - - var r0 map[string]string - if rf, ok := ret.Get(0).(func() map[string]string); ok { - r0 = rf() - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(map[string]string) - } - } - - return r0 -} - // NormalizeToHostRoot provides a mock function with given fields: path func (_m *Configuration) NormalizeToHostRoot(path string) string { ret := _m.Called(path) diff --git a/pkg/compliance/mocks/docker_client.go b/pkg/compliance/mocks/docker_client.go index 673e31d4881d16..720800694e1564 100644 --- a/pkg/compliance/mocks/docker_client.go +++ b/pkg/compliance/mocks/docker_client.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/mocks/env.go b/pkg/compliance/mocks/env.go index 3bd38b2a4b7a42..051c887817d7f1 100644 --- a/pkg/compliance/mocks/env.go +++ b/pkg/compliance/mocks/env.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks @@ -157,22 +157,6 @@ func (_m *Env) MaxEventsPerRun() int { return r0 } -// NodeLabels provides a mock function with given fields: -func (_m *Env) NodeLabels() map[string]string { - ret := _m.Called() - - var r0 map[string]string - if rf, ok := ret.Get(0).(func() map[string]string); ok { - r0 = rf() - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(map[string]string) - } - } - - return r0 -} - // NormalizeToHostRoot provides a mock function with given fields: path func (_m *Env) NormalizeToHostRoot(path string) string { ret := _m.Called(path) diff --git a/pkg/compliance/mocks/evaluatable.go b/pkg/compliance/mocks/evaluatable.go index 03921d992e5129..d08e7fae326250 100644 --- a/pkg/compliance/mocks/evaluatable.go +++ b/pkg/compliance/mocks/evaluatable.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/mocks/iterator.go b/pkg/compliance/mocks/iterator.go index 21146f405ee9c3..78b9085e796c4a 100644 --- a/pkg/compliance/mocks/iterator.go +++ b/pkg/compliance/mocks/iterator.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/mocks/kube_client.go b/pkg/compliance/mocks/kube_client.go index 930dbf709f14d1..bbd81265a1136e 100644 --- a/pkg/compliance/mocks/kube_client.go +++ b/pkg/compliance/mocks/kube_client.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/mocks/rego_configuration.go b/pkg/compliance/mocks/rego_configuration.go index d361332686c31e..8d45a868b972b6 100644 --- a/pkg/compliance/mocks/rego_configuration.go +++ b/pkg/compliance/mocks/rego_configuration.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/mocks/reporter.go b/pkg/compliance/mocks/reporter.go index ce6418c49ec582..0b9c4fc2d36abd 100644 --- a/pkg/compliance/mocks/reporter.go +++ b/pkg/compliance/mocks/reporter.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/mocks/scheduler.go b/pkg/compliance/mocks/scheduler.go index ab0ba281388af1..5166e5e20b0493 100644 --- a/pkg/compliance/mocks/scheduler.go +++ b/pkg/compliance/mocks/scheduler.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/rego/rego_check.go b/pkg/compliance/rego/rego_check.go index c70afedb3299bf..a3f31f69bca43d 100644 --- a/pkg/compliance/rego/rego_check.go +++ b/pkg/compliance/rego/rego_check.go @@ -432,9 +432,6 @@ func (r *regoCheck) buildContextInput(env env.Env) eval.RegoInputMap { if r.ruleScope == compliance.KubernetesClusterScope { context["kubernetes_cluster"], _ = env.KubeClient().ClusterID() } - if r.ruleScope == compliance.KubernetesNodeScope { - context["kubernetes_node_labels"] = env.NodeLabels() - } mappedInputs := buildMappedInputs(r.inputs) if mappedInputs != nil { diff --git a/pkg/compliance/rule.go b/pkg/compliance/rule.go index e1d85f468e2a95..80ee795f747765 100644 --- a/pkg/compliance/rule.go +++ b/pkg/compliance/rule.go @@ -16,11 +16,10 @@ type Rule interface { // RuleCommon defines the base fields of a rule in a compliance config type RuleCommon struct { - ID string `yaml:"id"` - Description string `yaml:"description,omitempty"` - Scope RuleScopeList `yaml:"scope,omitempty"` - HostSelector string `yaml:"hostSelector,omitempty"` - SkipOnK8s bool `yaml:"skipOnKubernetes,omitempty"` + ID string `yaml:"id"` + Description string `yaml:"description,omitempty"` + Scope RuleScopeList `yaml:"scope,omitempty"` + SkipOnK8s bool `yaml:"skipOnKubernetes,omitempty"` } // RegoRule defines a rule in a compliance config diff --git a/pkg/compliance/suite_test.go b/pkg/compliance/suite_test.go index 7a0646be43afd9..335facfd512cf2 100644 --- a/pkg/compliance/suite_test.go +++ b/pkg/compliance/suite_test.go @@ -34,9 +34,8 @@ func TestParseSuite(t *testing.T) { RegoRules: []RegoRule{ { RuleCommon: RuleCommon{ - ID: "cis-docker-1", - Scope: RuleScopeList{DockerScope}, - HostSelector: `"foo" in node.labels`, + ID: "cis-docker-1", + Scope: RuleScopeList{DockerScope}, }, Inputs: []RegoInput{ { diff --git a/pkg/compliance/testdata/cis-docker.yaml b/pkg/compliance/testdata/cis-docker.yaml index 0f328cfdc73655..9a54ba7a01d071 100644 --- a/pkg/compliance/testdata/cis-docker.yaml +++ b/pkg/compliance/testdata/cis-docker.yaml @@ -7,7 +7,6 @@ rules: - id: cis-docker-1 scope: - docker - hostSelector: '"foo" in node.labels' input: - file: path: /etc/docker/daemon.json diff --git a/pkg/config/autodiscovery/autodiscovery.go b/pkg/config/autodiscovery/autodiscovery.go index 1aac28c2bd55f1..73eba8449bfebe 100644 --- a/pkg/config/autodiscovery/autodiscovery.go +++ b/pkg/config/autodiscovery/autodiscovery.go @@ -9,7 +9,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/autodiscovery/providers" "github.com/DataDog/datadog-agent/pkg/autodiscovery/providers/names" "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/util" "github.com/DataDog/datadog-agent/pkg/util/flavor" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -82,37 +81,23 @@ func DiscoverComponentsFromEnv() ([]config.ConfigurationProviders, []config.List return detectedProviders, detectedListeners } - // Upon retiring this flag, see comment in `KubeContainerConfigProvider` - kubeContainerOn := util.CcaInAD() isContainerEnv := config.IsFeaturePresent(config.Docker) || config.IsFeaturePresent(config.Containerd) || config.IsFeaturePresent(config.Podman) || config.IsFeaturePresent(config.ECSFargate) isKubeEnv := config.IsFeaturePresent(config.Kubernetes) - if kubeContainerOn && (isContainerEnv || isKubeEnv) { + if isContainerEnv || isKubeEnv { detectedProviders = append(detectedProviders, config.ConfigurationProviders{Name: names.KubeContainer}) log.Info("Adding KubeContainer provider from environment") } - if isContainerEnv { - if !kubeContainerOn { - detectedProviders = append(detectedProviders, config.ConfigurationProviders{Name: names.Container, Polling: true, PollInterval: "1s"}) - log.Info("Adding Container provider from environment") - } - - if !isKubeEnv { - detectedListeners = append(detectedListeners, config.Listeners{Name: names.Container}) - log.Info("Adding Container listener from environment") - } + if isContainerEnv && !isKubeEnv { + detectedListeners = append(detectedListeners, config.Listeners{Name: names.Container}) + log.Info("Adding Container listener from environment") } if isKubeEnv { - if !kubeContainerOn { - detectedProviders = append(detectedProviders, config.ConfigurationProviders{Name: "kubelet", Polling: true}) - log.Info("Adding Kubelet provider from environment") - } - detectedListeners = append(detectedListeners, config.Listeners{Name: "kubelet"}) log.Info("Adding Kubelet listener from environment") } diff --git a/pkg/config/config.go b/pkg/config/config.go index ad85449bb92f28..4d4853120cad1f 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -264,6 +264,8 @@ func InitConfig(config Config) { config.BindEnvAndSetDefault("cmd_port", 5001) config.BindEnvAndSetDefault("default_integration_http_timeout", 9) config.BindEnvAndSetDefault("integration_tracing", false) + config.BindEnvAndSetDefault("integration_tracing_exhaustive", false) + config.BindEnvAndSetDefault("integration_profiling", false) config.BindEnvAndSetDefault("enable_metadata_collection", true) config.BindEnvAndSetDefault("enable_gohai", true) config.BindEnvAndSetDefault("check_runners", int64(4)) @@ -371,7 +373,6 @@ func InitConfig(config Config) { config.BindEnvAndSetDefault("secret_backend_timeout", 30) config.BindEnvAndSetDefault("secret_backend_command_allow_group_exec_perm", false) config.BindEnvAndSetDefault("secret_backend_skip_checks", false) - config.BindEnvAndSetDefault("secret_backend_command_sha256", "") // Use to output logs in JSON format config.BindEnvAndSetDefault("log_format_json", false) @@ -731,6 +732,7 @@ func InitConfig(config Config) { config.BindEnvAndSetDefault("ec2_metadata_token_lifetime", 21600) // value in seconds config.BindEnvAndSetDefault("ec2_prefer_imdsv2", false) config.BindEnvAndSetDefault("ec2_prioritize_instance_id_as_hostname", false) // used to bypass the hostname detection logic and force the EC2 instance ID as a hostname. + config.BindEnvAndSetDefault("ec2_use_dmi", true) // should the agent leverage DMI information to know if it's running on EC2 or not. config.BindEnvAndSetDefault("collect_ec2_tags", false) config.BindEnvAndSetDefault("collect_ec2_tags_use_imds", false) config.BindEnvAndSetDefault("exclude_ec2_tags", []string{}) @@ -819,6 +821,7 @@ func InitConfig(config Config) { config.BindEnvAndSetDefault("internal_profiling.block_profile_rate", 0) config.BindEnvAndSetDefault("internal_profiling.mutex_profile_fraction", 0) config.BindEnvAndSetDefault("internal_profiling.enable_goroutine_stacktraces", false) + config.BindEnvAndSetDefault("internal_profiling.delta_profiles", true) config.BindEnvAndSetDefault("internal_profiling.capture_all_allocations", false) @@ -933,9 +936,6 @@ func InitConfig(config Config) { // more disk I/O at the wildcard log paths config.BindEnvAndSetDefault("logs_config.file_wildcard_selection_mode", "by_name") - // temporary feature flag until this becomes the only option - config.BindEnvAndSetDefault("logs_config.cca_in_ad", true) - // The cardinality of tags to send for checks and dogstatsd respectively. // Choices are: low, orchestrator, high. // WARNING: sending orchestrator, or high tags for dogstatsd metrics may create more metrics @@ -988,6 +988,8 @@ func InitConfig(config Config) { config.BindEnvAndSetDefault("clc_runner_port", 5005) config.BindEnvAndSetDefault("clc_runner_server_write_timeout", 15) config.BindEnvAndSetDefault("clc_runner_server_readheader_timeout", 10) + config.BindEnvAndSetDefault("clc_runner_remote_tagger_enabled", false) + // Admission controller config.BindEnvAndSetDefault("admission_controller.enabled", false) config.BindEnvAndSetDefault("admission_controller.mutate_unlabelled", false) @@ -1014,12 +1016,15 @@ func InitConfig(config Config) { config.BindEnvAndSetDefault("admission_controller.auto_instrumentation.enabled", true) config.BindEnvAndSetDefault("admission_controller.auto_instrumentation.endpoint", "/injectlib") config.BindEnvAndSetDefault("admission_controller.auto_instrumentation.container_registry", "gcr.io/datadoghq") + config.BindEnvAndSetDefault("admission_controller.auto_instrumentation.patcher.enabled", false) + config.BindEnvAndSetDefault("admission_controller.auto_instrumentation.patcher.fallback_to_file_provider", false) // to be enabled only in e2e tests // Telemetry // Enable telemetry metrics on the internals of the Agent. // This create a lot of billable custom metrics. config.BindEnvAndSetDefault("telemetry.enabled", false) config.BindEnvAndSetDefault("telemetry.dogstatsd_origin", false) + config.BindEnvAndSetDefault("telemetry.python_memory", true) config.BindEnv("telemetry.checks") // We're using []string as a default instead of []float64 because viper can only parse list of string from the environment // @@ -1049,8 +1054,8 @@ func InitConfig(config Config) { config.BindEnvAndSetDefault("orchestrator_explorer.collector_discovery.enabled", true) config.BindEnv("orchestrator_explorer.max_per_message") config.BindEnv("orchestrator_explorer.max_message_bytes") - config.BindEnv("orchestrator_explorer.orchestrator_dd_url") - config.BindEnv("orchestrator_explorer.orchestrator_additional_endpoints") + config.BindEnv("orchestrator_explorer.orchestrator_dd_url", "DD_ORCHESTRATOR_EXPLORER_ORCHESTRATOR_DD_URL", "DD_ORCHESTRATOR_URL") + config.BindEnv("orchestrator_explorer.orchestrator_additional_endpoints", "DD_ORCHESTRATOR_EXPLORER_ORCHESTRATOR_ADDITIONAL_ENDPOINTS", "DD_ORCHESTRATOR_ADDITIONAL_ENDPOINTS") config.BindEnv("orchestrator_explorer.use_legacy_endpoint") config.BindEnvAndSetDefault("orchestrator_explorer.manifest_collection.enabled", false) config.BindEnvAndSetDefault("orchestrator_explorer.manifest_collection.buffer_manifest", true) @@ -1061,6 +1066,16 @@ func InitConfig(config Config) { config.BindEnv("container_lifecycle.dd_url") config.BindEnv("container_lifecycle.additional_endpoints") + // Container image configuration + config.BindEnvAndSetDefault("container_image.enabled", false) + config.BindEnv("container_image.dd_url") + config.BindEnv("container_image.additional_endpoints") + + // SBOM configuration + config.BindEnvAndSetDefault("sbom.enabled", false) + config.BindEnv("sbom.dd_url") + config.BindEnv("sbom.additional_endpoints") + // Orchestrator Explorer - process agent // DEPRECATED in favor of `orchestrator_explorer.orchestrator_dd_url` setting. If both are set `orchestrator_explorer.orchestrator_dd_url` will take precedence. config.BindEnv("process_config.orchestrator_dd_url", "DD_PROCESS_CONFIG_ORCHESTRATOR_DD_URL", "DD_PROCESS_AGENT_ORCHESTRATOR_DD_URL") @@ -1080,6 +1095,9 @@ func InitConfig(config Config) { config.BindEnvAndSetDefault("inventories_max_interval", DefaultInventoriesMaxInterval) // integer seconds config.BindEnvAndSetDefault("inventories_min_interval", DefaultInventoriesMinInterval) // integer seconds + // workloadmeta + config.BindEnvAndSetDefault("workloadmeta.image_metadata_collection.enabled", false) + // Datadog security agent (common) config.BindEnvAndSetDefault("security_agent.cmd_port", 5010) config.BindEnvAndSetDefault("security_agent.expvar_port", 5011) @@ -1106,7 +1124,6 @@ func InitConfig(config Config) { config.BindEnvAndSetDefault("compliance_config.run_path", defaultRunPath) config.BindEnv("compliance_config.run_commands_as") bindEnvAndSetLogsConfigKeys(config, "compliance_config.endpoints.") - config.BindEnvAndSetDefault("compliance_config.ignore_host_selectors", true) config.BindEnvAndSetDefault("compliance_config.opa.metrics.enabled", false) // Datadog security agent (runtime) @@ -1222,12 +1239,17 @@ func InitConfig(config Config) { bindVectorOptions(config, Metrics) bindVectorOptions(config, Logs) + // Datadog Agent Manager System Tray + config.BindEnvAndSetDefault("system_tray.log_file", "") + setupAPM(config) SetupOTLP(config) setupProcesses(config) } -var ddURLRegexp = regexp.MustCompile(`^app(\.(us|eu)\d)?\.(datad(oghq|0g)\.(com|eu)|ddog-gov\.com)$`) +// ddURLRegexp determines if an URL belongs to Datadog or not. If the URL belongs to Datadog it's prefixed with the Agent +// version (see AddAgentVersionToDomain). +var ddURLRegexp = regexp.MustCompile(`^app(\.[a-z]{2}\d)?\.(datad(oghq|0g)\.(com|eu)|ddog-gov\.com)$`) // GetProxies returns the proxy settings from the configuration func GetProxies() *Proxy { @@ -1596,7 +1618,8 @@ func setupFipsEndpoints(config Config) error { // APM config.Set("apm_config.apm_dd_url", protocol+urlFor(traces)) - config.Set("apm_config.profiling_dd_url", protocol+urlFor(profiles)) + // Adding "/api/v2/profile" because it's not added to the 'apm_config.profiling_dd_url' value by the Agent + config.Set("apm_config.profiling_dd_url", protocol+urlFor(profiles)+"/api/v2/profile") config.Set("apm_config.telemetry.dd_url", protocol+urlFor(instrumentationTelemetry)) // Processes @@ -1633,8 +1656,6 @@ func ResolveSecrets(config Config, origin string) error { config.GetInt("secret_backend_timeout"), config.GetInt("secret_backend_output_max_size"), config.GetBool("secret_backend_command_allow_group_exec_perm"), - config.GetString("secret_backend_command_sha256"), - config.ConfigFileUsed(), ) if config.GetString("secret_backend_command") != "" { @@ -2029,17 +2050,16 @@ func getValidHostAliasesWithConfig(config Config) []string { return aliases } -// GetConfiguredTags returns complete list of user configured tags. -// -// This is composed of DD_TAGS and DD_EXTRA_TAGS, with DD_DOGSTATSD_TAGS included -// if includeDogstatsd is true. -func GetConfiguredTags(includeDogstatsd bool) []string { - tags := Datadog.GetStringSlice("tags") - extraTags := Datadog.GetStringSlice("extra_tags") +// GetConfiguredTags returns list of tags from a configuration, based on +// `tags` (DD_TAGS) and `extra_tags“ (DD_EXTRA_TAGS), with `dogstatsd_tags` (DD_DOGSTATSD_TAGS) +// if includeDogdstatsd is true. +func GetConfiguredTags(config Config, includeDogstatsd bool) []string { + tags := config.GetStringSlice("tags") + extraTags := config.GetStringSlice("extra_tags") var dsdTags []string if includeDogstatsd { - dsdTags = Datadog.GetStringSlice("dogstatsd_tags") + dsdTags = config.GetStringSlice("dogstatsd_tags") } combined := make([]string, 0, len(tags)+len(extraTags)+len(dsdTags)) @@ -2050,6 +2070,14 @@ func GetConfiguredTags(includeDogstatsd bool) []string { return combined } +// GetGlobalConfiguredTags returns complete list of user configured tags. +// +// This is composed of DD_TAGS and DD_EXTRA_TAGS, with DD_DOGSTATSD_TAGS included +// if includeDogstatsd is true. +func GetGlobalConfiguredTags(includeDogstatsd bool) []string { + return GetConfiguredTags(Datadog, includeDogstatsd) +} + func bindVectorOptions(config Config, datatype DataType) { config.BindEnvAndSetDefault(fmt.Sprintf("vector.%s.enabled", datatype), false) config.BindEnvAndSetDefault(fmt.Sprintf("vector.%s.url", datatype), "") @@ -2082,7 +2110,7 @@ func GetTraceAgentDefaultEnv() string { defaultEnv = Datadog.GetString("env") log.Debugf("Setting DefaultEnv to %q (from 'env' config option)", defaultEnv) } else { - for _, tag := range GetConfiguredTags(false) { + for _, tag := range GetConfiguredTags(Datadog, false) { if strings.HasPrefix(tag, "env:") { defaultEnv = strings.TrimPrefix(tag, "env:") log.Debugf("Setting DefaultEnv to %q (from `env:` entry under the 'tags' config option: %q)", defaultEnv, tag) diff --git a/pkg/config/config_template.yaml b/pkg/config/config_template.yaml index 7a74d1743d1c5d..72aa9df42b6785 100644 --- a/pkg/config/config_template.yaml +++ b/pkg/config/config_template.yaml @@ -711,17 +711,6 @@ api_key: # # secret_backend_skip_checks: false -## @param secret_backend_command_sha256 - string - optional -## @env DD_SECRET_BACKEND_COMMAND_SHA256 - string - optional -## `secret_backend_command_sha256` is the expected SHA256 of the backend command executable. -## If `secret_backend_command_sha256` is used, the following restrictions are in place: -## - Value specified in the `secret_backend_command` setting must be an absolute path. -## - Permissions for the datadog.yaml config file must disallow write access by unprivileged accounts. -## The agent will refuse to start if the actual SHA256 of 'secret_backend_command' executable is different -## from the one specified by `secret_backend_command_sha256`. -# -# secret_backend_command_sha256: - ## @param snmp_listener - custom object - optional ## Creates and schedules a listener to automatically discover your SNMP devices. ## Discovered devices can then be monitored with the SNMP integration by using @@ -1539,6 +1528,20 @@ api_key: {{ end -}} +{{- if .UniversalServiceMonitoringModule }} + +############################################################# +## System Probe Universal Service monitoring Configuration ## +############################################################# + +# service_monitoring_config: +## @param enabled - boolean - optional - default: false +## Set to true to enable the Universal Service Monitoring Module of the System Probe +# +# enabled: false + +{{ end -}} + {{- if .SecurityModule }} ########################################## @@ -3447,3 +3450,18 @@ api_key: # # verbosity: normal {{end -}} +{{- if (eq .OS "windows")}} +##################################################### +## Datadog Agent Manager System Tray Configuration ## +##################################################### + +## @param system_tray - custom object - optional +## This section configures the Datadog Agent Manager System Tray +# +# system_tray: + ## @param log_file - string - optional - default: %ProgramData%\Datadog\logs\ddtray.log + ## @env DD_TRAY_LOG_FILE - string - optional + ## The full path to the file where Datadog Agent Manager System Tray logs are written. + # + # log_file: +{{end -}} diff --git a/pkg/config/config_test.go b/pkg/config/config_test.go index f976fdd4ab0dbd..363f5aeb5d865d 100644 --- a/pkg/config/config_test.go +++ b/pkg/config/config_test.go @@ -558,82 +558,80 @@ additional_endpoints: } func TestAddAgentVersionToDomain(t *testing.T) { - // US - newURL, err := AddAgentVersionToDomain("https://app.datadoghq.com", "app") - require.Nil(t, err) - assert.Equal(t, "https://"+getDomainPrefix("app")+".datadoghq.com", newURL) - - newURL, err = AddAgentVersionToDomain("https://app.datadoghq.com", "flare") - require.Nil(t, err) - assert.Equal(t, "https://"+getDomainPrefix("flare")+".datadoghq.com", newURL) - - // EU - newURL, err = AddAgentVersionToDomain("https://app.datadoghq.eu", "app") - require.Nil(t, err) - assert.Equal(t, "https://"+getDomainPrefix("app")+".datadoghq.eu", newURL) - - newURL, err = AddAgentVersionToDomain("https://app.datadoghq.eu", "flare") - require.Nil(t, err) - assert.Equal(t, "https://"+getDomainPrefix("flare")+".datadoghq.eu", newURL) - - // Gov - newURL, err = AddAgentVersionToDomain("https://app.ddog-gov.com", "app") - require.Nil(t, err) - assert.Equal(t, "https://"+getDomainPrefix("app")+".ddog-gov.com", newURL) - - newURL, err = AddAgentVersionToDomain("https://app.ddog-gov.com", "flare") - require.Nil(t, err) - assert.Equal(t, "https://"+getDomainPrefix("flare")+".ddog-gov.com", newURL) - - // Additional site - newURL, err = AddAgentVersionToDomain("https://app.us2.datadoghq.com", "app") - require.Nil(t, err) - assert.Equal(t, "https://"+getDomainPrefix("app")+".us2.datadoghq.com", newURL) - - newURL, err = AddAgentVersionToDomain("https://app.us2.datadoghq.com", "flare") - require.Nil(t, err) - assert.Equal(t, "https://"+getDomainPrefix("flare")+".us2.datadoghq.com", newURL) - - // Custom DD URL: leave unchanged - newURL, err = AddAgentVersionToDomain("https://custom.datadoghq.com", "app") - require.Nil(t, err) - assert.Equal(t, "https://custom.datadoghq.com", newURL) - - newURL, err = AddAgentVersionToDomain("https://custom.datadoghq.com", "flare") - require.Nil(t, err) - assert.Equal(t, "https://custom.datadoghq.com", newURL) - - // Custom DD URL with 'agent' subdomain: leave unchanged - newURL, err = AddAgentVersionToDomain("https://custom.agent.datadoghq.com", "app") - require.Nil(t, err) - assert.Equal(t, "https://custom.agent.datadoghq.com", newURL) - - newURL, err = AddAgentVersionToDomain("https://custom.agent.datadoghq.com", "flare") - require.Nil(t, err) - assert.Equal(t, "https://custom.agent.datadoghq.com", newURL) - - // Custom DD URL: unclear if anyone is actually using such a URL, but for now leave unchanged - newURL, err = AddAgentVersionToDomain("https://app.custom.datadoghq.com", "app") - require.Nil(t, err) - assert.Equal(t, "https://app.custom.datadoghq.com", newURL) - - newURL, err = AddAgentVersionToDomain("https://app.custom.datadoghq.com", "flare") - require.Nil(t, err) - assert.Equal(t, "https://app.custom.datadoghq.com", newURL) - - // Custom top-level domain: unclear if anyone is actually using this, but for now leave unchanged - newURL, err = AddAgentVersionToDomain("https://app.datadoghq.internal", "app") - require.Nil(t, err) - assert.Equal(t, "https://app.datadoghq.internal", newURL) - - newURL, err = AddAgentVersionToDomain("https://app.datadoghq.internal", "flare") - require.Nil(t, err) - assert.Equal(t, "https://app.datadoghq.internal", newURL) - - // DD URL set to proxy, leave unchanged - newURL, err = AddAgentVersionToDomain("https://app.myproxy.com", "app") - require.Nil(t, err) - assert.Equal(t, "https://app.myproxy.com", newURL) + appVersionPrefix := getDomainPrefix("app") + flareVersionPrefix := getDomainPrefix("flare") + + versionURLTests := []struct { + url string + expectedURL string + shouldAppendVersion bool + }{ + { // US + "https://app.datadoghq.com", + ".datadoghq.com", + true, + }, + { // EU + "https://app.datadoghq.eu", + ".datadoghq.eu", + true, + }, + { // Gov + "https://app.ddog-gov.com", + ".ddog-gov.com", + true, + }, + { // Additional site + "https://app.us2.datadoghq.com", + ".us2.datadoghq.com", + true, + }, + { // arbitrary site + "https://app.xx9.datadoghq.com", + ".xx9.datadoghq.com", + true, + }, + { // Custom DD URL: leave unchanged + "https://custom.datadoghq.com", + "custom.datadoghq.com", + false, + }, + { // Custom DD URL with 'agent' subdomain: leave unchanged + "https://custom.agent.datadoghq.com", + "custom.agent.datadoghq.com", + false, + }, + { // Custom DD URL: unclear if anyone is actually using such a URL, but for now leave unchanged + "https://app.custom.datadoghq.com", + "app.custom.datadoghq.com", + false, + }, + { // Custom top-level domain: unclear if anyone is actually using this, but for now leave unchanged + "https://app.datadoghq.internal", + "app.datadoghq.internal", + false, + }, + { // DD URL set to proxy, leave unchanged + "https://app.myproxy.com", + "app.myproxy.com", + false, + }, + } + + for _, testCase := range versionURLTests { + appURL, err := AddAgentVersionToDomain(testCase.url, "app") + require.Nil(t, err) + flareURL, err := AddAgentVersionToDomain(testCase.url, "flare") + require.Nil(t, err) + + if testCase.shouldAppendVersion { + assert.Equal(t, "https://"+appVersionPrefix+testCase.expectedURL, appURL) + assert.Equal(t, "https://"+flareVersionPrefix+testCase.expectedURL, flareURL) + } else { + assert.Equal(t, "https://"+testCase.expectedURL, appURL) + assert.Equal(t, "https://"+testCase.expectedURL, flareURL) + } + } } func TestIsCloudProviderEnabled(t *testing.T) { @@ -1235,7 +1233,7 @@ func assertFipsProxyExpectedConfig(t *testing.T, expectedBaseHTTPURL, expectedBa if rng { assert.Equal(t, expectedBaseHTTPURL+"01", c.GetString("dd_url")) assert.Equal(t, expectedBaseHTTPURL+"02", c.GetString("apm_config.apm_dd_url")) - assert.Equal(t, expectedBaseHTTPURL+"03", c.GetString("apm_config.profiling_dd_url")) + assert.Equal(t, expectedBaseHTTPURL+"03"+"/api/v2/profile", c.GetString("apm_config.profiling_dd_url")) assert.Equal(t, expectedBaseHTTPURL+"10", c.GetString("apm_config.telemetry.dd_url")) assert.Equal(t, expectedBaseHTTPURL+"04", c.GetString("process_config.process_dd_url")) assert.Equal(t, expectedBaseURL+"05", c.GetString("logs_config.logs_dd_url")) @@ -1246,7 +1244,7 @@ func assertFipsProxyExpectedConfig(t *testing.T, expectedBaseHTTPURL, expectedBa } else { assert.Equal(t, expectedBaseHTTPURL, c.GetString("dd_url")) assert.Equal(t, expectedBaseHTTPURL, c.GetString("apm_config.apm_dd_url")) - assert.Equal(t, expectedBaseHTTPURL, c.GetString("apm_config.profiling_dd_url")) + assert.Equal(t, expectedBaseHTTPURL, c.GetString("apm_config.profiling_dd_url")) // Omitting "/api/v2/profile" as the config is not overwritten assert.Equal(t, expectedBaseHTTPURL, c.GetString("apm_config.telemetry.dd_url")) assert.Equal(t, expectedBaseHTTPURL, c.GetString("process_config.process_dd_url")) assert.Equal(t, expectedBaseURL, c.GetString("logs_config.logs_dd_url")) diff --git a/pkg/config/environment.go b/pkg/config/environment.go index 98204b1fb004b1..59ce13c20425ce 100644 --- a/pkg/config/environment.go +++ b/pkg/config/environment.go @@ -46,7 +46,7 @@ func IsKubernetes() bool { // IsECSFargate returns whether the Agent is running in ECS Fargate func IsECSFargate() bool { - return os.Getenv("ECS_FARGATE") != "" + return os.Getenv("ECS_FARGATE") != "" || os.Getenv("AWS_EXECUTION_ENV") == "AWS_ECS_FARGATE" } // IsHostProcAvailable returns whether host proc is available or not diff --git a/pkg/config/remote/client.go b/pkg/config/remote/client.go index 541bc645b38fd8..e3d393ab2df2a2 100644 --- a/pkg/config/remote/client.go +++ b/pkg/config/remote/client.go @@ -63,8 +63,10 @@ type Client struct { state *state.Repository // Listeners - apmListeners []func(update map[string]state.APMSamplingConfig) - cwsListeners []func(update map[string]state.ConfigCWSDD) + apmListeners []func(update map[string]state.APMSamplingConfig) + cwsListeners []func(update map[string]state.ConfigCWSDD) + cwsCustomListeners []func(update map[string]state.ConfigCWSCustom) + apmTracingListeners []func(update map[string]state.APMTracingConfig) } // agentGRPCConfigFetcher defines how to retrieve config updates over a @@ -153,19 +155,21 @@ func newClient(agentName string, updater ConfigUpdater, doTufVerification bool, ctx, close := context.WithCancel(context.Background()) return &Client{ - ID: generateID(), - startupSync: sync.Once{}, - ctx: ctx, - close: close, - agentName: agentName, - agentVersion: agentVersion, - products: data.ProductListToString(products), - state: repository, - pollInterval: pollInterval, - backoffPolicy: backoffPolicy, - apmListeners: make([]func(update map[string]state.APMSamplingConfig), 0), - cwsListeners: make([]func(update map[string]state.ConfigCWSDD), 0), - updater: updater, + ID: generateID(), + startupSync: sync.Once{}, + ctx: ctx, + close: close, + agentName: agentName, + agentVersion: agentVersion, + products: data.ProductListToString(products), + state: repository, + pollInterval: pollInterval, + backoffPolicy: backoffPolicy, + apmListeners: make([]func(update map[string]state.APMSamplingConfig), 0), + cwsListeners: make([]func(update map[string]state.ConfigCWSDD), 0), + cwsCustomListeners: make([]func(update map[string]state.ConfigCWSCustom), 0), + apmTracingListeners: make([]func(update map[string]state.APMTracingConfig), 0), + updater: updater, }, nil } @@ -251,6 +255,16 @@ func (c *Client) update() error { listener(c.state.CWSDDConfigs()) } } + if containsProduct(changedProducts, state.ProductCWSCustom) { + for _, listener := range c.cwsCustomListeners { + listener(c.state.CWSCustomConfigs()) + } + } + if containsProduct(changedProducts, state.ProductAPMTracing) { + for _, listener := range c.apmTracingListeners { + listener(c.state.APMTracingConfigs()) + } + } return nil } @@ -283,6 +297,31 @@ func (c *Client) RegisterCWSDDUpdate(fn func(update map[string]state.ConfigCWSDD fn(c.state.CWSDDConfigs()) } +// RegisterCWSCustomUpdate registers a callback function to be called after a successful client update that will +// contain the current state of the CWS_CUSTOM product. +func (c *Client) RegisterCWSCustomUpdate(fn func(update map[string]state.ConfigCWSCustom)) { + c.m.Lock() + defer c.m.Unlock() + c.cwsCustomListeners = append(c.cwsCustomListeners, fn) + fn(c.state.CWSCustomConfigs()) +} + +// RegisterAPMTracing registers a callback function to be called after a successful client update that will +// contain the current state of the APMTracing product. +func (c *Client) RegisterAPMTracing(fn func(update map[string]state.APMTracingConfig)) { + c.m.Lock() + defer c.m.Unlock() + c.apmTracingListeners = append(c.apmTracingListeners, fn) + fn(c.state.APMTracingConfigs()) +} + +// APMTracingConfigs returns the current set of valid APM Tracing configs +func (c *Client) APMTracingConfigs() map[string]state.APMTracingConfig { + c.m.Lock() + defer c.m.Unlock() + return c.state.APMTracingConfigs() +} + func (c *Client) applyUpdate(pbUpdate *pbgo.ClientGetConfigsResponse) ([]string, error) { fileMap := make(map[string][]byte, len(pbUpdate.TargetFiles)) for _, f := range pbUpdate.TargetFiles { diff --git a/pkg/config/remote/data/product.go b/pkg/config/remote/data/product.go index 2b50e7da95f690..3810629ca91b3f 100644 --- a/pkg/config/remote/data/product.go +++ b/pkg/config/remote/data/product.go @@ -13,6 +13,10 @@ const ( ProductAPMSampling Product = "APM_SAMPLING" // ProductCWSDD is the cloud workload security product ProductCWSDD Product = "CWS_DD" + // ProductCWSCustom is the cloud workload security product + ProductCWSCustom Product = "CWS_CUSTOM" + // ProductAPMTracing is the apm tracing product + ProductAPMTracing Product = "APM_TRACING" // ProductTesting1 is a testing product ProductTesting1 Product = "TESTING1" ) diff --git a/pkg/config/remote/service/service.go b/pkg/config/remote/service/service.go index 800254d8e70f25..72e9fbdf8bdb52 100644 --- a/pkg/config/remote/service/service.go +++ b/pkg/config/remote/service/service.go @@ -84,6 +84,7 @@ type uptaneClient interface { Update(response *pbgo.LatestConfigsResponse) error State() (uptane.State, error) DirectorRoot(version uint64) ([]byte, error) + StoredOrgUUID() (string, error) Targets() (data.TargetFiles, error) TargetFile(path string) ([]byte, error) TargetsMeta() ([]byte, error) @@ -267,7 +268,12 @@ func (s *Service) refresh() error { if err != nil { log.Warnf("could not get previous backend client state: %v", err) } - request := buildLatestConfigsRequest(s.hostname, s.traceAgentEnv, previousState, activeClients, s.products, s.newProducts, s.lastUpdateErr, clientState) + orgUUID, err := s.uptane.StoredOrgUUID() + if err != nil { + return err + } + + request := buildLatestConfigsRequest(s.hostname, s.traceAgentEnv, orgUUID, previousState, activeClients, s.products, s.newProducts, s.lastUpdateErr, clientState) s.Unlock() ctx := context.Background() response, err := s.api.Fetch(ctx, request) diff --git a/pkg/config/remote/service/service_test.go b/pkg/config/remote/service/service_test.go index e4112b23f39c0e..2687036c266791 100644 --- a/pkg/config/remote/service/service_test.go +++ b/pkg/config/remote/service/service_test.go @@ -66,6 +66,11 @@ func (m *mockUptane) DirectorRoot(version uint64) ([]byte, error) { return args.Get(0).([]byte), args.Error(1) } +func (m *mockUptane) StoredOrgUUID() (string, error) { + args := m.Called() + return args.Get(0).(string), args.Error(1) +} + func (m *mockUptane) Targets() (data.TargetFiles, error) { args := m.Called() return args.Get(0).(data.TargetFiles), args.Error(1) @@ -133,7 +138,9 @@ func TestServiceBackoffFailure(t *testing.T) { CurrentDirectorRootVersion: 0, Products: []string{}, NewProducts: []string{}, + OrgUuid: "abcdef", }).Return(lastConfigResponse, errors.New("simulated HTTP error")) + uptaneClient.On("StoredOrgUUID").Return("abcdef", nil) uptaneClient.On("TUFVersionState").Return(uptane.TUFVersions{}, nil) uptaneClient.On("Update", lastConfigResponse).Return(nil) uptaneClient.On("TargetsCustom").Return([]byte{}, nil) @@ -158,7 +165,9 @@ func TestServiceBackoffFailure(t *testing.T) { NewProducts: []string{}, HasError: true, Error: httpError, + OrgUuid: "abcdef", }).Return(lastConfigResponse, errors.New("simulated HTTP error")) + uptaneClient.On("StoredOrgUUID").Return("abcdef", nil) uptaneClient.On("TUFVersionState").Return(uptane.TUFVersions{}, nil) uptaneClient.On("Update", lastConfigResponse).Return(nil) uptaneClient.On("TargetsCustom").Return([]byte{}, nil) @@ -208,7 +217,9 @@ func TestServiceBackoffFailureRecovery(t *testing.T) { CurrentDirectorRootVersion: 0, Products: []string{}, NewProducts: []string{}, + OrgUuid: "abcdef", }).Return(lastConfigResponse, nil) + uptaneClient.On("StoredOrgUUID").Return("abcdef", nil) uptaneClient.On("TUFVersionState").Return(uptane.TUFVersions{}, nil) uptaneClient.On("Update", lastConfigResponse).Return(nil) uptaneClient.On("TargetsCustom").Return([]byte{}, nil) @@ -334,7 +345,9 @@ func TestService(t *testing.T) { CurrentDirectorRootVersion: 0, Products: []string{}, NewProducts: []string{}, + OrgUuid: "abcdef", }).Return(lastConfigResponse, nil) + uptaneClient.On("StoredOrgUUID").Return("abcdef", nil) uptaneClient.On("TUFVersionState").Return(uptane.TUFVersions{}, nil) uptaneClient.On("Update", lastConfigResponse).Return(nil) uptaneClient.On("TargetsCustom").Return([]byte{}, nil) @@ -368,6 +381,7 @@ func TestService(t *testing.T) { } fileAPM1 := []byte(`testapm1`) fileAPM2 := []byte(`testapm2`) + uptaneClient.On("StoredOrgUUID").Return("abcdef", nil) uptaneClient.On("TargetsMeta").Return(targets, nil) uptaneClient.On("TargetsCustom").Return(testTargetsCustom, nil) @@ -417,6 +431,7 @@ func TestService(t *testing.T) { BackendClientState: []byte(`test_state`), HasError: false, Error: "", + OrgUuid: "abcdef", }).Return(lastConfigResponse, nil) service.clients.seen(client) // Avoid blocking on channel sending when nothing is at the other end @@ -476,6 +491,7 @@ func TestServiceClientPredicates(t *testing.T) { AppVersion: "1", }, } + uptaneClient.On("StoredOrgUUID").Return("abcdef", nil) uptaneClient.On("TargetsMeta").Return([]byte(`{"signed": "testtargets"}`), nil) uptaneClient.On("TargetsCustom").Return([]byte(`{"opaque_backend_state":"dGVzdF9zdGF0ZQ=="}`), nil) @@ -523,6 +539,7 @@ func TestServiceClientPredicates(t *testing.T) { BackendClientState: []byte(`test_state`), HasError: false, Error: "", + OrgUuid: "abcdef", }).Return(lastConfigResponse, nil) service.clients.seen(client) // Avoid blocking on channel sending when nothing is at the other end @@ -561,10 +578,12 @@ func TestServiceGetRefreshIntervalNone(t *testing.T) { Products: []string{}, NewProducts: []string{}, BackendClientState: []byte("test_state"), + OrgUuid: "abcdef", }).Return(lastConfigResponse, nil) // No explicit refresh interval is provided by the backend testTargetsCustomNoOverride := []byte(`{"opaque_backend_state":"dGVzdF9zdGF0ZQ=="}`) + uptaneClient.On("StoredOrgUUID").Return("abcdef", nil) uptaneClient.On("TUFVersionState").Return(uptane.TUFVersions{}, nil) uptaneClient.On("Update", lastConfigResponse).Return(nil) uptaneClient.On("TargetsCustom").Return(testTargetsCustomNoOverride, nil) @@ -596,10 +615,12 @@ func TestServiceGetRefreshIntervalValid(t *testing.T) { Products: []string{}, NewProducts: []string{}, BackendClientState: []byte("test_state"), + OrgUuid: "abcdef", }).Return(lastConfigResponse, nil) // An acceptable refresh interval is provided by the backend testTargetsCustomOk := []byte(`{"opaque_backend_state":"dGVzdF9zdGF0ZQ==", "agent_refresh_interval": 42}`) + uptaneClient.On("StoredOrgUUID").Return("abcdef", nil) uptaneClient.On("TUFVersionState").Return(uptane.TUFVersions{}, nil) uptaneClient.On("Update", lastConfigResponse).Return(nil) uptaneClient.On("TargetsCustom").Return(testTargetsCustomOk, nil) @@ -631,10 +652,12 @@ func TestServiceGetRefreshIntervalTooSmall(t *testing.T) { Products: []string{}, NewProducts: []string{}, BackendClientState: []byte("test_state"), + OrgUuid: "abcdef", }).Return(lastConfigResponse, nil) // A too small refresh interval is provided by the backend (the refresh interval should not change) testTargetsCustomOverrideOutOfRangeSmall := []byte(`{"opaque_backend_state":"dGVzdF9zdGF0ZQ==", "agent_refresh_interval": -1}`) + uptaneClient.On("StoredOrgUUID").Return("abcdef", nil) uptaneClient.On("TUFVersionState").Return(uptane.TUFVersions{}, nil) uptaneClient.On("Update", lastConfigResponse).Return(nil) uptaneClient.On("TargetsCustom").Return(testTargetsCustomOverrideOutOfRangeSmall, nil) @@ -666,10 +689,12 @@ func TestServiceGetRefreshIntervalTooBig(t *testing.T) { Products: []string{}, NewProducts: []string{}, BackendClientState: []byte("test_state"), + OrgUuid: "abcdef", }).Return(lastConfigResponse, nil) // A too large refresh interval is provided by the backend (the refresh interval should not change) testTargetsCustomOverrideOutOfRangeBig := []byte(`{"opaque_backend_state":"dGVzdF9zdGF0ZQ==", "agent_refresh_interval": 500}`) + uptaneClient.On("StoredOrgUUID").Return("abcdef", nil) uptaneClient.On("TUFVersionState").Return(uptane.TUFVersions{}, nil) uptaneClient.On("Update", lastConfigResponse).Return(nil) uptaneClient.On("TargetsCustom").Return(testTargetsCustomOverrideOutOfRangeBig, nil) @@ -704,10 +729,12 @@ func TestServiceGetRefreshIntervalNoOverrideAllowed(t *testing.T) { Products: []string{}, NewProducts: []string{}, BackendClientState: []byte("test_state"), + OrgUuid: "abcdef", }).Return(lastConfigResponse, nil) // An interval is provided, but it should not be applied testTargetsCustomOk := []byte(`{"opaque_backend_state":"dGVzdF9zdGF0ZQ==", "agent_refresh_interval": 42}`) + uptaneClient.On("StoredOrgUUID").Return("abcdef", nil) uptaneClient.On("TUFVersionState").Return(uptane.TUFVersions{}, nil) uptaneClient.On("Update", lastConfigResponse).Return(nil) uptaneClient.On("TargetsCustom").Return(testTargetsCustomOk, nil) @@ -752,6 +779,7 @@ func TestConfigExpiration(t *testing.T) { AppVersion: "1", }, } + uptaneClient.On("StoredOrgUUID").Return("abcdef", nil) uptaneClient.On("TargetsMeta").Return([]byte(`{"signed": "testtargets"}`), nil) uptaneClient.On("TargetsCustom").Return([]byte(`{"opaque_backend_state":"dGVzdF9zdGF0ZQ=="}`), nil) uptaneClient.On("Targets").Return(data.TargetFiles{ @@ -783,6 +811,7 @@ func TestConfigExpiration(t *testing.T) { BackendClientState: []byte(`test_state`), HasError: false, Error: "", + OrgUuid: "abcdef", }).Return(lastConfigResponse, nil) service.clients.seen(client) // Avoid blocking on channel sending when nothing is at the other end diff --git a/pkg/config/remote/service/util.go b/pkg/config/remote/service/util.go index d3c30681e13adb..8aa465c109b286 100644 --- a/pkg/config/remote/service/util.go +++ b/pkg/config/remote/service/util.go @@ -154,7 +154,7 @@ func getRemoteConfigAuthKeys(apiKey string, rcKey string) (remoteConfigAuthKeys, }, nil } -func buildLatestConfigsRequest(hostname string, traceAgentEnv string, state uptane.TUFVersions, activeClients []*pbgo.Client, products map[data.Product]struct{}, newProducts map[data.Product]struct{}, lastUpdateErr error, clientState []byte) *pbgo.LatestConfigsRequest { +func buildLatestConfigsRequest(hostname string, traceAgentEnv string, orgUUID string, state uptane.TUFVersions, activeClients []*pbgo.Client, products map[data.Product]struct{}, newProducts map[data.Product]struct{}, lastUpdateErr error, clientState []byte) *pbgo.LatestConfigsRequest { productsList := make([]data.Product, len(products)) i := 0 for k := range products { @@ -185,6 +185,7 @@ func buildLatestConfigsRequest(hostname string, traceAgentEnv string, state upta HasError: lastUpdateErr != nil, Error: lastUpdateErrString, TraceAgentEnv: traceAgentEnv, + OrgUuid: orgUUID, } } diff --git a/pkg/config/remote/uptane/client.go b/pkg/config/remote/uptane/client.go index 62f82777ccf6f3..e28740906d596c 100644 --- a/pkg/config/remote/uptane/client.go +++ b/pkg/config/remote/uptane/client.go @@ -249,7 +249,8 @@ func (c *Client) verify() error { return nil } -func (c *Client) storedOrgUUID() (string, error) { +// StoredOrgUUID returns the org UUID given by the backend +func (c *Client) StoredOrgUUID() (string, error) { // This is an important block of code : to avoid being locked out // of the agent in case of a wrong uuid being stored, we link an // org UUID storage to a root version. What this means in practice @@ -289,7 +290,7 @@ func (c *Client) verifyOrg() error { // we can remove the orgUUID from the snapshot and they'll work // again. This being said, this is last resort. if custom.OrgUUID != nil { - orgUUID, err := c.storedOrgUUID() + orgUUID, err := c.StoredOrgUUID() if err != nil { return fmt.Errorf("could not obtain stored/remote orgUUID: %v", err) } diff --git a/pkg/config/render_config.go b/pkg/config/render_config.go index c115ce4382b7e1..c2ab9d1f9c11f2 100644 --- a/pkg/config/render_config.go +++ b/pkg/config/render_config.go @@ -19,41 +19,42 @@ import ( // context contains the context used to render the config file template type context struct { - OS string - Common bool - Agent bool - Python bool // Sub-option of Agent - BothPythonPresent bool // Sub-option of Agent - Python - Metadata bool - InternalProfiling bool - Dogstatsd bool - LogsAgent bool - JMX bool - Autoconfig bool - Logging bool - Autodiscovery bool - DockerTagging bool - Kubelet bool - KubernetesTagging bool - ECS bool - Containerd bool - CRI bool - ProcessAgent bool - SystemProbe bool - KubeApiServer bool - TraceAgent bool - ClusterAgent bool - ClusterChecks bool - AdmissionController bool - CloudFoundryBBS bool - CloudFoundryCC bool - Compliance bool - SNMP bool - SecurityModule bool - SecurityAgent bool - NetworkModule bool // Sub-module of System Probe - PrometheusScrape bool - OTLP bool + OS string + Common bool + Agent bool + Python bool // Sub-option of Agent + BothPythonPresent bool // Sub-option of Agent - Python + Metadata bool + InternalProfiling bool + Dogstatsd bool + LogsAgent bool + JMX bool + Autoconfig bool + Logging bool + Autodiscovery bool + DockerTagging bool + Kubelet bool + KubernetesTagging bool + ECS bool + Containerd bool + CRI bool + ProcessAgent bool + SystemProbe bool + KubeApiServer bool + TraceAgent bool + ClusterAgent bool + ClusterChecks bool + AdmissionController bool + CloudFoundryBBS bool + CloudFoundryCC bool + Compliance bool + SNMP bool + SecurityModule bool + SecurityAgent bool + NetworkModule bool // Sub-module of System Probe + UniversalServiceMonitoringModule bool // Sub-module of System Probe + PrometheusScrape bool + OTLP bool } func mkContext(buildType string) context { @@ -104,9 +105,10 @@ func mkContext(buildType string) context { } case "system-probe": return context{ - SystemProbe: true, - NetworkModule: true, - SecurityModule: true, + SystemProbe: true, + NetworkModule: true, + UniversalServiceMonitoringModule: true, + SecurityModule: true, } case "dogstatsd": return context{ diff --git a/pkg/config/settings/runtime_setting_profiling.go b/pkg/config/settings/runtime_setting_profiling.go index 3e863c234c560e..80da9644efe6ed 100644 --- a/pkg/config/settings/runtime_setting_profiling.go +++ b/pkg/config/settings/runtime_setting_profiling.go @@ -10,13 +10,15 @@ import ( "strings" "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/util/flavor" "github.com/DataDog/datadog-agent/pkg/util/profiling" "github.com/DataDog/datadog-agent/pkg/version" ) // ProfilingRuntimeSetting wraps operations to change log level at runtime -type ProfilingRuntimeSetting string +type ProfilingRuntimeSetting struct { + SettingName string + Service string +} // Description returns the runtime setting's description func (l ProfilingRuntimeSetting) Description() string { @@ -30,7 +32,7 @@ func (l ProfilingRuntimeSetting) Hidden() bool { // Name returns the name of the runtime setting func (l ProfilingRuntimeSetting) Name() string { - return string(l) + return l.SettingName } // Get returns the current value of the runtime setting @@ -72,10 +74,7 @@ func (l ProfilingRuntimeSetting) Set(v interface{}) error { // Note that we must derive a new profiling.Settings on every // invocation, as many of these settings may have changed at runtime. v, _ := version.Agent() - service := "datadog-agent" - if flavor.GetFlavor() == flavor.ClusterAgent { - service = "datadog-cluster-agent" - } + service := l.Service settings := profiling.Settings{ ProfilingURL: site, @@ -85,6 +84,7 @@ func (l ProfilingRuntimeSetting) Set(v interface{}) error { MutexProfileFraction: profiling.GetMutexProfileFraction(), BlockProfileRate: profiling.GetBlockProfileRate(), WithGoroutineProfile: config.Datadog.GetBool("internal_profiling.enable_goroutine_stacktraces"), + WithDeltaProfiles: config.Datadog.GetBool("internal_profiling.delta_profiles"), Tags: []string{fmt.Sprintf("version:%v", v)}, } err := profiling.Start(settings) diff --git a/pkg/config/settings/runtime_settings_test.go b/pkg/config/settings/runtime_settings_test.go index 8e0aecad92a90b..6bf1c5a00202d9 100644 --- a/pkg/config/settings/runtime_settings_test.go +++ b/pkg/config/settings/runtime_settings_test.go @@ -107,8 +107,9 @@ func TestProfiling(t *testing.T) { cleanRuntimeSetting() setupConf() - ll := ProfilingRuntimeSetting("internal_profiling") + ll := ProfilingRuntimeSetting{SettingName: "internal_profiling", Service: "datadog-agent"} assert.Equal(t, "internal_profiling", ll.Name()) + assert.Equal(t, "datadog-agent", ll.Service) err := ll.Set("false") assert.Nil(t, err) @@ -119,6 +120,12 @@ func TestProfiling(t *testing.T) { err = ll.Set("on") assert.NotNil(t, err) + + ll = ProfilingRuntimeSetting{SettingName: "internal_profiling", Service: "process-agent"} + assert.Equal(t, "process-agent", ll.Service) + + ll = ProfilingRuntimeSetting{SettingName: "internal_profiling", Service: "datadog-cluster-agent"} + assert.Equal(t, "datadog-cluster-agent", ll.Service) } func TestGetInt(t *testing.T) { diff --git a/pkg/containerimage/forwarder.go b/pkg/containerimage/forwarder.go new file mode 100644 index 00000000000000..8d358f76416bbb --- /dev/null +++ b/pkg/containerimage/forwarder.go @@ -0,0 +1,59 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package containerimage + +import ( + "fmt" + "net/url" + + "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/config/resolver" + "github.com/DataDog/datadog-agent/pkg/forwarder" + "github.com/DataDog/datadog-agent/pkg/util/flavor" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +func buildKeysPerDomains(conf config.Config) (map[string][]string, error) { + mainURL := config.GetMainEndpointWithConfig(conf, "https://contimage-intake.", "container_image.dd_url") + if _, err := url.Parse(mainURL); err != nil { + return nil, fmt.Errorf("could not parse contimage main endpoint: %w", err) + } + + keysPerDomain := map[string][]string{ + mainURL: { + conf.GetString("api_key"), + }, + } + + if !conf.IsSet("container_image.additional_endpoints") { + return keysPerDomain, nil + } + + additionalEndpoints := conf.GetStringMapStringSlice("container_image.additional_endpoints") + + return config.MergeAdditionalEndpoints(keysPerDomain, additionalEndpoints) +} + +// NewForwarder returns a forwarder for container images events +func NewForwarder() *forwarder.DefaultForwarder { + if !config.Datadog.GetBool("container_image.enabled") { + return nil + } + + if flavor.GetFlavor() != flavor.DefaultAgent { + return nil + } + + keysPerDomain, err := buildKeysPerDomains(config.Datadog) + if err != nil { + log.Errorf("Cannot build keys per domains: %v", err) + return nil + } + + options := forwarder.NewOptionsWithResolvers(resolver.NewSingleDomainResolvers(keysPerDomain)) + + return forwarder.NewDefaultForwarder(options) +} diff --git a/pkg/dogstatsd/replay/file.go b/pkg/dogstatsd/replay/file.go index b621fe12f161e6..306f9e63097833 100644 --- a/pkg/dogstatsd/replay/file.go +++ b/pkg/dogstatsd/replay/file.go @@ -6,8 +6,8 @@ package replay import ( - "bufio" "fmt" + "io" "github.com/h2non/filetype" "github.com/h2non/filetype/matchers" @@ -17,7 +17,8 @@ var ( datadogType = filetype.NewType("dog", "datadog/capture") // DATADOG0F1FF0000 in HEX (D474D060F1FF0000); (F0 | datadogFileVersion) for different file versions support // 00 to terminate header - datadogHeader = []byte{0xD4, 0x74, 0xD0, 0x60, 0xF0, 0xFF, 0x00, 0x00} + datadogHeader = []byte{0xD4, 0x74, 0xD0, 0x60, 0xF0, 0xFF, 0x00, 0x00} + ErrHeaderWrite = fmt.Errorf("capture file header could not be fully written to buffer") ) const ( @@ -68,18 +69,21 @@ func fileVersion(buf []byte) (int, error) { } // WriteHeader writes the datadog header to the Writer argument to conform to the .dog file format. -func WriteHeader(w *bufio.Writer) error { +func WriteHeader(w io.Writer) error { hdr := make([]byte, len(datadogHeader)) copy(hdr, datadogHeader) hdr[versionIndex] |= datadogFileVersion //Write header - if n, err := w.Write(hdr); err != nil || n < len(datadogHeader) { - if err != nil { - return fmt.Errorf("Capture file header could not be fully written to buffer") - } + n, err := w.Write(hdr) + + if err != nil { return err } + if n < len(datadogHeader) { + return ErrHeaderWrite + } + return nil } diff --git a/pkg/dogstatsd/replay/file_test.go b/pkg/dogstatsd/replay/file_test.go index 32bcb3694b191e..c0e711b3c15388 100644 --- a/pkg/dogstatsd/replay/file_test.go +++ b/pkg/dogstatsd/replay/file_test.go @@ -8,6 +8,8 @@ package replay import ( "bufio" "bytes" + "io" + "io/fs" "testing" "github.com/stretchr/testify/assert" @@ -18,7 +20,7 @@ func TestHeaderFormat(t *testing.T) { contents := bufio.NewWriter(buff) err := WriteHeader(contents) - assert.Nil(t, err) + assert.NoError(t, err) // let's make sure these are written to the underlying byte buffer contents.Flush() @@ -29,7 +31,7 @@ func TestHeaderFormat(t *testing.T) { // look at version v, err := fileVersion(b) - assert.Nil(t, err) + assert.NoError(t, err) assert.Equal(t, v, int(datadogFileVersion)) // let's inspect the header @@ -42,6 +44,44 @@ func TestHeaderFormat(t *testing.T) { } } +func TestHeaderFormatError(t *testing.T) { + tests := []struct { + name string + contents io.Writer + expected error + }{ + { + name: "No error but less bytes written than datadogHeader", + contents: &errorWriter{1, nil}, + expected: ErrHeaderWrite, + }, + { + name: "Error and less bytes written than datadogHeader", + contents: &errorWriter{1, fs.ErrInvalid}, + expected: fs.ErrInvalid, + }, + { + name: "Error and more bytes written than datadogHeader", + contents: &errorWriter{500, fs.ErrInvalid}, + expected: fs.ErrInvalid, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + assert.ErrorIs(t, WriteHeader(tt.contents), tt.expected, tt.name) + }) + } +} + +type errorWriter struct { + n int + err error +} + +func (e *errorWriter) Write(_ []byte) (n int, err error) { + return e.n, e.err +} + func TestFormatMatcher(t *testing.T) { assert.True(t, datadogMatcher(datadogHeader)) diff --git a/pkg/dogstatsd/server_test.go b/pkg/dogstatsd/server_test.go index 8c4828c9d1daa5..d28e10d40816fb 100644 --- a/pkg/dogstatsd/server_test.go +++ b/pkg/dogstatsd/server_test.go @@ -47,6 +47,9 @@ func getAvailableUDPPort() (int, error) { } func TestNewServer(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + port, err := getAvailableUDPPort() require.NoError(t, err) config.Datadog.SetDefault("dogstatsd_port", port) @@ -62,6 +65,9 @@ func TestNewServer(t *testing.T) { } func TestStopServer(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + port, err := getAvailableUDPPort() require.NoError(t, err) config.Datadog.SetDefault("dogstatsd_port", port) @@ -112,6 +118,9 @@ func TestNoRaceOriginTagMaps(t *testing.T) { } func TestUDPReceive(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + port, err := getAvailableUDPPort() require.NoError(t, err) config.Datadog.SetDefault("dogstatsd_port", port) @@ -389,6 +398,9 @@ func TestUDPReceive(t *testing.T) { } func TestUDPForward(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + fport, err := getAvailableUDPPort() require.NoError(t, err) @@ -433,6 +445,9 @@ func TestUDPForward(t *testing.T) { } func TestHistToDist(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + port, err := getAvailableUDPPort() require.NoError(t, err) defaultPort := config.Datadog.GetInt("dogstatsd_port") @@ -531,6 +546,9 @@ func TestEOLParsing(t *testing.T) { } func TestE2EParsing(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + port, err := getAvailableUDPPort() require.NoError(t, err) config.Datadog.SetDefault("dogstatsd_port", port) @@ -573,6 +591,9 @@ func TestE2EParsing(t *testing.T) { } func TestExtraTags(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + port, err := getAvailableUDPPort() require.NoError(t, err) config.Datadog.SetDefault("dogstatsd_port", port) @@ -607,11 +628,11 @@ func TestStaticTags(t *testing.T) { require.NoError(t, err) config.Datadog.SetDefault("dogstatsd_port", port) config.Datadog.SetDefault("dogstatsd_tags", []string{"sometag3:somevalue3"}) - config.Datadog.SetDefault("eks_fargate", true) // triggers DD_TAGS in static_tags config.Datadog.SetDefault("tags", []string{"from:dd_tags"}) - config.SetDetectedFeatures(config.FeatureMap{}) defer config.Datadog.SetDefault("dogstatsd_tags", []string{}) - defer config.Datadog.SetDefault("eks_fargate", false) + + config.SetDetectedFeatures(config.FeatureMap{config.EKSFargate: struct{}{}}) + defer config.SetDetectedFeatures(nil) demux := aggregator.InitTestAgentDemultiplexerWithFlushInterval(10 * time.Millisecond) s, err := NewServer(demux, false) @@ -642,6 +663,9 @@ func TestStaticTags(t *testing.T) { } func TestDebugStatsSpike(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + assert := assert.New(t) demux := mockDemultiplexer() defer demux.Stop(false) @@ -702,6 +726,9 @@ func TestDebugStatsSpike(t *testing.T) { } func TestDebugStats(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + demux := mockDemultiplexer() defer demux.Stop(false) s, err := NewServer(demux, false) @@ -777,6 +804,9 @@ func TestDebugStats(t *testing.T) { } func TestNoMappingsConfig(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + datadogYaml := `` samples := []metrics.MetricSample{} @@ -894,6 +924,9 @@ dogstatsd_mapper_profiles: samples := []metrics.MetricSample{} for _, scenario := range scenarios { t.Run(scenario.name, func(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + config.Datadog.SetConfigType("yaml") err := config.Datadog.ReadConfig(strings.NewReader(scenario.config)) assert.NoError(t, err, "Case `%s` failed. ReadConfig should not return error %v", scenario.name, err) @@ -931,6 +964,9 @@ dogstatsd_mapper_profiles: } func TestNewServerExtraTags(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + // restore env/config after having runned the test p := config.Datadog.Get("dogstatsd_port") defer func() { @@ -1049,6 +1085,9 @@ func testProcessedMetricsOrigin(t *testing.T) { } func TestProcessedMetricsOrigin(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + v := config.Datadog.GetBool("dogstatsd_origin_optout_enabled") defer config.Datadog.Set("dogstatsd_origin_optout_enabled", v) for _, enabled := range []bool{true, false} { @@ -1087,6 +1126,9 @@ func testContainerIDParsing(t *testing.T) { } func TestContainerIDParsing(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + v := config.Datadog.GetBool("dogstatsd_origin_optout_enabled") defer config.Datadog.Set("dogstatsd_origin_optout_enabled", v) for _, enabled := range []bool{true, false} { @@ -1137,6 +1179,9 @@ func testOriginOptout(t *testing.T, enabled bool) { } func TestOriginOptout(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + v := config.Datadog.GetBool("dogstatsd_origin_optout_enabled") defer config.Datadog.Set("dogstatsd_origin_optout_enabled", v) for _, enabled := range []bool{true, false} { diff --git a/pkg/ebpf/bytecode/runtime/all_helpers.go b/pkg/ebpf/bytecode/runtime/all_helpers.go new file mode 100644 index 00000000000000..561560c4d27221 --- /dev/null +++ b/pkg/ebpf/bytecode/runtime/all_helpers.go @@ -0,0 +1,219 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf + +package runtime + +// updated as of Linux v6.0 commit 4fe89d07dcc2804c8b562f6c7896a45643d34b2f +var allHelpers = []string{ + "BPF_FUNC_map_lookup_elem", + "BPF_FUNC_map_update_elem", + "BPF_FUNC_map_delete_elem", + "BPF_FUNC_probe_read", + "BPF_FUNC_ktime_get_ns", + "BPF_FUNC_trace_printk", + "BPF_FUNC_get_prandom_u32", + "BPF_FUNC_get_smp_processor_id", + "BPF_FUNC_skb_store_bytes", + "BPF_FUNC_l3_csum_replace", + "BPF_FUNC_l4_csum_replace", + "BPF_FUNC_tail_call", + "BPF_FUNC_clone_redirect", + "BPF_FUNC_get_current_pid_tgid", + "BPF_FUNC_get_current_uid_gid", + "BPF_FUNC_get_current_comm", + "BPF_FUNC_get_cgroup_classid", + "BPF_FUNC_skb_vlan_push", + "BPF_FUNC_skb_vlan_pop", + "BPF_FUNC_skb_get_tunnel_key", + "BPF_FUNC_skb_set_tunnel_key", + "BPF_FUNC_perf_event_read", + "BPF_FUNC_redirect", + "BPF_FUNC_get_route_realm", + "BPF_FUNC_perf_event_output", + "BPF_FUNC_skb_load_bytes", + "BPF_FUNC_get_stackid", + "BPF_FUNC_csum_diff", + "BPF_FUNC_skb_get_tunnel_opt", + "BPF_FUNC_skb_set_tunnel_opt", + "BPF_FUNC_skb_change_proto", + "BPF_FUNC_skb_change_type", + "BPF_FUNC_skb_under_cgroup", + "BPF_FUNC_get_hash_recalc", + "BPF_FUNC_get_current_task", + "BPF_FUNC_probe_write_user", + "BPF_FUNC_current_task_under_cgroup", + "BPF_FUNC_skb_change_tail", + "BPF_FUNC_skb_pull_data", + "BPF_FUNC_csum_update", + "BPF_FUNC_set_hash_invalid", + "BPF_FUNC_get_numa_node_id", + "BPF_FUNC_skb_change_head", + "BPF_FUNC_xdp_adjust_head", + "BPF_FUNC_probe_read_str", + "BPF_FUNC_get_socket_cookie", + "BPF_FUNC_get_socket_uid", + "BPF_FUNC_set_hash", + "BPF_FUNC_setsockopt", + "BPF_FUNC_skb_adjust_room", + "BPF_FUNC_redirect_map", + "BPF_FUNC_sk_redirect_map", + "BPF_FUNC_sock_map_update", + "BPF_FUNC_xdp_adjust_meta", + "BPF_FUNC_perf_event_read_value", + "BPF_FUNC_perf_prog_read_value", + "BPF_FUNC_getsockopt", + "BPF_FUNC_override_return", + "BPF_FUNC_sock_ops_cb_flags_set", + "BPF_FUNC_msg_redirect_map", + "BPF_FUNC_msg_apply_bytes", + "BPF_FUNC_msg_cork_bytes", + "BPF_FUNC_msg_pull_data", + "BPF_FUNC_bind", + "BPF_FUNC_xdp_adjust_tail", + "BPF_FUNC_skb_get_xfrm_state", + "BPF_FUNC_get_stack", + "BPF_FUNC_skb_load_bytes_relative", + "BPF_FUNC_fib_lookup", + "BPF_FUNC_sock_hash_update", + "BPF_FUNC_msg_redirect_hash", + "BPF_FUNC_sk_redirect_hash", + "BPF_FUNC_lwt_push_encap", + "BPF_FUNC_lwt_seg6_store_bytes", + "BPF_FUNC_lwt_seg6_adjust_srh", + "BPF_FUNC_lwt_seg6_action", + "BPF_FUNC_rc_repeat", + "BPF_FUNC_rc_keydown", + "BPF_FUNC_skb_cgroup_id", + "BPF_FUNC_get_current_cgroup_id", + "BPF_FUNC_get_local_storage", + "BPF_FUNC_sk_select_reuseport", + "BPF_FUNC_skb_ancestor_cgroup_id", + "BPF_FUNC_sk_lookup_tcp", + "BPF_FUNC_sk_lookup_udp", + "BPF_FUNC_sk_release", + "BPF_FUNC_map_push_elem", + "BPF_FUNC_map_pop_elem", + "BPF_FUNC_map_peek_elem", + "BPF_FUNC_msg_push_data", + "BPF_FUNC_msg_pop_data", + "BPF_FUNC_rc_pointer_rel", + "BPF_FUNC_spin_lock", + "BPF_FUNC_spin_unlock", + "BPF_FUNC_sk_fullsock", + "BPF_FUNC_tcp_sock", + "BPF_FUNC_skb_ecn_set_ce", + "BPF_FUNC_get_listener_sock", + "BPF_FUNC_skc_lookup_tcp", + "BPF_FUNC_tcp_check_syncookie", + "BPF_FUNC_sysctl_get_name", + "BPF_FUNC_sysctl_get_current_value", + "BPF_FUNC_sysctl_get_new_value", + "BPF_FUNC_sysctl_set_new_value", + "BPF_FUNC_strtol", + "BPF_FUNC_strtoul", + "BPF_FUNC_sk_storage_get", + "BPF_FUNC_sk_storage_delete", + "BPF_FUNC_send_signal", + "BPF_FUNC_tcp_gen_syncookie", + "BPF_FUNC_skb_output", + "BPF_FUNC_probe_read_user", + "BPF_FUNC_probe_read_kernel", + "BPF_FUNC_probe_read_user_str", + "BPF_FUNC_probe_read_kernel_str", + "BPF_FUNC_tcp_send_ack", + "BPF_FUNC_send_signal_thread", + "BPF_FUNC_jiffies64", + "BPF_FUNC_read_branch_records", + "BPF_FUNC_get_ns_current_pid_tgid", + "BPF_FUNC_xdp_output", + "BPF_FUNC_get_netns_cookie", + "BPF_FUNC_get_current_ancestor_cgroup_id", + "BPF_FUNC_sk_assign", + "BPF_FUNC_ktime_get_boot_ns", + "BPF_FUNC_seq_printf", + "BPF_FUNC_seq_write", + "BPF_FUNC_sk_cgroup_id", + "BPF_FUNC_sk_ancestor_cgroup_id", + "BPF_FUNC_ringbuf_output", + "BPF_FUNC_ringbuf_reserve", + "BPF_FUNC_ringbuf_submit", + "BPF_FUNC_ringbuf_discard", + "BPF_FUNC_ringbuf_query", + "BPF_FUNC_csum_level", + "BPF_FUNC_skc_to_tcp6_sock", + "BPF_FUNC_skc_to_tcp_sock", + "BPF_FUNC_skc_to_tcp_timewait_sock", + "BPF_FUNC_skc_to_tcp_request_sock", + "BPF_FUNC_skc_to_udp6_sock", + "BPF_FUNC_get_task_stack", + "BPF_FUNC_load_hdr_opt", + "BPF_FUNC_store_hdr_opt", + "BPF_FUNC_reserve_hdr_opt", + "BPF_FUNC_inode_storage_get", + "BPF_FUNC_inode_storage_delete", + "BPF_FUNC_d_path", + "BPF_FUNC_copy_from_user", + "BPF_FUNC_snprintf_btf", + "BPF_FUNC_seq_printf_btf", + "BPF_FUNC_skb_cgroup_classid", + "BPF_FUNC_redirect_neigh", + "BPF_FUNC_per_cpu_ptr", + "BPF_FUNC_this_cpu_ptr", + "BPF_FUNC_redirect_peer", + "BPF_FUNC_task_storage_get", + "BPF_FUNC_task_storage_delete", + "BPF_FUNC_get_current_task_btf", + "BPF_FUNC_bprm_opts_set", + "BPF_FUNC_ktime_get_coarse_ns", + "BPF_FUNC_ima_inode_hash", + "BPF_FUNC_sock_from_file", + "BPF_FUNC_check_mtu", + "BPF_FUNC_for_each_map_elem", + "BPF_FUNC_snprintf", + "BPF_FUNC_sys_bpf", + "BPF_FUNC_btf_find_by_name_kind", + "BPF_FUNC_sys_close", + "BPF_FUNC_timer_init", + "BPF_FUNC_timer_set_callback", + "BPF_FUNC_timer_start", + "BPF_FUNC_timer_cancel", + "BPF_FUNC_get_func_ip", + "BPF_FUNC_get_attach_cookie", + "BPF_FUNC_task_pt_regs", + "BPF_FUNC_get_branch_snapshot", + "BPF_FUNC_trace_vprintk", + "BPF_FUNC_skc_to_unix_sock", + "BPF_FUNC_kallsyms_lookup_name", + "BPF_FUNC_find_vma", + "BPF_FUNC_loop", + "BPF_FUNC_strncmp", + "BPF_FUNC_get_func_arg", + "BPF_FUNC_get_func_ret", + "BPF_FUNC_get_func_arg_cnt", + "BPF_FUNC_get_retval", + "BPF_FUNC_set_retval", + "BPF_FUNC_xdp_get_buff_len", + "BPF_FUNC_xdp_load_bytes", + "BPF_FUNC_xdp_store_bytes", + "BPF_FUNC_copy_from_user_task", + "BPF_FUNC_skb_set_tstamp", + "BPF_FUNC_ima_file_hash", + "BPF_FUNC_kptr_xchg", + "BPF_FUNC_map_lookup_percpu_elem", + "BPF_FUNC_skc_to_mptcp_sock", + "BPF_FUNC_dynptr_from_mem", + "BPF_FUNC_ringbuf_reserve_dynptr", + "BPF_FUNC_ringbuf_submit_dynptr", + "BPF_FUNC_ringbuf_discard_dynptr", + "BPF_FUNC_dynptr_read", + "BPF_FUNC_dynptr_write", + "BPF_FUNC_dynptr_data", + "BPF_FUNC_tcp_raw_gen_syncookie_ipv4", + "BPF_FUNC_tcp_raw_gen_syncookie_ipv6", + "BPF_FUNC_tcp_raw_check_syncookie_ipv4", + "BPF_FUNC_tcp_raw_check_syncookie_ipv6", +} diff --git a/pkg/ebpf/bytecode/runtime/asset.go b/pkg/ebpf/bytecode/runtime/asset.go index bea7bb6f838ef0..123f72d792e920 100644 --- a/pkg/ebpf/bytecode/runtime/asset.go +++ b/pkg/ebpf/bytecode/runtime/asset.go @@ -53,7 +53,15 @@ func (a *asset) Compile(config *ebpf.Config, additionalFlags []string, client st } }() - kernelHeaders := kernel.GetKernelHeaders(config, client) + opts := kernel.KernelHeaderOptions{ + DownloadEnabled: config.EnableKernelHeaderDownload, + Dirs: config.KernelHeadersDirs, + DownloadDir: config.KernelHeadersDownloadDir, + AptConfigDir: config.AptConfigDir, + YumReposDir: config.YumReposDir, + ZypperReposDir: config.ZypperReposDir, + } + kernelHeaders := kernel.GetKernelHeaders(opts, client) if len(kernelHeaders) == 0 { a.tm.compilationResult = headerFetchErr return nil, fmt.Errorf("unable to find kernel headers") diff --git a/pkg/ebpf/bytecode/runtime/conntrack.go b/pkg/ebpf/bytecode/runtime/conntrack.go deleted file mode 100644 index c756a6b2902360..00000000000000 --- a/pkg/ebpf/bytecode/runtime/conntrack.go +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -//go:build linux_bpf -// +build linux_bpf - -package runtime - -var Conntrack = newAsset("conntrack.c", "08d28bd882f7d464789a54297443d56ab07d04b74b0cb9aa238a93b0be272372") diff --git a/pkg/ebpf/bytecode/runtime/generated_asset.go b/pkg/ebpf/bytecode/runtime/generated_asset.go index ed6d22b041d853..155be42670bbd2 100644 --- a/pkg/ebpf/bytecode/runtime/generated_asset.go +++ b/pkg/ebpf/bytecode/runtime/generated_asset.go @@ -49,7 +49,15 @@ func (a *generatedAsset) Compile(config *ebpf.Config, inputCode string, addition } }() - kernelHeaders := kernel.GetKernelHeaders(config, client) + opts := kernel.KernelHeaderOptions{ + DownloadEnabled: config.EnableKernelHeaderDownload, + Dirs: config.KernelHeadersDirs, + DownloadDir: config.KernelHeadersDownloadDir, + AptConfigDir: config.AptConfigDir, + YumReposDir: config.YumReposDir, + ZypperReposDir: config.ZypperReposDir, + } + kernelHeaders := kernel.GetKernelHeaders(opts, client) if len(kernelHeaders) == 0 { a.tm.compilationResult = headerFetchErr return nil, fmt.Errorf("unable to find kernel headers") diff --git a/pkg/ebpf/bytecode/runtime/helpers.go b/pkg/ebpf/bytecode/runtime/helpers.go new file mode 100644 index 00000000000000..c2c39c00d5d821 --- /dev/null +++ b/pkg/ebpf/bytecode/runtime/helpers.go @@ -0,0 +1,109 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf + +package runtime + +import ( + "bufio" + "bytes" + "fmt" + "io" + "os" + "strings" + "text/template" + + "github.com/DataDog/datadog-agent/pkg/ebpf/compiler" +) + +const listGenSource = ` +#include + +#define __BPF_ENUM_FN(x) BPF_FUNC_ ## x +__BPF_FUNC_MAPPER(__BPF_ENUM_FN) +#undef __BPF_ENUM_FN +` + +const defineTemplate = ` +#ifndef __BPF_CROSS_COMPILE_DYNAMIC__ +#define __BPF_CROSS_COMPILE_DYNAMIC__ + +{{ range $index, $fn := .AllFuncs -}} +#define __E_{{ $fn }} {{ mapexists $fn $.AvailableFuncs }} +{{ end -}} +#endif +` + +func includeHelperAvailability(kernelHeaders []string) (string, error) { + fns, err := getAvailableHelpers(kernelHeaders) + if err != nil { + return "", fmt.Errorf("get available helpers: %w", err) + } + + f, err := os.CreateTemp(os.TempDir(), "bpf_cross_compile_dynamic.*.h") + if err != nil { + return "", fmt.Errorf("temp define file: %w", err) + } + defer f.Close() + + if err := generateHelperDefines(fns, allHelpers, f); err != nil { + return "", fmt.Errorf("generate helper defines: %w", err) + } + return f.Name(), nil +} + +type helperData struct { + AllFuncs []string + AvailableFuncs map[string]struct{} +} + +func generateHelperDefines(availableFns []string, allFns []string, out io.Writer) error { + tmpl, err := template.New("helperexist").Funcs(map[string]any{ + "mapexists": func(k string, m map[string]struct{}) bool { + _, ok := m[k] + return ok + }, + }).Parse(defineTemplate) + if err != nil { + return fmt.Errorf("helper define template parse: %w", err) + } + + data := &helperData{ + AllFuncs: allFns, + AvailableFuncs: make(map[string]struct{}), + } + + for _, f := range availableFns { + data.AvailableFuncs[f] = struct{}{} + } + return tmpl.Execute(out, data) +} + +func getAvailableHelpers(kernelHeaders []string) ([]string, error) { + clangOut := &bytes.Buffer{} + if err := compiler.Preprocess(bytes.NewBufferString(listGenSource), clangOut, nil, kernelHeaders); err != nil { + return nil, fmt.Errorf("preprocess helpers: %w", err) + } + + var lastLine []byte + scanner := bufio.NewScanner(clangOut) + for scanner.Scan() { + lastLine = scanner.Bytes() + } + if len(lastLine) == 0 { + return nil, fmt.Errorf("empty output") + } + + funcs := strings.Split(string(lastLine), ", ") + if len(funcs) < 2 || funcs[0] != "BPF_FUNC_unspec" { + return nil, fmt.Errorf("invalid preprocess output: %s", lastLine) + } + + // remove BPF_FUNC_unspec + funcs = funcs[1:] + funcs[len(funcs)-1] = strings.TrimSuffix(funcs[len(funcs)-1], ",") + return funcs, nil +} diff --git a/pkg/ebpf/bytecode/runtime/helpers_test.go b/pkg/ebpf/bytecode/runtime/helpers_test.go new file mode 100644 index 00000000000000..87bacedc218226 --- /dev/null +++ b/pkg/ebpf/bytecode/runtime/helpers_test.go @@ -0,0 +1,70 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf + +package runtime + +import ( + "bytes" + "strings" + "testing" + + "github.com/DataDog/gopsutil/host" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/pkg/ebpf" + "github.com/DataDog/datadog-agent/pkg/util/kernel" +) + +func TestGetAvailableHelpers(t *testing.T) { + kv, err := kernel.HostVersion() + require.NoError(t, err) + _, family, _, err := host.PlatformInformation() + require.NoError(t, err) + if kv < kernel.VersionCode(4, 10, 0) && family != "rhel" { + t.Skip("__BPF_FUNC_MAPPER macro not available on vanilla kernels < 4.10.0") + } + + cfg := ebpf.NewConfig() + opts := kernel.KernelHeaderOptions{ + DownloadEnabled: cfg.EnableKernelHeaderDownload, + Dirs: cfg.KernelHeadersDirs, + DownloadDir: cfg.KernelHeadersDownloadDir, + AptConfigDir: cfg.AptConfigDir, + YumReposDir: cfg.YumReposDir, + ZypperReposDir: cfg.ZypperReposDir, + } + kernelHeaders := kernel.GetKernelHeaders(opts, nil) + fns, err := getAvailableHelpers(kernelHeaders) + require.NoError(t, err) + assert.NotEmpty(t, fns, "number of available helpers") + + for _, f := range fns { + assert.NotEqual(t, "BPF_FUNC_unspec", f) + assert.False(t, strings.HasSuffix(f, ",")) + t.Log(f) + } +} + +func TestGenerateHelperDefines(t *testing.T) { + allfns := []string{"BPF_FUNC_map_lookup_elem", "BPF_FUNC_map_update_elem", "BPF_FUNC_map_delete_elem"} + availfns := []string{"BPF_FUNC_map_lookup_elem", "BPF_FUNC_map_update_elem"} + buf := &bytes.Buffer{} + err := generateHelperDefines(availfns, allfns, buf) + require.NoError(t, err) + + const exp = ` +#ifndef __BPF_CROSS_COMPILE_DYNAMIC__ +#define __BPF_CROSS_COMPILE_DYNAMIC__ + +#define __E_BPF_FUNC_map_lookup_elem true +#define __E_BPF_FUNC_map_update_elem true +#define __E_BPF_FUNC_map_delete_elem false +#endif +` + assert.Equal(t, exp, buf.String()) +} diff --git a/pkg/ebpf/bytecode/runtime/http.go b/pkg/ebpf/bytecode/runtime/http.go deleted file mode 100644 index 31f7eb269d44b5..00000000000000 --- a/pkg/ebpf/bytecode/runtime/http.go +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -//go:build linux_bpf -// +build linux_bpf - -package runtime - -var Http = newAsset("http.c", "d0cab87398e80b1fdb63461b57d1a8754be466b993c835e2edde66a3e82f2b33") diff --git a/pkg/ebpf/bytecode/runtime/oom-kill.go b/pkg/ebpf/bytecode/runtime/oom-kill.go deleted file mode 100644 index ec6c945bf7ec97..00000000000000 --- a/pkg/ebpf/bytecode/runtime/oom-kill.go +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -//go:build linux_bpf -// +build linux_bpf - -package runtime - -var OomKill = newAsset("oom-kill.c", "0a6f954a0086e405947f0a4db65f869a72a091b4bf118fe08b6e816ad7fedb08") diff --git a/pkg/ebpf/bytecode/runtime/runtime-security.go b/pkg/ebpf/bytecode/runtime/runtime-security.go index d4d85e3f40fc6b..f7a60841fcbdb3 100644 --- a/pkg/ebpf/bytecode/runtime/runtime-security.go +++ b/pkg/ebpf/bytecode/runtime/runtime-security.go @@ -4,4 +4,4 @@ package runtime -var RuntimeSecurity = newAsset("runtime-security.c", "871228962c5fcbc5e86eee892dbbe5a729a3189c8bae3f9f77db3f9732ab56c6") +var RuntimeSecurity = newAsset("runtime-security.c", "1e551a249259dfdc98b380b64d91c7ba1e34039b6e2fae669015a60e6bbfb22d") diff --git a/pkg/ebpf/bytecode/runtime/runtime_compilation_helpers.go b/pkg/ebpf/bytecode/runtime/runtime_compilation_helpers.go index 6db2a84c9183f7..732daa29a93124 100644 --- a/pkg/ebpf/bytecode/runtime/runtime_compilation_helpers.go +++ b/pkg/ebpf/bytecode/runtime/runtime_compilation_helpers.go @@ -17,10 +17,12 @@ import ( "path/filepath" "strings" + "github.com/DataDog/gopsutil/host" "golang.org/x/sys/unix" "github.com/DataDog/datadog-agent/pkg/ebpf/bytecode" "github.com/DataDog/datadog-agent/pkg/ebpf/compiler" + "github.com/DataDog/datadog-agent/pkg/util/kernel" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -71,6 +73,26 @@ func compileToObjectFile(in io.Reader, outputDir, filename, inHash string, addit return nil, outputFileErr, fmt.Errorf("error stat-ing output file %s: %w", outputFile, err) } + kv, err := kernel.HostVersion() + if err != nil { + return nil, kernelVersionErr, fmt.Errorf("unable to get kernel version: %w", err) + } + _, family, _, err := host.PlatformInformation() + if err != nil { + return nil, kernelVersionErr, fmt.Errorf("unable to get kernel family: %w", err) + } + + // RHEL platforms back-ported the __BPF_FUNC_MAPPER macro, so we can always use the dynamic method there + if kv >= kernel.VersionCode(4, 10, 0) || family == "rhel" { + var helperPath string + helperPath, err = includeHelperAvailability(kernelHeaders) + if err != nil { + return nil, compilationErr, fmt.Errorf("error getting helper availability: %w", err) + } + defer os.Remove(helperPath) + flags = append(flags, fmt.Sprintf("-include%s", helperPath)) + } + if err := compiler.CompileToObjectFile(in, outputFile, flags, kernelHeaders); err != nil { return nil, compilationErr, fmt.Errorf("failed to compile runtime version of %s: %s", filename, err) } @@ -95,9 +117,10 @@ func compileToObjectFile(in io.Reader, outputDir, filename, inHash string, addit } func computeFlagsAndHash(additionalFlags []string) ([]string, string) { - flags := make([]string, len(defaultFlags)+len(additionalFlags)) - copy(flags, defaultFlags) - copy(flags[len(defaultFlags):], additionalFlags) + flags := make([]string, 0, len(defaultFlags)+len(additionalFlags)+1) + flags = append(flags, fmt.Sprintf("-D__TARGET_ARCH_%s", kernel.Arch())) + flags = append(flags, defaultFlags...) + flags = append(flags, additionalFlags...) hasher := sha256.New() for _, f := range flags { diff --git a/pkg/ebpf/bytecode/runtime/tcp-queue-length.go b/pkg/ebpf/bytecode/runtime/tcp-queue-length.go deleted file mode 100644 index 46ddeb3475d8d9..00000000000000 --- a/pkg/ebpf/bytecode/runtime/tcp-queue-length.go +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -//go:build linux_bpf -// +build linux_bpf - -package runtime - -var TcpQueueLength = newAsset("tcp-queue-length.c", "a343a5f32414ef815a930b767694069c968db37b3ce0e53754394b1f455ac8bd") diff --git a/pkg/ebpf/bytecode/runtime/telemetry.go b/pkg/ebpf/bytecode/runtime/telemetry.go index ce52b47058f12b..c6acc217eababf 100644 --- a/pkg/ebpf/bytecode/runtime/telemetry.go +++ b/pkg/ebpf/bytecode/runtime/telemetry.go @@ -28,7 +28,7 @@ type CompilationResult int const ( notAttempted CompilationResult = iota compilationSuccess - kernelVersionErr // nolint:deadcode,unused + kernelVersionErr verificationError outputDirErr outputFileErr diff --git a/pkg/ebpf/bytecode/runtime/tracer.go b/pkg/ebpf/bytecode/runtime/tracer.go deleted file mode 100644 index 51bd71be8bf841..00000000000000 --- a/pkg/ebpf/bytecode/runtime/tracer.go +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -//go:build linux_bpf -// +build linux_bpf - -package runtime - -var Tracer = newAsset("tracer.c", "2cb4e13ab31a82d90b5ff63c35441469f738bf160c147b95cc377b3fcaa7b8f6") diff --git a/pkg/ebpf/c/bpf_cross_compile.h b/pkg/ebpf/c/bpf_cross_compile.h index 62156298e740bf..58da862ed13423 100644 --- a/pkg/ebpf/c/bpf_cross_compile.h +++ b/pkg/ebpf/c/bpf_cross_compile.h @@ -6,30 +6,164 @@ #endif #ifdef COMPILE_RUNTIME - +#include #include +#if !defined(__BPF_FUNC_MAPPER) +#define __E_BPF_FUNC_map_lookup_elem false +#define __E_BPF_FUNC_map_update_elem false +#define __E_BPF_FUNC_map_delete_elem false +#define __E_BPF_FUNC_probe_read false +#define __E_BPF_FUNC_ktime_get_ns false +#define __E_BPF_FUNC_trace_printk false +#define __E_BPF_FUNC_get_prandom_u32 false +#define __E_BPF_FUNC_get_smp_processor_id false +#define __E_BPF_FUNC_skb_store_bytes false +#define __E_BPF_FUNC_l3_csum_replace false +#define __E_BPF_FUNC_l4_csum_replace false +#define __E_BPF_FUNC_tail_call false +#define __E_BPF_FUNC_clone_redirect false +#define __E_BPF_FUNC_get_current_pid_tgid false +#define __E_BPF_FUNC_get_current_uid_gid false #define __E_BPF_FUNC_get_current_comm false +#define __E_BPF_FUNC_get_cgroup_classid false +#define __E_BPF_FUNC_skb_vlan_push false +#define __E_BPF_FUNC_skb_vlan_pop false +#define __E_BPF_FUNC_skb_get_tunnel_key false +#define __E_BPF_FUNC_skb_set_tunnel_key false +#define __E_BPF_FUNC_perf_event_read false +#define __E_BPF_FUNC_redirect false +#define __E_BPF_FUNC_get_route_realm false +#define __E_BPF_FUNC_perf_event_output false +#define __E_BPF_FUNC_skb_load_bytes false +#define __E_BPF_FUNC_get_stackid false +#define __E_BPF_FUNC_csum_diff false +#define __E_BPF_FUNC_skb_get_tunnel_opt false +#define __E_BPF_FUNC_skb_set_tunnel_opt false +#define __E_BPF_FUNC_skb_change_proto false +#define __E_BPF_FUNC_skb_change_type false +#define __E_BPF_FUNC_skb_under_cgroup false +#define __E_BPF_FUNC_get_hash_recalc false #define __E_BPF_FUNC_get_current_task false -#define __E_BPF_FUNC_probe_read_str false +#define __E_BPF_FUNC_probe_write_user false +#define __E_BPF_FUNC_current_task_under_cgroup false +#define __E_BPF_FUNC_skb_change_tail false +#define __E_BPF_FUNC_skb_pull_data false +#define __E_BPF_FUNC_csum_update false +#define __E_BPF_FUNC_set_hash_invalid false + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) +#undef __E_BPF_FUNC_map_lookup_elem +#define __E_BPF_FUNC_map_lookup_elem true +#undef __E_BPF_FUNC_map_update_elem +#define __E_BPF_FUNC_map_update_elem true +#undef __E_BPF_FUNC_map_delete_elem +#define __E_BPF_FUNC_map_delete_elem true +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0) +#undef __E_BPF_FUNC_probe_read +#define __E_BPF_FUNC_probe_read true +#undef __E_BPF_FUNC_ktime_get_ns +#define __E_BPF_FUNC_ktime_get_ns true +#undef __E_BPF_FUNC_trace_printk +#define __E_BPF_FUNC_trace_printk true +#undef __E_BPF_FUNC_get_prandom_u32 +#define __E_BPF_FUNC_get_prandom_u32 true +#undef __E_BPF_FUNC_get_smp_processor_id +#define __E_BPF_FUNC_get_smp_processor_id true +#undef __E_BPF_FUNC_skb_store_bytes +#define __E_BPF_FUNC_skb_store_bytes true +#undef __E_BPF_FUNC_l3_csum_replace +#define __E_BPF_FUNC_l3_csum_replace true +#undef __E_BPF_FUNC_l4_csum_replace +#define __E_BPF_FUNC_l4_csum_replace true +#endif -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,2,0) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0) +#undef __E_BPF_FUNC_tail_call +#define __E_BPF_FUNC_tail_call true +#undef __E_BPF_FUNC_clone_redirect +#define __E_BPF_FUNC_clone_redirect true +#undef __E_BPF_FUNC_get_current_pid_tgid +#define __E_BPF_FUNC_get_current_pid_tgid true +#undef __E_BPF_FUNC_get_current_uid_gid +#define __E_BPF_FUNC_get_current_uid_gid true #undef __E_BPF_FUNC_get_current_comm #define __E_BPF_FUNC_get_current_comm true #endif -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,8,0) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0) +#undef __E_BPF_FUNC_get_cgroup_classid +#define __E_BPF_FUNC_get_cgroup_classid true +#undef __E_BPF_FUNC_skb_vlan_push +#define __E_BPF_FUNC_skb_vlan_push true +#undef __E_BPF_FUNC_skb_vlan_pop +#define __E_BPF_FUNC_skb_vlan_pop true +#undef __E_BPF_FUNC_skb_get_tunnel_key +#define __E_BPF_FUNC_skb_get_tunnel_key true +#undef __E_BPF_FUNC_skb_set_tunnel_key +#define __E_BPF_FUNC_skb_set_tunnel_key true +#undef __E_BPF_FUNC_perf_event_read +#define __E_BPF_FUNC_perf_event_read true +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0) +#undef __E_BPF_FUNC_redirect +#define __E_BPF_FUNC_redirect true +#undef __E_BPF_FUNC_get_route_realm +#define __E_BPF_FUNC_get_route_realm true +#undef __E_BPF_FUNC_perf_event_output +#define __E_BPF_FUNC_perf_event_output true +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 0) +#undef __E_BPF_FUNC_skb_load_bytes +#define __E_BPF_FUNC_skb_load_bytes true +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0) +#undef __E_BPF_FUNC_get_stackid +#define __E_BPF_FUNC_get_stackid true +#undef __E_BPF_FUNC_csum_diff +#define __E_BPF_FUNC_csum_diff true +#undef __E_BPF_FUNC_skb_get_tunnel_opt +#define __E_BPF_FUNC_skb_get_tunnel_opt true +#undef __E_BPF_FUNC_skb_set_tunnel_opt +#define __E_BPF_FUNC_skb_set_tunnel_opt true +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) +#undef __E_BPF_FUNC_skb_change_proto +#define __E_BPF_FUNC_skb_change_proto true +#undef __E_BPF_FUNC_skb_change_type +#define __E_BPF_FUNC_skb_change_type true +#undef __E_BPF_FUNC_skb_under_cgroup +#define __E_BPF_FUNC_skb_under_cgroup true +#undef __E_BPF_FUNC_get_hash_recalc +#define __E_BPF_FUNC_get_hash_recalc true #undef __E_BPF_FUNC_get_current_task #define __E_BPF_FUNC_get_current_task true +#undef __E_BPF_FUNC_probe_write_user +#define __E_BPF_FUNC_probe_write_user true #endif -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0) -#undef __E_BPF_FUNC_probe_read_str -#define __E_BPF_FUNC_probe_read_str true +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0) +#undef __E_BPF_FUNC_current_task_under_cgroup +#define __E_BPF_FUNC_current_task_under_cgroup true +#undef __E_BPF_FUNC_skb_change_tail +#define __E_BPF_FUNC_skb_change_tail true +#undef __E_BPF_FUNC_skb_pull_data +#define __E_BPF_FUNC_skb_pull_data true +#undef __E_BPF_FUNC_csum_update +#define __E_BPF_FUNC_csum_update true +#undef __E_BPF_FUNC_set_hash_invalid +#define __E_BPF_FUNC_set_hash_invalid true #endif -#define bpf_helper_exists(x) __E_ ## x +#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0) */ +#define bpf_helper_exists(x) __E_ ## x #endif /* defined(COMPILE_RUNTIME) */ #endif /* defined(__BPF_CROSS_COMPILE__) */ diff --git a/pkg/ebpf/compiler/compiler.go b/pkg/ebpf/compiler/compiler.go index ff79bcd695ae8d..3c5fc4fe989945 100644 --- a/pkg/ebpf/compiler/compiler.go +++ b/pkg/ebpf/compiler/compiler.go @@ -17,7 +17,6 @@ import ( "os" "os/exec" "path/filepath" - "runtime" "time" "github.com/DataDog/datadog-agent/pkg/util/kernel" @@ -35,55 +34,78 @@ var ( const compilationStepTimeout = 60 * time.Second +func writeStdarg() (string, error) { + tmpIncludeDir, err := os.MkdirTemp(os.TempDir(), "include-") + if err != nil { + return "", fmt.Errorf("error creating temporary include directory: %s", err.Error()) + } + + if err = os.WriteFile(filepath.Join(tmpIncludeDir, "stdarg.h"), stdargHData, 0644); err != nil { + return "", fmt.Errorf("error writing data to stdarg.h: %s", err.Error()) + } + return tmpIncludeDir, nil +} + +func kernelHeaderPaths(headerDirs []string) []string { + arch := kernel.Arch() + var paths []string + for _, d := range headerDirs { + paths = append(paths, + fmt.Sprintf("%s/arch/%s/include", d, arch), + fmt.Sprintf("%s/arch/%s/include/generated", d, arch), + fmt.Sprintf("%s/include", d), + fmt.Sprintf("%s/arch/%s/include/uapi", d, arch), + fmt.Sprintf("%s/arch/%s/include/generated/uapi", d, arch), + fmt.Sprintf("%s/include/uapi", d), + fmt.Sprintf("%s/include/generated/uapi", d), + ) + } + return paths +} + // CompileToObjectFile compiles an eBPF program func CompileToObjectFile(in io.Reader, outputFile string, cflags []string, headerDirs []string) error { if len(headerDirs) == 0 { return fmt.Errorf("unable to find kernel headers") } - arch := kernel.Arch() - if arch == "" { - return fmt.Errorf("unable to get kernel arch for %s", runtime.GOARCH) - } - - tmpIncludeDir, err := os.MkdirTemp(os.TempDir(), "include-") + tmpIncludeDir, err := writeStdarg() if err != nil { - return fmt.Errorf("error creating temporary include directory: %s", err.Error()) + return err } defer os.RemoveAll(tmpIncludeDir) + cflags = append(cflags, fmt.Sprintf("-isystem%s", tmpIncludeDir)) - if err = os.WriteFile(filepath.Join(tmpIncludeDir, "stdarg.h"), stdargHData, 0644); err != nil { - return fmt.Errorf("error writing data to stdarg.h: %s", err.Error()) + kps := kernelHeaderPaths(headerDirs) + for _, p := range kps { + cflags = append(cflags, fmt.Sprintf("-isystem%s", p)) } - for _, d := range headerDirs { - cflags = append(cflags, - fmt.Sprintf("-isystem%s/arch/%s/include", d, arch), - fmt.Sprintf("-isystem%s/arch/%s/include/generated", d, arch), - fmt.Sprintf("-isystem%s/include", d), - fmt.Sprintf("-isystem%s/arch/%s/include/uapi", d, arch), - fmt.Sprintf("-isystem%s/arch/%s/include/generated/uapi", d, arch), - fmt.Sprintf("-isystem%s/include/uapi", d), - fmt.Sprintf("-isystem%s/include/generated/uapi", d), - ) - } - cflags = append(cflags, fmt.Sprintf("-isystem%s", tmpIncludeDir)) cflags = append(cflags, "-c", "-x", "c", "-o", "-", "-") + clangOut := &bytes.Buffer{} + if err := clang(in, clangOut, cflags); err != nil { + return fmt.Errorf("compiling asset to bytecode: %w", err) + } + if err := llc(clangOut, outputFile); err != nil { + return fmt.Errorf("error compiling bytecode to object file: %w", err) + } + return nil +} - var clangOut, clangErr, llcErr bytes.Buffer +func clang(in io.Reader, out io.Writer, cflags []string) error { + var clangErr bytes.Buffer clangCtx, clangCancel := context.WithTimeout(context.Background(), compilationStepTimeout) defer clangCancel() compileToBC := exec.CommandContext(clangCtx, clangBinPath, cflags...) compileToBC.Stdin = in - compileToBC.Stdout = &clangOut + compileToBC.Stdout = out compileToBC.Stderr = &clangErr - log.Debugf("compiling asset to bytecode: %v", compileToBC.Args) - - err = compileToBC.Run() + log.Debugf("running clang: %v", compileToBC.Args) + err := compileToBC.Run() if err != nil { var errMsg string if clangCtx.Err() == context.DeadlineExceeded { @@ -93,24 +115,28 @@ func CompileToObjectFile(in io.Reader, outputFile string, cflags []string, heade } else { errMsg = err.Error() } - return fmt.Errorf("error compiling asset to bytecode: %s", errMsg) + return fmt.Errorf("clang: %s", errMsg) } if len(clangErr.String()) > 0 { log.Debugf("%s", clangErr.String()) } + return nil +} +func llc(in io.Reader, outputFile string) error { + var llcErr bytes.Buffer llcCtx, llcCancel := context.WithTimeout(context.Background(), compilationStepTimeout) defer llcCancel() bcToObj := exec.CommandContext(llcCtx, llcBinPath, "-march=bpf", "-filetype=obj", "-o", outputFile, "-") - bcToObj.Stdin = &clangOut + bcToObj.Stdin = in bcToObj.Stdout = nil bcToObj.Stderr = &llcErr - log.Debugf("compiling bytecode to object file: %v", bcToObj.Args) + log.Debugf("running llc: %v", bcToObj.Args) - err = bcToObj.Run() + err := bcToObj.Run() if err != nil { var errMsg string if llcCtx.Err() == context.DeadlineExceeded { @@ -120,12 +146,29 @@ func CompileToObjectFile(in io.Reader, outputFile string, cflags []string, heade } else { errMsg = err.Error() } - return fmt.Errorf("error compiling bytecode to object file: %s", errMsg) + return fmt.Errorf("llc: %s", errMsg) } if len(llcErr.String()) > 0 { - log.Debugf("%s", clangErr.String()) + log.Debugf("%s", llcErr.String()) } - return nil } + +// Preprocess runs the clang preprocessor on `in` and writes the output to `out` +func Preprocess(in io.Reader, out io.Writer, cflags []string, headerDirs []string) error { + tmpIncludeDir, err := writeStdarg() + if err != nil { + return err + } + defer os.RemoveAll(tmpIncludeDir) + cflags = append(cflags, fmt.Sprintf("-isystem%s", tmpIncludeDir)) + + kps := kernelHeaderPaths(headerDirs) + for _, p := range kps { + cflags = append(cflags, fmt.Sprintf("-isystem%s", p)) + } + + cflags = append(cflags, "-E", "-x", "c", "-o", "-", "-") + return clang(in, out, cflags) +} diff --git a/pkg/epforwarder/epforwarder.go b/pkg/epforwarder/epforwarder.go index d448e43bc8238e..291454c135a211 100644 --- a/pkg/epforwarder/epforwarder.go +++ b/pkg/epforwarder/epforwarder.go @@ -42,7 +42,7 @@ var passthroughPipelineDescs = []passthroughPipelineDesc{ { eventType: eventTypeDBMSamples, endpointsConfigPrefix: "database_monitoring.samples.", - hostnameEndpointPrefix: "dbquery-intake.", + hostnameEndpointPrefix: "dbm-metrics-intake.", intakeTrackType: "databasequery", // raise the default batch_max_concurrent_send from 0 to 10 to ensure this pipeline is able to handle 4k events/s defaultBatchMaxConcurrentSend: 10, @@ -138,7 +138,7 @@ func (s *defaultEventPlatformForwarder) SendEventPlatformEvent(e *message.Messag case p.in <- e: return nil default: - return fmt.Errorf("event platform forwarder pipeline channel is full for eventType=%s. consider increasing batch_max_concurrent_send", eventType) + return fmt.Errorf("event platform forwarder pipeline channel is full for eventType=%s. Channel capacity is %d. consider increasing batch_max_concurrent_send", eventType, cap(p.in)) } } @@ -162,7 +162,11 @@ func (s *defaultEventPlatformForwarder) Purge() map[string][]*message.Message { defer s.purgeMx.Unlock() result := make(map[string][]*message.Message) for eventType, p := range s.pipelines { - result[eventType] = purgeChan(p.in) + res := purgeChan(p.in) + result[eventType] = res + if eventType == eventTypeDBMActivity || eventType == eventTypeDBMMetrics || eventType == eventTypeDBMSamples { + log.Debugf("purged DBM channel %s: %d events", eventType, len(res)) + } } return result } diff --git a/pkg/flare/archive.go b/pkg/flare/archive.go index e840d2108f9ded..57154a895b6f0a 100644 --- a/pkg/flare/archive.go +++ b/pkg/flare/archive.go @@ -9,96 +9,51 @@ import ( "bufio" "bytes" "context" - "crypto/rand" - "encoding/hex" "encoding/json" "expvar" "fmt" "io" "net/http" - "os" "path/filepath" "regexp" "sort" "strings" "time" + flarehelpers "github.com/DataDog/datadog-agent/comp/core/flare/helpers" "github.com/DataDog/datadog-agent/pkg/api/security" apiutil "github.com/DataDog/datadog-agent/pkg/api/util" "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/diagnose" "github.com/DataDog/datadog-agent/pkg/diagnose/connectivity" + "github.com/DataDog/datadog-agent/pkg/metadata/inventories" + v5 "github.com/DataDog/datadog-agent/pkg/metadata/v5" "github.com/DataDog/datadog-agent/pkg/secrets" "github.com/DataDog/datadog-agent/pkg/status" "github.com/DataDog/datadog-agent/pkg/status/health" - "github.com/DataDog/datadog-agent/pkg/util" - hostnameUtil "github.com/DataDog/datadog-agent/pkg/util/hostname" + host "github.com/DataDog/datadog-agent/pkg/util/hostname" "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/DataDog/datadog-agent/pkg/util/scrubber" "github.com/DataDog/datadog-agent/pkg/workloadmeta" - "github.com/mholt/archiver/v3" "gopkg.in/yaml.v2" ) -const ( - routineDumpFilename = "go-routine-dump.log" - - // Maximum size for the root directory name - directoryNameMaxSize = 32 -) - var ( pprofURL = fmt.Sprintf("http://127.0.0.1:%s/debug/pprof/goroutine?debug=2", config.Datadog.GetString("expvar_port")) telemetryURL = fmt.Sprintf("http://127.0.0.1:%s/telemetry", config.Datadog.GetString("expvar_port")) - procStatusURL string // Match .yaml and .yml to ship configuration files in the flare. cnfFileExtRx = regexp.MustCompile(`(?i)\.ya?ml`) - - // Filter to clean the directory name from invalid file name characters - directoryNameFilter = regexp.MustCompile(`[^a-zA-Z0-9_-]+`) - - // specialized scrubber for flare content - flareScrubber *scrubber.Scrubber ) // SearchPaths is just an alias for a map of strings type SearchPaths map[string]string -// permissionsInfos holds permissions info about the files shipped -// in the flare. -// The key is the filepath of the file. -type permissionsInfos map[string]filePermsInfo - // ProfileData maps (pprof) profile names to the profile data. type ProfileData map[string][]byte -func init() { - flareScrubber = scrubber.New() - scrubber.AddDefaultReplacers(flareScrubber) - - // The default scrubber doesn't deal with api keys of other services, for - // example powerDNS which has an "api_key" field in its YAML configuration. - // We add a replacer to scrub even those credentials. - // - // It is a best effort to match the api key field without matching our - // own already scrubbed (we don't want to match: "**************************abcde") - // Basically we allow many special chars while forbidding *. - // - // We want the value to be at least 2 characters which will avoid matching the first '"' from the regular - // replacer for api_key. - otherAPIKeysRx := regexp.MustCompile(`api_key\s*:\s*[a-zA-Z0-9\\\/\^\]\[\(\){}!|%:;"~><=#@$_\-\+]{2,}`) - flareScrubber.AddReplacer(scrubber.SingleLine, scrubber.Replacer{ - Regex: otherAPIKeysRx, - ReplFunc: func(b []byte) []byte { - return []byte("api_key: \"********\"") - }, - }) -} - // CreatePerformanceProfile adds a set of heap and CPU profiles into target, using cpusec as the CPU // profile duration, debugURL as the target URL for fetching the profiles and prefix as a prefix for // naming them inside target. @@ -147,345 +102,149 @@ func CreatePerformanceProfile(prefix, debugURL string, cpusec int, target *Profi // CreateArchive packages up the files func CreateArchive(local bool, distPath, pyChecksPath string, logFilePaths []string, pdata ProfileData, ipcError error) (string, error) { - zipFilePath := getArchivePath() + fb, err := flarehelpers.NewFlareBuilder() + if err != nil { + return "", err + } + + CompleteFlare(fb, local, distPath, pyChecksPath, logFilePaths, pdata, ipcError) + return fb.Save() +} + +// CompleteFlare packages up the files with an already created builder. This is aimed to be used by the flare +// component while we migrate to a component architecture. +func CompleteFlare(fb flarehelpers.FlareBuilder, local bool, distPath, pyChecksPath string, logFilePaths []string, pdata ProfileData, ipcError error) { confSearchPaths := SearchPaths{ "": config.Datadog.GetString("confd_path"), "dist": filepath.Join(distPath, "conf.d"), "checksd": pyChecksPath, } - return createArchive(confSearchPaths, local, zipFilePath, logFilePaths, pdata, ipcError) + createArchive(fb, confSearchPaths, local, logFilePaths, pdata, ipcError) } -func createArchive(confSearchPaths SearchPaths, local bool, zipFilePath string, logFilePaths []string, pdata ProfileData, ipcError error) (string, error) { +func createArchive(fb flarehelpers.FlareBuilder, confSearchPaths SearchPaths, local bool, logFilePaths []string, pdata ProfileData, ipcError error) { /** WARNING * - * When adding data to flares, carefully analyze the what is being added - * and ensure that it contains no credentials or unnecessary user-specific - * data. The ./pkg/util/scrubber package can be useful for scrubbing - * secrets that match pre-programmed patterns, but it is always better to - * not capture data containing secrets, than to scrub that data. + * When adding data to flares, carefully analyze what is being added and ensure that it contains no credentials + * or unnecessary user-specific data. The FlareBuilder scrubs secrets that match pre-programmed patterns, but it + * is always better to not capture data containing secrets, than to scrub that data. */ - tempDir, err := createTempDir() - if err != nil { - return "", err - } - defer os.RemoveAll(tempDir) - - // Get hostname, if there's an error in getting the hostname, - // set the hostname to unknown - hostname, err := hostnameUtil.Get(context.TODO()) - if err != nil { - hostname = "unknown" - } - - hostname = cleanDirectoryName(hostname) - - permsInfos := make(permissionsInfos) - if local { - err = writeLocal(tempDir, hostname) - if err != nil { - return "", err - } + fb.AddFile("local", []byte("")) if ipcError != nil { - msg := []byte(fmt.Sprintf("unable to contact the agent to retrieve flare: %s", ipcError)) // Can't reach the agent, mention it in those two files - err = writeStatusFile(tempDir, hostname, msg) - if err != nil { - return "", err - } - err = writeConfigCheck(tempDir, hostname, msg) - if err != nil { - return "", err - } + msg := []byte(fmt.Sprintf("unable to contact the agent to retrieve flare: %s", ipcError)) + fb.AddFile("status.log", msg) + fb.AddFile("config-check.log", msg) } else { // Can't reach the agent, mention it in those two files - err = writeStatusFile(tempDir, hostname, []byte("unable to get the status of the agent, is it running?")) - if err != nil { - return "", err - } - err = writeConfigCheck(tempDir, hostname, []byte("unable to get loaded checks config, is the agent running?")) - if err != nil { - return "", err - } + fb.AddFile("status.log", []byte("unable to get the status of the agent, is it running?")) + fb.AddFile("config-check.log", []byte("unable to get loaded checks config, is the agent running?")) } } else { - // Status informations are available, zip them up as the agent is running. - err = zipStatusFile(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip status: %s", err) - } + // Status information are available, add them as the agent is running. - err = zipConfigCheck(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip config check: %s", err) - } - - err = zipAgentTaggerList(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip tagger list: %s", err) - } + fb.AddFileFromFunc("status.log", status.GetAndFormatStatus) + fb.AddFileFromFunc("config-check.log", getConfigCheck) + fb.AddFileFromFunc("tagger-list.json", getAgentTaggerList) + fb.AddFileFromFunc("workload-list.log", getWorkloadList) + fb.AddFileFromFunc("process-agent_tagger-list.json", getProcessAgentTaggerList) - err = zipWorkloadList(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip workload list: %s", err) - } - - err = zipProcessAgentTaggerList(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip process-agent tagger list: %s", err) - } - - err = zipProcessChecks(tempDir, hostname, config.GetProcessAPIAddressPort) - if err != nil { - log.Errorf("Could not zip process agent checks: %s", err) - } - } - - // auth token permissions info (only if existing) - if _, err = os.Stat(security.GetAuthTokenFilepath()); err == nil && !os.IsNotExist(err) { - permsInfos.add(security.GetAuthTokenFilepath()) + getProcessChecks(fb, config.GetProcessAPIAddressPort) } - err = zipConfigFiles(tempDir, hostname, confSearchPaths, permsInfos) - if err != nil { - log.Errorf("Could not zip config: %s", err) - } + fb.RegisterFilePerm(security.GetAuthTokenFilepath()) - err = zipExpVar(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip exp var: %s", err) + systemProbeConfigBPFDir := config.Datadog.GetString("system_probe_config.bpf_dir") + if systemProbeConfigBPFDir != "" { + fb.RegisterDirPerm(systemProbeConfigBPFDir) } + addSystemProbePlatformSpecificEntries(fb) if config.Datadog.GetBool("system_probe_config.enabled") { - err = zipSystemProbeStats(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip system probe exp var stats: %s", err) - } + fb.AddFileFromFunc(filepath.Join("expvar", "system-probe"), getSystemProbeStats) } - err = zipDiagnose(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip diagnose: %s", err) - } + fb.AddFileFromFunc("process_agent_runtime_config_dump.yaml", getProcessAgentFullConfig) + fb.AddFileFromFunc("runtime_config_dump.yaml", func() ([]byte, error) { return yaml.Marshal(config.Datadog.AllSettings()) }) + fb.AddFileFromFunc("diagnose.log", func() ([]byte, error) { return functionOutputToBytes(diagnose.RunAll), nil }) + fb.AddFileFromFunc("connectivity.log", getDatadogConnectivity) + fb.AddFileFromFunc("secrets.log", getSecrets) + fb.AddFileFromFunc("envvars.log", getEnvVars) + fb.AddFileFromFunc("metadata_inventories.json", inventories.GetLastPayload) + fb.AddFileFromFunc("metadata_v5.json", getMetadataV5) + fb.AddFileFromFunc("health.yaml", getHealth) + fb.AddFileFromFunc("go-routine-dump.log", func() ([]byte, error) { return getHTTPCallContent(pprofURL) }) + fb.AddFileFromFunc("docker_inspect.log", getDockerSelfInspect) + fb.AddFileFromFunc("docker_ps.log", getDockerPs) - err = zipDatadogConnectivity(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip diagnose datadog-connectivity: %s", err) - } + getRegistryJSON(fb) - err = zipRegistryJSON(tempDir, hostname) - if err != nil { - log.Warnf("Could not zip registry.json: %s", err) - } - - err = zipVersionHistory(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip version-history.json: %s", err) - } - - err = zipSecrets(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip secrets: %s", err) - } + getVersionHistory(fb) + fb.CopyFile(filepath.Join(config.FileUsedDir(), "install_info")) - err = zipEnvvars(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip env vars: %s", err) - } - - err = zipMetadataInventories(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip inventories metadata payload: %s", err) - } - - err = zipMetadataV5(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip v5 metadata payload: %s", err) - } - - err = zipHealth(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip health check: %s", err) - } + getConfigFiles(fb, confSearchPaths) + getExpVar(fb) //nolint:errcheck + getWindowsData(fb) if config.Datadog.GetBool("telemetry.enabled") { - err = zipTelemetry(tempDir, hostname) - if err != nil { - log.Errorf("Could not collect telemetry metrics: %s", err) - } - } - - err = zipStackTraces(tempDir, hostname) - if err != nil { - log.Errorf("Could not collect go routine stack traces: %s", err) - } - - if config.IsContainerized() { - err = zipDockerSelfInspect(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip docker inspect: %s", err) - } - } - - err = zipDockerPs(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip docker ps: %s", err) - } - - err = zipTypeperfData(tempDir, hostname) - if err != nil { - log.Errorf("Could not write typeperf data: %s", err) - } - err = zipLodctrOutput(tempDir, hostname) - if err != nil { - log.Errorf("Could not write lodctr data: %s", err) - } - - err = zipCounterStrings(tempDir, hostname) - if err != nil { - log.Errorf("Could not write counter strings: %s", err) - } - - err = zipWindowsEventLogs(tempDir, hostname) - if err != nil { - log.Errorf("Could not export Windows event logs: %s", err) - } - err = zipServiceStatus(tempDir, hostname) - if err != nil { - log.Errorf("Could not export Windows driver status: %s", err) - } - err = zipDatadogRegistry(tempDir, hostname) - if err != nil { - log.Errorf("Could not export Windows Datadog Registry: %s", err) + fb.AddFileFromFunc("telemetry.log", func() ([]byte, error) { return getHTTPCallContent(telemetryURL) }) } if config.Datadog.GetBool("remote_configuration.enabled") { - err = zipRemoteConfigDB(tempDir, hostname) - if err != nil { + if err := getRemoteConfigDB(fb); err != nil { log.Errorf("Could not export remote-config database: %s", err) } } - // force a log flush before zipping them - log.Flush() for _, logFilePath := range logFilePaths { - err = zipLogFiles(tempDir, hostname, logFilePath, permsInfos) - if err != nil { - log.Errorf("Could not zip logs: %s", err) - } - } - - err = zipInstallInfo(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip install_info: %s", err) - } - - if pdata != nil { - err = zipPerformanceProfile(tempDir, hostname, pdata) - if err != nil { - log.Errorf("Could not zip performance profile: %s", err) - } - } - - // gets files infos and write the permissions.log file - if err := permsInfos.commit(tempDir, hostname, os.ModePerm); err != nil { - log.Errorf("Could not write permissions.log file: %s", err) + getLogFiles(fb, logFilePath) } - // File format is determined based on `zipFilePath` extension - err = archiver.Archive([]string{filepath.Join(tempDir, hostname)}, zipFilePath) - if err != nil { - return "", err - } - - return zipFilePath, nil + getPerformanceProfile(fb, pdata) } -func createTempDir() (string, error) { - b := make([]byte, 10) - _, err := rand.Read(b) - if err != nil { - return "", err - } - - dirName := hex.EncodeToString(b) - return os.MkdirTemp("", dirName) +func getVersionHistory(fb flarehelpers.FlareBuilder) { + fb.CopyFile(filepath.Join(config.Datadog.GetString("run_path"), "version-history.json")) } -func zipStatusFile(tempDir, hostname string) error { - // Grab the status - s, err := status.GetAndFormatStatus() - if err != nil { - return err +func getPerformanceProfile(fb flarehelpers.FlareBuilder, pdata ProfileData) { + for name, data := range pdata { + fb.AddFile(filepath.Join("profiles", name), data) } - return writeStatusFile(tempDir, hostname, s) } -func writeStatusFile(tempDir, hostname string, data []byte) error { - return joinPathAndWriteScrubbedFile(data, tempDir, hostname, "status.log") +func getRegistryJSON(fb flarehelpers.FlareBuilder) { + fb.CopyFile(filepath.Join(config.Datadog.GetString("logs_config.run_path"), "registry.json")) } -func addParentPerms(dirPath string, permsInfos permissionsInfos) { - parent := filepath.Dir(dirPath) - - // We do not enter the loop when `filepath.Dir` returns ".", meaning an empty directory was passed. - for parent != "." { - if len(filepath.Dir(parent)) == len(parent) { - permsInfos.add(parent) - break - } - - permsInfos.add(parent) - parent = filepath.Dir(parent) - } -} +func getMetadataV5() ([]byte, error) { + ctx := context.Background() + hostnameData, _ := host.GetWithProvider(ctx) + payload := v5.GetPayload(ctx, hostnameData) -func zipLogFiles(tempDir, hostname, logFilePath string, permsInfos permissionsInfos) error { - // Force dir path to be absolute first - logFileDir, err := filepath.Abs(filepath.Dir(logFilePath)) + data, err := json.MarshalIndent(payload, "", " ") if err != nil { - log.Errorf("Error getting absolute path to log directory of %q: %v", logFilePath, err) - return err + return nil, err } - permsInfos.add(logFileDir) - - err = filepath.Walk(logFileDir, func(src string, f os.FileInfo, err error) error { - if f == nil { - return nil - } - if f.IsDir() { - return nil - } - if filepath.Ext(f.Name()) == ".log" || getFirstSuffix(f.Name()) == ".log" { - targRelPath, relErr := filepath.Rel(logFileDir, src) - if relErr != nil { - log.Errorf("Can't get relative path to %q: %v", src, relErr) - return nil - } - dst := filepath.Join(tempDir, hostname, "logs", targRelPath) + return data, nil +} - if permsInfos != nil { - permsInfos.add(src) - } +func getLogFiles(fb flarehelpers.FlareBuilder, logFileDir string) { + log.Flush() - return util.CopyFileAll(src, dst) + fb.CopyDirToWithoutScrubbing(filepath.Dir(logFileDir), "logs", func(path string) bool { + if filepath.Ext(path) == ".log" || getFirstSuffix(path) == ".log" { + return true } - return nil + return false }) - - // The permsInfos map is empty when we cannot read the auth token. - if len(permsInfos) != 0 { - addParentPerms(logFileDir, permsInfos) - } - - return err } -func zipExpVar(tempDir, hostname string) error { +func getExpVar(fb flarehelpers.FlareBuilder) error { variables := make(map[string]interface{}) expvar.Do(func(kv expvar.KeyValue) { variable := make(map[string]interface{}) @@ -502,7 +261,7 @@ func zipExpVar(tempDir, hostname string) error { return err } - err = joinPathAndWriteScrubbedFile(yamlValue, tempDir, hostname, "expvar", key) + err = fb.AddFile(filepath.Join("expvar", key), yamlValue) if err != nil { return err } @@ -512,10 +271,10 @@ func zipExpVar(tempDir, hostname string) error { if config.Datadog.IsSet("apm_config.receiver_port") { apmPort = config.Datadog.GetString("apm_config.receiver_port") } - f := filepath.Join(tempDir, hostname, "expvar", "trace-agent") + f := filepath.Join("expvar", "trace-agent") resp, err := http.Get(fmt.Sprintf("http://127.0.0.1:%s/debug/vars", apmPort)) if err != nil { - return writeScrubbedFile(f, []byte(fmt.Sprintf("Error retrieving vars: %v", err))) + return fb.AddFile(f, []byte(fmt.Sprintf("Error retrieving vars: %v", err))) } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { @@ -523,8 +282,7 @@ func zipExpVar(tempDir, hostname string) error { if err != nil { return err } - return writeScrubbedFile(f, - []byte(fmt.Sprintf("Got response %s from /debug/vars:\n%s", resp.Status, slurp))) + return fb.AddFile(f, []byte(fmt.Sprintf("Got response %s from /debug/vars:\n%s", resp.Status, slurp))) } var all map[string]interface{} if err := json.NewDecoder(resp.Body).Decode(&all); err != nil { @@ -534,82 +292,66 @@ func zipExpVar(tempDir, hostname string) error { if err != nil { return err } - return writeScrubbedFile(f, v) + return fb.AddFile(f, v) } -func zipSystemProbeStats(tempDir, hostname string) error { +func getSystemProbeStats() ([]byte, error) { sysProbeStats := status.GetSystemProbeStats(config.Datadog.GetString("system_probe_config.sysprobe_socket")) sysProbeBuf, err := yaml.Marshal(sysProbeStats) if err != nil { - return err + return nil, err } - return joinPathAndWriteScrubbedFile(sysProbeBuf, tempDir, hostname, "expvar", "system-probe") + return sysProbeBuf, nil } -// zipProcessAgentFullConfig fetches process-agent runtime config as YAML and writes it to process_agent_runtime_config_dump.yaml -func zipProcessAgentFullConfig(tempDir, hostname string) error { - // procStatusURL can be manually set for test purposes - if procStatusURL == "" { - addressPort, err := config.GetProcessAPIAddressPort() - if err != nil { - return fmt.Errorf("wrong configuration to connect to process-agent") - } - - procStatusURL = fmt.Sprintf("http://%s/config/all", addressPort) +// getProcessAgentFullConfig fetches process-agent runtime config as YAML and returns it to be added to process_agent_runtime_config_dump.yaml +func getProcessAgentFullConfig() ([]byte, error) { + addressPort, err := config.GetProcessAPIAddressPort() + if err != nil { + return nil, fmt.Errorf("wrong configuration to connect to process-agent") } - cfgB := status.GetProcessAgentRuntimeConfig(procStatusURL) + procStatusURL := fmt.Sprintf("http://%s/config/all", addressPort) - return joinPathAndWriteScrubbedFile(cfgB, tempDir, hostname, "process_agent_runtime_config_dump.yaml") + cfgB := status.GetProcessAgentRuntimeConfig(procStatusURL) + return cfgB, nil } -func zipConfigFiles(tempDir, hostname string, confSearchPaths SearchPaths, permsInfos permissionsInfos) error { - c, err := yaml.Marshal(config.Datadog.AllSettings()) - if err != nil { - return err - } - - err = joinPathAndWriteScrubbedFile(c, tempDir, hostname, "runtime_config_dump.yaml") - if err != nil { - return err - } - - // Use best effort to write process-agent runtime configs - err = zipProcessAgentFullConfig(tempDir, hostname) - if err != nil { - log.Warnf("could not zip process_agent_runtime_config_dump.yaml: %s", err) - } +func getConfigFiles(fb flarehelpers.FlareBuilder, confSearchPaths SearchPaths) { + for prefix, filePath := range confSearchPaths { + fb.CopyDirTo(filePath, filepath.Join("etc", "confd", prefix), func(path string) bool { + // ignore .example file + if filepath.Ext(path) == ".example" { + return false + } - err = walkConfigFilePaths(tempDir, hostname, confSearchPaths, permsInfos) - if err != nil { - return err + firstSuffix := []byte(getFirstSuffix(path)) + ext := []byte(filepath.Ext(path)) + if cnfFileExtRx.Match(firstSuffix) || cnfFileExtRx.Match(ext) { + return true + } + return false + }) } if config.Datadog.ConfigFileUsed() != "" { + mainConfpath := config.Datadog.ConfigFileUsed() + confDir := filepath.Dir(mainConfpath) + // zip up the config file that was actually used, if one exists - filePath := config.Datadog.ConfigFileUsed() - if err = createConfigFiles(filePath, tempDir, hostname, permsInfos); err != nil { - return err - } - // figure out system-probe file path based on main config path, - // and use best effort to include system-probe.yaml to the flare - systemProbePath := getConfigPath(filePath, "system-probe.yaml") - if systemErr := createConfigFiles(systemProbePath, tempDir, hostname, permsInfos); systemErr != nil { - log.Warnf("could not zip system-probe.yaml, system-probe might not be configured, or is in a different directory with datadog.yaml: %s", systemErr) - } + fb.CopyFileTo(mainConfpath, filepath.Join("etc", "datadog.yaml")) + + // figure out system-probe file path based on main config path, and use best effort to include + // system-probe.yaml to the flare + fb.CopyFileTo(filepath.Join(confDir, "system-probe.yaml"), filepath.Join("etc", "system-probe.yaml")) // use best effort to include security-agent.yaml to the flare - securityAgentPath := getConfigPath(filePath, "security-agent.yaml") - if secErr := createConfigFiles(securityAgentPath, tempDir, hostname, permsInfos); secErr != nil { - log.Warnf("could not zip security-agent.yaml, security-agent might not be configured, or is in a different directory with datadog.yaml: %s", secErr) - } + fb.CopyFileTo(filepath.Join(confDir, "security-agent.yaml"), filepath.Join("etc", "system-probe.yaml")) } - - return err } -func zipSecrets(tempDir, hostname string) error { +func getSecrets() ([]byte, error) { fct := func(writer io.Writer) error { info, err := secrets.GetDebugInfo() if err != nil { @@ -620,166 +362,80 @@ func zipSecrets(tempDir, hostname string) error { return nil } - return zipCommandOutput(fct, tempDir, hostname, "secrets.log") + return functionOutputToBytes(fct), nil } -func zipProcessChecks(tempDir, hostname string, getAddressPort func() (url string, err error)) error { +func getProcessChecks(fb flarehelpers.FlareBuilder, getAddressPort func() (url string, err error)) { addressPort, err := getAddressPort() if err != nil { - return fmt.Errorf("wrong configuration to connect to process-agent: %s", err.Error()) + log.Errorf("Could not zip process agent checks: wrong configuration to connect to process-agent: %s", err.Error()) + return } checkURL := fmt.Sprintf("http://%s/check/", addressPort) - zipCheck := func(checkName, setting string) error { + getCheck := func(checkName, setting string) { + filename := fmt.Sprintf("%s_check_output.json", checkName) + if !config.Datadog.GetBool(setting) { - return nil + fb.AddFile(filename, []byte(fmt.Sprintf("'%s' is disabled", setting))) + return } - filename := fmt.Sprintf("%s_check_output.json", checkName) - if err := zipHTTPCallContent(tempDir, hostname, filename, checkURL+checkName); err != nil { - _ = log.Error(err) - err = os.WriteFile( - filepath.Join(tempDir, hostname, "process_check_output.json"), + err := fb.AddFileFromFunc(filename, func() ([]byte, error) { return getHTTPCallContent(checkURL + checkName) }) + if err != nil { + fb.AddFile( + "process_check_output.json", []byte(fmt.Sprintf("error: process-agent is not running or is unreachable: %s", err.Error())), - os.ModePerm, ) - if err != nil { - return err - } } - return nil - } - - if err := zipCheck("process", "process_config.process_collection.enabled"); err != nil { - return err - } - - if err := zipCheck("container", "process_config.container_collection.enabled"); err != nil { - return err - } - - if err := zipCheck("process_discovery", "process_config.process_discovery.enabled"); err != nil { - return err } - return nil -} - -func zipDiagnose(tempDir, hostname string) error { - return zipCommandOutput(diagnose.RunAll, tempDir, hostname, "diagnose.log") + getCheck("process", "process_config.process_collection.enabled") + getCheck("container", "process_config.container_collection.enabled") + getCheck("process_discovery", "process_config.process_discovery.enabled") } -func zipDatadogConnectivity(tempDir, hostname string) error { +func getDatadogConnectivity() ([]byte, error) { fct := func(w io.Writer) error { return connectivity.RunDatadogConnectivityDiagnose(w, false) } - return zipCommandOutput(fct, tempDir, hostname, "connectivity.log") -} - -func zipCommandOutput(fct func(w io.Writer) error, tempDir, hostname, filename string) error { - bytes := functionOutputToBytes(fct) - return joinPathAndWriteScrubbedFile(bytes, tempDir, hostname, filename) + return functionOutputToBytes(fct), nil } -func zipReader(r io.Reader, targetDir, filename string) error { - targetPath := filepath.Join(targetDir, filename) - - if err := ensureParentDirsExist(targetPath); err != nil { - return err - } - - zipped, err := os.OpenFile(targetPath, os.O_RDWR|os.O_CREATE, os.ModePerm) - if err != nil { - return err - } - defer zipped.Close() - - // use read/write instead of io.Copy - // see: https://github.com/golang/go/issues/44272 - buf := make([]byte, 256) - for { - n, err := r.Read(buf) - if err != nil && err != io.EOF { - return err - } - if n == 0 { - break - } - - if _, err := zipped.Write(buf[:n]); err != nil { - return err - } - } - return err -} - -func zipFile(sourceDir, targetDir, filename string) error { - original, err := os.Open(filepath.Join(sourceDir, filename)) - if err != nil { - return err - } - defer original.Close() - - return zipReader(original, targetDir, filename) -} - -func zipRegistryJSON(tempDir, hostname string) error { - originalPath := config.Datadog.GetString("logs_config.run_path") - targetPath := filepath.Join(tempDir, hostname) - return zipFile(originalPath, targetPath, "registry.json") -} - -func zipVersionHistory(tempDir, hostname string) error { - originalPath := config.Datadog.GetString("run_path") - targetPath := filepath.Join(tempDir, hostname) - return zipFile(originalPath, targetPath, "version-history.json") -} - -func zipConfigCheck(tempDir, hostname string) error { +func getConfigCheck() ([]byte, error) { fct := func(w io.Writer) error { return GetConfigCheck(w, true) } - bytes := functionOutputToBytes(fct) - return writeConfigCheck(tempDir, hostname, bytes) -} - -func writeConfigCheck(tempDir, hostname string, data []byte) error { - return joinPathAndWriteScrubbedFile(data, tempDir, hostname, "config-check.log") + return functionOutputToBytes(fct), nil } -// Used for testing mock HTTP server -var taggerListURL string - -func zipAgentTaggerList(tempDir, hostname string) error { +func getAgentTaggerList() ([]byte, error) { ipcAddress, err := config.GetIPCAddress() if err != nil { - return err + return nil, err } - if taggerListURL == "" { - taggerListURL = fmt.Sprintf("https://%v:%v/agent/tagger-list", ipcAddress, config.Datadog.GetInt("cmd_port")) - } + taggerListURL := fmt.Sprintf("https://%v:%v/agent/tagger-list", ipcAddress, config.Datadog.GetInt("cmd_port")) - return zipTaggerList(tempDir, hostname, taggerListURL, "tagger-list.json") + return getTaggerList(taggerListURL) } -func zipProcessAgentTaggerList(tempDir, hostname string) error { +func getProcessAgentTaggerList() ([]byte, error) { addressPort, err := config.GetProcessAPIAddressPort() if err != nil { - return fmt.Errorf("wrong configuration to connect to process-agent") + return nil, fmt.Errorf("wrong configuration to connect to process-agent") } taggerListURL := fmt.Sprintf("http://%s/agent/tagger-list", addressPort) - - return zipTaggerList(tempDir, hostname, taggerListURL, "process-agent_tagger-list.json") + return getTaggerList(taggerListURL) } -func zipTaggerList(tempDir, hostname, remoteURL, outputFile string) error { +func getTaggerList(remoteURL string) ([]byte, error) { c := apiutil.GetClient(false) // FIX: get certificates right then make this true r, err := apiutil.DoGet(c, remoteURL, apiutil.LeaveConnectionOpen) if err != nil { - return err + return nil, err } // Pretty print JSON output @@ -787,200 +443,84 @@ func zipTaggerList(tempDir, hostname, remoteURL, outputFile string) error { writer := bufio.NewWriter(&b) err = json.Indent(&b, r, "", "\t") if err != nil { - return joinPathAndWriteScrubbedFile(r, tempDir, hostname, outputFile) + return r, nil } writer.Flush() - return joinPathAndWriteScrubbedFile(b.Bytes(), tempDir, hostname, outputFile) + return b.Bytes(), nil } -// workloadListURL allows mocking the agent HTTP server -var workloadListURL string - -func zipWorkloadList(tempDir, hostname string) error { +func getWorkloadList() ([]byte, error) { ipcAddress, err := config.GetIPCAddress() if err != nil { - return err + return nil, err } - if workloadListURL == "" { - workloadListURL = fmt.Sprintf("https://%v:%v/agent/workload-list/verbose", ipcAddress, config.Datadog.GetInt("cmd_port")) - } + workloadListURL := fmt.Sprintf("https://%v:%v/agent/workload-list/verbose", ipcAddress, config.Datadog.GetInt("cmd_port")) c := apiutil.GetClient(false) // FIX: get certificates right then make this true r, err := apiutil.DoGet(c, workloadListURL, apiutil.LeaveConnectionOpen) if err != nil { - return err + return nil, err } workload := workloadmeta.WorkloadDumpResponse{} err = json.Unmarshal(r, &workload) if err != nil { - return err + return nil, err } fct := func(w io.Writer) error { workload.Write(w) return nil } - return zipCommandOutput(fct, tempDir, hostname, "workload-list.log") + return functionOutputToBytes(fct), nil } -func zipHealth(tempDir, hostname string) error { +func getHealth() ([]byte, error) { s := health.GetReady() sort.Strings(s.Healthy) sort.Strings(s.Unhealthy) yamlValue, err := yaml.Marshal(s) if err != nil { - return err + return nil, err } - return joinPathAndWriteScrubbedFile(yamlValue, tempDir, hostname, "health.yaml") + return yamlValue, nil } -func zipInstallInfo(tempDir, hostname string) error { - targetPath := filepath.Join(tempDir, hostname) - return zipFile(config.FileUsedDir(), targetPath, "install_info") -} - -func zipTelemetry(tempDir, hostname string) error { - return zipHTTPCallContent(tempDir, hostname, "telemetry.log", telemetryURL) -} - -func zipStackTraces(tempDir, hostname string) error { - return zipHTTPCallContent(tempDir, hostname, routineDumpFilename, pprofURL) -} - -// zipHTTPCallContent does a GET HTTP call to the given url and +// getHTTPCallContent does a GET HTTP call to the given url and // writes the content of the HTTP response in the given file, ready // to be shipped in a flare. -func zipHTTPCallContent(tempDir, hostname, filename, url string) error { +func getHTTPCallContent(url string) ([]byte, error) { ctx, cancel := context.WithTimeout(context.Background(), 4*time.Second) defer cancel() client := http.Client{} req, err := http.NewRequest(http.MethodGet, url, nil) if err != nil { - return err + return nil, err } resp, err := client.Do(req.WithContext(ctx)) if err != nil { - return err + return nil, err } defer resp.Body.Close() // read the entire body, so that it can be scrubbed in its entirety data, err := io.ReadAll(resp.Body) if err != nil { - return err - } - - return joinPathAndWriteScrubbedFile(data, tempDir, hostname, filename) -} - -func zipPerformanceProfile(tempDir, hostname string, pdata ProfileData) error { - dir := filepath.Join(tempDir, hostname, "profiles") - if err := os.MkdirAll(dir, os.ModePerm); err != nil { - return err - } - for name, data := range pdata { - fullpath := filepath.Join(dir, name) - if err := os.WriteFile(fullpath, data, os.ModePerm); err != nil { - return err - } - } - return nil -} - -func walkConfigFilePaths(tempDir, hostname string, confSearchPaths SearchPaths, permsInfos permissionsInfos) error { - for prefix, filePath := range confSearchPaths { - - err := filepath.Walk(filePath, func(src string, f os.FileInfo, err error) error { - if f == nil { - return nil - } - if f.IsDir() { - return nil - } - - if filepath.Ext(f.Name()) == ".example" { - return nil - } - - firstSuffix := getFirstSuffix(f.Name()) - ext := filepath.Ext(f.Name()) - - if cnfFileExtRx.Match([]byte(firstSuffix)) || cnfFileExtRx.Match([]byte(ext)) { - baseName := strings.Replace(src, filePath, "", 1) - - data, err := os.ReadFile(src) - if err != nil { - if os.IsNotExist(err) { - log.Warnf("the specified path: %s does not exist", filePath) - } - return err - } - err = joinPathAndWriteScrubbedFile(data, tempDir, hostname, "etc", "confd", prefix, baseName) - if err != nil { - return err - } - - if permsInfos != nil { - permsInfos.add(src) - - if len(permsInfos) != 0 { - absPath, err := filepath.Abs(filePath) - if err != nil { - log.Errorf("Error while getting absolute file path for parent directory: %v", err) - } - addParentPerms(absPath, permsInfos) - } - } - } - - return nil - }) - if err != nil { - return err - } - - } - - return nil -} - -// writeScrubbedFile writes the given data to the given file, after applying -// flareScrubber to it. -// -// WARNING: while this function applies a scrubber, that scrubber cannot scrub -// all secrets. Ensure that the data being written cannot contain user secrets -// or proprietary information. For example, do not include arbitrary -// environment variables. -func writeScrubbedFile(filename string, data []byte) error { - scrubbed, err := flareScrubber.ScrubBytes(data) - if err != nil { - return err + return nil, err } - return os.WriteFile(filename, scrubbed, os.ModePerm) -} -// writeScrubbedFileSafe verifies that the folder exists before calling writeScrubbedFile() -func writeScrubbedFileSafe(filename string, data []byte) error { - err := ensureParentDirsExist(filename) - if err != nil { - return err - } - return writeScrubbedFile(filename, data) + return data, nil } -// joinPathAndWriteScrubbedFile joins all the path components into a path and safely -// writes data to the created path -func joinPathAndWriteScrubbedFile(data []byte, pathComponents ...string) error { - filename := filepath.Join(pathComponents...) - return writeScrubbedFileSafe(filename, data) +func getFirstSuffix(s string) string { + return filepath.Ext(strings.TrimSuffix(s, filepath.Ext(s))) } // functionOutputToBytes runs a given function and returns its output in a byte array @@ -997,65 +537,3 @@ func functionOutputToBytes(fct func(writer io.Writer) error) []byte { return buffer.Bytes() } - -func ensureParentDirsExist(p string) error { - return os.MkdirAll(filepath.Dir(p), os.ModePerm) -} - -func getFirstSuffix(s string) string { - return filepath.Ext(strings.TrimSuffix(s, filepath.Ext(s))) -} - -func getArchivePath() string { - dir := os.TempDir() - t := time.Now().UTC() - timeString := strings.ReplaceAll(t.Format(time.RFC3339), ":", "-") - fileName := "" - lvl, err := log.GetLogLevel() - if err == nil { - fileName = strings.Join([]string{"datadog", "agent", timeString, lvl.String()}, "-") - } else { - fileName = strings.Join([]string{"datadog", "agent", timeString}, "-") - } - fileName = strings.Join([]string{fileName, "zip"}, ".") - filePath := filepath.Join(dir, fileName) - return filePath -} - -func cleanDirectoryName(name string) string { - filteredName := directoryNameFilter.ReplaceAllString(name, "_") - if len(filteredName) > directoryNameMaxSize { - return filteredName[:directoryNameMaxSize] - } - return filteredName -} - -// createConfigFiles takes the content of config files that need to be included in the flare and -// put them in the directory waiting to be archived -func createConfigFiles(filePath, tempDir, hostname string, permsInfos permissionsInfos) error { - // Check if the file exists - _, err := os.Stat(filePath) - if err == nil { - - data, err := os.ReadFile(filePath) - if err != nil { - return err - } - - err = joinPathAndWriteScrubbedFile(data, tempDir, hostname, "etc", filepath.Base(filePath)) - if err != nil { - return err - } - - if permsInfos != nil { - permsInfos.add(filePath) - } - } - return err -} - -// getConfigPath would take the path to datadog.yaml and replace the file name with the given agent file name -func getConfigPath(ddCfgFilePath string, agentFileName string) string { - path := filepath.Dir(ddCfgFilePath) - return filepath.Join(path, agentFileName) -} diff --git a/pkg/flare/archive_dca.go b/pkg/flare/archive_dca.go index 8b9864fd7fbeff..0ab1107cabf7c8 100644 --- a/pkg/flare/archive_dca.go +++ b/pkg/flare/archive_dca.go @@ -8,168 +8,77 @@ package flare import ( "bufio" "bytes" - "context" "encoding/json" "fmt" - "os" + "io/ioutil" + "net/http" "path/filepath" - "github.com/mholt/archiver/v3" - + flarehelpers "github.com/DataDog/datadog-agent/comp/core/flare/helpers" apiv1 "github.com/DataDog/datadog-agent/pkg/clusteragent/api/v1" "github.com/DataDog/datadog-agent/pkg/clusteragent/custommetrics" "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/status" - hostnameUtil "github.com/DataDog/datadog-agent/pkg/util/hostname" "github.com/DataDog/datadog-agent/pkg/util/kubernetes/apiserver" "github.com/DataDog/datadog-agent/pkg/util/log" ) // CreateDCAArchive packages up the files func CreateDCAArchive(local bool, distPath, logFilePath string) (string, error) { - zipFilePath := getArchivePath() - confSearchPaths := SearchPaths{ - "": config.Datadog.GetString("confd_path"), - "dist": filepath.Join(distPath, "conf.d"), - } - return createDCAArchive(zipFilePath, local, confSearchPaths, logFilePath) -} - -func createDCAArchive(zipFilePath string, local bool, confSearchPaths SearchPaths, logFilePath string) (string, error) { - tempDir, err := createTempDir() + fb, err := flarehelpers.NewFlareBuilder() if err != nil { return "", err } - defer os.RemoveAll(tempDir) - // Get hostname, if there's an error in getting the hostname, - // set the hostname to unknown - hostname, err := hostnameUtil.Get(context.TODO()) - if err != nil { - hostname = "unknown" + confSearchPaths := SearchPaths{ + "": config.Datadog.GetString("confd_path"), + "dist": filepath.Join(distPath, "conf.d"), } + createDCAArchive(fb, local, confSearchPaths, logFilePath) + return fb.Save() +} + +func createDCAArchive(fb flarehelpers.FlareBuilder, local bool, confSearchPaths SearchPaths, logFilePath string) { // If the request against the API does not go through we don't collect the status log. if local { - err = writeLocal(tempDir, hostname) - if err != nil { - return "", err - } + fb.AddFile("local", []byte("")) } else { // The Status will be unavailable unless the agent is running. // Only zip it up if the agent is running - err = zipDCAStatusFile(tempDir, hostname) + err := fb.AddFileFromFunc("cluster-agent-status.log", status.GetAndFormatDCAStatus) if err != nil { - log.Infof("Error getting the status of the DCA, %q", err) - return "", err + log.Errorf("Error getting the status of the DCA, %q", err) + return } } - permsInfos := make(permissionsInfos) - - err = zipLogFiles(tempDir, hostname, logFilePath, permsInfos) - if err != nil { - return "", err - } - - err = zipConfigFiles(tempDir, hostname, confSearchPaths, permsInfos) - if err != nil { - return "", err - } - - err = zipClusterAgentConfigCheck(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip config check: %s", err) - } - - err = zipExpVar(tempDir, hostname) - if err != nil { - return "", err - } - - err = zipEnvvars(tempDir, hostname) - if err != nil { - return "", err - } - - err = zipMetadataMap(tempDir, hostname) - if err != nil { - return "", err - } - - err = zipClusterAgentClusterChecks(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip clustercheck status: %s", err) - } - - err = zipClusterAgentDiagnose(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip diagnose: %s", err) - } + getLogFiles(fb, logFilePath) + getConfigFiles(fb, confSearchPaths) + getClusterAgentConfigCheck(fb) //nolint:errcheck + getExpVar(fb) //nolint:errcheck + getMetadataMap(fb) //nolint:errcheck + getClusterAgentClusterChecks(fb) //nolint:errcheck + getClusterAgentDiagnose(fb) //nolint:errcheck + fb.AddFileFromFunc("envvars.log", getEnvVars) + fb.AddFileFromFunc("telemetry.log", QueryDCAMetrics) if config.Datadog.GetBool("external_metrics_provider.enabled") { - err = zipHPAStatus(tempDir, hostname) - if err != nil { - return "", err - } + getHPAStatus(fb) //nolint:errcheck } - - err = zipClusterAgentTelemetry(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip telemetry payload: %v", err) - } - - err = permsInfos.commit(tempDir, hostname, os.ModePerm) - if err != nil { - log.Infof("Error while creating permissions.log infos file: %s", err) - } - - // File format is determined based on `zipFilePath` extension - err = archiver.Archive([]string{filepath.Join(tempDir, hostname)}, zipFilePath) - if err != nil { - return "", err - } - - return zipFilePath, nil } -func writeLocal(tempDir, hostname string) error { - f := filepath.Join(tempDir, hostname, "local") - err := ensureParentDirsExist(f) +// QueryDCAMetrics gets the metrics payload exposed by the cluster agent +func QueryDCAMetrics() ([]byte, error) { + r, err := http.Get(fmt.Sprintf("http://localhost:%d/metrics", config.Datadog.GetInt("metrics_port"))) if err != nil { - return err + return nil, err } - return os.WriteFile(f, []byte{}, os.ModePerm) + defer r.Body.Close() + return ioutil.ReadAll(r.Body) } -func zipDCAStatusFile(tempDir, hostname string) error { - // Grab the status - log.Infof("Zipping the status at %s for %s", tempDir, hostname) - s, err := status.GetAndFormatDCAStatus() - if err != nil { - log.Infof("Error zipping the status: %q", err) - return err - } - - // Clean it up - cleaned, err := flareScrubber.ScrubBytes(s) - if err != nil { - log.Infof("Error redacting the log files: %q", err) - return err - } - - f := filepath.Join(tempDir, hostname, "cluster-agent-status.log") - log.Infof("Flare status made at %s", tempDir) - err = ensureParentDirsExist(f) - if err != nil { - return err - } - - err = os.WriteFile(f, cleaned, os.ModePerm) - return err -} - -func zipMetadataMap(tempDir, hostname string) error { +func getMetadataMap(fb flarehelpers.FlareBuilder) error { metaList := apiv1.NewMetadataResponse() cl, err := apiserver.GetAPIClient() if err != nil { @@ -184,44 +93,28 @@ func zipMetadataMap(tempDir, hostname string) error { metaBytes, err := json.Marshal(metaList) if err != nil { - log.Infof("Error while marshalling the cluster level metadata: %q", err) - return err + return log.Errorf("Error while marshalling the cluster level metadata: %q", err) } str, err := status.FormatMetadataMapCLI(metaBytes) if err != nil { - log.Infof("Error while rendering the cluster level metadata: %q", err) - return err + return log.Errorf("Error while rendering the cluster level metadata: %q", err) } - sByte := []byte(str) - f := filepath.Join(tempDir, hostname, "cluster-agent-metadatamapper.log") - log.Infof("Flare metadata mapper made at %s", tempDir) - err = ensureParentDirsExist(f) - if err != nil { - return err - } - - return os.WriteFile(f, sByte, os.ModePerm) + return fb.AddFile("cluster-agent-metadatamapper.log", []byte(str)) } -func zipClusterAgentClusterChecks(tempDir, hostname string) error { +func getClusterAgentClusterChecks(fb flarehelpers.FlareBuilder) error { var b bytes.Buffer writer := bufio.NewWriter(&b) GetClusterChecks(writer, "") //nolint:errcheck writer.Flush() - f := filepath.Join(tempDir, hostname, "clusterchecks.log") - err := ensureParentDirsExist(f) - if err != nil { - return err - } - - return writeScrubbedFile(f, b.Bytes()) + return fb.AddFile("clusterchecks.log", b.Bytes()) } -func zipHPAStatus(tempDir, hostname string) error { +func getHPAStatus(fb flarehelpers.FlareBuilder) error { stats := make(map[string]interface{}) apiCl, err := apiserver.GetAPIClient() if err != nil { @@ -231,68 +124,33 @@ func zipHPAStatus(tempDir, hostname string) error { } statsBytes, err := json.Marshal(stats) if err != nil { - log.Infof("Error while marshalling the cluster level metadata: %q", err) - return err + return log.Errorf("Error while marshalling the cluster level metadata: %q", err) } str, err := status.FormatHPAStatus(statsBytes) if err != nil { - return err + return log.Errorf("Could not collect custommetricsprovider.log: %s", err) } - sByte := []byte(str) - - f := filepath.Join(tempDir, hostname, "custommetricsprovider.log") - log.Infof("Flare hpa status made at %s", tempDir) - err = ensureParentDirsExist(f) - if err != nil { - return err - } - - err = os.WriteFile(f, sByte, os.ModePerm) - if err != nil { - return err - } - return err + return fb.AddFile("custommetricsprovider.log", []byte(str)) } -func zipClusterAgentConfigCheck(tempDir, hostname string) error { +func getClusterAgentConfigCheck(fb flarehelpers.FlareBuilder) error { var b bytes.Buffer writer := bufio.NewWriter(&b) GetClusterAgentConfigCheck(writer, true) //nolint:errcheck writer.Flush() - return writeConfigCheck(tempDir, hostname, b.Bytes()) + return fb.AddFile("config-check.log", b.Bytes()) } -func zipClusterAgentDiagnose(tempDir, hostname string) error { +func getClusterAgentDiagnose(fb flarehelpers.FlareBuilder) error { var b bytes.Buffer writer := bufio.NewWriter(&b) GetClusterAgentDiagnose(writer) //nolint:errcheck writer.Flush() - f := filepath.Join(tempDir, hostname, "diagnose.log") - err := ensureParentDirsExist(f) - if err != nil { - return err - } - - return writeScrubbedFile(f, b.Bytes()) -} - -func zipClusterAgentTelemetry(tempDir, hostname string) error { - payload, err := QueryDCAMetrics() - if err != nil { - return err - } - - f := filepath.Join(tempDir, hostname, "telemetry.log") - err = ensureParentDirsExist(f) - if err != nil { - return err - } - - return writeScrubbedFile(f, payload) + return fb.AddFile("diagnose.log", b.Bytes()) } diff --git a/pkg/flare/archive_docker.go b/pkg/flare/archive_docker.go index bf0f3f96175367..386157def852e6 100644 --- a/pkg/flare/archive_docker.go +++ b/pkg/flare/archive_docker.go @@ -13,11 +13,11 @@ import ( "context" "encoding/json" "fmt" - "path/filepath" "regexp" "strings" "text/tabwriter" + "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/util/containers/metrics" "github.com/DataDog/datadog-agent/pkg/util/docker" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -27,20 +27,24 @@ import ( const dockerCommandMaxLength = 29 -func zipDockerSelfInspect(tempDir, hostname string) error { +func getDockerSelfInspect() ([]byte, error) { + if !config.IsContainerized() { + return nil, fmt.Errorf("The Agent is not containerized") + } + du, err := docker.GetDockerUtil() if err != nil { - return err + return nil, err } selfContainerID, err := metrics.GetProvider().GetMetaCollector().GetSelfContainerID() if err != nil { - return fmt.Errorf("Unable to determine self container id, err: %w", err) + return nil, fmt.Errorf("Unable to determine self container id, err: %w", err) } co, err := du.Inspect(context.TODO(), selfContainerID, false) if err != nil { - return err + return nil, err } // Remove the envvars section, as we already @@ -56,7 +60,7 @@ func zipDockerSelfInspect(tempDir, hostname string) error { // Serialise as JSON jsonStats, err := json.Marshal(co) if err != nil { - return err + return nil, err } var out bytes.Buffer json.Indent(&out, jsonStats, "", "\t") //nolint:errcheck @@ -71,21 +75,20 @@ func zipDockerSelfInspect(tempDir, hostname string) error { } serialized = imgRx.ReplaceAllFunc(serialized, replFunc) - f := filepath.Join(tempDir, hostname, "docker_inspect.log") - return writeScrubbedFile(f, serialized) + return serialized, nil } -func zipDockerPs(tempDir, hostname string) error { +func getDockerPs() ([]byte, error) { du, err := docker.GetDockerUtil() if err != nil { // if we can't reach docker, let's do nothing log.Debugf("Couldn't reach docker for getting `docker ps`: %s", err) - return nil + return nil, nil } options := types.ContainerListOptions{All: true, Limit: 500} containerList, err := du.RawContainerList(context.TODO(), options) if err != nil { - return err + return nil, err } // Prepare contents @@ -99,12 +102,11 @@ func zipDockerPs(tempDir, hostname string) error { } err = w.Flush() if err != nil { - return err + return nil, err } // Write to file - f := filepath.Join(tempDir, hostname, "docker_ps.log") - return writeScrubbedFile(f, output.Bytes()) + return output.Bytes(), nil } // trimCommand removes arguments from command string diff --git a/pkg/flare/archive_linux.go b/pkg/flare/archive_linux.go index 68750681234d7b..2840f289640500 100644 --- a/pkg/flare/archive_linux.go +++ b/pkg/flare/archive_linux.go @@ -15,22 +15,28 @@ import ( "path/filepath" "regexp" "syscall" + + flarehelpers "github.com/DataDog/datadog-agent/comp/core/flare/helpers" + "github.com/DataDog/datadog-agent/pkg/config" ) -func zipLinuxFile(source, tempDir, hostname, filename string) error { - return zipFile(source, filepath.Join(tempDir, hostname), filename) +func addSystemProbePlatformSpecificEntries(fb flarehelpers.FlareBuilder) { + sysprobeSocketLocation := config.Datadog.GetString("system_probe_config.sysprobe_socket") + if sysprobeSocketLocation != "" { + fb.RegisterDirPerm(filepath.Dir(sysprobeSocketLocation)) + } } -func zipLinuxKernelSymbols(tempDir, hostname string) error { - return zipLinuxFile("/proc", tempDir, hostname, "kallsyms") +func getLinuxKernelSymbols(fb flarehelpers.FlareBuilder) error { + return fb.CopyFile("/proc/kallsyms") } -func zipLinuxKprobeEvents(tempDir, hostname string) error { - return zipLinuxFile("/sys/kernel/debug/tracing", tempDir, hostname, "kprobe_events") +func getLinuxKprobeEvents(fb flarehelpers.FlareBuilder) error { + return fb.CopyFile("/sys/kernel/debug/tracing/kprobe_events") } -func zipLinuxPid1MountInfo(tempDir, hostname string) error { - return zipLinuxFile("/proc/1", tempDir, hostname, "mountinfo") +func getLinuxPid1MountInfo(fb flarehelpers.FlareBuilder) error { + return fb.CopyFile("/proc/1/mountinfo") } var klogRegexp = regexp.MustCompile(`<(\d+)>(.*)`) @@ -77,24 +83,24 @@ func parseDmesg(buffer []byte) (string, error) { return result, nil } -func zipLinuxDmesg(tempDir, hostname string) error { +func getLinuxDmesg(fb flarehelpers.FlareBuilder) error { dmesg, err := readAllDmesg() if err != nil { return err } - buffer, err := parseDmesg(dmesg) + content, err := parseDmesg(dmesg) if err != nil { return err } - return zipReader(bytes.NewBufferString(buffer), filepath.Join(tempDir, hostname), "dmesg") + return fb.AddFile("dmesg", []byte(content)) } -func zipLinuxTracingAvailableEvents(tempDir, hostname string) error { - return zipLinuxFile("/sys/kernel/debug/tracing", tempDir, hostname, "available_events") +func getLinuxTracingAvailableEvents(fb flarehelpers.FlareBuilder) error { + return fb.CopyFile("/sys/kernel/debug/tracing/available_events") } -func zipLinuxTracingAvailableFilterFunctions(tempDir, hostname string) error { - return zipLinuxFile("/sys/kernel/debug/tracing", tempDir, hostname, "available_filter_functions") +func getLinuxTracingAvailableFilterFunctions(fb flarehelpers.FlareBuilder) error { + return fb.CopyFile("/sys/kernel/debug/tracing/available_filter_functions") } diff --git a/pkg/flare/archive_linux_test.go b/pkg/flare/archive_linux_test.go deleted file mode 100644 index 7861c2396bd4ab..00000000000000 --- a/pkg/flare/archive_linux_test.go +++ /dev/null @@ -1,40 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build linux -// +build linux - -package flare - -import ( - "os" - "path/filepath" - "testing" - - "github.com/stretchr/testify/require" -) - -func TestZipLinuxFileWrapper(t *testing.T) { - srcDir := t.TempDir() - dstDir := t.TempDir() - - file, err := os.Create(filepath.Join(srcDir, "testfile.txt")) - require.NoError(t, err) - - expectedContent := "expected content" - _, err = file.WriteString(expectedContent) - require.NoError(t, err) - - err = file.Close() - require.NoError(t, err) - - err = zipLinuxFile(srcDir, dstDir, "hostname", "testfile.txt") - require.NoError(t, err) - - targetPath := filepath.Join(dstDir, "hostname", "testfile.txt") - actualContent, err := os.ReadFile(targetPath) - require.NoError(t, err) - require.Equal(t, expectedContent, string(actualContent)) -} diff --git a/pkg/flare/archive_nix.go b/pkg/flare/archive_nix.go index 15d02bba57246a..0027c8b7b187a9 100644 --- a/pkg/flare/archive_nix.go +++ b/pkg/flare/archive_nix.go @@ -9,133 +9,7 @@ package flare import ( - "fmt" - "log" - "os" - "os/user" - "path/filepath" - "strconv" - "strings" - "syscall" + flarehelpers "github.com/DataDog/datadog-agent/comp/core/flare/helpers" ) -func zipCounterStrings(tempDir, hostname string) error { - return nil -} - -func zipTypeperfData(tempDir, hostname string) error { - return nil -} - -func zipLodctrOutput(tempDir, hostname string) error { - return nil -} -func zipWindowsEventLogs(tempDir, hostname string) error { - return nil -} -func zipServiceStatus(tempDir, hostname string) error { - return nil -} -func zipDatadogRegistry(tempDir, hostname string) error { - return nil -} - -type filePermsInfo struct { - mode os.FileMode - owner string - group string -} - -// Add puts the given filepath in the map -// of files to process later during the commit phase. -func (p permissionsInfos) add(filePath string) { - p[filePath] = filePermsInfo{} -} - -// Commit resolves the infos of every stacked files in the map -// and then writes the permissions.log file on the filesystem. -func (p permissionsInfos) commit(tempDir, hostname string, mode os.FileMode) error { - if err := p.statFiles(); err != nil { - return err - } - return p.write(tempDir, hostname, mode) -} - -func (p permissionsInfos) statFiles() error { - for filePath := range p { - fi, err := os.Stat(filePath) - if err != nil { - log.Println(err) - return fmt.Errorf("while getting info of %s: %s", filePath, err) - } - - var sys syscall.Stat_t - if err := syscall.Stat(filePath, &sys); err != nil { - return fmt.Errorf("can't retrieve file %s uid/gid infos: %s", filePath, err) - } - - var uname string - var uid = strconv.Itoa(int(sys.Uid)) - u, err := user.LookupId(uid) - if err != nil { - // User not found, eg: it was deleted from the system - uname = uid - } else if len(u.Name) > 0 { - uname = u.Name - } else { - uname = u.Username - } - - var gname string - var gid = strconv.Itoa(int(sys.Gid)) - g, err := user.LookupGroupId(gid) - if err != nil { - // Group not found, eg: it was deleted from the system - gname = gid - } else { - gname = g.Name - } - - p[filePath] = filePermsInfo{ - mode: fi.Mode(), - owner: uname, - group: gname, - } - } - return nil -} - -func (p permissionsInfos) write(tempDir, hostname string, mode os.FileMode) error { - // init the file - t := filepath.Join(tempDir, hostname, "permissions.log") - - if err := ensureParentDirsExist(t); err != nil { - return err - } - - f, err := os.OpenFile(t, os.O_RDWR|os.O_CREATE|os.O_APPEND, mode) - if err != nil { - return fmt.Errorf("while opening: %s", err) - } - - defer f.Close() - - // write headers - s := fmt.Sprintf("%-50s | %-5s | %-10s | %-10s\n", "File path", "mode", "owner", "group") - if _, err = f.Write([]byte(s)); err != nil { - return err - } - if _, err = f.Write([]byte(strings.Repeat("-", len(s)) + "\n")); err != nil { - return err - } - - // write each file permissions infos - for filePath, perms := range p { - _, err = f.WriteString(fmt.Sprintf("%-50s | %-5s | %-10s | %-10s\n", filePath, perms.mode.String(), perms.owner, perms.group)) - if err != nil { - return err - } - } - - return nil -} +func getWindowsData(fb flarehelpers.FlareBuilder) {} diff --git a/pkg/flare/archive_nix_test.go b/pkg/flare/archive_nix_test.go deleted file mode 100644 index 950ecba41fa4d2..00000000000000 --- a/pkg/flare/archive_nix_test.go +++ /dev/null @@ -1,130 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build !windows -// +build !windows - -package flare - -import ( - "archive/zip" - "os" - "path/filepath" - "strings" - "testing" - - "github.com/stretchr/testify/assert" - - "github.com/DataDog/datadog-agent/cmd/agent/common" - "github.com/DataDog/datadog-agent/pkg/config" -) - -// Ensure the permissions.log is being created -func TestPermsFile(t *testing.T) { - assert := assert.New(t) - - common.SetupConfig("./test") - mockConfig := config.Mock(t) - mockConfig.Set("confd_path", "./test/confd") - mockConfig.Set("log_file", "./test/logs/agent.log") - zipFilePath := getArchivePath() - filePath, err := createArchive(SearchPaths{}, true, zipFilePath, []string{""}, nil, nil) - defer os.Remove(zipFilePath) - - assert.Nil(err) - assert.Equal(zipFilePath, filePath) - - // asserts that it as indeed created a permissions.log file - z, err := zip.OpenReader(zipFilePath) - assert.NoError(err, "opening the zip shouldn't pop an error") - - ok := false - for _, f := range z.File { - if strings.HasSuffix(f.Name, "permissions.log") { - ok = true - } - } - assert.True(ok, "a permissions.log should have been appended to the zip") -} - -func TestAddPermsInfo(t *testing.T) { - assert := assert.New(t) - - permsInfos := make(permissionsInfos) - - // create two files for which we'll add infos into the permissions.log - f1, err := os.CreateTemp("", "ddtests*") - assert.NoError(err, "creating a temporary file should not fail") - assert.NotNil(f1, "temporary file should not be nil") - f2, err := os.CreateTemp("", "ddtests*") - assert.NoError(err, "creating a temporary file should not fail") - assert.NotNil(f2, "temporary file should not be nil") - - permsInfos.add(f1.Name()) - permsInfos.add(f2.Name()) - - permsFilePath := filepath.Join(os.TempDir(), "permissions.log") - - err = permsInfos.commit(os.TempDir(), "", os.ModePerm) - assert.NoError(err, "stating files + writing permissions.log should not fail") - - // should have created a permissions.log in the tmp dir - // + added headers and info of the previously created files - data, err := os.ReadFile(permsFilePath) - assert.NoError(err, "should be able to read the temporary permissions file") - assert.Equal(4, strings.Count(string(data), "\n"), "the permissions file should contain 2 lines of headers, 2 lines of entries") - - os.Remove(filepath.Join(os.TempDir(), "permissions.log")) - os.Remove(f1.Name()) - os.Remove(f2.Name()) -} - -func TestAddParentPerms(t *testing.T) { - assert := assert.New(t) - - permsInfos := make(permissionsInfos) - - // Basic Case - path := "/a/b/c/d" - addParentPerms(path, permsInfos) - expectedParentPerms := map[string]filePermsInfo{ - "/": {0, "", ""}, "/a": {0, "", ""}, "/a/b": {0, "", ""}, "/a/b/c": {0, "", ""}, - } - assert.EqualValues(expectedParentPerms, permsInfos) - - // Empty Case - permsInfos = make(permissionsInfos) - path = "" - addParentPerms(path, permsInfos) - expectedParentPerms = map[string]filePermsInfo{} - assert.EqualValues(expectedParentPerms, permsInfos) - - // Only root - permsInfos = make(permissionsInfos) - path = "/" - addParentPerms(path, permsInfos) - expectedParentPerms = map[string]filePermsInfo{ - "/": {0, "", ""}, - } - assert.EqualValues(expectedParentPerms, permsInfos) - - // Space in path - permsInfos = make(permissionsInfos) - path = "/a b/c" - addParentPerms(path, permsInfos) - expectedParentPerms = map[string]filePermsInfo{ - "/": {0, "", ""}, "/a b": {0, "", ""}, - } - assert.EqualValues(expectedParentPerms, permsInfos) - - // Dot in path - permsInfos = make(permissionsInfos) - path = "/a.b/c" - addParentPerms(path, permsInfos) - expectedParentPerms = map[string]filePermsInfo{ - "/": {0, "", ""}, "/a.b": {0, "", ""}, - } - assert.EqualValues(expectedParentPerms, permsInfos) -} diff --git a/pkg/flare/archive_nodocker.go b/pkg/flare/archive_nodocker.go index d8dcdb22665e2d..94adbca652352b 100644 --- a/pkg/flare/archive_nodocker.go +++ b/pkg/flare/archive_nodocker.go @@ -8,10 +8,10 @@ package flare -func zipDockerSelfInspect(tempDir, hostname string) error { - return nil +func getDockerSelfInspect() ([]byte, error) { + return nil, nil } -func zipDockerPs(tempDir, hostname string) error { - return nil +func getDockerPs() ([]byte, error) { + return nil, nil } diff --git a/pkg/flare/archive_nolinux.go b/pkg/flare/archive_nolinux.go index ccc64daa6fc48a..520f72e0b4a2aa 100644 --- a/pkg/flare/archive_nolinux.go +++ b/pkg/flare/archive_nolinux.go @@ -8,26 +8,32 @@ package flare -func zipLinuxKernelSymbols(tempDir, hostname string) error { +import ( + flarehelpers "github.com/DataDog/datadog-agent/comp/core/flare/helpers" +) + +func addSystemProbePlatformSpecificEntries(fb flarehelpers.FlareBuilder) {} + +func getLinuxKernelSymbols(fb flarehelpers.FlareBuilder) error { return nil } -func zipLinuxKprobeEvents(tempDir, hostname string) error { +func getLinuxKprobeEvents(fb flarehelpers.FlareBuilder) error { return nil } -func zipLinuxDmesg(tempDir, hostname string) error { +func getLinuxDmesg(fb flarehelpers.FlareBuilder) error { return nil } -func zipLinuxPid1MountInfo(tempDir, hostname string) error { +func getLinuxPid1MountInfo(fb flarehelpers.FlareBuilder) error { return nil } -func zipLinuxTracingAvailableEvents(tempDir, hostname string) error { +func getLinuxTracingAvailableEvents(fb flarehelpers.FlareBuilder) error { return nil } -func zipLinuxTracingAvailableFilterFunctions(tempDir, hostname string) error { +func getLinuxTracingAvailableFilterFunctions(fb flarehelpers.FlareBuilder) error { return nil } diff --git a/pkg/flare/archive_security.go b/pkg/flare/archive_security.go index 0a5145898874bb..65fc835f4d36de 100644 --- a/pkg/flare/archive_security.go +++ b/pkg/flare/archive_security.go @@ -6,205 +6,76 @@ package flare import ( - "context" "os" - "path/filepath" - - "github.com/mholt/archiver/v3" + flarehelpers "github.com/DataDog/datadog-agent/comp/core/flare/helpers" "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/status" - "github.com/DataDog/datadog-agent/pkg/util" - hostnameUtil "github.com/DataDog/datadog-agent/pkg/util/hostname" "github.com/DataDog/datadog-agent/pkg/util/log" ) // CreateSecurityAgentArchive packages up the files func CreateSecurityAgentArchive(local bool, logFilePath string, runtimeStatus, complianceStatus map[string]interface{}) (string, error) { - zipFilePath := getArchivePath() - - tempDir, err := createTempDir() + fb, err := flarehelpers.NewFlareBuilder() if err != nil { return "", err } - defer os.RemoveAll(tempDir) + createSecurityAgentArchive(fb, local, logFilePath, runtimeStatus, complianceStatus) - // Get hostname, if there's an error in getting the hostname, - // set the hostname to unknown - hostname, err := hostnameUtil.Get(context.TODO()) - if err != nil { - hostname = "unknown" - } + return fb.Save() +} +// createSecurityAgentArchive packages up the files +func createSecurityAgentArchive(fb flarehelpers.FlareBuilder, local bool, logFilePath string, runtimeStatus, complianceStatus map[string]interface{}) { // If the request against the API does not go through we don't collect the status log. if local { - err = writeLocal(tempDir, hostname) - if err != nil { - return "", err - } + fb.AddFile("local", []byte("")) } else { // The Status will be unavailable unless the agent is running. // Only zip it up if the agent is running - err = zipSecurityAgentStatusFile(tempDir, hostname, runtimeStatus, complianceStatus) + err := fb.AddFileFromFunc("security-agent-status.log", func() ([]byte, error) { + return status.GetAndFormatSecurityAgentStatus(runtimeStatus, complianceStatus) + }) if err != nil { log.Infof("Error getting the status of the Security Agent, %q", err) - return "", err + return } } - permsInfos := make(permissionsInfos) - - err = zipLogFiles(tempDir, hostname, logFilePath, permsInfos) - if err != nil { - return "", err - } - - err = zipConfigFiles(tempDir, hostname, SearchPaths{}, permsInfos) - if err != nil { - return "", err - } - - err = zipComplianceFiles(tempDir, hostname, permsInfos) - if err != nil { - return "", err - } - - err = zipRuntimeFiles(tempDir, hostname, permsInfos) - if err != nil { - return "", err - } - - err = zipExpVar(tempDir, hostname) - if err != nil { - return "", err - } - - err = zipEnvvars(tempDir, hostname) - if err != nil { - return "", err - } - - err = zipLinuxKernelSymbols(tempDir, hostname) - if err != nil { - return "", err - } - - err = zipLinuxPid1MountInfo(tempDir, hostname) - if err != nil { - return "", err - } - - err = zipLinuxDmesg(tempDir, hostname) - if err != nil { - log.Infof("Error while retrieving dmesg: %s", err) - } - - err = zipLinuxKprobeEvents(tempDir, hostname) - if err != nil { - log.Infof("Error while getting kprobe_events: %s", err) - } - - err = zipLinuxTracingAvailableEvents(tempDir, hostname) - if err != nil { - log.Infof("Error while getting kprobe_events: %s", err) - } - - err = zipLinuxTracingAvailableFilterFunctions(tempDir, hostname) - if err != nil { - log.Infof("Error while getting kprobe_events: %s", err) - } - - err = permsInfos.commit(tempDir, hostname, os.ModePerm) - if err != nil { - log.Infof("Error while creating permissions.log infos file: %s", err) - } - - // File format is determined based on `zipFilePath` extension - err = archiver.Archive([]string{filepath.Join(tempDir, hostname)}, zipFilePath) - if err != nil { - return "", err - } - - return zipFilePath, nil -} - -func zipSecurityAgentStatusFile(tempDir, hostname string, runtimeStatus, complianceStatus map[string]interface{}) error { - // Grab the status - log.Infof("Zipping the status at %s for %s", tempDir, hostname) - s, err := status.GetAndFormatSecurityAgentStatus(runtimeStatus, complianceStatus) - if err != nil { - log.Infof("Error zipping the status: %q", err) - return err - } - - // Clean it up - cleaned, err := flareScrubber.ScrubBytes(s) - if err != nil { - log.Infof("Error redacting the log files: %q", err) - return err - } - - f := filepath.Join(tempDir, hostname, "security-agent-status.log") - log.Infof("Flare status made at %s", tempDir) - err = ensureParentDirsExist(f) - if err != nil { - return err - } - - err = os.WriteFile(f, cleaned, os.ModePerm) - return err + getLogFiles(fb, logFilePath) + getConfigFiles(fb, SearchPaths{}) + getComplianceFiles(fb) //nolint:errcheck + getRuntimeFiles(fb) //nolint:errcheck + getExpVar(fb) //nolint:errcheck + fb.AddFileFromFunc("envvars.log", getEnvVars) + getLinuxKernelSymbols(fb) //nolint:errcheck + getLinuxPid1MountInfo(fb) //nolint:errcheck + getLinuxDmesg(fb) //nolint:errcheck + getLinuxKprobeEvents(fb) //nolint:errcheck + getLinuxTracingAvailableEvents(fb) //nolint:errcheck + getLinuxTracingAvailableFilterFunctions(fb) //nolint:errcheck } -func zipComplianceFiles(tempDir, hostname string, permsInfos permissionsInfos) error { +func getComplianceFiles(fb flarehelpers.FlareBuilder) error { compDir := config.Datadog.GetString("compliance_config.dir") - if permsInfos != nil { - addParentPerms(compDir, permsInfos) - } - - err := filepath.Walk(compDir, func(src string, f os.FileInfo, err error) error { - if f == nil { - return nil - } - if f.IsDir() || f.Mode()&os.ModeSymlink != 0 { - return nil - } - - dst := filepath.Join(tempDir, hostname, "compliance.d", f.Name()) - - if permsInfos != nil { - permsInfos.add(src) + return fb.CopyDirTo(compDir, "compliance.d", func(path string) bool { + f, err := os.Lstat(path) + if err != nil { + return false } - - return util.CopyFileAll(src, dst) + return f.Mode()&os.ModeSymlink == 0 }) - - return err } -func zipRuntimeFiles(tempDir, hostname string, permsInfos permissionsInfos) error { +func getRuntimeFiles(fb flarehelpers.FlareBuilder) error { runtimeDir := config.Datadog.GetString("runtime_security_config.policies.dir") - if permsInfos != nil { - addParentPerms(runtimeDir, permsInfos) - } - - err := filepath.Walk(runtimeDir, func(src string, f os.FileInfo, err error) error { - if f == nil { - return nil - } - if f.IsDir() || f.Mode()&os.ModeSymlink != 0 { - return nil - } - - dst := filepath.Join(tempDir, hostname, "runtime-security.d", f.Name()) - - if permsInfos != nil { - permsInfos.add(src) + return fb.CopyDirTo(runtimeDir, "runtime-security.d", func(path string) bool { + f, err := os.Lstat(path) + if err != nil { + return false } - - return util.CopyFileAll(src, dst) + return f.Mode()&os.ModeSymlink == 0 }) - - return err } diff --git a/pkg/flare/archive_security_test.go b/pkg/flare/archive_security_test.go index f38ef430b55327..8cdb46c90f936f 100644 --- a/pkg/flare/archive_security_test.go +++ b/pkg/flare/archive_security_test.go @@ -9,20 +9,14 @@ package flare import ( - "archive/zip" - "os" - "path/filepath" "testing" - "github.com/stretchr/testify/assert" - "github.com/DataDog/datadog-agent/cmd/agent/common" + flarehelpers "github.com/DataDog/datadog-agent/comp/core/flare/helpers" "github.com/DataDog/datadog-agent/pkg/config" ) func TestCreateSecurityAgentArchive(t *testing.T) { - assert := assert.New(t) - common.SetupConfig("./test") mockConfig := config.Mock(t) mockConfig.Set("compliance_config.dir", "./test/compliance.d") @@ -54,23 +48,11 @@ func TestCreateSecurityAgentArchive(t *testing.T) { for _, test := range tests { t.Run(test.name, func(t *testing.T) { - zipFilePath, err := CreateSecurityAgentArchive(test.local, logFilePath, nil, nil) - defer os.Remove(zipFilePath) - - assert.NoError(err) - - // asserts that it as indeed created a permissions.log file - z, err := zip.OpenReader(zipFilePath) - assert.NoError(err, "opening the zip shouldn't pop an error") - - var fileNames []string - for _, f := range z.File { - fileNames = append(fileNames, f.Name) - } + mock := flarehelpers.NewFlareBuilderMock(t) + createSecurityAgentArchive(mock.Fb, test.local, logFilePath, nil, nil) - dir := fileNames[0] for _, f := range test.expectedFiles { - assert.Contains(fileNames, filepath.Join(dir, f)) + mock.AssertFileExists(f) } }) } diff --git a/pkg/flare/archive_test.go b/pkg/flare/archive_test.go index 2c927a0f1ab671..5f4e8b3c5b085a 100644 --- a/pkg/flare/archive_test.go +++ b/pkg/flare/archive_test.go @@ -6,17 +6,14 @@ package flare import ( - "archive/zip" "encoding/json" "fmt" - "io" - "log" + "net" "net/http" "net/http/httptest" + "net/url" "os" - "path" "path/filepath" - "strings" "testing" "github.com/stretchr/testify/assert" @@ -25,333 +22,95 @@ import ( procmodel "github.com/DataDog/agent-payload/v5/process" - "github.com/DataDog/datadog-agent/cmd/agent/api/response" "github.com/DataDog/datadog-agent/cmd/agent/common" - "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" + flarehelpers "github.com/DataDog/datadog-agent/comp/core/flare/helpers" "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/config/settings" tagger_api "github.com/DataDog/datadog-agent/pkg/tagger/api" "github.com/DataDog/datadog-agent/pkg/workloadmeta" ) -func createTestDirStructure( - t *testing.T, - filename string, -) (string, string, error) { - srcDir := t.TempDir() - dstDir := t.TempDir() - - // create non-empty file in the source directory - file, err := os.Create(filepath.Join(srcDir, filename)) - if err != nil { - return "", "", err - } - - _, err = file.WriteString("mockfilecontent") - if err != nil { - return "", "", err - } - - err = file.Close() - if err != nil { - return "", "", err - } - - return srcDir, dstDir, nil -} - -func TestArchiveName(t *testing.T) { - // test with No log level set - zipFilePath := getArchivePath() - assert.Contains(t, zipFilePath, "Z.zip") - assert.NotContains(t, zipFilePath, "info") - - // init and configure logger at runtime - config.SetupLogger("TEST", "debug", "", "", true, true, true) - ll := settings.LogLevelRuntimeSetting{} - - // set 'trace' level logging - err := ll.Set("trace") - assert.Nil(t, err) - - // Verify the runtime setting is set to 'trace' - v, err := ll.Get() - assert.Equal(t, "trace", v) - assert.Nil(t, err) - - // verify filePath string ends with the correct log_level - zipFilePath = getArchivePath() - assert.Contains(t, zipFilePath, "-trace.zip") - assert.NotContains(t, zipFilePath, "Z.zip") -} - -func TestCreateArchive(t *testing.T) { - common.SetupConfig("./test") - mockConfig := config.Mock(t) - mockConfig.Set("confd_path", "./test/confd") - mockConfig.Set("log_file", "./test/logs/agent.log") - zipFilePath := getArchivePath() - filePath, err := createArchive(SearchPaths{}, true, zipFilePath, []string{""}, nil, nil) - - require.Nil(t, err) - require.Equal(t, zipFilePath, filePath) - - if _, err := os.Stat(zipFilePath); os.IsNotExist(err) { - assert.Fail(t, "The Zip File was not created") - } else { - os.Remove(zipFilePath) - } -} - -func TestCreateArchiveAndGoRoutines(t *testing.T) { - contents := "No Goroutines for you, my friend!" +func TestGoRoutines(t *testing.T) { + expected := "No Goroutines for you, my friend!" ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintf(w, "%s", contents) - })) - defer ts.Close() - - pprofURL = ts.URL - - zipFilePath := getArchivePath() - filePath, err := createArchive(SearchPaths{}, true, zipFilePath, []string{""}, nil, nil) - - require.Nil(t, err) - require.Equal(t, zipFilePath, filePath) - - // Open a zip archive for reading. - z, err := zip.OpenReader(zipFilePath) - if err != nil { - assert.Fail(t, "Unable to open the flare archive") - } - defer z.Close() - defer os.Remove(zipFilePath) - - // Iterate through the files in the archive, - // printing some of their contents. - found := false - for _, f := range z.File { - // find go-routine dump. - if path.Base(f.Name) == routineDumpFilename { - found = true - - dump, err := f.Open() - if err != nil { - assert.Fail(t, "Unable to open go-routine dump") - } - defer dump.Close() - - routines, err := io.ReadAll(dump) - if err != nil { - assert.Fail(t, "Unable to read go-routine dump") - } - - assert.Equal(t, contents, string(routines[:])) - } - } - - assert.True(t, found, "Go routine dump not found in flare") -} - -// The zipfile should be created even if there is no config file. -func TestCreateArchiveBadConfig(t *testing.T) { - common.SetupConfig("") - zipFilePath := getArchivePath() - filePath, err := createArchive(SearchPaths{}, true, zipFilePath, []string{""}, nil, nil) - - require.Nil(t, err) - require.Equal(t, zipFilePath, filePath) - - if _, err := os.Stat(zipFilePath); os.IsNotExist(err) { - assert.Fail(t, "The Zip File was not created") - } else { - os.Remove(zipFilePath) - } -} - -// Ensure sensitive data is redacted -func TestZipConfigCheck(t *testing.T) { - cr := response.ConfigCheckResponse{ - Configs: make([]integration.Config, 0), - } - cr.Configs = append(cr.Configs, integration.Config{ - Name: "TestCheck", - Instances: []integration.Data{[]byte("username: User\npassword: MySecurePass")}, - Provider: "FooProvider", - }) - - ts := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - out, _ := json.Marshal(cr) - w.Write(out) + fmt.Fprintf(w, "%s", expected) })) defer ts.Close() - configCheckURL = ts.URL - dir := t.TempDir() - - zipConfigCheck(dir, "") - content, err := os.ReadFile(filepath.Join(dir, "config-check.log")) - if err != nil { - log.Fatal(err) - } - - assert.NotContains(t, string(content), "MySecurePass") + content, err := getHTTPCallContent(ts.URL) + require.NoError(t, err) + assert.Equal(t, expected, string(content)) } func TestIncludeSystemProbeConfig(t *testing.T) { - assert := assert.New(t) common.SetupConfig("./test/datadog-agent.yaml") // create system-probe.yaml file because it's in .gitignore _, err := os.Create("./test/system-probe.yaml") - assert.NoError(err, "couldn't create system-probe.yaml") + require.NoError(t, err, "couldn't create system-probe.yaml") defer os.Remove("./test/system-probe.yaml") - zipFilePath := getArchivePath() - filePath, err := createArchive(SearchPaths{"": "./test/confd"}, true, zipFilePath, []string{""}, nil, nil) - assert.NoError(err) - assert.Equal(zipFilePath, filePath) + mock := flarehelpers.NewFlareBuilderMock(t) + getConfigFiles(mock.Fb, SearchPaths{"": "./test/confd"}) - defer os.Remove(zipFilePath) - - z, err := zip.OpenReader(zipFilePath) - assert.NoError(err, "opening the zip shouldn't pop an error") - - var hasDDConfig, hasSysProbeConfig bool - for _, f := range z.File { - if strings.HasSuffix(f.Name, "datadog-agent.yaml") { - hasDDConfig = true - } - if strings.HasSuffix(f.Name, "system-probe.yaml") { - hasSysProbeConfig = true - } - } - - assert.True(hasDDConfig, "datadog-agent.yaml should've been included") - assert.True(hasSysProbeConfig, "system-probe.yaml should've been included") + mock.AssertFileExists("etc", "datadog.yaml") + mock.AssertFileExists("etc", "system-probe.yaml") } func TestIncludeConfigFiles(t *testing.T) { - assert := assert.New(t) - common.SetupConfig("./test") - zipFilePath := getArchivePath() - filePath, err := createArchive(SearchPaths{"": "./test/confd"}, true, zipFilePath, []string{""}, nil, nil) - - assert.NoError(err) - assert.Equal(zipFilePath, filePath) - if _, err := os.Stat(zipFilePath); os.IsNotExist(err) { - assert.Fail("The Zip File was not created") - } + mock := flarehelpers.NewFlareBuilderMock(t) + getConfigFiles(mock.Fb, SearchPaths{"": "./test/confd"}) - defer os.Remove(zipFilePath) + mock.AssertFileExists("etc/confd/test.yaml") + mock.AssertFileExists("etc/confd/test.Yml") + mock.AssertNoFileExists("etc/confd/not_included.conf") +} - // asserts that test.yaml and test.yml have been included - z, err := zip.OpenReader(zipFilePath) - assert.NoError(err, "opening the zip shouldn't pop an error") +func TestIncludeConfigFilesWithPrefix(t *testing.T) { + common.SetupConfig("./test") - yaml, yml := false, false - for _, f := range z.File { - if strings.HasSuffix(f.Name, "test.yaml") { - yaml = true - } else if strings.HasSuffix(f.Name, "test.Yml") { - yml = true - } else if strings.HasSuffix(f.Name, "not_included.conf") { - assert.Fail("not_included.conf should not been included into the flare") - } - } + mock := flarehelpers.NewFlareBuilderMock(t) + getConfigFiles(mock.Fb, SearchPaths{"prefix": "./test/confd"}) - assert.True(yml, "test.yml should've been included") - assert.True(yaml, "test.yaml should've been included") + mock.AssertFileExists("etc/confd/prefix/test.yaml") + mock.AssertFileExists("etc/confd/prefix/test.Yml") + mock.AssertNoFileExists("etc/confd/prefix/not_included.conf") } -func TestCleanDirectoryName(t *testing.T) { - insaneHostname := ` - - - - 404 - File or directory not found. - - - - -
-
-

404 - File or directory not found.

-

The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable.

-
-
- - ` - - cleanedHostname := cleanDirectoryName(insaneHostname) - - assert.Len(t, cleanedHostname, directoryNameMaxSize) - assert.True(t, !directoryNameFilter.MatchString(cleanedHostname)) +func createTestFile(t *testing.T, filename string) string { + path := filepath.Join(t.TempDir(), filename) + require.NoError(t, os.WriteFile(path, []byte("mockfilecontent"), os.ModePerm)) + return path } -func TestZipLogFiles(t *testing.T) { - srcDir := t.TempDir() - dstDir := t.TempDir() +func TestRegistryJSON(t *testing.T) { + srcDir := createTestFile(t, "registry.json") - var err error - f, err := os.Create(filepath.Join(srcDir, "agent.log")) - require.NoError(t, err) - require.NoError(t, f.Close()) - - f, err = os.Create(filepath.Join(srcDir, "trace-agent.log")) - require.NoError(t, err) - require.NoError(t, f.Close()) + confMock := config.Mock(t) + confMock.Set("logs_config.run_path", filepath.Dir(srcDir)) - err = os.Mkdir(filepath.Join(srcDir, "archive"), 0o700) - require.NoError(t, err) - - f, err = os.Create(filepath.Join(srcDir, "archive", "agent.log")) - require.NoError(t, err) - require.NoError(t, f.Close()) - - permsInfos := make(permissionsInfos) - - err = zipLogFiles(dstDir, "test", filepath.Join(srcDir, "agent.log"), permsInfos) - require.NoError(t, err) + mock := flarehelpers.NewFlareBuilderMock(t) + getRegistryJSON(mock.Fb) - // Check all the log files are in the destination path, at the right subdirectories - _, err = os.Stat(filepath.Join(dstDir, "test", "logs", "agent.log")) - assert.NoError(t, err) - _, err = os.Stat(filepath.Join(dstDir, "test", "logs", "trace-agent.log")) - assert.NoError(t, err) - _, err = os.Stat(filepath.Join(dstDir, "test", "logs", "archive", "agent.log")) - assert.NoError(t, err) + mock.AssertFileContent("mockfilecontent", "registry.json") } -func TestZipRegistryJSON(t *testing.T) { - srcDir, dstDir, err := createTestDirStructure(t, "registry.json") +func setupIPCAddress(t *testing.T, URL string) *config.MockConfig { + u, err := url.Parse(URL) require.NoError(t, err) - - tempRunPath := config.Datadog.GetString("logs_config.run_path") - config.Datadog.Set("logs_config.run_path", srcDir) - defer config.Datadog.Set("logs_config.run_path", tempRunPath) - - err = zipRegistryJSON(dstDir, "test") + host, port, err := net.SplitHostPort(u.Host) require.NoError(t, err) - targetPath := filepath.Join(dstDir, "test", "registry.json") - actualContent, err := os.ReadFile(targetPath) - require.NoError(t, err) - require.Equal(t, "mockfilecontent", string(actualContent)) + confMock := config.Mock(t) + confMock.Set("ipc_address", host) + confMock.Set("cmd_port", port) + confMock.Set("process_config.cmd_port", port) + + return confMock } -func TestZipTaggerList(t *testing.T) { +func TestGetAgentTaggerList(t *testing.T) { tagMap := make(map[string]tagger_api.TaggerListEntity) tagMap["random_entity_name"] = tagger_api.TaggerListEntity{ Tags: map[string][]string{ @@ -368,14 +127,10 @@ func TestZipTaggerList(t *testing.T) { })) defer s.Close() - dir := t.TempDir() + setupIPCAddress(t, s.URL) - taggerListURL = s.URL - zipAgentTaggerList(dir, "") - content, err := os.ReadFile(filepath.Join(dir, "tagger-list.json")) - if err != nil { - log.Fatal(err) - } + content, err := getAgentTaggerList() + require.NoError(t, err) assert.Contains(t, string(content), "random_entity_name") assert.Contains(t, string(content), "docker_source_name") @@ -383,7 +138,7 @@ func TestZipTaggerList(t *testing.T) { assert.Contains(t, string(content), "image_name:custom-agent") } -func TestZipWorkloadList(t *testing.T) { +func TestGetWorkloadList(t *testing.T) { workloadMap := make(map[string]workloadmeta.WorkloadEntity) workloadMap["kind_id"] = workloadmeta.WorkloadEntity{ Infos: map[string]string{ @@ -401,14 +156,10 @@ func TestZipWorkloadList(t *testing.T) { })) defer s.Close() - dir := t.TempDir() + setupIPCAddress(t, s.URL) - workloadListURL = s.URL - zipWorkloadList(dir, "") - content, err := os.ReadFile(filepath.Join(dir, "workload-list.log")) - if err != nil { - log.Fatal(err) - } + content, err := getWorkloadList() + require.NoError(t, err) assert.Contains(t, string(content), "kind_id") assert.Contains(t, string(content), "container_id_1") @@ -419,100 +170,31 @@ func TestZipWorkloadList(t *testing.T) { func TestPerformanceProfile(t *testing.T) { testProfile := ProfileData{ - "first": []byte{}, - "second": []byte{}, - "third": []byte{}, - } - zipFilePath := getArchivePath() - filePath, err := createArchive(SearchPaths{}, true, zipFilePath, []string{""}, testProfile, nil) - - require.NoError(t, err) - require.Equal(t, zipFilePath, filePath) - - // Open a zip archive for reading. - z, err := zip.OpenReader(zipFilePath) - if err != nil { - assert.Fail(t, "Unable to open the flare archive") - } - defer z.Close() - defer os.Remove(zipFilePath) - - firstHeap, secondHeap, cpu := false, false, false - for _, f := range z.File { - switch path.Base(f.Name) { - case "first": - firstHeap = true - case "second": - secondHeap = true - case "third": - cpu = true - } + "first": []byte("data1"), + "second": []byte("data2"), + "third": []byte("data3"), } + mock := flarehelpers.NewFlareBuilderMock(t) + getPerformanceProfile(mock.Fb, testProfile) - assert.True(t, firstHeap, "first-heap.profile should've been included") - assert.True(t, secondHeap, "second-heap.profile should've been included") - assert.True(t, cpu, "cpu.profile should've been included") -} - -// Test that writeScrubbedFile actually scrubs third-party API keys. -func TestRedactingOtherServicesApiKey(t *testing.T) { - dir := t.TempDir() - filename := path.Join(dir, "test.config") - - clear := `init_config: -instances: -- host: 127.0.0.1 - api_key: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa - port: 8082 - api_key: dGhpc2++lzM+XBhc3N3b3JkW113aXRo/c29tZWN]oYXJzMTIzCg== - version: 4 # omit this line if you're running pdns_recursor version 3.x` - redacted := `init_config: -instances: -- host: 127.0.0.1 - api_key: "***************************aaaaa" - port: 8082 - api_key: "********" - version: 4 # omit this line if you're running pdns_recursor version 3.x` - - err := writeScrubbedFile(filename, []byte(clear)) - require.NoError(t, err) - - got, err := os.ReadFile(filename) - require.NoError(t, err) - assert.Equal(t, redacted, string(got)) -} - -func TestZipFile(t *testing.T) { - srcDir, dstDir, err := createTestDirStructure(t, "test.json") - require.NoError(t, err) - - err = zipFile(srcDir, dstDir, "test.json") - require.NoError(t, err) - - targetPath := filepath.Join(dstDir, "test.json") - actualContent, err := os.ReadFile(targetPath) - require.NoError(t, err) - require.Equal(t, "mockfilecontent", string(actualContent)) + mock.AssertFileContent("data1", "profiles", "first") + mock.AssertFileContent("data2", "profiles", "second") + mock.AssertFileContent("data3", "profiles", "third") } -func TestZipVersionHistory(t *testing.T) { - srcDir, dstDir, err := createTestDirStructure(t, "version-history.json") - require.NoError(t, err) +func TestVersionHistory(t *testing.T) { + srcDir := createTestFile(t, "version-history.json") - tempRunPath := config.Datadog.GetString("run_path") - config.Datadog.Set("run_path", srcDir) - defer config.Datadog.Set("run_path", tempRunPath) + confMock := config.Mock(t) + confMock.Set("run_path", filepath.Dir(srcDir)) - err = zipVersionHistory(dstDir, "test") - require.NoError(t, err) + mock := flarehelpers.NewFlareBuilderMock(t) + getVersionHistory(mock.Fb) - targetPath := filepath.Join(dstDir, "test", "version-history.json") - actualContent, err := os.ReadFile(targetPath) - require.NoError(t, err) - require.Equal(t, "mockfilecontent", string(actualContent)) + mock.AssertFileContent("mockfilecontent", "version-history.json") } -func TestZipProcessAgentFullConfig(t *testing.T) { +func TestProcessAgentFullConfig(t *testing.T) { type ProcessConfig struct { Enabled string `yaml:"enabled"` } @@ -529,18 +211,16 @@ func TestZipProcessAgentFullConfig(t *testing.T) { }, } - exp := `api_key: "***************************aaaaa" + exp := `api_key: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa dd_url: https://my-url.com process_config: - enabled: "true"` + enabled: "true" +` t.Run("without process-agent running", func(t *testing.T) { - dir := t.TempDir() - - zipProcessAgentFullConfig(dir, "") - content, err := os.ReadFile(filepath.Join(dir, "process_agent_runtime_config_dump.yaml")) + content, err := getProcessAgentFullConfig() require.NoError(t, err) - assert.Equal(t, "error: process-agent is not running or is unreachable", string(content)) + assert.Equal(t, "error: process-agent is not running or is unreachable\n", string(content)) }) t.Run("with process-agent running", func(t *testing.T) { @@ -556,17 +236,15 @@ process_config: srv := httptest.NewServer(http.HandlerFunc(handler)) defer srv.Close() - dir := t.TempDir() + setupIPCAddress(t, srv.URL) - procStatusURL = srv.URL - zipProcessAgentFullConfig(dir, "") - content, err := os.ReadFile(filepath.Join(dir, "process_agent_runtime_config_dump.yaml")) + content, err := getProcessAgentFullConfig() require.NoError(t, err) assert.Equal(t, exp, string(content)) }) } -func TestZipProcessAgentChecks(t *testing.T) { +func TestProcessAgentChecks(t *testing.T) { expectedProcesses := []procmodel.MessageBody{ &procmodel.CollectorProc{ Processes: []*procmodel.Process{ @@ -604,15 +282,10 @@ func TestZipProcessAgentChecks(t *testing.T) { require.NoError(t, err) t.Run("without process-agent running", func(t *testing.T) { - dir := t.TempDir() - fmt.Println(dir) + mock := flarehelpers.NewFlareBuilderMock(t) + getProcessChecks(mock.Fb, func() (string, error) { return "fake:1337", nil }) - err = zipProcessChecks(dir, "", func() (string, error) { return "fake:1337", nil }) - require.NoError(t, err) - - content, err := os.ReadFile(filepath.Join(dir, "process_check_output.json")) - require.NoError(t, err) - assert.True(t, strings.HasPrefix(string(content), "error: process-agent is not running or is unreachable")) + mock.AssertFileContentMatch("error: process-agent is not running or is unreachable: error collecting data from callback for 'process_discovery_check_output.json': .*", "process_check_output.json") }) t.Run("with process-agent running", func(t *testing.T) { cfg := config.Mock(t) @@ -638,21 +311,13 @@ func TestZipProcessAgentChecks(t *testing.T) { srv := httptest.NewServer(http.HandlerFunc(handler)) defer srv.Close() - dir := t.TempDir() + setupIPCAddress(t, srv.URL) - err = zipProcessChecks(dir, "", func() (string, error) { return strings.TrimPrefix(srv.URL, "http://"), nil }) - require.NoError(t, err) - - content, err := os.ReadFile(filepath.Join(dir, "process_check_output.json")) - require.NoError(t, err) - assert.Equal(t, expectedProcessesJSON, content) + mock := flarehelpers.NewFlareBuilderMock(t) + getProcessChecks(mock.Fb, config.GetProcessAPIAddressPort) - content, err = os.ReadFile(filepath.Join(dir, "container_check_output.json")) - require.NoError(t, err) - assert.Equal(t, expectedContainersJSON, content) - - content, err = os.ReadFile(filepath.Join(dir, "process_discovery_check_output.json")) - require.NoError(t, err) - assert.Equal(t, expectedProcessDiscoveryJSON, content) + mock.AssertFileContent(string(expectedProcessesJSON), "process_check_output.json") + mock.AssertFileContent(string(expectedContainersJSON), "container_check_output.json") + mock.AssertFileContent(string(expectedProcessDiscoveryJSON), "process_discovery_check_output.json") }) } diff --git a/pkg/flare/archive_win.go b/pkg/flare/archive_win.go index b7ae2820d04e5b..7933a72cfea84a 100644 --- a/pkg/flare/archive_win.go +++ b/pkg/flare/archive_win.go @@ -20,6 +20,7 @@ import ( "golang.org/x/sys/windows" + flarehelpers "github.com/DataDog/datadog-agent/comp/core/flare/helpers" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/winutil" ) @@ -40,62 +41,47 @@ const ( evtExportLogChannelPath uint32 = 0x1 ) -func zipCounterStrings(tempDir, hostname string) error { - bufferIncrement := uint32(1024) - bufferSize := bufferIncrement - var counterlist []uint16 - for { - var regtype uint32 - counterlist = make([]uint16, bufferSize) - var sz uint32 - sz = bufferSize - regerr := windows.RegQueryValueEx(windows.HKEY_PERFORMANCE_DATA, - windows.StringToUTF16Ptr("Counter 009"), - nil, // reserved - ®type, - (*byte)(unsafe.Pointer(&counterlist[0])), - &sz) - if regerr == error(windows.ERROR_MORE_DATA) { - // buffer's not big enough - bufferSize += bufferIncrement - continue - } - // must set the length of the slice to the actual amount of data - // sz is in bytes, but it's a slice of uint16s, so divide the returned - // buffer size by two. - counterlist = counterlist[:(sz / 2)] - break - } - clist := winutil.ConvertWindowsStringList(counterlist) - fname := filepath.Join(tempDir, hostname, "counter_strings.txt") - err := ensureParentDirsExist(fname) - if err != nil { - return err - } - f, err := os.Create(fname) - if err != nil { - return err - } - defer f.Close() - for i := 0; i < len(clist); i++ { - _, err = f.WriteString(clist[i]) - if err != nil { - return err - } - _, err = f.WriteString("\r\n") - if err != nil { - return err - } - } - err = f.Sync() - if err != nil { - return err - } - return nil - +func getCounterStrings(fb flarehelpers.FlareBuilder) error { + return fb.AddFileFromFunc("counter_strings.txt", + func() ([]byte, error) { + bufferIncrement := uint32(1024) + bufferSize := bufferIncrement + var counterlist []uint16 + for { + var regtype uint32 + counterlist = make([]uint16, bufferSize) + var sz uint32 + sz = bufferSize + regerr := windows.RegQueryValueEx(windows.HKEY_PERFORMANCE_DATA, + windows.StringToUTF16Ptr("Counter 009"), + nil, // reserved + ®type, + (*byte)(unsafe.Pointer(&counterlist[0])), + &sz) + if regerr == error(windows.ERROR_MORE_DATA) { + // buffer's not big enough + bufferSize += bufferIncrement + continue + } + // must set the length of the slice to the actual amount of data + // sz is in bytes, but it's a slice of uint16s, so divide the returned + // buffer size by two. + counterlist = counterlist[:(sz / 2)] + break + } + clist := winutil.ConvertWindowsStringList(counterlist) + + f := &bytes.Buffer{} + for i := 0; i < len(clist); i++ { + f.Write([]byte(clist[i])) //nolint:errcheck + f.Write([]byte("\r\n")) //nolint:errcheck + } + return f.Bytes(), nil + }, + ) } -func zipTypeperfData(tempDir, hostname string) error { +func getTypeperfData(fb flarehelpers.FlareBuilder) error { cancelctx, cancelfunc := context.WithTimeout(context.Background(), execTimeout) defer cancelfunc() @@ -105,21 +91,13 @@ func zipTypeperfData(tempDir, hostname string) error { cmd.Stdout = &out err := cmd.Run() if err != nil { - return err - } - f := filepath.Join(tempDir, hostname, "typeperf.txt") - err = ensureParentDirsExist(f) - if err != nil { - return err + log.Errorf("Could not write typeperf data: %s", err) } - err = os.WriteFile(f, out.Bytes(), os.ModePerm) - if err != nil { - return err - } - return nil + return fb.AddFile("typeperf.txt", out.Bytes()) } -func zipLodctrOutput(tempDir, hostname string) error { + +func getLodctrOutput(fb flarehelpers.FlareBuilder) error { cancelctx, cancelfunc := context.WithTimeout(context.Background(), execTimeout) defer cancelfunc() @@ -134,23 +112,12 @@ func zipLodctrOutput(tempDir, hostname string) error { // it succeeds. Log the error in case it's some other error, // but continue on. } - f := filepath.Join(tempDir, hostname, "lodctr.txt") - err = ensureParentDirsExist(f) - if err != nil { - log.Warnf("Error in ensureParentDirsExist %v", err) - return err - } - err = os.WriteFile(f, out.Bytes(), os.ModePerm) - if err != nil { - log.Warnf("Error writing file %v", err) - return err - } - return nil + return fb.AddFile("lodctr.txt", out.Bytes()) } -// zipWindowsEventLogs exports Windows event logs. -func zipWindowsEventLogs(tempDir, hostname string) error { +// getWindowsEventLogs exports Windows event logs. +func getWindowsEventLogs(fb flarehelpers.FlareBuilder) error { var err error for eventLogChannel := range eventLogChannelsToExport { @@ -159,11 +126,10 @@ func zipWindowsEventLogs(tempDir, hostname string) error { // Export one event log file to the temporary location. errExport := exportWindowsEventLog( + fb, eventLogChannel, eventLogQuery, - eventLogFileName, - tempDir, - hostname) + eventLogFileName) if errExport != nil { log.Warnf("could not export event log %v, error: %v", eventLogChannel, errExport) @@ -171,16 +137,14 @@ func zipWindowsEventLogs(tempDir, hostname string) error { } } - return err + return log.Errorf("Could not export Windows event logs: %s", err) } // exportWindowsEventLog exports one event log file to the temporary location. // destFileName might contain a path. -func exportWindowsEventLog(eventLogChannel, eventLogQuery, destFileName, tempDir, hostname string) error { +func exportWindowsEventLog(fb flarehelpers.FlareBuilder, eventLogChannel, eventLogQuery, destFileName string) error { // Put all event logs under "eventlog" folder - destFullFileName := filepath.Join(tempDir, hostname, "eventlog", destFileName) - - err := ensureParentDirsExist(destFullFileName) + destFullFileName, err := fb.PrepareFilePath(filepath.Join("eventlog", destFileName)) if err != nil { log.Warnf("cannot create folder for %s: %v", destFullFileName, err) return err @@ -213,69 +177,55 @@ func exportWindowsEventLog(eventLogChannel, eventLogQuery, destFileName, tempDir return err } -type filePermsInfo struct{} - -func (p permissionsInfos) add(filePath string) {} -func (p permissionsInfos) commit(tempDir, hostname string, mode os.FileMode) error { - return nil +func getServiceStatus(fb flarehelpers.FlareBuilder) error { + return fb.AddFileFromFunc( + "servicestatus.txt", + func() ([]byte, error) { + cancelctx, cancelfunc := context.WithTimeout(context.Background(), execTimeout) + defer cancelfunc() + + cmd := exec.CommandContext(cancelctx, "powershell", "-c", "get-service", "data*,ddnpm", "|", "fl") + + var out bytes.Buffer + cmd.Stdout = &out + err := cmd.Run() + if err != nil { + log.Warnf("Error running powershell command %v", err) + // for some reason the lodctr command returns error 259 even when + // it succeeds. Log the error in case it's some other error, + // but continue on. + } + + f := &bytes.Buffer{} + _, err = f.Write(out.Bytes()) + if err != nil { + log.Warnf("Error writing file %v", err) + return nil, err + } + // compute the location of the driver + ddroot, err := winutil.GetProgramFilesDirForProduct("DataDog Agent") + if err == nil { + pathtodriver := filepath.Join(ddroot, "bin", "agent", "driver", "ddnpm.sys") + fi, err := os.Stat(pathtodriver) + if err != nil { + f.Write([]byte(fmt.Sprintf("Failed to stat file %v %v\n", pathtodriver, err))) //nolint:errcheck + } else { + f.Write([]byte(fmt.Sprintf("Driver last modification time : %v\n", fi.ModTime().Format(time.UnixDate)))) //nolint:errcheck + } + } else { + return nil, fmt.Errorf("Error getting path to datadog agent binaries %v", err) + } + return f.Bytes(), nil + }) } -func zipServiceStatus(tempDir, hostname string) error { - f := filepath.Join(tempDir, hostname, "servicestatus.txt") - err := ensureParentDirsExist(f) - if err != nil { - return fmt.Errorf("Error in ensureParentDirsExist %v", err) - } - - fh, err := os.Create(f) - if err != nil { - return fmt.Errorf("Error creating temp file %s %v", f, err) - } - defer fh.Close() - cancelctx, cancelfunc := context.WithTimeout(context.Background(), execTimeout) - defer cancelfunc() - - cmd := exec.CommandContext(cancelctx, "powershell", "-c", "get-service", "data*,ddnpm", "|", "fl") - - var out bytes.Buffer - cmd.Stdout = &out - err = cmd.Run() - if err != nil { - log.Warnf("Error running powershell command %v", err) - // for some reason the lodctr command returns error 259 even when - // it succeeds. Log the error in case it's some other error, - // but continue on. - } - - _, err = fh.Write(out.Bytes()) - if err != nil { - log.Warnf("Error writing file %v", err) - return err - } - // compute the location of the driver - ddroot, err := winutil.GetProgramFilesDirForProduct("DataDog Agent") - if err == nil { - pathtodriver := filepath.Join(ddroot, "bin", "agent", "driver", "ddnpm.sys") - fi, err := os.Stat(pathtodriver) - if err != nil { - _, _ = fh.WriteString(fmt.Sprintf("Failed to stat file %v %v\n", pathtodriver, err)) - } else { - _, _ = fh.WriteString(fmt.Sprintf("Driver last modification time : %v\n", fi.ModTime().Format(time.UnixDate))) - } - } else { - return fmt.Errorf("Error getting path to datadog agent binaries %v", err) - } - return nil -} - -// zipDatadogRegistry function saves all Datadog registry keys and values from HKLM\Software\Datadog. +// getDatadogRegistry function saves all Datadog registry keys and values from HKLM\Software\Datadog. // The implementation is based on the invoking Windows built-in reg.exe command, which does all // heavy lifting (instead of relying on explicit and recursive Registry API calls). // More technical details can be found in the PR https://github.com/DataDog/datadog-agent/pull/11290 -func zipDatadogRegistry(tempDir, hostname string) error { +func getDatadogRegistry(fb flarehelpers.FlareBuilder) error { // Generate raw exported registry file which we will scrub just in case - rawf := filepath.Join(tempDir, hostname, "datadog-raw.reg") - err := ensureParentDirsExist(rawf) + rawf, err := fb.PrepareFilePath("datadog-raw.reg") if err != nil { return fmt.Errorf("Error in ensureParentDirsExist %v", err) } @@ -300,12 +250,14 @@ func zipDatadogRegistry(tempDir, hostname string) error { return err } - // ... scrub it and write it back - f := filepath.Join(tempDir, hostname, "datadog.reg") - err = writeScrubbedFile(f, data) - if err != nil { - return err - } + return fb.AddFile("datadog.reg", data) +} - return nil +func getWindowsData(fb flarehelpers.FlareBuilder) { + getTypeperfData(fb) //nolint:errcheck + getLodctrOutput(fb) //nolint:errcheck + getCounterStrings(fb) //nolint:errcheck + getWindowsEventLogs(fb) //nolint:errcheck + getServiceStatus(fb) //nolint:errcheck + getDatadogRegistry(fb) //nolint:errcheck } diff --git a/pkg/flare/archive_win_test.go b/pkg/flare/archive_win_test.go deleted file mode 100644 index b2813ed15cfc89..00000000000000 --- a/pkg/flare/archive_win_test.go +++ /dev/null @@ -1,52 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build windows -// +build windows - -package flare - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -// Test that addParentPerms does not loop on Windows. -func TestAddParentPermsWindows(t *testing.T) { - assert := assert.New(t) - - permsInfos := make(permissionsInfos) - expectedParentPerms := map[string]filePermsInfo{} - - // Basic Case - path := "C:\\a\\b\\c\\d" - addParentPerms(path, permsInfos) - assert.EqualValues(expectedParentPerms, permsInfos) - - // Empty Case - path = "" - addParentPerms(path, permsInfos) - assert.EqualValues(expectedParentPerms, permsInfos) - - // Only root - permsInfos = make(permissionsInfos) - path = "C:\\" - addParentPerms(path, permsInfos) - assert.EqualValues(expectedParentPerms, permsInfos) - - // Space in path - permsInfos = make(permissionsInfos) - path = "D:\\a b\\c" - addParentPerms(path, permsInfos) - assert.EqualValues(expectedParentPerms, permsInfos) - - // Dot in path - permsInfos = make(permissionsInfos) - path = "E:\\a.b\\c" - addParentPerms(path, permsInfos) - assert.EqualValues(expectedParentPerms, permsInfos) - -} diff --git a/pkg/flare/dca_telemetry.go b/pkg/flare/dca_telemetry.go deleted file mode 100644 index 062c5308c73874..00000000000000 --- a/pkg/flare/dca_telemetry.go +++ /dev/null @@ -1,24 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package flare - -import ( - "fmt" - "io" - "net/http" - - "github.com/DataDog/datadog-agent/pkg/config" -) - -// QueryDCAMetrics gets the metrics payload exposed by the cluster agent -func QueryDCAMetrics() ([]byte, error) { - r, err := http.Get(fmt.Sprintf("http://localhost:%d/metrics", config.Datadog.GetInt("metrics_port"))) - if err != nil { - return nil, err - } - defer r.Body.Close() - return io.ReadAll(r.Body) -} diff --git a/pkg/flare/envvars.go b/pkg/flare/envvars.go index a099720b74b229..13f56c79f59091 100644 --- a/pkg/flare/envvars.go +++ b/pkg/flare/envvars.go @@ -9,7 +9,6 @@ import ( "bytes" "fmt" "os" - "path/filepath" "strings" "github.com/DataDog/datadog-agent/pkg/config" @@ -114,9 +113,9 @@ func getAllowedEnvvars() []string { return found } -// zipEnvvars collects allowed envvars that can affect the agent's +// getEnvVars collects allowed envvars that can affect the agent's // behaviour while not being handled by viper, in addition to the envvars handled by viper -func zipEnvvars(tempDir, hostname string) error { +func getEnvVars() ([]byte, error) { envvars := getAllowedEnvvars() var b bytes.Buffer @@ -129,6 +128,5 @@ func zipEnvvars(tempDir, hostname string) error { fmt.Fprintln(&b, "Found no allowed envvar") } - f := filepath.Join(tempDir, hostname, "envvars.log") - return writeScrubbedFile(f, b.Bytes()) + return b.Bytes(), nil } diff --git a/pkg/flare/metadata.go b/pkg/flare/metadata.go deleted file mode 100644 index 9cdad77e954eb0..00000000000000 --- a/pkg/flare/metadata.go +++ /dev/null @@ -1,43 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package flare - -import ( - "context" - "encoding/json" - "path/filepath" - - "github.com/DataDog/datadog-agent/pkg/metadata/inventories" - v5 "github.com/DataDog/datadog-agent/pkg/metadata/v5" - host "github.com/DataDog/datadog-agent/pkg/util/hostname" -) - -func addMetadata(tempDir, hostname, filename string, data []byte) error { - f := filepath.Join(tempDir, hostname, filename) - return writeScrubbedFile(f, data) -} - -func zipMetadataInventories(tempDir, hostname string) error { - payload, err := inventories.GetLastPayload() - if err != nil { - return err - } - - return addMetadata(tempDir, hostname, "metadata_inventories.json", payload) -} - -func zipMetadataV5(tempDir, hostname string) error { - ctx := context.Background() - hostnameData, _ := host.GetWithProvider(ctx) - payload := v5.GetPayload(ctx, hostnameData) - - data, err := json.MarshalIndent(payload, "", " ") - if err != nil { - return err - } - - return addMetadata(tempDir, hostname, "metadata_v5.json", data) -} diff --git a/pkg/flare/remote_config.go b/pkg/flare/remote_config.go index b62e7783b8d510..b13801e8d680c5 100644 --- a/pkg/flare/remote_config.go +++ b/pkg/flare/remote_config.go @@ -12,6 +12,7 @@ import ( "path/filepath" "strings" + flarehelpers "github.com/DataDog/datadog-agent/comp/core/flare/helpers" "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/util" "go.etcd.io/bbolt" @@ -25,9 +26,9 @@ func hashRCTargets(raw []byte) []byte { return []byte(s) } -func zipRemoteConfigDB(tempDir, hostname string) error { - dstPath := filepath.Join(tempDir, hostname, "remote-config.db") - tempPath := filepath.Join(tempDir, hostname, "remote-config.temp.db") +func getRemoteConfigDB(fb flarehelpers.FlareBuilder) error { + dstPath, _ := fb.PrepareFilePath("remote-config.db") + tempPath, _ := fb.PrepareFilePath("remote-config.temp.db") srcPath := filepath.Join(config.Datadog.GetString("run_path"), "remote-config.db") // Copies the db so it avoids bbolt from being locked diff --git a/pkg/forwarder/endpoints/endpoints.go b/pkg/forwarder/endpoints/endpoints.go index bef40361f22b1e..34b0ae55a4e4c8 100644 --- a/pkg/forwarder/endpoints/endpoints.go +++ b/pkg/forwarder/endpoints/endpoints.go @@ -56,4 +56,8 @@ var ( OrchestratorManifestEndpoint = transaction.Endpoint{Route: "/api/v2/orchmanif", Name: "orchmanifest"} // ContainerLifecycleEndpoint is an event platform endpoint used to send container lifecycle events ContainerLifecycleEndpoint = transaction.Endpoint{Route: "/api/v2/contlcycle", Name: "contlcycle"} + // ContainerImageEndpoint is an event platform endpoint used to send container images + ContainerImageEndpoint = transaction.Endpoint{Route: "/api/v2/contimage", Name: "contimage"} + // SBOMEndpoint is an event platform endpoint used to send SBOM + SBOMEndpoint = transaction.Endpoint{Route: "/api/v2/sbom", Name: "sbom"} ) diff --git a/pkg/forwarder/forwarder.go b/pkg/forwarder/forwarder.go index 40499abbd0a3ad..a2affdb15b3a6b 100644 --- a/pkg/forwarder/forwarder.go +++ b/pkg/forwarder/forwarder.go @@ -75,6 +75,8 @@ type Forwarder interface { SubmitOrchestratorChecks(payload transaction.BytesPayloads, extra http.Header, payloadType int) (chan Response, error) SubmitOrchestratorManifests(payload transaction.BytesPayloads, extra http.Header) (chan Response, error) SubmitContainerLifecycleEvents(payload transaction.BytesPayloads, extra http.Header) error + SubmitContainerImages(payload transaction.BytesPayloads, extra http.Header) error + SubmitSBOM(payload transaction.BytesPayloads, extra http.Header) error } // Compile-time check to ensure that DefaultForwarder implements the Forwarder interface @@ -419,11 +421,11 @@ func (f *DefaultForwarder) State() uint32 { return f.internalState.Load() } -func (f *DefaultForwarder) createHTTPTransactions(endpoint transaction.Endpoint, payloads transaction.BytesPayloads, apiKeyInQueryString bool, extra http.Header) []*transaction.HTTPTransaction { - return f.createAdvancedHTTPTransactions(endpoint, payloads, apiKeyInQueryString, extra, transaction.TransactionPriorityNormal, true) +func (f *DefaultForwarder) createHTTPTransactions(endpoint transaction.Endpoint, payloads transaction.BytesPayloads, extra http.Header) []*transaction.HTTPTransaction { + return f.createAdvancedHTTPTransactions(endpoint, payloads, extra, transaction.TransactionPriorityNormal, true) } -func (f *DefaultForwarder) createAdvancedHTTPTransactions(endpoint transaction.Endpoint, payloads transaction.BytesPayloads, apiKeyInQueryString bool, extra http.Header, priority transaction.Priority, storableOnDisk bool) []*transaction.HTTPTransaction { +func (f *DefaultForwarder) createAdvancedHTTPTransactions(endpoint transaction.Endpoint, payloads transaction.BytesPayloads, extra http.Header, priority transaction.Priority, storableOnDisk bool) []*transaction.HTTPTransaction { transactions := make([]*transaction.HTTPTransaction, 0, len(payloads)*len(f.domainForwarders)) allowArbitraryTags := config.Datadog.GetBool("allow_arbitrary_tags") @@ -433,9 +435,6 @@ func (f *DefaultForwarder) createAdvancedHTTPTransactions(endpoint transaction.E t := transaction.NewHTTPTransaction() t.Domain, _ = dr.Resolve(endpoint) t.Endpoint = endpoint - if apiKeyInQueryString { - t.Endpoint.Route = fmt.Sprintf("%s?api_key=%s", endpoint.Route, apiKey) - } t.Payload = payload t.Priority = priority t.StorableOnDisk = storableOnDisk @@ -513,53 +512,53 @@ func (f *DefaultForwarder) sendHTTPTransactions(transactions []*transaction.HTTP // SubmitSketchSeries will send payloads to Datadog backend - PROTOTYPE FOR PERCENTILE func (f *DefaultForwarder) SubmitSketchSeries(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.createHTTPTransactions(endpoints.SketchSeriesEndpoint, payload, false, extra) + transactions := f.createHTTPTransactions(endpoints.SketchSeriesEndpoint, payload, extra) return f.sendHTTPTransactions(transactions) } // SubmitHostMetadata will send a host_metadata tag type payload to Datadog backend. func (f *DefaultForwarder) SubmitHostMetadata(payload transaction.BytesPayloads, extra http.Header) error { return f.submitV1IntakeWithTransactionsFactory(payload, extra, - func(endpoint transaction.Endpoint, payloads transaction.BytesPayloads, apiKeyInQueryString bool, extra http.Header) []*transaction.HTTPTransaction { + func(endpoint transaction.Endpoint, payloads transaction.BytesPayloads, extra http.Header) []*transaction.HTTPTransaction { // Host metadata contains the API KEY and should not be stored on disk. storableOnDisk := false - return f.createAdvancedHTTPTransactions(endpoint, payloads, apiKeyInQueryString, extra, transaction.TransactionPriorityHigh, storableOnDisk) + return f.createAdvancedHTTPTransactions(endpoint, payloads, extra, transaction.TransactionPriorityHigh, storableOnDisk) }) } // SubmitAgentChecksMetadata will send a agentchecks_metadata tag type payload to Datadog backend. func (f *DefaultForwarder) SubmitAgentChecksMetadata(payload transaction.BytesPayloads, extra http.Header) error { return f.submitV1IntakeWithTransactionsFactory(payload, extra, - func(endpoint transaction.Endpoint, payloads transaction.BytesPayloads, apiKeyInQueryString bool, extra http.Header) []*transaction.HTTPTransaction { + func(endpoint transaction.Endpoint, payloads transaction.BytesPayloads, extra http.Header) []*transaction.HTTPTransaction { // Agentchecks metadata contains the API KEY and should not be stored on disk. storableOnDisk := false - return f.createAdvancedHTTPTransactions(endpoint, payloads, apiKeyInQueryString, extra, transaction.TransactionPriorityNormal, storableOnDisk) + return f.createAdvancedHTTPTransactions(endpoint, payloads, extra, transaction.TransactionPriorityNormal, storableOnDisk) }) } // SubmitMetadata will send a metadata type payload to Datadog backend. func (f *DefaultForwarder) SubmitMetadata(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.createHTTPTransactions(endpoints.V1MetadataEndpoint, payload, false, extra) + transactions := f.createHTTPTransactions(endpoints.V1MetadataEndpoint, payload, extra) return f.sendHTTPTransactions(transactions) } // SubmitV1Series will send timeserie to v1 endpoint (this will be remove once // the backend handles v2 endpoints). func (f *DefaultForwarder) SubmitV1Series(payloads transaction.BytesPayloads, extra http.Header) error { - transactions := f.createHTTPTransactions(endpoints.V1SeriesEndpoint, payloads, true, extra) + transactions := f.createHTTPTransactions(endpoints.V1SeriesEndpoint, payloads, extra) return f.sendHTTPTransactions(transactions) } // SubmitSeries will send timeseries to the v2 endpoint func (f *DefaultForwarder) SubmitSeries(payloads transaction.BytesPayloads, extra http.Header) error { - transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payloads, false, extra) + transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payloads, extra) return f.sendHTTPTransactions(transactions) } // SubmitV1CheckRuns will send service checks to v1 endpoint (this will be removed once // the backend handles v2 endpoints). func (f *DefaultForwarder) SubmitV1CheckRuns(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.createHTTPTransactions(endpoints.V1CheckRunsEndpoint, payload, true, extra) + transactions := f.createHTTPTransactions(endpoints.V1CheckRunsEndpoint, payload, extra) return f.sendHTTPTransactions(transactions) } @@ -571,8 +570,8 @@ func (f *DefaultForwarder) SubmitV1Intake(payload transaction.BytesPayloads, ext func (f *DefaultForwarder) submitV1IntakeWithTransactionsFactory( payload transaction.BytesPayloads, extra http.Header, - createHTTPTransactions func(endpoint transaction.Endpoint, payload transaction.BytesPayloads, apiKeyInQueryString bool, extra http.Header) []*transaction.HTTPTransaction) error { - transactions := createHTTPTransactions(endpoints.V1IntakeEndpoint, payload, true, extra) + createHTTPTransactions func(endpoint transaction.Endpoint, payload transaction.BytesPayloads, extra http.Header) []*transaction.HTTPTransaction) error { + transactions := createHTTPTransactions(endpoints.V1IntakeEndpoint, payload, extra) // the intake endpoint requires the Content-Type header to be set for _, t := range transactions { @@ -636,12 +635,24 @@ func (f *DefaultForwarder) SubmitOrchestratorManifests(payload transaction.Bytes // SubmitContainerLifecycleEvents sends container lifecycle events func (f *DefaultForwarder) SubmitContainerLifecycleEvents(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.createHTTPTransactions(endpoints.ContainerLifecycleEndpoint, payload, false, extra) + transactions := f.createHTTPTransactions(endpoints.ContainerLifecycleEndpoint, payload, extra) + return f.sendHTTPTransactions(transactions) +} + +// SubmitContainerImages sends container image +func (f *DefaultForwarder) SubmitContainerImages(payload transaction.BytesPayloads, extra http.Header) error { + transactions := f.createHTTPTransactions(endpoints.ContainerImageEndpoint, payload, extra) + return f.sendHTTPTransactions(transactions) +} + +// SubmitSBOM sends SBOM +func (f *DefaultForwarder) SubmitSBOM(payload transaction.BytesPayloads, extra http.Header) error { + transactions := f.createHTTPTransactions(endpoints.SBOMEndpoint, payload, extra) return f.sendHTTPTransactions(transactions) } func (f *DefaultForwarder) submitProcessLikePayload(ep transaction.Endpoint, payload transaction.BytesPayloads, extra http.Header, retryable bool) (chan Response, error) { - transactions := f.createHTTPTransactions(ep, payload, false, extra) + transactions := f.createHTTPTransactions(ep, payload, extra) results := make(chan Response, len(transactions)) internalResults := make(chan Response, len(transactions)) expectedResponses := len(transactions) diff --git a/pkg/forwarder/forwarder_health.go b/pkg/forwarder/forwarder_health.go index c69cfa0a228cdc..b3c09a2e687a35 100644 --- a/pkg/forwarder/forwarder_health.go +++ b/pkg/forwarder/forwarder_health.go @@ -36,6 +36,10 @@ var ( apiKeyStatus = expvar.Map{} apiKeyFailure = expvar.Map{} + + // domainURLRegexp determines if an URL belongs to Datadog or not. If the URL belongs to Datadog it's prefixed + // with 'api.' (see computeDomainsURL). + domainURLRegexp = regexp.MustCompile(`([a-z]{2}\d\.)?(datadoghq\.[a-z]+|ddog-gov\.com)$`) ) func init() { @@ -138,14 +142,10 @@ func (fh *forwarderHealth) healthCheckLoop() { // computeDomainsURL populates a map containing API Endpoints per API keys that belongs to the forwarderHealth struct func (fh *forwarderHealth) computeDomainsURL() { for domain, dr := range fh.domainResolvers { - apiDomain := "" - re := regexp.MustCompile(`((us|eu)\d\.)?(datadoghq\.[a-z]+|ddog-gov\.com)$`) - if re.MatchString(domain) { - apiDomain = "https://api." + re.FindString(domain) - } else { - apiDomain = domain + if domainURLRegexp.MatchString(domain) { + domain = "https://api." + domainURLRegexp.FindString(domain) } - fh.keysPerAPIEndpoint[apiDomain] = append(fh.keysPerAPIEndpoint[apiDomain], dr.GetAPIKeys()...) + fh.keysPerAPIEndpoint[domain] = append(fh.keysPerAPIEndpoint[domain], dr.GetAPIKeys()...) } } diff --git a/pkg/forwarder/forwarder_health_test.go b/pkg/forwarder/forwarder_health_test.go index df8573b397787f..54a7fa342500df 100644 --- a/pkg/forwarder/forwarder_health_test.go +++ b/pkg/forwarder/forwarder_health_test.go @@ -48,6 +48,7 @@ func TestComputeDomainsURL(t *testing.T) { "https://custom.agent.datadoghq.com": {"api_key3"}, "https://app.datadoghq.eu": {"api_key4"}, "https://app.us2.datadoghq.com": {"api_key5"}, + "https://app.xx9.datadoghq.com": {"api_key5"}, "https://custom.agent.us2.datadoghq.com": {"api_key6"}, // debatable whether the next one should be changed to `api.`, preserve pre-existing behavior for now "https://app.datadoghq.internal": {"api_key7"}, @@ -60,6 +61,7 @@ func TestComputeDomainsURL(t *testing.T) { "https://api.datadoghq.com": {"api_key1", "api_key2", "api_key3"}, "https://api.datadoghq.eu": {"api_key4"}, "https://api.us2.datadoghq.com": {"api_key5", "api_key6"}, + "https://api.xx9.datadoghq.com": {"api_key5"}, "https://api.datadoghq.internal": {"api_key7"}, "https://app.myproxy.com": {"api_key8"}, "https://api.ddog-gov.com": {"api_key9", "api_key10"}, diff --git a/pkg/forwarder/forwarder_test.go b/pkg/forwarder/forwarder_test.go index cceabc44cc0920..b385dda3428639 100644 --- a/pkg/forwarder/forwarder_test.go +++ b/pkg/forwarder/forwarder_test.go @@ -10,7 +10,6 @@ import ( "io" "net/http" "net/http/httptest" - "strings" "sync" "testing" "time" @@ -130,6 +129,9 @@ func TestSubmitIfStopped(t *testing.T) { assert.NotNil(t, forwarder.SubmitSeries(nil, make(http.Header))) assert.NotNil(t, forwarder.SubmitV1Intake(nil, make(http.Header))) assert.NotNil(t, forwarder.SubmitV1CheckRuns(nil, make(http.Header))) + assert.NotNil(t, forwarder.SubmitContainerLifecycleEvents(nil, make(http.Header))) + assert.NotNil(t, forwarder.SubmitContainerImages(nil, make(http.Header))) + assert.NotNil(t, forwarder.SubmitSBOM(nil, make(http.Header))) } func TestCreateHTTPTransactions(t *testing.T) { @@ -141,7 +143,7 @@ func TestCreateHTTPTransactions(t *testing.T) { headers := make(http.Header) headers.Set("HTTP-MAGIC", "foo") - transactions := forwarder.createHTTPTransactions(endpoint, payloads, false, headers) + transactions := forwarder.createHTTPTransactions(endpoint, payloads, headers) require.Len(t, transactions, 4) assert.Equal(t, testVersionDomain, transactions[0].Domain) assert.Equal(t, testVersionDomain, transactions[1].Domain) @@ -161,13 +163,6 @@ func TestCreateHTTPTransactions(t *testing.T) { assert.Equal(t, p1, transactions[1].Payload.GetContent()) assert.Equal(t, p2, transactions[2].Payload.GetContent()) assert.Equal(t, p2, transactions[3].Payload.GetContent()) - - transactions = forwarder.createHTTPTransactions(endpoint, payloads, true, headers) - require.Len(t, transactions, 4) - assert.Contains(t, transactions[0].Endpoint.Route, "api_key=api-key-1") - assert.Contains(t, transactions[1].Endpoint.Route, "api_key=api-key-2") - assert.Contains(t, transactions[2].Endpoint.Route, "api_key=api-key-1") - assert.Contains(t, transactions[3].Endpoint.Route, "api_key=api-key-2") } func TestCreateHTTPTransactionsWithMultipleDomains(t *testing.T) { @@ -178,7 +173,7 @@ func TestCreateHTTPTransactionsWithMultipleDomains(t *testing.T) { headers := make(http.Header) headers.Set("HTTP-MAGIC", "foo") - transactions := forwarder.createHTTPTransactions(endpoint, payloads, true, headers) + transactions := forwarder.createHTTPTransactions(endpoint, payloads, headers) require.Len(t, transactions, 3, "should contain 3 transactions, contains %d", len(transactions)) var txNormal, txBar []*transaction.HTTPTransaction @@ -194,14 +189,15 @@ func TestCreateHTTPTransactionsWithMultipleDomains(t *testing.T) { assert.Equal(t, len(txNormal), 2, "Two transactions should target the normal domain") assert.Equal(t, len(txBar), 1, "One transactions should target the normal domain") - if strings.HasSuffix(txNormal[0].Endpoint.Route, "api-key-1") { - assert.Equal(t, txNormal[0].Endpoint.Route, "/api/foo?api_key=api-key-1") - assert.Equal(t, txNormal[1].Endpoint.Route, "/api/foo?api_key=api-key-2") + if txNormal[0].Headers.Get("DD-Api-Key") == "api-key-1" { + assert.Equal(t, txNormal[0].Headers.Get("DD-Api-Key"), "api-key-1") + assert.Equal(t, txNormal[1].Headers.Get("DD-Api-Key"), "api-key-2") } else { - assert.Equal(t, txNormal[0].Endpoint.Route, "/api/foo?api_key=api-key-2") - assert.Equal(t, txNormal[1].Endpoint.Route, "/api/foo?api_key=api-key-1") + assert.Equal(t, txNormal[0].Headers.Get("DD-Api-Key"), "api-key-2") + assert.Equal(t, txNormal[1].Headers.Get("DD-Api-Key"), "api-key-1") } - assert.Equal(t, txBar[0].Endpoint.Route, "/api/foo?api_key=api-key-3") + + assert.Equal(t, txBar[0].Headers.Get("DD-Api-Key"), "api-key-3") } func TestCreateHTTPTransactionsWithDifferentResolvers(t *testing.T) { @@ -216,7 +212,7 @@ func TestCreateHTTPTransactionsWithDifferentResolvers(t *testing.T) { headers := make(http.Header) headers.Set("HTTP-MAGIC", "foo") - transactions := forwarder.createHTTPTransactions(endpoint, payloads, true, headers) + transactions := forwarder.createHTTPTransactions(endpoint, payloads, headers) require.Len(t, transactions, 4, "should contain 4 transactions, contains %d", len(transactions)) var txNormal, txBar, txVector []*transaction.HTTPTransaction @@ -235,15 +231,15 @@ func TestCreateHTTPTransactionsWithDifferentResolvers(t *testing.T) { assert.Equal(t, len(txNormal), 2, "Two transactions should target the normal domain") assert.Equal(t, len(txBar), 1, "One transactions should target the normal domain") - if strings.HasSuffix(txNormal[0].Endpoint.Route, "api-key-1") { - assert.Equal(t, txNormal[0].Endpoint.Route, "/api/foo?api_key=api-key-1") - assert.Equal(t, txNormal[1].Endpoint.Route, "/api/foo?api_key=api-key-2") + if txNormal[0].Headers.Get("DD-Api-Key") == "api-key-1" { + assert.Equal(t, txNormal[0].Headers.Get("DD-Api-Key"), "api-key-1") + assert.Equal(t, txNormal[1].Headers.Get("DD-Api-Key"), "api-key-2") } else { - assert.Equal(t, txNormal[0].Endpoint.Route, "/api/foo?api_key=api-key-2") - assert.Equal(t, txNormal[1].Endpoint.Route, "/api/foo?api_key=api-key-1") + assert.Equal(t, txNormal[0].Headers.Get("DD-Api-Key"), "api-key-2") + assert.Equal(t, txNormal[1].Headers.Get("DD-Api-Key"), "api-key-1") } - assert.Equal(t, txBar[0].Endpoint.Route, "/api/foo?api_key=api-key-3") - assert.Equal(t, txVector[0].Endpoint.Route, "/api/foo?api_key=api-key-4") + assert.Equal(t, txBar[0].Headers.Get("DD-Api-Key"), "api-key-3") + assert.Equal(t, txVector[0].Headers.Get("DD-Api-Key"), "api-key-4") } func TestCreateHTTPTransactionsWithOverrides(t *testing.T) { @@ -259,17 +255,17 @@ func TestCreateHTTPTransactionsWithOverrides(t *testing.T) { headers := make(http.Header) headers.Set("HTTP-MAGIC", "foo") - transactions := forwarder.createHTTPTransactions(endpoint, payloads, true, headers) + transactions := forwarder.createHTTPTransactions(endpoint, payloads, headers) require.Len(t, transactions, 1, "should contain 1 transaction, contains %d", len(transactions)) - assert.Equal(t, transactions[0].Endpoint.Route, "/api/foo?api_key=api-key-1") + assert.Equal(t, transactions[0].Endpoint.Route, "/api/foo") assert.Equal(t, transactions[0].Domain, testVersionDomain) endpoint.Name = "diverted" - transactions = forwarder.createHTTPTransactions(endpoint, payloads, true, headers) + transactions = forwarder.createHTTPTransactions(endpoint, payloads, headers) require.Len(t, transactions, 1, "should contain 1 transaction, contains %d", len(transactions)) - assert.Equal(t, transactions[0].Endpoint.Route, "/api/foo?api_key=api-key-1") + assert.Equal(t, transactions[0].Endpoint.Route, "/api/foo") assert.Equal(t, transactions[0].Domain, "vector.tld") } @@ -283,7 +279,7 @@ func TestArbitraryTagsHTTPHeader(t *testing.T) { payload := []byte("A payload") headers := make(http.Header) - transactions := forwarder.createHTTPTransactions(endpoint, transaction.NewBytesPayloadsWithoutMetaData([]*[]byte{&payload}), false, headers) + transactions := forwarder.createHTTPTransactions(endpoint, transaction.NewBytesPayloadsWithoutMetaData([]*[]byte{&payload}), headers) require.True(t, len(transactions) > 0) assert.Equal(t, "true", transactions[0].Headers.Get(arbitraryTagHTTPHeaderKey)) } @@ -294,7 +290,7 @@ func TestSendHTTPTransactions(t *testing.T) { p1 := []byte("A payload") payloads := transaction.NewBytesPayloadsWithoutMetaData([]*[]byte{&p1}) headers := make(http.Header) - tr := forwarder.createHTTPTransactions(endpoint, payloads, false, headers) + tr := forwarder.createHTTPTransactions(endpoint, payloads, headers) // fw is stopped, we should get an error err := forwarder.sendHTTPTransactions(tr) @@ -391,6 +387,15 @@ func TestForwarderEndtoEnd(t *testing.T) { assert.Nil(t, f.SubmitMetadata(payload, headers)) numReqs += 4 + assert.Nil(t, f.SubmitContainerLifecycleEvents(payload, headers)) + numReqs += 4 + + assert.Nil(t, f.SubmitContainerImages(payload, headers)) + numReqs += 4 + + assert.Nil(t, f.SubmitSBOM(payload, headers)) + numReqs += 4 + // let's wait a second for every channel communication to trigger <-time.After(1 * time.Second) @@ -424,7 +429,7 @@ func TestTransactionEventHandlers(t *testing.T) { headers := http.Header{} headers.Set("key", "value") - transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payload, false, headers) + transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payload, headers) require.Len(t, transactions, 1) attempts := atomic.NewInt64(0) @@ -482,7 +487,7 @@ func TestTransactionEventHandlersOnRetry(t *testing.T) { headers := http.Header{} headers.Set("key", "value") - transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payload, false, headers) + transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payload, headers) require.Len(t, transactions, 1) attempts := atomic.NewInt64(0) @@ -536,7 +541,7 @@ func TestTransactionEventHandlersNotRetryable(t *testing.T) { headers := http.Header{} headers.Set("key", "value") - transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payload, false, headers) + transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payload, headers) require.Len(t, transactions, 1) attempts := atomic.NewInt64(0) @@ -595,7 +600,7 @@ func TestProcessLikePayloadResponseTimeout(t *testing.T) { headers := http.Header{} headers.Set("key", "value") - transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payload, false, headers) + transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payload, headers) require.Len(t, transactions, 1) responses, err := f.submitProcessLikePayload(endpoints.SeriesEndpoint, payload, headers, true) diff --git a/pkg/forwarder/noop_forwarder.go b/pkg/forwarder/noop_forwarder.go index 49433d3369d4e9..1f1ca7a25a295d 100644 --- a/pkg/forwarder/noop_forwarder.go +++ b/pkg/forwarder/noop_forwarder.go @@ -105,6 +105,16 @@ func (f NoopForwarder) SubmitContainerLifecycleEvents(payload transaction.BytesP return nil } +// SubmitContainerImages does nothing. +func (f NoopForwarder) SubmitContainerImages(payload transaction.BytesPayloads, extra http.Header) error { + return nil +} + +// SubmitSBOM does nothing. +func (f NoopForwarder) SubmitSBOM(payload transaction.BytesPayloads, extra http.Header) error { + return nil +} + // SubmitOrchestratorManifests does nothing. func (f NoopForwarder) SubmitOrchestratorManifests(payload transaction.BytesPayloads, extra http.Header) (chan Response, error) { return nil, nil diff --git a/pkg/forwarder/sync_forwarder.go b/pkg/forwarder/sync_forwarder.go index cef6b475dc536a..f0d2f1b4c6214a 100644 --- a/pkg/forwarder/sync_forwarder.go +++ b/pkg/forwarder/sync_forwarder.go @@ -64,19 +64,19 @@ func (f *SyncForwarder) sendHTTPTransactions(transactions []*transaction.HTTPTra // SubmitV1Series will send timeserie to v1 endpoint (this will be remove once // the backend handles v2 endpoints). func (f *SyncForwarder) SubmitV1Series(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.defaultForwarder.createHTTPTransactions(endpoints.V1SeriesEndpoint, payload, true, extra) + transactions := f.defaultForwarder.createHTTPTransactions(endpoints.V1SeriesEndpoint, payload, extra) return f.sendHTTPTransactions(transactions) } // SubmitSeries will send timeseries to the v2 endpoint func (f *SyncForwarder) SubmitSeries(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.defaultForwarder.createHTTPTransactions(endpoints.SeriesEndpoint, payload, true, extra) + transactions := f.defaultForwarder.createHTTPTransactions(endpoints.SeriesEndpoint, payload, extra) return f.sendHTTPTransactions(transactions) } // SubmitV1Intake will send payloads to the universal `/intake/` endpoint used by Agent v.5 func (f *SyncForwarder) SubmitV1Intake(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.defaultForwarder.createHTTPTransactions(endpoints.V1IntakeEndpoint, payload, true, extra) + transactions := f.defaultForwarder.createHTTPTransactions(endpoints.V1IntakeEndpoint, payload, extra) // the intake endpoint requires the Content-Type header to be set for _, t := range transactions { t.Headers.Set("Content-Type", "application/json") @@ -87,13 +87,13 @@ func (f *SyncForwarder) SubmitV1Intake(payload transaction.BytesPayloads, extra // SubmitV1CheckRuns will send service checks to v1 endpoint (this will be removed once // the backend handles v2 endpoints). func (f *SyncForwarder) SubmitV1CheckRuns(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.defaultForwarder.createHTTPTransactions(endpoints.V1CheckRunsEndpoint, payload, true, extra) + transactions := f.defaultForwarder.createHTTPTransactions(endpoints.V1CheckRunsEndpoint, payload, extra) return f.sendHTTPTransactions(transactions) } // SubmitSketchSeries will send payloads to Datadog backend - PROTOTYPE FOR PERCENTILE func (f *SyncForwarder) SubmitSketchSeries(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.defaultForwarder.createHTTPTransactions(endpoints.SketchSeriesEndpoint, payload, true, extra) + transactions := f.defaultForwarder.createHTTPTransactions(endpoints.SketchSeriesEndpoint, payload, extra) return f.sendHTTPTransactions(transactions) } @@ -161,3 +161,13 @@ func (f *SyncForwarder) SubmitOrchestratorManifests(payload transaction.BytesPay func (f *SyncForwarder) SubmitContainerLifecycleEvents(payload transaction.BytesPayloads, extra http.Header) error { return f.defaultForwarder.SubmitContainerLifecycleEvents(payload, extra) } + +// SubmitContainerImages sends container image +func (f *SyncForwarder) SubmitContainerImages(payload transaction.BytesPayloads, extra http.Header) error { + return f.defaultForwarder.SubmitContainerImages(payload, extra) +} + +// SubmitSBOM sends SBOM +func (f *SyncForwarder) SubmitSBOM(payload transaction.BytesPayloads, extra http.Header) error { + return f.defaultForwarder.SubmitSBOM(payload, extra) +} diff --git a/pkg/forwarder/test_common.go b/pkg/forwarder/test_common.go index 2525e78050d3b3..765bf901cd155a 100644 --- a/pkg/forwarder/test_common.go +++ b/pkg/forwarder/test_common.go @@ -183,3 +183,13 @@ func (tf *MockedForwarder) SubmitOrchestratorManifests(payload transaction.Bytes func (tf *MockedForwarder) SubmitContainerLifecycleEvents(payload transaction.BytesPayloads, extra http.Header) error { return tf.Called(payload, extra).Error(0) } + +// SubmitContainerImages mock +func (tf *MockedForwarder) SubmitContainerImages(payload transaction.BytesPayloads, extra http.Header) error { + return tf.Called(payload, extra).Error(0) +} + +// SubmitSBOM mock +func (tf *MockedForwarder) SubmitSBOM(payload transaction.BytesPayloads, extra http.Header) error { + return tf.Called(payload, extra).Error(0) +} diff --git a/pkg/forwarder/transaction/transaction.go b/pkg/forwarder/transaction/transaction.go index 751c31f5532270..5fbad4756d427d 100644 --- a/pkg/forwarder/transaction/transaction.go +++ b/pkg/forwarder/transaction/transaction.go @@ -300,7 +300,7 @@ func (t *HTTPTransaction) internalProcess(ctx context.Context, client *http.Clie transactionEndpointName := t.GetEndpointName() logURL := scrubber.ScrubLine(url) // sanitized url that can be logged - req, err := http.NewRequest("POST", url, reader) + req, err := http.NewRequestWithContext(ctx, "POST", url, reader) if err != nil { log.Errorf("Could not create request for transaction to invalid URL %q (dropping transaction): %s", logURL, err) transactionsErrors.Add(1) @@ -308,7 +308,6 @@ func (t *HTTPTransaction) internalProcess(ctx context.Context, client *http.Clie transactionsSentRequestErrors.Add(1) return 0, nil, nil } - req = req.WithContext(ctx) req.Header = t.Headers resp, err := client.Do(req) diff --git a/pkg/jmxfetch/jmxfetch.go b/pkg/jmxfetch/jmxfetch.go index f956ccecda5de7..567c3821967403 100644 --- a/pkg/jmxfetch/jmxfetch.go +++ b/pkg/jmxfetch/jmxfetch.go @@ -108,7 +108,7 @@ type checkInitCfg struct { JavaOptions string `yaml:"java_options,omitempty"` } -// Monitor TODO : IML-199 +// Monitor monitors this JMXFetch instance, waiting for JMX to stop. Gracefully handles restarting the JMXFetch process. func (j *JMXFetch) Monitor() { limiter := newRestartLimiter(config.Datadog.GetInt("jmx_max_restarts"), float64(config.Datadog.GetInt("jmx_restart_interval"))) ticker := time.NewTicker(500 * time.Millisecond) diff --git a/pkg/logs/agent.go b/pkg/logs/agent.go index 1f5a3537f4094e..c66546f5612d1e 100644 --- a/pkg/logs/agent.go +++ b/pkg/logs/agent.go @@ -17,13 +17,10 @@ import ( "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers" "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers/channel" "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers/container" - "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers/docker" filelauncher "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers/file" "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers/journald" - "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers/kubernetes" "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers/listener" "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers/windowsevent" - "github.com/DataDog/datadog-agent/pkg/logs/internal/util/containersorpods" "github.com/DataDog/datadog-agent/pkg/logs/pipeline" "github.com/DataDog/datadog-agent/pkg/logs/schedulers" "github.com/DataDog/datadog-agent/pkg/logs/service" @@ -67,8 +64,6 @@ func NewAgent(sources *sources.LogSources, services *service.Services, processin // setup the pipeline provider that provides pairs of processor and sender pipelineProvider := pipeline.NewProvider(config.NumberOfPipelines, auditor, diagnosticMessageReceiver, processingRules, endpoints, destinationsCtx) - cop := containersorpods.NewChooser() - // setup the launchers lnchrs := launchers.NewLaunchers(sources, pipelineProvider, auditor) lnchrs.AddLauncher(filelauncher.NewLauncher( @@ -80,22 +75,7 @@ func NewAgent(sources *sources.LogSources, services *service.Services, processin lnchrs.AddLauncher(listener.NewLauncher(coreConfig.Datadog.GetInt("logs_config.frame_size"))) lnchrs.AddLauncher(journald.NewLauncher()) lnchrs.AddLauncher(windowsevent.NewLauncher()) - if !util.CcaInAD() { - lnchrs.AddLauncher(docker.NewLauncher( - time.Duration(coreConfig.Datadog.GetInt("logs_config.docker_client_read_timeout"))*time.Second, - sources, - services, - cop, - coreConfig.Datadog.GetBool("logs_config.docker_container_use_file"), - coreConfig.Datadog.GetBool("logs_config.docker_container_force_use_file"))) - lnchrs.AddLauncher(kubernetes.NewLauncher( - sources, - services, - cop, - coreConfig.Datadog.GetBool("logs_config.container_collect_all"))) - } else { - lnchrs.AddLauncher(container.NewLauncher(sources)) - } + lnchrs.AddLauncher(container.NewLauncher(sources)) return &Agent{ sources: sources, diff --git a/pkg/logs/internal/launchers/container/tailerfactory/tailers/socket.go b/pkg/logs/internal/launchers/container/tailerfactory/tailers/socket.go index 5c9b97034f5bd9..8f56f49f37d723 100644 --- a/pkg/logs/internal/launchers/container/tailerfactory/tailers/socket.go +++ b/pkg/logs/internal/launchers/container/tailerfactory/tailers/socket.go @@ -13,12 +13,13 @@ import ( "time" "github.com/DataDog/datadog-agent/pkg/logs/auditor" - dockerLaunchersPkg "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers/docker" dockerTailerPkg "github.com/DataDog/datadog-agent/pkg/logs/internal/tailers/docker" "github.com/DataDog/datadog-agent/pkg/logs/message" "github.com/DataDog/datadog-agent/pkg/logs/sources" dockerutilPkg "github.com/DataDog/datadog-agent/pkg/util/docker" "github.com/DataDog/datadog-agent/pkg/util/log" + + "github.com/DataDog/datadog-agent/pkg/logs/config" ) var ( @@ -81,7 +82,7 @@ func (t *DockerSocketTailer) tryStartTailer() (*dockerTailerPkg.Tailer, chan str t.pipeline, erroredContainerID, t.readTimeout) - since, err := dockerLaunchersPkg.Since(t.registry, inner.Identifier()) + since, err := since(t.registry, inner.Identifier()) if err != nil { log.Warnf("Could not recover tailing from last committed offset %v: %v", dockerutilPkg.ShortContainerID(t.ContainerID), err) @@ -166,3 +167,31 @@ func (t *DockerSocketTailer) run( } } } + +// since returns the date from when logs should be collected. +func since(registry auditor.Registry, identifier string) (time.Time, error) { + var since time.Time + var err error + offset := registry.GetOffset(identifier) + switch { + case isEOFCorruptedOffset(offset): + since = time.Time{} + case offset != "": + // an offset was registered, tail from the offset + since, err = time.Parse(config.DateFormat, offset) + if err != nil { + since = time.Now().UTC() + } + default: + // a new service has been discovered and was launched after the agent start, tail from the beginning + since = time.Time{} + } + return since, err +} + +// isEOFCorruptedOffset return true if the offset doesn't contain a +// valid timestamp value due to a file rotation. +func isEOFCorruptedOffset(offset string) bool { + // check if the offset value is equal to EOF char + return len(offset) > 0 && offset[0] == 0x03 +} diff --git a/pkg/logs/internal/launchers/docker/container.go b/pkg/logs/internal/launchers/docker/container.go deleted file mode 100644 index 1b637a5af8f455..00000000000000 --- a/pkg/logs/internal/launchers/docker/container.go +++ /dev/null @@ -1,229 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build docker -// +build docker - -package docker - -import ( - "context" - "fmt" - "regexp" - "strings" - - "github.com/docker/docker/api/types" - - "github.com/DataDog/datadog-agent/pkg/util/containers" - dockerUtil "github.com/DataDog/datadog-agent/pkg/util/docker" - "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/DataDog/datadog-agent/pkg/workloadmeta" - - "github.com/DataDog/datadog-agent/pkg/logs/service" - sourcesPkg "github.com/DataDog/datadog-agent/pkg/logs/sources" -) - -const ( - // configPath refers to the configuration that can be passed over a - // docker label or a pod annotation, this feature is commonly named - // 'ad' or 'autodicovery'. - configPath = "com.datadoghq.ad.logs" - - annotationConfigPathPrefix = "ad.datadoghq.com" - annotationConfigPathSuffix = "logs" -) - -// Container represents a container to tail logs from. -type Container struct { - container types.ContainerJSON - service *service.Service -} - -// NewContainer returns a new Container -func NewContainer(container types.ContainerJSON, service *service.Service) *Container { - return &Container{ - container: container, - service: service, - } -} - -// FindSource returns the source that most likely matches the container, -// if no source is found return nil -func (c *Container) FindSource(sources []*sourcesPkg.LogSource) *sourcesPkg.LogSource { - var bestMatch *sourcesPkg.LogSource - for _, source := range sources { - if source.Config.Identifier != "" && c.isIdentifierMatch(source.Config.Identifier) { - // perfect match between the source and the container - return source - } - if !c.IsMatch(source) { - continue - } - if bestMatch == nil { - bestMatch = source - } - if c.computeScore(bestMatch) < c.computeScore(source) { - bestMatch = source - } - } - return bestMatch -} - -// getShortImageName resolves the short image name of a container by calling the docker daemon -// This call is blocking -func (c *Container) getShortImageName(ctx context.Context) (string, error) { - var ( - err error - shortName string - ) - - du, err := dockerUtil.GetDockerUtil() - if err != nil { - log.Debugf("Cannot get DockerUtil: %v", err) - return shortName, err - } - imageName := c.container.Image - imageName, err = du.ResolveImageName(ctx, imageName) - if err != nil { - log.Debugf("Could not resolve image name %s: %s", imageName, err) - return shortName, err - } - _, shortName, _, err = containers.SplitImageName(imageName) - if err != nil { - log.Debugf("Cannot parse image name: %v", err) - } - return shortName, err -} - -// computeScore returns the matching score between the container and the source. -func (c *Container) computeScore(source *sourcesPkg.LogSource) int { - score := 0 - if c.isImageMatch(source.Config.Image) { - score++ - } - if c.isLabelMatch(source.Config.Label) { - score++ - } - if c.isNameMatch(source.Config.Name) { - score++ - } - return score -} - -// IsMatch returns true if the source matches with the container. -func (c *Container) IsMatch(source *sourcesPkg.LogSource) bool { - if (source.Config.Identifier != "" || c.ContainsADIdentifier()) && !c.isIdentifierMatch(source.Config.Identifier) { - // there is only one source matching a container when it contains an autodiscovery identifier, - // the one which has an identifier equals to the container identifier. - return false - } - if source.Config.Image != "" && !c.isImageMatch(source.Config.Image) { - return false - } - if source.Config.Label != "" && !c.isLabelMatch(source.Config.Label) { - return false - } - if source.Config.Name != "" && !c.isNameMatch(source.Config.Name) { - return false - } - return true -} - -// isIdentifierMatch returns if identifier matches with container identifier. -func (c *Container) isIdentifierMatch(identifier string) bool { - return c.container.ID == identifier -} - -// digestPrefix represents a prefix that can be added to an image name. -const digestPrefix = "@sha256:" - -// tagSeparator represents the separator in between an image name and its tag. -const tagSeparator = ":" - -// isImageMatch returns true if the image of the container matches with imageFilter. -// The image of a container can have the following formats: -// - '[/]image[:]', -// - '[/]image[@sha256:]' -// The imageFilter must respect the format '[/]image[:]'. -func (c *Container) isImageMatch(imageFilter string) bool { - // Trim digest if present - split := strings.SplitN(c.container.Config.Image, digestPrefix, 2) - image := split[0] - if !strings.Contains(imageFilter, tagSeparator) { - // trim tag if present - split := strings.SplitN(image, tagSeparator, 2) - image = split[0] - } - // Expect prefix to end with '/' - repository := strings.TrimSuffix(image, imageFilter) - return len(repository) == 0 || strings.HasSuffix(repository, "/") -} - -// isNameMatch returns true if one of the container name matches with the filter. -func (c *Container) isNameMatch(nameFilter string) bool { - re, err := regexp.Compile(nameFilter) - if err != nil { - log.Warn("used invalid name to filter containers: ", nameFilter) - return false - } - if name := c.container.Name; name != "" { - if re.MatchString(name) { - return true - } - } - return false -} - -// isLabelMatch returns true if container labels contains at least one label from labelFilter. -func (c *Container) isLabelMatch(labelFilter string) bool { - // Expect a comma-separated list of labels, eg: foo:bar, baz - for _, value := range strings.Split(labelFilter, ",") { - // Trim whitespace, then check whether the label format is either key:value or key=value - label := strings.TrimSpace(value) - parts := strings.FieldsFunc(label, func(c rune) bool { - return c == ':' || c == '=' - }) - // If we have exactly two parts, check there is a container label that matches both. - // Otherwise fall back to checking the whole label exists as a key. - if _, exists := c.container.Config.Labels[label]; exists || len(parts) == 2 && c.container.Config.Labels[parts[0]] == parts[1] { - return true - } - } - return false -} - -// ContainsADIdentifier returns true if the container contains an autodiscovery identifier, -// searching first in the docker labels, then in the pod specs. -func (c *Container) ContainsADIdentifier() bool { - var exists bool - _, exists = c.container.Config.Labels[configPath] - if exists { - return true - } - - pod, err := workloadmeta.GetGlobalStore().GetKubernetesPodForContainer(c.service.Identifier) - if err != nil { - return false - } - - for _, container := range pod.Containers { - if container.ID == c.service.Identifier { - // looks for the container name specified in the pod - // manifest as it's different from the name of the - // container returns by a docker inspect which is a - // concatenation of the container name specified in the - // pod manifest and a hash - _, exists = pod.Annotations[annotationConfigPath(container.Name)] - return exists - } - } - - return false -} - -// annotationConfigPath returns the path of a logs-config passed in a pod annotation. -func annotationConfigPath(containerName string) string { - return fmt.Sprintf("%s/%s.%s", annotationConfigPathPrefix, containerName, annotationConfigPathSuffix) -} diff --git a/pkg/logs/internal/launchers/docker/container_test.go b/pkg/logs/internal/launchers/docker/container_test.go deleted file mode 100644 index 4e18a821b6e152..00000000000000 --- a/pkg/logs/internal/launchers/docker/container_test.go +++ /dev/null @@ -1,348 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build docker -// +build docker - -package docker - -import ( - "testing" - - "github.com/docker/docker/api/types" - types_container "github.com/docker/docker/api/types/container" - "github.com/stretchr/testify/assert" - - "github.com/DataDog/datadog-agent/pkg/logs/config" - "github.com/DataDog/datadog-agent/pkg/logs/service" - "github.com/DataDog/datadog-agent/pkg/logs/sources" -) - -func TestFindSourceWithSourceFiltersShouldSucceed(t *testing.T) { - var source *sources.LogSource - var container *Container - - sources := []*sources.LogSource{ - sources.NewLogSource("", &config.LogsConfig{Type: config.DockerType, Image: "myapp"}), - sources.NewLogSource("", &config.LogsConfig{Type: config.DockerType, Label: "mylabel"}), - sources.NewLogSource("", &config.LogsConfig{Type: config.DockerType, Image: "myapp", Label: "mylabel"}), - sources.NewLogSource("", &config.LogsConfig{Type: config.DockerType, Identifier: "1234567890"}), - } - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "myapp"}}, - &service.Service{}) - source = container.FindSource(sources) - assert.NotNil(t, source) - assert.Equal(t, source, sources[0]) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{ - Image: "wrongapp", - Labels: map[string]string{"mylabel": "anything"}}}, - &service.Service{}) - source = container.FindSource(sources) - assert.NotNil(t, source) - assert.Equal(t, source, sources[1]) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{ - Image: "myapp", - Labels: map[string]string{"mylabel": "anything"}}}, - &service.Service{}) - source = container.FindSource(sources) - assert.NotNil(t, source) - assert.Equal(t, source, sources[2]) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{ID: "1234567890"}, - Config: &types_container.Config{Labels: map[string]string{"com.datadoghq.ad.logs": "[{}]"}}}, - &service.Service{}) - source = container.FindSource(sources) - assert.NotNil(t, source) - assert.Equal(t, source, sources[3]) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{ID: "0987654321"}, - Config: &types_container.Config{Labels: map[string]string{"com.datadoghq.ad.logs": "[{}]"}}}, - &service.Service{}) - source = container.FindSource(sources) - assert.Nil(t, source) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "wrongapp"}}, - &service.Service{}) - source = container.FindSource(sources) - assert.Nil(t, source) -} - -func TestFindSourceWithNoSourceFilterShouldSucceed(t *testing.T) { - var source *sources.LogSource - var container *Container - - sources := []*sources.LogSource{ - sources.NewLogSource("", &config.LogsConfig{Type: config.DockerType}), - sources.NewLogSource("", &config.LogsConfig{Type: config.DockerType, Label: "mylabel"}), - } - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{ - Image: "myapp", - Labels: map[string]string{"mylabel": "anything"}}}, - &service.Service{}) - source = container.FindSource(sources) - assert.NotNil(t, source) - assert.Equal(t, source, sources[1]) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "wrongapp"}}, - &service.Service{}) - source = container.FindSource(sources) - assert.NotNil(t, source) - assert.Equal(t, source, sources[0]) -} - -func TestIsImageMatch(t *testing.T) { - var container *Container - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "myapp"}}, - nil) - assert.True(t, container.isImageMatch("myapp")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "repository/myapp"}}, - nil) - assert.True(t, container.isImageMatch("myapp")) - assert.True(t, container.isImageMatch("repository/myapp")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "myapp@sha256:1234567890"}}, - nil) - assert.True(t, container.isImageMatch("myapp")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "repository/myapp@sha256:1234567890"}}, - nil) - assert.True(t, container.isImageMatch("myapp")) - assert.True(t, container.isImageMatch("repository/myapp")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "repository/myapp:latest"}}, - nil) - assert.True(t, container.isImageMatch("myapp")) - assert.True(t, container.isImageMatch("myapp:latest")) - assert.True(t, container.isImageMatch("repository/myapp")) - assert.True(t, container.isImageMatch("repository/myapp:latest")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "myapp:latest"}}, - nil) - assert.True(t, container.isImageMatch("myapp")) - assert.True(t, container.isImageMatch("myapp:latest")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "repositorymyapp"}}, - nil) - assert.False(t, container.isImageMatch("myapp")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "myapp2"}}, - nil) - assert.False(t, container.isImageMatch("myapp")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "myapp2@sha256:1234567890"}}, - nil) - assert.False(t, container.isImageMatch("myapp")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "repository/myapp2"}}, - nil) - assert.False(t, container.isImageMatch("myapp")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "repository/myapp2@sha256:1234567890"}}, - nil) - assert.False(t, container.isImageMatch("myapp")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "repository/myapp2:latest"}}, - nil) - assert.False(t, container.isImageMatch("myapp")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "myapp2:latest"}}, - nil) - assert.False(t, container.isImageMatch("myapp")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "myapp"}}, - nil) - assert.False(t, container.isImageMatch("dd/myapp")) - assert.False(t, container.isImageMatch("myapp:latest")) - assert.False(t, container.isImageMatch("dd/myapp:latest")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "repository/myapp"}}, - nil) - assert.False(t, container.isImageMatch("dd/myapp")) - assert.False(t, container.isImageMatch("myapp:latest")) - assert.False(t, container.isImageMatch("dd/myapp:latest")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "repository/myapp:latest"}}, - nil) - assert.False(t, container.isImageMatch("dd/myapp")) - assert.False(t, container.isImageMatch("myapp:foo")) - assert.False(t, container.isImageMatch("repository/myapp:foo")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "myapp:latest"}}, - nil) - assert.False(t, container.isImageMatch("myapp:foo")) - assert.False(t, container.isImageMatch("repository/myapp")) - assert.False(t, container.isImageMatch("repository/myapp:foo")) -} - -func TestIsLabelMatch(t *testing.T) { - var container *Container - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"bar": ""}}}, - nil) - assert.False(t, container.isLabelMatch("foo")) - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"foo": ""}}}, - nil) - assert.True(t, container.isLabelMatch("foo")) - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"foo": "bar"}}}, - nil) - assert.True(t, container.isLabelMatch("foo")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"bar": ""}}}, - nil) - assert.False(t, container.isLabelMatch("foo:bar")) - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"foo": ""}}}, - nil) - assert.False(t, container.isLabelMatch("foo:bar")) - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"foo": "bar"}}}, - nil) - assert.True(t, container.isLabelMatch("foo:bar")) - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"foo:bar": ""}}}, - nil) - assert.True(t, container.isLabelMatch("foo:bar")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"foo": ""}}}, - nil) - assert.False(t, container.isLabelMatch("foo:bar:baz")) - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"foo": "bar"}}}, - nil) - assert.False(t, container.isLabelMatch("foo:bar:baz")) - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"foo": "bar:baz"}}}, - nil) - assert.False(t, container.isLabelMatch("foo:bar:baz")) - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"foo:bar": "baz"}}}, - nil) - assert.False(t, container.isLabelMatch("foo:bar:baz")) - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"foo:bar:baz": ""}}}, - nil) - assert.True(t, container.isLabelMatch("foo:bar:baz")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"bar": ""}}}, - nil) - assert.False(t, container.isLabelMatch("foo=bar")) - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"foo": ""}}}, - nil) - assert.False(t, container.isLabelMatch("foo=bar")) - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"foo": "bar"}}}, - nil) - assert.True(t, container.isLabelMatch("foo=bar")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"foo": "bar"}}}, - nil) - assert.True(t, container.isLabelMatch(" a , b:c , foo:bar , d=e ")) -} - -func TestIsNameMatch(t *testing.T) { - var container *Container - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{Name: "foo"}}, - nil) - assert.True(t, container.isNameMatch("foo")) - assert.True(t, container.isNameMatch("")) - assert.False(t, container.isNameMatch("boo")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{Name: "/api/v1/pods/foo"}}, - nil) - assert.True(t, container.isNameMatch("foo")) - assert.True(t, container.isNameMatch("")) - assert.False(t, container.isNameMatch("boo")) -} - -func TestIsIdentifierMatch(t *testing.T) { - container := NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{ID: "1234567890"}}, - nil) - assert.True(t, container.isIdentifierMatch("1234567890")) - assert.False(t, container.isNameMatch("")) - assert.False(t, container.isNameMatch("docker://1234567890")) - assert.False(t, container.isNameMatch("0987654321")) -} diff --git a/pkg/logs/internal/launchers/docker/launcher.go b/pkg/logs/internal/launchers/docker/launcher.go deleted file mode 100644 index 2fa357acc61b25..00000000000000 --- a/pkg/logs/internal/launchers/docker/launcher.go +++ /dev/null @@ -1,496 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build docker -// +build docker - -package docker - -import ( - "context" - "fmt" - "sync" - "time" - - "github.com/DataDog/datadog-agent/pkg/logs/auditor" - "github.com/DataDog/datadog-agent/pkg/logs/config" - "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers" - "github.com/DataDog/datadog-agent/pkg/logs/internal/status" - tailer "github.com/DataDog/datadog-agent/pkg/logs/internal/tailers/docker" - "github.com/DataDog/datadog-agent/pkg/logs/internal/util" - "github.com/DataDog/datadog-agent/pkg/logs/internal/util/containersorpods" - "github.com/DataDog/datadog-agent/pkg/logs/pipeline" - "github.com/DataDog/datadog-agent/pkg/logs/service" - "github.com/DataDog/datadog-agent/pkg/logs/sources" - "github.com/DataDog/datadog-agent/pkg/util/containers" - dockerutilpkg "github.com/DataDog/datadog-agent/pkg/util/docker" - "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/DataDog/datadog-agent/pkg/util/startstop" -) - -const ( - backoffInitialDuration = 1 * time.Second - backoffMaxDuration = 60 * time.Second -) - -type sourceInfoPair struct { - source *sources.LogSource - info *status.MappedInfo -} - -// A Launcher starts and stops new tailers for every new containers discovered by autodiscovery. -type Launcher struct { - pipelineProvider pipeline.Provider - activeSources []*sources.LogSource - pendingContainers map[string]*Container - tailers map[string]*tailer.Tailer - registry auditor.Registry - erroredContainerID chan string - lock *sync.Mutex - collectAllSource *sources.LogSource - collectAllInfo *status.MappedInfo - readTimeout time.Duration // client read timeout to set on the created tailer - serviceNameFunc func(string, string) string // serviceNameFunc gets the service name from the tagger, it is in a separate field for testing purpose - - forceTailingFromFile bool // will ignore known offset and always tail from file - tailFromFile bool // If true docker will be tailed from the corresponding log file - fileSourcesByContainer map[string]sourceInfoPair // Keep track of locally generated sources - sources *sources.LogSources // To schedule file source when taileing container from file - services *service.Services - cop containersorpods.Chooser - - // ctx is the context for the running goroutine, set in Start - ctx context.Context - - // cancel cancels the running goroutine - cancel context.CancelFunc -} - -// NewLauncher returns a new launcher -func NewLauncher(readTimeout time.Duration, sources *sources.LogSources, services *service.Services, cop containersorpods.Chooser, tailFromFile, forceTailingFromFile bool) *Launcher { - launcher := &Launcher{ - tailers: make(map[string]*tailer.Tailer), - pendingContainers: make(map[string]*Container), - erroredContainerID: make(chan string), - lock: &sync.Mutex{}, - readTimeout: readTimeout, - serviceNameFunc: util.ServiceNameFromTags, - sources: sources, - services: services, - cop: cop, - forceTailingFromFile: forceTailingFromFile, - tailFromFile: tailFromFile, - fileSourcesByContainer: make(map[string]sourceInfoPair), - collectAllInfo: status.NewMappedInfo("Container Info"), - } - - if tailFromFile { - if err := checkReadAccess(); err != nil { - log.Errorf("Could not access container log files: %v; falling back on tailing from container runtime socket", err) - launcher.tailFromFile = false - } - } - - return launcher -} - -// Start starts the Launcher -func (l *Launcher) Start(sourceProvider launchers.SourceProvider, pipelineProvider pipeline.Provider, registry auditor.Registry) { - // only start this launcher once it's determined that we should be logging containers, and not pods. - l.ctx, l.cancel = context.WithCancel(context.Background()) - go l.run(sourceProvider, pipelineProvider, registry) -} - -// Stop stops the Launcher and its tailers in parallel, -// this call returns only when all the tailers are stopped. -func (l *Launcher) Stop() { - if l.cancel != nil { - l.cancel() - } - - // only stop this launcher once it's determined that we should be logging - // containers, and not pods, but do not block trying to find out. - if l.cop.Get() == containersorpods.LogContainers { - stopper := startstop.NewParallelStopper() - l.lock.Lock() - var containerIDs []string - for _, tailer := range l.tailers { - stopper.Add(tailer) - containerIDs = append(containerIDs, tailer.ContainerID) - } - l.lock.Unlock() - for _, containerID := range containerIDs { - l.removeTailer(containerID) - } - stopper.Stop() - } -} - -// run starts and stops new tailers when it receives a new source -// or a new service which is mapped to a container. -func (l *Launcher) run(sourceProvider launchers.SourceProvider, pipelineProvider pipeline.Provider, registry auditor.Registry) { - // if we're not logging containers, then there's nothing to do - if l.cop.Wait(l.ctx) != containersorpods.LogContainers { - return - } - - log.Info("Starting Docker launcher") - l.pipelineProvider = pipelineProvider - l.registry = registry - - addedSources, removedSources := sourceProvider.SubscribeForType(config.DockerType) - addedServices := l.services.GetAddedServicesForType(config.DockerType) - removedServices := l.services.GetRemovedServicesForType(config.DockerType) - - for { - select { - case service := <-addedServices: - // detected a new container running on the host, - dockerutil, err := dockerutilpkg.GetDockerUtil() - if err != nil { - log.Warnf("Could not use docker client, logs for container %s won’t be collected: %v", service.Identifier, err) - continue - } - dockerContainer, err := dockerutil.Inspect(context.TODO(), service.Identifier, false) - if err != nil { - log.Warnf("Could not find container with id: %v", err) - continue - } - container := NewContainer(dockerContainer, service) - source := container.FindSource(l.activeSources) - switch { - case source != nil: - // a source matches with the container, start a new tailer - l.startTailer(container, source) - default: - // no source matches with the container but a matching source may not have been - // emitted yet or the container may contain an autodiscovery identifier - // so it's put in a cache until a matching source is found. - l.pendingContainers[service.Identifier] = container - } - case source := <-addedSources: - // detected a new source that has been created either from a configuration file, - // a docker label or a pod annotation. - l.activeSources = append(l.activeSources, source) - pendingContainers := make(map[string]*Container) - for _, container := range l.pendingContainers { - if container.IsMatch(source) { - // found a container matching the new source, start a new tailer - l.startTailer(container, source) - } else { - // keep the container in cache until - pendingContainers[container.service.Identifier] = container - } - } - // keep the containers that have not found any source yet for next iterations - l.pendingContainers = pendingContainers - case source := <-removedSources: - for i, src := range l.activeSources { - if src == source { - // no need to stop any tailer here, it will be stopped after receiving a - // "remove service" event. - l.activeSources = append(l.activeSources[:i], l.activeSources[i+1:]...) - break - } - } - case service := <-removedServices: - // detected that a container has been stopped. - containerID := service.Identifier - l.stopTailer(containerID) - delete(l.pendingContainers, containerID) - case containerID := <-l.erroredContainerID: - go l.restartTailer(containerID) - case <-l.ctx.Done(): - // no docker container should be tailed anymore - log.Info("Stopping Docker launcher") - return - } - } -} - -// overrideSource create a new source with the image short name if the source is ContainerCollectAll -func (l *Launcher) overrideSource(container *Container, source *sources.LogSource) *sources.LogSource { - standardService := l.serviceNameFunc(container.container.Name, containers.BuildTaggerEntityName(container.container.ID)) - if source.Name != config.ContainerCollectAll { - if source.Config.Service == "" && standardService != "" { - source.Config.Service = standardService - } - return source - } - - if l.collectAllSource == nil { - l.collectAllSource = source - l.collectAllSource.RegisterInfo(l.collectAllInfo) - } - - shortName, err := container.getShortImageName(context.TODO()) - containerID := container.service.Identifier - if err != nil { - log.Warnf("Could not get short image name for container %v: %v", dockerutilpkg.ShortContainerID(containerID), err) - return source - } - - l.collectAllInfo.SetMessage(containerID, fmt.Sprintf("Container ID: %s, Image: %s, Created: %s, Tailing from the Docker socket", dockerutilpkg.ShortContainerID(containerID), shortName, container.container.Created)) - - newSource := newOverridenSource(standardService, shortName, source.Status) - newSource.ParentSource = source - return newSource -} - -// getFileSource create a new file source with the image short name if the source is ContainerCollectAll -func (l *Launcher) getFileSource(container *Container, source *sources.LogSource) sourceInfoPair { - containerID := container.service.Identifier - - // If containerCollectAll is set - we use the global collectAllInfo, otherwise we create a new info for this source - var sourceInfo *status.MappedInfo - - // Populate the collectAllSource if we don't have it yet - if source.Name == config.ContainerCollectAll && l.collectAllSource == nil { - l.collectAllSource = source - l.collectAllSource.RegisterInfo(l.collectAllInfo) - sourceInfo = l.collectAllInfo - } else { - sourceInfo = status.NewMappedInfo("Container Info") - source.RegisterInfo(sourceInfo) - } - - standardService := l.serviceNameFunc(container.container.Name, containers.BuildTaggerEntityName(containerID)) - shortName, err := container.getShortImageName(context.TODO()) - if err != nil { - log.Warnf("Could not get short image name for container %v: %v", dockerutilpkg.ShortContainerID(containerID), err) - } - - // Update parent source with additional information - sourceInfo.SetMessage(containerID, fmt.Sprintf("Container ID: %s, Image: %s, Created: %s, Tailing from file: %s", dockerutilpkg.ShortContainerID(containerID), shortName, container.container.Created, getPath(containerID))) - - // When ContainerCollectAll is not enabled, we try to derive the service and source names from container labels - // provided by AD (in this case, the parent source config). Otherwise we use the standard service or short image - // name for the service name and always use the short image name for the source name. - var serviceName string - if source.Name != config.ContainerCollectAll && source.Config.Service != "" { - serviceName = source.Config.Service - } else if standardService != "" { - serviceName = standardService - } else { - serviceName = shortName - } - - sourceName := shortName - if source.Name != config.ContainerCollectAll && source.Config.Source != "" { - sourceName = source.Config.Source - } - - // New file source that inherit most of its parent properties - fileSource := sources.NewLogSource(source.Name, &config.LogsConfig{ - Type: config.FileType, - Identifier: containerID, - Path: getPath(containerID), - Service: serviceName, - Source: sourceName, - Tags: source.Config.Tags, - ProcessingRules: source.Config.ProcessingRules, - }) - fileSource.SetSourceType(sources.DockerSourceType) - fileSource.Status = source.Status - fileSource.ParentSource = source - return sourceInfoPair{source: fileSource, info: sourceInfo} -} - -// newOverridenSource is separated from overrideSource for testing purpose -func newOverridenSource(standardService, shortName string, status *status.LogStatus) *sources.LogSource { - var serviceName string - if standardService != "" { - serviceName = standardService - } else { - serviceName = shortName - } - - overridenSource := sources.NewLogSource(config.ContainerCollectAll, &config.LogsConfig{ - Type: config.DockerType, - Service: serviceName, - Source: shortName, - }) - overridenSource.Status = status - return overridenSource -} - -// startTailer starts a new tailer for the container matching with the source. -func (l *Launcher) startTailer(container *Container, source *sources.LogSource) { - if l.shouldTailFromFile(container) { - l.scheduleFileSource(container, source) - } else { - l.startSocketTailer(container, source) - } -} - -func (l *Launcher) shouldTailFromFile(container *Container) bool { - if !l.tailFromFile { - return false - } - // Unsure this one is really useful, user could be instructed to clean up the registry - if l.forceTailingFromFile { - return true - } - // Check if there is a known offset for that container, if so keep tailing - // the container from the docker socket - registryID := fmt.Sprintf("docker:%s", container.service.Identifier) - offset := l.registry.GetOffset(registryID) - return offset == "" -} - -func (l *Launcher) scheduleFileSource(container *Container, source *sources.LogSource) { - containerID := container.service.Identifier - if _, isTailed := l.fileSourcesByContainer[containerID]; isTailed { - log.Warnf("Can't tail twice the same container: %v", dockerutilpkg.ShortContainerID(containerID)) - return - } - // fileSource is a new source using the original source as its parent - fileSource := l.getFileSource(container, source) - fileSource.source.ParentSource.HideFromStatus() - - // Keep source for later unscheduling - l.fileSourcesByContainer[containerID] = fileSource - l.sources.AddSource(fileSource.source) -} - -func (l *Launcher) unscheduleFileSource(containerID string) { - if sourcePair, exists := l.fileSourcesByContainer[containerID]; exists { - sourcePair.info.RemoveMessage(containerID) - delete(l.fileSourcesByContainer, containerID) - l.sources.RemoveSource(sourcePair.source) - } -} - -func (l *Launcher) startSocketTailer(container *Container, source *sources.LogSource) { - containerID := container.service.Identifier - if _, isTailed := l.getTailer(containerID); isTailed { - log.Warnf("Can't tail twice the same container: %v", dockerutilpkg.ShortContainerID(containerID)) - return - } - dockerutil, err := dockerutilpkg.GetDockerUtil() - if err != nil { - log.Warnf("Could not use docker client, logs for container %s won’t be collected: %v", containerID, err) - return - } - // overridenSource == source if the containerCollectAll option is not activated or the container has AD labels - overridenSource := l.overrideSource(container, source) - tailer := tailer.NewTailer(dockerutil, containerID, overridenSource, l.pipelineProvider.NextPipelineChan(), l.erroredContainerID, l.readTimeout) - - // compute the offset to prevent from missing or duplicating logs - since, err := Since(l.registry, tailer.Identifier()) - if err != nil { - log.Warnf("Could not recover tailing from last committed offset %v: %v", dockerutilpkg.ShortContainerID(containerID), err) - } - - // start the tailer - err = tailer.Start(since) - if err != nil { - log.Warnf("Could not start tailer %s: %v", containerID, err) - return - } - source.AddInput(containerID) - - // keep the tailer in track to stop it later on - l.addTailer(containerID, tailer) -} - -// stopTailer stops the tailer matching the containerID. -func (l *Launcher) stopTailer(containerID string) { - if l.tailFromFile { - l.unscheduleFileSource(containerID) - } else { - l.stopSocketTailer(containerID) - } -} - -func (l *Launcher) stopSocketTailer(containerID string) { - if tailer, isTailed := l.getTailer(containerID); isTailed { - // No-op if the tailer source came from AD - if l.collectAllSource != nil { - l.collectAllSource.RemoveInput(containerID) - l.collectAllInfo.RemoveMessage(containerID) - } - go tailer.Stop() - l.removeTailer(containerID) - } -} - -func (l *Launcher) restartTailer(containerID string) { - // It should never happen - if l.tailFromFile { - return - } - backoffDuration := backoffInitialDuration - cumulatedBackoff := 0 * time.Second - var source *sources.LogSource - - if oldTailer, exists := l.getTailer(containerID); exists { - source = oldTailer.Source - if l.collectAllSource != nil { - l.collectAllSource.RemoveInput(containerID) - l.collectAllInfo.RemoveMessage(containerID) - } - oldTailer.Stop() - l.removeTailer(containerID) - } else { - log.Warnf("Unable to restart tailer, old source not found, keeping previous one, container: %s", containerID) - return - } - - dockerutil, err := dockerutilpkg.GetDockerUtil() - if err != nil { - // This cannot happen since, if we have a tailer to restart, it means that we created - // it earlier and we couldn't have created it if the docker client wasn't initialized. - log.Warnf("Could not use docker client, logs for container %s won’t be collected: %v", containerID, err) - return - } - tailer := tailer.NewTailer(dockerutil, containerID, source, l.pipelineProvider.NextPipelineChan(), l.erroredContainerID, l.readTimeout) - - // compute the offset to prevent from missing or duplicating logs - since, err := Since(l.registry, tailer.Identifier()) - if err != nil { - log.Warnf("Could not recover last committed offset for container %v: %v", dockerutilpkg.ShortContainerID(containerID), err) - } - - for { - if backoffDuration > backoffMaxDuration { - log.Warnf("Could not resume tailing container %v", dockerutilpkg.ShortContainerID(containerID)) - return - } - - // start the tailer - err = tailer.Start(since) - if err != nil { - log.Warnf("Could not start tailer for container %v: %v", dockerutilpkg.ShortContainerID(containerID), err) - time.Sleep(backoffDuration) - cumulatedBackoff += backoffDuration - backoffDuration *= 2 - continue - } - // keep the tailer in track to stop it later on - l.addTailer(containerID, tailer) - source.AddInput(containerID) - return - } -} - -func (l *Launcher) addTailer(containerID string, tailer *tailer.Tailer) { - l.lock.Lock() - l.tailers[containerID] = tailer - l.lock.Unlock() -} - -func (l *Launcher) removeTailer(containerID string) { - l.lock.Lock() - delete(l.tailers, containerID) - l.lock.Unlock() -} - -func (l *Launcher) getTailer(containerID string) (*tailer.Tailer, bool) { - l.lock.Lock() - defer l.lock.Unlock() - tailer, exist := l.tailers[containerID] - return tailer, exist -} diff --git a/pkg/logs/internal/launchers/docker/launcher_nix.go b/pkg/logs/internal/launchers/docker/launcher_nix.go deleted file mode 100644 index 2a340355b18f16..00000000000000 --- a/pkg/logs/internal/launchers/docker/launcher_nix.go +++ /dev/null @@ -1,43 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build docker && !windows -// +build docker,!windows - -package docker - -import ( - "fmt" - "path/filepath" - - coreConfig "github.com/DataDog/datadog-agent/pkg/config" - - "golang.org/x/sys/unix" -) - -const ( - basePath = "/var/lib/docker/containers" - podmanBasePath = "/var/lib/containers/storage/overlay-containers" -) - -func checkReadAccess() error { - path := basePath - if coreConfig.Datadog.GetBool("logs_config.use_podman_logs") { - path = podmanBasePath - } - err := unix.Access(path, unix.X_OK) - if err != nil { - return fmt.Errorf("Error accessing %s: %w", path, err) - } - return nil -} - -// getPath returns the file path of the container log to tail. -func getPath(id string) string { - if coreConfig.Datadog.GetBool("logs_config.use_podman_logs") { - return filepath.Join(podmanBasePath, fmt.Sprintf("%s/userdata/ctr.log", id)) - } - return filepath.Join(basePath, id, fmt.Sprintf("%s-json.log", id)) -} diff --git a/pkg/logs/internal/launchers/docker/launcher_nix_test.go b/pkg/logs/internal/launchers/docker/launcher_nix_test.go deleted file mode 100644 index 0c2bf275cb4754..00000000000000 --- a/pkg/logs/internal/launchers/docker/launcher_nix_test.go +++ /dev/null @@ -1,37 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build docker && !windows -// +build docker,!windows - -package docker - -import ( - "path/filepath" - "testing" - - "github.com/stretchr/testify/require" - - "github.com/DataDog/datadog-agent/pkg/config" -) - -func TestGetPath(t *testing.T) { - t.Run("use_podman_logs=false", func(t *testing.T) { - mockConfig := config.Mock(t) - mockConfig.Set("logs_config.use_podman_logs", false) - - require.Equal(t, - filepath.Join(basePath, "123abc/123abc-json.log"), - getPath("123abc")) - }) - t.Run("use_podman_logs=true", func(t *testing.T) { - mockConfig := config.Mock(t) - mockConfig.Set("logs_config.use_podman_logs", true) - - require.Equal(t, - "/var/lib/containers/storage/overlay-containers/123abc/userdata/ctr.log", - getPath("123abc")) - }) -} diff --git a/pkg/logs/internal/launchers/docker/launcher_nodocker.go b/pkg/logs/internal/launchers/docker/launcher_nodocker.go deleted file mode 100644 index 9e5be1a7be660f..00000000000000 --- a/pkg/logs/internal/launchers/docker/launcher_nodocker.go +++ /dev/null @@ -1,41 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build !docker -// +build !docker - -package docker - -import ( - "time" - - "github.com/DataDog/datadog-agent/pkg/logs/auditor" - "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers" - "github.com/DataDog/datadog-agent/pkg/logs/internal/util/containersorpods" - "github.com/DataDog/datadog-agent/pkg/logs/pipeline" - "github.com/DataDog/datadog-agent/pkg/logs/service" - "github.com/DataDog/datadog-agent/pkg/logs/sources" - "github.com/DataDog/datadog-agent/pkg/util/retry" -) - -// Launcher is not supported on non docker environment -type Launcher struct{} - -// NewLauncher returns a new Launcher -func NewLauncher(readTimeout time.Duration, psources *sources.LogSources, services *service.Services, cop containersorpods.Chooser, tailFromFile, forceTailingFromFile bool) *Launcher { - return &Launcher{} -} - -// IsAvailable retrurns false - not available -func IsAvailable() (bool, *retry.Retrier) { - return false, nil -} - -// Start does nothing -func (l *Launcher) Start(sourceProider launchers.SourceProvider, pipelineProvider pipeline.Provider, registry auditor.Registry) { -} - -// Stop does nothing -func (l *Launcher) Stop() {} diff --git a/pkg/logs/internal/launchers/docker/launcher_test.go b/pkg/logs/internal/launchers/docker/launcher_test.go deleted file mode 100644 index 86a3b53ee59061..00000000000000 --- a/pkg/logs/internal/launchers/docker/launcher_test.go +++ /dev/null @@ -1,189 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build docker -// +build docker - -package docker - -import ( - "reflect" - "testing" - - "github.com/stretchr/testify/assert" - - "github.com/DataDog/datadog-agent/pkg/logs/config" - "github.com/DataDog/datadog-agent/pkg/logs/internal/status" - "github.com/DataDog/datadog-agent/pkg/logs/service" - "github.com/DataDog/datadog-agent/pkg/logs/sources" - "github.com/DataDog/datadog-agent/pkg/workloadmeta" - - "github.com/docker/docker/api/types" -) - -func init() { - workloadmeta.CreateGlobalStore(nil) -} - -func TestOverrideSourceServiceNameOrder(t *testing.T) { - tests := []struct { - name string - sFunc func(string, string) string - container *Container - source *sources.LogSource - wantServiceName string - }{ - { - name: "log config", - sFunc: func(n, e string) string { return "stdServiceName" }, - container: &Container{ - container: types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{ - Name: "fooName", - Image: "fooImage", - }, - }, - }, - source: &sources.LogSource{ - Name: "from container", - Config: &config.LogsConfig{ - Service: "configServiceName", - }, - }, - wantServiceName: "configServiceName", - }, - { - name: "standard tags", - sFunc: func(n, e string) string { return "stdServiceName" }, - container: &Container{ - container: types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{ - Name: "fooName", - Image: "fooImage", - }, - }, - }, - source: &sources.LogSource{ - Name: "from container", - Config: &config.LogsConfig{}, - }, - wantServiceName: "stdServiceName", - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - l := &Launcher{ - serviceNameFunc: tt.sFunc, - } - if got := l.overrideSource(tt.container, tt.source); !reflect.DeepEqual(got.Config.Service, tt.wantServiceName) { - t.Errorf("Launcher.overrideSource() = %v, want %v", got.Config.Service, tt.wantServiceName) - } - }) - } -} - -func TestNewOverridenSourceServiceNameOrder(t *testing.T) { - tests := []struct { - name string - standardService string - shortName string - status *status.LogStatus - wantServiceName string - }{ - { - name: "standard svc name", - standardService: "stdServiceName", - shortName: "fooName", - status: status.NewLogStatus(), - wantServiceName: "stdServiceName", - }, - { - name: "image name", - standardService: "", - shortName: "fooName", - status: status.NewLogStatus(), - wantServiceName: "fooName", - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if got := newOverridenSource(tt.standardService, tt.shortName, tt.status); !reflect.DeepEqual(got.Config.Service, tt.wantServiceName) { - t.Errorf("newOverridenSource() = %v, want %v", got.Config.Service, tt.wantServiceName) - } - }) - } -} - -func TestGetFileSource(t *testing.T) { - - testRules := []*config.ProcessingRule{ - {Name: "foo", Type: config.IncludeAtMatch, Pattern: "[[:alnum:]]{5}"}, - {Name: "bar", Type: config.ExcludeAtMatch, Pattern: "^plop"}, - {Name: "baz", Type: config.MultiLine, Pattern: "[0-9]"}, - } - tests := []struct { - name string - sFunc func(string, string) string - container *Container - source *sources.LogSource - wantServiceName string - wantSourceName string - wantPath string - wantTags []string - wantRules []*config.ProcessingRule - }{ - { - name: "service name from log config", - sFunc: func(n, e string) string { return "stdServiceName" }, - container: &Container{ - container: types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{ - Name: "fooName", - Image: "fooImage", - }, - }, - service: &service.Service{Identifier: "123456"}, - }, - source: sources.NewLogSource("from container", &config.LogsConfig{Service: "configServiceName", Source: "configSourceName", Tags: []string{"foo:bar", "foo:baz"}}), - wantServiceName: "configServiceName", - wantSourceName: "configSourceName", - wantPath: "/var/lib/docker/containers/123456/123456-json.log", - wantTags: []string{"foo:bar", "foo:baz"}, - }, - { - name: "service name from standard tags", - sFunc: func(n, e string) string { return "stdServiceName" }, - container: &Container{ - container: types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{ - Name: "fooName", - Image: "fooImage", - }, - }, - service: &service.Service{Identifier: "123456"}, - }, - source: sources.NewLogSource("from container", &config.LogsConfig{ProcessingRules: testRules, Source: "stdSourceName"}), - wantServiceName: "stdServiceName", - wantSourceName: "stdSourceName", - wantPath: "/var/lib/docker/containers/123456/123456-json.log", - wantRules: testRules, - wantTags: nil, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - l := &Launcher{ - serviceNameFunc: tt.sFunc, - } - fileSource := l.getFileSource(tt.container, tt.source) - assert.Equal(t, config.FileType, fileSource.source.Config.Type) - assert.Equal(t, tt.container.service.Identifier, fileSource.source.Config.Identifier) - assert.Equal(t, tt.wantServiceName, fileSource.source.Config.Service) - assert.Equal(t, tt.wantSourceName, fileSource.source.Config.Source) - assert.Equal(t, tt.wantTags, fileSource.source.Config.Tags) - assert.Equal(t, tt.wantRules, fileSource.source.Config.ProcessingRules) - }) - } -} diff --git a/pkg/logs/internal/launchers/docker/launcher_windows.go b/pkg/logs/internal/launchers/docker/launcher_windows.go deleted file mode 100644 index fd2220559f1a3f..00000000000000 --- a/pkg/logs/internal/launchers/docker/launcher_windows.go +++ /dev/null @@ -1,30 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build docker && windows -// +build docker,windows - -package docker - -import ( - "fmt" - "os" - "path/filepath" -) - -const ( - basePath = "c:\\programdata\\docker\\containers" -) - -func checkReadAccess() error { - // We need read access to the docker folder - _, err := os.ReadDir(basePath) - return err -} - -// getPath returns the file path of the container log to tail. -func getPath(id string) string { - return filepath.Join(basePath, id, fmt.Sprintf("%s-json.log", id)) -} diff --git a/pkg/logs/internal/launchers/docker/launcher_windows_test.go b/pkg/logs/internal/launchers/docker/launcher_windows_test.go deleted file mode 100644 index 66d9577f205840..00000000000000 --- a/pkg/logs/internal/launchers/docker/launcher_windows_test.go +++ /dev/null @@ -1,84 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build docker && windows -// +build docker,windows - -package docker - -import ( - "path/filepath" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/DataDog/datadog-agent/pkg/logs/config" - "github.com/DataDog/datadog-agent/pkg/logs/service" - "github.com/DataDog/datadog-agent/pkg/logs/sources" - - "github.com/docker/docker/api/types" -) - -func TestGetFileSourceOnWindows(t *testing.T) { - tests := []struct { - name string - sFunc func(string, string) string - container *Container - source *sources.LogSource - wantServiceName string - wantPath string - }{ - { - name: "service name from log config", - sFunc: func(n, e string) string { return "stdServiceName" }, - container: &Container{ - container: types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{ - Name: "fooName", - Image: "fooImage", - }, - }, - service: &service.Service{Identifier: "123456"}, - }, - source: sources.NewLogSource("from container", &config.LogsConfig{Service: "configServiceName"}), - wantServiceName: "configServiceName", - wantPath: "c:\\programdata\\docker\\containers\\123456\\123456-json.log", - }, - { - name: "service name from standard tags", - sFunc: func(n, e string) string { return "stdServiceName" }, - container: &Container{ - container: types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{ - Name: "fooName", - Image: "fooImage", - }, - }, - service: &service.Service{Identifier: "123456"}, - }, - source: sources.NewLogSource("from container", &config.LogsConfig{}), - wantServiceName: "stdServiceName", - wantPath: "c:\\programdata\\docker\\containers\\123456\\123456-json.log", - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - l := &Launcher{ - serviceNameFunc: tt.sFunc, - } - fileSource := l.getFileSource(tt.container, tt.source) - assert.Equal(t, config.FileType, fileSource.source.Config.Type) - assert.Equal(t, tt.container.service.Identifier, fileSource.source.Config.Identifier) - assert.Equal(t, tt.wantServiceName, fileSource.source.Config.Service) - }) - } -} - -func TestGetPath(t *testing.T) { - require.Equal(t, - filepath.Join(basePath, "123abc/123abc-json.log"), - getPath("123abc")) -} diff --git a/pkg/logs/internal/launchers/docker/since.go b/pkg/logs/internal/launchers/docker/since.go deleted file mode 100644 index 6d75e50884adc6..00000000000000 --- a/pkg/logs/internal/launchers/docker/since.go +++ /dev/null @@ -1,44 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build docker -// +build docker - -package docker - -import ( - "time" - - "github.com/DataDog/datadog-agent/pkg/logs/auditor" - "github.com/DataDog/datadog-agent/pkg/logs/config" -) - -// Since returns the date from when logs should be collected. -func Since(registry auditor.Registry, identifier string) (time.Time, error) { - var since time.Time - var err error - offset := registry.GetOffset(identifier) - switch { - case isEOFCorruptedOffset(offset): - since = time.Time{} - case offset != "": - // an offset was registered, tail from the offset - since, err = time.Parse(config.DateFormat, offset) - if err != nil { - since = time.Now().UTC() - } - default: - // a new service has been discovered and was launched after the agent start, tail from the beginning - since = time.Time{} - } - return since, err -} - -// isEOFCorruptedOffset return true if the offset doesn't contain a -// valid timestamp value due to a file rotation. -func isEOFCorruptedOffset(offset string) bool { - // check if the offset value is equal to EOF char - return len(offset) > 0 && offset[0] == 0x03 -} diff --git a/pkg/logs/internal/launchers/docker/since_test.go b/pkg/logs/internal/launchers/docker/since_test.go deleted file mode 100644 index 601704c243756c..00000000000000 --- a/pkg/logs/internal/launchers/docker/since_test.go +++ /dev/null @@ -1,47 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build docker -// +build docker - -package docker - -import ( - "testing" - "time" - - "github.com/stretchr/testify/assert" - - "github.com/DataDog/datadog-agent/pkg/logs/auditor/mock" - "github.com/DataDog/datadog-agent/pkg/logs/config" -) - -func TestSince(t *testing.T) { - now := time.Now().UTC().Add(-5 * time.Second) - registry := mock.NewRegistry() - - var since time.Time - var err error - - since, err = Since(registry, "") - assert.Nil(t, err) - assert.Equal(t, time.Time{}, since) - - registry.SetOffset("2008-01-12T01:01:01.000000001Z") - since, err = Since(registry, "") - assert.Nil(t, err) - assert.Equal(t, "2008-01-12T01:01:01.000000001Z", since.Format(config.DateFormat)) - - // Not properly formated - registry.SetOffset("2008-01-12T01:01.000000001Z") - since, err = Since(registry, "") - assert.NotNil(t, err) - assert.True(t, since.After(now)) - - registry.SetOffset("foo") - since, err = Since(registry, "") - assert.NotNil(t, err) - assert.True(t, since.After(now)) -} diff --git a/pkg/logs/internal/launchers/kubernetes/launcher.go b/pkg/logs/internal/launchers/kubernetes/launcher.go deleted file mode 100644 index b5a2206f191c72..00000000000000 --- a/pkg/logs/internal/launchers/kubernetes/launcher.go +++ /dev/null @@ -1,319 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubelet -// +build kubelet - -package kubernetes - -import ( - "context" - "fmt" - "os" - "path/filepath" - - "github.com/DataDog/datadog-agent/pkg/logs/auditor" - "github.com/DataDog/datadog-agent/pkg/logs/config" - "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers" - "github.com/DataDog/datadog-agent/pkg/logs/internal/util" - "github.com/DataDog/datadog-agent/pkg/logs/internal/util/containersorpods" - "github.com/DataDog/datadog-agent/pkg/logs/pipeline" - "github.com/DataDog/datadog-agent/pkg/logs/service" - sourcesPkg "github.com/DataDog/datadog-agent/pkg/logs/sources" - "github.com/DataDog/datadog-agent/pkg/util/containers" - "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/DataDog/datadog-agent/pkg/workloadmeta" -) - -const ( - basePath = "/var/log/pods" - anyLogFile = "*.log" - anyV19LogFile = "%s_*.log" -) - -var errCollectAllDisabled = fmt.Errorf("%s disabled", config.ContainerCollectAll) - -// Launcher looks for new and deleted pods to create or delete one logs-source per container. -type Launcher struct { - sources *sourcesPkg.LogSources - services *service.Services - cop containersorpods.Chooser - sourcesByContainer map[string]*sourcesPkg.LogSource - stopped chan struct{} - collectAll bool - serviceNameFunc func(string, string) string // serviceNameFunc gets the service name from the tagger, it is in a separate field for testing purpose - workloadmetaStore workloadmeta.Store - - // ctx is the context for the running goroutine, set in Start - ctx context.Context - - // cancel cancels the running goroutine - cancel context.CancelFunc -} - -// NewLauncher returns a new launcher. -func NewLauncher(sources *sourcesPkg.LogSources, services *service.Services, cop containersorpods.Chooser, collectAll bool) *Launcher { - launcher := &Launcher{ - sources: sources, - services: services, - cop: cop, - sourcesByContainer: make(map[string]*sourcesPkg.LogSource), - stopped: make(chan struct{}), - collectAll: collectAll, - serviceNameFunc: util.ServiceNameFromTags, - workloadmetaStore: workloadmeta.GetGlobalStore(), - } - return launcher -} - -// Start starts the launcher -func (l *Launcher) Start(sourceProvider launchers.SourceProvider, pipelineProvider pipeline.Provider, registry auditor.Registry) { - // only start this launcher once it's determined that we should be logging containers, and not pods. - l.ctx, l.cancel = context.WithCancel(context.Background()) - go l.run(sourceProvider, pipelineProvider, registry) -} - -// Stop stops the launcher -func (l *Launcher) Stop() { - if l.cancel != nil { - l.cancel() - } - - // only stop this launcher once it's determined that we should be logging - // pods, and not containers, but do not block trying to find out. - if l.cop.Get() == containersorpods.LogPods { - l.stopped <- struct{}{} - } -} - -// run handles new and deleted pods, -// the kubernetes launcher consumes new and deleted services pushed by the autodiscovery -func (l *Launcher) run(sourceProvider launchers.SourceProvider, pipelineProvider pipeline.Provider, registry auditor.Registry) { - // if we're not logging pods, then there's nothing to do - if l.cop.Wait(l.ctx) != containersorpods.LogPods { - return - } - - log.Info("Starting Kubernetes launcher") - addedServices := l.services.GetAllAddedServices() - removedServices := l.services.GetAllRemovedServices() - - for { - select { - case service := <-addedServices: - l.addSource(service) - case service := <-removedServices: - l.removeSource(service) - case <-l.stopped: - log.Info("Kubernetes launcher stopped") - return - } - } -} - -// addSource creates a new log-source from a service by resolving the -// pod linked to the entityID of the service -func (l *Launcher) addSource(svc *service.Service) { - // If the container is already tailed, we don't do anything - // That shoudn't happen - if _, exists := l.sourcesByContainer[svc.GetEntityID()]; exists { - log.Warnf("A source already exist for container %v", svc.GetEntityID()) - return - } - - source, err := l.getSource(svc) - if err != nil { - if err != errCollectAllDisabled { - log.Warnf("Invalid configuration for service %q: %v", svc.GetEntityID(), err) - } - return - } - - switch svc.Type { - case config.DockerType: - source.SetSourceType(sourcesPkg.DockerSourceType) - default: - source.SetSourceType(sourcesPkg.KubernetesSourceType) - } - - l.sourcesByContainer[svc.GetEntityID()] = source - l.sources.AddSource(source) -} - -// removeSource removes a new log-source from a service -func (l *Launcher) removeSource(service *service.Service) { - containerID := service.GetEntityID() - if source, exists := l.sourcesByContainer[containerID]; exists { - delete(l.sourcesByContainer, containerID) - l.sources.RemoveSource(source) - } -} - -// kubernetesIntegration represents the name of the integration. -const kubernetesIntegration = "kubernetes" - -func (l *Launcher) getSource(svc *service.Service) (*sourcesPkg.LogSource, error) { - containerID := svc.Identifier - - pod, err := l.workloadmetaStore.GetKubernetesPodForContainer(containerID) - if err != nil { - return nil, fmt.Errorf("cannot find pod for container %q: %w", containerID, err) - } - - var container *workloadmeta.OrchestratorContainer - for _, pc := range pod.Containers { - if pc.ID == containerID { - container = &pc - break - } - } - - if container == nil { - return nil, fmt.Errorf("cannot find container %q in pod %q", containerID, pod.Name) - } - - runtimeContainer, err := l.workloadmetaStore.GetContainer(containerID) - if err != nil { - return nil, fmt.Errorf("cannot find container %q: %w", containerID, err) - } - var cfg *config.LogsConfig - - if annotation := l.getAnnotation(container.Name, pod.Annotations); annotation != "" { - configs, err := config.ParseJSON([]byte(annotation)) - if err != nil || len(configs) == 0 { - return nil, fmt.Errorf("could not parse kubernetes annotation %v", annotation) - } - - // We may have more than one log configuration in the annotation, ignore those - // unrelated to containers - containerType := string(runtimeContainer.Runtime) - for _, c := range configs { - if c.Type == "" || c.Type == containerType { - cfg = c - break - } - } - - if cfg == nil { - log.Debugf("annotation found: %v, for pod %v, container %v, but no config was usable for container log collection", annotation, pod.Name, container.Name) - } - } - - standardService := l.serviceNameFunc(container.Name, containers.BuildTaggerEntityName(containerID)) - - if cfg == nil { - if !l.collectAll { - return nil, errCollectAllDisabled - } - // The logs source is the short image name - logsSource := "" - shortImageName := container.Image.ShortName - if shortImageName == "" { - log.Debugf("Couldn't get short image for container %q: empty ShortName", container.Name) - // Fallback and use `kubernetes` as source name - logsSource = kubernetesIntegration - } else { - logsSource = shortImageName - } - - if standardService != "" { - cfg = &config.LogsConfig{ - Source: logsSource, - Service: standardService, - } - } else { - cfg = &config.LogsConfig{ - Source: logsSource, - Service: logsSource, - } - } - } - - if cfg.Service == "" && standardService != "" { - cfg.Service = standardService - } - - cfg.Type = config.FileType - cfg.Path = l.getPath(basePath, pod, container.Name) - cfg.Identifier = container.ID - if err := cfg.Validate(); err != nil { - return nil, fmt.Errorf("invalid kubernetes annotation: %v", err) - } - - sourceName := fmt.Sprintf("%s/%s/%s", pod.Namespace, pod.Name, container.Name) - - return sourcesPkg.NewLogSource(sourceName, cfg), nil -} - -// configPath refers to the configuration that can be passed over a pod annotation, -// this feature is commonly named 'ad' or 'autodiscovery'. -// The pod annotation must respect the format: ad.datadoghq.com/.logs: '[{...}]'. -const ( - configPathPrefix = "ad.datadoghq.com" - configPathSuffix = "logs" -) - -// getConfigPath returns the path of the logs-config annotation for container. -func (l *Launcher) getConfigPath(containerName string) string { - return fmt.Sprintf("%s/%s.%s", configPathPrefix, containerName, configPathSuffix) -} - -// getAnnotation returns the logs-config annotation for container if present. -// FIXME: Reuse the annotation logic from AD -func (l *Launcher) getAnnotation(containerName string, annotations map[string]string) string { - configPath := l.getConfigPath(containerName) - if annotation, exists := annotations[configPath]; exists { - return annotation - } - return "" -} - -// getPath returns a wildcard matching with any logs file of container in pod. -func (l *Launcher) getPath(basePath string, pod *workloadmeta.KubernetesPod, containerName string) string { - // the pattern for container logs is different depending on the version of Kubernetes - // so we need to try three possbile formats - // until v1.9 it was `/var/log/pods/{pod_uid}/{container_name_n}.log`, - // v.1.10 to v1.13 it was `/var/log/pods/{pod_uid}/{container_name}/{n}.log`, - // since v1.14 it is `/var/log/pods/{pod_namespace}_{pod_name}_{pod_uid}/{container_name}/{n}.log`. - // see: https://github.com/kubernetes/kubernetes/pull/74441 for more information. - oldDirectory := filepath.Join(basePath, l.getPodDirectoryUntil1_13(pod)) - if _, err := os.Stat(oldDirectory); err == nil { - v110Dir := filepath.Join(oldDirectory, containerName) - _, err := os.Stat(v110Dir) - if err == nil { - log.Debugf("Logs path found for container %s, v1.13 >= kubernetes version >= v1.10", containerName) - return filepath.Join(v110Dir, anyLogFile) - } - if !os.IsNotExist(err) { - log.Debugf("Cannot get file info for %s: %v", v110Dir, err) - } - - v19Files := filepath.Join(oldDirectory, fmt.Sprintf(anyV19LogFile, containerName)) - files, err := filepath.Glob(v19Files) - if err == nil && len(files) > 0 { - log.Debugf("Logs path found for container %s, kubernetes version <= v1.9", containerName) - return v19Files - } - if err != nil { - log.Debugf("Cannot get file info for %s: %v", v19Files, err) - } - if len(files) == 0 { - log.Debugf("Files matching %s not found", v19Files) - } - } - - log.Debugf("Using the latest kubernetes logs path for container %s", containerName) - return filepath.Join(basePath, l.getPodDirectorySince1_14(pod), containerName, anyLogFile) -} - -// getPodDirectoryUntil1_13 returns the name of the directory of pod containers until Kubernetes v1.13. -func (l *Launcher) getPodDirectoryUntil1_13(pod *workloadmeta.KubernetesPod) string { - return pod.ID -} - -// getPodDirectorySince1_14 returns the name of the directory of pod containers since Kubernetes v1.14. -func (l *Launcher) getPodDirectorySince1_14(pod *workloadmeta.KubernetesPod) string { - return fmt.Sprintf("%s_%s_%s", pod.Namespace, pod.Name, pod.ID) -} diff --git a/pkg/logs/internal/launchers/kubernetes/launcher_nokubelet.go b/pkg/logs/internal/launchers/kubernetes/launcher_nokubelet.go deleted file mode 100644 index 656bae8dbcce4e..00000000000000 --- a/pkg/logs/internal/launchers/kubernetes/launcher_nokubelet.go +++ /dev/null @@ -1,39 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build !kubelet -// +build !kubelet - -package kubernetes - -import ( - "github.com/DataDog/datadog-agent/pkg/logs/auditor" - "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers" - "github.com/DataDog/datadog-agent/pkg/logs/internal/util/containersorpods" - "github.com/DataDog/datadog-agent/pkg/logs/pipeline" - "github.com/DataDog/datadog-agent/pkg/logs/service" - "github.com/DataDog/datadog-agent/pkg/logs/sources" - "github.com/DataDog/datadog-agent/pkg/util/retry" -) - -// Launcher is not supported on no kubelet environment -type Launcher struct{} - -// NewLauncher returns a new launcher -func NewLauncher(sources *sources.LogSources, services *service.Services, cop containersorpods.Chooser, collectAll bool) *Launcher { - return &Launcher{} -} - -// IsAvailable retrurns false - not available -func IsAvailable() (bool, *retry.Retrier) { - return false, nil -} - -// Start does nothing -func (l *Launcher) Start(sourceProider launchers.SourceProvider, pipelineProvider pipeline.Provider, registry auditor.Registry) { -} - -// Stop does nothing -func (l *Launcher) Stop() {} diff --git a/pkg/logs/internal/launchers/kubernetes/launcher_test.go b/pkg/logs/internal/launchers/kubernetes/launcher_test.go deleted file mode 100644 index c21ed41470123c..00000000000000 --- a/pkg/logs/internal/launchers/kubernetes/launcher_test.go +++ /dev/null @@ -1,436 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubelet -// +build kubelet - -package kubernetes - -import ( - "os" - "path/filepath" - "testing" - - "github.com/DataDog/datadog-agent/pkg/logs/config" - "github.com/DataDog/datadog-agent/pkg/logs/service" - "github.com/DataDog/datadog-agent/pkg/workloadmeta" - workloadmetatesting "github.com/DataDog/datadog-agent/pkg/workloadmeta/testing" - - "github.com/stretchr/testify/assert" -) - -func TestGetSource(t *testing.T) { - launcher := getLauncher(true) - store := workloadmetatesting.NewStore() - - store.Set(&workloadmeta.KubernetesPod{ - EntityID: workloadmeta.EntityID{ - Kind: workloadmeta.KindKubernetesPod, - ID: "baz", - }, - EntityMeta: workloadmeta.EntityMeta{ - Name: "fuz", - Namespace: "buu", - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - ID: "boo", - Name: "foo", - Image: workloadmeta.ContainerImage{ - ShortName: "bar", - }, - }, - }, - }) - - store.Set(getBareContainer("boo", "fuz-bar-bas")) - - launcher.workloadmetaStore = store - - source, err := launcher.getSource(&service.Service{ - Type: "docker", - Identifier: "boo", - }) - - assert.Nil(t, err) - assert.Equal(t, config.FileType, source.Config.Type) - assert.Equal(t, "buu/fuz/foo", source.Name) - assert.Equal(t, "/var/log/pods/buu_fuz_baz/foo/*.log", filepath.ToSlash(source.Config.Path)) - assert.Equal(t, "boo", source.Config.Identifier) - assert.Equal(t, "bar", source.Config.Source) - assert.Equal(t, "bar", source.Config.Service) -} - -func TestGetSourceShouldBeOverridenByAutoDiscoveryAnnotation(t *testing.T) { - launcher := getLauncher(true) - store := workloadmetatesting.NewStore() - - store.Set(&workloadmeta.KubernetesPod{ - EntityID: workloadmeta.EntityID{ - Kind: workloadmeta.KindKubernetesPod, - ID: "baz", - }, - EntityMeta: workloadmeta.EntityMeta{ - Name: "fuz", - Namespace: "buu", - Annotations: map[string]string{ - "ad.datadoghq.com/foo.logs": `[{"source":"any_source","service":"any_service","tags":["tag1","tag2"]}]`, - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - ID: "boo", - Name: "foo", - Image: workloadmeta.ContainerImage{ - ShortName: "bar", - }, - }, - }, - }) - - store.Set(getBareContainer("boo", "fuz-bar-baz")) - - launcher.workloadmetaStore = store - - source, err := launcher.getSource(&service.Service{ - Type: "docker", - Identifier: "boo", - }) - - assert.Nil(t, err) - assert.Equal(t, config.FileType, source.Config.Type) - assert.Equal(t, "buu/fuz/foo", source.Name) - assert.Equal(t, "/var/log/pods/buu_fuz_baz/foo/*.log", filepath.ToSlash(source.Config.Path)) - assert.Equal(t, "boo", source.Config.Identifier) - assert.Equal(t, "any_source", source.Config.Source) - assert.Equal(t, "any_service", source.Config.Service) - assert.ElementsMatch(t, source.Config.Tags, []string{"tag1", "tag2"}) -} - -func TestGetSourceShouldFailWithInvalidAutoDiscoveryAnnotation(t *testing.T) { - launcher := getLauncher(true) - store := workloadmetatesting.NewStore() - - store.Set(&workloadmeta.KubernetesPod{ - EntityID: workloadmeta.EntityID{ - Kind: workloadmeta.KindKubernetesPod, - ID: "baz", - }, - EntityMeta: workloadmeta.EntityMeta{ - Name: "fuz", - Namespace: "buu", - Annotations: map[string]string{ - // missing [ ] - "ad.datadoghq.com/foo.logs": `{"source":"any_source","service":"any_service","tags":["tag1","tag2"]}`, - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - ID: "boo", - Name: "foo", - Image: workloadmeta.ContainerImage{ - ShortName: "bar", - }, - }, - }, - }) - - store.Set(getBareContainer("boo", "fuz-bar-baz")) - - launcher.workloadmetaStore = store - - source, err := launcher.getSource(&service.Service{ - Type: "docker", - Identifier: "boo", - }) - - assert.NotNil(t, err) - assert.Nil(t, source) -} - -func TestContainerCollectAll(t *testing.T) { - launcherCollectAll := getLauncher(true) - launcherCollectAllDisabled := getLauncher(false) - - store := workloadmetatesting.NewStore() - - store.Set(&workloadmeta.KubernetesPod{ - EntityID: workloadmeta.EntityID{ - Kind: workloadmeta.KindKubernetesPod, - ID: "podfoo", - }, - EntityMeta: workloadmeta.EntityMeta{ - Name: "fuz", - Namespace: "buu", - Annotations: map[string]string{ - "ad.datadoghq.com/foo.logs": `[{"source":"any_source","service":"any_service"}]`, - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - ID: "foo", - Name: "foo", - }, - { - ID: "bar", - Name: "bar", - }, - }, - }) - - store.Set(getBareContainer("foo", "foo")) - store.Set(getBareContainer("bar", "bar")) - - launcherCollectAll.workloadmetaStore = store - launcherCollectAllDisabled.workloadmetaStore = store - - source, err := launcherCollectAll.getSource(&service.Service{ - Type: "docker", - Identifier: "foo", - }) - assert.Nil(t, err) - assert.Equal(t, "foo", source.Config.Identifier) - - source, err = launcherCollectAll.getSource(&service.Service{ - Type: "docker", - Identifier: "bar", - }) - assert.Nil(t, err) - assert.Equal(t, "bar", source.Config.Identifier) - - source, err = launcherCollectAllDisabled.getSource(&service.Service{ - Type: "docker", - Identifier: "foo", - }) - assert.Nil(t, err) - assert.Equal(t, "foo", source.Config.Identifier) - - source, err = launcherCollectAllDisabled.getSource(&service.Service{ - Type: "docker", - Identifier: "bar", - }) - assert.Equal(t, errCollectAllDisabled, err) - assert.Nil(t, source) -} - -func TestGetPath(t *testing.T) { - launcher := getLauncher(true) - container := "foo" - pod := &workloadmeta.KubernetesPod{ - EntityID: workloadmeta.EntityID{ - ID: "baz", - }, - EntityMeta: workloadmeta.EntityMeta{ - Name: "fuz", - Namespace: "buu", - }, - } - - basePath := t.TempDir() - - // v1.14+ (default) - podDirectory := "buu_fuz_baz" - path := launcher.getPath(basePath, pod, container) - assert.Equal(t, filepath.Join(basePath, podDirectory, "foo", "*.log"), path) - - // v1.10 - v1.13 - podDirectory = "baz" - containerDirectory := "foo" - - err := os.MkdirAll(filepath.Join(basePath, podDirectory, containerDirectory), 0777) - assert.Nil(t, err) - - path = launcher.getPath(basePath, pod, container) - assert.Equal(t, filepath.Join(basePath, podDirectory, "foo", "*.log"), path) - - // v1.9 - os.RemoveAll(basePath) - podDirectory = "baz" - logFile := "foo_1.log" - - err = os.MkdirAll(filepath.Join(basePath, podDirectory), 0777) - assert.Nil(t, err) - - f, err := os.Create(filepath.Join(basePath, podDirectory, logFile)) - assert.Nil(t, err) - t.Cleanup(func() { - assert.NoError(t, f.Close()) - }) - - path = launcher.getPath(basePath, pod, container) - assert.Equal(t, filepath.Join(basePath, podDirectory, "foo_*.log"), path) -} - -func TestGetSourceServiceNameOrder(t *testing.T) { - tests := []struct { - name string - sFunc func(string, string) string - pod *workloadmeta.KubernetesPod - container *workloadmeta.Container - wantServiceName string - wantSourceName string - wantErr bool - }{ - { - name: "log config", - sFunc: func(n, e string) string { return "stdServiceName" }, - pod: &workloadmeta.KubernetesPod{ - EntityID: workloadmeta.EntityID{ - Kind: workloadmeta.KindKubernetesPod, - ID: "podUIDFoo", - }, - EntityMeta: workloadmeta.EntityMeta{ - Name: "podName", - Namespace: "podNamespace", - Annotations: map[string]string{ - "ad.datadoghq.com/fooName.logs": `[{"source":"foo","service":"annotServiceName"}]`, - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - ID: "fooID", - Name: "fooName", - Image: workloadmeta.ContainerImage{ - ShortName: "fooImage", - }, - }, - }, - }, - container: getBareContainer("fooID", "fooName"), - wantServiceName: "annotServiceName", - wantSourceName: "foo", - wantErr: false, - }, - { - name: "standard tags", - sFunc: func(n, e string) string { return "stdServiceName" }, - pod: &workloadmeta.KubernetesPod{ - EntityID: workloadmeta.EntityID{ - Kind: workloadmeta.KindKubernetesPod, - ID: "podUIDFoo", - }, - EntityMeta: workloadmeta.EntityMeta{ - Name: "podName", - Namespace: "podNamespace", - Annotations: map[string]string{ - "ad.datadoghq.com/fooName.logs": `[{"source":"foo"}]`, - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - ID: "fooID", - Name: "fooName", - Image: workloadmeta.ContainerImage{ - ShortName: "fooImage", - }, - }, - }, - }, - container: getBareContainer("fooID", "fooName"), - wantServiceName: "stdServiceName", - wantSourceName: "foo", - wantErr: false, - }, - { - name: "standard tags, undefined source, use image as source", - sFunc: func(n, e string) string { return "stdServiceName" }, - pod: &workloadmeta.KubernetesPod{ - EntityID: workloadmeta.EntityID{ - Kind: workloadmeta.KindKubernetesPod, - ID: "podUIDFoo", - }, - EntityMeta: workloadmeta.EntityMeta{ - Name: "podName", - Namespace: "podNamespace", - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - ID: "fooID", - Name: "fooName", - Image: workloadmeta.ContainerImage{ - ShortName: "fooImage", - }, - }, - }, - }, - container: getBareContainer("fooID", "fooName"), - wantServiceName: "stdServiceName", - wantSourceName: "fooImage", - wantErr: false, - }, - { - name: "image name", - sFunc: func(n, e string) string { return "" }, - pod: &workloadmeta.KubernetesPod{ - EntityID: workloadmeta.EntityID{ - Kind: workloadmeta.KindKubernetesPod, - ID: "podUIDFoo", - }, - EntityMeta: workloadmeta.EntityMeta{ - Name: "podName", - Namespace: "podNamespace", - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - ID: "fooID", - Name: "fooName", - Image: workloadmeta.ContainerImage{ - ShortName: "fooImage", - }, - }, - }, - }, - container: getBareContainer("fooID", "fooName"), - wantServiceName: "fooImage", - wantSourceName: "fooImage", - wantErr: false, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - store := workloadmetatesting.NewStore() - store.Set(tt.container) - store.Set(tt.pod) - l := &Launcher{ - collectAll: true, - serviceNameFunc: tt.sFunc, - workloadmetaStore: store, - } - - got, err := l.getSource(&service.Service{ - Type: string(tt.container.Runtime), - Identifier: tt.container.ID, - }) - - if (err != nil) != tt.wantErr { - t.Errorf("Launcher.getSource() error = %v, wantErr %v", err, tt.wantErr) - return - } - assert.Equal(t, tt.wantServiceName, got.Config.Service) - assert.Equal(t, tt.wantSourceName, got.Config.Source) - }) - } -} - -func getBareContainer(id, name string) *workloadmeta.Container { - return &workloadmeta.Container{ - EntityID: workloadmeta.EntityID{ - Kind: workloadmeta.KindContainer, - ID: id, - }, - EntityMeta: workloadmeta.EntityMeta{ - Name: name, - }, - Runtime: workloadmeta.ContainerRuntimeDocker, - } -} - -func getLauncher(collectAll bool) *Launcher { - return &Launcher{ - collectAll: collectAll, - serviceNameFunc: func(string, string) string { return "" }, - } -} diff --git a/pkg/logs/internal/tailers/file/tailer.go b/pkg/logs/internal/tailers/file/tailer.go index aaae3a4054230f..433542369fda10 100644 --- a/pkg/logs/internal/tailers/file/tailer.go +++ b/pkg/logs/internal/tailers/file/tailer.go @@ -213,12 +213,12 @@ func (t *Tailer) StopAfterFileRotation() { go func() { time.Sleep(t.closeTimeout) if newBytesRead := t.Source().BytesRead.Get() - bytesReadAtRotationTime; newBytesRead > 0 { - log.Infof("After rotation close timeout (%ds), an additional %d bytes were read from file %q", t.closeTimeout, newBytesRead, t.file.Path) + log.Infof("After rotation close timeout (%s), an additional %d bytes were read from file %q", t.closeTimeout, newBytesRead, t.file.Path) fileStat, err := t.osFile.Stat() if err != nil { log.Warnf("During rotation close, unable to determine total file size for %q, err: %v", t.file.Path, err) } else if remainingBytes := fileStat.Size() - t.lastReadOffset.Load(); remainingBytes > 0 { - log.Warnf("After rotation close timeout (%ds), there were %d bytes remaining unread for file %q. These unread logs are now lost. Consider increasing DD_LOGS_CONFIG_CLOSE_TIMEOUT", t.closeTimeout, remainingBytes, t.file.Path) + log.Warnf("After rotation close timeout (%s), there were %d bytes remaining unread for file %q. These unread logs are now lost. Consider increasing DD_LOGS_CONFIG_CLOSE_TIMEOUT", t.closeTimeout, remainingBytes, t.file.Path) } } t.stopForward() diff --git a/pkg/logs/logs.go b/pkg/logs/logs.go index b08ab61335a5fb..e91df95a63550b 100644 --- a/pkg/logs/logs.go +++ b/pkg/logs/logs.go @@ -23,10 +23,8 @@ import ( "github.com/DataDog/datadog-agent/pkg/logs/config" "github.com/DataDog/datadog-agent/pkg/logs/diagnostic" adScheduler "github.com/DataDog/datadog-agent/pkg/logs/schedulers/ad" - ccaScheduler "github.com/DataDog/datadog-agent/pkg/logs/schedulers/cca" "github.com/DataDog/datadog-agent/pkg/logs/service" "github.com/DataDog/datadog-agent/pkg/logs/status" - ddUtil "github.com/DataDog/datadog-agent/pkg/util" ) const ( @@ -135,9 +133,6 @@ func start(ac *autodiscovery.AutoConfig, serverless bool) (*Agent, error) { panic("AutoConfig must be initialized before logs-agent") } agent.AddScheduler(adScheduler.New(ac)) - if !ddUtil.CcaInAD() { - agent.AddScheduler(ccaScheduler.New(ac)) - } } return agent, nil diff --git a/pkg/logs/schedulers/ad/scheduler.go b/pkg/logs/schedulers/ad/scheduler.go index aabe0cbec99611..2b800c423773a7 100644 --- a/pkg/logs/schedulers/ad/scheduler.go +++ b/pkg/logs/schedulers/ad/scheduler.go @@ -19,7 +19,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/logs/schedulers" "github.com/DataDog/datadog-agent/pkg/logs/service" sourcesPkg "github.com/DataDog/datadog-agent/pkg/logs/sources" - ddUtil "github.com/DataDog/datadog-agent/pkg/util" "github.com/DataDog/datadog-agent/pkg/util/containers" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -78,23 +77,6 @@ func (s *Scheduler) Schedule(configs []integration.Config) { for _, source := range sources { s.mgr.AddSource(source) } - case !ddUtil.CcaInAD() && s.newService(config): - entityType, _, err := s.parseEntity(config.TaggerEntity) - if err != nil { - log.Warnf("Invalid service: %v", err) - continue - } - // logs only consider container services - if entityType != containers.ContainerEntityName { - continue - } - log.Infof("Received a new service: %v", config.ServiceID) - service, err := s.toService(config) - if err != nil { - log.Warnf("Invalid service: %v", err) - continue - } - s.mgr.AddService(service) default: // invalid integration config continue @@ -131,24 +113,6 @@ func (s *Scheduler) Unschedule(configs []integration.Config) { s.mgr.RemoveSource(source) } } - case !ddUtil.CcaInAD() && s.newService(config): - // new service to remove - entityType, _, err := s.parseEntity(config.TaggerEntity) - if err != nil { - log.Warnf("Invalid service: %v", err) - continue - } - // logs only consider container services - if entityType != containers.ContainerEntityName { - continue - } - log.Infof("New service to remove: entity: %v", config.ServiceID) - service, err := s.toService(config) - if err != nil { - log.Warnf("Invalid service: %v", err) - continue - } - s.mgr.RemoveService(service) default: // invalid integration config continue @@ -161,11 +125,6 @@ func (s *Scheduler) newSources(config integration.Config) bool { return config.Provider != "" } -// newService returns true if the config can be mapped to a service. -func (s *Scheduler) newService(config integration.Config) bool { - return config.Provider == "" && config.ServiceID != "" -} - // configName returns the name of the configuration. func (s *Scheduler) configName(config integration.Config) string { if config.Name != "" { @@ -262,15 +221,6 @@ func (s *Scheduler) toService(config integration.Config) (*service.Service, erro return service.NewService(provider, identifier), nil } -// parseEntity breaks down an entity into a service provider and a service identifier. -func (s *Scheduler) parseEntity(entity string) (string, string, error) { - components := strings.Split(entity, containers.EntitySeparator) - if len(components) != 2 { - return "", "", fmt.Errorf("entity is malformed : %v", entity) - } - return components[0], components[1], nil -} - // parseServiceID breaks down an AD service ID, assuming it is formatted // as `something://something-else`, into its consituent parts. func (s *Scheduler) parseServiceID(serviceID string) (string, string, error) { diff --git a/pkg/metadata/host/host_tags.go b/pkg/metadata/host/host_tags.go index 547ddb3e9524cd..58edb37ef8034d 100644 --- a/pkg/metadata/host/host_tags.go +++ b/pkg/metadata/host/host_tags.go @@ -82,7 +82,7 @@ func GetHostTags(ctx context.Context, cached bool) *Tags { return appendAndSplitTags(old, new, splits) } - rawHostTags := config.GetConfiguredTags(false) + rawHostTags := config.GetGlobalConfiguredTags(false) hostTags := make([]string, 0, len(rawHostTags)) gceTags := []string{} hostTags = appendToHostTags(hostTags, rawHostTags) diff --git a/pkg/metadata/inventories/host_metadata.go b/pkg/metadata/inventories/host_metadata.go index b7a205336cf231..a74a1a18a7f226 100644 --- a/pkg/metadata/inventories/host_metadata.go +++ b/pkg/metadata/inventories/host_metadata.go @@ -11,16 +11,16 @@ import ( "github.com/DataDog/gohai/network" "github.com/DataDog/gohai/platform" + "github.com/DataDog/datadog-agent/pkg/util/dmi" "github.com/DataDog/datadog-agent/pkg/version" ) // for testing purpose var ( - cpuGet = cpu.Get - memoryGet = memory.Get - networkGet = network.Get - platformGet = platform.Get - systemSpecificHosttMetadataGet = getSystemSpecificHosttMetadata + cpuGet = cpu.Get + memoryGet = memory.Get + networkGet = network.Get + platformGet = platform.Get ) // HostMetadata contains metadata about the host @@ -148,7 +148,10 @@ func getHostMetadata() *HostMetadata { logErrorf("OS version not found in agent metadata cache") //nolint:errcheck } - systemSpecificHosttMetadataGet(metadata) + metadata.HypervisorGuestUUID = dmi.GetHypervisorUUID() + metadata.DmiProductUUID = dmi.GetProductUUID() + metadata.DmiBoardAssetTag = dmi.GetBoardAssetTag() + metadata.DmiBoardVendor = dmi.GetBoardVendor() return metadata } diff --git a/pkg/metadata/inventories/host_metadata_nix_test.go b/pkg/metadata/inventories/host_metadata_nix_test.go deleted file mode 100644 index 0f1d3a886fe45c..00000000000000 --- a/pkg/metadata/inventories/host_metadata_nix_test.go +++ /dev/null @@ -1,59 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build !windows -// +build !windows - -package inventories - -import ( - "os" - "path/filepath" - "testing" - - "github.com/stretchr/testify/assert" -) - -func resetSysPath() { - hypervisorUUIDPath = "/sys/hypervisor/uuid" - dmiProductUUIDPath = "/sys/devices/virtual/dmi/id/product_uuid" - dmiBoardAssetTagPath = "/sys/devices/virtual/dmi/id/board_asset_tag" - dmiBoardVendorPath = "/sys/devices/virtual/dmi/id/board_vendor" -} - -func TestGetSystemSpecificHosttMetadata(t *testing.T) { - tempDir := t.TempDir() - defer resetSysPath() - - setTestFile := func(data string, name string) string { - tempPath := filepath.Join(tempDir, name) - os.WriteFile(tempPath, []byte(data), os.ModePerm) - return tempPath - } - - hypervisorUUIDPath = setTestFile("a404eff4-bacf-4839-a33c-619c3a06abd1\n", "hypervisor_uuid") - dmiProductUUIDPath = setTestFile("a404eff4-bacf-4839-a33c-619c3a06abd1\n", "product_uuid") - dmiBoardAssetTagPath = setTestFile("i-test\n", "board_asset_tag") - dmiBoardVendorPath = setTestFile("test vendor\n", "board_vendor") - - metadata := &HostMetadata{} - getSystemSpecificHosttMetadata(metadata) - assert.Equal(t, "a404eff4-bacf-4839-a33c-619c3a06abd1", metadata.HypervisorGuestUUID) - assert.Equal(t, "a404eff4-bacf-4839-a33c-619c3a06abd1", metadata.DmiProductUUID) - assert.Equal(t, "i-test", metadata.DmiBoardAssetTag) - assert.Equal(t, "test vendor", metadata.DmiBoardVendor) - - hypervisorUUIDPath = "does not exist" - dmiProductUUIDPath = "does not exist" - dmiBoardAssetTagPath = "does not exist" - dmiBoardVendorPath = "does not exist" - - metadata = &HostMetadata{} - getSystemSpecificHosttMetadata(metadata) - assert.Equal(t, "", metadata.HypervisorGuestUUID) - assert.Equal(t, "", metadata.DmiProductUUID) - assert.Equal(t, "", metadata.DmiBoardAssetTag) - assert.Equal(t, "", metadata.DmiBoardVendor) -} diff --git a/pkg/metadata/inventories/host_metadata_test.go b/pkg/metadata/inventories/host_metadata_test.go index 1d4b4c4b1c8815..f73a25c90f4f71 100644 --- a/pkg/metadata/inventories/host_metadata_test.go +++ b/pkg/metadata/inventories/host_metadata_test.go @@ -15,6 +15,7 @@ import ( "github.com/DataDog/gohai/platform" "github.com/stretchr/testify/assert" + "github.com/DataDog/datadog-agent/pkg/util/dmi" "github.com/DataDog/datadog-agent/pkg/version" ) @@ -42,10 +43,10 @@ var ( AgentVersion: version.AgentVersion, CloudProvider: "some_cloud_provider", OsVersion: "testOS", - HypervisorGuestUUID: "", - DmiProductUUID: "", - DmiBoardAssetTag: "", - DmiBoardVendor: "", + HypervisorGuestUUID: "hypervisorUUID", + DmiProductUUID: "dmiUUID", + DmiBoardAssetTag: "boardTag", + DmiBoardVendor: "boardVendor", } ) @@ -100,35 +101,31 @@ func platformMock() (*platform.Platform, []string, error) { }, nil, nil } -func setupHostMetadataMock() func() { - reset := func() { +func setupHostMetadataMock(t *testing.T) { + t.Cleanup(func() { cpuGet = cpu.Get memoryGet = memory.Get networkGet = network.Get platformGet = platform.Get - systemSpecificHosttMetadataGet = getSystemSpecificHosttMetadata inventoryMutex.Lock() delete(agentMetadata, string(AgentCloudProvider)) delete(hostMetadata, string(HostOSVersion)) inventoryMutex.Unlock() - } + }) cpuGet = cpuMock memoryGet = memoryMock networkGet = networkMock platformGet = platformMock - systemSpecificHosttMetadataGet = func(*HostMetadata) {} + dmi.SetupMock(t, "hypervisorUUID", "dmiUUID", "boardTag", "boardVendor") SetAgentMetadata(AgentCloudProvider, "some_cloud_provider") SetHostMetadata(HostOSVersion, "testOS") - - return reset } func TestGetHostMetadata(t *testing.T) { - resetFunc := setupHostMetadataMock() - defer resetFunc() + setupHostMetadataMock(t) m := getHostMetadata() assert.Equal(t, expectedMetadata, m) @@ -139,26 +136,23 @@ func memoryErrorMock() (*memory.Memory, []string, error) { return nil, nil func networkErrorMock() (*network.Network, []string, error) { return nil, nil, fmt.Errorf("err") } func platformErrorMock() (*platform.Platform, []string, error) { return nil, nil, fmt.Errorf("err") } -func setupHostMetadataErrorMock() func() { - reset := func() { +func setupHostMetadataErrorMock(t *testing.T) { + t.Cleanup(func() { cpuGet = cpu.Get memoryGet = memory.Get networkGet = network.Get platformGet = platform.Get - systemSpecificHosttMetadataGet = getSystemSpecificHosttMetadata - } + }) cpuGet = cpuErrorMock memoryGet = memoryErrorMock networkGet = networkErrorMock platformGet = platformErrorMock - systemSpecificHosttMetadataGet = func(*HostMetadata) {} - return reset + dmi.SetupMock(t, "", "", "", "") } func TestGetHostMetadataError(t *testing.T) { - resetFunc := setupHostMetadataErrorMock() - defer resetFunc() + setupHostMetadataErrorMock(t) m := getHostMetadata() expected := &HostMetadata{AgentVersion: version.AgentVersion} diff --git a/pkg/metadata/inventories/inventories_test.go b/pkg/metadata/inventories/inventories_test.go index 415aef630949ec..3a09e641eb4909 100644 --- a/pkg/metadata/inventories/inventories_test.go +++ b/pkg/metadata/inventories/inventories_test.go @@ -199,8 +199,7 @@ func TestGetPayload(t *testing.T) { startNow = startNow.Add(1000 * time.Second) SetCheckMetadata("check1_instance1", "check_provided_key1", 456) - resetFunc := setupHostMetadataMock() - defer resetFunc() + setupHostMetadataMock(t) p = GetPayload(ctx, "testHostname", coll, true) @@ -297,10 +296,10 @@ func TestGetPayload(t *testing.T) { "agent_version": "%v", "cloud_provider": "some_cloud_provider", "os_version": "testOS", - "hypervisor_guest_uuid": "", - "dmi_product_uuid": "", - "dmi_board_asset_tag": "", - "dmi_board_vendor": "" + "hypervisor_guest_uuid": "hypervisorUUID", + "dmi_product_uuid": "dmiUUID", + "dmi_board_asset_tag": "boardTag", + "dmi_board_vendor": "boardVendor" } }` jsonString = fmt.Sprintf(jsonString, startNow.UnixNano(), version.AgentVersion) diff --git a/pkg/network/config/config_test.go b/pkg/network/config/config_test.go index b336251a3036ca..1ef918117abad8 100644 --- a/pkg/network/config/config_test.go +++ b/pkg/network/config/config_test.go @@ -122,32 +122,6 @@ func TestEnableHTTPMonitoring(t *testing.T) { defer restoreGlobalConfig() t.Setenv("DD_SYSTEM_PROBE_NETWORK_ENABLE_HTTP_MONITORING", "true") - _, err := sysconfig.New("") - require.NoError(t, err) - cfg := New() - - assert.True(t, cfg.EnableHTTPMonitoring) - }) -} - -func TestEnableHTTPMonitoringViaHTTP(t *testing.T) { - t.Run("via YAML", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - - _, err := sysconfig.New("./testdata/TestDDAgentConfigYamlAndSystemProbeConfig-EnableHTTP.yaml") - require.NoError(t, err) - cfg := New() - - assert.True(t, cfg.EnableHTTPMonitoring) - }) - - t.Run("via ENV variable", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - - os.Setenv("DD_SYSTEM_PROBE_NETWORK_ENABLE_HTTP_MONITORING", "true") - defer os.Unsetenv("DD_SYSTEM_PROBE_NETWORK_ENABLE_HTTP_MONITORING") _, err := sysconfig.New("") require.NoError(t, err) diff --git a/pkg/network/ebpf/c/prebuilt/http.c b/pkg/network/ebpf/c/prebuilt/http.c index 849be98da1108b..392db2b10f524d 100644 --- a/pkg/network/ebpf/c/prebuilt/http.c +++ b/pkg/network/ebpf/c/prebuilt/http.c @@ -59,7 +59,7 @@ int socket__http2_filter(struct __sk_buff *skb) { return 0; } bpf_memset(http2_conn, 0, sizeof(http2_transaction_t)); - if (!read_conn_tuple_skb(skb, &skb_info, &http2_conn->tup)) { + if (read_conn_tuple_skb(skb, &skb_info, &http2_conn->tup)) { http2_entrypoint(skb, &skb_info, http2_conn); } diff --git a/pkg/network/ebpf/c/prebuilt/tracer.c b/pkg/network/ebpf/c/prebuilt/tracer.c index b1c8d6fef51630..a78af9cf3adb67 100644 --- a/pkg/network/ebpf/c/prebuilt/tracer.c +++ b/pkg/network/ebpf/c/prebuilt/tracer.c @@ -4,7 +4,7 @@ #include "bpf_tracing.h" #include "tracer.h" -#include "protocols/protocol-classification-helpers.h" +#include "protocols/protocol-classification.h" #include "tracer-events.h" #include "tracer-maps.h" #include "tracer-stats.h" @@ -441,16 +441,43 @@ int kprobe__tcp_retransmit_skb(struct pt_regs *ctx) { struct sock *sk = (struct sock *)PT_REGS_PARM1(ctx); int segs = (int)PT_REGS_PARM3(ctx); log_debug("kprobe/tcp_retransmit: segs: %d\n", segs); - - return handle_retransmit(sk, segs); + u64 pid_tgid = bpf_get_current_pid_tgid(); + tcp_retransmit_skb_args_t args = {}; + args.sk = sk; + args.segs = segs; + bpf_map_update_with_telemetry(pending_tcp_retransmit_skb, &pid_tgid, &args, BPF_ANY); + return 0; } SEC("kprobe/tcp_retransmit_skb/pre_4_7_0") int kprobe__tcp_retransmit_skb_pre_4_7_0(struct pt_regs *ctx) { struct sock *sk = (struct sock *)PT_REGS_PARM1(ctx); log_debug("kprobe/tcp_retransmit/pre_4_7_0\n"); + u64 pid_tgid = bpf_get_current_pid_tgid(); + tcp_retransmit_skb_args_t args = {}; + args.sk = sk; + args.segs = 1; + bpf_map_update_with_telemetry(pending_tcp_retransmit_skb, &pid_tgid, &args, BPF_ANY); + return 0; +} - return handle_retransmit(sk, 1); +SEC("kretprobe/tcp_retransmit_skb") +int kretprobe__tcp_retransmit_skb(struct pt_regs *ctx) { + int ret = PT_REGS_RC(ctx); + __u64 tid = bpf_get_current_pid_tgid(); + if (ret < 0) { + bpf_map_delete_elem(&pending_tcp_retransmit_skb, &tid); + return 0; + } + tcp_retransmit_skb_args_t *args = bpf_map_lookup_elem(&pending_tcp_retransmit_skb, &tid); + if (args == NULL) { + return 0; + } + struct sock *sk = args->sk; + int segs = args->segs; + bpf_map_delete_elem(&pending_tcp_retransmit_skb, &tid); + log_debug("kretprobe/tcp_retransmit: segs: %d\n", segs); + return handle_retransmit(sk, segs, RETRANSMIT_COUNT_INCREMENT); } SEC("kprobe/tcp_set_state") @@ -470,7 +497,7 @@ int kprobe__tcp_set_state(struct pt_regs *ctx) { } tcp_stats_t stats = { .state_transitions = (1 << state) }; - update_tcp_stats(&t, stats); + update_tcp_stats(&t, stats, RETRANSMIT_COUNT_NONE); return 0; } @@ -609,27 +636,12 @@ static __always_inline int sys_enter_bind(struct socket *sock, struct sockaddr * return 0; } - u16 sin_port = 0; - sa_family_t family = 0; - bpf_probe_read_kernel_with_telemetry(&family, sizeof(sa_family_t), &addr->sa_family); - if (family == AF_INET) { - bpf_probe_read_kernel_with_telemetry(&sin_port, sizeof(u16), &(((struct sockaddr_in *)addr)->sin_port)); - } else if (family == AF_INET6) { - bpf_probe_read_kernel_with_telemetry(&sin_port, sizeof(u16), &(((struct sockaddr_in6 *)addr)->sin6_port)); - } - - sin_port = ntohs(sin_port); - if (sin_port == 0) { - log_debug("ERR(sys_enter_bind): sin_port is 0\n"); - return 0; - } - // write to pending_binds so the retprobe knows we can mark this as binding. bind_syscall_args_t args = {}; - args.port = sin_port; - + bpf_probe_read_kernel_with_telemetry(&args.sk, sizeof(args.sk), (char*)sock + offset_socket_sk()); + args.addr = addr; bpf_map_update_with_telemetry(pending_bind, &tid, &args, BPF_ANY); - log_debug("sys_enter_bind: started a bind on UDP port=%d sock=%llx tid=%u\n", sin_port, sock, tid); + log_debug("sys_enter_bind: started a bind on UDP sock=%llx tid=%u\n", sock, tid); return 0; } @@ -658,8 +670,7 @@ static __always_inline int sys_exit_bind(__s64 ret) { __u64 tid = bpf_get_current_pid_tgid(); // bail if this bind() is not the one we're instrumenting - bind_syscall_args_t *args; - args = bpf_map_lookup_elem(&pending_bind, &tid); + bind_syscall_args_t *args = bpf_map_lookup_elem(&pending_bind, &tid); log_debug("sys_exit_bind: tid=%u, ret=%d\n", tid, ret); @@ -668,13 +679,33 @@ static __always_inline int sys_exit_bind(__s64 ret) { return 0; } - __u16 sin_port = args->port; + struct sock * sk = args->sk; + struct sockaddr *addr = args->addr; bpf_map_delete_elem(&pending_bind, &tid); if (ret != 0) { return 0; } + u16 sin_port = 0; + sa_family_t family = 0; + bpf_probe_read_kernel_with_telemetry(&family, sizeof(sa_family_t), &addr->sa_family); + if (family == AF_INET) { + bpf_probe_read_kernel_with_telemetry(&sin_port, sizeof(u16), &(((struct sockaddr_in *)addr)->sin_port)); + } else if (family == AF_INET6) { + bpf_probe_read_kernel_with_telemetry(&sin_port, sizeof(u16), &(((struct sockaddr_in6 *)addr)->sin6_port)); + } + + sin_port = ntohs(sin_port); + if (sin_port == 0) { + sin_port = read_sport(sk); + } + + if (sin_port == 0) { + log_debug("ERR(sys_exit_bind): sin_port is 0\n"); + return 0; + } + port_binding_t pb = {}; pb.netns = 0; // don't have net ns info in this context pb.port = sin_port; diff --git a/pkg/network/ebpf/c/prebuilt/usm_events_test.c b/pkg/network/ebpf/c/prebuilt/usm_events_test.c new file mode 100644 index 00000000000000..2810c33becae9f --- /dev/null +++ b/pkg/network/ebpf/c/prebuilt/usm_events_test.c @@ -0,0 +1,52 @@ +#include "kconfig.h" +#include +#include + +#include "bpf_helpers.h" +#include "bpf_builtins.h" +#include "map-defs.h" +#include "protocols/events.h" + +// -------------------------------------------------------- +// this is a test program for pkg/networks/protocols/events +// -------------------------------------------------------- + +#define BATCH_SIZE 15 + +typedef struct { + __u32 expected_pid; + __u64 expected_fd; + __u64 event_id; +} test_ctx_t; + +BPF_LRU_MAP(test, __u32, test_ctx_t, 1); +USM_EVENTS_INIT(test, u64, BATCH_SIZE); + +// source /sys/kernel/debug/tracing/events/syscalls/sys_enter_write/format +struct syscalls_enter_write_args { + unsigned long long unused; + long syscall_nr; + unsigned long long fd; + const char* buf; + size_t count; +}; + +SEC("tracepoint/syscalls/sys_enter_write") +int tracepoint__syscalls__sys_enter_write(struct syscalls_enter_write_args *ctx) { + __u32 zero = 0; + __u32 pid = bpf_get_current_pid_tgid() >> 32; + test_ctx_t *test_ctx = bpf_map_lookup_elem(&test, &zero); + if (!test_ctx || test_ctx->expected_fd != ctx->fd || test_ctx->expected_pid != pid) + return 0; + + // we're echoing to userspace whatever we read from the eBPF map + __u64 event = test_ctx->event_id; + + // these functions are dynamically defined by `USM_EVENTS_INIT` + test_batch_enqueue(&event); + test_flush_batch((void*)ctx); + return 0; +} + +__u32 _version SEC("version") = 0xFFFFFFFE; // NOLINT(bugprone-reserved-identifier) +char _license[] SEC("license") = "GPL"; // NOLINT(bugprone-reserved-identifier) diff --git a/pkg/network/ebpf/c/protocols/amqp-defs.h b/pkg/network/ebpf/c/protocols/amqp-defs.h new file mode 100644 index 00000000000000..a3f83fdaa57370 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/amqp-defs.h @@ -0,0 +1,22 @@ +#ifndef __AMQP_DEFS_H +#define __AMQP_DEFS_H + +// RabbitMQ supported classes. +// Ref: https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf +#define AMQP_CONNECTION_CLASS 10 +#define AMQP_BASIC_CLASS 60 + +// RabbitMQ supported connections. +#define AMQP_METHOD_CONNECTION_START 10 +#define AMQP_METHOD_CONNECTION_START_OK 11 + +// RabbitMQ supported methods types. +#define AMQP_METHOD_CONSUME 20 +#define AMQP_METHOD_PUBLISH 40 +#define AMQP_METHOD_DELIVER 60 +#define AMQP_FRAME_METHOD_TYPE 1 + +#define AMQP_MIN_FRAME_LENGTH 8 +#define AMQP_MIN_PAYLOAD_LENGTH 11 + +#endif diff --git a/pkg/network/ebpf/c/protocols/amqp-helpers.h b/pkg/network/ebpf/c/protocols/amqp-helpers.h new file mode 100644 index 00000000000000..68b9d0e536574a --- /dev/null +++ b/pkg/network/ebpf/c/protocols/amqp-helpers.h @@ -0,0 +1,57 @@ +#ifndef __AMQP_HELPERS_H +#define __AMQP_HELPERS_H + +#include "amqp-defs.h" +#include "protocol-classification-common.h" + +// The method checks if the given buffer includes the protocol header which must be sent in the start of a new connection. +// Ref: https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf +static __always_inline bool is_amqp_protocol_header(const char* buf, __u32 buf_size) { + CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, AMQP_MIN_FRAME_LENGTH); + +#define AMQP_PREFACE "AMQP" + + bool match = !bpf_memcmp(buf, AMQP_PREFACE, sizeof(AMQP_PREFACE)-1); + + return match; +} + +// The method checks if the given buffer is an AMQP message. +// Ref: https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf +static __always_inline bool is_amqp(const char* buf, __u32 buf_size) { + // New connection should start with protocol header of AMQP. + // Ref https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf. + if (is_amqp_protocol_header(buf, buf_size)) { + return true; + } + + // Validate that we will be able to get from the buffer the class and method ids. + if (buf_size < AMQP_MIN_PAYLOAD_LENGTH) { + return false; + } + + uint8_t frame_type = buf[0]; + // Check only for method frame type. + if (frame_type != AMQP_FRAME_METHOD_TYPE) { + return false; + } + + // We extract the class id and method id by big indian from the buffer. + // Ref https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf. + __u16 class_id = buf[7] << 8 | buf[8]; + __u16 method_id = buf[9] << 8 | buf[10]; + + // ConnectionStart, ConnectionStartOk, BasicPublish, BasicDeliver, BasicConsume are the most likely methods to + // consider for the classification. + if (class_id == AMQP_CONNECTION_CLASS) { + return method_id == AMQP_METHOD_CONNECTION_START || method_id == AMQP_METHOD_CONNECTION_START_OK; + } + + if (class_id == AMQP_BASIC_CLASS) { + return method_id == AMQP_METHOD_PUBLISH || method_id == AMQP_METHOD_DELIVER || method_id == AMQP_METHOD_CONSUME; + } + + return false; +} + +#endif diff --git a/pkg/network/ebpf/c/protocols/events-types.h b/pkg/network/ebpf/c/protocols/events-types.h new file mode 100644 index 00000000000000..bd48a10a19ddff --- /dev/null +++ b/pkg/network/ebpf/c/protocols/events-types.h @@ -0,0 +1,36 @@ +#ifndef __USM_EVENTS_TYPES_H +#define __USM_EVENTS_TYPES_H + +#include + +#define BATCH_BUFFER_SIZE (4*1024) +#define BATCH_PAGES_PER_CPU 3 + +typedef struct { + // idx is a monotonic counter used for uniquely determining a batch within a CPU core + // this is useful for detecting race conditions that result in a batch being overwritten + // before it gets consumed from userspace + __u64 idx; + // idx_to_flush is used to track which batches were flushed to userspace + // * if idx_to_flush == idx, the current index is still being appended to; + // * if idx_to_flush < idx, the batch at idx_to_flush needs to be sent to userspace; + // (note that idx will never be less than idx_to_flush); + __u64 idx_to_flush; +} batch_state_t; + +// this struct is used in the map lookup that returns the active batch for a certain CPU core +typedef struct { + __u32 cpu; + // page_num can be obtained from (batch_state_t->idx % BATCHES_PER_CPU) + __u32 page_num; +} batch_key_t; + +typedef struct { + __u64 idx; + __u16 len; + __u16 cap; + __u16 event_size; + char data[BATCH_BUFFER_SIZE]; +} batch_data_t; + +#endif diff --git a/pkg/network/ebpf/c/protocols/events.h b/pkg/network/ebpf/c/protocols/events.h new file mode 100644 index 00000000000000..acee3dc1d362a7 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/events.h @@ -0,0 +1,118 @@ +#ifndef __USM_EVENTS_H +#define __USM_EVENTS_H + +#include "events-types.h" +#include "bpf_telemetry.h" + +/* USM_EVENTS_INIT defines two functions used for the purposes of buffering and sending + data to userspace: + 1) _batch_enqueue + 1) _flush_batch + For more information of this please refer to + pkg/networks/protocols/events/README.md */ +#define USM_EVENTS_INIT(name, value, batch_size) \ + _Static_assert((sizeof(value)*batch_size) <= BATCH_BUFFER_SIZE, \ + _STR(name)" batch is too large"); \ + \ + BPF_PERCPU_ARRAY_MAP(name##_batch_state, __u32, batch_state_t, 1) \ + BPF_PERF_EVENT_ARRAY_MAP(name##_batch_events, __u32, 0) \ + BPF_HASH_MAP(name##_batches, batch_key_t, batch_data_t, 0) \ + \ + static __always_inline bool name##_batch_full(batch_data_t *batch) { \ + return batch && batch->len == batch_size; \ + } \ + \ + static __always_inline void name##_flush_batch(struct pt_regs *ctx) { \ + u32 zero = 0; \ + batch_state_t *batch_state = bpf_map_lookup_elem(&name##_batch_state, &zero); \ + if (!batch_state || batch_state->idx_to_flush == batch_state->idx) { \ + /* batch is not ready to be flushed */ \ + return; \ + } \ + \ + batch_key_t key = get_batch_key(batch_state->idx_to_flush); \ + batch_data_t *batch = bpf_map_lookup_elem(&name##_batches, &key); \ + if (!batch) { \ + return; \ + } \ + \ + long ret = bpf_perf_event_output_with_telemetry(ctx, \ + &name##_batch_events, key.cpu, \ + batch, sizeof(batch_data_t)); \ + if (ret < 0) { \ + _LOG(name, "batch flush error: cpu: %d idx: %d err:%d", \ + key.cpu, batch->idx, ret); \ + return; \ + } \ + \ + _LOG(name, "batch flushed: cpu: %d idx: %d", key.cpu, batch->idx); \ + batch->len = 0; \ + batch_state->idx_to_flush++; \ + } \ + \ + static __always_inline void name##_batch_enqueue(value *event) { \ + u32 zero = 0; \ + batch_state_t *batch_state = bpf_map_lookup_elem(&name##_batch_state, &zero); \ + if (batch_state == NULL) { \ + return; \ + } \ + \ + batch_key_t key = get_batch_key(batch_state->idx); \ + batch_data_t *batch = bpf_map_lookup_elem(&name##_batches, &key); \ + if (batch == NULL) { \ + return; \ + } \ + \ + /* if this happens it indicates that _flush_batch is not + executing often enough and/or that BATCH_PAGES_PER_CPU is not large + enough */ \ + if (name##_batch_full(batch)) { \ + _LOG(name, "enqueue error: dropping event because batch is full.", \ + bpf_get_smp_processor_id(), batch->idx); \ + return; \ + } \ + \ + /* this will copy the given event into an eBPF map entry representing the + current active batch */ \ + if (!__enqueue_event((void *)batch, event, sizeof(value))) \ + return; \ + \ + /* annotate batch with metadata used by userspace */ \ + batch->cap = batch_size; \ + batch->event_size = sizeof(value); \ + batch->idx = batch_state->idx; \ + \ + _LOG(name, "event enqueued: cpu: %d batch_idx: %d len: %d", \ + key.cpu, batch_state->idx, batch->len); \ + /* if we have filled up the batch we move to the next one. + notice the batch will be sent "asynchronously" to userspace during the + next call of _flush_batch */ \ + if (name##_batch_full(batch)) { \ + batch_state->idx++; \ + } \ + } \ + +static __always_inline batch_key_t get_batch_key(u64 batch_idx) { + batch_key_t key = { 0 }; + key.cpu = bpf_get_smp_processor_id(); + key.page_num = batch_idx % BATCH_PAGES_PER_CPU; + return key; +} + +static __always_inline bool __enqueue_event(batch_data_t *batch, void *event, size_t event_size) { + /* bounds check to make eBPF verifier happy */ + u32 offset = batch->len*event_size; + if (offset < 0 || offset+event_size>sizeof(batch->data)) { + return false; + } + + bpf_memcpy(&batch->data[offset], event, event_size); + batch->len++; + return true; +} + +#define _STR(x) #x +#define _LOG(protocol, message, args...) \ + log_debug(_STR(protocol) " " message "\n", args); + +#endif diff --git a/pkg/network/ebpf/c/protocols/http-classification-defs.h b/pkg/network/ebpf/c/protocols/http-classification-defs.h new file mode 100644 index 00000000000000..26260127087748 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/http-classification-defs.h @@ -0,0 +1,8 @@ +#ifndef __HTTP_CLASSIFICATION_DEFS_H +#define __HTTP_CLASSIFICATION_DEFS_H + +// The minimal HTTP response has 17 characters: HTTP/1.1 200 OK\r\n +// The minimal HTTP request has 16 characters: GET x HTTP/1.1\r\n +#define HTTP_MIN_SIZE 16 + +#endif diff --git a/pkg/network/ebpf/c/protocols/http-classification-helpers.h b/pkg/network/ebpf/c/protocols/http-classification-helpers.h new file mode 100644 index 00000000000000..329c2f7da3f8d6 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/http-classification-helpers.h @@ -0,0 +1,37 @@ +#ifndef __HTTP_HELPERS_H +#define __HTTP_HELPERS_H + +#include "protocol-classification-common.h" + +// Checks if the given buffers start with `HTTP` prefix (represents a response) or starts with ` /` which represents +// a request, where is one of: GET, POST, PUT, DELETE, HEAD, OPTIONS, or PATCH. +static __always_inline bool is_http(const char *buf, __u32 size) { + CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, size, HTTP_MIN_SIZE); + +#define HTTP "HTTP/" +#define GET "GET /" +#define POST "POST /" +#define PUT "PUT /" +#define DELETE "DELETE /" +#define HEAD "HEAD /" +#define OPTIONS1 "OPTIONS /" +#define OPTIONS2 "OPTIONS *" +#define PATCH "PATCH /" + + // memcmp returns + // 0 when s1 == s2, + // !0 when s1 != s2. + bool http = !(bpf_memcmp(buf, HTTP, sizeof(HTTP)-1) + && bpf_memcmp(buf, GET, sizeof(GET)-1) + && bpf_memcmp(buf, POST, sizeof(POST)-1) + && bpf_memcmp(buf, PUT, sizeof(PUT)-1) + && bpf_memcmp(buf, DELETE, sizeof(DELETE)-1) + && bpf_memcmp(buf, HEAD, sizeof(HEAD)-1) + && bpf_memcmp(buf, OPTIONS1, sizeof(OPTIONS1)-1) + && bpf_memcmp(buf, OPTIONS2, sizeof(OPTIONS2)-1) + && bpf_memcmp(buf, PATCH, sizeof(PATCH)-1)); + + return http; +} + +#endif diff --git a/pkg/network/ebpf/c/protocols/http-maps.h b/pkg/network/ebpf/c/protocols/http-maps.h index e58aab15f33af7..b876eb44aa782a 100644 --- a/pkg/network/ebpf/c/protocols/http-maps.h +++ b/pkg/network/ebpf/c/protocols/http-maps.h @@ -10,18 +10,6 @@ /* This map is used to keep track of in-flight HTTP transactions for each TCP connection */ BPF_LRU_MAP(http_in_flight, conn_tuple_t, http_transaction_t, 0) -/* This map used for flush complete HTTP batches to userspace */ -BPF_PERF_EVENT_ARRAY_MAP(http_batch_events, __u32, 0) - -/* - This map stores finished HTTP transactions in batches so they can be consumed by userspace - Size is set dynamically during runtime and must be equal to CPUs*HTTP_BATCH_PAGES - */ -BPF_HASH_MAP(http_batches, http_batch_key_t, http_batch_t, 0) - -/* This map holds one entry per CPU storing state associated to current http batch*/ -BPF_PERCPU_ARRAY_MAP(http_batch_state, __u32, http_batch_state_t, 1) - BPF_LRU_MAP(ssl_sock_by_ctx, void *, ssl_sock_t, 1) BPF_LRU_MAP(ssl_read_args, u64, ssl_read_args_t, 1024) diff --git a/pkg/network/ebpf/c/protocols/http-types.h b/pkg/network/ebpf/c/protocols/http-types.h index 9aedc62ff1e934..a99263e43c77f1 100644 --- a/pkg/network/ebpf/c/protocols/http-types.h +++ b/pkg/network/ebpf/c/protocols/http-types.h @@ -7,10 +7,6 @@ #define HTTP_BUFFER_SIZE (8 * 20) // This controls the number of HTTP transactions read from userspace at a time #define HTTP_BATCH_SIZE 15 -// HTTP_BATCH_PAGES controls how many `http_batch_t` instances exist for each CPU core -// It's desirable to set this >= 1 to allow batch insertion and flushing to happen idependently -// without risk of overriding data. -#define HTTP_BATCH_PAGES 3 // HTTP/1.1 XXX // _________^ @@ -39,13 +35,6 @@ typedef enum HTTP_PATCH } http_method_t; -// This struct is used in the map lookup that returns the active batch for a certain CPU core -typedef struct { - __u32 cpu; - // page_num can be obtained from (http_batch_state_t->idx % HTTP_BATCHES_PER_CPU) - __u32 page_num; -} http_batch_key_t; - // HTTP transaction information associated to a certain socket (tuple_t) typedef struct { conn_tuple_t tup; @@ -68,24 +57,6 @@ typedef struct { __u64 tags; } http_transaction_t; -typedef struct { - // idx is a monotonic counter used for uniquely determinng a batch within a CPU core - // this is useful for detecting race conditions that result in a batch being overrriden - // before it gets consumed from userspace - __u64 idx; - // idx_to_flush is used to track which batches were flushed to userspace - // * if idx_to_flush == idx, the current index is still being appended to; - // * if idx_to_flush < idx, the batch at idx_to_notify needs to be sent to userspace; - // (note that idx will never be less than idx_to_flush); - __u64 idx_to_flush; -} http_batch_state_t; - -typedef struct { - __u64 idx; - __u8 pos; - http_transaction_t txs[HTTP_BATCH_SIZE]; -} http_batch_t; - // OpenSSL types typedef struct { void *ctx; diff --git a/pkg/network/ebpf/c/protocols/http.h b/pkg/network/ebpf/c/protocols/http.h index 0c82b4b5cc7d3e..9997c1c739406d 100644 --- a/pkg/network/ebpf/c/protocols/http.h +++ b/pkg/network/ebpf/c/protocols/http.h @@ -7,85 +7,16 @@ #include "http-types.h" #include "http-maps.h" #include "https.h" +#include "events.h" #include -static __always_inline http_batch_key_t http_get_batch_key(u64 batch_idx) { - http_batch_key_t key = { 0 }; - key.cpu = bpf_get_smp_processor_id(); - key.page_num = batch_idx % HTTP_BATCH_PAGES; - return key; -} - -static __always_inline void http_flush_batch(struct pt_regs *ctx) { - u32 zero = 0; - http_batch_state_t *batch_state = bpf_map_lookup_elem(&http_batch_state, &zero); - if (batch_state == NULL || batch_state->idx_to_flush == batch_state->idx) { - // batch is not ready to be flushed - return; - } - - http_batch_key_t key = http_get_batch_key(batch_state->idx_to_flush); - http_batch_t *batch = bpf_map_lookup_elem(&http_batches, &key); - if (batch == NULL) { - return; - } - - bpf_perf_event_output_with_telemetry(ctx, &http_batch_events, key.cpu, batch, sizeof(http_batch_t)); - log_debug("http batch flushed: cpu: %d idx: %d\n", key.cpu, batch->idx); - batch->pos = 0; - batch_state->idx_to_flush++; -} +USM_EVENTS_INIT(http, http_transaction_t, HTTP_BATCH_SIZE); static __always_inline int http_responding(http_transaction_t *http) { return (http != NULL && http->response_status_code != 0); } - -static __always_inline bool http_batch_full(http_batch_t *batch) { - return batch && batch->pos == HTTP_BATCH_SIZE; -} - -static __always_inline void http_enqueue(http_transaction_t *http) { - // Retrieve the active batch number for this CPU - u32 zero = 0; - http_batch_state_t *batch_state = bpf_map_lookup_elem(&http_batch_state, &zero); - if (batch_state == NULL) { - return; - } - - // Retrieve the batch object - http_batch_key_t key = http_get_batch_key(batch_state->idx); - http_batch_t *batch = bpf_map_lookup_elem(&http_batches, &key); - if (batch == NULL) { - return; - } - - if (http_batch_full(batch)) { - // this scenario should never happen and indicates a bug - // TODO: turn this into telemetry for release 7.41 - log_debug("http_enqueue error: dropping request because batch is full. cpu=%d batch_idx=%d\n", bpf_get_smp_processor_id(), batch->idx); - return; - } - - // Bounds check to make verifier happy - if (batch->pos < 0 || batch->pos >= HTTP_BATCH_SIZE) { - return; - } - - bpf_memcpy(&batch->txs[batch->pos], http, sizeof(http_transaction_t)); - log_debug("http_enqueue: htx=%llx path=%s, method=%d\n", http, http->request_fragment, http->request_method); - log_debug("http transaction enqueued: cpu: %d batch_idx: %d pos: %d\n", key.cpu, batch_state->idx, batch->pos); - batch->pos++; - batch->idx = batch_state->idx; - - // If we have filled the batch we move to the next one - // Notice that we don't flush it directly because we can't do so from socket filter programs. - if (http_batch_full(batch)) { - batch_state->idx++; - } -} - static __always_inline void http_begin_request(http_transaction_t *http, http_method_t method, char *buffer) { http->request_method = method; http->request_started = bpf_ktime_get_ns(); @@ -197,7 +128,7 @@ static __always_inline int http_process(http_transaction_t *http_stack, skb_info } if (http_should_flush_previous_state(http, packet_type)) { - http_enqueue(http); + http_batch_enqueue(http); bpf_memcpy(http, http_stack, sizeof(http_transaction_t)); } @@ -217,7 +148,7 @@ static __always_inline int http_process(http_transaction_t *http_stack, skb_info } if (http_closed(http, skb_info, http_stack->owned_by_src_port)) { - http_enqueue(http); + http_batch_enqueue(http); bpf_map_delete_elem(&http_in_flight, &http_stack->tup); } diff --git a/pkg/network/ebpf/c/protocols/http2-decoding-defs.h b/pkg/network/ebpf/c/protocols/http2-decoding-defs.h new file mode 100644 index 00000000000000..3036c7238f9d02 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/http2-decoding-defs.h @@ -0,0 +1,109 @@ +#ifndef __HTTP2_DECODING_DEFS_H +#define __HTTP2_DECODING_DEFS_H + +#include +#include "http2-defs.h" + +// A limit of max frames we will upload from a single connection to the user mode. +// NOTE: we may need to revisit this const if we need to capture more connections. +#define HTTP2_MAX_FRAMES 3 + +// A limit of max headers frames which we except to see in the request/response. +// NOTE: we may need to change the max size. +#define HTTP2_MAX_HEADERS_COUNT 12 + +// A limit of max frame size in order to be able to load a max size and pass the varifier. +// NOTE: we may need to change the max size. +#define HTTP2_MAX_PATH_LEN 32 + +#define MAX_STATIC_TABLE_INDEX 61 + +// This determines the size of the payload fragment that is captured for each HTTP request +#define HTTP2_BUFFER_SIZE (8 * 20) + +typedef enum { + kMethod = 2, + kPath = 4, + kStatus = 9, +} __attribute__ ((packed)) static_table_key_t; + +typedef enum { + kGET = 2, + kPOST = 3, + kEmptyPath = 4, + kIndexPath = 5, + k200 = 8, + k204 = 9, + k206 = 10, + k304 = 11, + k400 = 12, + k404 = 13, + k500 = 14, +} __attribute__ ((packed)) static_table_value_t; + +typedef struct { + static_table_key_t key; + static_table_value_t value; +} static_table_entry_t; + +typedef struct { + char buffer[32] __attribute__ ((aligned (8))); + __u64 string_len; +} string_value_t; + +// TODO: Do we need the index? Should it be static_table_key_t? +typedef struct { + __u64 index; + string_value_t value; +} dynamic_table_entry_t; + +typedef struct { + __u64 index; + conn_tuple_t old_tup; +} dynamic_table_index_t; + +typedef enum { + HTTP2_PACKET_UNKNOWN, + HTTP2_REQUEST, + HTTP2_RESPONSE +} http2_packet_t; + +typedef enum { + HTTP2_METHOD_UNKNOWN, + HTTP2_GET, + HTTP2_POST, +} http2_method_t; + +typedef struct { + conn_tuple_t tup; + char request_fragment[HTTP2_BUFFER_SIZE] __attribute__ ((aligned (8))); + + char *frag_head; + char *frag_end; +} http2_connection_t; + +// HTTP2 transaction information associated to a certain socket (tuple_t) +typedef struct { + conn_tuple_t old_tup; + conn_tuple_t tup; + __u64 request_started; + __u64 tags; + __u64 response_last_seen; + + __u32 tcp_seq; + __u32 current_offset_in_request_fragment; + + char request_fragment[HTTP2_BUFFER_SIZE] __attribute__ ((aligned (8))); + + __u16 response_status_code; + __u16 owned_by_src_port; + + bool end_of_stream; + __u8 request_method; + __u8 packet_type; + __u8 stream_id; + __u64 path_size; + char path[HTTP2_MAX_PATH_LEN] __attribute__ ((aligned (8))); +} http2_transaction_t; + +#endif diff --git a/pkg/network/ebpf/c/protocols/http2-decoding.h b/pkg/network/ebpf/c/protocols/http2-decoding.h index 4913b754b4f43e..d1ad31f48b1e64 100644 --- a/pkg/network/ebpf/c/protocols/http2-decoding.h +++ b/pkg/network/ebpf/c/protocols/http2-decoding.h @@ -7,7 +7,7 @@ #include "bpf_builtins.h" #include "bpf_helpers.h" #include "map-defs.h" -#include "http2-defs.h" +#include "http2-decoding-defs.h" #include "http2-maps-defs.h" #include "http2-maps-defs-classify.h" #include "http-types.h" @@ -125,11 +125,21 @@ static __always_inline int http2_process(http2_transaction_t* http2_stack, skb_ // todo: take it out to a function and add all the other options as well. switch(http2_stack->response_status_code) { - case k200: response_code = 200; - case k204: response_code = 204; - case k206: response_code = 206; - case k400: response_code = 400; - case k500: response_code = 500; + case k200: + response_code = 200; + break; + case k204: + response_code = 204; + break; + case k206: + response_code = 206; + break; + case k400: + response_code = 400; + break; + case k500: + response_code = 500; + break; } http->response_status_code = response_code; @@ -140,7 +150,7 @@ static __always_inline int http2_process(http2_transaction_t* http2_stack, skb_ http->tcp_seq = trans->tcp_seq; http->tags = trans->tags; - http_enqueue(http); + http_batch_enqueue(http); // bpf_map_delete_elem(&http2_in_flight, &http2_stack->tup); } } @@ -156,11 +166,12 @@ static __always_inline int http2_process(http2_transaction_t* http2_stack, skb_ // // The returned remain buffer is either a smaller suffix of p, or err != nil. // The error is errNeedMore if p doesn't contain a complete integer. -static __always_inline __u64 read_var_int(http2_transaction_t* http2_transaction, __u64 factor, __u64 current_char_as_number){ +static __always_inline __u64 read_var_int(http2_transaction_t* http2_transaction, __u64 factor){ if (http2_transaction->current_offset_in_request_fragment > sizeof(http2_transaction->request_fragment)) { return false; } + __u64 current_char_as_number = http2_transaction->request_fragment[http2_transaction->current_offset_in_request_fragment]; current_char_as_number &= (1 << factor) - 1; if (current_char_as_number < (1 << factor) - 1) { @@ -187,8 +198,8 @@ static __always_inline bool classify_static_value(http2_transaction_t* http2_tra } // parse_field_indexed is handling the case which the header frame is part of the static table. -static __always_inline void parse_field_indexed(http2_transaction_t* http2_transaction, __u64 current_char_as_number){ - __u64 index = read_var_int(http2_transaction, 7, current_char_as_number); +static __always_inline void parse_field_indexed(http2_transaction_t* http2_transaction){ + __u64 index = read_var_int(http2_transaction, 7); if (index <= MAX_STATIC_TABLE_INDEX) { static_table_entry_t* static_value = bpf_map_lookup_elem(&http2_static_table, &index); if (static_value != NULL) { @@ -214,14 +225,14 @@ static __always_inline void parse_field_indexed(http2_transaction_t* http2_trans } // index 5 represents the :path header - from dynamic table - if ((dynamic_value_new->index == 5) && (sizeof(dynamic_value_new->value.buffer)>0)){ + if (dynamic_value_new->index == 5){ bpf_memcpy(http2_transaction->path, dynamic_value_new->value.buffer, HTTP2_MAX_PATH_LEN); http2_transaction->path_size = dynamic_value_new->value.string_len; } } -static __always_inline bool update_current_offset(http2_transaction_t* http2_transaction, __u64 current_char_as_number){ - __u64 str_len = read_var_int(http2_transaction, 6, current_char_as_number); +static __always_inline bool update_current_offset(http2_transaction_t* http2_transaction){ + __u64 str_len = read_var_int(http2_transaction, 6); if (str_len == -1) { return false; } @@ -231,7 +242,7 @@ static __always_inline bool update_current_offset(http2_transaction_t* http2_tra //// parse_field_literal handling the case when the key is part of the static table and the value is a dynamic string //// which will be stored in the dynamic table. -static __always_inline void parse_field_literal(http2_transaction_t* http2_transaction, bool index_type, __u64 current_char_as_number){ +static __always_inline void parse_field_literal(http2_transaction_t* http2_transaction, bool index_type){ __u64 counter = 0; // global counter is the counter which help us with the calc of the index in our internal hpack dynamic table @@ -243,19 +254,19 @@ static __always_inline void parse_field_literal(http2_transaction_t* http2_trans // update the global counter. bpf_map_update_elem(&http2_dynamic_counter_table, &http2_transaction->old_tup, &counter, BPF_ANY); - __u64 index = read_var_int(http2_transaction, 6, current_char_as_number); + __u64 index = read_var_int(http2_transaction, 6); dynamic_table_entry_t dynamic_value = {}; dynamic_table_index_t dynamic_index = {}; static_table_entry_t *static_value = bpf_map_lookup_elem(&http2_static_table, &index); if (static_value == NULL) { - update_current_offset(http2_transaction, current_char_as_number); + update_current_offset(http2_transaction); // Literal Header Field with Incremental Indexing - New Name, which means we need to read the body as well, // so we are reading again and updating the len. // TODO: Better document. if (index == 0) { - update_current_offset(http2_transaction, current_char_as_number); + update_current_offset(http2_transaction); } return; } @@ -264,7 +275,7 @@ static __always_inline void parse_field_literal(http2_transaction_t* http2_trans dynamic_value.index = static_value->key; } - __u64 str_len = read_var_int(http2_transaction, 6, current_char_as_number); + __u64 str_len = read_var_int(http2_transaction, 6); if (str_len == -1 || str_len == 0){ return; } @@ -277,7 +288,6 @@ static __always_inline void parse_field_literal(http2_transaction_t* http2_trans // create the new dynamic value which will be added to the internal table. bpf_memcpy(dynamic_value.value.buffer, beginning, HTTP2_MAX_PATH_LEN); - dynamic_value.value.string_len = str_len; dynamic_value.index = index; @@ -314,13 +324,13 @@ static __always_inline bool process_headers(http2_transaction_t* http2_transacti // MSB bit set. // https://httpwg.org/specs/rfc7541.html#rfc.section.6.1 log_debug("[http2] first char %d & 128 != 0; calling parse_field_indexed", current_ch); - parse_field_indexed(http2_transaction, current_ch); + parse_field_indexed(http2_transaction); } else if ((current_ch&192) == 64) { // 6.2.1 Literal Header Field with Incremental Indexing // top two bits are 10 // https://httpwg.org/specs/rfc7541.html#rfc.section.6.2.1 log_debug("[http2] first char %d & 192 == 64; calling parse_field_literal", current_ch); - parse_field_literal(http2_transaction, true, current_ch); + parse_field_literal(http2_transaction, true); } } @@ -351,11 +361,6 @@ static __always_inline void process_frames(http2_transaction_t* http2_transactio // Modifying the remaining length. remaining_length -= HTTP2_FRAME_HEADER_SIZE; - log_debug("[http2] ----------\n"); - log_debug("[http2] length is %lu; type is %d\n", current_frame.length, current_frame.type); - log_debug("[http2] flags are %d; stream id is %lu\n", current_frame.flags, current_frame.stream_id); - log_debug("[http2] ----------\n"); - is_end_of_stream = (current_frame.flags & HTTP2_END_OF_STREAM) == HTTP2_END_OF_STREAM; is_supported_frame = current_frame.type == kDataFrame || current_frame.type == kHeadersFrame; if (is_supported_frame && is_end_of_stream){ @@ -371,6 +376,11 @@ static __always_inline void process_frames(http2_transaction_t* http2_transactio continue; } + log_debug("[http2] ----------\n"); + log_debug("[http2] length is %lu; type is %d\n", current_frame.length, current_frame.type); + log_debug("[http2] flags are %d; stream id is %lu\n", current_frame.flags, current_frame.stream_id); + log_debug("[http2] ----------\n"); + // Checking we can process the entire frame. if (remaining_length < (__s64)current_frame.length) { log_debug("[http2] we have %lld remaining bytes in the buffer, while the frame's length is %d\n", remaining_length, current_frame.length); @@ -395,7 +405,7 @@ static __always_inline void http2_entrypoint(struct __sk_buff *skb, skb_info_t * const __u32 payload_length = skb->len - skb_info->data_off; const __u32 final_payload_length = HTTP2_BUFFER_SIZE < payload_length ? HTTP2_BUFFER_SIZE : payload_length; if (is_http2_preface(http2_conn->request_fragment, final_payload_length)) { - log_debug("[http2] http2 magic was found, aborting"); + log_debug("[http2] http2 magic was found, aborting\n"); return; } diff --git a/pkg/network/ebpf/c/protocols/http2-defs.h b/pkg/network/ebpf/c/protocols/http2-defs.h index 65685158417ffe..798078e01f97cd 100644 --- a/pkg/network/ebpf/c/protocols/http2-defs.h +++ b/pkg/network/ebpf/c/protocols/http2-defs.h @@ -3,110 +3,36 @@ #include -// A limit of max frames we will upload from a single connection to the user mode. -// NOTE: we may need to revisit this const if we need to capture more connections. -#define HTTP2_MAX_FRAMES 3 - -// A limit of max headers frames which we except to see in the request/response. -// NOTE: we may need to change the max size. -#define HTTP2_MAX_HEADERS_COUNT 15 - -// A limit of max frame size in order to be able to load a max size and pass the varifier. -// NOTE: we may need to change the max size. -#define HTTP2_MAX_PATH_LEN 32 - -#define MAX_STATIC_TABLE_INDEX 61 +// Checkout https://datatracker.ietf.org/doc/html/rfc7540 under "HTTP/2 Connection Preface" section +#define HTTP2_MARKER_SIZE 24 +// Checkout https://datatracker.ietf.org/doc/html/rfc7540 under "Frame Format" section #define HTTP2_FRAME_HEADER_SIZE 9 - #define HTTP2_SETTINGS_SIZE 6 -// This determines the size of the payload fragment that is captured for each HTTP request -#define HTTP2_BUFFER_SIZE (8 * 20) - -typedef enum { - kMethod = 2, - kPath = 4, - kStatus = 9, -} __attribute__ ((packed)) static_table_key_t; - -typedef enum { - kGET = 2, - kPOST = 3, - kEmptyPath = 4, - kIndexPath = 5, - k200 = 8, - k204 = 9, - k206 = 10, - k304 = 11, - k400 = 12, - k404 = 13, - k500 = 14, -} __attribute__ ((packed)) static_table_value_t; - -typedef struct { - static_table_key_t key; - static_table_value_t value; -} static_table_entry_t; - -typedef struct { - char buffer[32] __attribute__ ((aligned (8))); - __u64 string_len; -} string_value_t; - -// TODO: Do we need the index? Should it be static_table_key_t? -typedef struct { - __u64 index; - string_value_t value; -} dynamic_table_entry_t; - -typedef struct { - __u64 index; - conn_tuple_t old_tup; -} dynamic_table_index_t; - -typedef enum { - HTTP2_PACKET_UNKNOWN, - HTTP2_REQUEST, - HTTP2_RESPONSE -} http2_packet_t; - +// All types of http2 frames exist in the protocol. +// Checkout https://datatracker.ietf.org/doc/html/rfc7540 under "Frame Type Registry" section. typedef enum { - HTTP2_METHOD_UNKNOWN, - HTTP2_GET, - HTTP2_POST, -} http2_method_t; - -typedef struct { - conn_tuple_t tup; - char request_fragment[HTTP2_BUFFER_SIZE] __attribute__ ((aligned (8))); - - char *frag_head; - char *frag_end; -} http2_connection_t; - -// HTTP2 transaction information associated to a certain socket (tuple_t) -typedef struct { - conn_tuple_t old_tup; - conn_tuple_t tup; - __u64 request_started; - __u64 tags; - __u64 response_last_seen; - - __u32 tcp_seq; - __u32 current_offset_in_request_fragment; - - char request_fragment[HTTP2_BUFFER_SIZE] __attribute__ ((aligned (8))); - - __u16 response_status_code; - __u16 owned_by_src_port; - - bool end_of_stream; - __u8 request_method; - __u8 packet_type; - __u8 stream_id; - __u64 path_size; - char path[32] __attribute__ ((aligned (8))); -} http2_transaction_t; + kDataFrame = 0, + kHeadersFrame = 1, + kPriorityFrame = 2, + kRSTStreamFrame = 3, + kSettingsFrame = 4, + kPushPromiseFrame = 5, + kPingFrame = 6, + kGoAwayFrame = 7, + kWindowUpdateFrame = 8, + kContinuationFrame = 9, +} __attribute__ ((packed)) frame_type_t; + +// Struct which represent the http2 frame by its fields. +// Checkout https://datatracker.ietf.org/doc/html/rfc7540#section-4.1 for frame format. +struct http2_frame { + __u32 length : 24; + frame_type_t type; + __u8 flags; + __u8 reserved : 1; + __u32 stream_id : 31; +} __attribute__ ((packed)); #endif diff --git a/pkg/network/ebpf/c/protocols/http2-helpers.h b/pkg/network/ebpf/c/protocols/http2-helpers.h new file mode 100644 index 00000000000000..d8242571d82285 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/http2-helpers.h @@ -0,0 +1,70 @@ +#ifndef __HTTP2_HELPERS_H +#define __HTTP2_HELPERS_H + +#include "http2-defs.h" +#include "bpf_endian.h" + +// This function checks if the http2 frame header is empty. +static __always_inline bool is_empty_frame_header(const char *frame) { +#define EMPTY_FRAME_HEADER "\0\0\0\0\0\0\0\0\0" + + return !bpf_memcmp(frame, EMPTY_FRAME_HEADER, sizeof(EMPTY_FRAME_HEADER) - 1); +} + +// This function reads the http2 frame header and validate the frame. +static __always_inline bool read_http2_frame_header(const char *buf, size_t buf_size, struct http2_frame *out) { + if (buf == NULL) { + return false; + } + + if (buf_size < HTTP2_FRAME_HEADER_SIZE) { + return false; + } + + if (is_empty_frame_header(buf)) { + return false; + } + + // We extract the frame by its shape to fields. + // See: https://datatracker.ietf.org/doc/html/rfc7540#section-4.1 + *out = *((struct http2_frame*)buf); + out->length = bpf_ntohl(out->length << 8); + out->stream_id = bpf_ntohl(out->stream_id << 1); + + return true; +} + +// The method checks if the given buffer starts with the HTTP2 marker as defined in https://datatracker.ietf.org/doc/html/rfc7540. +// We check that the given buffer is not empty and its size is at least 24 bytes. +static __always_inline bool is_http2_preface(const char* buf, __u32 buf_size) { + CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, HTTP2_MARKER_SIZE); + +#define HTTP2_PREFACE "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n" + + bool match = !bpf_memcmp(buf, HTTP2_PREFACE, sizeof(HTTP2_PREFACE)-1); + + return match; +} + +// According to the https://www.rfc-editor.org/rfc/rfc7540#section-3.5 +// an HTTP2 server must reply with a settings frame to the preface of HTTP2. +// The settings frame must not be related to the connection (stream_id == 0) and the length should be a multiplication +// of 6 bytes. +static __always_inline bool is_http2_server_settings(const char* buf, __u32 buf_size) { + CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, HTTP2_FRAME_HEADER_SIZE); + + struct http2_frame frame_header; + if (!read_http2_frame_header(buf, buf_size, &frame_header)) { + return false; + } + + return frame_header.type == kSettingsFrame && frame_header.stream_id == 0 && frame_header.length % HTTP2_SETTINGS_SIZE == 0; +} + +// The method checks if the given buffer starts with the HTTP2 marker as defined in https://datatracker.ietf.org/doc/html/rfc7540. +// We check that the given buffer is not empty and its size is at least 24 bytes. +static __always_inline bool is_http2(const char* buf, __u32 buf_size) { + return is_http2_preface(buf, buf_size) || is_http2_server_settings(buf, buf_size); +} + +#endif diff --git a/pkg/network/ebpf/c/protocols/http2.h b/pkg/network/ebpf/c/protocols/http2.h deleted file mode 100644 index 2d8e03ca9f5c39..00000000000000 --- a/pkg/network/ebpf/c/protocols/http2.h +++ /dev/null @@ -1,86 +0,0 @@ -#ifndef __HTTP2_H -#define __HTTP2_H - -// Checkout https://datatracker.ietf.org/doc/html/rfc7540 under "Frame Format" section -#define HTTP2_SETTINGS_SIZE 6 - -#include "bpf_builtins.h" -#include "bpf_helpers.h" -#include "map-defs.h" -#include "http2-defs.h" -#include "http-types.h" -#include "protocol-classification-defs.h" -#include "bpf_telemetry.h" -#include "ip.h" - -// All types of http2 frames exist in the protocol. -// Checkout https://datatracker.ietf.org/doc/html/rfc7540 under "Frame Type Registry" section. -typedef enum { - kDataFrame = 0, - kHeadersFrame = 1, - kPriorityFrame = 2, - kRSTStreamFrame = 3, - kSettingsFrame = 4, - kPushPromiseFrame = 5, - kPingFrame = 6, - kGoAwayFrame = 7, - kWindowUpdateFrame = 8, - kContinuationFrame = 9, -} __attribute__ ((packed)) frame_type_t; - -// Struct which represent the http2 frame by its fields. -// Checkout https://datatracker.ietf.org/doc/html/rfc7540#section-4.1 for frame format. -struct http2_frame { - uint32_t length; - frame_type_t type; - uint8_t flags; - uint32_t stream_id; - bool end_of_stream; -}; - -static __always_inline uint32_t as_uint32_t(unsigned char input) { - return (uint32_t)input; -} - -// This function checks if the http2 frame header is empty. -static __always_inline bool is_empty_frame_header(const char *frame) { -#pragma unroll - for (uint32_t i = 0; i < HTTP2_FRAME_HEADER_SIZE; i++) { - if (frame[i] != 0) { - return false; - } - } - return true; -} - - -// This function reads the http2 frame header and validate the frame. -static __always_inline bool read_http2_frame_header(const char *buf, size_t buf_size, struct http2_frame *out) { - if (buf == NULL) { - log_debug("[http2 - error] the buffer is null"); - return false; - } - - if (buf_size < HTTP2_FRAME_HEADER_SIZE) { - log_debug("[http2 - error] the buffer is smaller then the HTTP2_FRAME_HEADER_SIZE"); - return false; - } - - if (is_empty_frame_header(buf)) { - log_debug("[http2 - error] the buf is empty!"); - return false; - } - -// We extract the frame by its shape to fields. -// See: https://datatracker.ietf.org/doc/html/rfc7540#section-4.1 - out->length = as_uint32_t(buf[0])<<16 | as_uint32_t(buf[1])<<8 | as_uint32_t(buf[2]); - out->type = (frame_type_t)buf[3]; - out->flags = (uint8_t)buf[4]; - out->stream_id = (as_uint32_t(buf[5]) << 24 | - as_uint32_t(buf[6]) << 16 | - as_uint32_t(buf[7]) << 8 | - as_uint32_t(buf[8])) & 2147483647; - return true; -} - -#endif diff --git a/pkg/network/ebpf/c/protocols/https.h b/pkg/network/ebpf/c/protocols/https.h index 0203f820f2d4f1..ed7732f5e9983e 100644 --- a/pkg/network/ebpf/c/protocols/https.h +++ b/pkg/network/ebpf/c/protocols/https.h @@ -15,7 +15,7 @@ #include "port_range.h" #include "sockfd.h" #include "tags-types.h" -#include "protocol-classification-helpers.h" +#include "protocol-dispatcher-helpers.h" #include "protocol-dispatcher-maps.h" #define HTTPS_PORT 443 @@ -41,7 +41,7 @@ static __always_inline void https_process(conn_tuple_t *t, void *buffer, size_t // try classifying the protocol if no prior identification exists if (cur_fragment_protocol_ptr == NULL) { - classify_protocol(&cur_fragment_protocol, http.request_fragment, len); + classify_protocol_for_dispatcher(&cur_fragment_protocol, &http.tup, http.request_fragment, len); // If there has been a change in the classification, save the new protocol. if (cur_fragment_protocol != PROTOCOL_UNKNOWN) { bpf_map_update_with_telemetry(dispatcher_connection_protocol, &http.tup, &cur_fragment_protocol, BPF_NOEXIST); diff --git a/pkg/network/ebpf/c/protocols/mongo-defs.h b/pkg/network/ebpf/c/protocols/mongo-defs.h new file mode 100644 index 00000000000000..8e11ff3bfa7349 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/mongo-defs.h @@ -0,0 +1,21 @@ +#ifndef __MONGO_DEFS_H +#define __MONGO_DEFS_H + +// Reference: +// https://docs.mongodb.com/manual/reference/mongodb-wire-protocol/#std-label-wp-request-opcodes. +// Note: Response side inference for Mongo is not robust, and is not attempted to avoid +// confusion with other protocols, especially MySQL. +#define MONGO_OP_REPLY 1 +#define MONGO_OP_UPDATE 2001 +#define MONGO_OP_INSERT 2002 +#define MONGO_OP_RESERVED 2003 +#define MONGO_OP_QUERY 2004 +#define MONGO_OP_GET_MORE 2005 +#define MONGO_OP_DELETE 2006 +#define MONGO_OP_KILL_CURSORS 2007 +#define MONGO_OP_COMPRESSED 2012 +#define MONGO_OP_MSG 2013 + +#define MONGO_HEADER_LENGTH 16 + +#endif diff --git a/pkg/network/ebpf/c/protocols/mongo-helpers.h b/pkg/network/ebpf/c/protocols/mongo-helpers.h new file mode 100644 index 00000000000000..396c487450f729 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/mongo-helpers.h @@ -0,0 +1,72 @@ +#ifndef __MONGO_HELPERS_H +#define __MONGO_HELPERS_H + + +#include "mongo-defs.h" +#include "protocol-classification-common.h" + +static __always_inline void mongo_handle_request(conn_tuple_t *tup, __s32 request_id) { + // mongo_request_id acts as a set, and we only check for existence in that set. + // Thus, the val = true is just a dummy value, as we ignore the value. + const bool val = true; + mongo_key key = {}; + key.tup = *tup; + key.req_id = request_id; + bpf_map_update_elem(&mongo_request_id, &key, &val, BPF_ANY); +} + +static __always_inline bool mongo_have_seen_request(conn_tuple_t *tup, __s32 response_to) { + mongo_key key = {}; + key.tup = *tup; + key.req_id = response_to; + void *exists = bpf_map_lookup_elem(&mongo_request_id, &key); + bpf_map_delete_elem(&mongo_request_id, &key); + return exists != NULL; +} + +// Checks if the given buffer represents a mongo request or a response. +static __always_inline bool is_mongo(conn_tuple_t *tup, const char *buf, __u32 size) { + CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, size, MONGO_HEADER_LENGTH); + + mongo_msg_header header = *((mongo_msg_header*)buf); + + // The message length should contain the size of headers + if (header.message_length < MONGO_HEADER_LENGTH) { + return false; + } + + if (header.request_id < 0) { + return false; + } + + switch (header.op_code) { + case MONGO_OP_UPDATE: + case MONGO_OP_INSERT: + case MONGO_OP_DELETE: + // If the response_to is not 0, then it is not a valid mongo request by the RFC. + return header.response_to == 0; + case MONGO_OP_REPLY: + // If the message is a reply, make sure we've seen the request of the response. + // If will eliminate false positives. + return mongo_have_seen_request(tup, header.response_to); + case MONGO_OP_QUERY: + case MONGO_OP_GET_MORE: + if (header.response_to == 0) { + mongo_handle_request(tup, header.request_id); + return true; + } + return false; + case MONGO_OP_COMPRESSED: + case MONGO_OP_MSG: + // If the response_to is not 0, then it is not a valid mongo request by the RFC. + if (header.response_to == 0) { + mongo_handle_request(tup, header.request_id); + return true; + } + return mongo_have_seen_request(tup, header.response_to); + } + + return false; +} + +#endif diff --git a/pkg/network/ebpf/c/protocols/postgres-defs.h b/pkg/network/ebpf/c/protocols/postgres-defs.h new file mode 100644 index 00000000000000..b8927be32fc44a --- /dev/null +++ b/pkg/network/ebpf/c/protocols/postgres-defs.h @@ -0,0 +1,50 @@ +#ifndef __POSTGRES_DEFS_H +#define __POSTGRES_DEFS_H + +// The minimum size we want to be able to check for a startup message. This size includes: +// - The length field: 4 bytes +// - The protocol major version: 2 bytes +// - The protocol minior version: 2 bytes +// - The "user" string, as the first connection parameter name: 5 bytes +#define POSTGRES_STARTUP_MIN_LEN 13 + +// Postgres protocol version, in big endian, as described in the protocol +// specification. This is version "3.0". +#define PG_STARTUP_VERSION 196608 +#define PG_STARTUP_USER_PARAM "user" + +// From https://www.postgresql.org/docs/current/protocol-overview.html: +// The first byte of a message identifies the message type, and the next four +// bytes specify the length of the rest of the message (this length count +// includes itself, but not the message-type byte). The remaining contents of +// the message are determined by the message type. Some messages do not have +// a payload at all, so the minimum size, including the length itself, is +// 4 bytes. +#define POSTGRES_MIN_PAYLOAD_LEN 4 +// Assume typical query message size is below an artificial limit. +// 30000 is copied from postgres code base: +// https://github.com/postgres/postgres/tree/master/src/interfaces/libpq/fe-protocol3.c#L94 +#define POSTGRES_MAX_PAYLOAD_LEN 30000 + +#define POSTGRES_QUERY_MAGIC_BYTE 'Q' +#define POSTGRES_COMMAND_COMPLETE_MAGIC_BYTE 'C' + +// Regular format of postgres message: | byte tag | int32_t len | string payload | +// From https://www.postgresql.org/docs/current/protocol-overview.html: +// The first byte of a message identifies the message type, and the next four +// bytes specify the length of the rest of the message (this length count +// includes itself, but not the message-type byte). The remaining contents of +// the message are determined by the message type +struct pg_message_header { + __u8 message_tag; + __u32 message_len; // Big-endian: use bpf_ntohl to read this field +} __attribute__((packed)); + +// Postgres Startup Message (used when a client connects to the server) differs +// from other messages by not having a message tag. +struct pg_startup_header { + __u32 message_len; // Big-endian: use bpf_ntohl to read this field + __u32 version; // Big-endian: use bpf_ntohl to read this field +}; + +#endif // __POSTGRES_DEFS_H diff --git a/pkg/network/ebpf/c/protocols/postgres-helpers.h b/pkg/network/ebpf/c/protocols/postgres-helpers.h new file mode 100644 index 00000000000000..c3cf0d1feb949f --- /dev/null +++ b/pkg/network/ebpf/c/protocols/postgres-helpers.h @@ -0,0 +1,45 @@ +#ifndef __POSTGRES_HELPERS_H +#define __POSTGRES_HELPERS_H + +#include "postgres-defs.h" +#include "sql-helpers.h" + +// is_postgres_connect checks if the buffer is a Postgres startup message. +static __always_inline bool is_postgres_connect(const char *buf, __u32 buf_size) { + CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, POSTGRES_STARTUP_MIN_LEN); + + struct pg_startup_header *hdr = (struct pg_startup_header *)buf; + + if (bpf_ntohl(hdr->version) != PG_STARTUP_VERSION) { + return false; + } + + // Check if we can find the user param. Postgres uses C-style strings, so + // we also check for the terminating null byte. + return !bpf_memcmp(buf + sizeof(*hdr), PG_STARTUP_USER_PARAM, sizeof(PG_STARTUP_USER_PARAM)); +} + +// is_postgres_query checks if the buffer is a regular Postgres message. +static __always_inline bool is_postgres_query(const char *buf, __u32 buf_size) { + CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, sizeof(struct pg_message_header)); + + struct pg_message_header *hdr = (struct pg_message_header *)buf; + + // We only classify queries for now + if (hdr->message_tag != POSTGRES_QUERY_MAGIC_BYTE && hdr->message_tag != POSTGRES_COMMAND_COMPLETE_MAGIC_BYTE) { + return false; + } + + __u32 message_len = bpf_ntohl(hdr->message_len); + if (message_len < POSTGRES_MIN_PAYLOAD_LEN || message_len > POSTGRES_MAX_PAYLOAD_LEN) { + return false; + } + + return is_sql_command(buf + sizeof(*hdr), buf_size - sizeof(*hdr)); +} + +static __always_inline bool is_postgres(const char *buf, __u32 buf_size) { + return is_postgres_query(buf, buf_size) || is_postgres_connect(buf, buf_size); +} + +#endif // __POSTGRES_HELPERS_H diff --git a/pkg/network/ebpf/c/protocols/protocol-classification-common.h b/pkg/network/ebpf/c/protocols/protocol-classification-common.h new file mode 100644 index 00000000000000..59f675fb9af096 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/protocol-classification-common.h @@ -0,0 +1,99 @@ +#ifndef __PROTOCOL_CLASSIFICATION_COMMON_H +#define __PROTOCOL_CLASSIFICATION_COMMON_H + +#include + +#include "bpf_builtins.h" +#include "bpf_telemetry.h" + +// Patch to support old kernels that don't contain bpf_skb_load_bytes, by adding a dummy implementation to bypass runtime compilation. +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 5, 0) +long bpf_skb_load_bytes_with_telemetry(const void *skb, u32 offset, void *to, u32 len) {return 0;} +#endif + +#define CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, min_buff_size) \ + do { \ + if (buf_size < min_buff_size) { \ + return false; \ + } \ + \ + if (buf == NULL) { \ + return false; \ + } \ + } while (0) + +// Returns true if the packet is TCP. +static __always_inline bool is_tcp(conn_tuple_t *tup) { + return tup->metadata & CONN_TYPE_TCP; +} + +// Returns true if the payload is empty. +static __always_inline bool is_payload_empty(struct __sk_buff *skb, skb_info_t *skb_info) { + return skb_info->data_off == skb->len; +} + +// The method is used to read the data buffer from the __sk_buf struct. Similar implementation as `read_into_buffer_skb` +// from http parsing, but uses a different constant (CLASSIFICATION_MAX_BUFFER). +static __always_inline void read_into_buffer_for_classification(char *buffer, struct __sk_buff *skb, skb_info_t *info) { + u64 offset = (u64)info->data_off; + +#define BLK_SIZE (16) + const u32 len = CLASSIFICATION_MAX_BUFFER < (skb->len - (u32)offset) ? (u32)offset + CLASSIFICATION_MAX_BUFFER : skb->len; + + unsigned i = 0; + +#pragma unroll(CLASSIFICATION_MAX_BUFFER / BLK_SIZE) + for (; i < (CLASSIFICATION_MAX_BUFFER / BLK_SIZE); i++) { + if (offset + BLK_SIZE - 1 >= len) { break; } + + bpf_skb_load_bytes_with_telemetry(skb, offset, &buffer[i * BLK_SIZE], BLK_SIZE); + offset += BLK_SIZE; + } + + // This part is very hard to write in a loop and unroll it. + // Indeed, mostly because of older kernel verifiers, we want to make sure the offset into the buffer is not + // stored on the stack, so that the verifier is able to verify that we're not doing out-of-bound on + // the stack. + // Basically, we should get a register from the code block above containing an fp relative address. As + // we are doing `buffer[0]` here, there is not dynamic computation on that said register after this, + // and thus the verifier is able to ensure that we are in-bound. + void *buf = &buffer[i * BLK_SIZE]; + // Check that we have enough room in the request fragment buffer. Even + // though that's not strictly needed here, the verifier does not know that, + // so this check makes it happy. + if (i * BLK_SIZE >= CLASSIFICATION_MAX_BUFFER) { + return; + } else if (offset + 14 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 15); + } else if (offset + 13 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 14); + } else if (offset + 12 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 13); + } else if (offset + 11 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 12); + } else if (offset + 10 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 11); + } else if (offset + 9 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 10); + } else if (offset + 8 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 9); + } else if (offset + 7 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 8); + } else if (offset + 6 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 7); + } else if (offset + 5 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 6); + } else if (offset + 4 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 5); + } else if (offset + 3 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 4); + } else if (offset + 2 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 3); + } else if (offset + 1 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 2); + } else if (offset < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 1); + } +} + +#endif diff --git a/pkg/network/ebpf/c/protocols/protocol-classification-defs.h b/pkg/network/ebpf/c/protocols/protocol-classification-defs.h index a4e1dc10049c9f..af16326acf75b5 100644 --- a/pkg/network/ebpf/c/protocols/protocol-classification-defs.h +++ b/pkg/network/ebpf/c/protocols/protocol-classification-defs.h @@ -3,18 +3,18 @@ #include +#include "amqp-defs.h" +#include "http-classification-defs.h" +#include "http2-defs.h" +#include "mongo-defs.h" +#include "redis-defs.h" +#include "sql-defs.h" + // Represents the max buffer size required to classify protocols . // We need to round it to be multiplication of 16 since we are reading blocks of 16 bytes in read_into_buffer_skb_all_kernels. // ATM, it is HTTP2_MARKER_SIZE + 8 bytes for padding, #define CLASSIFICATION_MAX_BUFFER (HTTP2_MARKER_SIZE + 8) -// Checkout https://datatracker.ietf.org/doc/html/rfc7540 under "HTTP/2 Connection Preface" section -#define HTTP2_MARKER_SIZE 24 - -// The minimal HTTP response has 17 characters: HTTP/1.1 200 OK\r\n -// The minimal HTTP request has 16 characters: GET x HTTP/1.1\r\n -#define HTTP_MIN_SIZE 16 - // The enum below represents all different protocols we know to classify. // We set the size of the enum to be 8 bits, by adding max value (max uint8 which is 255) and // `__attribute__ ((packed))` to tell the compiler to use as minimum bits as needed. Due to our max @@ -25,6 +25,10 @@ typedef enum { PROTOCOL_HTTP, PROTOCOL_HTTP2, PROTOCOL_TLS, + PROTOCOL_MONGO = 6, + PROTOCOL_POSTGRES = 7, + PROTOCOL_AMQP = 8, + PROTOCOL_REDIS = 9, // Add new protocols before that line. MAX_PROTOCOLS, __MAX_UINT8 = 255, diff --git a/pkg/network/ebpf/c/protocols/protocol-classification-helpers.h b/pkg/network/ebpf/c/protocols/protocol-classification-helpers.h deleted file mode 100644 index c8da66862983ba..00000000000000 --- a/pkg/network/ebpf/c/protocols/protocol-classification-helpers.h +++ /dev/null @@ -1,214 +0,0 @@ -#ifndef __PROTOCOL_CLASSIFICATION_HELPERS_H -#define __PROTOCOL_CLASSIFICATION_HELPERS_H - -#include - -#include "protocol-classification-defs.h" -#include "protocol-classification-maps.h" -#include "bpf_builtins.h" -#include "bpf_telemetry.h" -#include "ip.h" -#include "http2.h" - -// Patch to support old kernels that don't contain bpf_skb_load_bytes, by adding a dummy implementation to bypass runtime compilation. -#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 5, 0) -long bpf_skb_load_bytes_with_telemetry(const void *skb, u32 offset, void *to, u32 len) {return 0;} -#endif - -#define CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, min_buff_size) \ - if (buf_size < min_buff_size) { \ - return false; \ - } \ - \ - if (buf == NULL) { \ - return false; \ - } \ - -// The method checks if the given buffer starts with the HTTP2 marker as defined in https://datatracker.ietf.org/doc/html/rfc7540. -// We check that the given buffer is not empty and its size is at least 24 bytes. -static __always_inline bool is_http2_preface(const char* buf, __u32 buf_size) { - CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, HTTP2_MARKER_SIZE) - -#define HTTP2_PREFACE "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n" - - bool match = !bpf_memcmp(buf, HTTP2_PREFACE, sizeof(HTTP2_PREFACE)-1); - - return match; -} - -// According to the https://www.rfc-editor.org/rfc/rfc7540#section-3.5 -// an HTTP2 server must reply with a settings frame to the preface of HTTP2. -// The settings frame must not be related to the connection (stream_id == 0) and the length should be a multiplication -// of 6 bytes. -static __always_inline bool is_http2_server_settings(const char* buf, __u32 buf_size) { - CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, HTTP2_FRAME_HEADER_SIZE) - - struct http2_frame frame_header; - if (!read_http2_frame_header(buf, buf_size, &frame_header)) { - return false; - } - - return frame_header.type == kSettingsFrame && frame_header.stream_id == 0 && frame_header.length % HTTP2_SETTINGS_SIZE == 0; -} - -// The method checks if the given buffer starts with the HTTP2 marker as defined in https://datatracker.ietf.org/doc/html/rfc7540. -// We check that the given buffer is not empty and its size is at least 24 bytes. -static __always_inline bool is_http2(const char* buf, __u32 buf_size) { - return is_http2_preface(buf, buf_size) || is_http2_server_settings(buf, buf_size); -} - -// Checks if the given buffers start with `HTTP` prefix (represents a response) or starts with ` /` which represents -// a request, where is one of: GET, POST, PUT, DELETE, HEAD, OPTIONS, or PATCH. -static __always_inline bool is_http(const char *buf, __u32 size) { - CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, size, HTTP_MIN_SIZE) - -#define HTTP "HTTP/" -#define GET "GET /" -#define POST "POST /" -#define PUT "PUT /" -#define DELETE "DELETE /" -#define HEAD "HEAD /" -#define OPTIONS1 "OPTIONS /" -#define OPTIONS2 "OPTIONS *" -#define PATCH "PATCH /" - - // memcmp returns - // 0 when s1 == s2, - // !0 when s1 != s2. - bool http = !(bpf_memcmp(buf, HTTP, sizeof(HTTP)-1) - && bpf_memcmp(buf, GET, sizeof(GET)-1) - && bpf_memcmp(buf, POST, sizeof(POST)-1) - && bpf_memcmp(buf, PUT, sizeof(PUT)-1) - && bpf_memcmp(buf, DELETE, sizeof(DELETE)-1) - && bpf_memcmp(buf, HEAD, sizeof(HEAD)-1) - && bpf_memcmp(buf, OPTIONS1, sizeof(OPTIONS1)-1) - && bpf_memcmp(buf, OPTIONS2, sizeof(OPTIONS2)-1) - && bpf_memcmp(buf, PATCH, sizeof(PATCH)-1)); - - return http; -} - -// Determines the protocols of the given buffer. If we already classified the payload (a.k.a protocol out param -// has a known protocol), then we do nothing. -static __always_inline void classify_protocol(protocol_t *protocol, const char *buf, __u32 size) { - if (protocol == NULL || *protocol != PROTOCOL_UNKNOWN) { - return; - } - - if (is_http(buf, size)) { - *protocol = PROTOCOL_HTTP; - } else if (is_http2(buf, size)) { - *protocol = PROTOCOL_HTTP2; - } else { - *protocol = PROTOCOL_UNKNOWN; - } - - log_debug("[protocol classification]: Classified protocol as %d %d; %s\n", *protocol, size, buf); -} - -// Returns true if the packet is TCP. -static __always_inline bool is_tcp(conn_tuple_t *tup) { - return tup->metadata & CONN_TYPE_TCP; -} - -// Returns true if the payload is empty. -static __always_inline bool is_payload_empty(struct __sk_buff *skb, skb_info_t *skb_info) { - return skb_info->data_off == skb->len; -} - -// The method is used to read the data buffer from the __sk_buf struct. Similar implementation as `read_into_buffer_skb` -// from http parsing, but uses a different constant (CLASSIFICATION_MAX_BUFFER). -static __always_inline void read_into_buffer_for_classification(char *buffer, struct __sk_buff *skb, skb_info_t *info) { - u64 offset = (u64)info->data_off; - -#define BLK_SIZE (16) - const u32 len = CLASSIFICATION_MAX_BUFFER < (skb->len - (u32)offset) ? (u32)offset + CLASSIFICATION_MAX_BUFFER : skb->len; - - unsigned i = 0; - -#pragma unroll(CLASSIFICATION_MAX_BUFFER / BLK_SIZE) - for (; i < (CLASSIFICATION_MAX_BUFFER / BLK_SIZE); i++) { - if (offset + BLK_SIZE - 1 >= len) { break; } - - bpf_skb_load_bytes_with_telemetry(skb, offset, &buffer[i * BLK_SIZE], BLK_SIZE); - offset += BLK_SIZE; - } - - // This part is very hard to write in a loop and unroll it. - // Indeed, mostly because of older kernel verifiers, we want to make sure the offset into the buffer is not - // stored on the stack, so that the verifier is able to verify that we're not doing out-of-bound on - // the stack. - // Basically, we should get a register from the code block above containing an fp relative address. As - // we are doing `buffer[0]` here, there is not dynamic computation on that said register after this, - // and thus the verifier is able to ensure that we are in-bound. - void *buf = &buffer[i * BLK_SIZE]; - if (offset + 14 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 15); - } else if (offset + 13 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 14); - } else if (offset + 12 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 13); - } else if (offset + 11 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 12); - } else if (offset + 10 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 11); - } else if (offset + 9 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 10); - } else if (offset + 8 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 9); - } else if (offset + 7 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 8); - } else if (offset + 6 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 7); - } else if (offset + 5 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 6); - } else if (offset + 4 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 5); - } else if (offset + 3 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 4); - } else if (offset + 2 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 3); - } else if (offset + 1 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 2); - } else if (offset < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 1); - } -} - -// A shared implementation for the runtime & prebuilt socket filter that classifies the protocols of the connections. -static __always_inline void protocol_classifier_entrypoint(struct __sk_buff *skb) { - skb_info_t skb_info = {0}; - conn_tuple_t skb_tup = {0}; - - // Exporting the conn tuple from the skb, alongside couple of relevant fields from the skb. - if (!read_conn_tuple_skb(skb, &skb_info, &skb_tup)) { - return; - } - - // We support non empty TCP payloads for classification at the moment. - if (!is_tcp(&skb_tup) || is_payload_empty(skb, &skb_info)) { - return; - } - - protocol_t *cur_fragment_protocol_ptr = bpf_map_lookup_elem(&connection_protocol, &skb_tup); - if (cur_fragment_protocol_ptr) { - return; - } - - protocol_t cur_fragment_protocol = PROTOCOL_UNKNOWN; - char request_fragment[CLASSIFICATION_MAX_BUFFER]; - bpf_memset(request_fragment, 0, sizeof(request_fragment)); - read_into_buffer_for_classification((char *)request_fragment, skb, &skb_info); - const size_t payload_length = skb->len - skb_info.data_off; - const size_t final_fragment_size = payload_length < CLASSIFICATION_MAX_BUFFER ? payload_length : CLASSIFICATION_MAX_BUFFER; - classify_protocol(&cur_fragment_protocol, request_fragment, final_fragment_size); - // If there has been a change in the classification, save the new protocol. - if (cur_fragment_protocol != PROTOCOL_UNKNOWN) { - bpf_map_update_with_telemetry(connection_protocol, &skb_tup, &cur_fragment_protocol, BPF_NOEXIST); - conn_tuple_t inverse_skb_conn_tup = skb_tup; - flip_tuple(&inverse_skb_conn_tup); - bpf_map_update_with_telemetry(connection_protocol, &inverse_skb_conn_tup, &cur_fragment_protocol, BPF_NOEXIST); - } -} - -#endif diff --git a/pkg/network/ebpf/c/protocols/protocol-classification-maps.h b/pkg/network/ebpf/c/protocols/protocol-classification-maps.h index 5214bd3fdac17f..0fbf5eb3b2de2f 100644 --- a/pkg/network/ebpf/c/protocols/protocol-classification-maps.h +++ b/pkg/network/ebpf/c/protocols/protocol-classification-maps.h @@ -2,6 +2,7 @@ #define __PROTOCOL_CLASSIFICATION_MAPS_H #include "protocol-classification-defs.h" +#include "protocol-classification-structs.h" #include "map-defs.h" // Maps a connection tuple to its classified protocol. Used to reduce redundant classification procedures on the same @@ -22,4 +23,21 @@ BPF_HASH_MAP(conn_tuple_to_socket_skb_conn_tuple, conn_tuple_t, conn_tuple_t, 10 // interfaces or retransmissions. BPF_HASH_MAP(connection_states, conn_tuple_t, u32, 1024) +// Kernels before 4.7 do not know about per-cpu array maps. +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0) + +// A per-cpu buffer used to read requests fragments during protocol +// classification and avoid allocating a buffer on the stack. Some protocols +// requires us to read at offset that are not aligned. Such reads are forbidden +// if done on the stack and will make the verifier complain about it, but they +// are allowed on map elements, hence the need for this map. +BPF_PERCPU_ARRAY_MAP(classification_buf, __u32, char [CLASSIFICATION_MAX_BUFFER], 1) +#else +BPF_ARRAY_MAP(classification_buf, __u8, 1) +#endif + +// A set (map from a key to a const bool value, we care only if the key exists in the map, and not its value) to +// mark if we've seen a specific mongo request, so we can eliminate false-positive classification on responses. +BPF_HASH_MAP(mongo_request_id, mongo_key, bool, 1024) + #endif diff --git a/pkg/network/ebpf/c/protocols/protocol-classification-structs.h b/pkg/network/ebpf/c/protocols/protocol-classification-structs.h new file mode 100644 index 00000000000000..27270617ab6b1b --- /dev/null +++ b/pkg/network/ebpf/c/protocols/protocol-classification-structs.h @@ -0,0 +1,20 @@ +#ifndef __PROTOCOL_CLASSIFICATION_STRUCTS_H +#define __PROTOCOL_CLASSIFICATION_STRUCTS_H + +#include +#include "tracer.h" + +typedef struct { + __s32 message_length; // total message size, including this + __s32 request_id; // identifier for this message + __s32 response_to; // requestID from the original request (used in responses from db) + __s32 op_code; // request type - see table below for details +} mongo_msg_header; + +// The key used in mongo_request_id set. +typedef struct { + conn_tuple_t tup; + __s32 req_id; +} mongo_key; + +#endif diff --git a/pkg/network/ebpf/c/protocols/protocol-classification.h b/pkg/network/ebpf/c/protocols/protocol-classification.h new file mode 100644 index 00000000000000..96a583ad03f08f --- /dev/null +++ b/pkg/network/ebpf/c/protocols/protocol-classification.h @@ -0,0 +1,90 @@ +#ifndef __PROTOCOL_CLASSIFICATION_H +#define __PROTOCOL_CLASSIFICATION_H + +#include "protocol-classification-common.h" +#include "protocol-classification-defs.h" +#include "protocol-classification-maps.h" +#include "protocol-classification-structs.h" +#include "bpf_builtins.h" +#include "bpf_telemetry.h" +#include "ip.h" +#include "amqp-helpers.h" +#include "http-classification-helpers.h" +#include "http2-helpers.h" +#include "mongo-helpers.h" +#include "redis-helpers.h" +#include "postgres-helpers.h" + +// Determines the protocols of the given buffer. If we already classified the payload (a.k.a protocol out param +// has a known protocol), then we do nothing. +static __always_inline void classify_protocol(protocol_t *protocol, conn_tuple_t *tup, const char *buf, __u32 size) { + if (protocol == NULL || *protocol != PROTOCOL_UNKNOWN) { + return; + } + + if (is_http(buf, size)) { + *protocol = PROTOCOL_HTTP; + } else if (is_http2(buf, size)) { + *protocol = PROTOCOL_HTTP2; + } else if (is_amqp(buf, size)) { + *protocol = PROTOCOL_AMQP; + } else if (is_redis(buf, size)) { + *protocol = PROTOCOL_REDIS; + } else if (is_mongo(tup, buf, size)) { + *protocol = PROTOCOL_MONGO; + } else if (is_postgres(buf, size)) { + *protocol = PROTOCOL_POSTGRES; + } else { + *protocol = PROTOCOL_UNKNOWN; + } + + log_debug("[protocol classification]: Classified protocol as %d %d; %s\n", *protocol, size, buf); +} + +// A shared implementation for the runtime & prebuilt socket filter that classifies the protocols of the connections. +static __always_inline void protocol_classifier_entrypoint(struct __sk_buff *skb) { + skb_info_t skb_info = {0}; + conn_tuple_t skb_tup = {0}; + + // Exporting the conn tuple from the skb, alongside couple of relevant fields from the skb. + if (!read_conn_tuple_skb(skb, &skb_info, &skb_tup)) { + return; + } + + // We support non empty TCP payloads for classification at the moment. + if (!is_tcp(&skb_tup) || is_payload_empty(skb, &skb_info)) { + return; + } + + protocol_t *cur_fragment_protocol_ptr = bpf_map_lookup_elem(&connection_protocol, &skb_tup); + if (cur_fragment_protocol_ptr) { + return; + } + + protocol_t cur_fragment_protocol = PROTOCOL_UNKNOWN; + + // Get the buffer the fragment will be read into from a per-cpu array map. + // This will avoid doing unaligned stack access while parsing the protocols, + // which is forbidden and will make the verifier fail. + const u32 key = 0; + char *request_fragment = bpf_map_lookup_elem(&classification_buf, &key); + if (request_fragment == NULL) { + log_debug("could not get classification buffer from map"); + return; + } + + bpf_memset(request_fragment, 0, sizeof(request_fragment)); + read_into_buffer_for_classification((char *)request_fragment, skb, &skb_info); + const size_t payload_length = skb->len - skb_info.data_off; + const size_t final_fragment_size = payload_length < CLASSIFICATION_MAX_BUFFER ? payload_length : CLASSIFICATION_MAX_BUFFER; + classify_protocol(&cur_fragment_protocol, &skb_tup, request_fragment, final_fragment_size); + // If there has been a change in the classification, save the new protocol. + if (cur_fragment_protocol != PROTOCOL_UNKNOWN) { + bpf_map_update_with_telemetry(connection_protocol, &skb_tup, &cur_fragment_protocol, BPF_NOEXIST); + conn_tuple_t inverse_skb_conn_tup = skb_tup; + flip_tuple(&inverse_skb_conn_tup); + bpf_map_update_with_telemetry(connection_protocol, &inverse_skb_conn_tup, &cur_fragment_protocol, BPF_NOEXIST); + } +} + +#endif diff --git a/pkg/network/ebpf/c/protocols/protocol-dispatcher-helpers.h b/pkg/network/ebpf/c/protocols/protocol-dispatcher-helpers.h index c7c70a073da4a1..8b22698b8da950 100644 --- a/pkg/network/ebpf/c/protocols/protocol-dispatcher-helpers.h +++ b/pkg/network/ebpf/c/protocols/protocol-dispatcher-helpers.h @@ -3,9 +3,13 @@ #include -#include "protocol-dispatcher-maps.h" -#include "protocol-classification-helpers.h" +#include "http-classification-helpers.h" +#include "http2-helpers.h" #include "ip.h" +#include "protocol-classification-defs.h" +#include "protocol-classification-maps.h" +#include "protocol-classification-structs.h" +#include "protocol-dispatcher-maps.h" // Returns true if the payload represents a TCP termination by checking if the tcp flags contains TCPHDR_FIN or TCPHDR_RST. static __always_inline bool is_tcp_termination(skb_info_t *skb_info) { @@ -35,6 +39,24 @@ static __always_inline bool has_sequence_seen_before(conn_tuple_t *tup, skb_info return false; } +// Determines the protocols of the given buffer. If we already classified the payload (a.k.a protocol out param +// has a known protocol), then we do nothing. +static __always_inline void classify_protocol_for_dispatcher(protocol_t *protocol, conn_tuple_t *tup, const char *buf, __u32 size) { + if (protocol == NULL || *protocol != PROTOCOL_UNKNOWN) { + return; + } + + if (is_http(buf, size)) { + *protocol = PROTOCOL_HTTP; + } else if (is_http2(buf, size)) { + *protocol = PROTOCOL_HTTP2; + } else { + *protocol = PROTOCOL_UNKNOWN; + } + + log_debug("[protocol_dispatcher_classifier]: Classified protocol as %d %d; %s\n", *protocol, size, buf); +} + // A shared implementation for the runtime & prebuilt socket filter that classifies & dispatches the protocols of the connections. static __always_inline void protocol_dispatcher_entrypoint(struct __sk_buff *skb) { skb_info_t skb_info = {0}; @@ -66,7 +88,7 @@ static __always_inline void protocol_dispatcher_entrypoint(struct __sk_buff *skb read_into_buffer_for_classification((char *)request_fragment, skb, &skb_info); const size_t payload_length = skb->len - skb_info.data_off; const size_t final_fragment_size = payload_length < CLASSIFICATION_MAX_BUFFER ? payload_length : CLASSIFICATION_MAX_BUFFER; - classify_protocol(&cur_fragment_protocol, request_fragment, final_fragment_size); + classify_protocol_for_dispatcher(&cur_fragment_protocol, &skb_tup, request_fragment, final_fragment_size); log_debug("[protocol_dispatcher_entrypoint]: %p Classifying protocol as: %d\n", skb, cur_fragment_protocol); // If there has been a change in the classification, save the new protocol. if (cur_fragment_protocol != PROTOCOL_UNKNOWN) { diff --git a/pkg/network/ebpf/c/protocols/redis-defs.h b/pkg/network/ebpf/c/protocols/redis-defs.h new file mode 100644 index 00000000000000..68232fb4414f8d --- /dev/null +++ b/pkg/network/ebpf/c/protocols/redis-defs.h @@ -0,0 +1,6 @@ +#ifndef __REDIS_DEFS_H +#define __REDIS_DEFS_H + +#define REDIS_MIN_FRAME_LENGTH 3 + +#endif diff --git a/pkg/network/ebpf/c/protocols/redis-helpers.h b/pkg/network/ebpf/c/protocols/redis-helpers.h new file mode 100644 index 00000000000000..b6d7683197a0bc --- /dev/null +++ b/pkg/network/ebpf/c/protocols/redis-helpers.h @@ -0,0 +1,89 @@ +#ifndef __REDIS_HELPERS_H +#define __REDIS_HELPERS_H + +#include "protocol-classification-common.h" + +// Checks the buffer represent a standard response (OK) or any of redis commands +// https://redis.io/commands/ +static __always_inline bool check_supported_ascii_and_crlf(const char* buf, __u32 buf_size, int index_to_start_from) { + bool found_cr = false; + char current_char; + int i = index_to_start_from; +#pragma unroll(CLASSIFICATION_MAX_BUFFER) + for (; i < CLASSIFICATION_MAX_BUFFER; i++) { + current_char = buf[i]; + if (current_char == '\r') { + found_cr = true; + break; + } else if ('A' <= current_char && current_char <= 'Z') { + continue; + } else if ('a' <= current_char && current_char <= 'z') { + continue; + } else if (current_char == '.' || current_char == ' ' || current_char == '-' || current_char == '_') { + continue; + } + return false; + } + + if (!found_cr || i+1 >= buf_size) { + return false; + } + return buf[i+1] == '\n'; +} + +// Checks the buffer represents an error according to https://redis.io/docs/reference/protocol-spec/#resp-errors +static __always_inline bool check_err_prefix(const char* buf, __u32 buf_size) { +#define ERR "-ERR " +#define WRONGTYPE "-WRONGTYPE " + + // memcmp returns + // 0 when s1 == s2, + // !0 when s1 != s2. + bool match = !(bpf_memcmp(buf, ERR, sizeof(ERR)-1) + && bpf_memcmp(buf, WRONGTYPE, sizeof(WRONGTYPE)-1)); + + return match; +} + +static __always_inline bool check_integer_and_crlf(const char* buf, __u32 buf_size, int index_to_start_from) { + bool found_cr = false; + char current_char; + int i = index_to_start_from; +#pragma unroll(CLASSIFICATION_MAX_BUFFER) + for (; i < CLASSIFICATION_MAX_BUFFER; i++) { + current_char = buf[i]; + if (current_char == '\r') { + found_cr = true; + break; + } else if ('0' <= current_char && current_char <= '9') { + continue; + } + + return false; + } + + if (!found_cr || i+1 >= buf_size) { + return false; + } + return buf[i+1] == '\n'; +} + +static __always_inline bool is_redis(const char* buf, __u32 buf_size) { + CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, REDIS_MIN_FRAME_LENGTH); + + char first_char = buf[0]; + switch (first_char) { + case '+': + return check_supported_ascii_and_crlf(buf, buf_size, 1); + case '-': + return check_err_prefix(buf, buf_size); + case ':': + case '$': + case '*': + return check_integer_and_crlf(buf, buf_size, 1); + default: + return false; + } +} + +#endif diff --git a/pkg/network/ebpf/c/protocols/sql-defs.h b/pkg/network/ebpf/c/protocols/sql-defs.h new file mode 100644 index 00000000000000..011768c183c4fe --- /dev/null +++ b/pkg/network/ebpf/c/protocols/sql-defs.h @@ -0,0 +1,14 @@ +#ifndef __SQL_DEFS_H +#define __SQL_DEFS_H + +#define SQL_COMMAND_MAX_SIZE 6 + +#define SQL_ALTER "ALTER" +#define SQL_CREATE "CREATE" +#define SQL_DELETE "DELETE" +#define SQL_DROP "DROP" +#define SQL_INSERT "INSERT" +#define SQL_SELECT "SELECT" +#define SQL_UPDATE "UPDATE" + +#endif /*__SQL_DEFS_H*/ diff --git a/pkg/network/ebpf/c/protocols/sql-helpers.h b/pkg/network/ebpf/c/protocols/sql-helpers.h new file mode 100644 index 00000000000000..02d42b33f7477e --- /dev/null +++ b/pkg/network/ebpf/c/protocols/sql-helpers.h @@ -0,0 +1,38 @@ +#ifndef __SQL_HELPERS_H +#define __SQL_HELPERS_H + +#include "bpf_builtins.h" +#include "sql-defs.h" + +// Check that we can read the amount of memory we want, then to the comparison. +// Note: we use `sizeof(command) - 1` to *not* compare with the null-terminator of +// the strings. +#define check_command(buf, command, buf_size) \ + (!bpf_memcmp((buf), &(command), sizeof(command) - 1)) + +// is_sql_command check that there is an SQL query in buf. We only check the +// most commonly used SQL queries +static __always_inline bool is_sql_command(const char *buf, __u32 buf_size) { + char tmp[SQL_COMMAND_MAX_SIZE]; + + // Convert what would be the query to uppercase to match queries like + // 'select * from table' +#pragma unroll (SQL_COMMAND_MAX_SIZE) + for (int i = 0; i < SQL_COMMAND_MAX_SIZE; i++) { + if ('a' <= buf[i] && buf[i] <= 'z') { + tmp[i] = buf[i] - 'a' +'A'; + } else { + tmp[i] = buf[i]; + } + } + + return check_command(tmp, SQL_ALTER, buf_size) + || check_command(tmp, SQL_CREATE, buf_size) + || check_command(tmp, SQL_DELETE, buf_size) + || check_command(tmp, SQL_DROP, buf_size) + || check_command(tmp, SQL_INSERT, buf_size) + || check_command(tmp, SQL_SELECT, buf_size) + || check_command(tmp, SQL_UPDATE, buf_size); +} + +#endif // __SQL_HELPERS_H diff --git a/pkg/network/ebpf/c/runtime/http.c b/pkg/network/ebpf/c/runtime/http.c index 27f71ce151525f..caba78bc566ecb 100644 --- a/pkg/network/ebpf/c/runtime/http.c +++ b/pkg/network/ebpf/c/runtime/http.c @@ -61,8 +61,9 @@ int socket__http2_filter(struct __sk_buff *skb) { if (http2_conn == NULL) { return 0; } + bpf_memset(http2_conn, 0, sizeof(http2_transaction_t)); - if (!read_conn_tuple_skb(skb, &skb_info, &http2_conn->tup)) { + if (read_conn_tuple_skb(skb, &skb_info, &http2_conn->tup)) { http2_entrypoint(skb, &skb_info, http2_conn); } return 0; diff --git a/pkg/network/ebpf/c/runtime/tracer.c b/pkg/network/ebpf/c/runtime/tracer.c index 9a39d4bd7afb43..a3545198e29115 100644 --- a/pkg/network/ebpf/c/runtime/tracer.c +++ b/pkg/network/ebpf/c/runtime/tracer.c @@ -4,7 +4,7 @@ #include "bpf_tracing.h" #include "tracer.h" -#include "protocols/protocol-classification-helpers.h" +#include "protocols/protocol-classification.h" #include "tracer-events.h" #include "tracer-maps.h" #include "tracer-stats.h" @@ -397,16 +397,36 @@ int kprobe__skb_consume_udp(struct pt_regs *ctx) { SEC("kprobe/tcp_retransmit_skb") int kprobe__tcp_retransmit_skb(struct pt_regs *ctx) { + log_debug("kprobe/tcp_retransmit\n"); struct sock *sk = (struct sock *)PT_REGS_PARM1(ctx); + u64 tid = bpf_get_current_pid_tgid(); + tcp_retransmit_skb_args_t args = {}; + args.sk = sk; + args.segs = 0; + bpf_map_update_with_telemetry(pending_tcp_retransmit_skb, &tid, &args, BPF_ANY); -#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 7, 0) - int segs = 1; -#else - int segs = (int)PT_REGS_PARM3(ctx); -#endif - log_debug("kprobe/tcp_retransmit\n"); + return 0; +} + +SEC("kretprobe/tcp_retransmit_skb") +int kretprobe__tcp_retransmit_skb(struct pt_regs *ctx) { + log_debug("kretprobe/tcp_retransmit\n"); + u64 tid = bpf_get_current_pid_tgid(); + if (PT_REGS_RC(ctx) < 0) { + bpf_map_delete_elem(&pending_tcp_retransmit_skb, &tid); + return 0; + } + tcp_retransmit_skb_args_t *args = bpf_map_lookup_elem(&pending_tcp_retransmit_skb, &tid); + if (args == NULL) { + return 0; + } + struct sock* sk = args->sk; + u32 retrans_out = 0; + bpf_probe_read_kernel_with_telemetry(&retrans_out, sizeof(retrans_out), &(tcp_sk(sk)->retrans_out)); - return handle_retransmit(sk, segs); + bpf_map_delete_elem(&pending_tcp_retransmit_skb, &tid); + + return handle_retransmit(sk, retrans_out, RETRANSMIT_COUNT_ABSOLUTE); } SEC("kprobe/tcp_set_state") @@ -426,7 +446,7 @@ int kprobe__tcp_set_state(struct pt_regs *ctx) { } tcp_stats_t stats = { .state_transitions = (1 << state) }; - update_tcp_stats(&t, stats); + update_tcp_stats(&t, stats, RETRANSMIT_COUNT_NONE); return 0; } @@ -563,27 +583,13 @@ static __always_inline int sys_enter_bind(struct socket *sock, struct sockaddr * return 0; } - u16 sin_port = 0; - sa_family_t family = 0; - bpf_probe_read_kernel_with_telemetry(&family, sizeof(sa_family_t), &addr->sa_family); - if (family == AF_INET) { - bpf_probe_read_kernel_with_telemetry(&sin_port, sizeof(u16), &(((struct sockaddr_in *)addr)->sin_port)); - } else if (family == AF_INET6) { - bpf_probe_read_kernel_with_telemetry(&sin_port, sizeof(u16), &(((struct sockaddr_in6 *)addr)->sin6_port)); - } - - sin_port = bpf_ntohs(sin_port); - if (sin_port == 0) { - log_debug("ERR(sys_enter_bind): sin_port is 0\n"); - return 0; - } - // write to pending_binds so the retprobe knows we can mark this as binding. bind_syscall_args_t args = {}; - args.port = sin_port; + bpf_probe_read_kernel_with_telemetry(&args.sk, sizeof(args.sk), &sock->sk); + args.addr = addr; bpf_map_update_with_telemetry(pending_bind, &tid, &args, BPF_ANY); - log_debug("sys_enter_bind: started a bind on UDP port=%d sock=%llx tid=%u\n", sin_port, sock, tid); + log_debug("sys_enter_bind: started a bind on UDP sock=%llx tid=%u\n", sock, tid); return 0; } @@ -612,8 +618,7 @@ static __always_inline int sys_exit_bind(__s64 ret) { __u64 tid = bpf_get_current_pid_tgid(); // bail if this bind() is not the one we're instrumenting - bind_syscall_args_t *args; - args = bpf_map_lookup_elem(&pending_bind, &tid); + bind_syscall_args_t *args = bpf_map_lookup_elem(&pending_bind, &tid); log_debug("sys_exit_bind: tid=%u, ret=%d\n", tid, ret); @@ -621,13 +626,34 @@ static __always_inline int sys_exit_bind(__s64 ret) { log_debug("sys_exit_bind: was not a UDP bind, will not process\n"); return 0; } - __u16 sin_port = args->port; + + struct sock * sk = args->sk; + struct sockaddr *addr = args->addr; bpf_map_delete_elem(&pending_bind, &tid); if (ret != 0) { return 0; } + u16 sin_port = 0; + sa_family_t family = 0; + bpf_probe_read_kernel_with_telemetry(&family, sizeof(sa_family_t), &addr->sa_family); + if (family == AF_INET) { + bpf_probe_read_kernel_with_telemetry(&sin_port, sizeof(u16), &(((struct sockaddr_in *)addr)->sin_port)); + } else if (family == AF_INET6) { + bpf_probe_read_kernel_with_telemetry(&sin_port, sizeof(u16), &(((struct sockaddr_in6 *)addr)->sin6_port)); + } + + sin_port = bpf_ntohs(sin_port); + if (sin_port == 0) { + sin_port = read_sport(sk); + } + + if (sin_port == 0) { + log_debug("ERR(sys_exit_bind): sin_port is 0\n"); + return 0; + } + port_binding_t pb = {}; pb.netns = 0; // don't have net ns info in this context pb.port = sin_port; diff --git a/pkg/network/ebpf/c/tracer-maps.h b/pkg/network/ebpf/c/tracer-maps.h index 133db02bd428d4..3d52397f86cf25 100644 --- a/pkg/network/ebpf/c/tracer-maps.h +++ b/pkg/network/ebpf/c/tracer-maps.h @@ -71,10 +71,17 @@ BPF_HASH_MAP(udp_port_bindings, port_binding_t, __u32, 0) /* Similar to pending_sockets this is used for capturing state between the call and return of the bind() system call. * * Keys: the PID returned by bpf_get_current_pid_tgid() - * Values: the args of the bind call being instrumented. + * Values: the args of the bind call being instrumented. */ BPF_HASH_MAP(pending_bind, __u64, bind_syscall_args_t, 8192) +/* Similar to pending_sockets this is used for capturing state between the call and return of the tcp_retransmit_skb() system call. + * + * Keys: the PID returned by bpf_get_current_pid_tgid() + * Values: the args of the tcp_retransmit_skb call being instrumented. + */ +BPF_HASH_MAP(pending_tcp_retransmit_skb, __u64, tcp_retransmit_skb_args_t, 8192) + /* This map is used for telemetry in kernelspace * only key 0 is used * value is a telemetry object diff --git a/pkg/network/ebpf/c/tracer-stats.h b/pkg/network/ebpf/c/tracer-stats.h index 694a60f5be6aee..ec6be11e3b86e2 100644 --- a/pkg/network/ebpf/c/tracer-stats.h +++ b/pkg/network/ebpf/c/tracer-stats.h @@ -5,6 +5,7 @@ #include "tracer.h" #include "tracer-maps.h" #include "tracer-telemetry.h" +#include #include "sock-defines.h" #include "cookie.h" @@ -134,7 +135,7 @@ static __always_inline void update_conn_stats(conn_tuple_t *t, size_t sent_bytes } } -static __always_inline void update_tcp_stats(conn_tuple_t *t, tcp_stats_t stats) { +static __always_inline void update_tcp_stats(conn_tuple_t *t, tcp_stats_t stats, retransmit_count_increment_t retrans_type) { // query stats without the PID from the tuple __u32 pid = t->pid; t->pid = 0; @@ -149,7 +150,9 @@ static __always_inline void update_tcp_stats(conn_tuple_t *t, tcp_stats_t stats) return; } - if (stats.retransmits > 0) { + if (retrans_type == RETRANSMIT_COUNT_ABSOLUTE) { + val->retransmits = stats.retransmits; + } else if (retrans_type == RETRANSMIT_COUNT_INCREMENT && stats.retransmits > 0) { __sync_fetch_and_add(&val->retransmits, stats.retransmits); } @@ -174,7 +177,7 @@ static __always_inline int handle_message(conn_tuple_t *t, size_t sent_bytes, si return 0; } -static __always_inline int handle_retransmit(struct sock *sk, int segs) { +static __always_inline int handle_retransmit(struct sock *sk, int count, retransmit_count_increment_t retrans_type) { conn_tuple_t t = {}; u64 zero = 0; @@ -182,8 +185,8 @@ static __always_inline int handle_retransmit(struct sock *sk, int segs) { return 0; } - tcp_stats_t stats = { .retransmits = segs, .rtt = 0, .rtt_var = 0 }; - update_tcp_stats(&t, stats); + tcp_stats_t stats = { .retransmits = count, .rtt = 0, .rtt_var = 0 }; + update_tcp_stats(&t, stats, retrans_type); return 0; } @@ -198,7 +201,7 @@ static __always_inline void handle_tcp_stats(conn_tuple_t* t, struct sock* sk, u if (state > 0) { stats.state_transitions = (1 << state); } - update_tcp_stats(t, stats); + update_tcp_stats(t, stats, RETRANSMIT_COUNT_NONE); } diff --git a/pkg/network/ebpf/c/tracer.h b/pkg/network/ebpf/c/tracer.h index 128a223cdb7952..362abd6d8e2f35 100644 --- a/pkg/network/ebpf/c/tracer.h +++ b/pkg/network/ebpf/c/tracer.h @@ -23,6 +23,13 @@ typedef enum PACKET_COUNT_INCREMENT = 2, } packet_count_increment_t; +typedef enum +{ + RETRANSMIT_COUNT_NONE = 0, + RETRANSMIT_COUNT_ABSOLUTE = 1, + RETRANSMIT_COUNT_INCREMENT = 2, +} retransmit_count_increment_t; + #define CONN_DIRECTION_MASK 0b11 typedef struct { @@ -145,9 +152,15 @@ typedef struct { } telemetry_t; typedef struct { - __u16 port; + struct sockaddr *addr; + struct sock *sk; } bind_syscall_args_t; +typedef struct { + struct sock *sk; + int segs; +} tcp_retransmit_skb_args_t; + typedef struct { __u32 netns; __u16 port; diff --git a/pkg/network/ebpf/kprobe_types.go b/pkg/network/ebpf/kprobe_types.go index 977aaea8bdb0b5..d8427ad141ad31 100644 --- a/pkg/network/ebpf/kprobe_types.go +++ b/pkg/network/ebpf/kprobe_types.go @@ -12,7 +12,6 @@ package ebpf #include "./c/tracer.h" #include "./c/tcp_states.h" #include "./c/prebuilt/offset-guess.h" -#include "./c/protocols/http2-defs.h" */ import "C" @@ -30,35 +29,10 @@ type BindSyscallArgs C.bind_syscall_args_t // udp_recv_sock_t have *sock and *msghdr struct members, we make them opaque here type _Ctype_struct_sock uint64 type _Ctype_struct_msghdr uint64 +type _Ctype_struct_sockaddr uint64 type TCPState uint8 -type StaticTableEnumKey = C.static_table_key_t - -const ( - MethodKey StaticTableEnumKey = C.kMethod - PathKey StaticTableEnumKey = C.kPath - StatusKey StaticTableEnumKey = C.kStatus -) - -type StaticTableEnumValue = C.static_table_key_t - -const ( - GetValue StaticTableEnumValue = C.kGET - PostValue StaticTableEnumValue = C.kPOST - EmptyPathValue StaticTableEnumValue = C.kEmptyPath - IndexPathValue StaticTableEnumValue = C.kIndexPath - K200Value StaticTableEnumValue = C.k200 - K204Value StaticTableEnumValue = C.k204 - K206Value StaticTableEnumValue = C.k206 - K304Value StaticTableEnumValue = C.k304 - K400Value StaticTableEnumValue = C.k400 - K404Value StaticTableEnumValue = C.k404 - K500Value StaticTableEnumValue = C.k500 -) - -type StaticTableValue = C.static_table_entry_t - const ( Established TCPState = C.TCP_ESTABLISHED Close TCPState = C.TCP_CLOSE diff --git a/pkg/network/ebpf/kprobe_types_linux.go b/pkg/network/ebpf/kprobe_types_linux.go index 7c2a5fbf677cba..cd0709c6e2b7d1 100644 --- a/pkg/network/ebpf/kprobe_types_linux.go +++ b/pkg/network/ebpf/kprobe_types_linux.go @@ -69,43 +69,16 @@ type UDPRecvSock struct { Msg *_Ctype_struct_msghdr } type BindSyscallArgs struct { - Port uint16 + Addr *_Ctype_struct_sockaddr + Sk *_Ctype_struct_sock } type _Ctype_struct_sock uint64 type _Ctype_struct_msghdr uint64 +type _Ctype_struct_sockaddr uint64 type TCPState uint8 -type StaticTableEnumKey = uint8 - -const ( - MethodKey StaticTableEnumKey = 0x2 - PathKey StaticTableEnumKey = 0x4 - StatusKey StaticTableEnumKey = 0x9 -) - -type StaticTableEnumValue = uint8 - -const ( - GetValue StaticTableEnumValue = 0x2 - PostValue StaticTableEnumValue = 0x3 - EmptyPathValue StaticTableEnumValue = 0x4 - IndexPathValue StaticTableEnumValue = 0x5 - K200Value StaticTableEnumValue = 0x8 - K204Value StaticTableEnumValue = 0x9 - K206Value StaticTableEnumValue = 0xa - K304Value StaticTableEnumValue = 0xb - K400Value StaticTableEnumValue = 0xc - K404Value StaticTableEnumValue = 0xd - K500Value StaticTableEnumValue = 0xe -) - -type StaticTableValue = struct { - Key uint8 - Value uint8 -} - const ( Established TCPState = 0x1 Close TCPState = 0x7 diff --git a/pkg/network/ebpf/probes/probes.go b/pkg/network/ebpf/probes/probes.go index a448789c6c5a9f..2cd591997624e3 100644 --- a/pkg/network/ebpf/probes/probes.go +++ b/pkg/network/ebpf/probes/probes.go @@ -113,10 +113,12 @@ const ( // UDPDestroySockReturn traces the return of the udp_destroy_sock() system call UDPDestroySockReturn ProbeName = "kretprobe/udp_destroy_sock" - // TCPRetransmit traces the return value for the tcp_retransmit_skb() system call + // TCPRetransmit traces the params for the tcp_retransmit_skb() system call TCPRetransmit ProbeName = "kprobe/tcp_retransmit_skb" - // TCPRetransmitPre470 traces the return value for the tcp_retransmit_skb() system call on kernel version < 4.7 + // TCPRetransmitPre470 traces the params for the tcp_retransmit_skb() system call on kernel version < 4.7 TCPRetransmitPre470 ProbeName = "kprobe/tcp_retransmit_skb/pre_4_7_0" + // TCPRetransmitRet traces the return value for the tcp_retransmit_skb() system call + TCPRetransmitRet ProbeName = "kretprobe/tcp_retransmit_skb" // InetCskAcceptReturn traces the return value for the inet_csk_accept syscall InetCskAcceptReturn ProbeName = "kretprobe/inet_csk_accept" @@ -158,28 +160,29 @@ type BPFMapName string // constants for the map names const ( - ConnMap BPFMapName = "conn_stats" - TCPStatsMap BPFMapName = "tcp_stats" - TCPConnectSockPidMap BPFMapName = "tcp_ongoing_connect_pid" - ConnCloseEventMap BPFMapName = "conn_close_event" - TracerStatusMap BPFMapName = "tracer_status" - PortBindingsMap BPFMapName = "port_bindings" - UDPPortBindingsMap BPFMapName = "udp_port_bindings" - TelemetryMap BPFMapName = "telemetry" - ConnCloseBatchMap BPFMapName = "conn_close_batch" - ConntrackMap BPFMapName = "conntrack" - ConntrackTelemetryMap BPFMapName = "conntrack_telemetry" - SockFDLookupArgsMap BPFMapName = "sockfd_lookup_args" - DoSendfileArgsMap BPFMapName = "do_sendfile_args" - SockByPidFDMap BPFMapName = "sock_by_pid_fd" - PidFDBySockMap BPFMapName = "pid_fd_by_sock" - TagsMap BPFMapName = "conn_tags" - TcpSendMsgArgsMap BPFMapName = "tcp_sendmsg_args" - IpMakeSkbArgsMap BPFMapName = "ip_make_skb_args" - MapErrTelemetryMap BPFMapName = "map_err_telemetry_map" - HelperErrTelemetryMap BPFMapName = "helper_err_telemetry_map" - TcpRecvMsgArgsMap BPFMapName = "tcp_recvmsg_args" - StaticTableMap BPFMapName = "http2_static_table" + ConnMap BPFMapName = "conn_stats" + TCPStatsMap BPFMapName = "tcp_stats" + TCPConnectSockPidMap BPFMapName = "tcp_ongoing_connect_pid" + ConnCloseEventMap BPFMapName = "conn_close_event" + TracerStatusMap BPFMapName = "tracer_status" + PortBindingsMap BPFMapName = "port_bindings" + UDPPortBindingsMap BPFMapName = "udp_port_bindings" + TelemetryMap BPFMapName = "telemetry" + ConnCloseBatchMap BPFMapName = "conn_close_batch" + ConntrackMap BPFMapName = "conntrack" + ConntrackTelemetryMap BPFMapName = "conntrack_telemetry" + SockFDLookupArgsMap BPFMapName = "sockfd_lookup_args" + DoSendfileArgsMap BPFMapName = "do_sendfile_args" + SockByPidFDMap BPFMapName = "sock_by_pid_fd" + PidFDBySockMap BPFMapName = "pid_fd_by_sock" + TagsMap BPFMapName = "conn_tags" + TcpSendMsgArgsMap BPFMapName = "tcp_sendmsg_args" + IpMakeSkbArgsMap BPFMapName = "ip_make_skb_args" + MapErrTelemetryMap BPFMapName = "map_err_telemetry_map" + HelperErrTelemetryMap BPFMapName = "helper_err_telemetry_map" + TcpRecvMsgArgsMap BPFMapName = "tcp_recvmsg_args" + ProtocolClassificationBufMap BPFMapName = "classification_buf" + StaticTableMap BPFMapName = "http2_static_table" ) // SectionName returns the SectionName for the given BPF map diff --git a/pkg/network/encoding/format_test.go b/pkg/network/encoding/format_test.go index 490869d274352e..b395bbc15b9ac5 100644 --- a/pkg/network/encoding/format_test.go +++ b/pkg/network/encoding/format_test.go @@ -6,7 +6,6 @@ package encoding import ( - "github.com/stretchr/testify/assert" "runtime" "testing" @@ -91,44 +90,3 @@ func BenchmarkConnectionReset(b *testing.B) { } runtime.KeepAlive(c) } - -func TestFormatProtocols(t *testing.T) { - tests := []struct { - name string - protocol network.ProtocolType - want *model.ProtocolStack - }{ - { - name: "unknown protocol", - protocol: network.ProtocolUnknown, - want: &model.ProtocolStack{ - Stack: []model.ProtocolType{ - model.ProtocolType_protocolUnknown, - }, - }, - }, - { - name: "unclassified protocol", - protocol: network.ProtocolUnclassified, - want: &model.ProtocolStack{ - Stack: []model.ProtocolType{ - model.ProtocolType_protocolUnknown, - }, - }, - }, - { - name: "http protocol", - protocol: network.ProtocolHTTP, - want: &model.ProtocolStack{ - Stack: []model.ProtocolType{ - model.ProtocolType_protocolHTTP, - }, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - assert.Equalf(t, tt.want, formatProtocol(tt.protocol), "formatProtocol(%v)", tt.protocol) - }) - } -} diff --git a/pkg/network/encoding/format_usm_test.go b/pkg/network/encoding/format_usm_test.go new file mode 100644 index 00000000000000..5df0344a3a1d37 --- /dev/null +++ b/pkg/network/encoding/format_usm_test.go @@ -0,0 +1,83 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package encoding + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + model "github.com/DataDog/agent-payload/v5/process" + "github.com/DataDog/datadog-agent/pkg/network" +) + +func TestFormatProtocols(t *testing.T) { + tests := []struct { + name string + protocol network.ProtocolType + want *model.ProtocolStack + }{ + { + name: "unknown protocol", + protocol: network.ProtocolUnknown, + want: &model.ProtocolStack{ + Stack: []model.ProtocolType{ + model.ProtocolType_protocolUnknown, + }, + }, + }, + { + name: "unclassified protocol", + protocol: network.ProtocolUnclassified, + want: &model.ProtocolStack{ + Stack: []model.ProtocolType{ + model.ProtocolType_protocolUnknown, + }, + }, + }, + { + name: "http protocol", + protocol: network.ProtocolHTTP, + want: &model.ProtocolStack{ + Stack: []model.ProtocolType{ + model.ProtocolType_protocolHTTP, + }, + }, + }, + { + name: "amqp protocol", + protocol: network.ProtocolAMQP, + want: &model.ProtocolStack{ + Stack: []model.ProtocolType{ + model.ProtocolType_protocolAMQP, + }, + }, + }, + { + name: "redis protocol", + protocol: network.ProtocolRedis, + want: &model.ProtocolStack{ + Stack: []model.ProtocolType{ + model.ProtocolType_protocolRedis, + }, + }, + }, + { + name: "mongo protocol", + protocol: network.ProtocolMongo, + want: &model.ProtocolStack{ + Stack: []model.ProtocolType{ + model.ProtocolType_protocolMongo, + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + assert.Equalf(t, tt.want, formatProtocol(tt.protocol), "formatProtocol(%v)", tt.protocol) + }) + } +} diff --git a/pkg/network/ephemeral_linux.go b/pkg/network/ephemeral_linux.go index d23c2e8a8ab498..bb36e1797be776 100644 --- a/pkg/network/ephemeral_linux.go +++ b/pkg/network/ephemeral_linux.go @@ -30,18 +30,17 @@ func IsPortInEphemeralRange(p uint16) EphemeralPortType { procfsPath = config.Datadog.GetString("procfs_path") } ephemeralIntPair = sysctl.NewIntPair(procfsPath, "net/ipv4/ip_local_port_range", time.Hour) - }) - - low, hi, err := ephemeralIntPair.Get() - if err == nil { - if low > 0 && low <= math.MaxUint16 { - ephemeralLow = uint16(low) - } - if hi > 0 && hi <= math.MaxUint16 { - ephemeralHigh = uint16(hi) + low, hi, err := ephemeralIntPair.Get() + if err == nil { + if low > 0 && low <= math.MaxUint16 { + ephemeralLow = uint16(low) + } + if hi > 0 && hi <= math.MaxUint16 { + ephemeralHigh = uint16(hi) + } } - } - if err != nil || ephemeralLow == 0 || ephemeralHigh == 0 { + }) + if ephemeralLow == 0 || ephemeralHigh == 0 { return EphemeralUnknown } if p >= ephemeralLow && p <= ephemeralHigh { diff --git a/pkg/network/event_common.go b/pkg/network/event_common.go index 8c004f864ae3b5..9ababb3eb6bf28 100644 --- a/pkg/network/event_common.go +++ b/pkg/network/event_common.go @@ -18,17 +18,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/process/util" ) -type ProtocolType uint16 - -const ( - ProtocolUnclassified ProtocolType = iota - ProtocolUnknown - ProtocolHTTP - ProtocolHTTP2 - ProtocolTLS - MaxProtocols -) - // ConnectionType will be either TCP or UDP type ConnectionType uint8 diff --git a/pkg/network/event_usm_common.go b/pkg/network/event_usm_common.go new file mode 100644 index 00000000000000..5667112797e702 --- /dev/null +++ b/pkg/network/event_usm_common.go @@ -0,0 +1,46 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package network + +import ( + model "github.com/DataDog/agent-payload/v5/process" +) + +type ProtocolType uint16 + +const ( + ProtocolUnclassified = ProtocolType(model.ProtocolType_protocolUnclassified) + ProtocolUnknown = ProtocolType(model.ProtocolType_protocolUnknown) + ProtocolHTTP = ProtocolType(model.ProtocolType_protocolHTTP) + ProtocolHTTP2 = ProtocolType(model.ProtocolType_protocolHTTP2) + ProtocolTLS = ProtocolType(model.ProtocolType_protocolTLS) + ProtocolKafka = ProtocolType(model.ProtocolType_protocolKafka) + ProtocolMongo = ProtocolType(model.ProtocolType_protocolMongo) + ProtocolPostgres = ProtocolType(model.ProtocolType_protocolPostgres) + ProtocolAMQP = ProtocolType(model.ProtocolType_protocolAMQP) + ProtocolRedis = ProtocolType(model.ProtocolType_protocolRedis) +) + +var ( + supportedProtocols = map[ProtocolType]struct{}{ + ProtocolUnclassified: {}, + ProtocolUnknown: {}, + ProtocolHTTP: {}, + ProtocolHTTP2: {}, + ProtocolTLS: {}, + ProtocolKafka: {}, + ProtocolMongo: {}, + ProtocolPostgres: {}, + ProtocolAMQP: {}, + ProtocolRedis: {}, + } +) + +// IsValidProtocolValue checks if a given value is a valid protocol. +func IsValidProtocolValue(val uint8) bool { + _, ok := supportedProtocols[ProtocolType(val)] + return ok +} diff --git a/pkg/network/protocols/amqp/client.go b/pkg/network/protocols/amqp/client.go new file mode 100644 index 00000000000000..b69d336bf44881 --- /dev/null +++ b/pkg/network/protocols/amqp/client.go @@ -0,0 +1,124 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package amqp + +import ( + "fmt" + "github.com/streadway/amqp" + "sync" +) + +type Options struct { + ServerAddress string + Username string + Password string +} + +type Client struct { + PublishConn *amqp.Connection + PublishChannel *amqp.Channel + ConsumeConn *amqp.Connection + ConsumeChannel *amqp.Channel +} + +func NewClient(opts Options) (*Client, error) { + user := opts.Username + if user == "" { + user = User + } + + pass := opts.Password + if pass == "" { + pass = Pass + } + + publishConn, err := amqp.Dial(fmt.Sprintf("amqp://%s:%s@%s/", user, pass, opts.ServerAddress)) + if err != nil { + return nil, err + } + publishCh, err := publishConn.Channel() + if err != nil { + return nil, err + } + consumeConn, err := amqp.Dial(fmt.Sprintf("amqp://%s:%s@%s/", user, pass, opts.ServerAddress)) + if err != nil { + return nil, err + } + consumeCh, err := consumeConn.Channel() + if err != nil { + return nil, err + } + return &Client{ + PublishConn: publishConn, + PublishChannel: publishCh, + ConsumeConn: consumeConn, + ConsumeChannel: consumeCh, + }, nil +} + +func (c *Client) Terminate() { + c.PublishChannel.Close() + c.ConsumeChannel.Close() + c.PublishConn.Close() + c.ConsumeConn.Close() +} + +func (c *Client) DeclareQueue(name string, ch *amqp.Channel) error { + _, err := ch.QueueDeclare( + name, // name + false, // durable + false, // delete when unused + false, // exclusive + false, // no-wait + nil, // arguments + ) + return err +} + +func (c *Client) Publish(queue, body string) error { + return c.PublishChannel.Publish( + "", // exchange + queue, // routing key + false, // mandatory + false, // immediate + amqp.Publishing{ + ContentType: "text/plain", + Body: []byte(body), + }) +} + +func (c *Client) Consume(queue string, numberOfMessages int) ([]string, error) { + msgs, err := c.ConsumeChannel.Consume( + queue, + "", // consumer + true, // auto-ack + false, // exclusive + false, // no-local + false, // no-wait + nil, // args + ) + + if err != nil { + return nil, err + } + + res := make([]string, 0, numberOfMessages) + wg := sync.WaitGroup{} + wg.Add(1) + go func() { + defer wg.Done() + for msg := range msgs { + res = append(res, string(msg.Body)) + if len(res) == numberOfMessages { + return + } + } + }() + + wg.Wait() + + return res, nil +} diff --git a/pkg/network/protocols/amqp/server.go b/pkg/network/protocols/amqp/server.go new file mode 100644 index 00000000000000..64a8bdca8fea5a --- /dev/null +++ b/pkg/network/protocols/amqp/server.go @@ -0,0 +1,33 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package amqp + +import ( + "fmt" + "regexp" + "testing" + + "github.com/DataDog/datadog-agent/pkg/network/protocols/http/testutil" + protocolsUtils "github.com/DataDog/datadog-agent/pkg/network/protocols/testutil" +) + +const ( + User = "guest" + Pass = "guest" +) + +func RunAmqpServer(t *testing.T, serverAddr, serverPort string) { + env := []string{ + "AMQP_ADDR=" + serverAddr, + "AMQP_PORT=" + serverPort, + "USER=" + User, + "PASS=" + Pass, + } + + t.Helper() + dir, _ := testutil.CurDir() + protocolsUtils.RunDockerServer(t, "amqp", dir+"/testdata/docker-compose.yml", env, regexp.MustCompile(fmt.Sprintf(".*started TCP listener on .*%s.*", serverPort))) +} diff --git a/pkg/network/protocols/amqp/testdata/docker-compose.yml b/pkg/network/protocols/amqp/testdata/docker-compose.yml new file mode 100644 index 00000000000000..4cd98c37079e9b --- /dev/null +++ b/pkg/network/protocols/amqp/testdata/docker-compose.yml @@ -0,0 +1,9 @@ +version: '3' +services: + rabbitmq: + image: rabbitmq:3-management-alpine + ports: + - ${AMQP_ADDR:-127.0.0.1}:${AMQP_PORT:-5672}:5672 + environment: + - "RABBITMQ_DEFAULT_PASS=${PASS:-guest}" + - "RABBITMQ_DEFAULT_USER=${USER:-guest}" diff --git a/pkg/network/protocols/events/README.md b/pkg/network/protocols/events/README.md new file mode 100644 index 00000000000000..6c864a37c81fc1 --- /dev/null +++ b/pkg/network/protocols/events/README.md @@ -0,0 +1,73 @@ +# `pkg/network/protocols/events` + +## Motivation + +The purpose of this package is to standardize the communication between user and +kernel space across different Universal Service Monitoring (USM) protocols. + +Some technical concerns that were factored in the code and are worth mentioning are: + +* eBPF programs of type `BPF_PROG_TYPE_SOCKET_FILTER` are not (for _most_ Kernel + versions) able to directly write events into perf buffers; +* Reading events off-perf buffers can be quite CPU-intensive. This can be +mitigated by properly configuring the `watermark` option when issuing the +`perf_event_open` syscall. However, there is currently no way to _synchronize_ +(eg. flush all buffered events) at a given moment in time[^1], which is a +requirement for us. + +[^1]: this may be available in the near future since we could probably force +wake-up events on the fly via `ioctl` calls, but this will likely require us to +upstream changes to the `cilium/ebpf` library. There is a Jira card owned by +`ebpf-platform` tracking this, and once this is available we could _greatly_ +simplify this package. + + +## How to use the library + +### Kernel Side + +```c +#include "protocols/events.h" +USM_EVENTS_INIT(, , ); +``` + +This will instantiate the necessary eBPF maps along with two functions: +* `_batch_enqueue`; +* `_batch_flush`; + +Please note that `_batch_flush` requires access to the +`bpf_perf_event_output` helper, which is typically not available to socket +filter programs. Because of that we recommend to call it from +`netif_receive_skb` which is associated to the execution of socket filter programs: + +```c +SEC("tracepoint/net/netif_receive_skb") +int tracepoint__net__netif_receive_skb(struct pt_regs* ctx) { + _flush_batch(ctx); + return 0; +} +``` + +### Userspace Side + +Just create a `event.Consumer` and supply it with a callback argument of type +`func([]byte)` that gets executed once for every eBPF "event". + +The slice of bytes corresponds to the memory layout of the struct used on Kernel +side and it's the caller responsibility to make the unmarshaling/type conversion. +Please also note that the callback *must*: +1) copy the data it wishes to hold since the underlying byte array is reclaimed; +2) be thread-safe, as the callback may be executed concurrently from multiple go-routines; +As an example this is how HTTP integration does it: + +```go +func callback(data []byte) { + event := (*ebpfHttpTx)(unsafe.Pointer(&data[0])) + ... +} + +Aside from that, it is _recommended_ (though not strictly necessary) to call +`Consumer.Sync()` every time there is a connection check in system-probe, so +all buffered USM events can be sent to backend. + +For a complete integration example, please refer to `pkg/network/protocols/http/monitor.go` diff --git a/pkg/network/protocols/events/batch_offsets.go b/pkg/network/protocols/events/batch_offsets.go new file mode 100644 index 00000000000000..7377ce3b10f7a4 --- /dev/null +++ b/pkg/network/protocols/events/batch_offsets.go @@ -0,0 +1,98 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package events + +import ( + "sync" +) + +// offsetManager is responsible for keeping track of which chunks of data we +// have consumed from each batch object +type offsetManager struct { + mux sync.Mutex + stateByCPU []*cpuReadState +} + +type cpuReadState struct { + // this is the nextBatchID we're expecting for a particular CPU core. we use + // this when we attempt to retrieve data that hasn't been sent from kernel space + // yet because it belongs to an incomplete batch. + nextBatchID int + + // information associated to partial batch reads + partialBatchID int + partialOffset int +} + +func newOffsetManager(numCPUS int) *offsetManager { + stateByCPU := make([]*cpuReadState, numCPUS) + for i := range stateByCPU { + stateByCPU[i] = new(cpuReadState) + } + + return &offsetManager{stateByCPU: stateByCPU} +} + +// Get returns the data offset that hasn't been consumed yet for a given batch +func (o *offsetManager) Get(cpu int, batch *batch, syncing bool) (begin, end int) { + o.mux.Lock() + defer o.mux.Unlock() + state := o.stateByCPU[cpu] + batchID := int(batch.Idx) + + if batchID < state.nextBatchID { + // we have already consumed this data + return 0, 0 + } + + if batchComplete(batch) { + state.nextBatchID = batchID + 1 + } + + // determining the begin offset + // usually this is 0, but if we've done a partial read of this batch + // we need to take that into account + if int(batch.Idx) == state.partialBatchID { + begin = state.partialOffset + } + + // determining the end offset + // usually this is the full batch size but it can be less + // in the context of a forced (partial) read + end = int(batch.Len) + + // if this is part of a forced read (that is, we're reading a batch before + // it's complete) we need to keep track of which entries we're reading + // so we avoid reading the same entries again + if syncing { + state.partialBatchID = int(batch.Idx) + state.partialOffset = end + } + + return +} + +func (o *offsetManager) NextBatchID(cpu int) int { + o.mux.Lock() + defer o.mux.Unlock() + + return o.stateByCPU[cpu].nextBatchID +} + +func max(a, b int) int { + if a >= b { + return a + } + + return b +} + +func batchComplete(b *batch) bool { + return b.Cap > 0 && b.Len == b.Cap +} diff --git a/pkg/network/protocols/events/batch_offsets_test.go b/pkg/network/protocols/events/batch_offsets_test.go new file mode 100644 index 00000000000000..d3955f2d5aae08 --- /dev/null +++ b/pkg/network/protocols/events/batch_offsets_test.go @@ -0,0 +1,113 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package events + +import ( + "testing" + + "gotest.tools/assert" +) + +func TestOffsets(t *testing.T) { + const numCPUs = 2 + offsets := newOffsetManager(numCPUs) + + assert.Equal(t, 0, offsets.NextBatchID(0)) + assert.Equal(t, 0, offsets.NextBatchID(1)) + + // reading full batch: cpu=0 batchID=0 + begin, end := offsets.Get(0, &batch{Idx: 0, Len: 10, Cap: 10}, false) + assert.Equal(t, 0, begin) + assert.Equal(t, 10, end) + // nextBatchID is advanced to 1 for cpu=0 + assert.Equal(t, 1, offsets.NextBatchID(0)) + + // reading partial batch: cpu=1 batchID=0 sync=true + begin, end = offsets.Get(1, &batch{Idx: 0, Len: 8, Cap: 10}, true) + assert.Equal(t, 0, begin) + assert.Equal(t, 8, end) + // nextBatchID remains 0 for cpu=1 since this batch hasn't been filled up yet + assert.Equal(t, 0, offsets.NextBatchID(1)) + + // reading full batch: cpu=1 batchID=0 + begin, end = offsets.Get(1, &batch{Idx: 0, Len: 10, Cap: 10}, false) + // notice we only read now the remaining offsets + assert.Equal(t, 8, begin) + assert.Equal(t, 10, end) + // nextBatchID is advanced to 1 for cpu=1 + assert.Equal(t, 1, offsets.NextBatchID(1)) + + // reading partial batch: cpu=0 batchID=1 sync=true + begin, end = offsets.Get(0, &batch{Idx: 1, Len: 4, Cap: 10}, true) + assert.Equal(t, 0, begin) + assert.Equal(t, 4, end) + // nextBatchID remains 1 for cpu=0 + assert.Equal(t, 1, offsets.NextBatchID(0)) + + // reading partial batch: cpu=0 batchID=1 sync=true + begin, end = offsets.Get(0, &batch{Idx: 1, Len: 5, Cap: 10}, true) + assert.Equal(t, 4, begin) + assert.Equal(t, 5, end) + // nextBatchID remains 1 for cpu=0 + assert.Equal(t, 1, offsets.NextBatchID(0)) +} + +func TestDelayedBatchReads(t *testing.T) { + const numCPUs = 1 + offsets := newOffsetManager(numCPUs) + + // this emulates the scenario where we preemptively read (sync=true) two + // complete batches in a row before they are read from perf buffer + begin, end := offsets.Get(0, &batch{Idx: 0, Len: 10, Cap: 10}, true) + assert.Equal(t, 0, begin) + assert.Equal(t, 10, end) + + begin, end = offsets.Get(0, &batch{Idx: 1, Len: 10, Cap: 10}, true) + assert.Equal(t, 0, begin) + assert.Equal(t, 10, end) + + // now the "delayed" batches from perf buffer are read in sequence + begin, end = offsets.Get(0, &batch{Idx: 0, Len: 10, Cap: 10}, true) + assert.Equal(t, 0, begin) + assert.Equal(t, 0, end) + + begin, end = offsets.Get(0, &batch{Idx: 1, Len: 10, Cap: 10}, true) + assert.Equal(t, 0, begin) + assert.Equal(t, 0, end) +} + +func TestUnchangedBatchRead(t *testing.T) { + const numCPUs = 1 + offsets := newOffsetManager(numCPUs) + + begin, end := offsets.Get(0, &batch{Idx: 0, Len: 5, Cap: 10}, true) + assert.Equal(t, 0, begin) + assert.Equal(t, 5, end) + + begin, end = offsets.Get(0, &batch{Idx: 0, Len: 5, Cap: 10}, true) + assert.Equal(t, 5, begin) + assert.Equal(t, 5, end) +} + +func TestReadGap(t *testing.T) { + const numCPUs = 1 + offsets := newOffsetManager(numCPUs) + + // this emulates the scenario where a batch is lost in the perf buffer + begin, end := offsets.Get(0, &batch{Idx: 0, Len: 10, Cap: 10}, true) + assert.Equal(t, 0, begin) + assert.Equal(t, 10, end) + assert.Equal(t, 1, offsets.NextBatchID(0)) + + // batch idx=1 was lost + begin, end = offsets.Get(0, &batch{Idx: 2, Len: 10, Cap: 10}, true) + assert.Equal(t, 0, begin) + assert.Equal(t, 10, end) + assert.Equal(t, 3, offsets.NextBatchID(0)) +} diff --git a/pkg/network/protocols/events/batch_reader.go b/pkg/network/protocols/events/batch_reader.go new file mode 100644 index 00000000000000..bd6e79fe097eb8 --- /dev/null +++ b/pkg/network/protocols/events/batch_reader.go @@ -0,0 +1,119 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package events + +import ( + "sync" + "unsafe" + + "github.com/cilium/ebpf" +) + +var batchPool = sync.Pool{ + New: func() interface{} { + return new(batch) + }, +} + +type batchReader struct { + sync.Mutex + numCPUs int + batchMap *ebpf.Map + offsets *offsetManager + workerPool *workerPool + stopped bool +} + +func newBatchReader(offsetManager *offsetManager, batchMap *ebpf.Map, numCPUs int) (*batchReader, error) { + // initialize eBPF maps + batch := new(batch) + for i := 0; i < numCPUs; i++ { + for j := 0; j < batchPagesPerCPU; j++ { + key := &batchKey{Cpu: uint32(i), Num: uint32(j)} + err := batchMap.Put(unsafe.Pointer(key), unsafe.Pointer(batch)) + if err != nil { + return nil, err + } + } + } + + workerPool, err := newWorkerPool(max(numCPUs, 32)) + if err != nil { + return nil, err + } + + return &batchReader{ + numCPUs: numCPUs, + offsets: offsetManager, + batchMap: batchMap, + workerPool: workerPool, + }, nil +} + +// ReadAll batches from eBPF (concurrently) and execute the given +// callback function for each batch +func (r *batchReader) ReadAll(f func(cpu int, b *batch)) { + // This lock is used only for the purposes of synchronizing termination + // and it's only held while *enqueing* the jobs. + r.Lock() + if r.stopped { + r.Unlock() + return + } + + var wg sync.WaitGroup + wg.Add(r.numCPUs) + + for i := 0; i < r.numCPUs; i++ { + cpu := i // required to properly capture this variable in the function closure + r.workerPool.Do(func() { + defer wg.Done() + batchID, key := r.generateBatchKey(cpu) + + b := batchPool.Get().(*batch) + defer func() { + *b = batch{} + batchPool.Put(b) + }() + + err := r.batchMap.Lookup(unsafe.Pointer(key), unsafe.Pointer(b)) + if err != nil { + return + } + if int(b.Idx) != batchID { + // this means that the batch we were looking for was flushed to the perf buffer + return + } + + f(cpu, b) + }) + } + r.Unlock() + wg.Wait() +} + +// Stop batchReader +func (r *batchReader) Stop() { + r.Lock() + defer r.Unlock() + + if r.stopped { + return + } + r.stopped = true + r.workerPool.Stop() +} + +func (r *batchReader) generateBatchKey(cpu int) (batchID int, key *batchKey) { + batchID = r.offsets.NextBatchID(cpu) + return batchID, &batchKey{ + Cpu: uint32(cpu), + Num: uint32(batchID) % uint32(batchPagesPerCPU), + } +} diff --git a/pkg/network/protocols/events/configuration.go b/pkg/network/protocols/events/configuration.go new file mode 100644 index 00000000000000..b15b0037259182 --- /dev/null +++ b/pkg/network/protocols/events/configuration.go @@ -0,0 +1,79 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package events + +import ( + "os" + "sync" + + ddebpf "github.com/DataDog/datadog-agent/pkg/ebpf" + "github.com/DataDog/datadog-agent/pkg/util/log" + manager "github.com/DataDog/ebpf-manager" + "github.com/cilium/ebpf" + "github.com/iovisor/gobpf/pkg/cpupossible" +) + +// handlerByProtocol holds a temporary reference to a `ddebpf.PerfHandler` +// instance for a given protocol. This is done to simplify the usage of this +// package a little bit, so a call to `events.Configure` can be later linked +// to a call to `events.NewConsumer` without the need to explicitly propagate +// any values. The map is guarded by `handlerMux`. +var handlerByProtocol map[string]*ddebpf.PerfHandler +var handlerMux sync.Mutex + +// Configure event processing +// Must be called *before* manager.InitWithOptions +func Configure(proto string, m *manager.Manager, o *manager.Options) { + handler := ddebpf.NewPerfHandler(100) + m.PerfMaps = append(m.PerfMaps, &manager.PerfMap{ + Map: manager.Map{Name: proto + eventsMapSuffix}, + PerfMapOptions: manager.PerfMapOptions{ + PerfRingBufferSize: 16 * os.Getpagesize(), + Watermark: 1, + RecordHandler: handler.RecordHandler, + LostHandler: handler.LostHandler, + RecordGetter: handler.RecordGetter, + }, + }) + + handlerMux.Lock() + if handlerByProtocol == nil { + handlerByProtocol = make(map[string]*ddebpf.PerfHandler) + } + handlerByProtocol[proto] = handler + handlerMux.Unlock() + + onlineCPUs, err := cpupossible.Get() + if err != nil { + onlineCPUs = make([]uint, 96) + log.Error("unable to detect number of CPUs. assuming 96 cores") + } + + if o.MapSpecEditors == nil { + o.MapSpecEditors = make(map[string]manager.MapSpecEditor) + } + + o.MapSpecEditors[proto+batchMapSuffix] = manager.MapSpecEditor{ + Type: ebpf.Hash, + MaxEntries: uint32(len(onlineCPUs) * batchPagesPerCPU), + EditorFlag: manager.EditMaxEntries, + } +} + +func getHandler(proto string) *ddebpf.PerfHandler { + handlerMux.Lock() + defer handlerMux.Unlock() + if handlerByProtocol == nil { + return nil + } + + handler := handlerByProtocol[proto] + delete(handlerByProtocol, proto) + return handler +} diff --git a/pkg/network/protocols/events/consumer.go b/pkg/network/protocols/events/consumer.go new file mode 100644 index 00000000000000..2c6388a2575c7b --- /dev/null +++ b/pkg/network/protocols/events/consumer.go @@ -0,0 +1,214 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package events + +import ( + "fmt" + "sync" + "time" + "unsafe" + + ddebpf "github.com/DataDog/datadog-agent/pkg/ebpf" + "github.com/DataDog/datadog-agent/pkg/network/telemetry" + "github.com/DataDog/datadog-agent/pkg/util/log" + manager "github.com/DataDog/ebpf-manager" + "go.uber.org/atomic" +) + +const ( + batchMapSuffix = "_batches" + eventsMapSuffix = "_batch_events" +) + +// Consumer provides a standardized abstraction for consuming (batched) events from eBPF +type Consumer struct { + mux sync.Mutex + proto string + syncRequest chan (chan struct{}) + offsets *offsetManager + handler *ddebpf.PerfHandler + batchReader *batchReader + callback func([]byte) + + // termination + eventLoopWG sync.WaitGroup + stopped bool + + // telemetry + then time.Time + eventsCount *telemetry.Metric + missesCount *telemetry.Metric + batchSize *atomic.Int64 +} + +// NewConsumer instantiates a new event Consumer +// `callback` is executed once for every "event" generated on eBPF and must: +// 1) copy the data it wishes to hold since the underlying byte array is reclaimed; +// 2) be thread-safe, as the callback may be executed concurrently from multiple go-routines; +func NewConsumer(proto string, ebpf *manager.Manager, callback func([]byte)) (*Consumer, error) { + batchMapName := proto + batchMapSuffix + batchMap, found, _ := ebpf.GetMap(batchMapName) + if !found { + return nil, fmt.Errorf("unable to find map %s", batchMapName) + } + + eventsMapName := proto + eventsMapSuffix + eventsMap, found, _ := ebpf.GetMap(eventsMapName) + if !found { + return nil, fmt.Errorf("unable to find map %s", eventsMapName) + } + + numCPUs := int(eventsMap.MaxEntries()) + offsets := newOffsetManager(numCPUs) + batchReader, err := newBatchReader(offsets, batchMap, numCPUs) + if err != nil { + return nil, err + } + + handler := getHandler(proto) + if handler == nil { + return nil, fmt.Errorf("unable to detect perf handler. perhaps you forgot to call events.Configure()?") + } + + // setup telemetry + metricGroup := telemetry.NewMetricGroup( + fmt.Sprintf("usm.%s", proto), + telemetry.OptStatsd, + telemetry.OptExpvar, + telemetry.OptMonotonic, + ) + + eventsCount := metricGroup.NewMetric("events_captured") + missesCount := metricGroup.NewMetric("events_missed") + + return &Consumer{ + proto: proto, + callback: callback, + syncRequest: make(chan chan struct{}), + offsets: offsets, + handler: handler, + batchReader: batchReader, + + // telemetry + eventsCount: eventsCount, + missesCount: missesCount, + batchSize: atomic.NewInt64(0), + }, nil +} + +// Start consumption of eBPF events +func (c *Consumer) Start() { + c.then = time.Now() + c.eventLoopWG.Add(1) + go func() { + defer c.eventLoopWG.Done() + for { + select { + case dataEvent, ok := <-c.handler.DataChannel: + if !ok { + return + } + + b := batchFromEventData(dataEvent.Data) + c.process(dataEvent.CPU, b, false) + dataEvent.Done() + case _, ok := <-c.handler.LostChannel: + if !ok { + return + } + + missedEvents := c.batchSize.Load() + c.missesCount.Add(missedEvents) + case done, ok := <-c.syncRequest: + if !ok { + return + } + + c.batchReader.ReadAll(func(cpu int, b *batch) { + c.process(cpu, b, true) + }) + c.log() + close(done) + } + } + }() +} + +// Sync userpace with kernelspace by fetching all buffered data on eBPF +// Calling this will block until all eBPF map data has been fetched and processed +func (c *Consumer) Sync() { + c.mux.Lock() + if c.stopped { + c.mux.Unlock() + return + } + + request := make(chan struct{}) + c.syncRequest <- request + c.mux.Unlock() + + // Wait until all data is fetch from eBPF + <-request +} + +// Stop consuming data from eBPF +func (c *Consumer) Stop() { + c.mux.Lock() + defer c.mux.Unlock() + + if c.stopped { + return + } + + c.stopped = true + c.batchReader.Stop() + c.handler.Stop() + c.eventLoopWG.Wait() + close(c.syncRequest) +} + +func (c *Consumer) process(cpu int, b *batch, syncing bool) { + begin, end := c.offsets.Get(cpu, b, syncing) + + // telemetry stuff + c.batchSize.Store(int64(b.Cap)) + c.eventsCount.Add(int64(end - begin)) + + iter := newIterator(b, begin, end) + for data := iter.Next(); data != nil; data = iter.Next() { + c.callback(data) + } +} + +func (c *Consumer) log() { + var ( + now = time.Now() + elapsed = now.Sub(c.then).Seconds() + captured = c.eventsCount.Delta() + missed = c.missesCount.Delta() + ) + + if elapsed == 0 { + return + } + + log.Infof("usm events summary: name=%q events_captured=%d(%.2f/s) events_missed=%d(%.2f/s)", + c.proto, + captured, + float64(captured)/float64(elapsed), + missed, + float64(missed)/float64(elapsed), + ) + + c.then = now +} + +func batchFromEventData(data []byte) *batch { + return (*batch)(unsafe.Pointer(&data[0])) +} diff --git a/pkg/network/protocols/events/consumer_test.go b/pkg/network/protocols/events/consumer_test.go new file mode 100644 index 00000000000000..151b04349b388e --- /dev/null +++ b/pkg/network/protocols/events/consumer_test.go @@ -0,0 +1,168 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package events + +import ( + "encoding/binary" + "math" + "os" + "path/filepath" + "testing" + "time" + "unsafe" + + "github.com/DataDog/datadog-agent/pkg/ebpf/bytecode" + "github.com/DataDog/datadog-agent/pkg/network/config" + bpftelemetry "github.com/DataDog/datadog-agent/pkg/network/telemetry" + "github.com/DataDog/datadog-agent/pkg/util/kernel" + manager "github.com/DataDog/ebpf-manager" + "github.com/cilium/ebpf" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "golang.org/x/sys/unix" +) + +func TestConsumer(t *testing.T) { + kversion, err := kernel.HostVersion() + require.NoError(t, err) + if minVersion := kernel.VersionCode(4, 14, 0); kversion < minVersion { + t.Skipf("package not supported by kernels < %s", minVersion) + } + + const numEvents = 100 + c := config.New() + program, err := newEBPFProgram(c) + require.NoError(t, err) + + result := make(map[uint64]int) + callback := func(b []byte) { + // each event is just a uint64 + n := binary.LittleEndian.Uint64(b) + result[n] = +1 + } + + consumer, err := NewConsumer("test", program, callback) + require.NoError(t, err) + consumer.Start() + + err = program.Start() + require.NoError(t, err) + + // generate test events + generator := newEventGenerator(program, t) + for i := 0; i < numEvents; i++ { + generator.Generate(uint64(i)) + } + generator.Stop() + time.Sleep(100 * time.Millisecond) + + // this ensures that any incomplete batch left in eBPF is fully processed + consumer.Sync() + program.Stop(manager.CleanAll) + consumer.Stop() + + // ensure that we have received each event exactly once + for i := 0; i < numEvents; i++ { + actual := result[uint64(i)] + assert.Equalf(t, 1, actual, "eventID=%d should have 1 occurrence. got %d", i, actual) + } +} + +type eventGenerator struct { + // map used for coordinating test with eBPF program space + testMap *ebpf.Map + + // file used for triggering write(2) syscalls + testFile *os.File +} + +func newEventGenerator(program *manager.Manager, t *testing.T) *eventGenerator { + m, _, _ := program.GetMap("test") + require.NotNilf(t, m, "couldn't find test map") + + f, err := os.Create(filepath.Join(t.TempDir(), "foobar")) + require.NoError(t, err) + + return &eventGenerator{ + testMap: m, + testFile: f, + } +} + +func (e *eventGenerator) Generate(eventID uint64) error { + type testCtx struct { + pid uint32 + fd uint64 + eventID uint64 + } + + var ( + fd = uint64(e.testFile.Fd()) + key = uint32(0) + val = testCtx{pid: uint32(os.Getpid()), fd: fd, eventID: eventID} + ) + + // this is done so the eBPF program will echo back an event that is equal to + // eventID once the write syscall is triggered below + err := e.testMap.Put(unsafe.Pointer(&key), unsafe.Pointer(&val)) + if err != nil { + return err + } + + e.testFile.Write([]byte("whatever")) + return nil +} + +func (e *eventGenerator) Stop() { + e.testFile.Close() +} + +func newEBPFProgram(c *config.Config) (*manager.Manager, error) { + bc, err := bytecode.GetReader(c.BPFDir, "usm_events_test-debug.o") + if err != nil { + return nil, err + } + defer bc.Close() + + m := &manager.Manager{ + Probes: []*manager.Probe{ + { + ProbeIdentificationPair: manager.ProbeIdentificationPair{ + EBPFSection: "tracepoint/syscalls/sys_enter_write", + EBPFFuncName: "tracepoint__syscalls__sys_enter_write", + }, + }, + }, + } + options := manager.Options{ + RLimit: &unix.Rlimit{ + Cur: math.MaxUint64, + Max: math.MaxUint64, + }, + ActivatedProbes: []manager.ProbesSelector{ + &manager.ProbeSelector{ + ProbeIdentificationPair: manager.ProbeIdentificationPair{ + EBPFSection: "tracepoint/syscalls/sys_enter_write", + EBPFFuncName: "tracepoint__syscalls__sys_enter_write", + }, + }, + }, + } + + Configure("test", m, &options) + m.InstructionPatcher = func(m *manager.Manager) error { + return bpftelemetry.PatchEBPFTelemetry(m, true, nil) + } + err = m.InitWithOptions(bc, options) + if err != nil { + return nil, err + } + + return m, nil +} diff --git a/pkg/network/protocols/events/iterator.go b/pkg/network/protocols/events/iterator.go new file mode 100644 index 00000000000000..67a326f8905aae --- /dev/null +++ b/pkg/network/protocols/events/iterator.go @@ -0,0 +1,58 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package events + +import "unsafe" + +// iterator provides a small abstraction for walking over the the raw stream of +// bytes represented by the `batch.data` field. +// for example, batch data for an event type of size 4 may look like the +// following: +// +// 0 1 2 3 4 5 +// |aaaa|bbbb|cccc|0000|0000|....| +// 0 4 8 12 16 20 4096 +// +// The purpose of the iterator is to simply return the appropriate chunks of +// data. If we instantiate the iterator with i=1 and j=3, calling Next() +// multiple times will return the following: +// +// Next() => bbbb +// Next() => cccc +// Next() => nil +type iterator struct { + data []byte + b *batch + i, j int // data offsets +} + +// newIterator returns a new `iterator` instance +func newIterator(b *batch, i, j int) *iterator { + data := unsafe.Slice((*byte)(unsafe.Pointer(&b.Data[0])), batchBufferSize) + return &iterator{ + data: data, + b: b, + i: i - 1, + j: j, + } +} + +// Next will advance to the next chunk of data representing an eBPF "event" +// while taking into consideration the bounds of the data. +// In case we run out of bounds `nil` is returned +func (it *iterator) Next() []byte { + it.i++ + + chunkSize := int(it.b.Size) + if it.i >= it.j || it.i > int(it.b.Cap) || (it.i+1)*chunkSize > len(it.b.Data) { + return nil + } + + return it.data[it.i*chunkSize : (it.i+1)*chunkSize] +} diff --git a/pkg/network/protocols/events/types.go b/pkg/network/protocols/events/types.go new file mode 100644 index 00000000000000..7371bc469a1103 --- /dev/null +++ b/pkg/network/protocols/events/types.go @@ -0,0 +1,22 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build ignore +// +build ignore + +package events + +/* +#include "../../ebpf/c/protocols/events-types.h" +*/ +import "C" + +type batch C.batch_data_t +type batchKey C.batch_key_t + +const ( + batchPagesPerCPU = C.BATCH_PAGES_PER_CPU + batchBufferSize = C.BATCH_BUFFER_SIZE +) diff --git a/pkg/network/protocols/events/types_linux.go b/pkg/network/protocols/events/types_linux.go new file mode 100644 index 00000000000000..a1fe7ee3abc906 --- /dev/null +++ b/pkg/network/protocols/events/types_linux.go @@ -0,0 +1,22 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -I ../../ebpf/c -fsigned-char types.go + +package events + +type batch struct { + Idx uint64 + Len uint16 + Cap uint16 + Size uint16 + Data [4096]int8 + Pad_cgo_0 [2]byte +} +type batchKey struct { + Cpu uint32 + Num uint32 +} + +const ( + batchPagesPerCPU = 0x3 + batchBufferSize = 0x1000 +) diff --git a/pkg/network/protocols/events/worker_pool.go b/pkg/network/protocols/events/worker_pool.go new file mode 100644 index 00000000000000..534d5ad393b47a --- /dev/null +++ b/pkg/network/protocols/events/worker_pool.go @@ -0,0 +1,55 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package events + +import ( + "fmt" + "sync" +) + +type workerPool struct { + size int + jobs chan func() + waitGroup sync.WaitGroup + once sync.Once +} + +func newWorkerPool(size int) (*workerPool, error) { + if size <= 0 { + return nil, fmt.Errorf("invalid worker pool size %d", size) + } + + pool := &workerPool{ + size: size, + jobs: make(chan func()), + } + + for i := 0; i < size; i++ { + pool.waitGroup.Add(1) + go func() { + defer pool.waitGroup.Done() + for f := range pool.jobs { + f() + } + }() + } + + return pool, nil +} + +func (wp *workerPool) Do(f func()) { + wp.jobs <- f +} + +func (wp *workerPool) Stop() { + wp.once.Do(func() { + close(wp.jobs) + wp.waitGroup.Wait() + }) +} diff --git a/pkg/network/protocols/grpc/monitor_test.go b/pkg/network/protocols/grpc/monitor_test.go index e63d4228501c44..23a31d32814b50 100644 --- a/pkg/network/protocols/grpc/monitor_test.go +++ b/pkg/network/protocols/grpc/monitor_test.go @@ -49,6 +49,24 @@ func TestGRPCScenarios(t *testing.T) { runClients func(t *testing.T, differentClients bool) expectedEndpoints map[http.Key]int }{ + { + name: "simple unary", + runClients: func(t *testing.T, _ bool) { + var client1 grpc.Client + var err error + client1, err = grpc.NewClient(srvAddr, grpc.Options{}) + require.NoError(t, err) + + ctx := context.Background() + require.NoError(t, client1.HandleUnary(ctx, "first")) + }, + expectedEndpoints: map[http.Key]int{ + http.Key{ + Path: http.Path{Content: "/helloworld.Greeter/SayHello"}, + Method: http.MethodPost, + }: 1, + }, + }, { name: "unary, a->a->a", runClients: func(t *testing.T, differentClients bool) { @@ -467,10 +485,9 @@ func TestGRPCScenarios(t *testing.T) { cfg := config.New() cfg.EnableHTTPMonitoring = true cfg.EnableRuntimeCompiler = true - //cfg.BPFDebug = true for _, tt := range tests { - for _, val := range []bool{false, true} { - testNameSuffix := fmt.Sprintf("different clients - %v", val) + for _, val := range []bool{false} { + testNameSuffix := fmt.Sprintf("-different clients - %v", val) t.Run(tt.name+testNameSuffix, func(t *testing.T) { s, err := grpc.NewServer(srvAddr) require.NoError(t, err) @@ -486,16 +503,11 @@ func TestGRPCScenarios(t *testing.T) { res := make(map[http.Key]int) require.Eventually(t, func() bool { stats := monitor.GetHTTPStats() - if len(stats) > 0 { - fmt.Println(stats) - } for key, stat := range stats { if key.DstPort == 5050 || key.SrcPort == 5050 { count := 0 - for status := range []int{100, 200, 300, 400, 500} { - if stat.HasStats(status) { - count += stat.Stats(status).Count - } + if stat.HasStats(200) { + count += stat.Stats(200).Count } newKey := http.Key{ Path: http.Path{Content: key.Path.Content}, @@ -509,9 +521,6 @@ func TestGRPCScenarios(t *testing.T) { } } - if len(res) > 0 { - fmt.Println(res) - } if len(res) != len(tt.expectedEndpoints) { return false } @@ -527,7 +536,7 @@ func TestGRPCScenarios(t *testing.T) { } return true - }, time.Second*3, time.Millisecond*100, "%v != %v", res, tt.expectedEndpoints) + }, time.Second*5, time.Millisecond*100, "%v != %v", res, tt.expectedEndpoints) }) } } diff --git a/pkg/network/protocols/http/batch_manager.go b/pkg/network/protocols/http/batch_manager.go deleted file mode 100644 index b7503a10645e7b..00000000000000 --- a/pkg/network/protocols/http/batch_manager.go +++ /dev/null @@ -1,127 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build linux_bpf -// +build linux_bpf - -package http - -import ( - "errors" - "unsafe" - - ddebpf "github.com/DataDog/datadog-agent/pkg/ebpf" - - "github.com/cilium/ebpf" -) - -var errLostBatch = errors.New("http batch lost (not consumed fast enough)") - -const maxLookupsPerCPU = 2 - -type usrBatchState struct { - idx, pos int -} - -type batchManager struct { - batchMap *ebpf.Map - stateByCPU []usrBatchState - numCPUs int -} - -func newBatchManager(batchMap *ebpf.Map, numCPUs int) (*batchManager, error) { - batch := new(httpBatch) - stateByCPU := make([]usrBatchState, numCPUs) - - for i := 0; i < numCPUs; i++ { - // Initialize eBPF maps - for j := 0; j < HTTPBatchPages; j++ { - key := &httpBatchKey{Cpu: uint32(i), Num: uint32(j)} - err := batchMap.Put(unsafe.Pointer(key), unsafe.Pointer(batch)) - if err != nil { - return nil, err - } - } - } - - return &batchManager{ - batchMap: batchMap, - stateByCPU: stateByCPU, - numCPUs: numCPUs, - }, nil -} - -func (m *batchManager) GetTransactionsFrom(event *ddebpf.DataEvent) ([]httpTX, error) { - state := &m.stateByCPU[event.CPU] - batch := batchFromEventData(event.Data) - - if int(batch.Idx) < state.idx { - // This means this batch was processed via GetPendingTransactions - return nil, nil - } - - offset := state.pos - state.idx = int(batch.Idx) + 1 - state.pos = 0 - - txns := make([]httpTX, len(batch.Transactions()[offset:])) - tocopy := batch.Transactions()[offset:] - for idx := range tocopy { - txns[idx] = &tocopy[idx] - } - return txns, nil -} - -func (m *batchManager) GetPendingTransactions() []httpTX { - transactions := make([]httpTX, 0, HTTPBatchSize*HTTPBatchPages/2) - for i := 0; i < m.numCPUs; i++ { - for lookup := 0; lookup < maxLookupsPerCPU; lookup++ { - var ( - usrState = &m.stateByCPU[i] - pageNum = usrState.idx % HTTPBatchPages - batchKey = &httpBatchKey{Cpu: uint32(i), Num: uint32(pageNum)} - batch = new(httpBatch) - ) - - err := m.batchMap.Lookup(unsafe.Pointer(batchKey), unsafe.Pointer(batch)) - if err != nil { - break - } - - krnStateIDX := int(batch.Idx) - krnStatePos := int(batch.Pos) - if krnStateIDX != usrState.idx || krnStatePos <= usrState.pos { - break - } - - all := batch.Transactions() - pending := all[usrState.pos:krnStatePos] - for _, tx := range pending { - var newtx = tx - transactions = append(transactions, &newtx) - } - - if krnStatePos == HTTPBatchSize { - // We detected a full batch before the http_notification_t was processed. - // In this case we update the userspace state accordingly and try to - // preemptively read the next batch in order to return as many - // completed HTTP transactions as possible - usrState.idx++ - usrState.pos = 0 - continue - } - - usrState.pos = krnStatePos - // Move on to the next CPU core - break - } - } - - return transactions -} - -func batchFromEventData(data []byte) *httpBatch { - return (*httpBatch)(unsafe.Pointer(&data[0])) -} diff --git a/pkg/network/protocols/http/dump.go b/pkg/network/protocols/http/dump.go index 3d50cc528f0aac..b1f01a3cbfd2a4 100644 --- a/pkg/network/protocols/http/dump.go +++ b/pkg/network/protocols/http/dump.go @@ -32,24 +32,6 @@ func dumpMapsHandler(manager *manager.Manager, mapName string, currentMap *ebpf. output.WriteString(spew.Sdump(key, value)) } - case httpBatchesMap: // maps/http_batches (BPF_MAP_TYPE_HASH), key httpBatchKey, value httpBatch - output.WriteString("Map: '" + mapName + "', key: 'httpBatchKey', value: 'httpBatch'\n") - iter := currentMap.Iterate() - var key httpBatchKey - var value httpBatch - for iter.Next(unsafe.Pointer(&key), unsafe.Pointer(&value)) { - output.WriteString(spew.Sdump(key, value)) - } - - case httpBatchStateMap: // maps/http_batch_state (BPF_MAP_TYPE_HASH), key C.__u32, value C.http_batch_state_t - output.WriteString("Map: '" + mapName + "', key: 'C.__u32', value: 'C.http_batch_state_t'\n") - iter := currentMap.Iterate() - var key uint32 - var value httpBatchState - for iter.Next(unsafe.Pointer(&key), unsafe.Pointer(&value)) { - output.WriteString(spew.Sdump(key, value)) - } - case sslSockByCtxMap: // maps/ssl_sock_by_ctx (BPF_MAP_TYPE_HASH), key uintptr // C.void *, value C.ssl_sock_t output.WriteString("Map: '" + mapName + "', key: 'uintptr // C.void *', value: 'C.ssl_sock_t'\n") iter := currentMap.Iterate() diff --git a/pkg/network/protocols/http/ebpf_gotls.go b/pkg/network/protocols/http/ebpf_gotls.go index 716c2793d76c0f..17b5d5a9e365a5 100644 --- a/pkg/network/protocols/http/ebpf_gotls.go +++ b/pkg/network/protocols/http/ebpf_gotls.go @@ -21,7 +21,6 @@ import ( "time" "github.com/cilium/ebpf" - "github.com/vishvananda/netlink" "golang.org/x/sys/unix" "github.com/DataDog/datadog-agent/pkg/network/config" @@ -30,7 +29,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/network/protocols/http/gotls" "github.com/DataDog/datadog-agent/pkg/network/protocols/http/gotls/lookup" errtelemetry "github.com/DataDog/datadog-agent/pkg/network/telemetry" - "github.com/DataDog/datadog-agent/pkg/process/util" + "github.com/DataDog/datadog-agent/pkg/process/monitor" "github.com/DataDog/datadog-agent/pkg/util/log" manager "github.com/DataDog/ebpf-manager" ) @@ -131,9 +130,8 @@ type GoTLSProgram struct { // Process monitor channels procMonitor struct { - done chan struct{} - events chan netlink.ProcEvent - errors chan error + cleanupExec func() + cleanupExit func() } lock sync.RWMutex @@ -182,20 +180,12 @@ func newGoTLSProgram(c *config.Config) *GoTLSProgram { processes: make(map[pid]binaryID), } - p.procMonitor.done = make(chan struct{}) - p.procMonitor.events = make(chan netlink.ProcEvent, 1000) - p.procMonitor.errors = make(chan error, 1) - p.binAnalysisMetric = errtelemetry.NewMetric("gotls.analysis_time", errtelemetry.OptStatsd) return p } func (p *GoTLSProgram) ConfigureManager(m *errtelemetry.Manager) { - if p == nil { - return - } - p.manager = m p.manager.Maps = append(p.manager.Maps, []*manager.Map{ {Name: offsetsDataMap}, @@ -205,9 +195,10 @@ func (p *GoTLSProgram) ConfigureManager(m *errtelemetry.Manager) { // Hooks will be added in runtime for each binary } -func (p *GoTLSProgram) ConfigureOptions(options *manager.Options) {} +func (p *GoTLSProgram) ConfigureOptions(_ *manager.Options) {} -func (p *GoTLSProgram) GetAllUndefinedProbes() (probeList []manager.ProbeIdentificationPair) { +func (*GoTLSProgram) GetAllUndefinedProbes() []manager.ProbeIdentificationPair { + probeList := make([]manager.ProbeIdentificationPair, 0) for _, probeInfo := range functionToProbes { if probeInfo.functionInfo != nil { probeList = append(probeList, probeInfo.functionInfo.getIdentificationPair()) @@ -218,14 +209,10 @@ func (p *GoTLSProgram) GetAllUndefinedProbes() (probeList []manager.ProbeIdentif } } - return + return probeList } func (p *GoTLSProgram) Start() { - if p == nil { - return - } - var err error p.offsetsDataMap, _, err = p.manager.GetMap(offsetsDataMap) if err != nil { @@ -233,74 +220,38 @@ func (p *GoTLSProgram) Start() { return } - if err := netlink.ProcEventMonitor(p.procMonitor.events, p.procMonitor.done, p.procMonitor.errors); err != nil { - log.Errorf("could not create process monitor: %s", err) + mon := monitor.GetProcessMonitor() + p.procMonitor.cleanupExec, err = mon.Subscribe(&monitor.ProcessCallback{ + Event: monitor.EXEC, + Metadata: monitor.ANY, + Callback: p.handleProcessStart, + }) + if err != nil { + log.Errorf("failed to subscribe Exec process monitor error: %s", err) return } - - // This channel is used by the process watcher goroutine (just below) to - // wait until we finished scanning for already running Go processes. - // This is needed to avoid a race condition where an exit event is - // processed during the registration of an already running process, - // which would make the possible impossible to unregister afterwards, - // causing a memory leak. - startDone := make(chan interface{}) - - // Process watcher events handling goroutine - go func() { - // Wait for the scanning of already running processes to complete - <-startDone - - for { - select { - case <-p.procMonitor.done: - return - - case event, ok := <-p.procMonitor.events: - if !ok { - return - } - - switch ev := event.Msg.(type) { - case *netlink.ExecProcEvent: - p.handleProcessStart(ev.ProcessPid) - case *netlink.ExitProcEvent: - p.handleProcessStop(ev.ProcessPid) - - // No default case; the watcher has a - // lot of event types, some of which - // (e.g fork) happen all the time even - // on an idle machine. Logging those - // would flood our logs. - } - - case err, ok := <-p.procMonitor.errors: - if !ok { - return - } - - log.Errorf("process watcher error: %s", err) - } - } - }() - - // Scan already running processes. We allow the process watcher to - // process events afterwards. - go func() { - _ = util.WithAllProcs(p.procRoot, func(pid int) error { - p.handleProcessStart(uint32(pid)) - return nil - }) - close(startDone) - }() + p.procMonitor.cleanupExit, err = mon.Subscribe(&monitor.ProcessCallback{ + Event: monitor.EXIT, + Metadata: monitor.ANY, + Callback: p.handleProcessStop, + }) + if err != nil { + log.Errorf("failed to subscribe Exit process monitor error: %s", err) + goto failed + } + return +failed: + if p.procMonitor.cleanupExec != nil { + p.procMonitor.cleanupExec() + } + if p.procMonitor.cleanupExit != nil { + p.procMonitor.cleanupExit() + } } func (p *GoTLSProgram) Stop() { - if p == nil { - return - } - - close(p.procMonitor.done) + p.procMonitor.cleanupExec() + p.procMonitor.cleanupExit() } func (p *GoTLSProgram) handleProcessStart(pid pid) { diff --git a/pkg/network/protocols/http/ebpf_main.go b/pkg/network/protocols/http/ebpf_main.go index 29054c56b33fb5..485f690426efc0 100644 --- a/pkg/network/protocols/http/ebpf_main.go +++ b/pkg/network/protocols/http/ebpf_main.go @@ -11,11 +11,9 @@ package http import ( "fmt" "math" - "os" "unsafe" "github.com/cilium/ebpf" - "github.com/iovisor/gobpf/pkg/cpupossible" "golang.org/x/sys/unix" manager "github.com/DataDog/ebpf-manager" @@ -25,16 +23,14 @@ import ( "github.com/DataDog/datadog-agent/pkg/network/config" netebpf "github.com/DataDog/datadog-agent/pkg/network/ebpf" "github.com/DataDog/datadog-agent/pkg/network/ebpf/probes" + "github.com/DataDog/datadog-agent/pkg/network/protocols/events" errtelemetry "github.com/DataDog/datadog-agent/pkg/network/telemetry" "github.com/DataDog/datadog-agent/pkg/util/log" ) const ( - httpInFlightMap = "http_in_flight" - http2InFlightMap = "http2_in_flight" - httpBatchesMap = "http_batches" - httpBatchStateMap = "http_batch_state" - httpBatchEvents = "http_batch_events" + httpInFlightMap = "http_in_flight" + http2InFlightMap = "http2_in_flight" // ELF section of the BPF_PROG_TYPE_SOCKET_FILTER program used // to classify protocols and dispatch the correct handlers. @@ -50,29 +46,22 @@ const ( // enough for typical workloads (e.g. some amount of processes blocked on // the accept syscall). maxActive = 128 - - // size of the channel containing completed http_notification_objects - batchNotificationsChanSize = 100 - - probeUID = "http" + probeUID = "http" ) type ebpfProgram struct { *errtelemetry.Manager - cfg *config.Config - bytecode bytecode.AssetReader - offsets []manager.ConstantEditor - subprograms []subprogram - mapCleaner *ddebpf.MapCleaner - mapCleaner2 *ddebpf.MapCleaner - - batchCompletionHandler *ddebpf.PerfHandler + cfg *config.Config + bytecode bytecode.AssetReader + offsets []manager.ConstantEditor + subprograms []subprogram + probesResolvers []probeResolver + mapCleaner *ddebpf.MapCleaner + mapCleaner2 *ddebpf.MapCleaner } -type subprogram interface { - ConfigureManager(*errtelemetry.Manager) - ConfigureOptions(*manager.Options) - +type probeResolver interface { + // GetAllUndefinedProbes returns all undefined probes. // Subprogram probes maybe defined in the same ELF file as the probes // of the main program. The cilium loader loads all programs defined // in an ELF file in to the kernel. Therefore, these programs may be @@ -95,6 +84,11 @@ type subprogram interface { // To reiterate, this is necessary due to the fact that the cilium loader loads // all programs defined in an ELF file regardless if they are later attached or not. GetAllUndefinedProbes() []manager.ProbeIdentificationPair +} + +type subprogram interface { + ConfigureManager(*errtelemetry.Manager) + ConfigureOptions(*manager.Options) Start() Stop() } @@ -124,13 +118,10 @@ func newEBPFProgram(c *config.Config, offsets []manager.ConstantEditor, sockFD * return nil, err } - batchCompletionHandler := ddebpf.NewPerfHandler(batchNotificationsChanSize) mgr := &manager.Manager{ Maps: []*manager.Map{ {Name: httpInFlightMap}, {Name: http2InFlightMap}, - {Name: httpBatchesMap}, - {Name: httpBatchStateMap}, {Name: sslSockByCtxMap}, {Name: protocolDispatcherProgramsMap}, {Name: "ssl_read_args"}, @@ -140,18 +131,6 @@ func newEBPFProgram(c *config.Config, offsets []manager.ConstantEditor, sockFD * {Name: "http2_static_table"}, {Name: "http2_dynamic_table"}, }, - PerfMaps: []*manager.PerfMap{ - { - Map: manager.Map{Name: httpBatchEvents}, - PerfMapOptions: manager.PerfMapOptions{ - PerfRingBufferSize: 256 * os.Getpagesize(), - Watermark: 1, - RecordHandler: batchCompletionHandler.RecordHandler, - LostHandler: batchCompletionHandler.LostHandler, - RecordGetter: batchCompletionHandler.RecordGetter, - }, - }, - }, Probes: []*manager.Probe{ { ProbeIdentificationPair: manager.ProbeIdentificationPair{ @@ -178,21 +157,27 @@ func newEBPFProgram(c *config.Config, offsets []manager.ConstantEditor, sockFD * }, } - // Add the subprograms even if nil, so that the manager can get the - // undefined probes from them when they are not enabled. Subprograms - // functions do checks for nil before doing anything. - ebpfSubprograms := []subprogram{ - newGoTLSProgram(c), - newSSLProgram(c, sockFD), + subprogramProbesResolvers := make([]probeResolver, 0, 2) + subprograms := make([]subprogram, 0, 2) + + goTLSProg := newGoTLSProgram(c) + subprogramProbesResolvers = append(subprogramProbesResolvers, goTLSProg) + if goTLSProg != nil { + subprograms = append(subprograms, goTLSProg) + } + openSSLProg := newSSLProgram(c, sockFD) + subprogramProbesResolvers = append(subprogramProbesResolvers, openSSLProg) + if openSSLProg != nil { + subprograms = append(subprograms, openSSLProg) } program := &ebpfProgram{ - Manager: errtelemetry.NewManager(mgr, bpfTelemetry), - bytecode: bc, - cfg: c, - offsets: offsets, - batchCompletionHandler: batchCompletionHandler, - subprograms: ebpfSubprograms, + Manager: errtelemetry.NewManager(mgr, bpfTelemetry), + bytecode: bc, + cfg: c, + offsets: offsets, + subprograms: subprograms, + probesResolvers: subprogramProbesResolvers, } return program, nil @@ -206,7 +191,8 @@ func (e *ebpfProgram) Init() error { for _, tc := range tailCalls { undefinedProbes = append(undefinedProbes, tc.ProbeIdentificationPair) } - for _, s := range e.subprograms { + + for _, s := range e.probesResolvers { undefinedProbes = append(undefinedProbes, s.GetAllUndefinedProbes()...) } @@ -218,11 +204,6 @@ func (e *ebpfProgram) Init() error { s.ConfigureManager(e.Manager) } - onlineCPUs, err := cpupossible.Get() - if err != nil { - return fmt.Errorf("couldn't determine number of CPUs: %w", err) - } - kprobeAttachMethod := manager.AttachKprobeWithPerfEventOpen if e.cfg.AttachKprobesWithKprobeEventsABI { kprobeAttachMethod = manager.AttachKprobeWithPerfEventOpen @@ -244,11 +225,6 @@ func (e *ebpfProgram) Init() error { MaxEntries: uint32(e.cfg.MaxTrackedConnections), EditorFlag: manager.EditMaxEntries, }, - httpBatchesMap: { - Type: ebpf.Hash, - MaxEntries: uint32(len(onlineCPUs) * HTTPBatchPages), - EditorFlag: manager.EditMaxEntries, - }, }, TailCallRouter: tailCalls, ActivatedProbes: []manager.ProbesSelector{ @@ -290,7 +266,10 @@ func (e *ebpfProgram) Init() error { s.ConfigureOptions(&options) } - err = e.InitWithOptions(e.bytecode, options) + // configure event stream + events.Configure("http", e.Manager.Manager, &options) + + err := e.InitWithOptions(e.bytecode, options) if err != nil { return err } @@ -299,85 +278,85 @@ func (e *ebpfProgram) Init() error { if err == nil { type staticTableEntry struct { Index uint64 - Value netebpf.StaticTableValue + Value StaticTableValue } staticTableEntries := []staticTableEntry{ { Index: 2, - Value: netebpf.StaticTableValue{ - Key: netebpf.MethodKey, - Value: netebpf.GetValue, + Value: StaticTableValue{ + Key: MethodKey, + Value: GetValue, }, }, { Index: 3, - Value: netebpf.StaticTableValue{ - Key: netebpf.MethodKey, - Value: netebpf.PostValue, + Value: StaticTableValue{ + Key: MethodKey, + Value: PostValue, }, }, { Index: 4, - Value: netebpf.StaticTableValue{ - Key: netebpf.PathKey, - Value: netebpf.EmptyPathValue, + Value: StaticTableValue{ + Key: PathKey, + Value: EmptyPathValue, }, }, { Index: 5, - Value: netebpf.StaticTableValue{ - Key: netebpf.PathKey, - Value: netebpf.IndexPathValue, + Value: StaticTableValue{ + Key: PathKey, + Value: IndexPathValue, }, }, { Index: 8, - Value: netebpf.StaticTableValue{ - Key: netebpf.StatusKey, - Value: netebpf.K200Value, + Value: StaticTableValue{ + Key: StatusKey, + Value: K200Value, }, }, { Index: 9, - Value: netebpf.StaticTableValue{ - Key: netebpf.StatusKey, - Value: netebpf.K204Value, + Value: StaticTableValue{ + Key: StatusKey, + Value: K204Value, }, }, { Index: 10, - Value: netebpf.StaticTableValue{ - Key: netebpf.StatusKey, - Value: netebpf.K206Value, + Value: StaticTableValue{ + Key: StatusKey, + Value: K206Value, }, }, { Index: 11, - Value: netebpf.StaticTableValue{ - Key: netebpf.StatusKey, - Value: netebpf.K304Value, + Value: StaticTableValue{ + Key: StatusKey, + Value: K304Value, }, }, { Index: 12, - Value: netebpf.StaticTableValue{ - Key: netebpf.StatusKey, - Value: netebpf.K400Value, + Value: StaticTableValue{ + Key: StatusKey, + Value: K400Value, }, }, { Index: 13, - Value: netebpf.StaticTableValue{ - Key: netebpf.StatusKey, - Value: netebpf.K404Value, + Value: StaticTableValue{ + Key: StatusKey, + Value: K404Value, }, }, { Index: 14, - Value: netebpf.StaticTableValue{ - Key: netebpf.StatusKey, - Value: netebpf.K500Value, + Value: StaticTableValue{ + Key: StatusKey, + Value: K500Value, }, }, } @@ -413,7 +392,6 @@ func (e *ebpfProgram) Start() error { func (e *ebpfProgram) Close() error { e.mapCleaner.Stop() err := e.Stop(manager.CleanAll) - e.batchCompletionHandler.Stop() for _, s := range e.subprograms { s.Stop() } diff --git a/pkg/network/protocols/http/ebpf_ssl.go b/pkg/network/protocols/http/ebpf_ssl.go index 87c53382d094fa..dda6aad6b685e4 100644 --- a/pkg/network/protocols/http/ebpf_ssl.go +++ b/pkg/network/protocols/http/ebpf_ssl.go @@ -253,14 +253,11 @@ func newSSLProgram(c *config.Config, sockFDMap *ebpf.Map) *sslProgram { return &sslProgram{ cfg: c, sockFDMap: sockFDMap, - perfHandler: ddebpf.NewPerfHandler(batchNotificationsChanSize), + perfHandler: ddebpf.NewPerfHandler(100), } } func (o *sslProgram) ConfigureManager(m *errtelemetry.Manager) { - if o == nil { - return - } o.manager = m @@ -294,9 +291,6 @@ func (o *sslProgram) ConfigureManager(m *errtelemetry.Manager) { } func (o *sslProgram) ConfigureOptions(options *manager.Options) { - if o == nil { - return - } options.MapSpecEditors[sslSockByCtxMap] = manager.MapSpecEditor{ Type: ebpf.Hash, @@ -328,10 +322,6 @@ func (o *sslProgram) ConfigureOptions(options *manager.Options) { } func (o *sslProgram) Start() { - if o == nil { - return - } - // Setup shared library watcher and configure the appropriate callbacks o.watcher = newSOWatcher(o.cfg.ProcRoot, o.perfHandler, soRule{ @@ -355,10 +345,6 @@ func (o *sslProgram) Start() { } func (o *sslProgram) Stop() { - if o == nil { - return - } - o.perfHandler.Stop() } @@ -441,7 +427,7 @@ func getUID(libPath string) string { return libPath } -func (o *sslProgram) GetAllUndefinedProbes() []manager.ProbeIdentificationPair { +func (*sslProgram) GetAllUndefinedProbes() []manager.ProbeIdentificationPair { var probeList []manager.ProbeIdentificationPair for _, sslProbeList := range [][]manager.ProbesSelector{openSSLProbes, cryptoProbes, gnuTLSProbes} { diff --git a/pkg/network/protocols/http/etw_http_service.go b/pkg/network/protocols/http/etw_http_service.go index 7e735f7f1281a0..f455f11d4a7050 100644 --- a/pkg/network/protocols/http/etw_http_service.go +++ b/pkg/network/protocols/http/etw_http_service.go @@ -486,7 +486,7 @@ func httpCallbackOnHTTPConnectionTraceTaskConnConn(eventInfo *etw.DDEtwEventInfo connOpen.conn.tup.Family = binary.LittleEndian.Uint16(userData[12:14]) connOpen.conn.tup.SrvPort = binary.BigEndian.Uint16(userData[14:16]) copy(connOpen.conn.tup.SrvAddr[:], userData[20:36]) - connOpen.conn.tup.CliPort = binary.BigEndian.Uint16(userData[36:48]) + connOpen.conn.tup.CliPort = binary.BigEndian.Uint16(userData[46:48]) copy(connOpen.conn.tup.CliAddr[:], userData[52:68]) } @@ -682,7 +682,7 @@ func httpCallbackOnHTTPRequestTraceTaskParse(eventInfo *etw.DDEtwEventInfo) { // whole thing httpConnLink.http.RequestFragment = make([]byte, maxRequestFragmentBytes) httpConnLink.http.Txn.MaxRequestFragment = uint16(maxRequestFragmentBytes) - httpConnLink.http.RequestFragment[0] = 32 + httpConnLink.http.RequestFragment[0] = 32 // this is a leading space. // copy rest of arguments copy(httpConnLink.http.RequestFragment[1:], urlParsed.Path) @@ -1293,6 +1293,7 @@ func SetMaxRequestBytes(maxRequestBytes uint64) { } func SetEnabledProtocols(http, https bool) { + captureHTTP = http captureHTTPS = https } func (hei *httpEtwInterface) OnStart() { diff --git a/pkg/network/protocols/http/http_statkeeper.go b/pkg/network/protocols/http/http_statkeeper.go index 94eb4d2b875174..62ac09fbfd7f63 100644 --- a/pkg/network/protocols/http/http_statkeeper.go +++ b/pkg/network/protocols/http/http_statkeeper.go @@ -10,6 +10,7 @@ package http import ( "strconv" + "sync" "time" "github.com/DataDog/datadog-agent/pkg/network/config" @@ -18,6 +19,7 @@ import ( ) type httpStatKeeper struct { + mux sync.Mutex stats map[Key]*RequestStats incomplete *incompleteBuffer maxEntries int @@ -50,19 +52,22 @@ func newHTTPStatkeeper(c *config.Config, telemetry *telemetry) *httpStatKeeper { } } -func (h *httpStatKeeper) Process(transactions []httpTX) { - for i := range transactions { - tx := transactions[i] - if tx.Incomplete() { - h.incomplete.Add(tx) - continue - } +func (h *httpStatKeeper) Process(tx httpTX) { + h.mux.Lock() + defer h.mux.Unlock() - h.add(tx) + if tx.Incomplete() { + h.incomplete.Add(tx) + return } + + h.add(tx) } func (h *httpStatKeeper) GetAndResetAllStats() map[Key]*RequestStats { + h.mux.Lock() + defer h.mux.Unlock() + for _, tx := range h.incomplete.Flush(time.Now()) { h.add(tx) } diff --git a/pkg/network/protocols/http/http_statkeeper_test.go b/pkg/network/protocols/http/http_statkeeper_test.go index cf444cd2026995..d6296afd17a2cd 100644 --- a/pkg/network/protocols/http/http_statkeeper_test.go +++ b/pkg/network/protocols/http/http_statkeeper_test.go @@ -27,7 +27,6 @@ func TestProcessHTTPTransactions(t *testing.T) { tel, err := newTelemetry() require.NoError(t, err) sk := newHTTPStatkeeper(cfg, tel) - txs := make([]httpTX, 100) srcString := "1.1.1.1" dstString := "2.2.2.2" @@ -43,12 +42,11 @@ func TestProcessHTTPTransactions(t *testing.T) { for j := 0; j < 10; j++ { statusCode := (j%5 + 1) * 100 latency := time.Duration(j%5+1) * time.Millisecond - txs[i*10+j] = generateIPv4HTTPTransaction(sourceIP, destIP, sourcePort, destPort, path, statusCode, latency) + tx := generateIPv4HTTPTransaction(sourceIP, destIP, sourcePort, destPort, path, statusCode, latency) + sk.Process(tx) } } - sk.Process(txs) - stats := sk.GetAndResetAllStats() assert.Equal(t, 0, len(sk.stats)) assert.Equal(t, numPaths, len(stats)) @@ -85,12 +83,11 @@ func BenchmarkProcessSameConn(b *testing.B) { 404, 30*time.Millisecond, ) - transactions := []httpTX{tx} b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - sk.Process(transactions) + sk.Process(tx) } } @@ -126,7 +123,9 @@ func TestPathProcessing(t *testing.T) { generateIPv4HTTPTransaction(sourceIP, destIP, sourcePort, destPort, "/foobar", statusCode, latency), generateIPv4HTTPTransaction(sourceIP, destIP, sourcePort, destPort, "/payment/123", statusCode, latency), } - sk.Process(transactions) + for _, tx := range transactions { + sk.Process(tx) + } stats := sk.GetAndResetAllStats() require.Len(t, stats, 1) @@ -149,7 +148,9 @@ func TestPathProcessing(t *testing.T) { generateIPv4HTTPTransaction(sourceIP, destIP, sourcePort, destPort, "/prefix/users/2", statusCode, latency), generateIPv4HTTPTransaction(sourceIP, destIP, sourcePort, destPort, "/prefix/users/3", statusCode, latency), } - sk.Process(transactions) + for _, tx := range transactions { + sk.Process(tx) + } stats := sk.GetAndResetAllStats() require.Len(t, stats, 1) @@ -178,7 +179,9 @@ func TestPathProcessing(t *testing.T) { generateIPv4HTTPTransaction(sourceIP, destIP, sourcePort, destPort, "/users/ana/payment/123", statusCode, latency), generateIPv4HTTPTransaction(sourceIP, destIP, sourcePort, destPort, "/users/bob/payment/456", statusCode, latency), } - sk.Process(transactions) + for _, tx := range transactions { + sk.Process(tx) + } stats := sk.GetAndResetAllStats() require.Len(t, stats, 1) @@ -208,9 +211,8 @@ func TestHTTPCorrectness(t *testing.T) { 404, 30*time.Millisecond, ) - transactions := []httpTX{tx} - sk.Process(transactions) + sk.Process(tx) tel.log() require.Equal(t, int64(1), tel.malformed.Get()) @@ -235,9 +237,8 @@ func TestHTTPCorrectness(t *testing.T) { 30*time.Millisecond, ) tx.SetRequestMethod(0) /* This is MethodUnknown */ - transactions := []httpTX{tx} - sk.Process(transactions) + sk.Process(tx) tel.log() require.Equal(t, int64(1), tel.malformed.Get()) @@ -261,9 +262,8 @@ func TestHTTPCorrectness(t *testing.T) { 404, 0, ) - transactions := []httpTX{tx} - sk.Process(transactions) + sk.Process(tx) tel.log() require.Equal(t, int64(1), tel.malformed.Get()) diff --git a/pkg/network/protocols/http/http_types.go b/pkg/network/protocols/http/http_types.go index d5a21db466c455..ba697b0e2345b2 100644 --- a/pkg/network/protocols/http/http_types.go +++ b/pkg/network/protocols/http/http_types.go @@ -13,33 +13,34 @@ package http #include "../../ebpf/c/protocols/tags-types.h" #include "../../ebpf/c/protocols/http-types.h" #include "../../ebpf/c/protocols/protocol-classification-defs.h" +#include "../../ebpf/c/protocols/http2-decoding-defs.h" */ import "C" type httpConnTuple C.conn_tuple_t -type httpBatchState C.http_batch_state_t type sslSock C.ssl_sock_t type sslReadArgs C.ssl_read_args_t type ebpfHttpTx C.http_transaction_t -type httpBatch C.http_batch_t -type httpBatchKey C.http_batch_key_t type libPath C.lib_path_t type ProtocolType C.protocol_t +// Add tests to TestProtocolValue const ( - ProtocolUnknown ProtocolType = C.PROTOCOL_UNKNOWN - ProtocolHTTP ProtocolType = C.PROTOCOL_HTTP - ProtocolHTTP2 ProtocolType = C.PROTOCOL_HTTP2 - ProtocolTLS ProtocolType = C.PROTOCOL_TLS - ProtocolMax ProtocolType = C.MAX_PROTOCOLS + ProtocolUnknown ProtocolType = C.PROTOCOL_UNKNOWN + ProtocolHTTP ProtocolType = C.PROTOCOL_HTTP + ProtocolHTTP2 ProtocolType = C.PROTOCOL_HTTP2 + ProtocolTLS ProtocolType = C.PROTOCOL_TLS + ProtocolMONGO ProtocolType = C.PROTOCOL_MONGO + ProtocolPostgres ProtocolType = C.PROTOCOL_POSTGRES + ProtocolAMQP ProtocolType = C.PROTOCOL_AMQP + ProtocolRedis ProtocolType = C.PROTOCOL_REDIS + ProtocolMax ProtocolType = C.MAX_PROTOCOLS ) const ( - HTTPBatchSize = C.HTTP_BATCH_SIZE - HTTPBatchPages = C.HTTP_BATCH_PAGES HTTPBufferSize = C.HTTP_BUFFER_SIZE libPathMaxSize = C.LIB_PATH_MAX_SIZE @@ -60,3 +61,29 @@ var ( Go: "tls.library:go", } ) + +type StaticTableEnumKey = C.static_table_key_t + +const ( + MethodKey StaticTableEnumKey = C.kMethod + PathKey StaticTableEnumKey = C.kPath + StatusKey StaticTableEnumKey = C.kStatus +) + +type StaticTableEnumValue = C.static_table_key_t + +const ( + GetValue StaticTableEnumValue = C.kGET + PostValue StaticTableEnumValue = C.kPOST + EmptyPathValue StaticTableEnumValue = C.kEmptyPath + IndexPathValue StaticTableEnumValue = C.kIndexPath + K200Value StaticTableEnumValue = C.k200 + K204Value StaticTableEnumValue = C.k204 + K206Value StaticTableEnumValue = C.k206 + K304Value StaticTableEnumValue = C.k304 + K400Value StaticTableEnumValue = C.k400 + K404Value StaticTableEnumValue = C.k404 + K500Value StaticTableEnumValue = C.k500 +) + +type StaticTableValue = C.static_table_entry_t diff --git a/pkg/network/protocols/http/http_types_linux.go b/pkg/network/protocols/http/http_types_linux.go index 07755fea139d17..3ea024c14184e7 100644 --- a/pkg/network/protocols/http/http_types_linux.go +++ b/pkg/network/protocols/http/http_types_linux.go @@ -14,10 +14,6 @@ type httpConnTuple struct { Pid uint32 Metadata uint32 } -type httpBatchState struct { - Idx uint64 - To_flush uint64 -} type sslSock struct { Tup httpConnTuple Fd uint32 @@ -39,15 +35,6 @@ type ebpfHttpTx struct { Tcp_seq uint32 Tags uint64 } -type httpBatch struct { - Idx uint64 - Pos uint8 - Txs [15]ebpfHttpTx -} -type httpBatchKey struct { - Cpu uint32 - Num uint32 -} type libPath struct { Pid uint32 @@ -58,16 +45,18 @@ type libPath struct { type ProtocolType uint8 const ( - ProtocolUnknown ProtocolType = 0x1 - ProtocolHTTP ProtocolType = 0x2 - ProtocolHTTP2 ProtocolType = 0x3 - ProtocolTLS ProtocolType = 0x4 - ProtocolMax ProtocolType = 0x5 + ProtocolUnknown ProtocolType = 0x1 + ProtocolHTTP ProtocolType = 0x2 + ProtocolHTTP2 ProtocolType = 0x3 + ProtocolTLS ProtocolType = 0x4 + ProtocolMONGO ProtocolType = 0x6 + ProtocolPostgres ProtocolType = 0x7 + ProtocolAMQP ProtocolType = 0x8 + ProtocolRedis ProtocolType = 0x9 + ProtocolMax ProtocolType = 0xa ) const ( - HTTPBatchSize = 0xf - HTTPBatchPages = 0x3 HTTPBufferSize = 0xa0 libPathMaxSize = 0x78 @@ -88,3 +77,32 @@ var ( Go: "tls.library:go", } ) + +type StaticTableEnumKey = uint8 + +const ( + MethodKey StaticTableEnumKey = 0x2 + PathKey StaticTableEnumKey = 0x4 + StatusKey StaticTableEnumKey = 0x9 +) + +type StaticTableEnumValue = uint8 + +const ( + GetValue StaticTableEnumValue = 0x2 + PostValue StaticTableEnumValue = 0x3 + EmptyPathValue StaticTableEnumValue = 0x4 + IndexPathValue StaticTableEnumValue = 0x5 + K200Value StaticTableEnumValue = 0x8 + K204Value StaticTableEnumValue = 0x9 + K206Value StaticTableEnumValue = 0xa + K304Value StaticTableEnumValue = 0xb + K400Value StaticTableEnumValue = 0xc + K404Value StaticTableEnumValue = 0xd + K500Value StaticTableEnumValue = 0xe +) + +type StaticTableValue = struct { + Key uint8 + Value uint8 +} diff --git a/pkg/network/protocols/http/model_linux.go b/pkg/network/protocols/http/model_linux.go index acdb7f0e71f9dd..eaebc1ce8b64ad 100644 --- a/pkg/network/protocols/http/model_linux.go +++ b/pkg/network/protocols/http/model_linux.go @@ -158,11 +158,6 @@ func (tx *ebpfHttpTx) String() string { return output.String() } -// Transactions returns the slice of HTTP transactions embedded in the batch -func (batch *httpBatch) Transactions() []ebpfHttpTx { - return batch.Txs[:] -} - // below is copied from pkg/trace/stats/statsraw.go // 10 bits precision (any value will be +/- 1/1024) const roundMask uint64 = 1 << 10 diff --git a/pkg/network/protocols/http/model_windows.go b/pkg/network/protocols/http/model_windows.go index 5debdb3c3ac5b3..ff31bca855ff52 100644 --- a/pkg/network/protocols/http/model_windows.go +++ b/pkg/network/protocols/http/model_windows.go @@ -12,8 +12,6 @@ import ( "bytes" "encoding/binary" - //"encoding/hex" - "errors" "fmt" "strconv" "strings" @@ -23,9 +21,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/network/driver" ) -// errLostBatch isn't a valid error in windows -var errLostBatch = errors.New("invalid error") - // StatusClass returns an integer representing the status code class // Example: a 404 would return 400 func statusClass(statusCode uint16) int { @@ -183,7 +178,7 @@ func (tx *WinHttpTransaction) Path(buffer []byte) ([]byte, bool) { } n := copy(buffer, b[:j]) // indicate if we knowingly captured the entire path - fullPath := n < len(b) + fullPath := n <= len(b) return buffer[:n], fullPath } diff --git a/pkg/network/protocols/http/monitor.go b/pkg/network/protocols/http/monitor.go index dd571c6e3e94a7..872d078c67fb57 100644 --- a/pkg/network/protocols/http/monitor.go +++ b/pkg/network/protocols/http/monitor.go @@ -11,39 +11,32 @@ package http import ( "errors" "fmt" - "sync" + "unsafe" "github.com/cilium/ebpf" manager "github.com/DataDog/ebpf-manager" - ddebpf "github.com/DataDog/datadog-agent/pkg/ebpf" "github.com/DataDog/datadog-agent/pkg/network/config" filterpkg "github.com/DataDog/datadog-agent/pkg/network/filter" + "github.com/DataDog/datadog-agent/pkg/network/protocols/events" errtelemetry "github.com/DataDog/datadog-agent/pkg/network/telemetry" + "github.com/DataDog/datadog-agent/pkg/process/monitor" ) // Monitor is responsible for: // * Creating a raw socket and attaching an eBPF filter to it; -// * Polling a perf buffer that contains notifications about HTTP transaction batches ready to be read; -// * Querying these batches by doing a map lookup; +// * Consuming HTTP transaction "events" that are sent from Kernel space; // * Aggregating and emitting metrics based on the received HTTP transactions; type Monitor struct { - handler func([]httpTX) - - ebpfProgram *ebpfProgram - batchManager *batchManager - batchCompletionHandler *ddebpf.PerfHandler - telemetry *telemetry - - pollRequests chan chan map[Key]*RequestStats - statkeeper *httpStatKeeper + consumer *events.Consumer + ebpfProgram *ebpfProgram + telemetry *telemetry + statkeeper *httpStatKeeper + processMonitor *monitor.ProcessMonitor // termination - mux sync.Mutex - eventLoopWG sync.WaitGroup closeFilterFn func() - stopped bool } // NewMonitor returns a new Monitor instance @@ -79,43 +72,21 @@ func NewMonitor(c *config.Config, offsets []manager.ConstantEditor, sockFD *ebpf return nil, fmt.Errorf("error enabling HTTP traffic inspection: %s", err) } - batchMap, _, err := mgr.GetMap(httpBatchesMap) - if err != nil { - closeFilterFn() - return nil, err - } - - batchEventsMap, _, _ := mgr.GetMap(httpBatchEvents) - numCPUs := int(batchEventsMap.MaxEntries()) - telemetry, err := newTelemetry() if err != nil { closeFilterFn() return nil, err } - statkeeper := newHTTPStatkeeper(c, telemetry) - - handler := func(transactions []httpTX) { - if statkeeper != nil { - statkeeper.Process(transactions) - } - } - batchManager, err := newBatchManager(batchMap, numCPUs) - if err != nil { - closeFilterFn() - return nil, fmt.Errorf("couldn't instantiate batch manager: %w", err) - } + statkeeper := newHTTPStatkeeper(c, telemetry) + processMonitor := monitor.GetProcessMonitor() return &Monitor{ - handler: handler, - ebpfProgram: mgr, - batchManager: batchManager, - batchCompletionHandler: mgr.batchCompletionHandler, - telemetry: telemetry, - pollRequests: make(chan chan map[Key]*RequestStats), - closeFilterFn: closeFilterFn, - statkeeper: statkeeper, + ebpfProgram: mgr, + telemetry: telemetry, + closeFilterFn: closeFilterFn, + statkeeper: statkeeper, + processMonitor: processMonitor, }, nil } @@ -125,44 +96,22 @@ func (m *Monitor) Start() error { return nil } - if err := m.ebpfProgram.Start(); err != nil { + var err error + m.consumer, err = events.NewConsumer( + "http", + m.ebpfProgram.Manager.Manager, + m.process, + ) + if err != nil { return err } + m.consumer.Start() - m.eventLoopWG.Add(1) - go func() { - defer m.eventLoopWG.Done() - for { - select { - case dataEvent, ok := <-m.batchCompletionHandler.DataChannel: - if !ok { - return - } - - transactions, err := m.batchManager.GetTransactionsFrom(dataEvent) - m.process(transactions, err) - dataEvent.Done() - case _, ok := <-m.batchCompletionHandler.LostChannel: - if !ok { - return - } - - m.process(nil, errLostBatch) - case reply, ok := <-m.pollRequests: - if !ok { - return - } - - transactions := m.batchManager.GetPendingTransactions() - m.process(transactions, nil) - - m.telemetry.log() - reply <- m.statkeeper.GetAndResetAllStats() - } - } - }() + if err := m.ebpfProgram.Start(); err != nil { + return err + } - return nil + return m.processMonitor.Initialize() } // GetHTTPStats returns a map of HTTP stats stored in the following format: @@ -172,16 +121,9 @@ func (m *Monitor) GetHTTPStats() map[Key]*RequestStats { return nil } - m.mux.Lock() - defer m.mux.Unlock() - if m.stopped { - return nil - } - - reply := make(chan map[Key]*RequestStats, 1) - defer close(reply) - m.pollRequests <- reply - return <-reply + m.consumer.Sync() + m.telemetry.log() + return m.statkeeper.GetAndResetAllStats() } // Stop HTTP monitoring @@ -190,25 +132,16 @@ func (m *Monitor) Stop() { return } - m.mux.Lock() - defer m.mux.Unlock() - if m.stopped { - return - } - + m.processMonitor.Stop() m.ebpfProgram.Close() + m.consumer.Stop() m.closeFilterFn() - close(m.pollRequests) - m.eventLoopWG.Wait() - m.stopped = true } -func (m *Monitor) process(transactions []httpTX, err error) { - m.telemetry.aggregate(transactions, err) - - if m.handler != nil && len(transactions) > 0 { - m.handler(transactions) - } +func (m *Monitor) process(data []byte) { + tx := (*ebpfHttpTx)(unsafe.Pointer(&data[0])) + m.telemetry.count(tx) + m.statkeeper.Process(tx) } // DumpMaps dumps the maps associated with the monitor diff --git a/pkg/network/protocols/http/monitor_test.go b/pkg/network/protocols/http/monitor_test.go index 036d8bea85c3d8..b2c0e1761d5b04 100644 --- a/pkg/network/protocols/http/monitor_test.go +++ b/pkg/network/protocols/http/monitor_test.go @@ -22,6 +22,7 @@ import ( "testing" "time" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/DataDog/datadog-agent/pkg/network/config" @@ -493,9 +494,11 @@ var ( func requestGenerator(t *testing.T, targetAddr string, reqBody []byte) func() *nethttp.Request { var ( - random = rand.New(rand.NewSource(time.Now().Unix())) - idx = 0 - client = new(nethttp.Client) + random = rand.New(rand.NewSource(time.Now().Unix())) + idx = 0 + client = new(nethttp.Client) + reqBuf = make([]byte, 0, len(reqBody)) + respBuf = make([]byte, 512) ) return func() *nethttp.Request { @@ -504,8 +507,14 @@ func requestGenerator(t *testing.T, targetAddr string, reqBody []byte) func() *n var body io.Reader var finalBody []byte if len(reqBody) > 0 { - finalBody = append([]byte(strings.Repeat(" ", idx)), reqBody...) + finalBody = reqBuf[:0] + finalBody = append(finalBody, []byte(strings.Repeat(" ", idx))...) + finalBody = append(finalBody, reqBody...) body = bytes.NewReader(finalBody) + + // save resized-buffer + reqBuf = finalBody + method = httpMethodsWithBody[random.Intn(len(httpMethodsWithBody))] } else { method = httpMethods[random.Intn(len(httpMethods))] @@ -520,11 +529,18 @@ func requestGenerator(t *testing.T, targetAddr string, reqBody []byte) func() *n return req } require.NoError(t, err) + defer resp.Body.Close() if len(reqBody) > 0 { - respBody, err := io.ReadAll(resp.Body) - require.NoError(t, err) - defer resp.Body.Close() - require.Equal(t, finalBody, respBody) + for { + n, err := resp.Body.Read(respBuf) + require.True(t, n <= len(finalBody)) + require.Equal(t, respBuf[:n], finalBody[:n]) + if err != nil { + assert.Equal(t, io.EOF, err) + break + } + finalBody = finalBody[n:] + } } return req } diff --git a/pkg/network/protocols/http/monitor_windows.go b/pkg/network/protocols/http/monitor_windows.go index d106f1a850b7ce..59ab823d1f2a33 100644 --- a/pkg/network/protocols/http/monitor_windows.go +++ b/pkg/network/protocols/http/monitor_windows.go @@ -81,7 +81,7 @@ func (m *WindowsMonitor) Start() { // the linux side has an error code potentially, that // gets aggregated under the hood. Do we need somthing // analogous - m.process(transactionBatch, nil) + m.process(transactionBatch) case transactions, ok := <-m.hei.dataChannel: if !ok { return @@ -91,40 +91,24 @@ func (m *WindowsMonitor) Start() { // gets aggregated under the hood. Do we need somthing // analogous if len(transactions) > 0 { - m.processEtw(transactions, nil) + m.process(transactions) } } - } }() return } -func (m *WindowsMonitor) processEtw(transactionBatch []WinHttpTransaction, err error) { - transactions := make([]httpTX, len(transactionBatch)) - for i := range transactionBatch { - transactions[i] = &transactionBatch[i] - } - +func (m *WindowsMonitor) process(transactionBatch []WinHttpTransaction) { m.mux.Lock() defer m.mux.Unlock() - m.telemetry.aggregate(transactions, err) - m.statkeeper.Process(transactions) -} -func (m *WindowsMonitor) process(transactionBatch []WinHttpTransaction, err error) { - transactions := make([]httpTX, len(transactionBatch)) for i := range transactionBatch { - transactions[i] = &transactionBatch[i] - + tx := httpTX(&transactionBatch[i]) + m.telemetry.count(tx) + m.statkeeper.Process(tx) } - - m.mux.Lock() - defer m.mux.Unlock() - - m.telemetry.aggregate(transactions, err) - m.statkeeper.Process(transactions) } // GetHTTPStats returns a map of HTTP stats stored in the following format: @@ -162,7 +146,11 @@ func removeDuplicates(stats map[Key]*RequestStats) { func isLocalhost(k Key) bool { var sAddr util.Address - if k.SrcIPHigh == 0 { + // this little hack is because ipv6 loopback (::1) has the property of having + // the top 64 bits be zero (just like an ipv4). Could just skip the call to + // IsLoopback() below, but leaving it to allow the underlying library to do + // the check as originally desired. + if k.SrcIPHigh == 0 && k.SrcIPLow != uint64(0x0100000000000000) { sAddr = util.V4Address(uint32(k.SrcIPLow)) } else { sAddr = util.V6Address(k.SrcIPLow, k.SrcIPHigh) diff --git a/pkg/network/protocols/http/monitor_windows_test.go b/pkg/network/protocols/http/monitor_windows_test.go new file mode 100644 index 00000000000000..bb3ab9cca0f972 --- /dev/null +++ b/pkg/network/protocols/http/monitor_windows_test.go @@ -0,0 +1,75 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build windows && npm +// +build windows,npm + +package http + +import ( + "encoding/binary" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestIsLocalhost(t *testing.T) { + + tests := []struct { + key Key + expected bool + }{ + // the isLocalhost function checks only the srcip, but set them both + { + key: Key{ + KeyTuple: KeyTuple{ + SrcIPHigh: 0, + SrcIPLow: uint64(binary.LittleEndian.Uint32([]uint8{127, 0, 0, 1})), + DstIPHigh: 0, + DstIPLow: uint64(binary.LittleEndian.Uint32([]uint8{127, 0, 0, 1})), + }, + }, + expected: true, + }, + { + key: Key{ + KeyTuple: KeyTuple{ + SrcIPHigh: 0, + SrcIPLow: uint64(binary.LittleEndian.Uint32([]uint8{192, 168, 1, 1})), + DstIPHigh: 0, + DstIPLow: uint64(binary.LittleEndian.Uint32([]uint8{192, 168, 1, 1})), + }, + }, + expected: false, + }, + { + key: Key{ + KeyTuple: KeyTuple{ + SrcIPHigh: 0, + SrcIPLow: binary.LittleEndian.Uint64([]uint8{0, 0, 0, 0, 0, 0, 0, 1}), + DstIPHigh: 0, + DstIPLow: binary.LittleEndian.Uint64([]uint8{0, 0, 0, 0, 0, 0, 0, 1}), + }, + }, + expected: true, + }, + { + key: Key{ + KeyTuple: KeyTuple{ + SrcIPHigh: binary.LittleEndian.Uint64([]uint8{0xf, 0xe, 0x8, 0, 0, 0, 0, 0}), + SrcIPLow: binary.LittleEndian.Uint64([]uint8{0x1, 0x9, 0x3, 0xe, 0x4, 0xc, 0xd, 0x6, 0xf, 0xf, 0xa, 0x4}), + DstIPHigh: binary.LittleEndian.Uint64([]uint8{0xf, 0xe, 0x8, 0, 0, 0, 0, 0}), + DstIPLow: binary.LittleEndian.Uint64([]uint8{0x1, 0x9, 0x3, 0xe, 0x4, 0xc, 0xd, 0x6, 0xf, 0xf, 0xa, 0x4}), + }, + }, + expected: false, + }, + } + for idx, tt := range tests { + is := isLocalhost(tt.key) + assert.Equal(t, tt.expected, is, "Unexpected result %v for test %v", is, idx) + } + +} diff --git a/pkg/network/protocols/http/telemetry.go b/pkg/network/protocols/http/telemetry.go index cd68c8651b8518..485854a0f96936 100644 --- a/pkg/network/protocols/http/telemetry.go +++ b/pkg/network/protocols/http/telemetry.go @@ -23,7 +23,6 @@ type telemetry struct { hits1XX, hits2XX, hits3XX, hits4XX, hits5XX *libtelemetry.Metric totalHits *libtelemetry.Metric - misses *libtelemetry.Metric // this happens when we can't cope with the rate of events dropped *libtelemetry.Metric // this happens when httpStatKeeper reaches capacity rejected *libtelemetry.Metric // this happens when an user-defined reject-filter matches a request malformed *libtelemetry.Metric // this happens when the request doesn't have the expected format @@ -48,7 +47,6 @@ func newTelemetry() (*telemetry, error) { // these metrics are also exported as statsd metrics totalHits: metricGroup.NewMetric("total_hits", libtelemetry.OptStatsd), - misses: metricGroup.NewMetric("misses", libtelemetry.OptStatsd), dropped: metricGroup.NewMetric("dropped", libtelemetry.OptStatsd), rejected: metricGroup.NewMetric("rejected", libtelemetry.OptStatsd), malformed: metricGroup.NewMetric("malformed", libtelemetry.OptStatsd), @@ -57,26 +55,20 @@ func newTelemetry() (*telemetry, error) { return t, nil } -func (t *telemetry) aggregate(txs []httpTX, err error) { - for _, tx := range txs { - switch tx.StatusClass() { - case 100: - t.hits1XX.Add(1) - case 200: - t.hits2XX.Add(1) - case 300: - t.hits3XX.Add(1) - case 400: - t.hits4XX.Add(1) - case 500: - t.hits5XX.Add(1) - } - t.totalHits.Add(1) - } - - if err == errLostBatch { - t.misses.Add(int64(len(txs))) +func (t *telemetry) count(tx httpTX) { + switch tx.StatusClass() { + case 100: + t.hits1XX.Add(1) + case 200: + t.hits2XX.Add(1) + case 300: + t.hits3XX.Add(1) + case 400: + t.hits4XX.Add(1) + case 500: + t.hits5XX.Add(1) } + t.totalHits.Add(1) } func (t *telemetry) log() { @@ -84,7 +76,6 @@ func (t *telemetry) log() { then := t.then.Swap(now) totalRequests := t.totalHits.Delta() - misses := t.misses.Delta() dropped := t.dropped.Delta() rejected := t.rejected.Delta() malformed := t.malformed.Delta() @@ -92,11 +83,9 @@ func (t *telemetry) log() { elapsed := now - then log.Debugf( - "http stats summary: requests_processed=%d(%.2f/s) requests_missed=%d(%.2f/s) requests_dropped=%d(%.2f/s) requests_rejected=%d(%.2f/s) requests_malformed=%d(%.2f/s) aggregations=%d", + "http stats summary: requests_processed=%d(%.2f/s) requests_dropped=%d(%.2f/s) requests_rejected=%d(%.2f/s) requests_malformed=%d(%.2f/s) aggregations=%d", totalRequests, float64(totalRequests)/float64(elapsed), - misses, - float64(misses)/float64(elapsed), dropped, float64(dropped)/float64(elapsed), rejected, diff --git a/pkg/network/protocols/http/testutil/testutil.go b/pkg/network/protocols/http/testutil/testutil.go index d6d929341b1bfa..c925462c47937c 100644 --- a/pkg/network/protocols/http/testutil/testutil.go +++ b/pkg/network/protocols/http/testutil/testutil.go @@ -44,9 +44,8 @@ func HTTPServer(t *testing.T, addr string, options Options) func() { statusCode := StatusFromPath(req.URL.Path) w.WriteHeader(statusCode) - reqBody, _ := io.ReadAll(req.Body) defer req.Body.Close() - w.Write(reqBody) + io.Copy(w, req.Body) } srv := &http.Server{ diff --git a/pkg/network/protocols/mongo/client.go b/pkg/network/protocols/mongo/client.go new file mode 100644 index 00000000000000..1104bf48533c14 --- /dev/null +++ b/pkg/network/protocols/mongo/client.go @@ -0,0 +1,78 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package mongo + +import ( + "context" + "fmt" + "net" + "time" + + "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" +) + +const ( + defaultConnectionTimeout = time.Second * 10 +) + +type Options struct { + ClientDialer *net.Dialer + ServerAddress string + Username string + Password string + ConnectionTimout time.Duration +} + +type Client struct { + C *mongo.Client +} + +func NewClient(opts Options) (*Client, error) { + clientOptions := options.Client().ApplyURI(fmt.Sprintf("mongodb://%s", opts.ServerAddress)) + if opts.Username == "" { + opts.Username = User + } + if opts.Password == "" { + opts.Password = Pass + } + creds := options.Credential{ + Username: opts.Username, + Password: opts.Password, + AuthSource: "admin", + } + clientOptions.SetAuth(creds) + clientOptions.SetDirect(true) + + if opts.ConnectionTimout == 0 { + opts.ConnectionTimout = defaultConnectionTimeout + } + + if opts.ClientDialer != nil { + clientOptions.SetDialer(opts.ClientDialer) + } + + timedCtx, cancel := context.WithTimeout(context.Background(), opts.ConnectionTimout) + defer cancel() + client, err := mongo.Connect(timedCtx, clientOptions) + if err != nil { + return nil, err + } + + timedCtx, cancel = context.WithTimeout(context.Background(), opts.ConnectionTimout) + defer cancel() + if err := client.Ping(timedCtx, nil); err != nil { + return nil, err + } + + return &Client{ + C: client, + }, nil +} + +func (c *Client) Stop() error { + return c.C.Disconnect(context.Background()) +} diff --git a/pkg/network/protocols/mongo/server.go b/pkg/network/protocols/mongo/server.go new file mode 100644 index 00000000000000..7885685e70b8fd --- /dev/null +++ b/pkg/network/protocols/mongo/server.go @@ -0,0 +1,31 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package mongo + +import ( + "fmt" + "regexp" + "testing" + + "github.com/DataDog/datadog-agent/pkg/network/protocols/http/testutil" + protocolsUtils "github.com/DataDog/datadog-agent/pkg/network/protocols/testutil" +) + +const ( + User = "root" + Pass = "password" +) + +func RunMongoServer(t *testing.T, serverAddress, serverPort string) { + env := []string{ + "MONGO_ADDR=" + serverAddress, + "MONGO_PORT=" + serverPort, + "MONGO_USER=" + User, + "MONGO_PASSWORD=" + Pass, + } + dir, _ := testutil.CurDir() + protocolsUtils.RunDockerServer(t, "mongo", dir+"/testdata/docker-compose.yml", env, regexp.MustCompile(fmt.Sprintf(".*Waiting for connections.*port.*:%s.*", serverPort))) +} diff --git a/pkg/network/protocols/mongo/testdata/docker-compose.yml b/pkg/network/protocols/mongo/testdata/docker-compose.yml new file mode 100644 index 00000000000000..0d02a59a979e6b --- /dev/null +++ b/pkg/network/protocols/mongo/testdata/docker-compose.yml @@ -0,0 +1,9 @@ +version: '3' +services: + mongodb-primary: + image: 'mongo:5.0.14' + ports: + - ${MONGO_ADDR:-127.0.0.1}:${MONGO_PORT:-27017}:27017 + environment: + - MONGO_INITDB_ROOT_USERNAME=${MONGO_USER:-root} + - MONGO_INITDB_ROOT_PASSWORD=${MONGO_PASSWORD:-password} diff --git a/pkg/network/protocols/postgres/server.go b/pkg/network/protocols/postgres/server.go new file mode 100644 index 00000000000000..adf2b20b66acf4 --- /dev/null +++ b/pkg/network/protocols/postgres/server.go @@ -0,0 +1,27 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package postgres + +import ( + "regexp" + "testing" + + "github.com/DataDog/datadog-agent/pkg/network/protocols/http/testutil" + protocolsUtils "github.com/DataDog/datadog-agent/pkg/network/protocols/testutil" +) + +func RunPostgresServer(t *testing.T, serverAddr string, serverPort string) { + t.Helper() + + env := []string{ + "POSTGRES_ADDR=" + serverAddr, + "POSTGRES_PORT=" + serverPort, + } + + dir, _ := testutil.CurDir() + + protocolsUtils.RunDockerServer(t, "postgres", dir+"/testdata/docker-compose.yml", env, regexp.MustCompile(".*\\[1].*database system is ready to accept connections")) +} diff --git a/pkg/network/protocols/postgres/testdata/docker-compose.yml b/pkg/network/protocols/postgres/testdata/docker-compose.yml new file mode 100644 index 00000000000000..914383c21463b4 --- /dev/null +++ b/pkg/network/protocols/postgres/testdata/docker-compose.yml @@ -0,0 +1,12 @@ +version: '3.1' + +services: + postgres: + image: postgres:15 + restart: always + ports: + - ${POSTGRES_ADDR:-127.0.0.1}:${POSTGRES_PORT:-5432}:5432 + environment: + POSTGRES_USER: admin + POSTGRES_PASSWORD: password + POSTGRES_DB: testdb diff --git a/pkg/network/protocols/postgres/utils.go b/pkg/network/protocols/postgres/utils.go new file mode 100644 index 00000000000000..ec189bcb80da69 --- /dev/null +++ b/pkg/network/protocols/postgres/utils.go @@ -0,0 +1,138 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package postgres + +import ( + "context" + "database/sql" + "testing" + + "github.com/stretchr/testify/require" + "github.com/uptrace/bun" + "github.com/uptrace/bun/dialect/pgdialect" + "github.com/uptrace/bun/driver/pgdriver" +) + +// DummyTable defines a table schema, so that `bun` module can generate queries for it. +type DummyTable struct { + bun.BaseModel `bun:"table:dummy,alias:d"` + + ID int64 `bun:",pk,autoincrement"` + Foo string +} + +var dummyModel = &DummyTable{ID: 1, Foo: "bar"} + +// GetPGHandle returns a handle on the test Postgres DB. This does not initiate +// a connection +func GetPGHandle(t *testing.T, serverAddr string) *sql.DB { + t.Helper() + + pg := sql.OpenDB(pgdriver.NewConnector( + pgdriver.WithNetwork("tcp"), + pgdriver.WithAddr(serverAddr), + pgdriver.WithInsecure(true), + pgdriver.WithUser("admin"), + pgdriver.WithPassword("password"), + pgdriver.WithDatabase("testdb"), + )) + + return pg +} + +// ConnectAndGetDB initiates a connection to the database, get a handle on the +// test db, and register cleanup handlers for the test. Finally, it saves the db +// handle and task context in the provided extras map. +func ConnectAndGetDB(t *testing.T, serverAddr string, extras map[string]interface{}) { + t.Helper() + + ctx := context.Background() + + pg := GetPGHandle(t, serverAddr) + db := bun.NewDB(pg, pgdialect.New()) + + // Cleanup test tables + t.Cleanup(func() { + _, _ = db.NewDropTable().Model((*DummyTable)(nil)).Exec(ctx) + }) + + if extras != nil { + extras["ctx"] = ctx + extras["db"] = db + } +} + +// The following are helpers around bun to quickly execute SQL query for use in +// protocol classification tests. + +func getCtx(extras map[string]interface{}) (*bun.DB, context.Context) { + db := extras["db"].(*bun.DB) + taskCtx := extras["ctx"].(context.Context) + + return db, taskCtx +} + +func RunAlterQuery(t *testing.T, extras map[string]interface{}) { + t.Helper() + db, ctx := getCtx(extras) + + _, err := db.NewAddColumn().Model((*DummyTable)(nil)).ColumnExpr("new_column BOOL").Exec(ctx) + require.NoError(t, err) +} + +func RunCreateQuery(t *testing.T, extras map[string]interface{}) { + t.Helper() + db, ctx := getCtx(extras) + + _, err := db.NewCreateTable().Model((*DummyTable)(nil)).Exec(ctx) + require.NoError(t, err) +} + +func RunDeleteQuery(t *testing.T, extras map[string]interface{}) { + t.Helper() + db, ctx := getCtx(extras) + + _, err := db.NewDelete().Model(dummyModel).WherePK().Exec(ctx) + require.NoError(t, err) +} + +func RunDropQuery(t *testing.T, extras map[string]interface{}) { + t.Helper() + db, ctx := getCtx(extras) + + _, err := db.NewDropTable().Model((*DummyTable)(nil)).IfExists().Exec(ctx) + require.NoError(t, err) +} + +func RunInsertQuery(t *testing.T, id int64, extras map[string]interface{}) { + t.Helper() + db, ctx := getCtx(extras) + + model := *dummyModel + model.ID = id + + _, err := db.NewInsert().Model(&model).Exec(ctx) + require.NoError(t, err) +} + +func RunSelectQuery(t *testing.T, extras map[string]interface{}) { + t.Helper() + db, ctx := getCtx(extras) + + _, err := db.NewSelect().Model(dummyModel).Exec(ctx) + require.NoError(t, err) +} + +func RunUpdateQuery(t *testing.T, extras map[string]interface{}) { + t.Helper() + db, ctx := getCtx(extras) + + newModel := *dummyModel + newModel.Foo = "baz" + + _, err := db.NewUpdate().Model(&newModel).WherePK().Exec(ctx) + require.NoError(t, err) +} diff --git a/pkg/network/protocols/protocols_linux_test.go b/pkg/network/protocols/protocols_linux_test.go new file mode 100644 index 00000000000000..87e6ab5523414f --- /dev/null +++ b/pkg/network/protocols/protocols_linux_test.go @@ -0,0 +1,64 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package protocols + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/pkg/network" + "github.com/DataDog/datadog-agent/pkg/network/protocols/http" +) + +func TestProtocolValue(t *testing.T) { + tests := []struct { + name string + kernelValue http.ProtocolType + expected network.ProtocolType + }{ + { + name: "ProtocolUnknown", + kernelValue: http.ProtocolUnknown, + expected: network.ProtocolUnknown, + }, + { + name: "ProtocolHTTP", + kernelValue: http.ProtocolHTTP, + expected: network.ProtocolHTTP, + }, + { + name: "ProtocolHTTP2", + kernelValue: http.ProtocolHTTP2, + expected: network.ProtocolHTTP2, + }, + { + name: "ProtocolTLS", + kernelValue: http.ProtocolTLS, + expected: network.ProtocolTLS, + }, + { + name: "ProtocolAMQP", + kernelValue: http.ProtocolAMQP, + expected: network.ProtocolAMQP, + }, + { + name: "ProtocolRedis", + kernelValue: http.ProtocolRedis, + expected: network.ProtocolRedis, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + require.Equal(t, int(test.expected), int(test.kernelValue)) + require.True(t, network.IsValidProtocolValue(uint8(test.kernelValue))) + }) + } +} diff --git a/cmd/cluster-agent/app/check.go b/pkg/network/protocols/redis/client.go similarity index 53% rename from cmd/cluster-agent/app/check.go rename to pkg/network/protocols/redis/client.go index 5a19319bad99cb..4dfcaef34fef62 100644 --- a/cmd/cluster-agent/app/check.go +++ b/pkg/network/protocols/redis/client.go @@ -3,15 +3,17 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:build kubeapiserver -// +build kubeapiserver - -package app +package redis import ( - "github.com/DataDog/datadog-agent/cmd/cluster-agent/commands/check" + "net" + + "github.com/go-redis/redis/v9" ) -func init() { - ClusterAgentCmd.AddCommand(check.Check(loggerName, &confPath, &flagNoColor)) +func NewClient(serverAddress string, dialer *net.Dialer) *redis.Client { + return redis.NewClient(&redis.Options{ + Addr: serverAddress, + Dialer: dialer.DialContext, + }) } diff --git a/pkg/network/protocols/redis/server.go b/pkg/network/protocols/redis/server.go new file mode 100644 index 00000000000000..3616105855a29c --- /dev/null +++ b/pkg/network/protocols/redis/server.go @@ -0,0 +1,25 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package redis + +import ( + "regexp" + "testing" + + "github.com/DataDog/datadog-agent/pkg/network/protocols/http/testutil" + protocolsUtils "github.com/DataDog/datadog-agent/pkg/network/protocols/testutil" +) + +func RunRedisServer(t *testing.T, serverAddr, serverPort string) { + env := []string{ + "REDIS_ADDR=" + serverAddr, + "REDIS_PORT=" + serverPort, + } + + t.Helper() + dir, _ := testutil.CurDir() + protocolsUtils.RunDockerServer(t, "redis", dir+"/testdata/docker-compose.yml", env, regexp.MustCompile(".*Ready to accept connections")) +} diff --git a/pkg/network/protocols/redis/testdata/docker-compose.yml b/pkg/network/protocols/redis/testdata/docker-compose.yml new file mode 100644 index 00000000000000..3af8592a1c0b0c --- /dev/null +++ b/pkg/network/protocols/redis/testdata/docker-compose.yml @@ -0,0 +1,9 @@ +version: '3' +services: + redis: + image: redis:7 + entrypoint: redis-server --ignore-warnings ARM64-COW-BUG + ports: + - ${REDIS_ADDR:-127.0.0.1}:${REDIS_PORT:-6379}:6379 + environment: + - "ALLOW_EMPTY_PASSWORD=yes" diff --git a/pkg/network/protocols/testutil/patternscanner.go b/pkg/network/protocols/testutil/patternscanner.go new file mode 100644 index 00000000000000..440d4ed375858e --- /dev/null +++ b/pkg/network/protocols/testutil/patternscanner.go @@ -0,0 +1,47 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package testutil + +import ( + "regexp" + "sync" +) + +type PatternScanner struct { + // The log pattern to match on + pattern *regexp.Regexp + // Once we've found the correct log, we should notify the caller. + DoneChan chan struct{} + // A sync.Once instance to ensure we notify the caller only once, and stop the operation. + stopOnce sync.Once + // A helper to spare redundant calls to the analyzer once we've found the relevant log. + stopped bool +} + +func NewScanner(pattern *regexp.Regexp, doneChan chan struct{}) *PatternScanner { + return &PatternScanner{ + pattern: pattern, + DoneChan: doneChan, + stopOnce: sync.Once{}, + stopped: false, + } +} + +// Write implemented io.Writer to be used as a callback for log/string writing. +// Once we find a match in for the given pattern, we notify the caller. +func (ps *PatternScanner) Write(p []byte) (n int, err error) { + n = len(p) + err = nil + + if !ps.stopped && ps.pattern.Match(p) { + ps.stopOnce.Do(func() { + ps.DoneChan <- struct{}{} + ps.stopped = true + }) + } + + return +} diff --git a/pkg/network/protocols/testutil/serverutils.go b/pkg/network/protocols/testutil/serverutils.go new file mode 100644 index 00000000000000..66228cc8be0c91 --- /dev/null +++ b/pkg/network/protocols/testutil/serverutils.go @@ -0,0 +1,50 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package testutil + +import ( + "os/exec" + "regexp" + "testing" + "time" + + "github.com/stretchr/testify/require" +) + +// RunDockerServer is a template for running a protocols server in a docker. +// - serverName is a friendly name of the server we are setting (AMQP, mongo, etc.). +// - dockerPath is the path for the docker-compose. +// - env is any environment variable required for running the server. +// - serverStartRegex is a regex to be matched on the server logs to ensure it started correctly. +func RunDockerServer(t *testing.T, serverName, dockerPath string, env []string, serverStartRegex *regexp.Regexp) { + t.Helper() + + cmd := exec.Command("docker-compose", "-f", dockerPath, "up") + patternScanner := NewScanner(serverStartRegex, make(chan struct{}, 1)) + + cmd.Stdout = patternScanner + cmd.Env = append(cmd.Env, env...) + go func() { + require.NoErrorf(t, cmd.Run(), "could not start %s with docker-compose", serverName) + }() + + t.Cleanup(func() { + c := exec.Command("docker-compose", "-f", dockerPath, "down", "--remove-orphans") + c.Env = append(c.Env, env...) + _ = c.Run() + }) + + for { + select { + case <-patternScanner.DoneChan: + t.Logf("%s server is ready", serverName) + return + case <-time.After(time.Second * 60): + t.Fatalf("failed to start %s server", serverName) + return + } + } +} diff --git a/pkg/network/tracer/connection/kprobe/config.go b/pkg/network/tracer/connection/kprobe/config.go index 5c47bc7bebc5c9..dff8fa30ccde73 100644 --- a/pkg/network/tracer/connection/kprobe/config.go +++ b/pkg/network/tracer/connection/kprobe/config.go @@ -60,6 +60,7 @@ func enabledProbes(c *config.Config, runtimeTracer bool) (map[probes.ProbeName]s enableProbe(enabled, probes.InetCskListenStop) enableProbe(enabled, probes.TCPSetState) enableProbe(enabled, selectVersionBasedProbe(runtimeTracer, kv, probes.TCPRetransmit, probes.TCPRetransmitPre470, kv470)) + enableProbe(enabled, probes.TCPRetransmitRet) missing, err := ebpf.VerifyKernelFuncs(ksymPath, []string{"sockfd_lookup_light"}) if err == nil && len(missing) == 0 { diff --git a/pkg/network/tracer/connection/kprobe/manager.go b/pkg/network/tracer/connection/kprobe/manager.go index 55bd0293702f0f..a4cdac736f0785 100644 --- a/pkg/network/tracer/connection/kprobe/manager.go +++ b/pkg/network/tracer/connection/kprobe/manager.go @@ -48,6 +48,7 @@ var mainProbes = map[probes.ProbeName]string{ probes.UDPv6RecvMsg: "kprobe__udpv6_recvmsg", probes.UDPv6RecvMsgReturn: "kretprobe__udpv6_recvmsg", probes.TCPRetransmit: "kprobe__tcp_retransmit_skb", + probes.TCPRetransmitRet: "kretprobe__tcp_retransmit_skb", probes.InetCskAcceptReturn: "kretprobe__inet_csk_accept", probes.InetCskListenStop: "kprobe__inet_csk_listen_stop", probes.UDPDestroySock: "kprobe__udp_destroy_sock", diff --git a/pkg/network/tracer/connection/kprobe/tracer.go b/pkg/network/tracer/connection/kprobe/tracer.go index 00d4f2bb31bf04..6671768d430bcc 100644 --- a/pkg/network/tracer/connection/kprobe/tracer.go +++ b/pkg/network/tracer/connection/kprobe/tracer.go @@ -181,6 +181,15 @@ func New(config *config.Config, constants []manager.ConstantEditor, bpfTelemetry if err != nil { return nil, fmt.Errorf("error enabling protocol classifier: %s", err) } + } else { + // Kernels < 4.7.0 do not know about the per-cpu array map used + // in classification, preventing the program to load even though + // we won't use it. We change the type to a simple array map to + // circumvent that. + mgrOptions.MapSpecEditors[string(probes.ProtocolClassificationBufMap)] = manager.MapSpecEditor{ + Type: ebpf.Array, + EditorFlag: manager.EditType, + } } currKernelVersion, err := kernel.HostVersion() @@ -571,7 +580,7 @@ func populateConnStats(stats *network.ConnectionStats, t *netebpf.ConnTuple, s * Cookie: s.Cookie, } - if s.Protocol < uint8(network.MaxProtocols) { + if network.IsValidProtocolValue(s.Protocol) { stats.Protocol = network.ProtocolType(s.Protocol) } else { log.Warnf("got protocol %d which is not recognized by the agent", s.Protocol) diff --git a/pkg/network/tracer/tracer.go b/pkg/network/tracer/tracer.go index 24fd2122a1e18b..8c33d86c65dd48 100644 --- a/pkg/network/tracer/tracer.go +++ b/pkg/network/tracer/tracer.go @@ -90,6 +90,21 @@ type Tracer struct { // NewTracer creates a Tracer func NewTracer(config *config.Config) (*Tracer, error) { + tr, err := newTracer(config) + if err != nil { + return nil, err + } + + if err := tr.start(); err != nil { + return nil, err + } + + return tr, nil +} + +// newTracer is an internal function used by tests primarily +// (and NewTracer above) +func newTracer(config *config.Config) (*Tracer, error) { // make sure debugfs is mounted if mounted, err := kernel.IsDebugFSMounted(); !mounted { return nil, fmt.Errorf("system-probe unsupported: %s", err) @@ -190,17 +205,23 @@ func NewTracer(config *config.Config) (*Tracer, error) { bpfTelemetry: bpfTelemetry, } - err = ebpfTracer.Start(tr.storeClosedConnections) + return tr, nil +} + +// start starts the tracer. This function is present to separate +// the creation from the start of the tracer for tests +func (tr *Tracer) start() error { + err := tr.ebpfTracer.Start(tr.storeClosedConnections) if err != nil { tr.Stop() - return nil, fmt.Errorf("could not start ebpf manager: %s", err) + return fmt.Errorf("could not start ebpf manager: %s", err) } if err = tr.reverseDNS.Start(); err != nil { - return nil, fmt.Errorf("could not start reverse dns monitor: %w", err) + return fmt.Errorf("could not start reverse dns monitor: %w", err) } - return tr, nil + return nil } func newConntracker(cfg *config.Config, bpfTelemetry *telemetry.EBPFTelemetry) (netlink.Conntracker, error) { diff --git a/pkg/network/tracer/tracer_classification_test.go b/pkg/network/tracer/tracer_classification_test.go index 41584941d2f012..03192f40f133e6 100644 --- a/pkg/network/tracer/tracer_classification_test.go +++ b/pkg/network/tracer/tracer_classification_test.go @@ -15,21 +15,52 @@ import ( "io" "net" nethttp "net/http" + "runtime" + "strings" "testing" "time" + redis2 "github.com/go-redis/redis/v9" + "github.com/stretchr/testify/require" + "github.com/uptrace/bun" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo" + "github.com/DataDog/datadog-agent/pkg/network" "github.com/DataDog/datadog-agent/pkg/network/config" + "github.com/DataDog/datadog-agent/pkg/network/protocols/amqp" + protocolsmongo "github.com/DataDog/datadog-agent/pkg/network/protocols/mongo" + pgutils "github.com/DataDog/datadog-agent/pkg/network/protocols/postgres" + "github.com/DataDog/datadog-agent/pkg/network/protocols/redis" "github.com/DataDog/datadog-agent/pkg/network/tracer/testutil/grpc" - "github.com/stretchr/testify/require" ) -func testProtocolClassification(t *testing.T, cfg *config.Config, clientHost, targetHost, serverHost string) { +// testContext shares the context of a given test. +// It contains common variable used by all tests, and allows extending the context dynamically by setting more +// attributes to the `extras` map. +type testContext struct { + // The address of the server to listen on. + serverAddress string + serverPort string + // The address for the client to communicate with. + targetAddress string + // optional - A custom dialer to set the ip/port/socket attributes for the client. + clientDialer *net.Dialer + expectedProtocol network.ProtocolType + // A channel to mark goroutines (like servers) to halt. + done chan struct{} + // A dynamic map that allows extending the context easily between phases of the test. + extras map[string]interface{} +} + +func setupTracer(t *testing.T, cfg *config.Config) *Tracer { tr, err := NewTracer(cfg) if err != nil { t.Fatal(err) } - defer tr.Stop() + t.Cleanup(func() { + tr.Stop() + }) initTracerState(t, tr) require.NoError(t, err) @@ -37,7 +68,50 @@ func testProtocolClassification(t *testing.T, cfg *config.Config, clientHost, ta // Giving the tracer time to run time.Sleep(time.Second) - dialer := &net.Dialer{ + return tr +} + +func validateProtocolConnection(t *testing.T, ctx testContext, tr *Tracer) { + waitForConnectionsWithProtocol(t, tr, ctx.targetAddress, ctx.serverAddress, ctx.expectedProtocol) +} + +func defaultTeardown(_ *testing.T, ctx testContext) { + close(ctx.done) +} + +// skipIfNotLinux skips the test if we are not on a linux machine +func skipIfNotLinux(ctx testContext) (bool, string) { + if runtime.GOOS != "linux" { + return true, "test is supported on linux machine only" + } + + return false, "" +} + +// skipIfUsingNAT skips the test if we have a NAT rules applied. +func skipIfUsingNAT(ctx testContext) (bool, string) { + if ctx.targetAddress != ctx.serverAddress { + return true, "test is not supported when NAT is applied" + } + + return false, "" +} + +// composeSkips skips if one of the given filters is matched. +func composeSkips(filters ...func(ctx testContext) (bool, string)) func(ctx testContext) (bool, string) { + return func(ctx testContext) (bool, string) { + for _, filter := range filters { + if skip, err := filter(ctx); skip { + return skip, err + } + } + + return false, "" + } +} + +func testProtocolClassification(t *testing.T, cfg *config.Config, clientHost, targetHost, serverHost string) { + defaultDialer := &net.Dialer{ LocalAddr: &net.TCPAddr{ IP: net.ParseIP(clientHost), Port: 0, @@ -45,42 +119,44 @@ func testProtocolClassification(t *testing.T, cfg *config.Config, clientHost, ta } tests := []struct { - name string - clientRun func(t *testing.T, serverAddr string) - serverRun func(t *testing.T, serverAddr string, done chan struct{}) string - want network.ProtocolType + name string + context testContext + shouldSkip func(ctx testContext) (bool, string) + preTracerSetup func(t *testing.T, ctx testContext) + postTracerSetup func(t *testing.T, ctx testContext) + validation func(t *testing.T, ctx testContext, tr *Tracer) + teardown func(t *testing.T, ctx testContext) }{ { name: "tcp client without sending data", - clientRun: func(t *testing.T, serverAddr string) { + context: testContext{ + serverPort: "8080", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolUnknown, + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + server := NewTCPServerOnAddress(ctx.serverAddress, func(c net.Conn) { + c.Close() + }) + require.NoError(t, server.Run(ctx.done)) timedContext, cancel := context.WithTimeout(context.Background(), time.Second) - c, err := dialer.DialContext(timedContext, "tcp", serverAddr) + c, err := ctx.clientDialer.DialContext(timedContext, "tcp", ctx.targetAddress) cancel() require.NoError(t, err) defer c.Close() }, - serverRun: func(t *testing.T, serverAddr string, done chan struct{}) string { - server := NewTCPServerOnAddress(serverAddr, func(c net.Conn) { - c.Close() - }) - require.NoError(t, server.Run(done)) - return server.address - }, - want: network.ProtocolUnknown, + teardown: defaultTeardown, + validation: validateProtocolConnection, }, { name: "tcp client with sending random data", - clientRun: func(t *testing.T, serverAddr string) { - timedContext, cancel := context.WithTimeout(context.Background(), time.Second) - c, err := dialer.DialContext(timedContext, "tcp", serverAddr) - cancel() - require.NoError(t, err) - defer c.Close() - c.Write([]byte("hello\n")) - io.ReadAll(c) + context: testContext{ + serverPort: "8080", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolUnknown, }, - serverRun: func(t *testing.T, serverAddr string, done chan struct{}) string { - server := NewTCPServerOnAddress(serverAddr, func(c net.Conn) { + postTracerSetup: func(t *testing.T, ctx testContext) { + server := NewTCPServerOnAddress(ctx.serverAddress, func(c net.Conn) { r := bufio.NewReader(c) input, err := r.ReadBytes(byte('\n')) if err == nil { @@ -88,26 +164,28 @@ func testProtocolClassification(t *testing.T, cfg *config.Config, clientHost, ta } c.Close() }) - require.NoError(t, server.Run(done)) - return server.address + require.NoError(t, server.Run(ctx.done)) + + timedContext, cancel := context.WithTimeout(context.Background(), time.Second) + c, err := ctx.clientDialer.DialContext(timedContext, "tcp", ctx.targetAddress) + cancel() + require.NoError(t, err) + defer c.Close() + c.Write([]byte("hello\n")) + io.ReadAll(c) }, - want: network.ProtocolUnknown, + teardown: defaultTeardown, + validation: validateProtocolConnection, }, { name: "tcp client with sending HTTP request", - clientRun: func(t *testing.T, serverAddr string) { - client := nethttp.Client{ - Transport: &nethttp.Transport{ - DialContext: dialer.DialContext, - }, - } - resp, err := client.Get("http://" + serverAddr + "/test") - require.NoError(t, err) - io.Copy(io.Discard, resp.Body) - resp.Body.Close() + context: testContext{ + serverPort: "8080", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolHTTP, }, - serverRun: func(t *testing.T, serverAddr string, done chan struct{}) string { - ln, err := net.Listen("tcp", serverAddr) + postTracerSetup: func(t *testing.T, ctx testContext) { + ln, err := net.Listen("tcp", ctx.serverAddress) require.NoError(t, err) srv := &nethttp.Server{ @@ -124,64 +202,205 @@ func testProtocolClassification(t *testing.T, cfg *config.Config, clientHost, ta _ = srv.Serve(ln) }() go func() { - <-done + <-ctx.done srv.Shutdown(context.Background()) }() - return srv.Addr + + client := nethttp.Client{ + Transport: &nethttp.Transport{ + DialContext: ctx.clientDialer.DialContext, + }, + } + resp, err := client.Get("http://" + ctx.targetAddress + "/test") + require.NoError(t, err) + io.Copy(io.Discard, resp.Body) + resp.Body.Close() }, - want: network.ProtocolHTTP, + teardown: defaultTeardown, + validation: validateProtocolConnection, }, { - name: "gRPC traffic - unary call", - clientRun: func(t *testing.T, serverAddr string) { - c, err := grpc.NewClient(serverAddr, grpc.Options{ - CustomDialer: dialer, + name: "http2 traffic using gRPC - unary call", + context: testContext{ + serverPort: "8080", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolHTTP2, + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + server, err := grpc.NewServer(ctx.serverAddress) + require.NoError(t, err) + server.Run() + go func() { + <-ctx.done + server.Stop() + }() + + c, err := grpc.NewClient(ctx.targetAddress, grpc.Options{ + CustomDialer: ctx.clientDialer, }) require.NoError(t, err) defer c.Close() require.NoError(t, c.HandleUnary(context.Background(), "test")) }, - serverRun: func(t *testing.T, serverAddr string, done chan struct{}) string { - server, err := grpc.NewServer(serverAddr) + teardown: defaultTeardown, + validation: validateProtocolConnection, + }, + { + name: "http2 traffic using gRPC - stream call", + context: testContext{ + serverPort: "8080", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolHTTP2, + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + server, err := grpc.NewServer(ctx.serverAddress) require.NoError(t, err) server.Run() go func() { - <-done + <-ctx.done server.Stop() }() - return server.Address + + c, err := grpc.NewClient(ctx.targetAddress, grpc.Options{ + CustomDialer: ctx.clientDialer, + }) + require.NoError(t, err) + defer c.Close() + require.NoError(t, c.HandleStream(context.Background(), 5)) }, - want: network.ProtocolHTTP2, + teardown: defaultTeardown, + validation: validateProtocolConnection, }, { - name: "gRPC traffic - stream call", - clientRun: func(t *testing.T, serverAddr string) { - c, err := grpc.NewClient(serverAddr, grpc.Options{ - CustomDialer: dialer, + name: "amqp connect", + context: testContext{ + serverPort: "5672", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolAMQP, + }, + preTracerSetup: func(t *testing.T, ctx testContext) { + host, port, _ := net.SplitHostPort(ctx.serverAddress) + amqp.RunAmqpServer(t, host, port) + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + client, err := amqp.NewClient(amqp.Options{ + ServerAddress: ctx.serverAddress, }) require.NoError(t, err) - defer c.Close() - require.NoError(t, c.HandleStream(context.Background(), 5)) + defer client.Terminate() + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + validation: validateProtocolConnection, + }, + { + name: "amqp declare channel", + context: testContext{ + serverPort: "5672", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolUnknown, + extras: make(map[string]interface{}), }, - serverRun: func(t *testing.T, serverAddr string, done chan struct{}) string { - server, err := grpc.NewServer(serverAddr) + preTracerSetup: func(t *testing.T, ctx testContext) { + host, port, _ := net.SplitHostPort(ctx.serverAddress) + amqp.RunAmqpServer(t, host, port) + + client, err := amqp.NewClient(amqp.Options{ + ServerAddress: ctx.serverAddress, + }) require.NoError(t, err) - server.Run() - go func() { - <-done - server.Stop() - }() - return server.Address + ctx.extras["client"] = client + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + client := ctx.extras["client"].(*amqp.Client) + defer client.Terminate() + + require.NoError(t, client.DeclareQueue("test", client.PublishChannel)) + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + validation: validateProtocolConnection, + }, + { + name: "amqp publish", + context: testContext{ + serverPort: "5672", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolAMQP, + extras: make(map[string]interface{}), }, - want: network.ProtocolHTTP2, + preTracerSetup: func(t *testing.T, ctx testContext) { + host, port, _ := net.SplitHostPort(ctx.serverAddress) + amqp.RunAmqpServer(t, host, port) + + client, err := amqp.NewClient(amqp.Options{ + ServerAddress: ctx.serverAddress, + }) + require.NoError(t, err) + require.NoError(t, client.DeclareQueue("test", client.PublishChannel)) + ctx.extras["client"] = client + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + client := ctx.extras["client"].(*amqp.Client) + defer client.Terminate() + + require.NoError(t, client.Publish("test", "my msg")) + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + validation: validateProtocolConnection, + }, + { + name: "amqp consume", + context: testContext{ + serverPort: "5672", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolAMQP, + extras: make(map[string]interface{}), + }, + preTracerSetup: func(t *testing.T, ctx testContext) { + host, port, _ := net.SplitHostPort(ctx.serverAddress) + amqp.RunAmqpServer(t, host, port) + + client, err := amqp.NewClient(amqp.Options{ + ServerAddress: ctx.serverAddress, + }) + require.NoError(t, err) + require.NoError(t, client.DeclareQueue("test", client.PublishChannel)) + require.NoError(t, client.DeclareQueue("test", client.ConsumeChannel)) + require.NoError(t, client.Publish("test", "my msg")) + ctx.extras["client"] = client + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + client := ctx.extras["client"].(*amqp.Client) + defer client.Terminate() + + res, err := client.Consume("test", 1) + require.NoError(t, err) + require.Equal(t, []string{"my msg"}, res) + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + validation: validateProtocolConnection, }, { // A case where we see multiple protocols on the same socket. In that case, we expect to classify the connection // with the first protocol we've found. name: "mixed protocols", - clientRun: func(t *testing.T, serverAddr string) { + context: testContext{ + serverPort: "8080", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolHTTP, + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + server := NewTCPServerOnAddress(ctx.serverAddress, func(c net.Conn) { + r := bufio.NewReader(c) + input, err := r.ReadBytes(byte('\n')) + if err == nil { + c.Write(input) + } + c.Close() + }) + require.NoError(t, server.Run(ctx.done)) + timedContext, cancel := context.WithTimeout(context.Background(), time.Second) - c, err := dialer.DialContext(timedContext, "tcp", serverAddr) + c, err := ctx.clientDialer.DialContext(timedContext, "tcp", ctx.targetAddress) cancel() require.NoError(t, err) defer c.Close() @@ -191,35 +410,484 @@ func testProtocolClassification(t *testing.T, cfg *config.Config, clientHost, ta c.Write([]byte("PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n")) io.ReadAll(c) }, - serverRun: func(t *testing.T, serverAddr string, done chan struct{}) string { - server := NewTCPServerOnAddress(serverAddr, func(c net.Conn) { - r := bufio.NewReader(c) - input, err := r.ReadBytes(byte('\n')) - if err == nil { - c.Write(input) - } - c.Close() + teardown: defaultTeardown, + validation: validateProtocolConnection, + }, + { + name: "redis set", + context: testContext{ + serverPort: "6379", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolRedis, + extras: make(map[string]interface{}), + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + preTracerSetup: func(t *testing.T, ctx testContext) { + host, port, _ := net.SplitHostPort(ctx.serverAddress) + redis.RunRedisServer(t, host, port) + + client := redis.NewClient(ctx.targetAddress, ctx.clientDialer) + client.Ping(context.Background()) + ctx.extras["client"] = client + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + client := ctx.extras["client"].(*redis2.Client) + client.Set(context.Background(), "key", "value", time.Minute) + }, + teardown: defaultTeardown, + validation: validateProtocolConnection, + }, + { + name: "redis get", + context: testContext{ + serverPort: "6379", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolRedis, + extras: make(map[string]interface{}), + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + preTracerSetup: func(t *testing.T, ctx testContext) { + host, port, _ := net.SplitHostPort(ctx.serverAddress) + redis.RunRedisServer(t, host, port) + + client := redis.NewClient(ctx.targetAddress, ctx.clientDialer) + client.Set(context.Background(), "key", "value", time.Minute) + ctx.extras["client"] = client + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + client := ctx.extras["client"].(*redis2.Client) + res := client.Get(context.Background(), "key") + val, err := res.Result() + require.NoError(t, err) + require.Equal(t, "value", val) + }, + teardown: defaultTeardown, + validation: validateProtocolConnection, + }, + { + name: "redis get unknown key", + context: testContext{ + serverPort: "6379", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolRedis, + extras: make(map[string]interface{}), + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + preTracerSetup: func(t *testing.T, ctx testContext) { + host, port, _ := net.SplitHostPort(ctx.serverAddress) + redis.RunRedisServer(t, host, port) + + client := redis.NewClient(ctx.targetAddress, ctx.clientDialer) + client.Ping(context.Background()) + ctx.extras["client"] = client + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + client := ctx.extras["client"].(*redis2.Client) + res := client.Get(context.Background(), "unknown") + require.Error(t, res.Err()) + }, + teardown: defaultTeardown, + validation: validateProtocolConnection, + }, + { + name: "redis err response", + context: testContext{ + serverPort: "6379", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolRedis, + extras: make(map[string]interface{}), + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + preTracerSetup: func(t *testing.T, ctx testContext) { + host, port, _ := net.SplitHostPort(ctx.serverAddress) + redis.RunRedisServer(t, host, port) + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + conn, err := ctx.clientDialer.DialContext(context.Background(), "tcp", ctx.targetAddress) + require.NoError(t, err) + _, err = conn.Write([]byte("+dummy\r\n")) + require.NoError(t, err) + }, + teardown: defaultTeardown, + validation: validateProtocolConnection, + }, + { + name: "redis client id", + context: testContext{ + serverPort: "6379", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolRedis, + extras: make(map[string]interface{}), + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + preTracerSetup: func(t *testing.T, ctx testContext) { + host, port, _ := net.SplitHostPort(ctx.serverAddress) + redis.RunRedisServer(t, host, port) + + client := redis.NewClient(ctx.targetAddress, ctx.clientDialer) + client.Ping(context.Background()) + ctx.extras["client"] = client + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + client := ctx.extras["client"].(*redis2.Client) + res := client.ClientID(context.Background()) + require.NoError(t, res.Err()) + }, + teardown: defaultTeardown, + validation: validateProtocolConnection, + }, + { + name: "mongo - classify by connect", + context: testContext{ + serverPort: "27017", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolMongo, + extras: make(map[string]interface{}), + }, + preTracerSetup: func(t *testing.T, ctx testContext) { + host, port, _ := net.SplitHostPort(ctx.serverAddress) + protocolsmongo.RunMongoServer(t, host, port) + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + client, err := protocolsmongo.NewClient(protocolsmongo.Options{ + ServerAddress: ctx.targetAddress, + ClientDialer: ctx.clientDialer, + }) + require.NoError(t, err) + client.Stop() + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + validation: validateProtocolConnection, + }, + { + name: "mongo - classify by collection creation", + context: testContext{ + serverPort: "27017", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolMongo, + extras: make(map[string]interface{}), + }, + preTracerSetup: func(t *testing.T, ctx testContext) { + host, port, _ := net.SplitHostPort(ctx.serverAddress) + protocolsmongo.RunMongoServer(t, host, port) + + client, err := protocolsmongo.NewClient(protocolsmongo.Options{ + ServerAddress: ctx.targetAddress, + ClientDialer: ctx.clientDialer, + }) + require.NoError(t, err) + ctx.extras["client"] = client + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + client := ctx.extras["client"].(*protocolsmongo.Client) + db := client.C.Database("test") + require.NoError(t, db.CreateCollection(context.Background(), "collection")) + }, + teardown: func(t *testing.T, ctx testContext) { + client := ctx.extras["client"].(*protocolsmongo.Client) + client.Stop() + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + validation: validateProtocolConnection, + }, + { + name: "mongo - classify by insertion", + context: testContext{ + serverPort: "27017", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolMongo, + extras: make(map[string]interface{}), + }, + preTracerSetup: func(t *testing.T, ctx testContext) { + host, port, _ := net.SplitHostPort(ctx.serverAddress) + protocolsmongo.RunMongoServer(t, host, port) + + client, err := protocolsmongo.NewClient(protocolsmongo.Options{ + ServerAddress: ctx.targetAddress, + ClientDialer: ctx.clientDialer, + }) + require.NoError(t, err) + ctx.extras["client"] = client + db := client.C.Database("test") + require.NoError(t, db.CreateCollection(context.Background(), "collection")) + ctx.extras["collection"] = db.Collection("collection") + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + collection := ctx.extras["collection"].(*mongo.Collection) + input := map[string]string{"test": "test"} + _, err := collection.InsertOne(context.Background(), input) + require.NoError(t, err) + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + teardown: func(t *testing.T, ctx testContext) { + client := ctx.extras["client"].(*protocolsmongo.Client) + client.Stop() + }, + validation: validateProtocolConnection, + }, + { + name: "mongo - classify by find", + context: testContext{ + serverPort: "27017", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolMongo, + extras: make(map[string]interface{}), + }, + preTracerSetup: func(t *testing.T, ctx testContext) { + host, port, _ := net.SplitHostPort(ctx.serverAddress) + protocolsmongo.RunMongoServer(t, host, port) + + client, err := protocolsmongo.NewClient(protocolsmongo.Options{ + ServerAddress: ctx.targetAddress, + ClientDialer: ctx.clientDialer, }) - require.NoError(t, server.Run(done)) - return server.address + require.NoError(t, err) + ctx.extras["client"] = client + db := client.C.Database("test") + require.NoError(t, db.CreateCollection(context.Background(), "collection")) + + collection := db.Collection("collection") + ctx.extras["input"] = map[string]string{"test": "test"} + _, err = collection.InsertOne(context.Background(), ctx.extras["input"]) + require.NoError(t, err) + + ctx.extras["collection"] = db.Collection("collection") + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + collection := ctx.extras["collection"].(*mongo.Collection) + res := collection.FindOne(context.Background(), bson.M{"test": "test"}) + require.NoError(t, res.Err()) + var output map[string]string + require.NoError(t, res.Decode(&output)) + delete(output, "_id") + require.EqualValues(t, output, ctx.extras["input"]) + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + teardown: func(t *testing.T, ctx testContext) { + client := ctx.extras["client"].(*protocolsmongo.Client) + client.Stop() + }, + validation: validateProtocolConnection, + }, + { + name: "postgres - connect", + context: testContext{ + serverPort: "5432", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolPostgres, + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + preTracerSetup: func(t *testing.T, ctx testContext) { + addr, port, _ := net.SplitHostPort(ctx.serverAddress) + pgutils.RunPostgresServer(t, addr, port) + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + pg := pgutils.GetPGHandle(t, ctx.serverAddress) + conn, err := pg.Conn(context.Background()) + require.NoError(t, err) + defer conn.Close() + }, + validation: validateProtocolConnection, + }, + { + name: "postgres - insert", + context: testContext{ + serverPort: "5432", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolPostgres, + extras: make(map[string]interface{}), + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + preTracerSetup: func(t *testing.T, ctx testContext) { + addr, port, _ := net.SplitHostPort(ctx.serverAddress) + pgutils.RunPostgresServer(t, addr, port) + + pgutils.ConnectAndGetDB(t, ctx.serverAddress, ctx.extras) + pgutils.RunCreateQuery(t, ctx.extras) + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + pgutils.RunInsertQuery(t, 1, ctx.extras) + }, + validation: validateProtocolConnection, + }, + { + name: "postgres - delete", + context: testContext{ + serverPort: "5432", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolPostgres, + extras: make(map[string]interface{}), + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + preTracerSetup: func(t *testing.T, ctx testContext) { + addr, port, _ := net.SplitHostPort(ctx.serverAddress) + pgutils.RunPostgresServer(t, addr, port) + pgutils.ConnectAndGetDB(t, ctx.serverAddress, ctx.extras) + pgutils.RunCreateQuery(t, ctx.extras) + pgutils.RunInsertQuery(t, 1, ctx.extras) + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + pgutils.RunDeleteQuery(t, ctx.extras) + }, + validation: validateProtocolConnection, + }, + { + name: "postgres - select", + context: testContext{ + serverPort: "5432", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolPostgres, + extras: make(map[string]interface{}), + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + preTracerSetup: func(t *testing.T, ctx testContext) { + addr, port, _ := net.SplitHostPort(ctx.serverAddress) + pgutils.RunPostgresServer(t, addr, port) + pgutils.ConnectAndGetDB(t, ctx.serverAddress, ctx.extras) + pgutils.RunCreateQuery(t, ctx.extras) + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + pgutils.RunSelectQuery(t, ctx.extras) + }, + validation: validateProtocolConnection, + }, + { + name: "postgres - update", + context: testContext{ + serverPort: "5432", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolPostgres, + extras: make(map[string]interface{}), }, - want: network.ProtocolHTTP, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + preTracerSetup: func(t *testing.T, ctx testContext) { + addr, port, _ := net.SplitHostPort(ctx.serverAddress) + pgutils.RunPostgresServer(t, addr, port) + pgutils.ConnectAndGetDB(t, ctx.serverAddress, ctx.extras) + pgutils.RunCreateQuery(t, ctx.extras) + pgutils.RunInsertQuery(t, 1, ctx.extras) + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + pgutils.RunUpdateQuery(t, ctx.extras) + }, + validation: validateProtocolConnection, + }, + { + name: "postgres - drop", + context: testContext{ + serverPort: "5432", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolPostgres, + extras: make(map[string]interface{}), + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + preTracerSetup: func(t *testing.T, ctx testContext) { + addr, port, _ := net.SplitHostPort(ctx.serverAddress) + pgutils.RunPostgresServer(t, addr, port) + pgutils.ConnectAndGetDB(t, ctx.serverAddress, ctx.extras) + pgutils.RunCreateQuery(t, ctx.extras) + pgutils.RunInsertQuery(t, 1, ctx.extras) + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + pgutils.RunDropQuery(t, ctx.extras) + }, + validation: validateProtocolConnection, + }, + { + name: "postgres - alter", + context: testContext{ + serverPort: "5432", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolPostgres, + extras: make(map[string]interface{}), + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + preTracerSetup: func(t *testing.T, ctx testContext) { + addr, port, _ := net.SplitHostPort(ctx.serverAddress) + pgutils.RunPostgresServer(t, addr, port) + pgutils.ConnectAndGetDB(t, ctx.serverAddress, ctx.extras) + pgutils.RunCreateQuery(t, ctx.extras) + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + pgutils.RunAlterQuery(t, ctx.extras) + }, + validation: validateProtocolConnection, + }, + { + // Test that we classify long queries that would be + // splitted between multiple packets correctly + name: "postgres - long query", + context: testContext{ + serverPort: "5432", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolPostgres, + extras: make(map[string]interface{}), + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + preTracerSetup: func(t *testing.T, ctx testContext) { + addr, port, _ := net.SplitHostPort(ctx.serverAddress) + pgutils.RunPostgresServer(t, addr, port) + pgutils.ConnectAndGetDB(t, ctx.serverAddress, ctx.extras) + pgutils.RunCreateQuery(t, ctx.extras) + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + db := ctx.extras["db"].(*bun.DB) + taskCtx := ctx.extras["ctx"].(context.Context) + + // This will fail but it should make a query and be classified + _, _ = db.NewInsert().Model(&pgutils.DummyTable{Foo: strings.Repeat("#", 16384)}).Exec(taskCtx) + }, + validation: validateProtocolConnection, + }, + { + // Test that we classify long queries that would be + // splitted between multiple packets correctly + name: "postgres - long response", + context: testContext{ + serverPort: "5432", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolPostgres, + extras: make(map[string]interface{}), + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + preTracerSetup: func(t *testing.T, ctx testContext) { + addr, port, _ := net.SplitHostPort(ctx.serverAddress) + pgutils.RunPostgresServer(t, addr, port) + pgutils.ConnectAndGetDB(t, ctx.serverAddress, ctx.extras) + pgutils.RunCreateQuery(t, ctx.extras) + for i := int64(1); i < 200; i++ { + pgutils.RunInsertQuery(t, i, ctx.extras) + } + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + pgutils.RunSelectQuery(t, ctx.extras) + }, + validation: validateProtocolConnection, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - done := make(chan struct{}) - defer close(done) - serverAddr := tt.serverRun(t, serverHost, done) - _, port, err := net.SplitHostPort(serverAddr) - require.NoError(t, err) - targetAddr := net.JoinHostPort(targetHost, port) - - // Letting the server time to start - time.Sleep(500 * time.Millisecond) - tt.clientRun(t, targetAddr) - - waitForConnectionsWithProtocol(t, tr, targetAddr, serverAddr, tt.want) + tt.context.serverAddress = net.JoinHostPort(serverHost, tt.context.serverPort) + tt.context.targetAddress = net.JoinHostPort(targetHost, tt.context.serverPort) + + if tt.shouldSkip != nil { + if skip, msg := tt.shouldSkip(tt.context); skip { + t.Skip(msg) + } + } + + tt.context.done = make(chan struct{}) + if tt.teardown != nil { + t.Cleanup(func() { + tt.teardown(t, tt.context) + }) + } + if tt.preTracerSetup != nil { + tt.preTracerSetup(t, tt.context) + } + tr := setupTracer(t, cfg) + tt.postTracerSetup(t, tt.context) + tt.validation(t, tt.context, tr) }) } } diff --git a/pkg/network/tracer/tracer_classification_windows_test.go b/pkg/network/tracer/tracer_classification_windows_test.go index cc69e64d927d5a..c27fecea240579 100644 --- a/pkg/network/tracer/tracer_classification_windows_test.go +++ b/pkg/network/tracer/tracer_classification_windows_test.go @@ -16,6 +16,6 @@ func TestProtocolClassification(t *testing.T) { t.Skip("Classification is not supported") } t.Run("without nat", func(t *testing.T) { - testProtocolClassification(t, cfg, "localhost", "127.0.0.1", "127.0.0.1:0") + testProtocolClassification(t, cfg, "localhost", "127.0.0.1", "127.0.0.1") }) } diff --git a/pkg/network/tracer/tracer_linux_test.go b/pkg/network/tracer/tracer_linux_test.go index 175723bc42f95c..2f02a46d6ac007 100644 --- a/pkg/network/tracer/tracer_linux_test.go +++ b/pkg/network/tracer/tracer_linux_test.go @@ -627,10 +627,9 @@ func TestGatewayLookupEnabled(t *testing.T) { cfg := testConfig() cfg.EnableGatewayLookup = true - tr, err := NewTracer(cfg) + tr, err := newTracer(cfg) require.NoError(t, err) require.NotNil(t, tr) - defer tr.Stop() require.NotNil(t, tr.gwLookup) tr.gwLookup.subnetForHwAddrFunc = func(hwAddr net.HardwareAddr) (network.Subnet, error) { @@ -644,6 +643,9 @@ func TestGatewayLookupEnabled(t *testing.T) { return network.Subnet{Alias: "subnet"}, nil } + require.NoError(t, tr.start(), "could not start tracer") + defer tr.Stop() + getConnections(t, tr) dnsClientAddr, dnsServerAddr := doDNSQuery(t, "google.com", "8.8.8.8") @@ -653,7 +655,7 @@ func TestGatewayLookupEnabled(t *testing.T) { var ok bool conn, ok = findConnection(dnsClientAddr, dnsServerAddr, getConnections(t, tr)) return ok - }, 2*time.Second, time.Second) + }, 3*time.Second, 500*time.Millisecond) require.NotNil(t, conn.Via, "connection is missing via: %s", conn) require.Equal(t, conn.Via.Subnet.Alias, fmt.Sprintf("subnet-%d", ifi.Index)) @@ -672,11 +674,10 @@ func TestGatewayLookupSubnetLookupError(t *testing.T) { cfg := testConfig() cfg.EnableGatewayLookup = true - tr, err := NewTracer(cfg) + // create the tracer without starting it + tr, err := newTracer(cfg) require.NoError(t, err) require.NotNil(t, tr) - defer tr.Stop() - require.NotNil(t, tr.gwLookup) ifi := ipRouteGet(t, "", "8.8.8.8", nil) @@ -689,6 +690,8 @@ func TestGatewayLookupSubnetLookupError(t *testing.T) { } tr.gwLookup.purge() + require.NoError(t, tr.start(), "failed to start tracer") + defer tr.Stop() getConnections(t, tr) @@ -726,11 +729,9 @@ func TestGatewayLookupCrossNamespace(t *testing.T) { cfg := testConfig() cfg.EnableGatewayLookup = true - tr, err := NewTracer(cfg) + tr, err := newTracer(cfg) require.NoError(t, err) require.NotNil(t, tr) - defer tr.Stop() - require.NotNil(t, tr.gwLookup) // setup two network namespaces @@ -784,7 +785,9 @@ func TestGatewayLookupCrossNamespace(t *testing.T) { return network.Subnet{Alias: "subnet"}, nil } - tr.gwLookup.purge() + + require.NoError(t, tr.start(), "could not start tracer") + defer tr.Stop() test1Ns, err := vnetns.GetFromName("test1") require.NoError(t, err) diff --git a/pkg/network/tracer/tracer_test.go b/pkg/network/tracer/tracer_test.go index c621135a3cd259..748d0abba272c1 100644 --- a/pkg/network/tracer/tracer_test.go +++ b/pkg/network/tracer/tracer_test.go @@ -33,6 +33,7 @@ import ( "github.com/stretchr/testify/require" "golang.org/x/sync/errgroup" + coreConfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/network" "github.com/DataDog/datadog-agent/pkg/network/config" "github.com/DataDog/datadog-agent/pkg/process/util" @@ -47,6 +48,12 @@ var ( payloadSizesUDP = []int{2 << 5, 2 << 8, 2 << 12, 2 << 14} ) +// Some tests try to detect if they're running on Fargate. We'll get a panic +// when checking that if the auto-detected features have not been initialized. +func init() { + coreConfig.SetDetectedFeatures(coreConfig.FeatureMap{}) +} + func TestMain(m *testing.M) { logLevel := os.Getenv("DD_LOG_LEVEL") if logLevel == "" { @@ -474,10 +481,20 @@ func TestTCPConnsReported(t *testing.T) { func TestUDPSendAndReceive(t *testing.T) { t.Run("v4", func(t *testing.T) { - testUDPSendAndReceive(t, "127.0.0.1:8001") + t.Run("fixed port", func(t *testing.T) { + testUDPSendAndReceive(t, "127.0.0.1:8081") + }) + t.Run("random port", func(t *testing.T) { + testUDPSendAndReceive(t, "127.0.0.1:0") + }) }) t.Run("v6", func(t *testing.T) { - testUDPSendAndReceive(t, "[::1]:8001") + t.Run("fixed port", func(t *testing.T) { + testUDPSendAndReceive(t, "[::1]:8081") + }) + t.Run("random port", func(t *testing.T) { + testUDPSendAndReceive(t, "[::1]:0") + }) }) } diff --git a/pkg/network/tracer/tracer_usm_linux_test.go b/pkg/network/tracer/tracer_usm_linux_test.go index bb418503d8a4c9..15af7b57d4a43c 100644 --- a/pkg/network/tracer/tracer_usm_linux_test.go +++ b/pkg/network/tracer/tracer_usm_linux_test.go @@ -492,19 +492,19 @@ func TestProtocolClassification(t *testing.T) { t.Run("with dnat", func(t *testing.T) { // SetupDNAT sets up a NAT translation from 2.2.2.2 to 1.1.1.1 netlink.SetupDNAT(t) - testProtocolClassification(t, cfg, "localhost", "2.2.2.2", "1.1.1.1:0") + testProtocolClassification(t, cfg, "localhost", "2.2.2.2", "1.1.1.1") testProtocolClassificationMapCleanup(t, cfg, "localhost", "2.2.2.2", "1.1.1.1:0") }) t.Run("with snat", func(t *testing.T) { // SetupDNAT sets up a NAT translation from 6.6.6.6 to 7.7.7.7 netlink.SetupSNAT(t) - testProtocolClassification(t, cfg, "6.6.6.6", "127.0.0.1", "127.0.0.1:0") + testProtocolClassification(t, cfg, "6.6.6.6", "127.0.0.1", "127.0.0.1") testProtocolClassificationMapCleanup(t, cfg, "6.6.6.6", "127.0.0.1", "127.0.0.1:0") }) t.Run("without nat", func(t *testing.T) { - testProtocolClassification(t, cfg, "localhost", "127.0.0.1", "127.0.0.1:0") + testProtocolClassification(t, cfg, "localhost", "127.0.0.1", "127.0.0.1") testProtocolClassificationMapCleanup(t, cfg, "localhost", "127.0.0.1", "127.0.0.1:0") }) } diff --git a/pkg/obfuscate/cache.go b/pkg/obfuscate/cache.go index 5b8b545944d1eb..3993390d2e54c5 100644 --- a/pkg/obfuscate/cache.go +++ b/pkg/obfuscate/cache.go @@ -9,7 +9,7 @@ import ( "fmt" "time" - "github.com/dgraph-io/ristretto" + "github.com/outcaste-io/ristretto" ) // measuredCache is a wrapper on top of *ristretto.Cache which additionally diff --git a/pkg/obfuscate/go.mod b/pkg/obfuscate/go.mod index 3c563304ec2936..f5f262961fe74b 100644 --- a/pkg/obfuscate/go.mod +++ b/pkg/obfuscate/go.mod @@ -5,7 +5,7 @@ go 1.12 require ( github.com/DataDog/datadog-go/v5 v5.1.1 github.com/Microsoft/go-winio v0.5.1 // indirect - github.com/dgraph-io/ristretto v0.1.0 + github.com/outcaste-io/ristretto v0.2.0 github.com/stretchr/testify v1.8.1 go.uber.org/atomic v1.10.0 ) diff --git a/pkg/obfuscate/go.sum b/pkg/obfuscate/go.sum index 7f574d7a55c18d..6afa1464966fe8 100644 --- a/pkg/obfuscate/go.sum +++ b/pkg/obfuscate/go.sum @@ -8,8 +8,6 @@ github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= -github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= @@ -17,6 +15,8 @@ github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25Kn github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/outcaste-io/ristretto v0.2.0 h1:47w059XTZWFt01OucwjcBt8mEa3VUUhntUWEfmgVBFc= +github.com/outcaste-io/ristretto v0.2.0/go.mod h1:iBZA7RCt6jaOr0z6hiBQ6t662/oZ6Gx/yauuPvIWHAI= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= diff --git a/pkg/obfuscate/obfuscate.go b/pkg/obfuscate/obfuscate.go index caf90167c5f6ab..aad3f47fb2e8a5 100644 --- a/pkg/obfuscate/obfuscate.go +++ b/pkg/obfuscate/obfuscate.go @@ -176,6 +176,7 @@ func NewObfuscator(cfg Config) *Obfuscator { opts: &cfg, queryCache: newMeasuredCache(cacheOptions{On: cfg.SQL.Cache, Statsd: cfg.Statsd}), sqlLiteralEscapes: atomic.NewBool(false), + log: cfg.Logger, } if cfg.ES.Enabled { o.es = newJSONObfuscator(&cfg.ES, &o) diff --git a/pkg/obfuscate/sql.go b/pkg/obfuscate/sql.go index ba6cca0ad0d414..62b8e0e3a1f278 100644 --- a/pkg/obfuscate/sql.go +++ b/pkg/obfuscate/sql.go @@ -57,9 +57,9 @@ func (f *metadataFinderFilter) Filter(token, lastToken TokenKind, buffer []byte) // SELECT ... FROM [tableName] // DELETE FROM [tableName] // ... JOIN [tableName] - if r, _ := utf8.DecodeRune(buffer); !unicode.IsLetter(r) && !strings.ContainsRune("\"'`", r) { - // first character in buffer is not a letter, nor a quote, meaning it is not an identifier; - // we might have a nested query like SELECT * FROM (SELECT ...) + if r, _ := utf8.DecodeRune(buffer); !unicode.IsLetter(r) { + // first character in buffer is not a letter; we might have a nested + // query like SELECT * FROM (SELECT ...) break } fallthrough @@ -381,8 +381,7 @@ func attemptObfuscation(tokenizer *SQLTokenizer) (*ObfuscatedQuery, error) { if buff != nil { if out.Len() != 0 { switch token { - case '.', ']', ',': - // skip adding a space before dots, closing square brackets, and commas. + case ',': case '=': if lastToken == ':' { // do not add a space before an equals if a colon was @@ -391,12 +390,7 @@ func attemptObfuscation(tokenizer *SQLTokenizer) (*ObfuscatedQuery, error) { } fallthrough default: - switch lastToken { - case '[', '.': - // skip adding a space after dots and opening square brackets. - default: - out.WriteRune(' ') - } + out.WriteRune(' ') } } out.Write(buff) diff --git a/pkg/obfuscate/sql_test.go b/pkg/obfuscate/sql_test.go index 06bee1940e08ca..7bfccb316173f3 100644 --- a/pkg/obfuscate/sql_test.go +++ b/pkg/obfuscate/sql_test.go @@ -89,7 +89,7 @@ func TestDollarQuotedFunc(t *testing.T) { `CREATE OR REPLACE FUNCTION pg_temp.sequelize_upsert(OUT created boolean, OUT primary_key text) AS $func$ BEGIN INSERT INTO "school" ("id","organization_id","name","created_at","updated_at") VALUES ('dc4e9444-d7c9-40a9-bcef-68e4cc594e61','ec647f56-f27a-49a1-84af-021ad0a19f21','Test','2021-03-31 16:30:43.915 +00:00','2021-03-31 16:30:43.915 +00:00'); created := true; EXCEPTION WHEN unique_violation THEN UPDATE "school" SET "id"='dc4e9444-d7c9-40a9-bcef-68e4cc594e61',"organization_id"='ec647f56-f27a-49a1-84af-021ad0a19f21',"name"='Test',"updated_at"='2021-03-31 16:30:43.915 +00:00' WHERE ("id" = 'dc4e9444-d7c9-40a9-bcef-68e4cc594e61'); created := false; END; $func$ LANGUAGE plpgsql; SELECT * FROM pg_temp.sequelize_upsert();`, ) assert.NoError(t, err) - assert.Equal(t, `CREATE OR REPLACE FUNCTION pg_temp.sequelize_upsert ( OUT created boolean, OUT primary_key text ) AS $func$BEGIN INSERT INTO "school" ( "id", "organization_id", "name", "created_at", "updated_at" ) VALUES ( ? ) created := ? EXCEPTION WHEN unique_violation THEN UPDATE "school" SET "id" = ? "organization_id" = ? "name" = ? "updated_at" = ? WHERE ( "id" = ? ) created := ? END$func$ LANGUAGE plpgsql SELECT * FROM pg_temp.sequelize_upsert ( )`, oq.Query) + assert.Equal(t, `CREATE OR REPLACE FUNCTION pg_temp.sequelize_upsert ( OUT created boolean, OUT primary_key text ) AS $func$BEGIN INSERT INTO school ( id, organization_id, name, created_at, updated_at ) VALUES ( ? ) created := ? EXCEPTION WHEN unique_violation THEN UPDATE school SET id = ? organization_id = ? name = ? updated_at = ? WHERE ( id = ? ) created := ? END$func$ LANGUAGE plpgsql SELECT * FROM pg_temp.sequelize_upsert ( )`, oq.Query) }) } @@ -99,12 +99,11 @@ func TestScanDollarQuotedString(t *testing.T) { out string err bool }{ - {`$tag$abc$tag$`, `$tag$abc$tag$`, false}, - {`$func$abc$func$`, `$func$abc$func$`, false}, - {`$tag$textwith\n\rnewlinesand\r\\\$tag$`, `$tag$textwith\n\rnewlinesand\r\\\$tag$`, false}, - {`$tag$ab$tactac$tx$tag$`, `$tag$ab$tactac$tx$tag$`, false}, - {`$$abc$$`, `$$abc$$`, false}, - {`$$$$`, `$$$$`, false}, + {`$tag$abc$tag$`, `abc`, false}, + {`$func$abc$func$`, `abc`, false}, + {`$tag$textwith\n\rnewlinesand\r\\\$tag$`, `textwith\n\rnewlinesand\r\\\`, false}, + {`$tag$ab$tactac$tx$tag$`, `ab$tactac$tx`, false}, + {`$$abc$$`, `abc`, false}, {`$$abc`, `abc`, true}, {`$$abc$`, `abc`, true}, } { @@ -117,10 +116,7 @@ func TestScanDollarQuotedString(t *testing.T) { } return } - if kind == LexError { - t.Fatalf("Failed to Tokenize %v: %v\n", tt.in, tok.err) - } - assert.Equal(t, tt.out, string(str)) + assert.Equal(t, string(str), tt.out) assert.Equal(t, DollarQuotedString, kind) }) } @@ -133,7 +129,7 @@ func TestScanDollarQuotedString(t *testing.T) { }) t.Run("on", func(t *testing.T) { - tok := NewSQLTokenizer(`$func$ BEGIN INSERT INTO "school" ("id","organization_id","name","created_at","updated_at") VALUES ('dc4e9444-d7c9-40a9-bcef-68e4cc594e61','ec647f56-f27a-49a1-84af-021ad0a19f21','Test','2021-03-31 16:30:43.915 +00:00','2021-03-31 16:30:43.915 +00:00'); created := true; EXCEPTION WHEN unique_violation THEN UPDATE "school" SET "id"='dc4e9444-d7c9-40a9-bcef-68e4cc594e61',"organization_id"='ec647f56-f27a-49a1-84af-021ad0a19f21',"name"='Test',"updated_at"='2021-03-31 16:30:43.915 +00:00' WHERE ("id" = 'dc4e9444-d7c9-40a9-bcef-68e4cc594e61'); created := false; END; $func$`, false, &SQLConfig{ + tok := NewSQLTokenizer("$func$abc$func$", false, &SQLConfig{ DollarQuotedFunc: true, }) kind, _ := tok.Scan() @@ -394,7 +390,7 @@ func TestSQLUTF8(t *testing.T) { }, { "select * from `構わない`;", - "select * from `構わない`", + "select * from 構わない", }, { "select * from names where name like '�����';", @@ -425,7 +421,7 @@ func TestSQLReplaceDigits(t *testing.T) { }{ { "REPLACE INTO sales_2019_07_01 (`itemID`, `date`, `qty`, `price`) VALUES ((SELECT itemID FROM item1001 WHERE `sku` = [sku]), CURDATE(), [qty], 0.00)", - "REPLACE INTO sales_?_?_? ( `itemID`, `date`, `qty`, `price` ) VALUES ( ( SELECT itemID FROM item? WHERE `sku` = [sku] ), CURDATE ( ), [qty], ? )", + "REPLACE INTO sales_?_?_? ( itemID, date, qty, price ) VALUES ( ( SELECT itemID FROM item? WHERE sku = [ sku ] ), CURDATE ( ), [ qty ], ? )", }, { "SELECT ddh19.name, ddt.tags FROM dd91219.host ddh19, dd21916.host_tags ddt WHERE ddh19.id = ddt.host_id AND ddh19.org_id = 2 AND ddh19.name = 'datadog'", @@ -491,7 +487,7 @@ GROUP BY sales1828.product_key`, }{ { "REPLACE INTO sales_2019_07_01 (`itemID`, `date`, `qty`, `price`) VALUES ((SELECT itemID FROM item1001 WHERE `sku` = [sku]), CURDATE(), [qty], 0.00)", - "REPLACE INTO sales_2019_07_01 ( `itemID`, `date`, `qty`, `price` ) VALUES ( ( SELECT itemID FROM item1001 WHERE `sku` = [sku] ), CURDATE ( ), [qty], ? )", + "REPLACE INTO sales_2019_07_01 ( itemID, date, qty, price ) VALUES ( ( SELECT itemID FROM item1001 WHERE sku = [ sku ] ), CURDATE ( ), [ qty ], ? )", }, { "SELECT ddh19.name, ddt.tags FROM dd91219.host ddh19, dd21916.host_tags ddt WHERE ddh19.id = ddt.host_id AND ddh19.org_id = 2 AND ddh19.name = 'datadog'", @@ -563,24 +559,14 @@ func TestSQLTableFinderAndReplaceDigits(t *testing.T) { "select * from users where id = ?", }, { - "select * from `backticks` where id = 42", - "`backticks`", - "select * from `backticks` where id = ?", + "select * from `backslashes` where id = 42", + "backslashes", + "select * from backslashes where id = ?", }, { `select * from "double-quotes" where id = 42`, - `"double-quotes"`, - `select * from "double-quotes" where id = ?`, - }, - { - "select * from `backticks_20` where id = 42", - "`backticks_?`", - "select * from `backticks_?` where id = ?", - }, - { - `select * from "double-quotes-30" where id = 42`, - `"double-quotes-?"`, - `select * from "double-quotes-?" where id = ?`, + "double-quotes", + `select * from double-quotes where id = ?`, }, { "SELECT host, status FROM ec2_status WHERE org_id = 42", @@ -635,7 +621,7 @@ func TestSQLTableFinderAndReplaceDigits(t *testing.T) { { "REPLACE INTO sales_2019_07_01 (`itemID`, `date`, `qty`, `price`) VALUES ((SELECT itemID FROM item1001 WHERE `sku` = [sku]), CURDATE(), [qty], 0.00)", "sales_?_?_?,item?", - "REPLACE INTO sales_?_?_? ( `itemID`, `date`, `qty`, `price` ) VALUES ( ( SELECT itemID FROM item? WHERE `sku` = [sku] ), CURDATE ( ), [qty], ? )", + "REPLACE INTO sales_?_?_? ( itemID, date, qty, price ) VALUES ( ( SELECT itemID FROM item? WHERE sku = [ sku ] ), CURDATE ( ), [ qty ], ? )", }, { "SELECT name FROM people WHERE person_id = -1", @@ -670,12 +656,12 @@ func TestSQLTableFinderAndReplaceDigits(t *testing.T) { { "select * from test where !\"weird_query\"", "test", - "select * from test where ! \"weird_query\"", + "select * from test where ! weird_query", }, { "select * from test where !`weird_query`", "test", - "select * from test where ! `weird_query`", + "select * from test where ! weird_query", }, { "select !- 2", @@ -767,15 +753,15 @@ func TestSQLQuantizer(t *testing.T) { }, { "SELECT * FROM `host` WHERE `id` IN (42, 43) /*comment with parameters,host:localhost,url:controller#home,id:FF005:00CAA*/", - "SELECT * FROM `host` WHERE `id` IN ( ? )", + "SELECT * FROM host WHERE id IN ( ? )", }, { "SELECT `host`.`address` FROM `host` WHERE org_id=42", - "SELECT `host`.`address` FROM `host` WHERE org_id = ?", + "SELECT host . address FROM host WHERE org_id = ?", }, { `SELECT "host"."address" FROM "host" WHERE org_id=42`, - `SELECT "host"."address" FROM "host" WHERE org_id = ?`, + `SELECT host . address FROM host WHERE org_id = ?`, }, { `SELECT * FROM host WHERE id IN (42, 43) /* @@ -793,11 +779,11 @@ func TestSQLQuantizer(t *testing.T) { }, { "SELECT org_id, metric_key FROM metrics_metadata WHERE org_id = %(org_id)s AND metric_key = ANY(array[75])", - "SELECT org_id, metric_key FROM metrics_metadata WHERE org_id = ? AND metric_key = ANY ( array [?] )", + "SELECT org_id, metric_key FROM metrics_metadata WHERE org_id = ? AND metric_key = ANY ( array [ ? ] )", }, { "SELECT org_id, metric_key FROM metrics_metadata WHERE org_id = %(org_id)s AND metric_key = ANY(array[21, 25, 32])", - "SELECT org_id, metric_key FROM metrics_metadata WHERE org_id = ? AND metric_key = ANY ( array [?] )", + "SELECT org_id, metric_key FROM metrics_metadata WHERE org_id = ? AND metric_key = ANY ( array [ ? ] )", }, { "SELECT articles.* FROM articles WHERE articles.id = 1 LIMIT 1", @@ -886,7 +872,7 @@ func TestSQLQuantizer(t *testing.T) { }, { `SELECT "webcore_page"."id" FROM "webcore_page" WHERE "webcore_page"."slug" = %s ORDER BY "webcore_page"."path" ASC LIMIT 1`, - `SELECT "webcore_page"."id" FROM "webcore_page" WHERE "webcore_page"."slug" = ? ORDER BY "webcore_page"."path" ASC LIMIT ?`, + "SELECT webcore_page . id FROM webcore_page WHERE webcore_page . slug = ? ORDER BY webcore_page . path ASC LIMIT ?", }, { "SELECT server_table.host AS host_id FROM table#.host_tags as server_table WHERE server_table.host_id = 50", @@ -910,7 +896,7 @@ func TestSQLQuantizer(t *testing.T) { }, { "SELECT * FROM public.table ( array [ ROW ( array [ 'magic', 'foo',", - "SELECT * FROM public.table ( array [ROW ( array [?", + "SELECT * FROM public.table ( array [ ROW ( array [ ?", }, { "SELECT pg_try_advisory_lock (123) AS t46eef3f025cc27feb31ca5a2d668a09a", @@ -918,7 +904,7 @@ func TestSQLQuantizer(t *testing.T) { }, { "INSERT INTO `qual-aa`.issues (alert0 , alert1) VALUES (NULL, NULL)", - "INSERT INTO `qual-aa`.issues ( alert0, alert1 ) VALUES ( ? )", + "INSERT INTO qual-aa . issues ( alert0, alert1 ) VALUES ( ? )", }, { "INSERT INTO user (id, email, name) VALUES (null, ?, ?)", @@ -959,7 +945,7 @@ func TestSQLQuantizer(t *testing.T) { `SELECT daily_values.*, LEAST((5040000 - @runtot), value) AS value, ` + "(@runtot := @runtot + daily_values.value) AS total FROM (SELECT @runtot:=0) AS n, `daily_values` WHERE `daily_values`.`subject_id` = 12345 AND `daily_values`.`subject_type` = 'Skippity' AND (daily_values.date BETWEEN '2018-05-09' AND '2018-06-19') HAVING value >= 0 ORDER BY date", - "SELECT daily_values.*, LEAST ( ( ? - @runtot ), value ), ( @runtot := @runtot + daily_values.value ) FROM ( SELECT @runtot := ? ), `daily_values` WHERE `daily_values`.`subject_id` = ? AND `daily_values`.`subject_type` = ? AND ( daily_values.date BETWEEN ? AND ? ) HAVING value >= ? ORDER BY date", + `SELECT daily_values.*, LEAST ( ( ? - @runtot ), value ), ( @runtot := @runtot + daily_values.value ) FROM ( SELECT @runtot := ? ), daily_values WHERE daily_values . subject_id = ? AND daily_values . subject_type = ? AND ( daily_values.date BETWEEN ? AND ? ) HAVING value >= ? ORDER BY date`, }, { ` SELECT @@ -992,13 +978,13 @@ func TestSQLQuantizer(t *testing.T) { t1.userid = 'jstein' `, - `SELECT t1.userid, t1.fullname, t1.firm_id, t2.firmname, t1.email, t1.location, t1.state, t1.phone, t1.url, DATE_FORMAT ( t1.lastmod, "%m/%d/%Y %h:%i:%s" ), t1.lastmod, t1.user_status, t1.pw_expire, DATE_FORMAT ( t1.pw_expire, "%m/%d/%Y" ), t1.addr1, t1.addr2, t1.zipcode, t1.office_id, t1.default_group, t3.firm_status, t1.title FROM userdata LEFT JOIN lawfirm_names ON t1.firm_id = t2.firm_id LEFT JOIN lawfirms ON t1.firm_id = t3.firm_id WHERE t1.userid = ?`, + `SELECT t1.userid, t1.fullname, t1.firm_id, t2.firmname, t1.email, t1.location, t1.state, t1.phone, t1.url, DATE_FORMAT ( t1.lastmod, %m/%d/%Y %h:%i:%s ), t1.lastmod, t1.user_status, t1.pw_expire, DATE_FORMAT ( t1.pw_expire, %m/%d/%Y ), t1.addr1, t1.addr2, t1.zipcode, t1.office_id, t1.default_group, t3.firm_status, t1.title FROM userdata LEFT JOIN lawfirm_names ON t1.firm_id = t2.firm_id LEFT JOIN lawfirms ON t1.firm_id = t3.firm_id WHERE t1.userid = ?`, }, { `SELECT [b].[BlogId], [b].[Name] FROM [Blogs] AS [b] ORDER BY [b].[Name]`, - `SELECT [b].[BlogId], [b].[Name] FROM [Blogs] ORDER BY [b].[Name]`, + `SELECT [ b ] . [ BlogId ], [ b ] . [ Name ] FROM [ Blogs ] ORDER BY [ b ] . [ Name ]`, }, { `SELECT * FROM users WHERE firstname=''`, @@ -1054,7 +1040,7 @@ ORDER BY [b].[Name]`, }, { "SELECT org_id,metric_key,metric_type,interval FROM metrics_metadata WHERE org_id = ? AND metric_key = ANY(ARRAY[?,?,?,?,?])", - "SELECT org_id, metric_key, metric_type, interval FROM metrics_metadata WHERE org_id = ? AND metric_key = ANY ( ARRAY [?] )", + "SELECT org_id, metric_key, metric_type, interval FROM metrics_metadata WHERE org_id = ? AND metric_key = ANY ( ARRAY [ ? ] )", }, { `SELECT wp_woocommerce_order_items.order_id As No_Commande @@ -1075,7 +1061,7 @@ ORDER BY [b].[Name]`, }, { "SELECT MIN(`scoped_49a39c4cc9ae4fdda07bcf49e99f8224`.`scoped_8720d2c0e0824ec2910ab9479085839c`) AS `MIN_BECR_DATE_CREATED` FROM (SELECT `49a39c4cc9ae4fdda07bcf49e99f8224`.`submittedOn` AS `scoped_8720d2c0e0824ec2910ab9479085839c`, `49a39c4cc9ae4fdda07bcf49e99f8224`.`domain` AS `scoped_847e4dcfa1c54d72aad6dbeb231c46de`, `49a39c4cc9ae4fdda07bcf49e99f8224`.`eventConsumer` AS `scoped_7b2f7b8da15646d1b75aa03901460eb2`, `49a39c4cc9ae4fdda07bcf49e99f8224`.`eventType` AS `scoped_77a1b9308b384a9391b69d24335ba058` FROM (`SorDesignTime`.`businessEventConsumerRegistry_947a74dad4b64be9847d67f466d26f5e` AS `49a39c4cc9ae4fdda07bcf49e99f8224`) WHERE (`49a39c4cc9ae4fdda07bcf49e99f8224`.`systemData.ClientID`) = ('35c1ccc0-a83c-4812-a189-895e9d4dd223')) AS `scoped_49a39c4cc9ae4fdda07bcf49e99f8224` WHERE ((`scoped_49a39c4cc9ae4fdda07bcf49e99f8224`.`scoped_847e4dcfa1c54d72aad6dbeb231c46de`) = ('Benefits') AND ((`scoped_49a39c4cc9ae4fdda07bcf49e99f8224`.`scoped_7b2f7b8da15646d1b75aa03901460eb2`) = ('benefits') AND (`scoped_49a39c4cc9ae4fdda07bcf49e99f8224`.`scoped_77a1b9308b384a9391b69d24335ba058`) = ('DMXSync'))); ", - "SELECT MIN ( `scoped_49a39c4cc9ae4fdda07bcf49e99f8224`.`scoped_8720d2c0e0824ec2910ab9479085839c` ) FROM ( SELECT `49a39c4cc9ae4fdda07bcf49e99f8224`.`submittedOn`, `49a39c4cc9ae4fdda07bcf49e99f8224`.`domain`, `49a39c4cc9ae4fdda07bcf49e99f8224`.`eventConsumer`, `49a39c4cc9ae4fdda07bcf49e99f8224`.`eventType` FROM ( `SorDesignTime`.`businessEventConsumerRegistry_947a74dad4b64be9847d67f466d26f5e` ) WHERE ( `49a39c4cc9ae4fdda07bcf49e99f8224`.`systemData.ClientID` ) = ( ? ) ) WHERE ( ( `scoped_49a39c4cc9ae4fdda07bcf49e99f8224`.`scoped_847e4dcfa1c54d72aad6dbeb231c46de` ) = ( ? ) AND ( ( `scoped_49a39c4cc9ae4fdda07bcf49e99f8224`.`scoped_7b2f7b8da15646d1b75aa03901460eb2` ) = ( ? ) AND ( `scoped_49a39c4cc9ae4fdda07bcf49e99f8224`.`scoped_77a1b9308b384a9391b69d24335ba058` ) = ( ? ) ) )", + "SELECT MIN ( scoped_49a39c4cc9ae4fdda07bcf49e99f8224 . scoped_8720d2c0e0824ec2910ab9479085839c ) FROM ( SELECT 49a39c4cc9ae4fdda07bcf49e99f8224 . submittedOn, 49a39c4cc9ae4fdda07bcf49e99f8224 . domain, 49a39c4cc9ae4fdda07bcf49e99f8224 . eventConsumer, 49a39c4cc9ae4fdda07bcf49e99f8224 . eventType FROM ( SorDesignTime . businessEventConsumerRegistry_947a74dad4b64be9847d67f466d26f5e ) WHERE ( 49a39c4cc9ae4fdda07bcf49e99f8224 . systemData.ClientID ) = ( ? ) ) WHERE ( ( scoped_49a39c4cc9ae4fdda07bcf49e99f8224 . scoped_847e4dcfa1c54d72aad6dbeb231c46de ) = ( ? ) AND ( ( scoped_49a39c4cc9ae4fdda07bcf49e99f8224 . scoped_7b2f7b8da15646d1b75aa03901460eb2 ) = ( ? ) AND ( scoped_49a39c4cc9ae4fdda07bcf49e99f8224 . scoped_77a1b9308b384a9391b69d24335ba058 ) = ( ? ) ) )", }, { "{call px_cu_se_security_pg.sps_get_my_accounts_count(?, ?, ?, ?)}", @@ -1248,11 +1234,11 @@ func TestPGJSONOperators(t *testing.T) { }, { "select * from users where user.custom ?| array [ '1', '2' ]", - "select * from users where user.custom ?| array [?]", + "select * from users where user.custom ?| array [ ? ]", }, { "select * from users where user.custom ?& array [ '1', '2' ]", - "select * from users where user.custom ?& array [?]", + "select * from users where user.custom ?& array [ ? ]", }, } { t.Run("", func(t *testing.T) { @@ -1271,11 +1257,13 @@ func TestObfuscatorDBMSBehavior(t *testing.T) { assert := assert.New(t) for _, tt := range []struct { in, out string + tables string cfg SQLConfig }{ { "select * from ##ThisIsAGlobalTempTable where id = 1", "select * from ##ThisIsAGlobalTempTable where id = ?", + "", SQLConfig{ DBMS: DBMSSQLServer, }, @@ -1283,15 +1271,26 @@ func TestObfuscatorDBMSBehavior(t *testing.T) { { "select * from dbo.#ThisIsATempTable where id = 1", "select * from dbo.#ThisIsATempTable where id = ?", + "", SQLConfig{ DBMS: DBMSSQLServer, }, }, + { + "SELECT * from [db_users] where [id] = @1", + "SELECT * from db_users where id = @1", + "db_users", + SQLConfig{ + DBMS: DBMSSQLServer, + TableNames: true, + }, + }, } { t.Run(tt.cfg.DBMS, func(t *testing.T) { oq, err := NewObfuscator(Config{SQL: tt.cfg}).ObfuscateSQLString(tt.in) assert.NoError(err) assert.Equal(tt.out, oq.Query) + assert.Equal(tt.tables, oq.Metadata.TablesCSV) }) } } @@ -1300,109 +1299,109 @@ func TestSQLTokenizerIgnoreEscapeFalse(t *testing.T) { cases := []sqlTokenizerTestCase{ { `'Simple string'`, - "'Simple string'", + "Simple string", String, }, { `'String with backslash at end \'`, - "'String with backslash at end \\'", + "String with backslash at end '", LexError, }, { `'String with backslash \ in the middle'`, - "'String with backslash \\ in the middle'", + "String with backslash in the middle", String, }, { `'String with double-backslash at end \\'`, - "'String with double-backslash at end \\\\'", + "String with double-backslash at end \\", String, }, { `'String with double-backslash \\ in the middle'`, - "'String with double-backslash \\\\ in the middle'", + "String with double-backslash \\ in the middle", String, }, { `'String with backslash-escaped quote at end \''`, - "'String with backslash-escaped quote at end \\''", + "String with backslash-escaped quote at end '", String, }, { `'String with backslash-escaped quote \' in middle'`, - "'String with backslash-escaped quote \\' in middle'", + "String with backslash-escaped quote ' in middle", String, }, { `'String with backslash-escaped embedded string \'foo\' in the middle'`, - "'String with backslash-escaped embedded string \\'foo\\' in the middle'", + "String with backslash-escaped embedded string 'foo' in the middle", String, }, { `'String with backslash-escaped embedded string at end \'foo\''`, - "'String with backslash-escaped embedded string at end \\'foo\\''", + "String with backslash-escaped embedded string at end 'foo'", String, }, { `'String with double-backslash-escaped embedded string at the end \\'foo\\''`, - "'String with double-backslash-escaped embedded string at the end \\\\'", + "String with double-backslash-escaped embedded string at the end \\", String, }, { `'String with double-backslash-escaped embedded string \\'foo\\' in the middle'`, - "'String with double-backslash-escaped embedded string \\\\'", + "String with double-backslash-escaped embedded string \\", String, }, { `'String with backslash-escaped embedded string \'foo\' in the middle followed by one at the end \'`, - "'String with backslash-escaped embedded string \\'foo\\' in the middle followed by one at the end \\'", + "String with backslash-escaped embedded string 'foo' in the middle followed by one at the end '", LexError, }, { `'String with embedded string at end ''foo'''`, - "'String with embedded string at end ''foo'''", + "String with embedded string at end 'foo'", String, }, { `'String with embedded string ''foo'' in the middle'`, - "'String with embedded string ''foo'' in the middle'", + "String with embedded string 'foo' in the middle", String, }, { `'String with tab at end '`, - "'String with tab at end\t'", + "String with tab at end\t", String, }, { `'String with tab in the middle'`, - "'String with tab\tin the middle'", + "String with tab\tin the middle", String, }, { `'String with newline at the end '`, - "'String with newline at the end\n'", + "String with newline at the end\n", String, }, { `'String with newline in the middle'`, - "'String with newline\nin the middle'", + "String with newline\nin the middle", String, }, { `'Simple string missing closing quote`, - "'Simple string missing closing quote", + "Simple string missing closing quote", LexError, }, { `'String missing closing quote with backslash at end \`, - "'String missing closing quote with backslash at end \\", + "String missing closing quote with backslash at end ", LexError, }, { `'String with backslash \ in the middle missing closing quote`, - "'String with backslash \\ in the middle missing closing quote", + "String with backslash in the middle missing closing quote", LexError, }, { @@ -1413,7 +1412,7 @@ in the middle'`, // The following case will treat the final quote as unescaped { `'String missing closing quote with backslash-escaped quote at end \'`, - "'String missing closing quote with backslash-escaped quote at end \\'", + "String missing closing quote with backslash-escaped quote at end '", LexError, }, } @@ -1432,117 +1431,117 @@ func TestSQLTokenizerIgnoreEscapeTrue(t *testing.T) { cases := []sqlTokenizerTestCase{ { `'Simple string'`, - "'Simple string'", + "Simple string", String, }, { `'String with backslash at end \'`, - "'String with backslash at end \\'", + "String with backslash at end \\", String, }, { `'String with backslash \ in the middle'`, - "'String with backslash \\ in the middle'", + "String with backslash \\ in the middle", String, }, { `'String with double-backslash at end \\'`, - "'String with double-backslash at end \\\\'", + "String with double-backslash at end \\\\", String, }, { `'String with double-backslash \\ in the middle'`, - "'String with double-backslash \\\\ in the middle'", + "String with double-backslash \\\\ in the middle", String, }, // The following case will treat backslash as literal and double single quote as a single quote // thus missing the final single quote { - `'String with backslash followed by double-delimiter \''`, - "'String with backslash followed by double-delimiter \\''", + `'String with backslash-escaped quote at end \''`, + "String with backslash-escaped quote at end \\'", LexError, }, { `'String with backslash-escaped quote \' in middle'`, - "'String with backslash-escaped quote \\'", + "String with backslash-escaped quote \\", String, }, { `'String with backslash-escaped embedded string at the end \'foo\''`, - "'String with backslash-escaped embedded string at the end \\'", + "String with backslash-escaped embedded string at the end \\", String, }, { `'String with backslash-escaped embedded string \'foo\' in the middle'`, - "'String with backslash-escaped embedded string \\'", + "String with backslash-escaped embedded string \\", String, }, { `'String with double-backslash-escaped embedded string at end \\'foo\\''`, - "'String with double-backslash-escaped embedded string at end \\\\'", + "String with double-backslash-escaped embedded string at end \\\\", String, }, { `'String with double-backslash-escaped embedded string \\'foo\\' in the middle'`, - "'String with double-backslash-escaped embedded string \\\\'", + "String with double-backslash-escaped embedded string \\\\", String, }, { `'String with backslash-escaped embedded string \'foo\' in the middle followed by one at the end \'`, - "'String with backslash-escaped embedded string \\'", + "String with backslash-escaped embedded string \\", String, }, { `'String with embedded string at end ''foo'''`, - "'String with embedded string at end ''foo'''", + "String with embedded string at end 'foo'", String, }, { `'String with embedded string ''foo'' in the middle'`, - "'String with embedded string ''foo'' in the middle'", + "String with embedded string 'foo' in the middle", String, }, { `'String with tab at end '`, - "'String with tab at end\t'", + "String with tab at end\t", String, }, { `'String with tab in the middle'`, - "'String with tab\tin the middle'", + "String with tab\tin the middle", String, }, { `'String with newline at the end '`, - "'String with newline at the end\n'", + "String with newline at the end\n", String, }, { `'String with newline in the middle'`, - "'String with newline\nin the middle'", + "String with newline\nin the middle", String, }, { `'Simple string missing closing quote`, - `'Simple string missing closing quote`, + "Simple string missing closing quote", LexError, }, { `'String missing closing quote with backslash at end \`, - `'String missing closing quote with backslash at end \`, + "String missing closing quote with backslash at end \\", LexError, }, { `'String with backslash \ in the middle missing closing quote`, - `'String with backslash \ in the middle missing closing quote`, + "String with backslash \\ in the middle missing closing quote", LexError, }, // The following case will treat the final quote as unescaped { `'String missing closing quote with backslash-escaped quote at end \'`, - `'String missing closing quote with backslash-escaped quote at end \'`, + "String missing closing quote with backslash-escaped quote at end \\", String, }, } @@ -1945,9 +1944,8 @@ func TestCassQuantizer(t *testing.T) { "SELECT timestamp, processes FROM process_snapshot.minutely WHERE org_id = ? AND host = ? AND timestamp >= ? AND timestamp <= ?", }, { - `SELECT count(*) AS totcount FROM (SELECT "c1", "c2","c3","c4","c5","c6","c7","c8", "c9", "c10","c11","c12","c13","c14", "c15","c16","c17","c18", "c19","c20","c21","c22","c23", "c24","c25","c26", "c27" FROM (SELECT bar.y AS "c2", foo.x AS "c3", foo.z AS "c4", DECODE(foo.a, NULL,NULL, foo.a ||?|| foo.b) AS "c5" , foo.c AS "c6", bar.d AS "c1", bar.e AS "c7", bar.f AS "c8", bar.g AS "c9", TO_DATE(TO_CHAR(TO_DATE(bar.h,?),?),?) AS "c10", TO_DATE(TO_CHAR(TO_DATE(bar.i,?),?),?) AS "c11", CASE WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? ELSE NULL END AS "c12", DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?)),NULL) as "c13", bar.k AS "c14", bar.l ||?||bar.m AS "c15", DECODE(bar.n, NULL, NULL,bar.n ||?||bar.o) AS "c16", bar.p AS "c17", bar.q AS "c18", bar.r AS "c19", bar.s AS "c20", qux.a AS "c21", TO_CHAR(TO_DATE(qux.b,?),?) AS "c22", DECODE(qux.l,NULL,NULL, qux.l ||?||qux.m) AS "c23", bar.a AS "c24", TO_CHAR(TO_DATE(bar.j,?),?) AS "c25", DECODE(bar.c , ?,?,?, ?, bar.c ) AS "c26", bar.y AS y, bar.d, bar.d AS "c27" FROM blort.bar , ( SELECT * FROM (SELECT a,a,l,m,b,c, RANK() OVER (PARTITION BY c ORDER BY b DESC) RNK FROM blort.d WHERE y IN (:p)) WHERE RNK = ?) qux, blort.foo WHERE bar.c = qux.c(+) AND bar.x = foo.x AND bar.y IN (:p) and bar.x IN (:x)) ) -SELECT count(*) AS totcount FROM (SELECT "c1", "c2","c3","c4","c5","c6","c7","c8", "c9", "c10","c11","c12","c13","c14", "c15","c16","c17","c18", "c19","c20","c21","c22","c23", "c24","c25","c26", "c27" FROM (SELECT bar.y AS "c2", foo.x AS "c3", foo.z AS "c4", DECODE(foo.a, NULL,NULL, foo.a ||?|| foo.b) AS "c5" , foo.c AS "c6", bar.d AS "c1", bar.e AS "c7", bar.f AS "c8", bar.g AS "c9", TO_DATE(TO_CHAR(TO_DATE(bar.h,?),?),?) AS "c10", TO_DATE(TO_CHAR(TO_DATE(bar.i,?),?),?) AS "c11", CASE WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? ELSE NULL END AS "c12", DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?)),NULL) as "c13", bar.k AS "c14", bar.l ||?||bar.m AS "c15", DECODE(bar.n, NULL, NULL,bar.n ||?||bar.o) AS "c16", bar.p AS "c17", bar.q AS "c18", bar.r AS "c19", bar.s AS "c20", qux.a AS "c21", TO_CHAR(TO_DATE(qux.b,?),?) AS "c22", DECODE(qux.l,NULL,NULL, qux.l ||?||qux.m) AS "c23", bar.a AS "c24", TO_CHAR(TO_DATE(bar.j,?),?) AS "c25", DECODE(bar.c , ?,?,?, ?, bar.c ) AS "c26", bar.y AS y, bar.d, bar.d AS "c27" FROM blort.bar , ( SELECT * FROM (SELECT a,a,l,m,b,c, RANK() OVER (PARTITION BY c ORDER BY b DESC) RNK FROM blort.d WHERE y IN (:p)) WHERE RNK = ?) qux, blort.foo WHERE bar.c = qux.c(+) AND bar.x = foo.x AND bar.y IN (:p) and bar.x IN (:x)) )`, - `SELECT count ( * ) FROM ( SELECT "c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "c10", "c11", "c12", "c13", "c14", "c15", "c16", "c17", "c18", "c19", "c20", "c21", "c22", "c23", "c24", "c25", "c26", "c27" FROM ( SELECT bar.y, foo.x, foo.z, DECODE ( foo.a, ? foo.a | | ? | | foo.b ), foo.c, bar.d, bar.e, bar.f, bar.g, TO_DATE ( TO_CHAR ( TO_DATE ( bar.h, ? ) ) ), TO_DATE ( TO_CHAR ( TO_DATE ( bar.i, ? ) ) ), CASE WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? ELSE ? END, DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ), bar.k, bar.l | | ? | | bar.m, DECODE ( bar.n, ? bar.n | | ? | | bar.o ), bar.p, bar.q, bar.r, bar.s, qux.a, TO_CHAR ( TO_DATE ( qux.b, ? ) ), DECODE ( qux.l, ? qux.l | | ? | | qux.m ), bar.a, TO_CHAR ( TO_DATE ( bar.j, ? ) ), DECODE ( bar.c, ? bar.c ), bar.y, bar.d, bar.d FROM blort.bar, ( SELECT * FROM ( SELECT a, a, l, m, b, c, RANK ( ) OVER ( PARTITION BY c ORDER BY b DESC ) RNK FROM blort.d WHERE y IN ( :p ) ) WHERE RNK = ? ) qux, blort.foo WHERE bar.c = qux.c ( + ) AND bar.x = foo.x AND bar.y IN ( :p ) and bar.x IN ( :x ) ) ) SELECT count ( * ) FROM ( SELECT "c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "c10", "c11", "c12", "c13", "c14", "c15", "c16", "c17", "c18", "c19", "c20", "c21", "c22", "c23", "c24", "c25", "c26", "c27" FROM ( SELECT bar.y, foo.x, foo.z, DECODE ( foo.a, ? foo.a | | ? | | foo.b ), foo.c, bar.d, bar.e, bar.f, bar.g, TO_DATE ( TO_CHAR ( TO_DATE ( bar.h, ? ) ) ), TO_DATE ( TO_CHAR ( TO_DATE ( bar.i, ? ) ) ), CASE WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? ELSE ? END, DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ), bar.k, bar.l | | ? | | bar.m, DECODE ( bar.n, ? bar.n | | ? | | bar.o ), bar.p, bar.q, bar.r, bar.s, qux.a, TO_CHAR ( TO_DATE ( qux.b, ? ) ), DECODE ( qux.l, ? qux.l | | ? | | qux.m ), bar.a, TO_CHAR ( TO_DATE ( bar.j, ? ) ), DECODE ( bar.c, ? bar.c ), bar.y, bar.d, bar.d FROM blort.bar, ( SELECT * FROM ( SELECT a, a, l, m, b, c, RANK ( ) OVER ( PARTITION BY c ORDER BY b DESC ) RNK FROM blort.d WHERE y IN ( :p ) ) WHERE RNK = ? ) qux, blort.foo WHERE bar.c = qux.c ( + ) AND bar.x = foo.x AND bar.y IN ( :p ) and bar.x IN ( :x ) ) )`, + "SELECT count(*) AS totcount FROM (SELECT \"c1\", \"c2\",\"c3\",\"c4\",\"c5\",\"c6\",\"c7\",\"c8\", \"c9\", \"c10\",\"c11\",\"c12\",\"c13\",\"c14\", \"c15\",\"c16\",\"c17\",\"c18\", \"c19\",\"c20\",\"c21\",\"c22\",\"c23\", \"c24\",\"c25\",\"c26\", \"c27\" FROM (SELECT bar.y AS \"c2\", foo.x AS \"c3\", foo.z AS \"c4\", DECODE(foo.a, NULL,NULL, foo.a ||?|| foo.b) AS \"c5\" , foo.c AS \"c6\", bar.d AS \"c1\", bar.e AS \"c7\", bar.f AS \"c8\", bar.g AS \"c9\", TO_DATE(TO_CHAR(TO_DATE(bar.h,?),?),?) AS \"c10\", TO_DATE(TO_CHAR(TO_DATE(bar.i,?),?),?) AS \"c11\", CASE WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? ELSE NULL END AS \"c12\", DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?)),NULL) as \"c13\", bar.k AS \"c14\", bar.l ||?||bar.m AS \"c15\", DECODE(bar.n, NULL, NULL,bar.n ||?||bar.o) AS \"c16\", bar.p AS \"c17\", bar.q AS \"c18\", bar.r AS \"c19\", bar.s AS \"c20\", qux.a AS \"c21\", TO_CHAR(TO_DATE(qux.b,?),?) AS \"c22\", DECODE(qux.l,NULL,NULL, qux.l ||?||qux.m) AS \"c23\", bar.a AS \"c24\", TO_CHAR(TO_DATE(bar.j,?),?) AS \"c25\", DECODE(bar.c , ?,?,?, ?, bar.c ) AS \"c26\", bar.y AS y, bar.d, bar.d AS \"c27\" FROM blort.bar , ( SELECT * FROM (SELECT a,a,l,m,b,c, RANK() OVER (PARTITION BY c ORDER BY b DESC) RNK FROM blort.d WHERE y IN (:p)) WHERE RNK = ?) qux, blort.foo WHERE bar.c = qux.c(+) AND bar.x = foo.x AND bar.y IN (:p) and bar.x IN (:x)) )\nSELECT count(*) AS totcount FROM (SELECT \"c1\", \"c2\",\"c3\",\"c4\",\"c5\",\"c6\",\"c7\",\"c8\", \"c9\", \"c10\",\"c11\",\"c12\",\"c13\",\"c14\", \"c15\",\"c16\",\"c17\",\"c18\", \"c19\",\"c20\",\"c21\",\"c22\",\"c23\", \"c24\",\"c25\",\"c26\", \"c27\" FROM (SELECT bar.y AS \"c2\", foo.x AS \"c3\", foo.z AS \"c4\", DECODE(foo.a, NULL,NULL, foo.a ||?|| foo.b) AS \"c5\" , foo.c AS \"c6\", bar.d AS \"c1\", bar.e AS \"c7\", bar.f AS \"c8\", bar.g AS \"c9\", TO_DATE(TO_CHAR(TO_DATE(bar.h,?),?),?) AS \"c10\", TO_DATE(TO_CHAR(TO_DATE(bar.i,?),?),?) AS \"c11\", CASE WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? ELSE NULL END AS \"c12\", DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?)),NULL) as \"c13\", bar.k AS \"c14\", bar.l ||?||bar.m AS \"c15\", DECODE(bar.n, NULL, NULL,bar.n ||?||bar.o) AS \"c16\", bar.p AS \"c17\", bar.q AS \"c18\", bar.r AS \"c19\", bar.s AS \"c20\", qux.a AS \"c21\", TO_CHAR(TO_DATE(qux.b,?),?) AS \"c22\", DECODE(qux.l,NULL,NULL, qux.l ||?||qux.m) AS \"c23\", bar.a AS \"c24\", TO_CHAR(TO_DATE(bar.j,?),?) AS \"c25\", DECODE(bar.c , ?,?,?, ?, bar.c ) AS \"c26\", bar.y AS y, bar.d, bar.d AS \"c27\" FROM blort.bar , ( SELECT * FROM (SELECT a,a,l,m,b,c, RANK() OVER (PARTITION BY c ORDER BY b DESC) RNK FROM blort.d WHERE y IN (:p)) WHERE RNK = ?) qux, blort.foo WHERE bar.c = qux.c(+) AND bar.x = foo.x AND bar.y IN (:p) and bar.x IN (:x)) )", + "SELECT count ( * ) FROM ( SELECT c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27 FROM ( SELECT bar.y, foo.x, foo.z, DECODE ( foo.a, ? foo.a | | ? | | foo.b ), foo.c, bar.d, bar.e, bar.f, bar.g, TO_DATE ( TO_CHAR ( TO_DATE ( bar.h, ? ) ) ), TO_DATE ( TO_CHAR ( TO_DATE ( bar.i, ? ) ) ), CASE WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? ELSE ? END, DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ), bar.k, bar.l | | ? | | bar.m, DECODE ( bar.n, ? bar.n | | ? | | bar.o ), bar.p, bar.q, bar.r, bar.s, qux.a, TO_CHAR ( TO_DATE ( qux.b, ? ) ), DECODE ( qux.l, ? qux.l | | ? | | qux.m ), bar.a, TO_CHAR ( TO_DATE ( bar.j, ? ) ), DECODE ( bar.c, ? bar.c ), bar.y, bar.d, bar.d FROM blort.bar, ( SELECT * FROM ( SELECT a, a, l, m, b, c, RANK ( ) OVER ( PARTITION BY c ORDER BY b DESC ) RNK FROM blort.d WHERE y IN ( :p ) ) WHERE RNK = ? ) qux, blort.foo WHERE bar.c = qux.c ( + ) AND bar.x = foo.x AND bar.y IN ( :p ) and bar.x IN ( :x ) ) ) SELECT count ( * ) FROM ( SELECT c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27 FROM ( SELECT bar.y, foo.x, foo.z, DECODE ( foo.a, ? foo.a | | ? | | foo.b ), foo.c, bar.d, bar.e, bar.f, bar.g, TO_DATE ( TO_CHAR ( TO_DATE ( bar.h, ? ) ) ), TO_DATE ( TO_CHAR ( TO_DATE ( bar.i, ? ) ) ), CASE WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? ELSE ? END, DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ), bar.k, bar.l | | ? | | bar.m, DECODE ( bar.n, ? bar.n | | ? | | bar.o ), bar.p, bar.q, bar.r, bar.s, qux.a, TO_CHAR ( TO_DATE ( qux.b, ? ) ), DECODE ( qux.l, ? qux.l | | ? | | qux.m ), bar.a, TO_CHAR ( TO_DATE ( bar.j, ? ) ), DECODE ( bar.c, ? bar.c ), bar.y, bar.d, bar.d FROM blort.bar, ( SELECT * FROM ( SELECT a, a, l, m, b, c, RANK ( ) OVER ( PARTITION BY c ORDER BY b DESC ) RNK FROM blort.d WHERE y IN ( :p ) ) WHERE RNK = ? ) qux, blort.foo WHERE bar.c = qux.c ( + ) AND bar.x = foo.x AND bar.y IN ( :p ) and bar.x IN ( :x ) ) )", }, } diff --git a/pkg/obfuscate/sql_tokenizer.go b/pkg/obfuscate/sql_tokenizer.go index 14c09abcce2bb7..f9c1e39bc2bccf 100644 --- a/pkg/obfuscate/sql_tokenizer.go +++ b/pkg/obfuscate/sql_tokenizer.go @@ -41,7 +41,7 @@ const ( String DoubleQuotedString DollarQuotedString // https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-DOLLAR-QUOTING - DollarQuotedFunc // a dollar-quoted string delimited by the tag "$func$" (funcTag); gets special treatment when feature "dollar_quoted_func" is set + DollarQuotedFunc // a dollar-quoted string delimited by the tag "$func$"; gets special treatment when feature "dollar_quoted_func" is set Number BooleanLiteral ValueArg @@ -108,10 +108,6 @@ const ( FilteredBracketedIdentifier ) -// funcTag is a tag that delimits the start and end of an inline SQL function. A string delimited -// with this tag will be of type DollarQuotedFunc rather than DollarQuotedString. -const funcTag = "$func$" - var tokenKindStrings = map[TokenKind]string{ LexError: "LexError", ID: "ID", @@ -327,7 +323,12 @@ func (tkn *SQLTokenizer) Scan() (TokenKind, []byte) { } } fallthrough - case '=', ',', ';', '(', ')', '+', '*', '&', '|', '^', '[', ']': + case '=', ',', ';', '(', ')', '+', '*', '&', '|', '^', ']': + return TokenKind(ch), tkn.bytes() + case '[': + if tkn.cfg.DBMS == DBMSSQLServer { + return tkn.scanString(']', DoubleQuotedString) + } return TokenKind(ch), tkn.bytes() case '.': if isDigit(tkn.lastChar) { @@ -477,15 +478,13 @@ func (tkn *SQLTokenizer) Scan() (TokenKind, []byte) { kind, tok := tkn.scanDollarQuotedString() if kind == DollarQuotedFunc { // this is considered an embedded query, we should try and - // obfuscate it; temporarily remove the funcTag so we can - // obfuscate the query before replacing the tag below. - tok = tok[len(funcTag) : len(tok)-len(funcTag)] + // obfuscate it out, err := attemptObfuscation(NewSQLTokenizer(string(tok), tkn.literalEscapes, tkn.cfg)) if err != nil { // if we can't obfuscate it, treat it as a regular string return DollarQuotedString, tok } - tok = append(append([]byte(funcTag), []byte(out.Query)...), []byte(funcTag)...) + tok = append(append([]byte("$func$"), []byte(out.Query)...), []byte("$func$")...) } return kind, tok case '@': @@ -624,7 +623,12 @@ func (tkn *SQLTokenizer) scanDollarQuotedString() (TokenKind, []byte) { buf bytes.Buffer ) delim := tag - buf.Write(delim) + // on empty strings, tkn.scanString returns the delimiters + if string(delim) != "$$" { + // on non-empty strings, the delimiter is $tag$ + delim = append([]byte{'$'}, delim...) + delim = append(delim, '$') + } for { ch := tkn.lastChar tkn.advance() @@ -649,8 +653,7 @@ func (tkn *SQLTokenizer) scanDollarQuotedString() (TokenKind, []byte) { } buf.WriteRune(ch) } - buf.Write(delim) - if tkn.cfg.DollarQuotedFunc && string(delim) == funcTag { + if tkn.cfg.DollarQuotedFunc && string(delim) == "$func$" { return DollarQuotedFunc, buf.Bytes() } return DollarQuotedString, buf.Bytes() @@ -766,14 +769,12 @@ exit: func (tkn *SQLTokenizer) scanString(delim rune, kind TokenKind) (TokenKind, []byte) { buf := bytes.NewBuffer(tkn.buf[:0]) - buf.WriteRune(delim) for { ch := tkn.lastChar tkn.advance() if ch == delim { - if tkn.lastChar == delim && delim != '$' { + if tkn.lastChar == delim { // doubling a delimiter is the default way to embed the delimiter within a string - buf.WriteRune(ch) tkn.advance() } else { // a single delimiter denotes the end of the string @@ -784,7 +785,6 @@ func (tkn *SQLTokenizer) scanString(delim rune, kind TokenKind) (TokenKind, []by if !tkn.literalEscapes { // treat as an escape character - buf.WriteRune(ch) ch = tkn.lastChar tkn.advance() } @@ -795,7 +795,13 @@ func (tkn *SQLTokenizer) scanString(delim rune, kind TokenKind) (TokenKind, []by } buf.WriteRune(ch) } - buf.WriteRune(delim) + if kind == ID && buf.Len() == 0 || bytes.IndexFunc(buf.Bytes(), func(r rune) bool { return !unicode.IsSpace(r) }) == -1 { + // This string is an empty or white-space only identifier. + // We should keep the start and end delimiters in order to + // avoid creating invalid queries. + // See: https://github.com/DataDog/datadog-trace-agent/issues/316 + return kind, append(runeBytes(delim), runeBytes(delim)...) + } return kind, buf.Bytes() } @@ -893,6 +899,13 @@ func digitVal(ch rune) int { func isDigit(ch rune) bool { return '0' <= ch && ch <= '9' } +// runeBytes converts the given rune to a slice of bytes. +func runeBytes(r rune) []byte { + buf := make([]byte, utf8.UTFMax) + n := utf8.EncodeRune(buf, r) + return buf[:n] +} + // isValidCharAfterOperator returns true if c is a valid character after an operator func isValidCharAfterOperator(c rune) bool { return c == '(' || c == '`' || c == '\'' || c == '"' || c == '+' || c == '-' || unicode.IsSpace(c) || isLetter(c) || isDigit(c) diff --git a/pkg/obfuscate/testdata/json_tests.xml b/pkg/obfuscate/testdata/json_tests.xml index b6b7429b4c71d8..f3e34d4072e9a2 100644 --- a/pkg/obfuscate/testdata/json_tests.xml +++ b/pkg/obfuscate/testdata/json_tests.xml @@ -608,7 +608,7 @@ "id", "c" ], - "attached_condition": "( `sbtest`.`sbtest1`.`id` between ? and ? )" + "attached_condition": "( sbtest . sbtest1 . id between ? and ? )" } } } diff --git a/pkg/orchestrator/config/config.go b/pkg/orchestrator/config/config.go index 74eafc5ba0b66b..ceca95358d71f4 100644 --- a/pkg/orchestrator/config/config.go +++ b/pkg/orchestrator/config/config.go @@ -105,14 +105,7 @@ func (oc *OrchestratorConfig) Load() error { } // Orchestrator Explorer - if config.Datadog.GetBool(key(orchestratorNS, "enabled")) { - oc.OrchestrationCollectionEnabled = true - // Set clustername - hname, _ := hostname.Get(context.TODO()) - if clusterName := clustername.GetClusterName(context.TODO(), hname); clusterName != "" { - oc.KubeClusterName = clusterName - } - } + oc.OrchestrationCollectionEnabled, oc.KubeClusterName = IsOrchestratorEnabled() oc.CollectorDiscoveryEnabled = config.Datadog.GetBool(key(orchestratorNS, "collector_discovery.enabled")) oc.IsScrubbingEnabled = config.Datadog.GetBool(key(orchestratorNS, "container_scrubbing.enabled")) @@ -202,3 +195,15 @@ func setBoundedConfigIntValue(configKey string, upperBound int, setter func(v in setter(val) } + +// IsOrchestratorEnabled checks if orchestrator explorer features are enabled, it returns the boolean and the cluster name +func IsOrchestratorEnabled() (bool, string) { + enabled := config.Datadog.GetBool(key(orchestratorNS, "enabled")) + var clusterName string + if enabled { + // Set clustername + hname, _ := hostname.Get(context.TODO()) + clusterName = clustername.GetClusterName(context.TODO(), hname) + } + return enabled, clusterName +} diff --git a/pkg/orchestrator/config/config_test.go b/pkg/orchestrator/config/config_test.go index 0f581721f58117..a37e5901161972 100644 --- a/pkg/orchestrator/config/config_test.go +++ b/pkg/orchestrator/config/config_test.go @@ -122,7 +122,7 @@ func (suite *YamlConfigTestSuite) TestExtractOrchestratorEndpointsPrecedence() { } func (suite *YamlConfigTestSuite) TestEnvConfigDDURL() { - ddOrchestratorURL := "DD_ORCHESTRATOR_EXPLORER_ORCHESTRATOR_DD_URL" + ddOrchestratorURL := "DD_ORCHESTRATOR_URL" expectedValue := "123.datadoghq.com" suite.T().Setenv(ddOrchestratorURL, expectedValue) @@ -131,6 +131,50 @@ func (suite *YamlConfigTestSuite) TestEnvConfigDDURL() { suite.NoError(err) suite.Equal(expectedValue, orchestratorCfg.OrchestratorEndpoints[0].Endpoint.Path) + + // Override to make sure the precedence + ddOrchestratorURL = "DD_ORCHESTRATOR_EXPLORER_ORCHESTRATOR_DD_URL" + expectedValue = "456.datadoghq.com" + suite.T().Setenv(ddOrchestratorURL, expectedValue) + err = orchestratorCfg.Load() + suite.NoError(err) + + suite.Equal(expectedValue, orchestratorCfg.OrchestratorEndpoints[0].Endpoint.Path) +} + +func (suite *YamlConfigTestSuite) TestEnvConfigAdditionalEndpoints() { + suite.T().Setenv("DD_ORCHESTRATOR_ADDITIONAL_ENDPOINTS", `{"https://process1.com": ["key1"], "https://process2.com": ["key2"]}`) + + expected := map[string]string{ + "key1": "process1.com", + "key2": "process2.com", + } + + actualEndpoints := []apicfg.Endpoint{} + err := extractOrchestratorAdditionalEndpoints(&url.URL{}, &actualEndpoints) + suite.NoError(err) + + suite.Len(actualEndpoints, len(expected)) + for _, actual := range actualEndpoints { + suite.Equal(expected[actual.APIKey], actual.Endpoint.Hostname()) + } + + // Override to make sure the precedence + suite.T().Setenv("DD_ORCHESTRATOR_EXPLORER_ORCHESTRATOR_ADDITIONAL_ENDPOINTS", `{"https://orchestrator1.com": ["key1"], "https://orchestrator2.com": ["key2", "key3"]}`) + + expected = map[string]string{ + "key1": "orchestrator1.com", + "key2": "orchestrator2.com", + "key3": "orchestrator2.com", + } + + actualEndpoints = []apicfg.Endpoint{} + err = extractOrchestratorAdditionalEndpoints(&url.URL{}, &actualEndpoints) + suite.NoError(err) + suite.Len(actualEndpoints, len(expected)) + for _, actual := range actualEndpoints { + suite.Equal(expected[actual.APIKey], actual.Endpoint.Hostname()) + } } func (suite *YamlConfigTestSuite) TestEnvConfigMessageSize() { diff --git a/pkg/orchestrator/util.go b/pkg/orchestrator/util.go index 79b73bbcf841f3..b723ec7376c07e 100644 --- a/pkg/orchestrator/util.go +++ b/pkg/orchestrator/util.go @@ -62,6 +62,8 @@ const ( K8sCRD // K8sCR represents a Kubernetes CR K8sCR + // K8sVerticalPodAutoscaler represents a Kubernetes VerticalPod Autoscaler + K8sVerticalPodAutoscaler ) // NodeTypes returns the current existing NodesTypes as a slice to iterate over. @@ -88,6 +90,7 @@ func NodeTypes() []NodeType { K8sNamespace, K8sCR, K8sCRD, + K8sVerticalPodAutoscaler, } } @@ -135,6 +138,8 @@ func (n NodeType) String() string { return "CustomResourceDefinition" case K8sCR: return "CustomResource" + case K8sVerticalPodAutoscaler: + return "VerticalPodAutoscaler" case K8sUnsetType: return "UnsetType" default: @@ -167,6 +172,7 @@ func (n NodeType) Orchestrator() string { K8sCRD, K8sCR, K8sNamespace, + K8sVerticalPodAutoscaler, K8sUnsetType: return "k8s" default: diff --git a/pkg/otlp/collector.go b/pkg/otlp/collector.go index 6025abb43be5ad..6906f5ead7611d 100644 --- a/pkg/otlp/collector.go +++ b/pkg/otlp/collector.go @@ -13,11 +13,14 @@ import ( "fmt" "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/exporter" "go.opentelemetry.io/collector/exporter/loggingexporter" "go.opentelemetry.io/collector/exporter/otlpexporter" + "go.opentelemetry.io/collector/extension" + "go.opentelemetry.io/collector/otelcol" "go.opentelemetry.io/collector/processor/batchprocessor" + "go.opentelemetry.io/collector/receiver" "go.opentelemetry.io/collector/receiver/otlpreceiver" - "go.opentelemetry.io/collector/service" "go.uber.org/atomic" "go.uber.org/multierr" "go.uber.org/zap" @@ -42,19 +45,19 @@ func getComponents(s serializer.MetricSerializer) ( ) { var errs []error - extensions, err := component.MakeExtensionFactoryMap() + extensions, err := extension.MakeFactoryMap() if err != nil { errs = append(errs, err) } - receivers, err := component.MakeReceiverFactoryMap( + receivers, err := receiver.MakeFactoryMap( otlpreceiver.NewFactory(), ) if err != nil { errs = append(errs, err) } - exporters, err := component.MakeExporterFactoryMap( + exporters, err := exporter.MakeFactoryMap( otlpexporter.NewFactory(), serializerexporter.NewFactory(s), loggingexporter.NewFactory(), @@ -132,7 +135,7 @@ func (p *PipelineConfig) shouldSetLoggingSection() bool { // Pipeline is an OTLP pipeline. type Pipeline struct { - col *service.Collector + col *otelcol.Collector } // CollectorStatus is the status struct for an OTLP pipeline's collector @@ -164,7 +167,7 @@ func NewPipeline(cfg PipelineConfig, s serializer.MetricSerializer) (*Pipeline, return nil, fmt.Errorf("failed to build configuration provider: %w", err) } - col, err := service.New(service.CollectorSettings{ + col, err := otelcol.NewCollector(otelcol.CollectorSettings{ Factories: factories, BuildInfo: buildInfo, DisableGracefulShutdown: true, diff --git a/pkg/otlp/collector_test.go b/pkg/otlp/collector_test.go index 6ed27b5d827527..92f9eb69b31357 100644 --- a/pkg/otlp/collector_test.go +++ b/pkg/otlp/collector_test.go @@ -14,13 +14,12 @@ import ( "testing" "time" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "go.opentelemetry.io/collector/service" - "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/otlp/internal/testutil" "github.com/DataDog/datadog-agent/pkg/serializer" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.opentelemetry.io/collector/otelcol" ) func TestGetComponents(t *testing.T) { @@ -42,7 +41,7 @@ func AssertSucessfulRun(t *testing.T, pcfg PipelineConfig) { }() assert.Eventually(t, func() bool { - return service.Running == p.col.GetState() + return otelcol.StateRunning == p.col.GetState() }, time.Second*2, time.Millisecond*200) p.Stop() @@ -50,7 +49,7 @@ func AssertSucessfulRun(t *testing.T, pcfg PipelineConfig) { <-colDone assert.Eventually(t, func() bool { - return service.StateClosed == p.col.GetState() + return otelcol.StateClosed == p.col.GetState() }, time.Second*2, time.Millisecond*200) } @@ -96,13 +95,13 @@ func TestStartPipelineFromConfig(t *testing.T) { }{ { path: "receiver/noprotocols.yaml", - err: "receiver \"otlp\" has invalid configuration: must specify at least one protocol when using the OTLP receiver", + err: "invalid configuration: receivers::otlp: must specify at least one protocol when using the OTLP receiver", }, {path: "receiver/simple.yaml"}, {path: "receiver/advanced.yaml"}, { path: "receiver/typo.yaml", - err: "error decoding 'receivers': error reading receivers configuration for \"otlp\": 1 error(s) decoding:\n\n* 'protocols' has invalid keys: htttp", + err: "error decoding 'receivers': error reading configuration for \"otlp\": 1 error(s) decoding:\n\n* 'protocols' has invalid keys: htttp", }, } diff --git a/pkg/otlp/example/metric/README.md b/pkg/otlp/example/metric/README.md new file mode 100644 index 00000000000000..8a05d0e4de5aec --- /dev/null +++ b/pkg/otlp/example/metric/README.md @@ -0,0 +1,16 @@ +# OTLP Metric Exporter Sample App + +This sample application exports 1 count metric, 1 sum metric and 1 histogram metric via OTLP metric exporter. +It can be configured to export to either Datadog Agent OTLP metric intake or OpenTelemtry Collector OTLP receiver. + +## Usage + +``` +go build . +./metric [http | grpc] [endpoint] [delta | cumulative] +``` + +All arguments are optional. +- The 1st arg specifies which protocol to use, default is gRPC. +- The 2nd arg specifies the metric intake endpoint. Default is `localhost:4317` for gRPC and `localhost:4318` for HTTP. +- The 3rd arg specifies the metric aggregation temporality, default is `cumulative`. \ No newline at end of file diff --git a/pkg/otlp/example/metric/doc.go b/pkg/otlp/example/metric/doc.go new file mode 100644 index 00000000000000..f3292257edc599 --- /dev/null +++ b/pkg/otlp/example/metric/doc.go @@ -0,0 +1,7 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2021-present Datadog, Inc. + +// Package main provides a code sample of using otlpmetric exporter. +package main diff --git a/pkg/otlp/example/metric/go.mod b/pkg/otlp/example/metric/go.mod new file mode 100644 index 00000000000000..acb28f03dde6b1 --- /dev/null +++ b/pkg/otlp/example/metric/go.mod @@ -0,0 +1,30 @@ +module github.com/DataDog/datadog-agent/pkg/otlp/example/metric + +go 1.19 + +require ( + go.opentelemetry.io/otel v1.11.2 + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.34.0 + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.34.0 + go.opentelemetry.io/otel/metric v0.34.0 + go.opentelemetry.io/otel/sdk v1.11.2 + go.opentelemetry.io/otel/sdk/metric v0.34.0 +) + +require ( + github.com/cenkalti/backoff/v4 v4.2.0 // indirect + github.com/go-logr/logr v1.2.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/golang/protobuf v1.5.2 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.34.0 // indirect + go.opentelemetry.io/otel/trace v1.11.2 // indirect + go.opentelemetry.io/proto/otlp v0.19.0 // indirect + golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect + golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 // indirect + golang.org/x/text v0.4.0 // indirect + google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1 // indirect + google.golang.org/grpc v1.51.0 // indirect + google.golang.org/protobuf v1.28.1 // indirect +) diff --git a/pkg/otlp/example/metric/go.sum b/pkg/otlp/example/metric/go.sum new file mode 100644 index 00000000000000..5f1452a9c173a6 --- /dev/null +++ b/pkg/otlp/example/metric/go.sum @@ -0,0 +1,446 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= +github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 h1:BZHcxBETFHIdVyhyEfOvn/RdU/QGdLI4y34qQGjGWO0= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opentelemetry.io/otel v1.11.2 h1:YBZcQlsVekzFsFbjygXMOXSs6pialIZxcjfO/mBDmR0= +go.opentelemetry.io/otel v1.11.2/go.mod h1:7p4EUV+AqgdlNV9gL97IgUZiVR3yrFXYo53f9BM3tRI= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2 h1:htgM8vZIF8oPSCxa341e3IZ4yr/sKxgu8KZYllByiVY= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2/go.mod h1:rqbht/LlhVBgn5+k3M5QK96K5Xb0DvXpMJ5SFQpY6uw= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.34.0 h1:kpskzLZ60cJ48SJ4uxWa6waBL+4kSV6nVK8rP+QM8Wg= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.34.0/go.mod h1:4+x3i62TEegDHuzNva0bMcAN8oUi5w4liGb1d/VgPYo= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.34.0 h1:e7kFb4pJLbhJgAwUdoVTHzB9pGujs5O8/7gFyZL88fg= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.34.0/go.mod h1:3x00m9exjIbhK+zTO4MsCSlfbVmgvLP0wjDgDKa/8bw= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.34.0 h1:t4Ajxj8JGjxkqoBtbkCOY2cDUl9RwiNE9LPQavooi9U= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.34.0/go.mod h1:WO7omosl4P7JoanH9NgInxDxEn2F2M5YinIh8EyeT8w= +go.opentelemetry.io/otel/metric v0.34.0 h1:MCPoQxcg/26EuuJwpYN1mZTeCYAUGx8ABxfW07YkjP8= +go.opentelemetry.io/otel/metric v0.34.0/go.mod h1:ZFuI4yQGNCupurTXCwkeD/zHBt+C2bR7bw5JqUm/AP8= +go.opentelemetry.io/otel/sdk v1.11.2 h1:GF4JoaEx7iihdMFu30sOyRx52HDHOkl9xQ8SMqNXUiU= +go.opentelemetry.io/otel/sdk v1.11.2/go.mod h1:wZ1WxImwpq+lVRo4vsmSOxdd+xwoUJ6rqyLc3SyX9aU= +go.opentelemetry.io/otel/sdk/metric v0.34.0 h1:7ElxfQpXCFZlRTvVRTkcUvK8Gt5DC8QzmzsLsO2gdzo= +go.opentelemetry.io/otel/sdk/metric v0.34.0/go.mod h1:l4r16BIqiqPy5rd14kkxllPy/fOI4tWo1jkpD9Z3ffQ= +go.opentelemetry.io/otel/trace v1.11.2 h1:Xf7hWSF2Glv0DE3MH7fBHvtpSBsjcBUe5MYAmZM/+y0= +go.opentelemetry.io/otel/trace v1.11.2/go.mod h1:4N+yC7QEz7TTsG9BSRLNAa63eg5E06ObSbKPmxQ/pKA= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= +go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 h1:h+EGohizhe9XlX18rfpa8k8RAc5XyaeamM+0VHRd4lc= +golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1 h1:b9mVrqYfq3P4bCdaLg1qtBnPzUYgglsIdjZkL/fQVOE= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/pkg/otlp/example/metric/main.go b/pkg/otlp/example/metric/main.go new file mode 100644 index 00000000000000..0c3e55b9cafd9d --- /dev/null +++ b/pkg/otlp/example/metric/main.go @@ -0,0 +1,148 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2021-present Datadog, Inc. + +package main + +import ( + "context" + "log" + "os" + "time" + + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc" + "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp" + "go.opentelemetry.io/otel/metric/global" + "go.opentelemetry.io/otel/metric/unit" + "go.opentelemetry.io/otel/sdk/instrumentation" + "go.opentelemetry.io/otel/sdk/metric" + "go.opentelemetry.io/otel/sdk/metric/metricdata" + "go.opentelemetry.io/otel/sdk/resource" + semconv "go.opentelemetry.io/otel/semconv/v1.4.0" +) + +var ( + now = time.Now() + + res = resource.NewSchemaless( + semconv.ServiceNameKey.String("otlpmetric-example"), + ) + + min = 0.6 + max = 77.7 + + mockData = metricdata.ResourceMetrics{ + Resource: res, + ScopeMetrics: []metricdata.ScopeMetrics{ + { + Scope: instrumentation.Scope{Name: "example", Version: "v0.0.1"}, + Metrics: []metricdata.Metrics{ + { + Name: "otlp.test.request", + Description: "Number of requests received", + Unit: unit.Dimensionless, + Data: metricdata.Sum[int64]{ + IsMonotonic: true, + Temporality: metricdata.DeltaTemporality, + DataPoints: []metricdata.DataPoint[int64]{ + { + Attributes: attribute.NewSet(attribute.String("server", "central")), + StartTime: now, + Time: now.Add(1 * time.Second), + Value: 5, + }, + }, + }, + }, + { + Name: "otlp.test.latency", + Description: "Time spend processing received requests", + Unit: unit.Milliseconds, + Data: metricdata.Histogram{ + Temporality: metricdata.DeltaTemporality, + DataPoints: []metricdata.HistogramDataPoint{ + { + Attributes: attribute.NewSet(attribute.String("server", "central")), + StartTime: now, + Time: now.Add(1 * time.Second), + Count: 10, + Bounds: []float64{1, 5, 10}, + BucketCounts: []uint64{1, 3, 6, 0}, + Sum: 57, + Min: &min, + Max: &max, + }, + }, + }, + }, + { + Name: "otlp.test.temperature", + Description: "CPU global temperature", + Unit: unit.Unit("cel(1 K)"), + Data: metricdata.Gauge[float64]{ + DataPoints: []metricdata.DataPoint[float64]{ + { + Attributes: attribute.NewSet(attribute.String("server", "central")), + Time: now.Add(1 * time.Second), + Value: 32.4, + }, + }, + }, + }, + }, + }, + }, + } +) + +func deltaSelector(metric.InstrumentKind) metricdata.Temporality { + return metricdata.DeltaTemporality +} + +func main() { + var protocol string + if len(os.Args) > 1 { + protocol = os.Args[1] + } + grpcExpOpt := []otlpmetricgrpc.Option{otlpmetricgrpc.WithInsecure()} + httpExpOpt := []otlpmetrichttp.Option{otlpmetrichttp.WithInsecure()} + if len(os.Args) > 2 { + grpcExpOpt = append(grpcExpOpt, otlpmetricgrpc.WithEndpoint(os.Args[2])) + httpExpOpt = append(httpExpOpt, otlpmetrichttp.WithEndpoint(os.Args[2])) + } + if len(os.Args) > 3 && os.Args[3] == "delta" { + grpcExpOpt = append(grpcExpOpt, otlpmetricgrpc.WithTemporalitySelector(deltaSelector)) + httpExpOpt = append(httpExpOpt, otlpmetrichttp.WithTemporalitySelector(deltaSelector)) + } + + ctx := context.Background() + var exp metric.Exporter + var err error + if protocol == "http" { + exp, err = otlpmetrichttp.New(ctx, httpExpOpt...) + } else { + exp, err = otlpmetricgrpc.New(ctx, grpcExpOpt...) + } + if err != nil { + log.Fatal(err) + } + + sdk := metric.NewMeterProvider(metric.WithReader(metric.NewPeriodicReader(exp))) + global.SetMeterProvider(sdk) + + // This is where the sdk would be used to create a Meter and from that + // instruments that would make measurments of your code. To simulate that + // behavior, call export directly with mocked data. + err = exp.Export(ctx, mockData) + if err != nil { + panic(err) + } + + // Ensure the periodic reader is cleaned up by shutting down the sdk. + err = sdk.Shutdown(ctx) + if err != nil { + panic(err) + } +} diff --git a/pkg/otlp/internal/configutils/utils.go b/pkg/otlp/internal/configutils/utils.go index 68084f43e7d953..b2f90bd1334476 100644 --- a/pkg/otlp/internal/configutils/utils.go +++ b/pkg/otlp/internal/configutils/utils.go @@ -12,7 +12,7 @@ import ( "strings" "go.opentelemetry.io/collector/confmap" - "go.opentelemetry.io/collector/service" + "go.opentelemetry.io/collector/otelcol" "gopkg.in/yaml.v2" ) @@ -62,9 +62,9 @@ func (m *mapProvider) Shutdown(context.Context) error { } // NewConfigProviderFromMap creates a service.ConfigProvider with a single constant provider `map`, built from a given *confmap.Conf. -func NewConfigProviderFromMap(cfg *confmap.Conf) service.ConfigProvider { +func NewConfigProviderFromMap(cfg *confmap.Conf) otelcol.ConfigProvider { provider := &mapProvider{cfg} - settings := service.ConfigProviderSettings{ + settings := otelcol.ConfigProviderSettings{ ResolverSettings: confmap.ResolverSettings{ URIs: []string{mapLocation}, Providers: map[string]confmap.Provider{ @@ -72,7 +72,7 @@ func NewConfigProviderFromMap(cfg *confmap.Conf) service.ConfigProvider { }, Converters: []confmap.Converter{}, }} - cp, err := service.NewConfigProvider(settings) + cp, err := otelcol.NewConfigProvider(settings) if err != nil { panic(err) } diff --git a/pkg/otlp/internal/configutils/utils_test.go b/pkg/otlp/internal/configutils/utils_test.go index ecc2adcbef65cd..0a05ceddd20b16 100644 --- a/pkg/otlp/internal/configutils/utils_test.go +++ b/pkg/otlp/internal/configutils/utils_test.go @@ -13,30 +13,33 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/confmap" "go.opentelemetry.io/collector/confmap/converter/expandconverter" "go.opentelemetry.io/collector/confmap/provider/envprovider" "go.opentelemetry.io/collector/confmap/provider/fileprovider" "go.opentelemetry.io/collector/confmap/provider/yamlprovider" + "go.opentelemetry.io/collector/exporter" "go.opentelemetry.io/collector/exporter/otlpexporter" + "go.opentelemetry.io/collector/extension" + "go.opentelemetry.io/collector/otelcol" + "go.opentelemetry.io/collector/processor" + "go.opentelemetry.io/collector/receiver" "go.opentelemetry.io/collector/receiver/otlpreceiver" - "go.opentelemetry.io/collector/service" ) const testPath = "./testdata/pipeline.yaml" -func buildTestFactories(t *testing.T) component.Factories { - extensions, err := component.MakeExtensionFactoryMap() +func buildTestFactories(t *testing.T) otelcol.Factories { + extensions, err := extension.MakeFactoryMap() require.NoError(t, err) - processors, err := component.MakeProcessorFactoryMap() + processors, err := processor.MakeFactoryMap() require.NoError(t, err) - exporters, err := component.MakeExporterFactoryMap(otlpexporter.NewFactory()) + exporters, err := exporter.MakeFactoryMap(otlpexporter.NewFactory()) require.NoError(t, err) - receivers, err := component.MakeReceiverFactoryMap(otlpreceiver.NewFactory()) + receivers, err := receiver.MakeFactoryMap(otlpreceiver.NewFactory()) require.NoError(t, err) - return component.Factories{ + return otelcol.Factories{ Extensions: extensions, Receivers: receivers, Processors: processors, @@ -53,14 +56,14 @@ func TestNewConfigProviderFromMap(t *testing.T) { mapProvider := NewConfigProviderFromMap(cfgMap) // build default provider from same data - settings := service.ConfigProviderSettings{ + settings := otelcol.ConfigProviderSettings{ ResolverSettings: confmap.ResolverSettings{ URIs: []string{fmt.Sprintf("file:%s", testPath)}, Providers: makeConfigMapProviderMap(fileprovider.New(), envprovider.New(), yamlprovider.New()), Converters: []confmap.Converter{expandconverter.New()}, }, } - defaultProvider, err := service.NewConfigProvider(settings) + defaultProvider, err := otelcol.NewConfigProvider(settings) require.NoError(t, err) // Get config.Config from both diff --git a/pkg/otlp/internal/serializerexporter/consumer_test.go b/pkg/otlp/internal/serializerexporter/consumer_test.go index 0495d97fefdc07..92455ed1023a6a 100644 --- a/pkg/otlp/internal/serializerexporter/consumer_test.go +++ b/pkg/otlp/internal/serializerexporter/consumer_test.go @@ -207,3 +207,11 @@ func (m *MockSerializer) SendOrchestratorManifests(_ []serializer.ProcessMessage func (m *MockSerializer) SendContainerLifecycleEvent(_ []serializer.ContainerLifecycleMessage, _ string) error { return nil } + +func (m *MockSerializer) SendContainerImage(_ []serializer.ContainerImageMessage, _ string) error { + return nil +} + +func (m *MockSerializer) SendSBOM(_ []serializer.SBOMMessage, _ string) error { + return nil +} diff --git a/pkg/otlp/internal/serializerexporter/exporter.go b/pkg/otlp/internal/serializerexporter/exporter.go index c9f93701399236..d109e59ab33d15 100644 --- a/pkg/otlp/internal/serializerexporter/exporter.go +++ b/pkg/otlp/internal/serializerexporter/exporter.go @@ -10,7 +10,6 @@ import ( "fmt" "go.opentelemetry.io/collector/component" - "go.opentelemetry.io/collector/config" "go.opentelemetry.io/collector/exporter/exporterhelper" "go.opentelemetry.io/collector/pdata/pmetric" "go.uber.org/zap" @@ -23,11 +22,10 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/hostname" ) -var _ component.ExporterConfig = (*exporterConfig)(nil) +var _ component.Config = (*exporterConfig)(nil) -func newDefaultConfig() component.ExporterConfig { +func newDefaultConfig() component.Config { return &exporterConfig{ - ExporterSettings: config.NewExporterSettings(component.NewID(TypeStr)), // Disable timeout; we don't really do HTTP requests on the ConsumeMetrics call. TimeoutSettings: exporterhelper.TimeoutSettings{Timeout: 0}, // TODO (AP-1294): Fine-tune queue settings and look into retry settings. diff --git a/pkg/otlp/internal/serializerexporter/exporter_test.go b/pkg/otlp/internal/serializerexporter/exporter_test.go index 90665e63d44f6a..59847340440790 100644 --- a/pkg/otlp/internal/serializerexporter/exporter_test.go +++ b/pkg/otlp/internal/serializerexporter/exporter_test.go @@ -77,6 +77,12 @@ func Test_ConsumeMetrics_Tags(t *testing.T) { n.SetIntValue(777) return newMetrics(histogramMetricName, h, numberMetricName, n) }, + setConfig: func(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + t.Cleanup(func() { + defer config.SetDetectedFeatures(nil) + }) + }, wantSketchTags: tagset.NewCompositeTags([]string{}, nil), wantSerieTags: tagset.NewCompositeTags([]string{}, nil), }, @@ -101,10 +107,10 @@ func Test_ConsumeMetrics_Tags(t *testing.T) { return newMetrics(histogramMetricName, h, numberMetricName, n) }, setConfig: func(t *testing.T) { - config.Datadog.SetDefault("eks_fargate", true) + config.SetDetectedFeatures(config.FeatureMap{config.EKSFargate: struct{}{}}) config.Datadog.SetDefault("tags", []string{"serverless_tag1:test1", "serverless_tag2:test2", "serverless_tag3:test3"}) t.Cleanup(func() { - config.Datadog.SetDefault("eks_fargate", false) + defer config.SetDetectedFeatures(nil) config.Datadog.SetDefault("tags", []string{}) }) }, diff --git a/pkg/otlp/internal/serializerexporter/factory.go b/pkg/otlp/internal/serializerexporter/factory.go index 252253487d13cf..871d8e4c9ef134 100644 --- a/pkg/otlp/internal/serializerexporter/factory.go +++ b/pkg/otlp/internal/serializerexporter/factory.go @@ -10,6 +10,7 @@ import ( "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry" "go.opentelemetry.io/collector/component" + exp "go.opentelemetry.io/collector/exporter" "go.opentelemetry.io/collector/exporter/exporterhelper" "github.com/DataDog/datadog-agent/pkg/serializer" @@ -26,25 +27,25 @@ type factory struct { } // NewFactory creates a new serializer exporter factory. -func NewFactory(s serializer.MetricSerializer) component.ExporterFactory { +func NewFactory(s serializer.MetricSerializer) exp.Factory { f := &factory{s} - return component.NewExporterFactory( + return exp.NewFactory( TypeStr, newDefaultConfig, - component.WithMetricsExporter(f.createMetricExporter, stability), + exp.WithMetrics(f.createMetricExporter, stability), ) } -func (f *factory) createMetricExporter(ctx context.Context, params component.ExporterCreateSettings, c component.ExporterConfig) (component.MetricsExporter, error) { +func (f *factory) createMetricExporter(ctx context.Context, params exp.CreateSettings, c component.Config) (exp.Metrics, error) { cfg := c.(*exporterConfig) - exp, err := newExporter(params.Logger, f.s, cfg) + newExp, err := newExporter(params.Logger, f.s, cfg) if err != nil { return nil, err } - exporter, err := exporterhelper.NewMetricsExporter(ctx, params, cfg, exp.ConsumeMetrics, + exporter, err := exporterhelper.NewMetricsExporter(ctx, params, cfg, newExp.ConsumeMetrics, exporterhelper.WithQueue(cfg.QueueSettings), exporterhelper.WithTimeout(cfg.TimeoutSettings), ) diff --git a/pkg/otlp/internal/serializerexporter/factory_test.go b/pkg/otlp/internal/serializerexporter/factory_test.go index cb94602a19bd57..90ae564e08d471 100644 --- a/pkg/otlp/internal/serializerexporter/factory_test.go +++ b/pkg/otlp/internal/serializerexporter/factory_test.go @@ -12,8 +12,10 @@ import ( "context" "testing" + "github.com/DataDog/datadog-agent/pkg/config" "github.com/stretchr/testify/assert" "go.opentelemetry.io/collector/component/componenttest" + "go.opentelemetry.io/collector/exporter/exportertest" "github.com/DataDog/datadog-agent/pkg/serializer" ) @@ -27,22 +29,28 @@ func TestNewFactory(t *testing.T) { } func TestNewMetricsExporter(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + factory := NewFactory(&serializer.MockSerializer{}) cfg := factory.CreateDefaultConfig() - set := componenttest.NewNopExporterCreateSettings() + set := exportertest.NewNopCreateSettings() exp, err := factory.CreateMetricsExporter(context.Background(), set, cfg) assert.NoError(t, err) assert.NotNil(t, exp) } func TestNewMetricsExporterInvalid(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + factory := NewFactory(&serializer.MockSerializer{}) cfg := factory.CreateDefaultConfig() expCfg := cfg.(*exporterConfig) expCfg.Metrics.HistConfig.Mode = "InvalidMode" - set := componenttest.NewNopExporterCreateSettings() + set := exportertest.NewNopCreateSettings() _, err := factory.CreateMetricsExporter(context.Background(), set, cfg) assert.Error(t, err) } @@ -51,7 +59,7 @@ func TestNewTracesExporter(t *testing.T) { factory := NewFactory(&serializer.MockSerializer{}) cfg := factory.CreateDefaultConfig() - set := componenttest.NewNopExporterCreateSettings() + set := exportertest.NewNopCreateSettings() _, err := factory.CreateTracesExporter(context.Background(), set, cfg) assert.Error(t, err) } @@ -60,7 +68,7 @@ func TestNewLogsExporter(t *testing.T) { factory := NewFactory(&serializer.MockSerializer{}) cfg := factory.CreateDefaultConfig() - set := componenttest.NewNopExporterCreateSettings() + set := exportertest.NewNopCreateSettings() _, err := factory.CreateLogsExporter(context.Background(), set, cfg) assert.Error(t, err) } diff --git a/pkg/otlp/map_provider.go b/pkg/otlp/map_provider.go index 0b3fe6a73add1d..62d936098aec88 100644 --- a/pkg/otlp/map_provider.go +++ b/pkg/otlp/map_provider.go @@ -13,7 +13,7 @@ import ( "strings" "go.opentelemetry.io/collector/confmap" - "go.opentelemetry.io/collector/service" + "go.opentelemetry.io/collector/otelcol" "go.uber.org/multierr" "github.com/DataDog/datadog-agent/pkg/otlp/internal/configutils" @@ -154,7 +154,7 @@ func buildMap(cfg PipelineConfig) (*confmap.Conf, error) { } // newMapProvider creates a service.ConfigProvider with the fixed configuration. -func newMapProvider(cfg PipelineConfig) (service.ConfigProvider, error) { +func newMapProvider(cfg PipelineConfig) (otelcol.ConfigProvider, error) { cfgMap, err := buildMap(cfg) if err != nil { return nil, err diff --git a/pkg/otlp/model/go.mod b/pkg/otlp/model/go.mod index 991121ea93728d..4cfbfc0b26b8e7 100644 --- a/pkg/otlp/model/go.mod +++ b/pkg/otlp/model/go.mod @@ -14,8 +14,8 @@ require ( github.com/golang/protobuf v1.5.2 github.com/patrickmn/go-cache v2.1.0+incompatible github.com/stretchr/testify v1.8.1 - go.opentelemetry.io/collector/pdata v0.66.0 - go.opentelemetry.io/collector/semconv v0.66.0 + go.opentelemetry.io/collector/pdata v1.0.0-rc2 + go.opentelemetry.io/collector/semconv v0.68.0 go.uber.org/zap v1.23.0 ) @@ -31,9 +31,9 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect github.com/tinylib/msgp v1.1.6 // indirect go.uber.org/atomic v1.10.0 // indirect - go.uber.org/multierr v1.8.0 // indirect + go.uber.org/multierr v1.9.0 // indirect golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect - golang.org/x/sys v0.2.0 // indirect + golang.org/x/sys v0.3.0 // indirect golang.org/x/text v0.4.0 // indirect google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd // indirect google.golang.org/grpc v1.51.0 // indirect diff --git a/pkg/otlp/model/go.sum b/pkg/otlp/model/go.sum index 256f0c9998fdae..352cca016c330f 100644 --- a/pkg/otlp/model/go.sum +++ b/pkg/otlp/model/go.sum @@ -93,17 +93,16 @@ github.com/vmihailenco/msgpack/v4 v4.3.12 h1:07s4sz9IReOgdikxLTKNbBdqDMLsjPKXwvC github.com/vmihailenco/tagparser v0.1.2 h1:gnjoVuB/kljJ5wICEEOpx98oXMWPLj22G67Vbd1qPqc= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -go.opentelemetry.io/collector/pdata v0.66.0 h1:UdE5U6MsDNzuiWaXdjGx2lC3ElVqWmN/hiUE8vyvSuM= -go.opentelemetry.io/collector/pdata v0.66.0/go.mod h1:pqyaznLzk21m+1KL6fwOsRryRELL+zNM0qiVSn0MbVc= -go.opentelemetry.io/collector/semconv v0.66.0 h1:gz4fYzOVOt1EQCcOL6pbSmTRj93pZErjHD+H100pH+4= -go.opentelemetry.io/collector/semconv v0.66.0/go.mod h1:5o9yhOa+ABt7g2E5JABDxGZ1PQPbtfxrKNbYn+LOTXU= +go.opentelemetry.io/collector/pdata v1.0.0-rc2 h1:sNWuA5wlrT578sv+DhADQ3DCRFG+5+H0D2xCHtQmnis= +go.opentelemetry.io/collector/pdata v1.0.0-rc2/go.mod h1:3gknzI1BqPVbEprOIbtaPQgPAYvjRf8kdkpGMJjv14E= +go.opentelemetry.io/collector/semconv v0.68.0 h1:DUDowH6l4OFlecQg8zyffTmUrhu3N9qwr3wtS9Oy6pE= +go.opentelemetry.io/collector/semconv v0.68.0/go.mod h1:5o9yhOa+ABt7g2E5JABDxGZ1PQPbtfxrKNbYn+LOTXU= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -145,8 +144,8 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -205,7 +204,6 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/pkg/pidfile/pidfile_windows.go b/pkg/pidfile/pidfile_windows.go index 8b121db87839e3..37a7a0e4d26ea4 100644 --- a/pkg/pidfile/pidfile_windows.go +++ b/pkg/pidfile/pidfile_windows.go @@ -8,30 +8,12 @@ package pidfile import ( "path/filepath" - "golang.org/x/sys/windows" - "github.com/DataDog/datadog-agent/pkg/util/winutil" ) -const ( - processQueryLimitedInformation = 0x1000 - - stillActive = 259 -) - // isProcess checks to see if a given pid is currently valid in the process table func isProcess(pid int) bool { - h, err := windows.OpenProcess(processQueryLimitedInformation, false, uint32(pid)) - if err != nil { - return false - } - var c uint32 - err = windows.GetExitCodeProcess(h, &c) - windows.Close(h) - if err != nil { - return c == stillActive - } - return true + return winutil.IsProcess(pid) } // Path returns a suitable location for the pidfile under Windows diff --git a/pkg/process/checks/checks.go b/pkg/process/checks/checks.go index fe9c8962021c44..88f5b1be14e9b9 100644 --- a/pkg/process/checks/checks.go +++ b/pkg/process/checks/checks.go @@ -7,40 +7,86 @@ package checks import ( model "github.com/DataDog/agent-payload/v5/process" +) - "github.com/DataDog/datadog-agent/pkg/process/config" +// Name for check performed by process-agent or system-probe +const ( + ProcessCheckName = "process" + RTProcessCheckName = "rtprocess" + ContainerCheckName = "container" + RTContainerCheckName = "rtcontainer" + ConnectionsCheckName = "connections" + PodCheckName = "pod" + PodCheckManifestName = "pod_manifest" + DiscoveryCheckName = "process_discovery" + ProcessEventsCheckName = "process_events" ) +// SysProbeConfig provides access to system probe configuration +type SysProbeConfig struct { + MaxConnsPerMessage int + // System probe collection configuration + SystemProbeAddress string +} + // Check is an interface for Agent checks that collect data. Each check returns // a specific MessageBody type that will be published to the intake endpoint or // processed in another way (e.g. printed for debugging). // Before checks are used you must called Init. type Check interface { - Init(cfg *config.AgentConfig, info *model.SystemInfo) + // Name returns the name of the check Name() string - RealTime() bool - Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageBody, error) + // IsEnabled returns true if the check is enabled by configuration + IsEnabled() bool + // Realtime indicates if this check only runs in real-time mode + Realtime() bool + // Init initializes the check + Init(syscfg *SysProbeConfig, info *HostInfo) error + // SupportsRunOptions returns true if the check supports RunOptions + SupportsRunOptions() bool + // Run runs the check + Run(nextGroupID func() int32, options *RunOptions) (RunResult, error) + // Cleanup performs resource cleanup after check is no longer running Cleanup() + // ShouldSaveLastRun saves results of the last run ShouldSaveLastRun() bool } // RunOptions provides run options for checks type RunOptions struct { RunStandard bool - RunRealTime bool + RunRealtime bool } // RunResult is a result for a check run -type RunResult struct { +type RunResult interface { + Payloads() []model.MessageBody + RealtimePayloads() []model.MessageBody +} + +// StandardRunResult is a run result containing payloads for standard run +type StandardRunResult []model.MessageBody + +func (p StandardRunResult) Payloads() []model.MessageBody { + return p +} + +func (p StandardRunResult) RealtimePayloads() []model.MessageBody { + return nil +} + +// CombinedRunResult is a run result containing payloads for standard and realtime runs +type CombinedRunResult struct { Standard []model.MessageBody - RealTime []model.MessageBody + Realtime []model.MessageBody } -// CheckWithRealTime provides an extended interface for running composite checks -type CheckWithRealTime interface { - Check - RealTimeName() string - RunWithOptions(cfg *config.AgentConfig, nextGroupID func() int32, options RunOptions) (*RunResult, error) +func (p CombinedRunResult) Payloads() []model.MessageBody { + return p.Standard +} + +func (p CombinedRunResult) RealtimePayloads() []model.MessageBody { + return p.Realtime } // All is a list of all runnable checks. Putting a check in here does not guarantee it will be run, @@ -55,3 +101,15 @@ var All = []Check{ ProcessDiscovery, ProcessEvents, } + +// RTName returns the name of the corresponding realtime check +func RTName(checkName string) string { + switch checkName { + case ProcessCheckName: + return RTProcessCheckName + case ContainerCheckName: + return RTContainerCheckName + default: + return "" + } +} diff --git a/pkg/process/checks/container.go b/pkg/process/checks/container.go index b6929ca95b6dd7..28c65fc6b9763e 100644 --- a/pkg/process/checks/container.go +++ b/pkg/process/checks/container.go @@ -12,7 +12,6 @@ import ( model "github.com/DataDog/agent-payload/v5/process" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/statsd" "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/util/cloudproviders" @@ -30,7 +29,7 @@ var Container = &ContainerCheck{} type ContainerCheck struct { sync.Mutex - sysInfo *model.SystemInfo + hostInfo *HostInfo containerProvider util.ContainerProvider lastRates map[string]*util.ContainerRateMetrics networkID string @@ -41,9 +40,9 @@ type ContainerCheck struct { } // Init initializes a ContainerCheck instance. -func (c *ContainerCheck) Init(cfg *config.AgentConfig, info *model.SystemInfo) { +func (c *ContainerCheck) Init(_ *SysProbeConfig, info *HostInfo) error { c.containerProvider = util.GetSharedContainerProvider() - c.sysInfo = info + c.hostInfo = info networkID, err := cloudproviders.GetNetworkID(context.TODO()) if err != nil { @@ -53,20 +52,32 @@ func (c *ContainerCheck) Init(cfg *config.AgentConfig, info *model.SystemInfo) { c.containerFailedLogLimit = util.NewLogLimit(10, time.Minute*10) c.maxBatchSize = getMaxBatchSize() + return nil +} + +// IsEnabled returns true if the check is enabled by configuration +func (c *ContainerCheck) IsEnabled() bool { + // TODO - move config check logic here + return true +} + +// SupportsRunOptions returns true if the check supports RunOptions +func (c *ContainerCheck) SupportsRunOptions() bool { + return false } // Name returns the name of the ProcessCheck. -func (c *ContainerCheck) Name() string { return config.ContainerCheckName } +func (c *ContainerCheck) Name() string { return ContainerCheckName } -// RealTime indicates if this check only runs in real-time mode. -func (c *ContainerCheck) RealTime() bool { return false } +// Realtime indicates if this check only runs in real-time mode. +func (c *ContainerCheck) Realtime() bool { return false } // ShouldSaveLastRun indicates if the output from the last run should be saved for use in flares func (c *ContainerCheck) ShouldSaveLastRun() bool { return true } // Run runs the ContainerCheck to collect a list of running ctrList and the // stats for each container. -func (c *ContainerCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageBody, error) { +func (c *ContainerCheck) Run(nextGroupID func() int32, options *RunOptions) (RunResult, error) { c.Lock() defer c.Unlock() startTime := time.Now() @@ -96,22 +107,23 @@ func (c *ContainerCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.Me } chunked := chunkContainers(containers, groupSize) messages := make([]model.MessageBody, 0, groupSize) + groupID := nextGroupID() for i := 0; i < groupSize; i++ { messages = append(messages, &model.CollectorContainer{ - HostName: cfg.HostName, + HostName: c.hostInfo.HostName, NetworkId: c.networkID, - Info: c.sysInfo, + Info: c.hostInfo.SystemInfo, Containers: chunked[i], GroupId: groupID, GroupSize: int32(groupSize), - ContainerHostType: cfg.ContainerHostType, + ContainerHostType: c.hostInfo.ContainerHostType, }) } numContainers := float64(len(containers)) statsd.Client.Gauge("datadog.process.containers.host_count", numContainers, []string{}, 1) //nolint:errcheck log.Debugf("collected %d containers in %s", int(numContainers), time.Now().Sub(startTime)) - return messages, nil + return StandardRunResult(messages), nil } // Cleanup frees any resource held by the ContainerCheck before the agent exits diff --git a/pkg/process/checks/container_rt.go b/pkg/process/checks/container_rt.go index 43248b9988b725..5b23373e0edb4c 100644 --- a/pkg/process/checks/container_rt.go +++ b/pkg/process/checks/container_rt.go @@ -10,7 +10,6 @@ import ( model "github.com/DataDog/agent-payload/v5/process" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/system" @@ -26,29 +25,41 @@ var RTContainer = &RTContainerCheck{} // RTContainerCheck collects numeric statistics about live ctrList. type RTContainerCheck struct { maxBatchSize int - sysInfo *model.SystemInfo + hostInfo *HostInfo containerProvider util.ContainerProvider lastRates map[string]*util.ContainerRateMetrics } // Init initializes a RTContainerCheck instance. -func (r *RTContainerCheck) Init(_ *config.AgentConfig, sysInfo *model.SystemInfo) { +func (r *RTContainerCheck) Init(_ *SysProbeConfig, hostInfo *HostInfo) error { r.maxBatchSize = getMaxBatchSize() - r.sysInfo = sysInfo + r.hostInfo = hostInfo r.containerProvider = util.GetSharedContainerProvider() + return nil +} + +// IsEnabled returns true if the check is enabled by configuration +func (r *RTContainerCheck) IsEnabled() bool { + // TODO - move config check logic here + return true +} + +// SupportsRunOptions returns true if the check supports RunOptions +func (r *RTContainerCheck) SupportsRunOptions() bool { + return false } // Name returns the name of the RTContainerCheck. -func (r *RTContainerCheck) Name() string { return config.RTContainerCheckName } +func (r *RTContainerCheck) Name() string { return RTContainerCheckName } -// RealTime indicates if this check only runs in real-time mode. -func (r *RTContainerCheck) RealTime() bool { return true } +// Realtime indicates if this check only runs in real-time mode. +func (r *RTContainerCheck) Realtime() bool { return true } // ShouldSaveLastRun indicates if the output from the last run should be saved for use in flares func (r *RTContainerCheck) ShouldSaveLastRun() bool { return true } // Run runs the real-time container check getting container-level stats from the Cgroups and Docker APIs. -func (r *RTContainerCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageBody, error) { +func (r *RTContainerCheck) Run(nextGroupID func() int32, _ *RunOptions) (RunResult, error) { var err error var containers []*model.Container var lastRates map[string]*util.ContainerRateMetrics @@ -70,19 +81,20 @@ func (r *RTContainerCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model. } chunked := convertAndChunkContainers(containers, groupSize) messages := make([]model.MessageBody, 0, groupSize) + groupID := nextGroupID() for i := 0; i < groupSize; i++ { messages = append(messages, &model.CollectorContainerRealTime{ - HostName: cfg.HostName, + HostName: r.hostInfo.HostName, Stats: chunked[i], NumCpus: int32(system.HostCPUCount()), - TotalMemory: r.sysInfo.TotalMemory, + TotalMemory: r.hostInfo.SystemInfo.TotalMemory, GroupId: groupID, GroupSize: int32(groupSize), - ContainerHostType: cfg.ContainerHostType, + ContainerHostType: r.hostInfo.ContainerHostType, }) } - return messages, nil + return StandardRunResult(messages), nil } // Cleanup frees any resource held by the RTContainerCheck before the agent exits diff --git a/pkg/process/checks/format.go b/pkg/process/checks/format.go index 5da717f165537d..8710aac5961a0e 100644 --- a/pkg/process/checks/format.go +++ b/pkg/process/checks/format.go @@ -18,8 +18,6 @@ import ( model "github.com/DataDog/agent-payload/v5/process" - "github.com/DataDog/datadog-agent/pkg/process/config" - "github.com/dustin/go-humanize" ) @@ -70,17 +68,17 @@ var ( // HumanFormat takes the messages produced by a check run and outputs them in a human-readable format func HumanFormat(check string, msgs []model.MessageBody, w io.Writer) error { switch check { - case config.ProcessCheckName: + case ProcessCheckName: return humanFormatProcess(msgs, w) - case config.RTProcessCheckName: + case RTProcessCheckName: return humanFormatRealTimeProcess(msgs, w) - case config.ContainerCheckName: + case ContainerCheckName: return humanFormatContainer(msgs, w) - case config.RTContainerCheckName: + case RTContainerCheckName: return humanFormatRealTimeContainer(msgs, w) - case config.DiscoveryCheckName: + case DiscoveryCheckName: return humanFormatProcessDiscovery(msgs, w) - case config.ProcessEventsCheckName: + case ProcessEventsCheckName: return HumanFormatProcessEvents(msgs, w, true) } return ErrNoHumanFormat diff --git a/pkg/process/checks/host_info.go b/pkg/process/checks/host_info.go new file mode 100644 index 00000000000000..46ca91fc60c459 --- /dev/null +++ b/pkg/process/checks/host_info.go @@ -0,0 +1,158 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package checks + +import ( + "bytes" + "context" + "fmt" + "os" + "os/exec" + "strings" + "time" + + model "github.com/DataDog/agent-payload/v5/process" + "google.golang.org/grpc" + + "github.com/DataDog/datadog-agent/pkg/config" + pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo" + "github.com/DataDog/datadog-agent/pkg/util/fargate" + ddgrpc "github.com/DataDog/datadog-agent/pkg/util/grpc" + "github.com/DataDog/datadog-agent/pkg/util/hostname/validate" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +// HostInfo describes details of host information shared between various checks +type HostInfo struct { + SystemInfo *model.SystemInfo + HostName string + // host type of the agent, used to populate container payload with additional host information + ContainerHostType model.ContainerHostType +} + +// CollectHostInfo collects host information +func CollectHostInfo() (*HostInfo, error) { + sysInfo, err := CollectSystemInfo() + if err != nil { + return nil, err + } + + hostName, err := resolveHostName() + if err != nil { + return nil, err + } + + return &HostInfo{ + SystemInfo: sysInfo, + HostName: hostName, + ContainerHostType: getContainerHostType(), + }, nil +} + +func resolveHostName() (string, error) { + var hostName string + if config.Datadog.IsSet("hostname") { + hostName = config.Datadog.GetString("hostname") + } + + if err := validate.ValidHostname(hostName); err != nil { + // lookup hostname if there is no config override or if the override is invalid + agentBin := config.Datadog.GetString("process_config.dd_agent_bin") + connectionTimeout := config.Datadog.GetDuration("process_config.grpc_connection_timeout_secs") * time.Second + var err error + hostName, err = getHostname(context.Background(), agentBin, connectionTimeout) + if err != nil { + return "", log.Errorf("cannot get hostname: %v", err) + } + } + return hostName, nil +} + +// getHostname attempts to resolve the hostname in the following order: the main datadog agent via grpc, the main agent +// via cli and lastly falling back to os.Hostname() if it is unavailable +func getHostname(ctx context.Context, ddAgentBin string, grpcConnectionTimeout time.Duration) (string, error) { + // Fargate is handled as an exceptional case (there is no concept of a host, so we use the ARN in-place). + if fargate.IsFargateInstance() { + hostname, err := fargate.GetFargateHost(ctx) + if err == nil { + return hostname, nil + } + log.Errorf("failed to get Fargate host: %v", err) + } + + // Get the hostname via gRPC from the main agent if a hostname has not been set either from config/fargate + hostname, err := getHostnameFromGRPC(ctx, ddgrpc.GetDDAgentClient, grpcConnectionTimeout) + if err == nil { + return hostname, nil + } + log.Errorf("failed to get hostname from grpc: %v", err) + + // If the hostname is not set then we fallback to use the agent binary + hostname, err = getHostnameFromCmd(ddAgentBin, exec.Command) + if err == nil { + return hostname, nil + } + log.Errorf("failed to get hostname from cmd: %v", err) + + return os.Hostname() +} + +type cmdFunc = func(name string, arg ...string) *exec.Cmd + +// getHostnameCmd shells out to obtain the hostname used by the infra agent +func getHostnameFromCmd(ddAgentBin string, cmdFn cmdFunc) (string, error) { + cmd := cmdFn(ddAgentBin, "hostname") + + // Copying all environment variables to child process + // Windows: Required, so the child process can load DLLs, etc. + // Linux: Optional, but will make use of DD_HOSTNAME and DOCKER_DD_AGENT if they exist + cmd.Env = append(cmd.Env, os.Environ()...) + + var stdout, stderr bytes.Buffer + cmd.Stdout = &stdout + cmd.Stderr = &stderr + + err := cmd.Run() + if err != nil { + return "", err + } + + hostname := strings.TrimSpace(stdout.String()) + if hostname == "" { + return "", fmt.Errorf("error retrieving dd-agent hostname %s", stderr.String()) + } + + return hostname, nil +} + +// getHostnameFromGRPC retrieves the hostname from the main datadog agent via GRPC +func getHostnameFromGRPC(ctx context.Context, grpcClientFn func(ctx context.Context, opts ...grpc.DialOption) (pb.AgentClient, error), grpcConnectionTimeout time.Duration) (string, error) { + ctx, cancel := context.WithTimeout(ctx, grpcConnectionTimeout) + defer cancel() + + ddAgentClient, err := grpcClientFn(ctx) + if err != nil { + return "", fmt.Errorf("cannot connect to datadog agent via grpc: %w", err) + } + reply, err := ddAgentClient.GetHostname(ctx, &pb.HostnameRequest{}) + if err != nil { + return "", fmt.Errorf("cannot get hostname from datadog agent via grpc: %w", err) + } + + log.Debugf("retrieved hostname:%s from datadog agent via grpc", reply.Hostname) + return reply.Hostname, nil +} + +// getContainerHostType uses the fargate library to detect container environment and returns the protobuf version of it +func getContainerHostType() model.ContainerHostType { + switch fargate.GetOrchestrator() { + case fargate.ECS: + return model.ContainerHostType_fargateECS + case fargate.EKS: + return model.ContainerHostType_fargateEKS + } + return model.ContainerHostType_notSpecified +} diff --git a/pkg/process/checks/host_info_test.go b/pkg/process/checks/host_info_test.go new file mode 100644 index 00000000000000..ba87c0fcb32b02 --- /dev/null +++ b/pkg/process/checks/host_info_test.go @@ -0,0 +1,137 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package checks + +import ( + "context" + "errors" + "fmt" + "os" + "os/exec" + "testing" + "time" + + "github.com/golang/mock/gomock" + "github.com/stretchr/testify/assert" + "google.golang.org/grpc" + + "github.com/DataDog/datadog-agent/pkg/config" + pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo" + mocks "github.com/DataDog/datadog-agent/pkg/proto/pbgo/mocks" +) + +func TestGetHostname(t *testing.T) { + ctx := context.Background() + h, err := getHostname(ctx, config.Datadog.GetString("process_config.dd_agent_bin"), 0) + assert.Nil(t, err) + // verify we fall back to getting os hostname + expectedHostname, _ := os.Hostname() + assert.Equal(t, expectedHostname, h) +} + +func TestGetHostnameFromGRPC(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + mockClient := mocks.NewMockAgentClient(ctrl) + + mockClient.EXPECT().GetHostname( + gomock.Any(), + &pb.HostnameRequest{}, + ).Return(&pb.HostnameReply{Hostname: "unit-test-hostname"}, nil) + + t.Run("hostname returns from grpc", func(t *testing.T) { + hostname, err := getHostnameFromGRPC(ctx, func(ctx context.Context, opts ...grpc.DialOption) (pb.AgentClient, error) { + return mockClient, nil + }, config.DefaultGRPCConnectionTimeoutSecs*time.Second) + + assert.Nil(t, err) + assert.Equal(t, "unit-test-hostname", hostname) + }) + + t.Run("grpc client is unavailable", func(t *testing.T) { + grpcErr := errors.New("no grpc client") + hostname, err := getHostnameFromGRPC(ctx, func(ctx context.Context, opts ...grpc.DialOption) (pb.AgentClient, error) { + return nil, grpcErr + }, config.DefaultGRPCConnectionTimeoutSecs*time.Second) + + assert.NotNil(t, err) + assert.Equal(t, grpcErr, errors.Unwrap(err)) + assert.Empty(t, hostname) + }) +} + +func TestGetHostnameFromCmd(t *testing.T) { + t.Run("valid hostname", func(t *testing.T) { + h, err := getHostnameFromCmd("agent-success", fakeExecCommand) + assert.Nil(t, err) + assert.Equal(t, "unit_test_hostname", h) + }) + + t.Run("no hostname returned", func(t *testing.T) { + h, err := getHostnameFromCmd("agent-empty_hostname", fakeExecCommand) + assert.NotNil(t, err) + assert.Equal(t, "", h) + }) +} + +func TestInvalidHostname(t *testing.T) { + // Lower the GRPC timeout, otherwise the test will time out in CI + config.Datadog.Set("process_config.grpc_connection_timeout_secs", 1) + config.Datadog.Set("hostname", "localhost") + + expectedHostname, _ := os.Hostname() + + hostName, err := resolveHostName() + assert.NoError(t, err) + + assert.Equal(t, expectedHostname, hostName) +} + +// TestGetHostnameShellCmd is a method that is called as a substitute for a dd-agent shell command, +// the GO_TEST_PROCESS flag ensures that if it is called as part of the test suite, it is skipped. +func TestGetHostnameShellCmd(t *testing.T) { + if os.Getenv("GO_TEST_PROCESS") != "1" { + return + } + defer os.Exit(0) + + args := os.Args + for len(args) > 0 { + if args[0] == "--" { + args = args[1:] + break + } + args = args[1:] + } + + if len(args) == 0 { + fmt.Fprintf(os.Stderr, "No command\n") + os.Exit(2) + } + + cmd, args := args[0], args[1:] + switch cmd { + case "agent-success": + assert.EqualValues(t, []string{"hostname"}, args) + fmt.Fprintf(os.Stdout, "unit_test_hostname") + case "agent-empty_hostname": + assert.EqualValues(t, []string{"hostname"}, args) + fmt.Fprintf(os.Stdout, "") + } +} + +// fakeExecCommand is a function that initialises a new exec.Cmd, one which will +// simply call TestShellProcessSuccess rather than the command it is provided. It will +// also pass through the command and its arguments as an argument to TestShellProcessSuccess +func fakeExecCommand(command string, args ...string) *exec.Cmd { + cs := []string{"-test.run=TestGetHostnameShellCmd", "--", command} + cs = append(cs, args...) + cmd := exec.Command(os.Args[0], cs...) + cmd.Env = []string{"GO_TEST_PROCESS=1"} + return cmd +} diff --git a/pkg/process/checks/interval.go b/pkg/process/checks/interval.go new file mode 100644 index 00000000000000..b4255ad9db4ad2 --- /dev/null +++ b/pkg/process/checks/interval.go @@ -0,0 +1,99 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package checks + +import ( + "time" + + "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +const ( + ProcessCheckDefaultInterval = 10 * time.Second + RTProcessCheckDefaultInterval = 2 * time.Second + ContainerCheckDefaultInterval = 10 * time.Second + RTContainerCheckDefaultInterval = 2 * time.Second + ConnectionsCheckDefaultInterval = 30 * time.Second + PodCheckDefaultInterval = 10 * time.Second + ProcessDiscoveryCheckDefaultInterval = 4 * time.Hour + + discoveryMinInterval = 10 * time.Minute + + configIntervals = configPrefix + "intervals." + + // The interval, in seconds, at which we will run each check. If you want consistent + // behavior between real-time you may set the Container/ProcessRT intervals to 10. + // Defaults to 10s for normal checks and 2s for others. + configProcessInterval = configIntervals + "process" + configRTProcessInterval = configIntervals + "process_realtime" + configContainerInterval = configIntervals + "container" + configRTContainerInterval = configIntervals + "container_realtime" + configConnectionsInterval = configIntervals + "connections" +) + +var ( + defaultIntervals = map[string]time.Duration{ + ProcessCheckName: ProcessCheckDefaultInterval, + RTProcessCheckName: RTProcessCheckDefaultInterval, + ContainerCheckName: ContainerCheckDefaultInterval, + RTContainerCheckName: RTContainerCheckDefaultInterval, + ConnectionsCheckName: ConnectionsCheckDefaultInterval, + PodCheckName: PodCheckDefaultInterval, + DiscoveryCheckName: ProcessDiscoveryCheckDefaultInterval, + ProcessEventsCheckName: config.DefaultProcessEventsCheckInterval, + } + + configKeys = map[string]string{ + ProcessCheckName: configProcessInterval, + RTProcessCheckName: configRTProcessInterval, + ContainerCheckName: configContainerInterval, + RTContainerCheckName: configRTContainerInterval, + ConnectionsCheckName: configConnectionsInterval, + } +) + +// GetDefaultInterval returns the default check interval value +func GetDefaultInterval(checkName string) time.Duration { + return defaultIntervals[checkName] +} + +// GetInterval returns the configured check interval value +func GetInterval(checkName string) time.Duration { + switch checkName { + case DiscoveryCheckName: + // We don't need to check if the key exists since we already bound it to a default in InitConfig. + // We use a minimum of 10 minutes for this value. + discoveryInterval := config.Datadog.GetDuration("process_config.process_discovery.interval") + if discoveryInterval < discoveryMinInterval { + discoveryInterval = discoveryMinInterval + _ = log.Warnf("Invalid interval for process discovery (< %s) using minimum value of %[1]s", discoveryMinInterval.String()) + } + return discoveryInterval + + case ProcessEventsCheckName: + eventsInterval := config.Datadog.GetDuration("process_config.event_collection.interval") + if eventsInterval < config.DefaultProcessEventsMinCheckInterval { + eventsInterval = config.DefaultProcessEventsCheckInterval + _ = log.Warnf("Invalid interval for process_events check (< %s) using default value of %s", + config.DefaultProcessEventsMinCheckInterval.String(), config.DefaultProcessEventsCheckInterval.String()) + } + return eventsInterval + + default: + defaultInterval := defaultIntervals[checkName] + configKey, ok := configKeys[checkName] + if !ok || !config.Datadog.IsSet(configKey) { + return defaultInterval + } + + if seconds := config.Datadog.GetInt(configKey); seconds != 0 { + log.Infof("Overriding %s check interval to %ds", configKey, seconds) + return time.Duration(seconds) * time.Second + } + return defaultInterval + } +} diff --git a/pkg/process/checks/interval_test.go b/pkg/process/checks/interval_test.go new file mode 100644 index 00000000000000..b9f427bfa57c28 --- /dev/null +++ b/pkg/process/checks/interval_test.go @@ -0,0 +1,156 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package checks + +import ( + "testing" + "time" + + "github.com/stretchr/testify/assert" + + "github.com/DataDog/datadog-agent/pkg/config" +) + +func TestLegacyIntervalDefault(t *testing.T) { + for _, tc := range []struct { + name string + checkName string + expectedInterval time.Duration + }{ + { + name: "container default", + checkName: ContainerCheckName, + expectedInterval: ContainerCheckDefaultInterval, + }, + { + name: "container rt default", + checkName: RTContainerCheckName, + expectedInterval: RTContainerCheckDefaultInterval, + }, + { + name: "process default", + checkName: ProcessCheckName, + expectedInterval: ProcessCheckDefaultInterval, + }, + { + name: "process rt default", + checkName: RTProcessCheckName, + expectedInterval: RTProcessCheckDefaultInterval, + }, + { + name: "connections default", + checkName: ConnectionsCheckName, + expectedInterval: ConnectionsCheckDefaultInterval, + }, + { + name: "pod default", + checkName: PodCheckName, + expectedInterval: PodCheckDefaultInterval, + }, + } { + t.Run(tc.name, func(t *testing.T) { + _ = config.Mock(t) + assert.Equal(t, tc.expectedInterval, GetInterval(tc.checkName)) + }) + } +} + +func TestLegacyIntervalOverride(t *testing.T) { + override := 600 + for _, tc := range []struct { + name string + checkName string + setting string + expectedInterval time.Duration + }{ + { + name: "container default", + setting: "process_config.intervals.container", + checkName: ContainerCheckName, + }, + { + name: "container rt default", + setting: "process_config.intervals.container_realtime", + checkName: RTContainerCheckName, + }, + { + name: "process default", + setting: "process_config.intervals.process", + checkName: ProcessCheckName, + }, + { + name: "process rt default", + setting: "process_config.intervals.process_realtime", + checkName: RTProcessCheckName, + }, + { + name: "connections default", + setting: "process_config.intervals.connections", + checkName: ConnectionsCheckName, + }, + // Note: non-default overridden handling of pod check interval is in pkg/orhestrator/config + } { + t.Run(tc.name, func(t *testing.T) { + _ = config.Mock(t) + cfg := config.Mock(t) + cfg.Set(tc.setting, override) + assert.Equal(t, time.Duration(override)*time.Second, GetInterval(tc.checkName)) + }) + } +} + +// TestProcessDiscoveryInterval tests to make sure that the process discovery interval validation works properly +func TestProcessDiscoveryInterval(t *testing.T) { + for _, tc := range []struct { + name string + interval time.Duration + expectedInterval time.Duration + }{ + { + name: "allowed interval", + interval: 8 * time.Hour, + expectedInterval: 8 * time.Hour, + }, + { + name: "below minimum", + interval: 0, + expectedInterval: discoveryMinInterval, + }, + } { + t.Run(tc.name, func(t *testing.T) { + cfg := config.Mock(t) + cfg.Set("process_config.process_discovery.interval", tc.interval) + + assert.Equal(t, tc.expectedInterval, GetInterval(DiscoveryCheckName)) + }) + } +} + +func TestProcessEventsInterval(t *testing.T) { + for _, tc := range []struct { + name string + interval time.Duration + expectedInterval time.Duration + }{ + { + name: "allowed interval", + interval: 30 * time.Second, + expectedInterval: 30 * time.Second, + }, + { + name: "below minimum", + interval: 0, + expectedInterval: config.DefaultProcessEventsCheckInterval, + }, + } { + t.Run(tc.name, func(t *testing.T) { + cfg := config.Mock(t) + cfg.Set("process_config.event_collection.interval", tc.interval) + + assert.Equal(t, tc.expectedInterval, GetInterval(ProcessEventsCheckName)) + }) + } +} diff --git a/pkg/process/checks/mocks/check.go b/pkg/process/checks/mocks/check.go index 62ab63d9af59e0..8f30fca00e4d78 100644 --- a/pkg/process/checks/mocks/check.go +++ b/pkg/process/checks/mocks/check.go @@ -1,12 +1,10 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks import ( - config "github.com/DataDog/datadog-agent/pkg/process/config" + checks "github.com/DataDog/datadog-agent/pkg/process/checks" mock "github.com/stretchr/testify/mock" - - process "github.com/DataDog/agent-payload/v5/process" ) // Check is an autogenerated mock type for the Check type @@ -19,9 +17,32 @@ func (_m *Check) Cleanup() { _m.Called() } -// Init provides a mock function with given fields: cfg, info -func (_m *Check) Init(cfg *config.AgentConfig, info *process.SystemInfo) { - _m.Called(cfg, info) +// Init provides a mock function with given fields: syscfg, info +func (_m *Check) Init(syscfg *checks.SysProbeConfig, info *checks.HostInfo) error { + ret := _m.Called(syscfg, info) + + var r0 error + if rf, ok := ret.Get(0).(func(*checks.SysProbeConfig, *checks.HostInfo) error); ok { + r0 = rf(syscfg, info) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// IsEnabled provides a mock function with given fields: +func (_m *Check) IsEnabled() bool { + ret := _m.Called() + + var r0 bool + if rf, ok := ret.Get(0).(func() bool); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(bool) + } + + return r0 } // Name provides a mock function with given fields: @@ -38,8 +59,8 @@ func (_m *Check) Name() string { return r0 } -// RealTime provides a mock function with given fields: -func (_m *Check) RealTime() bool { +// Realtime provides a mock function with given fields: +func (_m *Check) Realtime() bool { ret := _m.Called() var r0 bool @@ -52,22 +73,22 @@ func (_m *Check) RealTime() bool { return r0 } -// Run provides a mock function with given fields: cfg, groupID -func (_m *Check) Run(cfg *config.AgentConfig, groupID int32) ([]process.MessageBody, error) { - ret := _m.Called(cfg, groupID) +// Run provides a mock function with given fields: nextGroupID, options +func (_m *Check) Run(nextGroupID func() int32, options *checks.RunOptions) (checks.RunResult, error) { + ret := _m.Called(nextGroupID, options) - var r0 []process.MessageBody - if rf, ok := ret.Get(0).(func(*config.AgentConfig, int32) []process.MessageBody); ok { - r0 = rf(cfg, groupID) + var r0 checks.RunResult + if rf, ok := ret.Get(0).(func(func() int32, *checks.RunOptions) checks.RunResult); ok { + r0 = rf(nextGroupID, options) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).([]process.MessageBody) + r0 = ret.Get(0).(checks.RunResult) } } var r1 error - if rf, ok := ret.Get(1).(func(*config.AgentConfig, int32) error); ok { - r1 = rf(cfg, groupID) + if rf, ok := ret.Get(1).(func(func() int32, *checks.RunOptions) error); ok { + r1 = rf(nextGroupID, options) } else { r1 = ret.Error(1) } @@ -89,6 +110,20 @@ func (_m *Check) ShouldSaveLastRun() bool { return r0 } +// SupportsRunOptions provides a mock function with given fields: +func (_m *Check) SupportsRunOptions() bool { + ret := _m.Called() + + var r0 bool + if rf, ok := ret.Get(0).(func() bool); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + type mockConstructorTestingTNewCheck interface { mock.TestingT Cleanup(func()) diff --git a/pkg/process/checks/mocks/check_with_real_time.go b/pkg/process/checks/mocks/check_with_real_time.go deleted file mode 100644 index 9d473782c2d5f0..00000000000000 --- a/pkg/process/checks/mocks/check_with_real_time.go +++ /dev/null @@ -1,144 +0,0 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. - -package mocks - -import ( - checks "github.com/DataDog/datadog-agent/pkg/process/checks" - config "github.com/DataDog/datadog-agent/pkg/process/config" - - mock "github.com/stretchr/testify/mock" - - process "github.com/DataDog/agent-payload/v5/process" -) - -// CheckWithRealTime is an autogenerated mock type for the CheckWithRealTime type -type CheckWithRealTime struct { - mock.Mock -} - -// Cleanup provides a mock function with given fields: -func (_m *CheckWithRealTime) Cleanup() { - _m.Called() -} - -// Init provides a mock function with given fields: cfg, info -func (_m *CheckWithRealTime) Init(cfg *config.AgentConfig, info *process.SystemInfo) { - _m.Called(cfg, info) -} - -// Name provides a mock function with given fields: -func (_m *CheckWithRealTime) Name() string { - ret := _m.Called() - - var r0 string - if rf, ok := ret.Get(0).(func() string); ok { - r0 = rf() - } else { - r0 = ret.Get(0).(string) - } - - return r0 -} - -// RealTime provides a mock function with given fields: -func (_m *CheckWithRealTime) RealTime() bool { - ret := _m.Called() - - var r0 bool - if rf, ok := ret.Get(0).(func() bool); ok { - r0 = rf() - } else { - r0 = ret.Get(0).(bool) - } - - return r0 -} - -// RealTimeName provides a mock function with given fields: -func (_m *CheckWithRealTime) RealTimeName() string { - ret := _m.Called() - - var r0 string - if rf, ok := ret.Get(0).(func() string); ok { - r0 = rf() - } else { - r0 = ret.Get(0).(string) - } - - return r0 -} - -// Run provides a mock function with given fields: cfg, groupID -func (_m *CheckWithRealTime) Run(cfg *config.AgentConfig, groupID int32) ([]process.MessageBody, error) { - ret := _m.Called(cfg, groupID) - - var r0 []process.MessageBody - if rf, ok := ret.Get(0).(func(*config.AgentConfig, int32) []process.MessageBody); ok { - r0 = rf(cfg, groupID) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]process.MessageBody) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(*config.AgentConfig, int32) error); ok { - r1 = rf(cfg, groupID) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// RunWithOptions provides a mock function with given fields: cfg, nextGroupID, options -func (_m *CheckWithRealTime) RunWithOptions(cfg *config.AgentConfig, nextGroupID func() int32, options checks.RunOptions) (*checks.RunResult, error) { - ret := _m.Called(cfg, nextGroupID, options) - - var r0 *checks.RunResult - if rf, ok := ret.Get(0).(func(*config.AgentConfig, func() int32, checks.RunOptions) *checks.RunResult); ok { - r0 = rf(cfg, nextGroupID, options) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*checks.RunResult) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(*config.AgentConfig, func() int32, checks.RunOptions) error); ok { - r1 = rf(cfg, nextGroupID, options) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// ShouldSaveLastRun provides a mock function with given fields: -func (_m *CheckWithRealTime) ShouldSaveLastRun() bool { - ret := _m.Called() - - var r0 bool - if rf, ok := ret.Get(0).(func() bool); ok { - r0 = rf() - } else { - r0 = ret.Get(0).(bool) - } - - return r0 -} - -type mockConstructorTestingTNewCheckWithRealTime interface { - mock.TestingT - Cleanup(func()) -} - -// NewCheckWithRealTime creates a new instance of CheckWithRealTime. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. -func NewCheckWithRealTime(t mockConstructorTestingTNewCheckWithRealTime) *CheckWithRealTime { - mock := &CheckWithRealTime{} - mock.Mock.Test(t) - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/pkg/process/checks/net.go b/pkg/process/checks/net.go index 53caa9de17daea..84ba69a65ddf3d 100644 --- a/pkg/process/checks/net.go +++ b/pkg/process/checks/net.go @@ -12,25 +12,22 @@ import ( "time" model "github.com/DataDog/agent-payload/v5/process" - "go.uber.org/atomic" "github.com/DataDog/datadog-agent/pkg/ebpf" "github.com/DataDog/datadog-agent/pkg/metadata/host" "github.com/DataDog/datadog-agent/pkg/network/dns" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/metadata/parser" "github.com/DataDog/datadog-agent/pkg/process/net" "github.com/DataDog/datadog-agent/pkg/process/net/resolver" putil "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/util/cloudproviders" "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/util/subscriptions" ) var ( // Connections is a singleton ConnectionsCheck. - Connections = &ConnectionsCheck{ - lastConnsByPID: &atomic.Value{}, - } + Connections = &ConnectionsCheck{} // LocalResolver is a singleton LocalResolver LocalResolver = &resolver.LocalResolver{} @@ -44,26 +41,33 @@ var ( // ConnectionsCheck collects statistics about live TCP and UDP connections. type ConnectionsCheck struct { + hostInfo *HostInfo + maxConnsPerMessage int tracerClientID string networkID string notInitializedLogLimit *putil.LogLimit - // store the last collection result by PID, currently used to populate network data for processes - // it's in format map[int32][]*model.Connections - lastConnsByPID *atomic.Value + dockerFilter *parser.DockerProxy serviceExtractor *parser.ServiceExtractor processData *ProcessData + + processConnRatesTransmitter subscriptions.Transmitter[ProcessConnRates] } +// ProcessConnRates describes connection rates for processes +type ProcessConnRates map[int32]*model.ProcessNetworks + // Init initializes a ConnectionsCheck instance. -func (c *ConnectionsCheck) Init(cfg *config.AgentConfig, _ *model.SystemInfo) { +func (c *ConnectionsCheck) Init(syscfg *SysProbeConfig, hostInfo *HostInfo) error { + c.hostInfo = hostInfo + c.maxConnsPerMessage = syscfg.MaxConnsPerMessage c.notInitializedLogLimit = putil.NewLogLimit(1, time.Minute*10) // We use the current process PID as the system-probe client ID c.tracerClientID = ProcessAgentClientID // Calling the remote tracer will cause it to initialize and check connectivity - net.SetSystemProbePath(cfg.SystemProbeAddress) + net.SetSystemProbePath(syscfg.SystemProbeAddress) tu, err := net.GetRemoteSystemProbeUtil() if err != nil { @@ -87,13 +91,26 @@ func (c *ConnectionsCheck) Init(cfg *config.AgentConfig, _ *model.SystemInfo) { c.serviceExtractor = parser.NewServiceExtractor() c.processData.Register(c.dockerFilter) c.processData.Register(c.serviceExtractor) + + return nil +} + +// IsEnabled returns true if the check is enabled by configuration +func (c *ConnectionsCheck) IsEnabled() bool { + // TODO - move config check logic here + return true +} + +// SupportsRunOptions returns true if the check supports RunOptions +func (c *ConnectionsCheck) SupportsRunOptions() bool { + return false } // Name returns the name of the ConnectionsCheck. -func (c *ConnectionsCheck) Name() string { return config.ConnectionsCheckName } +func (c *ConnectionsCheck) Name() string { return ConnectionsCheckName } -// RealTime indicates if this check only runs in real-time mode. -func (c *ConnectionsCheck) RealTime() bool { return false } +// Realtime indicates if this check only runs in real-time mode. +func (c *ConnectionsCheck) Realtime() bool { return false } // ShouldSaveLastRun indicates if the output from the last run should be saved for use in flares func (c *ConnectionsCheck) ShouldSaveLastRun() bool { return false } @@ -103,7 +120,7 @@ func (c *ConnectionsCheck) ShouldSaveLastRun() bool { return false } // For each connection we'll return a `model.Connection` // that will be bundled up into a `CollectorConnections`. // See agent.proto for the schema of the message and models. -func (c *ConnectionsCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageBody, error) { +func (c *ConnectionsCheck) Run(nextGroupID func() int32, _ *RunOptions) (RunResult, error) { start := time.Now() conns, err := c.getConnections() @@ -125,10 +142,13 @@ func (c *ConnectionsCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model. // Resolve the Raddr side of connections for local containers LocalResolver.Resolve(conns) - c.lastConnsByPID.Store(getConnectionsByPID(conns)) + c.notifyProcessConnRates(conns) log.Debugf("collected connections in %s", time.Since(start)) - return batchConnections(cfg, groupID, conns.Conns, conns.Dns, c.networkID, conns.ConnTelemetryMap, conns.CompilationTelemetryByAsset, conns.KernelHeaderFetchResult, conns.CORETelemetryByAsset, conns.Domains, conns.Routes, conns.Tags, conns.AgentConfiguration, c.serviceExtractor), nil + + groupID := nextGroupID() + messages := batchConnections(c.hostInfo, c.maxConnsPerMessage, groupID, conns.Conns, conns.Dns, c.networkID, conns.ConnTelemetryMap, conns.CompilationTelemetryByAsset, conns.KernelHeaderFetchResult, conns.CORETelemetryByAsset, conns.Domains, conns.Routes, conns.Tags, conns.AgentConfiguration, c.serviceExtractor) + return StandardRunResult(messages), nil } // Cleanup frees any resource held by the ConnectionsCheck before the agent exits @@ -145,20 +165,31 @@ func (c *ConnectionsCheck) getConnections() (*model.Connections, error) { return tu.GetConnections(c.tracerClientID) } -func (c *ConnectionsCheck) getLastConnectionsByPID() map[int32][]*model.Connection { - if result := c.lastConnsByPID.Load(); result != nil { - return result.(map[int32][]*model.Connection) +func (c *ConnectionsCheck) notifyProcessConnRates(conns *model.Connections) { + if len(c.processConnRatesTransmitter.Chs) == 0 { + return } - return nil -} -// getConnectionsByPID groups a list of connection objects by PID -func getConnectionsByPID(conns *model.Connections) map[int32][]*model.Connection { - result := make(map[int32][]*model.Connection) - for _, conn := range conns.Conns { - result[conn.Pid] = append(result[conn.Pid], conn) + connCheckIntervalS := int(GetInterval(ConnectionsCheckName) / time.Second) + + connRates := make(ProcessConnRates) + for _, c := range conns.Conns { + rates, ok := connRates[c.Pid] + if !ok { + connRates[c.Pid] = &model.ProcessNetworks{ConnectionRate: 1, BytesRate: float32(c.LastBytesReceived) + float32(c.LastBytesSent)} + continue + } + + rates.BytesRate += float32(c.LastBytesSent) + float32(c.LastBytesReceived) + rates.ConnectionRate++ } - return result + + for _, rates := range connRates { + rates.BytesRate /= float32(connCheckIntervalS) + rates.ConnectionRate /= float32(connCheckIntervalS) + } + + c.processConnRatesTransmitter.Notify(connRates) } func convertDNSEntry(dnstable map[string]*model.DNSDatabaseEntry, namemap map[string]int32, namedb *[]string, ip string, entry *model.DNSEntry) { @@ -244,7 +275,8 @@ func remapDNSStatsByOffset(c *model.Connection, indexToOffset []int32) { // Connections are split up into a chunks of a configured size conns per message to limit the message size on intake. func batchConnections( - cfg *config.AgentConfig, + hostInfo *HostInfo, + maxConnsPerMessage int, groupID int32, cxs []*model.Connection, dns map[string]*model.DNSEntry, @@ -259,12 +291,12 @@ func batchConnections( agentCfg *model.AgentConfiguration, serviceExtractor *parser.ServiceExtractor, ) []model.MessageBody { - groupSize := groupSize(len(cxs), cfg.MaxConnsPerMessage) + groupSize := groupSize(len(cxs), maxConnsPerMessage) batches := make([]model.MessageBody, 0, groupSize) dnsEncoder := model.NewV2DNSEncoder() - if len(cxs) > cfg.MaxConnsPerMessage { + if len(cxs) > maxConnsPerMessage { // Sort connections by remote IP/PID for more efficient resolution sort.Slice(cxs, func(i, j int) bool { if cxs[i].Raddr.Ip != cxs[j].Raddr.Ip { @@ -275,7 +307,7 @@ func batchConnections( } for len(cxs) > 0 { - batchSize := min(cfg.MaxConnsPerMessage, len(cxs)) + batchSize := min(maxConnsPerMessage, len(cxs)) batchConns := cxs[:batchSize] // Connections for this particular batch ctrIDForPID := make(map[int32]string) @@ -363,7 +395,7 @@ func batchConnections( } cc := &model.CollectorConnections{ AgentConfiguration: agentCfg, - HostName: cfg.HostName, + HostName: hostInfo.HostName, NetworkId: networkID, Connections: batchConns, GroupId: groupID, @@ -371,7 +403,7 @@ func batchConnections( ContainerForPid: ctrIDForPID, EncodedDomainDatabase: encodedNameDb, EncodedDnsLookups: mappedDNSLookups, - ContainerHostType: cfg.ContainerHostType, + ContainerHostType: hostInfo.ContainerHostType, Routes: batchRoutes, EncodedConnectionsTags: tagsEncoder.Buffer(), } diff --git a/pkg/process/checks/net_test.go b/pkg/process/checks/net_test.go index fd96cabac03c36..e5aec3d9effa87 100644 --- a/pkg/process/checks/net_test.go +++ b/pkg/process/checks/net_test.go @@ -15,7 +15,6 @@ import ( ddconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/network/dns" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/metadata/parser" "github.com/DataDog/datadog-agent/pkg/process/procutil" ) @@ -55,9 +54,9 @@ func TestDNSNameEncoding(t *testing.T) { "1.1.2.4": {Names: []string{"host4.domain.com"}}, "1.1.2.5": {Names: nil}, } - cfg := config.NewDefaultAgentConfig() ex := parser.NewServiceExtractor() - chunks := batchConnections(cfg, 0, p, dns, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, nil, nil, nil, ex) + maxConnsPerMessage := 10 + chunks := batchConnections(&HostInfo{}, maxConnsPerMessage, 0, p, dns, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, nil, nil, nil, ex) assert.Equal(t, len(chunks), 1) chunk := chunks[0] @@ -80,8 +79,6 @@ func TestDNSNameEncoding(t *testing.T) { } func TestNetworkConnectionBatching(t *testing.T) { - cfg := config.NewDefaultAgentConfig() - for i, tc := range []struct { cur, last []*model.Connection maxSize int @@ -119,13 +116,12 @@ func TestNetworkConnectionBatching(t *testing.T) { expectedChunks: 3, }, } { - cfg.MaxConnsPerMessage = tc.maxSize ctm := map[string]int64{} rctm := map[string]*model.RuntimeCompilationTelemetry{} khfr := model.KernelHeaderFetchResult_FetchNotAttempted coretm := map[string]model.COREResult{} ex := parser.NewServiceExtractor() - chunks := batchConnections(cfg, 0, tc.cur, map[string]*model.DNSEntry{}, "nid", ctm, rctm, khfr, coretm, nil, nil, nil, nil, ex) + chunks := batchConnections(&HostInfo{}, tc.maxSize, 0, tc.cur, map[string]*model.DNSEntry{}, "nid", ctm, rctm, khfr, coretm, nil, nil, nil, nil, ex) assert.Len(t, chunks, tc.expectedChunks, "len %d", i) total := 0 @@ -163,10 +159,9 @@ func TestNetworkConnectionBatchingWithDNS(t *testing.T) { "1.1.2.3": {Names: []string{"datacat.edu"}}, } - cfg := config.NewDefaultAgentConfig() - cfg.MaxConnsPerMessage = 1 + maxConnsPerMessage := 1 ex := parser.NewServiceExtractor() - chunks := batchConnections(cfg, 0, p, dns, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, nil, nil, nil, ex) + chunks := batchConnections(&HostInfo{}, maxConnsPerMessage, 0, p, dns, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, nil, nil, nil, ex) assert.Len(t, chunks, 4) total := 0 @@ -204,10 +199,9 @@ func TestBatchSimilarConnectionsTogether(t *testing.T) { p[4].Raddr.Ip = "1.2.3.4" p[5].Raddr.Ip = "1.3.4.5" - cfg := config.NewDefaultAgentConfig() - cfg.MaxConnsPerMessage = 2 + maxConnsPerMessage := 2 ex := parser.NewServiceExtractor() - chunks := batchConnections(cfg, 0, p, map[string]*model.DNSEntry{}, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, nil, nil, nil, ex) + chunks := batchConnections(&HostInfo{}, maxConnsPerMessage, 0, p, map[string]*model.DNSEntry{}, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, nil, nil, nil, ex) assert.Len(t, chunks, 3) total := 0 @@ -289,10 +283,9 @@ func TestNetworkConnectionBatchingWithDomainsByQueryType(t *testing.T) { } dnsmap := map[string]*model.DNSEntry{} - cfg := config.NewDefaultAgentConfig() - cfg.MaxConnsPerMessage = 1 + maxConnsPerMessage := 1 ex := parser.NewServiceExtractor() - chunks := batchConnections(cfg, 0, conns, dnsmap, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, domains, nil, nil, nil, ex) + chunks := batchConnections(&HostInfo{}, maxConnsPerMessage, 0, conns, dnsmap, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, domains, nil, nil, nil, ex) assert.Len(t, chunks, 4) total := 0 @@ -408,10 +401,9 @@ func TestNetworkConnectionBatchingWithDomains(t *testing.T) { } dnsmap := map[string]*model.DNSEntry{} - cfg := config.NewDefaultAgentConfig() - cfg.MaxConnsPerMessage = 1 + maxConnsPerMessage := 1 ex := parser.NewServiceExtractor() - chunks := batchConnections(cfg, 0, conns, dnsmap, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, domains, nil, nil, nil, ex) + chunks := batchConnections(&HostInfo{}, maxConnsPerMessage, 0, conns, dnsmap, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, domains, nil, nil, nil, ex) assert.Len(t, chunks, 4) total := 0 @@ -518,10 +510,9 @@ func TestNetworkConnectionBatchingWithRoutes(t *testing.T) { conns[6].RouteIdx = 3 conns[7].RouteIdx = 2 - cfg := config.NewDefaultAgentConfig() - cfg.MaxConnsPerMessage = 4 + maxConnsPerMessage := 4 ex := parser.NewServiceExtractor() - chunks := batchConnections(cfg, 0, conns, nil, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, routes, nil, nil, ex) + chunks := batchConnections(&HostInfo{}, maxConnsPerMessage, 0, conns, nil, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, routes, nil, nil, ex) assert.Len(t, chunks, 2) total := 0 @@ -587,10 +578,9 @@ func TestNetworkConnectionTags(t *testing.T) { } foundTags := []fakeConn{} - cfg := config.NewDefaultAgentConfig() - cfg.MaxConnsPerMessage = 4 + maxConnsPerMessage := 4 ex := parser.NewServiceExtractor() - chunks := batchConnections(cfg, 0, conns, nil, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, nil, tags, nil, ex) + chunks := batchConnections(&HostInfo{}, maxConnsPerMessage, 0, conns, nil, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, nil, tags, nil, ex) assert.Len(t, chunks, 2) total := 0 @@ -625,11 +615,11 @@ func TestNetworkConnectionTagsWithService(t *testing.T) { mockConfig := ddconfig.Mock(t) mockConfig.Set("service_monitoring_config.process_service_inference.enabled", true) - cfg := config.NewDefaultAgentConfig() + maxConnsPerMessage := 1 ex := parser.NewServiceExtractor() ex.Extract(procsByPid) - chunks := batchConnections(cfg, 0, conns, nil, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, nil, tags, nil, ex) + chunks := batchConnections(&HostInfo{}, maxConnsPerMessage, 0, conns, nil, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, nil, tags, nil, ex) assert.Len(t, chunks, 1) connections := chunks[0].(*model.CollectorConnections) diff --git a/pkg/process/checks/pod.go b/pkg/process/checks/pod.go index 3e19ad62e4d6ce..7968113f7195a7 100644 --- a/pkg/process/checks/pod.go +++ b/pkg/process/checks/pod.go @@ -13,45 +13,58 @@ import ( "fmt" "time" - model "github.com/DataDog/agent-payload/v5/process" - "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/processors" k8sProcessors "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/processors/k8s" "github.com/DataDog/datadog-agent/pkg/orchestrator" - "github.com/DataDog/datadog-agent/pkg/process/config" + oconfig "github.com/DataDog/datadog-agent/pkg/orchestrator/config" "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/util/kubernetes/clustername" "github.com/DataDog/datadog-agent/pkg/util/kubernetes/kubelet" ) // Pod is a singleton PodCheck. -var Pod = &PodCheck{} +var Pod = &PodCheck{ + config: oconfig.NewDefaultOrchestratorConfig(), +} // PodCheck is a check that returns container metadata and stats. type PodCheck struct { - sysInfo *model.SystemInfo + hostInfo *HostInfo containerFailedLogLimit *util.LogLimit processor *processors.Processor + config *oconfig.OrchestratorConfig } // Init initializes a PodCheck instance. -func (c *PodCheck) Init(cfg *config.AgentConfig, info *model.SystemInfo) { +func (c *PodCheck) Init(_ *SysProbeConfig, hostInfo *HostInfo) error { + c.hostInfo = hostInfo c.containerFailedLogLimit = util.NewLogLimit(10, time.Minute*10) c.processor = processors.NewProcessor(new(k8sProcessors.PodHandlers)) - c.sysInfo = info + return c.config.Load() +} + +// IsEnabled returns true if the check is enabled by configuration +func (c *PodCheck) IsEnabled() bool { + // TODO - move config check logic here + return true +} + +// SupportsRunOptions returns true if the check supports RunOptions +func (c *PodCheck) SupportsRunOptions() bool { + return false } // Name returns the name of the ProcessCheck. -func (c *PodCheck) Name() string { return config.PodCheckName } +func (c *PodCheck) Name() string { return PodCheckName } -// RealTime indicates if this check only runs in real-time mode. -func (c *PodCheck) RealTime() bool { return false } +// Realtime indicates if this check only runs in real-time mode. +func (c *PodCheck) Realtime() bool { return false } // ShouldSaveLastRun indicates if the output from the last run should be saved for use in flares func (c *PodCheck) ShouldSaveLastRun() bool { return true } // Run runs the PodCheck to collect a list of running pods -func (c *PodCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageBody, error) { +func (c *PodCheck) Run(nextGroupID func() int32, _ *RunOptions) (RunResult, error) { kubeUtil, err := kubelet.GetKubeUtil() if err != nil { return nil, err @@ -67,10 +80,11 @@ func (c *PodCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageB return nil, err } + groupID := nextGroupID() ctx := &processors.ProcessorContext{ ClusterID: clusterID, - Cfg: cfg.Orchestrator, - HostName: cfg.HostName, + Cfg: c.config, + HostName: c.hostInfo.HostName, MsgGroupID: groupID, NodeType: orchestrator.K8sPod, ApiGroupVersionTag: fmt.Sprintf("kube_api_version:%s", "v1"), @@ -88,7 +102,7 @@ func (c *PodCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageB orchestrator.SetCacheStats(len(podList), processed, ctx.NodeType) - return metadataMessages, nil + return StandardRunResult(metadataMessages), nil } // Cleanup frees any resource held by the PodCheck before the agent exits diff --git a/pkg/process/checks/pod_null.go b/pkg/process/checks/pod_null.go index de36e3e9cc00c3..7a7569c52b3b7f 100644 --- a/pkg/process/checks/pod_null.go +++ b/pkg/process/checks/pod_null.go @@ -10,10 +10,6 @@ package checks import ( "fmt" - - model "github.com/DataDog/agent-payload/v5/process" - - "github.com/DataDog/datadog-agent/pkg/process/config" ) // Pod is a singleton PodCheck. @@ -21,26 +17,35 @@ var Pod = &PodCheck{} // PodCheck is a check that returns container metadata and stats. type PodCheck struct { - sysInfo *model.SystemInfo } // Init initializes a PodCheck instance. -func (c *PodCheck) Init(cfg *config.AgentConfig, info *model.SystemInfo) { - c.sysInfo = info +func (c *PodCheck) Init(_ *SysProbeConfig, hostInfo *HostInfo) error { + return nil +} + +// IsEnabled returns true if the check is enabled by configuration +func (c *PodCheck) IsEnabled() bool { + return false +} + +// SupportsRunOptions returns true if the check supports RunOptions +func (c *PodCheck) SupportsRunOptions() bool { + return false } // Name returns the name of the ProcessCheck. func (c *PodCheck) Name() string { return "pod" } -// RealTime indicates if this check only runs in real-time mode. -func (c *PodCheck) RealTime() bool { return false } +// Realtime indicates if this check only runs in real-time mode. +func (c *PodCheck) Realtime() bool { return false } // ShouldSaveLastRun indicates if the output from the last run should be saved for use in flares func (c *PodCheck) ShouldSaveLastRun() bool { return true } // Run runs the PodCheck to collect a list of running pods -func (c *PodCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageBody, error) { - return nil, fmt.Errorf("Not implemented") +func (c *PodCheck) Run(_ func() int32, _ *RunOptions) (RunResult, error) { + return nil, fmt.Errorf("not implemented") } // Cleanup frees any resource held by the PodCheck before the agent exits diff --git a/pkg/process/checks/process.go b/pkg/process/checks/process.go index 6bf1da24edb394..602d5a820485b3 100644 --- a/pkg/process/checks/process.go +++ b/pkg/process/checks/process.go @@ -8,26 +8,39 @@ package checks import ( "context" "errors" + "regexp" + "strings" "time" model "github.com/DataDog/agent-payload/v5/process" "github.com/DataDog/gopsutil/cpu" + "go.uber.org/atomic" - "github.com/DataDog/datadog-agent/pkg/process/config" + ddconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/process/net" "github.com/DataDog/datadog-agent/pkg/process/procutil" "github.com/DataDog/datadog-agent/pkg/process/statsd" "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/util/cloudproviders" "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/util/subscriptions" ) -const emptyCtrID = "" +const ( + emptyCtrID = "" + configPrefix = "process_config." + configCustomSensitiveWords = configPrefix + "custom_sensitive_words" + configScrubArgs = configPrefix + "scrub_args" + configStripProcArgs = configPrefix + "strip_proc_arguments" + configDisallowList = configPrefix + "blacklist_patterns" +) // Process is a singleton ProcessCheck. -var Process = &ProcessCheck{} +var Process = &ProcessCheck{ + scrubber: procutil.NewDefaultDataScrubber(), +} -var _ CheckWithRealTime = (*ProcessCheck)(nil) +var _ Check = (*ProcessCheck)(nil) var errEmptyCPUTime = errors.New("empty CPU time information returned") @@ -36,8 +49,13 @@ var errEmptyCPUTime = errors.New("empty CPU time information returned") // checks that will be used for rates, cpu calculations, etc. type ProcessCheck struct { probe procutil.Probe + // scrubber is a DataScrubber to hide command line sensitive words + scrubber *procutil.DataScrubber - sysInfo *model.SystemInfo + // disallowList to hide processes + disallowList []*regexp.Regexp + + hostInfo *HostInfo lastCPUTime cpu.TimesStat lastProcs map[int32]*procutil.Process lastRun time.Time @@ -61,11 +79,14 @@ type ProcessCheck struct { maxBatchSize int maxBatchBytes int + + lastConnRates *atomic.Pointer[ProcessConnRates] + connRatesReceiver subscriptions.Receiver[ProcessConnRates] } // Init initializes the singleton ProcessCheck. -func (p *ProcessCheck) Init(_ *config.AgentConfig, info *model.SystemInfo) { - p.sysInfo = info +func (p *ProcessCheck) Init(_ *SysProbeConfig, info *HostInfo) error { + p.hostInfo = info p.probe = newProcessProbe(procutil.WithPermission(Process.SysprobeProcessModuleEnabled)) p.containerProvider = util.GetSharedContainerProvider() @@ -79,40 +100,66 @@ func (p *ProcessCheck) Init(_ *config.AgentConfig, info *model.SystemInfo) { p.maxBatchSize = getMaxBatchSize() p.maxBatchBytes = getMaxBatchBytes() -} -// Name returns the name of the ProcessCheck. -func (p *ProcessCheck) Name() string { return config.ProcessCheckName } + initScrubber(p.scrubber) -// RealTimeName returns the name of the RTProcessCheck -func (p *ProcessCheck) RealTimeName() string { return config.RTProcessCheckName } + p.disallowList = initDisallowList() -// RealTime indicates if this check only runs in real-time mode. -func (p *ProcessCheck) RealTime() bool { return false } + p.initConnRates() + return nil +} -// ShouldSaveLastRun indicates if the output from the last run should be saved for use in flares -func (p *ProcessCheck) ShouldSaveLastRun() bool { return true } +func (p *ProcessCheck) initConnRates() { + p.lastConnRates = atomic.NewPointer[ProcessConnRates](nil) + p.connRatesReceiver = subscriptions.NewReceiver[ProcessConnRates]() -// Run runs the ProcessCheck to collect a list of running processes and relevant -// stats for each. On most POSIX systems this will use a mix of procfs and other -// OS-specific APIs to collect this information. The bulk of this collection is -// abstracted into the `gopsutil` library. -// Processes are split up into a chunks of at most 100 processes per message to -// limit the message size on intake. -// See agent.proto for the schema of the message and models used. -func (p *ProcessCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageBody, error) { - result, err := p.run(cfg, groupID, false) - if err != nil { - return nil, err + go p.updateConnRates() +} + +func (p *ProcessCheck) updateConnRates() { + for { + connRates, ok := <-p.connRatesReceiver.Ch + if !ok { + return + } + p.lastConnRates.Store(&connRates) } +} - return result.Standard, nil +func (p *ProcessCheck) getLastConnRates() ProcessConnRates { + if p.lastConnRates == nil { + return nil + } + if result := p.lastConnRates.Load(); result != nil { + return *result + } + return nil } +// IsEnabled returns true if the check is enabled by configuration +func (p *ProcessCheck) IsEnabled() bool { + // TODO - move config check logic here + return true +} + +// SupportsRunOptions returns true if the check supports RunOptions +func (p *ProcessCheck) SupportsRunOptions() bool { + return true +} + +// Name returns the name of the ProcessCheck. +func (p *ProcessCheck) Name() string { return ProcessCheckName } + +// Realtime indicates if this check only runs in real-time mode. +func (p *ProcessCheck) Realtime() bool { return false } + +// ShouldSaveLastRun indicates if the output from the last run should be saved for use in flares +func (p *ProcessCheck) ShouldSaveLastRun() bool { return true } + // Cleanup frees any resource held by the ProcessCheck before the agent exits func (p *ProcessCheck) Cleanup() {} -func (p *ProcessCheck) run(cfg *config.AgentConfig, groupID int32, collectRealTime bool) (*RunResult, error) { +func (p *ProcessCheck) run(groupID int32, collectRealTime bool) (RunResult, error) { start := time.Now() cpuTimes, err := cpu.Times(false) if err != nil { @@ -166,12 +213,12 @@ func (p *ProcessCheck) run(cfg *config.AgentConfig, groupID int32, collectRealTi p.realtimeLastProcs = procsToStats(p.lastProcs) p.realtimeLastRun = p.lastRun } - return &RunResult{}, nil + return CombinedRunResult{}, nil } - connsByPID := Connections.getLastConnectionsByPID() - procsByCtr := fmtProcesses(cfg, procs, p.lastProcs, pidToCid, cpuTimes[0], p.lastCPUTime, p.lastRun, connsByPID) - messages, totalProcs, totalContainers := createProcCtrMessages(procsByCtr, containers, cfg, p.maxBatchSize, p.maxBatchBytes, p.sysInfo, groupID, p.networkID) + connsRates := p.getLastConnRates() + procsByCtr := fmtProcesses(p.scrubber, p.disallowList, procs, p.lastProcs, pidToCid, cpuTimes[0], p.lastCPUTime, p.lastRun, connsRates) + messages, totalProcs, totalContainers := createProcCtrMessages(p.hostInfo, procsByCtr, containers, p.maxBatchSize, p.maxBatchBytes, groupID, p.networkID) // Store the last state for comparison on the next run. // Note: not storing the filtered in case there are new processes that haven't had a chance to show up twice. @@ -179,7 +226,7 @@ func (p *ProcessCheck) run(cfg *config.AgentConfig, groupID int32, collectRealTi p.lastCPUTime = cpuTimes[0] p.lastRun = time.Now() - result := &RunResult{ + result := &CombinedRunResult{ Standard: messages, } if collectRealTime { @@ -187,24 +234,24 @@ func (p *ProcessCheck) run(cfg *config.AgentConfig, groupID int32, collectRealTi if p.realtimeLastProcs != nil { // TODO: deduplicate chunking with RT collection - chunkedStats := fmtProcessStats(cfg, p.maxBatchSize, stats, p.realtimeLastProcs, pidToCid, cpuTimes[0], p.realtimeLastCPUTime, p.realtimeLastRun, connsByPID) + chunkedStats := fmtProcessStats(p.maxBatchSize, stats, p.realtimeLastProcs, pidToCid, cpuTimes[0], p.realtimeLastCPUTime, p.realtimeLastRun, connsRates) groupSize := len(chunkedStats) chunkedCtrStats := convertAndChunkContainers(containers, groupSize) messages := make([]model.MessageBody, 0, groupSize) for i := 0; i < groupSize; i++ { messages = append(messages, &model.CollectorRealTime{ - HostName: cfg.HostName, + HostName: p.hostInfo.HostName, Stats: chunkedStats[i], ContainerStats: chunkedCtrStats[i], GroupId: groupID, GroupSize: int32(groupSize), - NumCpus: int32(len(p.sysInfo.Cpus)), - TotalMemory: p.sysInfo.TotalMemory, - ContainerHostType: cfg.ContainerHostType, + NumCpus: int32(len(p.hostInfo.SystemInfo.Cpus)), + TotalMemory: p.hostInfo.SystemInfo.TotalMemory, + ContainerHostType: p.hostInfo.ContainerHostType, }) } - result.RealTime = messages + result.Realtime = messages } p.realtimeLastCPUTime = p.lastCPUTime @@ -227,28 +274,30 @@ func procsToStats(procs map[int32]*procutil.Process) map[int32]*procutil.Stats { return stats } -// RunWithOptions collects process data (regular metadata + stats) and/or realtime process data (stats only) -// Messages are grouped as RunResult instances with CheckName identifying the type -func (p *ProcessCheck) RunWithOptions(cfg *config.AgentConfig, nextGroupID func() int32, options RunOptions) (*RunResult, error) { +// Run collects process data (regular metadata + stats) and/or realtime process data (stats only) +func (p *ProcessCheck) Run(nextGroupID func() int32, options *RunOptions) (RunResult, error) { + if options == nil { + return p.run(nextGroupID(), false) + } + if options.RunStandard { log.Tracef("Running process check") - return p.run(cfg, nextGroupID(), options.RunRealTime) + return p.run(nextGroupID(), options.RunRealtime) } - if options.RunRealTime { + if options.RunRealtime { log.Tracef("Running rtprocess check") - return p.runRealtime(cfg, nextGroupID()) + return p.runRealtime(nextGroupID()) } return nil, errors.New("invalid run options for check") } func createProcCtrMessages( + hostInfo *HostInfo, procsByCtr map[string][]*model.Process, containers []*model.Container, - cfg *config.AgentConfig, maxBatchSize int, maxBatchWeight int, - sysInfo *model.SystemInfo, groupID int32, networkID string, ) ([]model.MessageBody, int, int) { @@ -258,11 +307,11 @@ func createProcCtrMessages( messages := make([]model.MessageBody, 0, len(collectorProcs)) for _, m := range collectorProcs { m.GroupSize = int32(len(collectorProcs)) - m.HostName = cfg.HostName + m.HostName = hostInfo.HostName m.NetworkId = networkID - m.Info = sysInfo + m.Info = hostInfo.SystemInfo m.GroupId = groupID - m.ContainerHostType = cfg.ContainerHostType + m.ContainerHostType = hostInfo.ContainerHostType messages = append(messages, m) } @@ -297,23 +346,23 @@ func chunkProcessesAndContainers( // fmtProcesses goes through each process, converts them to process object and group them by containers // non-container processes would be in a single group with key as empty string "" func fmtProcesses( - cfg *config.AgentConfig, + scrubber *procutil.DataScrubber, + disallowList []*regexp.Regexp, procs, lastProcs map[int32]*procutil.Process, ctrByProc map[int]string, syst2, syst1 cpu.TimesStat, lastRun time.Time, - connsByPID map[int32][]*model.Connection, + connRates ProcessConnRates, ) map[string][]*model.Process { procsByCtr := make(map[string][]*model.Process) - connCheckIntervalS := int(cfg.CheckIntervals[config.ConnectionsCheckName] / time.Second) for _, fp := range procs { - if skipProcess(cfg, fp, lastProcs) { + if skipProcess(disallowList, fp, lastProcs) { continue } - // Hide blacklisted args if the Scrubber is enabled - fp.Cmdline = cfg.Scrubber.ScrubProcessCommand(fp) + // Hide disallow-listed args if the Scrubber is enabled + fp.Cmdline = scrubber.ScrubProcessCommand(fp) proc := &model.Process{ Pid: fp.Pid, @@ -329,7 +378,10 @@ func fmtProcesses( VoluntaryCtxSwitches: uint64(fp.Stats.CtxSwitches.Voluntary), InvoluntaryCtxSwitches: uint64(fp.Stats.CtxSwitches.Involuntary), ContainerId: ctrByProc[int(fp.Pid)], - Networks: formatNetworks(connsByPID[fp.Pid], connCheckIntervalS), + } + + if connRates != nil { + proc.Networks = connRates[fp.Pid] } _, ok := procsByCtr[proc.ContainerId] if !ok { @@ -338,7 +390,7 @@ func fmtProcesses( procsByCtr[proc.ContainerId] = append(procsByCtr[proc.ContainerId], proc) } - cfg.Scrubber.IncrementCacheAge() + scrubber.IncrementCacheAge() return procsByCtr } @@ -442,17 +494,17 @@ func formatCPU(statsNow, statsBefore *procutil.Stats, syst2, syst1 cpu.TimesStat return formatCPUTimes(statsNow, statsNow.CPUTime, statsBefore.CPUTime, syst2, syst1) } -// skipProcess will skip a given process if it's blacklisted or hasn't existed +// skipProcess will skip a given process if it's disallow-listed or hasn't existed // for multiple collections. func skipProcess( - cfg *config.AgentConfig, + disallowList []*regexp.Regexp, fp *procutil.Process, lastProcs map[int32]*procutil.Process, ) bool { if len(fp.Cmdline) == 0 { return true } - if config.IsBlacklisted(fp.Cmdline, cfg.Blacklist) { + if isDisallowListed(fp.Cmdline, disallowList) { return true } if _, ok := lastProcs[fp.Pid]; !ok { @@ -497,3 +549,54 @@ func mergeProcWithSysprobeStats(pids []int32, procs map[int32]*procutil.Process, log.Debugf("cannot do GetProcStats from system-probe for process check: %s", err) } } + +func initScrubber(scrubber *procutil.DataScrubber) { + // Enable/Disable the DataScrubber to obfuscate process args + if ddconfig.Datadog.IsSet(configScrubArgs) { + scrubber.Enabled = ddconfig.Datadog.GetBool(configScrubArgs) + } + + if scrubber.Enabled { // Scrubber is enabled by default when it's created + log.Debug("Starting process collection with Scrubber enabled") + } + + // A custom word list to enhance the default one used by the DataScrubber + if ddconfig.Datadog.IsSet(configCustomSensitiveWords) { + words := ddconfig.Datadog.GetStringSlice(configCustomSensitiveWords) + scrubber.AddCustomSensitiveWords(words) + log.Debug("Adding custom sensitives words to Scrubber:", words) + } + + // Strips all process arguments + if ddconfig.Datadog.GetBool(configStripProcArgs) { + log.Debug("Strip all process arguments enabled") + scrubber.StripAllArguments = true + } +} + +func initDisallowList() []*regexp.Regexp { + var disallowList []*regexp.Regexp + // A list of regex patterns that will exclude a process if matched. + if ddconfig.Datadog.IsSet(configDisallowList) { + for _, b := range ddconfig.Datadog.GetStringSlice(configDisallowList) { + r, err := regexp.Compile(b) + if err != nil { + log.Warnf("Ignoring invalid disallow list pattern: %s", b) + continue + } + disallowList = append(disallowList, r) + } + } + return disallowList +} + +// isDisallowListed returns a boolean indicating if the given command is disallow-listed by our config. +func isDisallowListed(cmdline []string, disallowList []*regexp.Regexp) bool { + cmd := strings.Join(cmdline, " ") + for _, b := range disallowList { + if b.MatchString(cmd) { + return true + } + } + return false +} diff --git a/pkg/process/checks/process_common_test.go b/pkg/process/checks/process_common_test.go index 9037d01ff59abc..79d9de727e84f1 100644 --- a/pkg/process/checks/process_common_test.go +++ b/pkg/process/checks/process_common_test.go @@ -74,7 +74,6 @@ func makeProcessModel(t *testing.T, process *procutil.Process) *model.Process { }, CreateTime: process.Stats.CreateTime, IoStat: &model.IOStat{}, - Networks: &model.ProcessNetworks{}, } } @@ -95,8 +94,7 @@ func makeProcessStatModels(t *testing.T, processes ...*procutil.Process) []*mode SystemPct: float32(cpu.SystemPct), TotalPct: float32(cpu.UserPct + cpu.SystemPct), }, - IoStat: &model.IOStat{}, - Networks: &model.ProcessNetworks{}, + IoStat: &model.IOStat{}, }) } diff --git a/pkg/process/checks/process_discovery_check.go b/pkg/process/checks/process_discovery_check.go index 267ecb3d28c35b..319a63f81e1957 100644 --- a/pkg/process/checks/process_discovery_check.go +++ b/pkg/process/checks/process_discovery_check.go @@ -11,7 +11,6 @@ import ( model "github.com/DataDog/agent-payload/v5/process" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/procutil" ) @@ -23,33 +22,45 @@ var ProcessDiscovery = &ProcessDiscoveryCheck{} // The goal of this check is to collect information about possible integrations that may be enabled by the end user. type ProcessDiscoveryCheck struct { probe procutil.Probe - info *model.SystemInfo + info *HostInfo initCalled bool maxBatchSize int } // Init initializes the ProcessDiscoveryCheck. It is a runtime error to call Run without first having called Init. -func (d *ProcessDiscoveryCheck) Init(_ *config.AgentConfig, info *model.SystemInfo) { +func (d *ProcessDiscoveryCheck) Init(_ *SysProbeConfig, info *HostInfo) error { d.info = info d.initCalled = true d.probe = newProcessProbe(procutil.WithPermission(Process.SysprobeProcessModuleEnabled)) d.maxBatchSize = getMaxBatchSize() + return nil +} + +// IsEnabled returns true if the check is enabled by configuration +func (d *ProcessDiscoveryCheck) IsEnabled() bool { + // TODO - move config check logic here + return true +} + +// SupportsRunOptions returns true if the check supports RunOptions +func (d *ProcessDiscoveryCheck) SupportsRunOptions() bool { + return false } // Name returns the name of the ProcessDiscoveryCheck. -func (d *ProcessDiscoveryCheck) Name() string { return config.DiscoveryCheckName } +func (d *ProcessDiscoveryCheck) Name() string { return DiscoveryCheckName } -// RealTime returns a value that says whether this check should be run in real time. -func (d *ProcessDiscoveryCheck) RealTime() bool { return false } +// Realtime returns a value that says whether this check should be run in real time. +func (d *ProcessDiscoveryCheck) Realtime() bool { return false } // ShouldSaveLastRun indicates if the output from the last run should be saved for use in flares func (d *ProcessDiscoveryCheck) ShouldSaveLastRun() bool { return true } // Run collects process metadata, and packages it into a CollectorProcessDiscovery payload to be sent. // It is a runtime error to call Run without first having called Init. -func (d *ProcessDiscoveryCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageBody, error) { +func (d *ProcessDiscoveryCheck) Run(nextGroupID func() int32, _ *RunOptions) (RunResult, error) { if !d.initCalled { return nil, fmt.Errorf("ProcessDiscoveryCheck.Run called before Init") } @@ -61,15 +72,17 @@ func (d *ProcessDiscoveryCheck) Run(cfg *config.AgentConfig, groupID int32) ([]m } host := &model.Host{ - Name: cfg.HostName, - NumCpus: calculateNumCores(d.info), - TotalMemory: d.info.TotalMemory, + Name: d.info.HostName, + NumCpus: calculateNumCores(d.info.SystemInfo), + TotalMemory: d.info.SystemInfo.TotalMemory, } procDiscoveryChunks := chunkProcessDiscoveries(pidMapToProcDiscoveries(procs), d.maxBatchSize) payload := make([]model.MessageBody, len(procDiscoveryChunks)) + + groupID := nextGroupID() for i, procDiscoveryChunk := range procDiscoveryChunks { payload[i] = &model.CollectorProcDiscovery{ - HostName: cfg.HostName, + HostName: d.info.HostName, GroupId: groupID, GroupSize: int32(len(procDiscoveryChunks)), ProcessDiscoveries: procDiscoveryChunk, @@ -77,7 +90,7 @@ func (d *ProcessDiscoveryCheck) Run(cfg *config.AgentConfig, groupID int32) ([]m } } - return payload, nil + return StandardRunResult(payload), nil } // Cleanup frees any resource held by the ProcessDiscoveryCheck before the agent exits diff --git a/pkg/process/checks/process_discovery_check_test.go b/pkg/process/checks/process_discovery_check_test.go index 41eedd1996771e..e2843c463b7c37 100644 --- a/pkg/process/checks/process_discovery_check_test.go +++ b/pkg/process/checks/process_discovery_check_test.go @@ -10,10 +10,14 @@ import ( model "github.com/DataDog/agent-payload/v5/process" "github.com/stretchr/testify/assert" - - "github.com/DataDog/datadog-agent/pkg/process/config" ) +func testGroupId(groupID int32) func() int32 { + return func() int32 { + return groupID + } +} + func TestProcessDiscoveryCheck(t *testing.T) { prev := getMaxBatchSize defer func() { @@ -23,18 +27,22 @@ func TestProcessDiscoveryCheck(t *testing.T) { maxBatchSize := 10 getMaxBatchSize = func() int { return maxBatchSize } - cfg := &config.AgentConfig{} - ProcessDiscovery.Init(cfg, &model.SystemInfo{ - Cpus: []*model.CPUInfo{{Number: 0}}, - TotalMemory: 0, - }) + ProcessDiscovery.Init( + nil, + &HostInfo{ + SystemInfo: &model.SystemInfo{ + Cpus: []*model.CPUInfo{{Number: 0}}, + TotalMemory: 0, + }, + }, + ) // Test check runs without error - result, err := ProcessDiscovery.Run(cfg, 0) + result, err := ProcessDiscovery.Run(testGroupId(0), nil) assert.NoError(t, err) // Test that result has the proper number of chunks, and that those chunks are of the correct type - for _, elem := range result { + for _, elem := range result.Payloads() { assert.IsType(t, &model.CollectorProcDiscovery{}, elem) collectorProcDiscovery := elem.(*model.CollectorProcDiscovery) for _, proc := range collectorProcDiscovery.ProcessDiscoveries { diff --git a/pkg/process/checks/process_events_fallback.go b/pkg/process/checks/process_events_fallback.go index de9245c7dd1a9f..0df4a7c819fd31 100644 --- a/pkg/process/checks/process_events_fallback.go +++ b/pkg/process/checks/process_events_fallback.go @@ -10,10 +10,6 @@ package checks import ( "errors" - - model "github.com/DataDog/agent-payload/v5/process" - - "github.com/DataDog/datadog-agent/pkg/process/config" ) // ProcessEvents is a ProcessEventsCheck singleton @@ -24,20 +20,31 @@ type ProcessEventsCheck struct { } // Init initializes the ProcessEventsCheck. -func (e *ProcessEventsCheck) Init(_ *config.AgentConfig, info *model.SystemInfo) { +func (e *ProcessEventsCheck) Init(_ *SysProbeConfig, _ *HostInfo) error { + return nil +} + +// IsEnabled returns true if the check is enabled by configuration +func (e *ProcessEventsCheck) IsEnabled() bool { + return false +} + +// SupportsRunOptions returns true if the check supports RunOptions +func (e *ProcessEventsCheck) SupportsRunOptions() bool { + return false } // Name returns the name of the ProcessEventsCheck. -func (e *ProcessEventsCheck) Name() string { return config.ProcessEventsCheckName } +func (e *ProcessEventsCheck) Name() string { return ProcessEventsCheckName } -// RealTime returns a value that says whether this check should be run in real time. -func (e *ProcessEventsCheck) RealTime() bool { return false } +// Realtime returns a value that says whether this check should be run in real time. +func (e *ProcessEventsCheck) Realtime() bool { return false } // ShouldSaveLastRun indicates if the output from the last run should be saved for use in flares func (e *ProcessEventsCheck) ShouldSaveLastRun() bool { return true } // Run fetches process lifecycle events that have been stored in-memory since the last check run -func (e *ProcessEventsCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageBody, error) { +func (e *ProcessEventsCheck) Run(nextGroupID func() int32, _ *RunOptions) (RunResult, error) { return nil, errors.New("the process_events check is not supported on this system") } diff --git a/pkg/process/checks/process_events_linux.go b/pkg/process/checks/process_events_linux.go index e7aefd979a87b3..1b38c70668e0a4 100644 --- a/pkg/process/checks/process_events_linux.go +++ b/pkg/process/checks/process_events_linux.go @@ -17,7 +17,6 @@ import ( payload "github.com/DataDog/agent-payload/v5/process" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/events" "github.com/DataDog/datadog-agent/pkg/process/events/model" "github.com/DataDog/datadog-agent/pkg/process/statsd" @@ -33,29 +32,28 @@ type ProcessEventsCheck struct { store events.Store listener *events.SysProbeListener - sysInfo *payload.SystemInfo + hostInfo *HostInfo maxBatchSize int } // Init initializes the ProcessEventsCheck. -func (e *ProcessEventsCheck) Init(_ *config.AgentConfig, info *payload.SystemInfo) { +func (e *ProcessEventsCheck) Init(_ *SysProbeConfig, info *HostInfo) error { e.initMutex.Lock() defer e.initMutex.Unlock() if e.store != nil || e.listener != nil { - log.Error("process_events check has already been initialized") - return + return log.Error("process_events check has already been initialized") } log.Info("Initializing process_events check") - e.sysInfo = info + e.hostInfo = info e.maxBatchSize = getMaxBatchSize() store, err := events.NewRingStore(statsd.Client) if err != nil { log.Errorf("RingStore can't be created: %v", err) - return + return err } e.store = store @@ -65,12 +63,13 @@ func (e *ProcessEventsCheck) Init(_ *config.AgentConfig, info *payload.SystemInf }) if err != nil { log.Errorf("Event Listener can't be created: %v", err) - return + return err } e.listener = listener e.start() log.Info("process_events check correctly set up") + return nil } // start kicks off process lifecycle events collection and keep them in memory until they're fetched in the next check run @@ -79,17 +78,28 @@ func (e *ProcessEventsCheck) start() { e.listener.Run() } +// IsEnabled returns true if the check is enabled by configuration +func (e *ProcessEventsCheck) IsEnabled() bool { + // TODO - move config check logic here + return true +} + +// SupportsRunOptions returns true if the check supports RunOptions +func (e *ProcessEventsCheck) SupportsRunOptions() bool { + return false +} + // Name returns the name of the ProcessEventsCheck. -func (e *ProcessEventsCheck) Name() string { return config.ProcessEventsCheckName } +func (e *ProcessEventsCheck) Name() string { return ProcessEventsCheckName } -// RealTime returns a value that says whether this check should be run in real time. -func (e *ProcessEventsCheck) RealTime() bool { return false } +// Realtime returns a value that says whether this check should be run in real time. +func (e *ProcessEventsCheck) Realtime() bool { return false } // ShouldSaveLastRun indicates if the output from the last run should be saved for use in flares func (e *ProcessEventsCheck) ShouldSaveLastRun() bool { return true } // Run fetches process lifecycle events that have been stored in-memory since the last check run -func (e *ProcessEventsCheck) Run(cfg *config.AgentConfig, groupID int32) ([]payload.MessageBody, error) { +func (e *ProcessEventsCheck) Run(nextGroupID func() int32, _ *RunOptions) (RunResult, error) { if !e.isCheckCorrectlySetup() { return nil, errors.New("the process_events check hasn't been correctly initialized") } @@ -104,17 +114,18 @@ func (e *ProcessEventsCheck) Run(cfg *config.AgentConfig, groupID int32) ([]payl chunks := chunkProcessEvents(payloadEvents, e.maxBatchSize) messages := make([]payload.MessageBody, len(chunks)) + groupID := nextGroupID() for c, chunk := range chunks { messages[c] = &payload.CollectorProcEvent{ - Hostname: cfg.HostName, - Info: e.sysInfo, + Hostname: e.hostInfo.HostName, + Info: e.hostInfo.SystemInfo, Events: chunk, GroupId: groupID, GroupSize: int32(len(chunks)), } } - return messages, nil + return StandardRunResult(messages), nil } // Cleanup frees any resource held by the ProcessEventsCheck before the agent exits diff --git a/pkg/process/checks/process_events_linux_test.go b/pkg/process/checks/process_events_linux_test.go index f041f91031ac30..2e242bf1aa17f9 100644 --- a/pkg/process/checks/process_events_linux_test.go +++ b/pkg/process/checks/process_events_linux_test.go @@ -19,7 +19,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/events" "github.com/DataDog/datadog-agent/pkg/process/events/model" "github.com/DataDog/datadog-agent/pkg/security/api" @@ -243,17 +242,17 @@ func TestProcessEventsCheck(t *testing.T) { maxBatchSize: 10, listener: listener, store: store, + hostInfo: &HostInfo{}, } check.start() - cfg := &config.AgentConfig{} events := make([]*payload.ProcessEvent, 0) assert.Eventually(t, func() bool { // Run the process_events check until all expected events are collected - msgs, err := check.Run(cfg, 0) + msgs, err := check.Run(testGroupId(0), nil) require.NoError(t, err) - for _, msg := range msgs { + for _, msg := range msgs.Payloads() { collectorProc, ok := msg.(*payload.CollectorProcEvent) require.True(t, ok) events = append(events, collectorProc.Events...) diff --git a/pkg/process/checks/process_nix_test.go b/pkg/process/checks/process_nix_test.go index 987e57d6abd132..b1c975f3742b49 100644 --- a/pkg/process/checks/process_nix_test.go +++ b/pkg/process/checks/process_nix_test.go @@ -20,7 +20,6 @@ import ( model "github.com/DataDog/agent-payload/v5/process" "github.com/DataDog/gopsutil/cpu" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/procutil" ) @@ -46,8 +45,8 @@ func TestBasicProcessMessages(t *testing.T) { } lastRun := time.Now().Add(-5 * time.Second) syst1, syst2 := cpu.TimesStat{}, cpu.TimesStat{} - cfg := config.NewDefaultAgentConfig() sysInfo := &model.SystemInfo{} + hostInfo := &HostInfo{SystemInfo: sysInfo} for i, tc := range []struct { testName string @@ -55,7 +54,7 @@ func TestBasicProcessMessages(t *testing.T) { containers []*model.Container pidToCid map[int]string maxSize int - blacklist []string + disallowList []string expectedChunks int expectedProcs int expectedContainers int @@ -66,7 +65,7 @@ func TestBasicProcessMessages(t *testing.T) { maxSize: 2, containers: []*model.Container{}, pidToCid: nil, - blacklist: []string{}, + disallowList: []string{}, expectedChunks: 2, expectedProcs: 3, expectedContainers: 0, @@ -77,7 +76,7 @@ func TestBasicProcessMessages(t *testing.T) { maxSize: 2, containers: []*model.Container{c[0]}, pidToCid: map[int]string{1: "foo", 2: "foo"}, - blacklist: []string{}, + disallowList: []string{}, expectedChunks: 2, expectedProcs: 3, expectedContainers: 1, @@ -88,7 +87,7 @@ func TestBasicProcessMessages(t *testing.T) { maxSize: 1, containers: []*model.Container{c[1]}, pidToCid: map[int]string{3: "bar"}, - blacklist: []string{}, + disallowList: []string{}, expectedChunks: 3, expectedProcs: 3, expectedContainers: 1, @@ -99,7 +98,7 @@ func TestBasicProcessMessages(t *testing.T) { maxSize: 2, containers: []*model.Container{c[0], c[1]}, pidToCid: map[int]string{1: "foo", 2: "foo", 3: "bar"}, - blacklist: []string{}, + disallowList: []string{}, expectedChunks: 2, expectedProcs: 3, expectedContainers: 2, @@ -110,22 +109,20 @@ func TestBasicProcessMessages(t *testing.T) { maxSize: 2, containers: []*model.Container{c[1]}, pidToCid: map[int]string{3: "bar"}, - blacklist: []string{"foo"}, + disallowList: []string{"foo"}, expectedChunks: 1, expectedProcs: 2, expectedContainers: 1, }, } { t.Run(tc.testName, func(t *testing.T) { - bl := make([]*regexp.Regexp, 0, len(tc.blacklist)) - for _, s := range tc.blacklist { - bl = append(bl, regexp.MustCompile(s)) + disallowList := make([]*regexp.Regexp, 0, len(tc.disallowList)) + for _, s := range tc.disallowList { + disallowList = append(disallowList, regexp.MustCompile(s)) } - cfg.Blacklist = bl - networks := make(map[int32][]*model.Connection) - procs := fmtProcesses(cfg, tc.processes, tc.processes, tc.pidToCid, syst2, syst1, lastRun, networks) - messages, totalProcs, totalContainers := createProcCtrMessages(procs, tc.containers, cfg, tc.maxSize, maxBatchBytes, sysInfo, int32(i), "nid") + procs := fmtProcesses(procutil.NewDefaultDataScrubber(), disallowList, tc.processes, tc.processes, tc.pidToCid, syst2, syst1, lastRun, nil) + messages, totalProcs, totalContainers := createProcCtrMessages(hostInfo, procs, tc.containers, tc.maxSize, maxBatchBytes, int32(i), "nid") assert.Equal(t, tc.expectedChunks, len(messages)) @@ -227,24 +224,23 @@ func TestContainerProcessChunking(t *testing.T) { }, } { t.Run(tc.testName, func(t *testing.T) { - networks := make(map[int32][]*model.Connection) procs, ctrs, pidToCid := generateCtrProcs(tc.ctrProcs) procsByPid := procsToHash(procs) lastRun := time.Now().Add(-5 * time.Second) syst1, syst2 := cpu.TimesStat{}, cpu.TimesStat{} - cfg := config.NewDefaultAgentConfig() sysInfo := &model.SystemInfo{} + hostInfo := &HostInfo{SystemInfo: sysInfo} - processes := fmtProcesses(cfg, procsByPid, procsByPid, pidToCid, syst2, syst1, lastRun, networks) - messages, totalProcs, totalContainers := createProcCtrMessages(processes, ctrs, cfg, tc.maxSize, maxBatchBytes, sysInfo, int32(i), "nid") + processes := fmtProcesses(procutil.NewDefaultDataScrubber(), nil, procsByPid, procsByPid, pidToCid, syst2, syst1, lastRun, nil) + messages, totalProcs, totalContainers := createProcCtrMessages(hostInfo, processes, ctrs, tc.maxSize, maxBatchBytes, int32(i), "nid") assert.Equal(t, tc.expectedProcCount, totalProcs) assert.Equal(t, tc.expectedCtrCount, totalContainers) // sort and verify messages sortMsgs(messages) - verifyBatchedMsgs(t, cfg, tc.expectedBatches, messages) + verifyBatchedMsgs(t, hostInfo, tc.expectedBatches, messages) }) } } @@ -278,7 +274,7 @@ func sortMsgs(m []model.MessageBody) { }) } -func verifyBatchedMsgs(t *testing.T, cfg *config.AgentConfig, expected []map[string]int, msgs []model.MessageBody) { +func verifyBatchedMsgs(t *testing.T, hostInfo *HostInfo, expected []map[string]int, msgs []model.MessageBody) { assert := assert.New(t) assert.Equal(len(expected), len(msgs), "Number of messages created") @@ -286,7 +282,7 @@ func verifyBatchedMsgs(t *testing.T, cfg *config.AgentConfig, expected []map[str for i, msg := range msgs { payload := msg.(*model.CollectorProc) - assert.Equal(cfg.ContainerHostType, payload.ContainerHostType) + assert.Equal(hostInfo.ContainerHostType, payload.ContainerHostType) actualCtrPIDCounts := map[string]int{} diff --git a/pkg/process/checks/process_rt.go b/pkg/process/checks/process_rt.go index a1f8c676169f4b..29facb565a079b 100644 --- a/pkg/process/checks/process_rt.go +++ b/pkg/process/checks/process_rt.go @@ -11,7 +11,6 @@ import ( model "github.com/DataDog/agent-payload/v5/process" "github.com/DataDog/gopsutil/cpu" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/net" "github.com/DataDog/datadog-agent/pkg/process/procutil" "github.com/DataDog/datadog-agent/pkg/process/util" @@ -20,7 +19,7 @@ import ( // runRealtime runs the realtime ProcessCheck to collect statistics about the running processes. // Underying procutil.Probe is responsible for the actual implementation -func (p *ProcessCheck) runRealtime(cfg *config.AgentConfig, groupID int32) (*RunResult, error) { +func (p *ProcessCheck) runRealtime(groupID int32) (RunResult, error) { cpuTimes, err := cpu.Times(false) if err != nil { return nil, err @@ -31,7 +30,7 @@ func (p *ProcessCheck) runRealtime(cfg *config.AgentConfig, groupID int32) (*Run // if processCheck haven't fetched any PIDs, return early if len(p.lastPIDs) == 0 { - return &RunResult{}, nil + return CombinedRunResult{}, nil } procs, err := p.probe.StatsForPIDs(p.lastPIDs, time.Now()) @@ -59,26 +58,24 @@ func (p *ProcessCheck) runRealtime(cfg *config.AgentConfig, groupID int32) (*Run p.realtimeLastCPUTime = cpuTimes[0] p.realtimeLastRun = time.Now() log.Debug("first run of rtprocess check - no stats to report") - return &RunResult{}, nil + return CombinedRunResult{}, nil } - connsByPID := Connections.getLastConnectionsByPID() - - chunkedStats := fmtProcessStats(cfg, p.maxBatchSize, procs, p.realtimeLastProcs, pidToCid, cpuTimes[0], p.realtimeLastCPUTime, p.realtimeLastRun, connsByPID) + chunkedStats := fmtProcessStats(p.maxBatchSize, procs, p.realtimeLastProcs, pidToCid, cpuTimes[0], p.realtimeLastCPUTime, p.realtimeLastRun, p.getLastConnRates()) groupSize := len(chunkedStats) chunkedCtrStats := convertAndChunkContainers(containers, groupSize) messages := make([]model.MessageBody, 0, groupSize) for i := 0; i < groupSize; i++ { messages = append(messages, &model.CollectorRealTime{ - HostName: cfg.HostName, + HostName: p.hostInfo.HostName, Stats: chunkedStats[i], ContainerStats: chunkedCtrStats[i], GroupId: groupID, GroupSize: int32(groupSize), - NumCpus: int32(len(p.sysInfo.Cpus)), - TotalMemory: p.sysInfo.TotalMemory, - ContainerHostType: cfg.ContainerHostType, + NumCpus: int32(len(p.hostInfo.SystemInfo.Cpus)), + TotalMemory: p.hostInfo.SystemInfo.TotalMemory, + ContainerHostType: p.hostInfo.ContainerHostType, }) } @@ -88,23 +85,18 @@ func (p *ProcessCheck) runRealtime(cfg *config.AgentConfig, groupID int32) (*Run p.realtimeLastProcs = procs p.realtimeLastCPUTime = cpuTimes[0] - return &RunResult{ - RealTime: messages, - }, nil + return CombinedRunResult{Realtime: messages}, nil } // fmtProcessStats formats and chunks a slice of ProcessStat into chunks. func fmtProcessStats( - cfg *config.AgentConfig, maxBatchSize int, procs, lastProcs map[int32]*procutil.Stats, pidToCid map[int]string, syst2, syst1 cpu.TimesStat, lastRun time.Time, - connsByPID map[int32][]*model.Connection, + connRates ProcessConnRates, ) [][]*model.ProcessStat { - connCheckIntervalS := int(cfg.CheckIntervals[config.ConnectionsCheckName] / time.Second) - chunked := make([][]*model.ProcessStat, 0) chunk := make([]*model.ProcessStat, 0, maxBatchSize) @@ -127,7 +119,7 @@ func fmtProcessStats( ioStat = formatIO(fp, lastProcs[pid].IOStat, lastRun) } - chunk = append(chunk, &model.ProcessStat{ + stat := &model.ProcessStat{ Pid: pid, CreateTime: fp.CreateTime, Memory: formatMemory(fp), @@ -140,8 +132,13 @@ func fmtProcessStats( VoluntaryCtxSwitches: uint64(fp.CtxSwitches.Voluntary), InvoluntaryCtxSwitches: uint64(fp.CtxSwitches.Involuntary), ContainerId: pidToCid[int(pid)], - Networks: formatNetworks(connsByPID[pid], connCheckIntervalS), - }) + } + if connRates != nil { + stat.Networks = connRates[pid] + } + + chunk = append(chunk, stat) + if len(chunk) == maxBatchSize { chunked = append(chunked, chunk) chunk = make([]*model.ProcessStat, 0, maxBatchSize) diff --git a/pkg/process/checks/process_rt_test.go b/pkg/process/checks/process_rt_test.go index bf9ac0b8519386..895ca78ab8bd5b 100644 --- a/pkg/process/checks/process_rt_test.go +++ b/pkg/process/checks/process_rt_test.go @@ -13,7 +13,6 @@ import ( "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/procutil" ) @@ -21,16 +20,15 @@ func TestProcessCheckRealtimeBeforeStandard(t *testing.T) { processCheck, _ := processCheckWithMockProbe(t) // If the standard process check hasn't run yet, nothing is returned - expected := &RunResult{} + expected := CombinedRunResult{} - actual, err := processCheck.runRealtime(config.NewDefaultAgentConfig(), 0) + actual, err := processCheck.runRealtime(0) require.NoError(t, err) assert.Equal(t, expected, actual) } func TestProcessCheckRealtimeFirstRun(t *testing.T) { processCheck, probe := processCheckWithMockProbe(t) - cfg := config.NewDefaultAgentConfig() proc1 := makeProcess(1, "git clone google.com") proc2 := makeProcess(2, "mine-bitcoins -all -x") @@ -46,19 +44,18 @@ func TestProcessCheckRealtimeFirstRun(t *testing.T) { probe.On("StatsForPIDs", mock.Anything, mock.Anything).Return(statsByPid, nil) // Run the standard process check once to populate last seen pids - processCheck.run(cfg, 0, false) + processCheck.run(0, false) // The first realtime check returns nothing - expected := &RunResult{} + expected := CombinedRunResult{} - actual, err := processCheck.runRealtime(cfg, 0) + actual, err := processCheck.runRealtime(0) require.NoError(t, err) assert.Equal(t, expected, actual) } func TestProcessCheckRealtimeSecondRun(t *testing.T) { processCheck, probe := processCheckWithMockProbe(t) - cfg := config.NewDefaultAgentConfig() proc1 := makeProcess(1, "git clone google.com") proc2 := makeProcess(2, "mine-bitcoins -all -x") @@ -74,19 +71,19 @@ func TestProcessCheckRealtimeSecondRun(t *testing.T) { probe.On("StatsForPIDs", mock.Anything, mock.Anything).Return(statsByPid, nil) // Run the standard process check once to populate last seen pids - processCheck.run(cfg, 0, false) + processCheck.run(0, false) // The first realtime check returns nothing - first, err := processCheck.runRealtime(cfg, 0) + first, err := processCheck.runRealtime(0) require.NoError(t, err) - assert.Equal(t, &RunResult{}, first) + assert.Equal(t, CombinedRunResult{}, first) expected := makeProcessStatModels(t, proc1, proc2, proc3, proc4, proc5) - actual, err := processCheck.runRealtime(cfg, 0) + actual, err := processCheck.runRealtime(0) require.NoError(t, err) - require.Len(t, actual.RealTime, 1) - rt := actual.RealTime[0].(*model.CollectorRealTime) + require.Len(t, actual.RealtimePayloads(), 1) + rt := actual.RealtimePayloads()[0].(*model.CollectorRealTime) assert.ElementsMatch(t, expected, rt.Stats) assert.Equal(t, int32(1), rt.GroupSize) - assert.Equal(t, int32(len(processCheck.sysInfo.Cpus)), rt.NumCpus) + assert.Equal(t, int32(len(processCheck.hostInfo.SystemInfo.Cpus)), rt.NumCpus) } diff --git a/pkg/process/checks/process_test.go b/pkg/process/checks/process_test.go index d40bda71519016..a58a805403bdef 100644 --- a/pkg/process/checks/process_test.go +++ b/pkg/process/checks/process_test.go @@ -6,6 +6,8 @@ package checks import ( + "fmt" + "regexp" "testing" "time" @@ -14,7 +16,7 @@ import ( "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" - "github.com/DataDog/datadog-agent/pkg/process/config" + ddconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/process/procutil" "github.com/DataDog/datadog-agent/pkg/process/procutil/mocks" "github.com/DataDog/datadog-agent/pkg/process/util" @@ -23,22 +25,29 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/containers" metricsmock "github.com/DataDog/datadog-agent/pkg/util/containers/metrics/mock" "github.com/DataDog/datadog-agent/pkg/util/containers/metrics/provider" + "github.com/DataDog/datadog-agent/pkg/util/subscriptions" "github.com/DataDog/datadog-agent/pkg/workloadmeta" ) func processCheckWithMockProbe(t *testing.T) (*ProcessCheck, *mocks.Probe) { t.Helper() probe := mocks.NewProbe(t) - return &ProcessCheck{ - probe: probe, - sysInfo: &model.SystemInfo{ - Cpus: []*model.CPUInfo{ - {CoreId: "1"}, - {CoreId: "2"}, - {CoreId: "3"}, - {CoreId: "4"}, - }, + sysInfo := &model.SystemInfo{ + Cpus: []*model.CPUInfo{ + {CoreId: "1"}, + {CoreId: "2"}, + {CoreId: "3"}, + {CoreId: "4"}, }, + } + hostInfo := &HostInfo{ + SystemInfo: sysInfo, + } + + return &ProcessCheck{ + probe: probe, + scrubber: procutil.NewDefaultDataScrubber(), + hostInfo: hostInfo, containerProvider: mockContainerProvider(t), }, probe } @@ -80,9 +89,9 @@ func TestProcessCheckFirstRun(t *testing.T) { Return(processesByPid, nil) // The first run returns nothing because processes must be observed on two consecutive runs - expected := &RunResult{} + expected := CombinedRunResult{} - actual, err := processCheck.run(config.NewDefaultAgentConfig(), 0, false) + actual, err := processCheck.run(0, false) require.NoError(t, err) assert.Equal(t, expected, actual) } @@ -102,41 +111,41 @@ func TestProcessCheckSecondRun(t *testing.T) { Return(processesByPid, nil) // The first run returns nothing because processes must be observed on two consecutive runs - first, err := processCheck.run(config.NewDefaultAgentConfig(), 0, false) + first, err := processCheck.run(0, false) require.NoError(t, err) - assert.Equal(t, &RunResult{}, first) + assert.Equal(t, CombinedRunResult{}, first) expected := []model.MessageBody{ &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc1)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, }, &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc2)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, }, &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc3)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, }, &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc4)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, }, &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc5)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, }, } - actual, err := processCheck.run(config.NewDefaultAgentConfig(), 0, false) + actual, err := processCheck.run(0, false) require.NoError(t, err) - assert.ElementsMatch(t, expected, actual.Standard) // ordering is not guaranteed - assert.Nil(t, actual.RealTime) + assert.ElementsMatch(t, expected, actual.Payloads()) // ordering is not guaranteed + assert.Nil(t, actual.RealtimePayloads()) } func TestProcessCheckWithRealtime(t *testing.T) { @@ -153,45 +162,169 @@ func TestProcessCheckWithRealtime(t *testing.T) { Return(processesByPid, nil) // The first run returns nothing because processes must be observed on two consecutive runs - first, err := processCheck.run(config.NewDefaultAgentConfig(), 0, true) + first, err := processCheck.run(0, true) require.NoError(t, err) - assert.Equal(t, &RunResult{}, first) + assert.Equal(t, CombinedRunResult{}, first) expectedProcs := []model.MessageBody{ &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc1)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, }, &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc2)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, }, &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc3)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, }, &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc4)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, }, &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc5)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, }, } expectedStats := makeProcessStatModels(t, proc1, proc2, proc3, proc4, proc5) - actual, err := processCheck.run(config.NewDefaultAgentConfig(), 0, true) + actual, err := processCheck.run(0, true) require.NoError(t, err) - assert.ElementsMatch(t, expectedProcs, actual.Standard) // ordering is not guaranteed - require.Len(t, actual.RealTime, 1) - rt := actual.RealTime[0].(*model.CollectorRealTime) + assert.ElementsMatch(t, expectedProcs, actual.Payloads()) // ordering is not guaranteed + require.Len(t, actual.RealtimePayloads(), 1) + rt := actual.RealtimePayloads()[0].(*model.CollectorRealTime) assert.ElementsMatch(t, expectedStats, rt.Stats) assert.Equal(t, int32(1), rt.GroupSize) - assert.Equal(t, int32(len(processCheck.sysInfo.Cpus)), rt.NumCpus) + assert.Equal(t, int32(len(processCheck.hostInfo.SystemInfo.Cpus)), rt.NumCpus) +} + +func TestOnlyEnvConfigArgsScrubbingEnabled(t *testing.T) { + _ = ddconfig.Mock(t) + + t.Setenv("DD_CUSTOM_SENSITIVE_WORDS", "*password*,consul_token,*api_key") + + scrubber := procutil.NewDefaultDataScrubber() + initScrubber(scrubber) + + assert.True(t, scrubber.Enabled) + + cases := []struct { + cmdline []string + parsedCmdline []string + }{ + { + []string{"spidly", "--mypasswords=123,456", "consul_token", "1234", "--dd_api_key=1234"}, + []string{"spidly", "--mypasswords=********", "consul_token", "********", "--dd_api_key=********"}, + }, + } + + for i := range cases { + cases[i].cmdline, _ = scrubber.ScrubCommand(cases[i].cmdline) + assert.Equal(t, cases[i].parsedCmdline, cases[i].cmdline) + } +} + +func TestOnlyEnvConfigArgsScrubbingDisabled(t *testing.T) { + _ = ddconfig.Mock(t) + + t.Setenv("DD_SCRUB_ARGS", "false") + t.Setenv("DD_CUSTOM_SENSITIVE_WORDS", "*password*,consul_token,*api_key") + + scrubber := procutil.NewDefaultDataScrubber() + initScrubber(scrubber) + + assert.False(t, scrubber.Enabled) + + cases := []struct { + cmdline []string + parsedCmdline []string + }{ + { + []string{"spidly", "--mypasswords=123,456", "consul_token", "1234", "--dd_api_key=1234"}, + []string{"spidly", "--mypasswords=123,456", "consul_token", "1234", "--dd_api_key=1234"}, + }, + } + + for i := range cases { + fp := &procutil.Process{Cmdline: cases[i].cmdline} + cases[i].cmdline = scrubber.ScrubProcessCommand(fp) + assert.Equal(t, cases[i].parsedCmdline, cases[i].cmdline) + } +} + +func TestDisallowList(t *testing.T) { + testDisallowList := []string{ + "^getty", + "^acpid", + "^atd", + "^upstart-udev-bridge", + "^upstart-socket-bridge", + "^upstart-file-bridge", + "^dhclient", + "^dhclient3", + "^rpc", + "^dbus-daemon", + "udevd", + "^/sbin/", + "^/usr/sbin/", + "^/var/ossec/bin/ossec", + "^rsyslogd", + "^whoopsie$", + "^cron$", + "^CRON$", + "^/usr/lib/postfix/master$", + "^qmgr", + "^pickup", + "^sleep", + "^/lib/systemd/systemd-logind$", + "^/usr/local/bin/goshe dnsmasq$", + } + disallowList := make([]*regexp.Regexp, 0, len(testDisallowList)) + for _, b := range testDisallowList { + r, err := regexp.Compile(b) + if err == nil { + disallowList = append(disallowList, r) + } + } + cases := []struct { + cmdline []string + disallowListed bool + }{ + {[]string{"getty", "-foo", "-bar"}, true}, + {[]string{"rpcbind", "-x"}, true}, + {[]string{"my-rpc-app", "-config foo.ini"}, false}, + {[]string{"rpc.statd", "-L"}, true}, + {[]string{"/usr/sbin/irqbalance"}, true}, + } + + for _, c := range cases { + assert.Equal(t, c.disallowListed, isDisallowListed(c.cmdline, disallowList), + fmt.Sprintf("Case %v failed", c)) + } +} + +func TestConnRates(t *testing.T) { + p := &ProcessCheck{} + + p.initConnRates() + + var transmitter subscriptions.Transmitter[ProcessConnRates] + transmitter.Chs = append(transmitter.Chs, p.connRatesReceiver.Ch) + + rates := ProcessConnRates{ + 1: &model.ProcessNetworks{}, + } + transmitter.Notify(rates) + + close(p.connRatesReceiver.Ch) + + assert.Eventually(t, func() bool { return p.getLastConnRates() != nil }, 10*time.Second, time.Millisecond) + assert.Equal(t, rates, p.getLastConnRates()) } diff --git a/pkg/process/checks/runner.go b/pkg/process/checks/runner.go index 5c6f9fdca8dbdd..0868c69e0d568b 100644 --- a/pkg/process/checks/runner.go +++ b/pkg/process/checks/runner.go @@ -72,7 +72,7 @@ func (r *runnerWithRealTime) run() { if rtEnabled || r.counter == 0 { r.RunCheck(RunOptions{ RunStandard: r.counter == 0, - RunRealTime: rtEnabled, + RunRealtime: rtEnabled, }) } diff --git a/pkg/process/checks/runner_test.go b/pkg/process/checks/runner_test.go index 5841d50d3ead6a..ed4f7d6575bfbe 100644 --- a/pkg/process/checks/runner_test.go +++ b/pkg/process/checks/runner_test.go @@ -16,15 +16,15 @@ import ( var ( runOptionsWithStandard = RunOptions{ RunStandard: true, - RunRealTime: false, + RunRealtime: false, } runOptionsWithRealTime = RunOptions{ RunStandard: false, - RunRealTime: true, + RunRealtime: true, } runOptionsWithBoth = RunOptions{ RunStandard: true, - RunRealTime: true, + RunRealtime: true, } ) diff --git a/pkg/process/checks/system_info.go b/pkg/process/checks/system_info.go index da8fd2eaa05bd1..7041006ee96aa6 100644 --- a/pkg/process/checks/system_info.go +++ b/pkg/process/checks/system_info.go @@ -14,14 +14,12 @@ import ( "github.com/DataDog/gopsutil/mem" model "github.com/DataDog/agent-payload/v5/process" - - "github.com/DataDog/datadog-agent/pkg/process/config" ) // CollectSystemInfo collects a set of system-level information that will not // change until a restart. This bit of information should be passed along with // the process messages. -func CollectSystemInfo(cfg *config.AgentConfig) (*model.SystemInfo, error) { +func CollectSystemInfo() (*model.SystemInfo, error) { hi, err := host.Info() if err != nil { return nil, err diff --git a/pkg/process/checks/system_info_darwin.go b/pkg/process/checks/system_info_darwin.go index 2e3f0a7eafdcc6..ac844cb054d272 100644 --- a/pkg/process/checks/system_info_darwin.go +++ b/pkg/process/checks/system_info_darwin.go @@ -16,8 +16,6 @@ import ( "github.com/DataDog/gopsutil/host" "github.com/DataDog/gopsutil/mem" "golang.org/x/sys/unix" - - "github.com/DataDog/datadog-agent/pkg/process/config" ) type statsProvider interface { @@ -60,7 +58,7 @@ func patchCPUInfo(gopsutilCPUInfo []cpu.InfoStat) ([]cpu.InfoStat, error) { // CollectSystemInfo collects a set of system-level information that will not // change until a restart. This bit of information should be passed along with // the process messages. -func CollectSystemInfo(_ *config.AgentConfig) (*model.SystemInfo, error) { +func CollectSystemInfo() (*model.SystemInfo, error) { hi, err := host.Info() if err != nil { return nil, err diff --git a/pkg/process/checks/system_info_windows.go b/pkg/process/checks/system_info_windows.go index 4690133db0d07c..2b1e3ee32539eb 100644 --- a/pkg/process/checks/system_info_windows.go +++ b/pkg/process/checks/system_info_windows.go @@ -15,14 +15,12 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/winutil" model "github.com/DataDog/agent-payload/v5/process" - - "github.com/DataDog/datadog-agent/pkg/process/config" ) // CollectSystemInfo collects a set of system-level information that will not // change until a restart. This bit of information should be passed along with // the process messages. -func CollectSystemInfo(cfg *config.AgentConfig) (*model.SystemInfo, error) { +func CollectSystemInfo() (*model.SystemInfo, error) { hi, err := platform.GetArchInfo() if err != nil { return nil, err diff --git a/pkg/process/config/config.go b/pkg/process/config/config.go deleted file mode 100644 index 45b10727de04be..00000000000000 --- a/pkg/process/config/config.go +++ /dev/null @@ -1,460 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package config - -import ( - "bytes" - "context" - "encoding/json" - "fmt" - "net" - "net/http" - "net/url" - "os" - "os/exec" - "regexp" - "strconv" - "strings" - "time" - - model "github.com/DataDog/agent-payload/v5/process" - "google.golang.org/grpc" - - sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/config/settings" - oconfig "github.com/DataDog/datadog-agent/pkg/orchestrator/config" - "github.com/DataDog/datadog-agent/pkg/process/util" - pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo" - "github.com/DataDog/datadog-agent/pkg/util/fargate" - ddgrpc "github.com/DataDog/datadog-agent/pkg/util/grpc" - "github.com/DataDog/datadog-agent/pkg/util/hostname/validate" - "github.com/DataDog/datadog-agent/pkg/util/log" -) - -// defaultProxyPort is the default port used for proxies. -// This mirrors the configuration for the infrastructure agent. -const defaultProxyPort = 3128 - -// Name for check performed by process-agent or system-probe -const ( - ProcessCheckName = "process" - RTProcessCheckName = "rtprocess" - ContainerCheckName = "container" - RTContainerCheckName = "rtcontainer" - ConnectionsCheckName = "connections" - PodCheckName = "pod" - PodCheckManifestName = "pod_manifest" - DiscoveryCheckName = "process_discovery" - ProcessEventsCheckName = "process_events" - - ProcessCheckDefaultInterval = 10 * time.Second - RTProcessCheckDefaultInterval = 2 * time.Second - ContainerCheckDefaultInterval = 10 * time.Second - RTContainerCheckDefaultInterval = 2 * time.Second - ConnectionsCheckDefaultInterval = 30 * time.Second - PodCheckDefaultInterval = 10 * time.Second - ProcessDiscoveryCheckDefaultInterval = 4 * time.Hour -) - -type proxyFunc func(*http.Request) (*url.URL, error) - -type cmdFunc = func(name string, arg ...string) *exec.Cmd - -// AgentConfig is the global config for the process-agent. This information -// is sourced from config files and the environment variables. -// AgentConfig is shared across process-agent checks and should only contain shared objects and -// settings that cannot be read directly from the global Config object. -// For any other setting, use `pkg/config`. -type AgentConfig struct { - HostName string - Blacklist []*regexp.Regexp - Scrubber *DataScrubber - MaxConnsPerMessage int - Transport *http.Transport `json:"-"` - - // host type of the agent, used to populate container payload with additional host information - ContainerHostType model.ContainerHostType - - // System probe collection configuration - EnableSystemProbe bool - SystemProbeAddress string - - // Orchestrator config - Orchestrator *oconfig.OrchestratorConfig - - // Check config - CheckIntervals map[string]time.Duration - - // Internal store of a proxy used for generating the Transport - proxy proxyFunc -} - -// CheckInterval returns the interval for the given check name, defaulting to 10s if not found. -func (a AgentConfig) CheckInterval(checkName string) time.Duration { - d, ok := a.CheckIntervals[checkName] - if !ok { - log.Errorf("missing check interval for '%s', you must set a default", checkName) - d = 10 * time.Second - } - return d -} - -// NewDefaultTransport provides a http transport configuration with sane default timeouts -func NewDefaultTransport() *http.Transport { - return &http.Transport{ - MaxIdleConns: 5, - IdleConnTimeout: 90 * time.Second, - Dial: (&net.Dialer{ - Timeout: 10 * time.Second, - KeepAlive: 10 * time.Second, - }).Dial, - TLSHandshakeTimeout: 5 * time.Second, - ResponseHeaderTimeout: 5 * time.Second, - ExpectContinueTimeout: 1 * time.Second, - } -} - -// NewDefaultAgentConfig returns an AgentConfig with defaults initialized -func NewDefaultAgentConfig() *AgentConfig { - ac := &AgentConfig{ - MaxConnsPerMessage: 600, - HostName: "", - Transport: NewDefaultTransport(), - - ContainerHostType: model.ContainerHostType_notSpecified, - - // System probe collection configuration - EnableSystemProbe: false, - SystemProbeAddress: defaultSystemProbeAddress, - - // Orchestrator config - Orchestrator: oconfig.NewDefaultOrchestratorConfig(), - - // Check config - CheckIntervals: map[string]time.Duration{ - ProcessCheckName: ProcessCheckDefaultInterval, - RTProcessCheckName: RTProcessCheckDefaultInterval, - ContainerCheckName: ContainerCheckDefaultInterval, - RTContainerCheckName: RTContainerCheckDefaultInterval, - ConnectionsCheckName: ConnectionsCheckDefaultInterval, - PodCheckName: PodCheckDefaultInterval, - DiscoveryCheckName: ProcessDiscoveryCheckDefaultInterval, - ProcessEventsCheckName: config.DefaultProcessEventsCheckInterval, - }, - - // DataScrubber to hide command line sensitive words - Scrubber: NewDefaultDataScrubber(), - Blacklist: make([]*regexp.Regexp, 0), - } - - // Set default values for proc/sys paths if unset. - // Don't set this is /host is not mounted to use context within container. - // Generally only applicable for container-only cases like Fargate. - if config.IsContainerized() && util.PathExists("/host") { - if v := os.Getenv("HOST_PROC"); v == "" { - os.Setenv("HOST_PROC", "/host/proc") - } - if v := os.Getenv("HOST_SYS"); v == "" { - os.Setenv("HOST_SYS", "/host/sys") - } - } - - return ac -} - -// LoadConfigIfExists takes a path to either a directory containing datadog.yaml or a direct path to a datadog.yaml file -// and loads it into ddconfig.Datadog. It does this silently, and does not produce any logs. -func LoadConfigIfExists(path string) error { - if path != "" { - if util.PathExists(path) { - config.Datadog.AddConfigPath(path) - if strings.HasSuffix(path, ".yaml") { // If they set a config file directly, let's try to honor that - config.Datadog.SetConfigFile(path) - } - - if _, err := config.LoadWithoutSecret(); err != nil { - return err - } - } else { - log.Infof("no config exists at %s, ignoring...", path) - } - } - return nil -} - -// NewAgentConfig returns an AgentConfig using a configuration file. It can be nil -// if there is no file available. In this case we'll configure only via environment. -func NewAgentConfig(loggerName config.LoggerName, yamlPath string, syscfg *sysconfig.Config) (*AgentConfig, error) { - var err error - - cfg := NewDefaultAgentConfig() - if err := cfg.LoadAgentConfig(yamlPath); err != nil { - return nil, err - } - - if err := cfg.Orchestrator.Load(); err != nil { - return nil, err - } - - // (Re)configure the logging from our configuration - logFile := config.Datadog.GetString("process_config.log_file") - if err := setupLogger(loggerName, logFile); err != nil { - log.Errorf("failed to setup configured logger: %s", err) - return nil, err - } - - if syscfg.Enabled { - cfg.EnableSystemProbe = true - cfg.MaxConnsPerMessage = syscfg.MaxConnsPerMessage - cfg.SystemProbeAddress = syscfg.SocketAddress - } - - // TODO: Once proxies have been moved to common config util, remove this - if cfg.proxy, err = proxyFromEnv(cfg.proxy); err != nil { - log.Errorf("error parsing environment proxy settings, not using a proxy: %s", err) - cfg.proxy = nil - } - - if err := validate.ValidHostname(cfg.HostName); err != nil { - // lookup hostname if there is no config override or if the override is invalid - agentBin := config.Datadog.GetString("process_config.dd_agent_bin") - connectionTimeout := config.Datadog.GetDuration("process_config.grpc_connection_timeout_secs") * time.Second - if hostname, err := getHostname(context.TODO(), agentBin, connectionTimeout); err == nil { - cfg.HostName = hostname - } else { - log.Errorf("Cannot get hostname: %v", err) - } - } - - cfg.ContainerHostType = getContainerHostType() - - if cfg.proxy != nil { - cfg.Transport.Proxy = cfg.proxy - } - - return cfg, nil -} - -// InitRuntimeSettings registers settings to be added to the runtime config. -func InitRuntimeSettings() { - // NOTE: Any settings you want to register should simply be added here - processRuntimeSettings := []settings.RuntimeSetting{ - settings.LogLevelRuntimeSetting{}, - } - - // Before we begin listening, register runtime settings - for _, setting := range processRuntimeSettings { - err := settings.RegisterRuntimeSetting(setting) - if err != nil { - _ = log.Warnf("cannot initialize the runtime setting %s: %v", setting.Name(), err) - } - } -} - -// getContainerHostType uses the fargate library to detect container environment and returns the protobuf version of it -func getContainerHostType() model.ContainerHostType { - switch fargate.GetOrchestrator(context.TODO()) { - case fargate.ECS: - return model.ContainerHostType_fargateECS - case fargate.EKS: - return model.ContainerHostType_fargateEKS - } - return model.ContainerHostType_notSpecified -} - -// loadEnvVariables reads env variables specific to process-agent and overrides the corresponding settings -// in the global Config object. -// This function is used to handle historic process-agent env vars. New settings should be -// handled directly in the /pkg/config/process.go file -func loadEnvVariables() { - // The following environment variables will be loaded in the order listed, meaning variables - // further down the list may override prior variables. - for _, variable := range []struct{ env, cfg string }{ - {"DD_ORCHESTRATOR_URL", "orchestrator_explorer.orchestrator_dd_url"}, - {"HTTPS_PROXY", "proxy.https"}, - } { - if v, ok := os.LookupEnv(variable.env); ok { - config.Datadog.Set(variable.cfg, v) - } - } - - if v := os.Getenv("DD_ORCHESTRATOR_ADDITIONAL_ENDPOINTS"); v != "" { - endpoints := make(map[string][]string) - if err := json.Unmarshal([]byte(v), &endpoints); err != nil { - log.Errorf(`Could not parse DD_ORCHESTRATOR_ADDITIONAL_ENDPOINTS: %v. It must be of the form '{"https://process.agent.datadoghq.com": ["apikey1", ...], ...}'.`, err) - } else { - config.Datadog.Set("orchestrator_explorer.orchestrator_additional_endpoints", endpoints) - } - } -} - -// IsBlacklisted returns a boolean indicating if the given command is blacklisted by our config. -func IsBlacklisted(cmdline []string, blacklist []*regexp.Regexp) bool { - cmd := strings.Join(cmdline, " ") - for _, b := range blacklist { - if b.MatchString(cmd) { - return true - } - } - return false -} - -// getHostname attempts to resolve the hostname in the following order: the main datadog agent via grpc, the main agent -// via cli and lastly falling back to os.Hostname() if it is unavailable -func getHostname(ctx context.Context, ddAgentBin string, grpcConnectionTimeout time.Duration) (string, error) { - // Fargate is handled as an exceptional case (there is no concept of a host, so we use the ARN in-place). - if fargate.IsFargateInstance(ctx) { - hostname, err := fargate.GetFargateHost(ctx) - if err == nil { - return hostname, nil - } - log.Errorf("failed to get Fargate host: %v", err) - } - - // Get the hostname via gRPC from the main agent if a hostname has not been set either from config/fargate - hostname, err := getHostnameFromGRPC(ctx, ddgrpc.GetDDAgentClient, grpcConnectionTimeout) - if err == nil { - return hostname, nil - } - log.Errorf("failed to get hostname from grpc: %v", err) - - // If the hostname is not set then we fallback to use the agent binary - hostname, err = getHostnameFromCmd(ddAgentBin, exec.Command) - if err == nil { - return hostname, nil - } - log.Errorf("failed to get hostname from cmd: %v", err) - - return os.Hostname() -} - -// getHostnameCmd shells out to obtain the hostname used by the infra agent -func getHostnameFromCmd(ddAgentBin string, cmdFn cmdFunc) (string, error) { - cmd := cmdFn(ddAgentBin, "hostname") - - // Copying all environment variables to child process - // Windows: Required, so the child process can load DLLs, etc. - // Linux: Optional, but will make use of DD_HOSTNAME and DOCKER_DD_AGENT if they exist - cmd.Env = append(cmd.Env, os.Environ()...) - - var stdout, stderr bytes.Buffer - cmd.Stdout = &stdout - cmd.Stderr = &stderr - - err := cmd.Run() - if err != nil { - return "", err - } - - hostname := strings.TrimSpace(stdout.String()) - if hostname == "" { - return "", fmt.Errorf("error retrieving dd-agent hostname %s", stderr.String()) - } - - return hostname, nil -} - -// getHostnameFromGRPC retrieves the hostname from the main datadog agent via GRPC -func getHostnameFromGRPC(ctx context.Context, grpcClientFn func(ctx context.Context, opts ...grpc.DialOption) (pb.AgentClient, error), grpcConnectionTimeout time.Duration) (string, error) { - ctx, cancel := context.WithTimeout(ctx, grpcConnectionTimeout) - defer cancel() - - ddAgentClient, err := grpcClientFn(ctx) - if err != nil { - return "", fmt.Errorf("cannot connect to datadog agent via grpc: %w", err) - } - reply, err := ddAgentClient.GetHostname(ctx, &pb.HostnameRequest{}) - if err != nil { - return "", fmt.Errorf("cannot get hostname from datadog agent via grpc: %w", err) - } - - log.Debugf("retrieved hostname:%s from datadog agent via grpc", reply.Hostname) - return reply.Hostname, nil -} - -// proxyFromEnv parses out the proxy configuration from the ENV variables in a -// similar way to getProxySettings and, if enough values are available, returns -// a new proxy URL value. If the environment is not set for this then the -// `defaultVal` is returned. -func proxyFromEnv(defaultVal proxyFunc) (proxyFunc, error) { - var host string - scheme := "http" - if v := os.Getenv("PROXY_HOST"); v != "" { - // accept either http://myproxy.com or myproxy.com - if i := strings.Index(v, "://"); i != -1 { - // when available, parse the scheme from the url - scheme = v[0:i] - host = v[i+3:] - } else { - host = v - } - } - - if host == "" { - return defaultVal, nil - } - - port := defaultProxyPort - if v := os.Getenv("PROXY_PORT"); v != "" { - port, _ = strconv.Atoi(v) - } - var user, password string - if v := os.Getenv("PROXY_USER"); v != "" { - user = v - } - if v := os.Getenv("PROXY_PASSWORD"); v != "" { - password = v - } - - return constructProxy(host, scheme, port, user, password) -} - -// constructProxy constructs a *url.Url for a proxy given the parts of a -// Note that we assume we have at least a non-empty host for this call but -// all other values can be their defaults (empty string or 0). -func constructProxy(host, scheme string, port int, user, password string) (proxyFunc, error) { - var userpass *url.Userinfo - if user != "" { - if password != "" { - userpass = url.UserPassword(user, password) - } else { - userpass = url.User(user) - } - } - - var path string - if userpass != nil { - path = fmt.Sprintf("%s@%s:%v", userpass.String(), host, port) - } else { - path = fmt.Sprintf("%s:%v", host, port) - } - if scheme != "" { - path = fmt.Sprintf("%s://%s", scheme, path) - } - - u, err := url.Parse(path) - if err != nil { - return nil, err - } - return http.ProxyURL(u), nil -} - -func setupLogger(loggerName config.LoggerName, logFile string) error { - if config.Datadog.GetBool("disable_file_logging") { - logFile = "" - } - - return config.SetupLogger( - loggerName, - config.Datadog.GetString("log_level"), - logFile, - config.GetSyslogURI(), - config.Datadog.GetBool("syslog_rfc"), - config.Datadog.GetBool("log_to_console"), - config.Datadog.GetBool("log_format_json"), - ) -} diff --git a/pkg/process/config/config_nix.go b/pkg/process/config/config_nix.go deleted file mode 100644 index 30ac2928bff19a..00000000000000 --- a/pkg/process/config/config_nix.go +++ /dev/null @@ -1,12 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build !windows && !darwin -// +build !windows,!darwin - -package config - -// defaultSystemProbeAddress is the default unix socket path to be used for connecting to the system probe -const defaultSystemProbeAddress = "/opt/datadog-agent/run/sysprobe.sock" diff --git a/pkg/process/config/config_nix_test.go b/pkg/process/config/config_nix_test.go deleted file mode 100644 index 4d25a4a6ec9bc7..00000000000000 --- a/pkg/process/config/config_nix_test.go +++ /dev/null @@ -1,100 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build linux && secrets -// +build linux,secrets - -package config - -import ( - "fmt" - "os" - "os/exec" - "sync" - "testing" - - // This test calls ContainerProvider behind the scene, need to initialize the linux provider - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/DataDog/datadog-agent/pkg/config" -) - -var secretScriptBuilder sync.Once - -func setupSecretScript() error { - script := "./testdata/secret" - goCmd, err := exec.LookPath("go") - if err != nil { - return fmt.Errorf("Couldn't find golang binary in path") - } - - buildCmd := exec.Command(goCmd, "build", "-o", script, fmt.Sprintf("%s.go", script)) - if err := buildCmd.Start(); err != nil { - return fmt.Errorf("Couldn't build script %v: %s", script, err) - } - if err := buildCmd.Wait(); err != nil { - return fmt.Errorf("Couldn't wait the end of the build for script %v: %s", script, err) - } - - // Permissions required for the secret script - err = os.Chmod(script, 0700) - if err != nil { - return err - } - - return os.Chown(script, os.Geteuid(), os.Getgid()) -} - -// TestAgentConfigYamlEnc tests the secrets feature on the file TestDDAgentConfigYamlEnc -func TestAgentConfigYamlEnc(t *testing.T) { - secretScriptBuilder.Do(func() { require.NoError(t, setupSecretScript()) }) - - newConfig() - defer restoreGlobalConfig() - // Secrets settings are initialized only once by initConfig in the agent package so we have to setup them - config.InitConfig(config.Datadog) - config.Datadog.Set("secret_backend_timeout", 15) - config.Datadog.Set("secret_backend_output_max_size", 1024) - - _ = loadAgentConfigForTest(t, "./testdata/TestDDAgentConfigYamlEnc.yaml", "") - assert.Equal(t, "secret-my_api_key", config.Datadog.GetString("api_key")) -} - -// TestAgentConfigYamlEnc2 tests the secrets feature on the file TestDDAgentConfigYamlEnc2 -func TestAgentConfigYamlEnc2(t *testing.T) { - secretScriptBuilder.Do(func() { require.NoError(t, setupSecretScript()) }) - - newConfig() - defer restoreGlobalConfig() - // Secrets settings are initialized only once by initConfig in the agent package so we have to setup them - config.InitConfig(config.Datadog) - config.Datadog.Set("secret_backend_timeout", 15) - config.Datadog.Set("secret_backend_output_max_size", 1024) - _ = loadAgentConfigForTest(t, "./testdata/TestDDAgentConfigYamlEnc2.yaml", "") - - assert.Equal(t, "secret-encrypted_key", config.Datadog.GetString("api_key")) - assert.Equal(t, "secret-burrito.com", config.Datadog.GetString("process_config.process_dd_url")) -} - -func TestAgentEncryptedVariablesSecrets(t *testing.T) { - secretScriptBuilder.Do(func() { require.NoError(t, setupSecretScript()) }) - - newConfig() - defer restoreGlobalConfig() - - // Secrets settings are initialized only once by initConfig in the agent package so we have to setup them - config.InitConfig(config.Datadog) - config.Datadog.Set("secret_backend_timeout", 15) - config.Datadog.Set("secret_backend_output_max_size", 1024) - - t.Setenv("DD_API_KEY", "ENC[my_api_key]") - t.Setenv("DD_HOSTNAME", "ENC[my-host]") // Valid hostnames do not use underscores - - agentConfig := loadAgentConfigForTest(t, "./testdata/TestEnvSiteConfig-Enc.yaml", "") - - assert.Equal(t, "secret-my_api_key", config.Datadog.Get("api_key")) - assert.Equal(t, "secret-my-host", agentConfig.HostName) -} diff --git a/pkg/process/config/config_test.go b/pkg/process/config/config_test.go deleted file mode 100644 index 288e3a3a56ecb2..00000000000000 --- a/pkg/process/config/config_test.go +++ /dev/null @@ -1,556 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build linux || windows -// +build linux windows - -package config - -import ( - "context" - "errors" - "fmt" - "net/http" - "os" - "os/exec" - "regexp" - "runtime" - "strconv" - "strings" - "testing" - "time" - - sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/process/procutil" - pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo" - mocks "github.com/DataDog/datadog-agent/pkg/proto/pbgo/mocks" - - "github.com/golang/mock/gomock" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "google.golang.org/grpc" -) - -var originalConfig = config.Datadog - -func restoreGlobalConfig() { - config.Datadog = originalConfig -} - -func newConfig() { - config.Datadog = config.NewConfig("datadog", "DD", strings.NewReplacer(".", "_")) - config.InitConfig(config.Datadog) - // force timeout to 0s, otherwise each test waits 60s - config.Datadog.Set(key(ns, "grpc_connection_timeout_secs"), 0) -} - -func loadAgentConfigForTest(t *testing.T, path, networksYamlPath string) *AgentConfig { - config.InitSystemProbeConfig(config.Datadog) - - require.NoError(t, LoadConfigIfExists(path)) - - syscfg, err := sysconfig.Merge(networksYamlPath) - require.NoError(t, err) - - cfg, err := NewAgentConfig("test", path, syscfg) - require.NoError(t, err) - return cfg -} - -func TestBlacklist(t *testing.T) { - testBlacklist := []string{ - "^getty", - "^acpid", - "^atd", - "^upstart-udev-bridge", - "^upstart-socket-bridge", - "^upstart-file-bridge", - "^dhclient", - "^dhclient3", - "^rpc", - "^dbus-daemon", - "udevd", - "^/sbin/", - "^/usr/sbin/", - "^/var/ossec/bin/ossec", - "^rsyslogd", - "^whoopsie$", - "^cron$", - "^CRON$", - "^/usr/lib/postfix/master$", - "^qmgr", - "^pickup", - "^sleep", - "^/lib/systemd/systemd-logind$", - "^/usr/local/bin/goshe dnsmasq$", - } - blacklist := make([]*regexp.Regexp, 0, len(testBlacklist)) - for _, b := range testBlacklist { - r, err := regexp.Compile(b) - if err == nil { - blacklist = append(blacklist, r) - } - } - cases := []struct { - cmdline []string - blacklisted bool - }{ - {[]string{"getty", "-foo", "-bar"}, true}, - {[]string{"rpcbind", "-x"}, true}, - {[]string{"my-rpc-app", "-config foo.ini"}, false}, - {[]string{"rpc.statd", "-L"}, true}, - {[]string{"/usr/sbin/irqbalance"}, true}, - } - - for _, c := range cases { - assert.Equal(t, c.blacklisted, IsBlacklisted(c.cmdline, blacklist), - fmt.Sprintf("Case %v failed", c)) - } -} - -// TestEnvGrpcConnectionTimeoutSecs tests DD_PROCESS_CONFIG_GRPC_CONNECTION_TIMEOUT_SECS. -// This environment variable cannot be tested with the other environment variables because it is overridden. -func TestEnvGrpcConnectionTimeoutSecs(t *testing.T) { - syscfg, err := sysconfig.Merge("") - require.NoError(t, err) - - t.Run("DD_PROCESS_CONFIG_GRPC_CONNECTION_TIMEOUT_SECS", func(t *testing.T) { - t.Setenv("DD_PROCESS_CONFIG_GRPC_CONNECTION_TIMEOUT_SECS", "1") - _, _ = NewAgentConfig("test", "", syscfg) - assert.Equal(t, 1, config.Datadog.GetInt("process_config.grpc_connection_timeout_secs")) - }) - - t.Run("DD_PROCESS_AGENT_GRPC_CONNECTION_TIMEOUT_SECS", func(t *testing.T) { - t.Setenv("DD_PROCESS_AGENT_GRPC_CONNECTION_TIMEOUT_SECS", "2") - _, _ = NewAgentConfig("test", "", syscfg) - assert.Equal(t, 2, config.Datadog.GetInt("process_config.grpc_connection_timeout_secs")) - }) -} - -func TestYamlConfig(t *testing.T) { - // Reset the config - config.Datadog = config.NewConfig("datadog", "DD", strings.NewReplacer(".", "_")) - - f, err := os.CreateTemp("", "yamlConfigTest*.yaml") - defer os.Remove(f.Name()) - assert.NoError(t, err) - - _, err = f.WriteString(` -log_level: debug -log_to_console: false -process_config: - log_file: /tmp/test - dd_agent_bin: /tmp/test - grpc_connection_timeout_secs: 1 - remote_tagger: true - process_discovery: - enabled: true - interval: 1h -`) - require.NoError(t, err) - - require.NoError(t, LoadConfigIfExists(f.Name())) - - assert.Equal(t, "debug", config.Datadog.GetString("log_level")) - assert.False(t, config.Datadog.GetBool("log_to_console")) - assert.Equal(t, "/tmp/test", config.Datadog.GetString("process_config.log_file")) - assert.Equal(t, "/tmp/test", config.Datadog.GetString("process_config.dd_agent_bin")) - assert.Equal(t, 1, config.Datadog.GetInt("process_config.grpc_connection_timeout_secs")) - assert.True(t, config.Datadog.GetBool("process_config.remote_tagger")) - assert.True(t, config.Datadog.GetBool("process_config.process_discovery.enabled")) - assert.Equal(t, time.Hour, config.Datadog.GetDuration("process_config.process_discovery.interval")) -} - -func TestOnlyEnvConfigArgsScrubbingEnabled(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - - t.Setenv("DD_CUSTOM_SENSITIVE_WORDS", "*password*,consul_token,*api_key") - - syscfg, err := sysconfig.Merge("") - assert.NoError(t, err) - agentConfig, _ := NewAgentConfig("test", "", syscfg) - assert.Equal(t, true, agentConfig.Scrubber.Enabled) - - cases := []struct { - cmdline []string - parsedCmdline []string - }{ - { - []string{"spidly", "--mypasswords=123,456", "consul_token", "1234", "--dd_api_key=1234"}, - []string{"spidly", "--mypasswords=********", "consul_token", "********", "--dd_api_key=********"}, - }, - } - - for i := range cases { - cases[i].cmdline, _ = agentConfig.Scrubber.ScrubCommand(cases[i].cmdline) - assert.Equal(t, cases[i].parsedCmdline, cases[i].cmdline) - } -} - -func TestOnlyEnvConfigArgsScrubbingDisabled(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - - t.Setenv("DD_SCRUB_ARGS", "false") - t.Setenv("DD_CUSTOM_SENSITIVE_WORDS", "*password*,consul_token,*api_key") - - syscfg, err := sysconfig.Merge("") - require.NoError(t, err) - agentConfig, _ := NewAgentConfig("test", "", syscfg) - assert.Equal(t, false, agentConfig.Scrubber.Enabled) - - cases := []struct { - cmdline []string - parsedCmdline []string - }{ - { - []string{"spidly", "--mypasswords=123,456", "consul_token", "1234", "--dd_api_key=1234"}, - []string{"spidly", "--mypasswords=123,456", "consul_token", "1234", "--dd_api_key=1234"}, - }, - } - - for i := range cases { - fp := &procutil.Process{Cmdline: cases[i].cmdline} - cases[i].cmdline = agentConfig.Scrubber.ScrubProcessCommand(fp) - assert.Equal(t, cases[i].parsedCmdline, cases[i].cmdline) - } -} - -func TestOnlyEnvConfigLogLevelOverride(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - - t.Setenv("DD_LOG_LEVEL", "error") - t.Setenv("LOG_LEVEL", "debug") - - syscfg, err := sysconfig.Merge("") - require.NoError(t, err) - _, _ = NewAgentConfig("test", "", syscfg) - assert.Equal(t, "error", config.Datadog.GetString("log_level")) -} - -func TestGetHostname(t *testing.T) { - ctx := context.Background() - _ = NewDefaultAgentConfig() - h, err := getHostname(ctx, config.Datadog.GetString("process_config.dd_agent_bin"), 0) - assert.Nil(t, err) - // verify we fall back to getting os hostname - expectedHostname, _ := os.Hostname() - assert.Equal(t, expectedHostname, h) -} - -func TestDefaultConfig(t *testing.T) { - assert := assert.New(t) - agentConfig := NewDefaultAgentConfig() - - // assert that some sane defaults are set - assert.Equal("info", config.Datadog.GetString("log_level")) - assert.Equal(true, agentConfig.Scrubber.Enabled) - - t.Setenv("DOCKER_DD_AGENT", "yes") - _ = NewDefaultAgentConfig() - assert.Equal(os.Getenv("HOST_PROC"), "") - assert.Equal(os.Getenv("HOST_SYS"), "") - t.Setenv("DOCKER_DD_AGENT", "no") - assert.Equal(config.DefaultProcessExpVarPort, config.Datadog.GetInt("process_config.expvar_port")) - - assert.Equal("info", config.Datadog.GetString("log_level")) - assert.True(config.Datadog.GetBool("log_to_console")) - assert.Equal(config.DefaultProcessAgentLogFile, config.Datadog.GetString("process_config.log_file")) - assert.Equal(config.DefaultDDAgentBin, config.Datadog.GetString("process_config.dd_agent_bin")) - assert.Equal(config.DefaultGRPCConnectionTimeoutSecs, config.Datadog.GetInt("process_config.grpc_connection_timeout_secs")) - assert.False(config.Datadog.GetBool("process_config.remote_tagger")) - assert.False(config.Datadog.GetBool("process_config.remote_workloadmeta")) - assert.True(config.Datadog.GetBool("process_config.process_discovery.enabled")) - assert.Equal(4*time.Hour, config.Datadog.GetDuration("process_config.process_discovery.interval")) -} - -func TestAgentConfigYamlAndSystemProbeConfig(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - - assert := assert.New(t) - - agentConfig := loadAgentConfigForTest(t, "./testdata/TestDDAgentConfigYamlAndSystemProbeConfig.yaml", "") - - assert.Equal("apikey_20", config.Datadog.GetString("api_key")) - assert.Equal("http://my-process-app.datadoghq.com", config.Datadog.GetString("process_config.process_dd_url")) - assert.Equal(10, config.Datadog.GetInt("process_config.queue_size")) - assert.Equal(8*time.Second, agentConfig.CheckIntervals[ContainerCheckName]) - assert.Equal(30*time.Second, agentConfig.CheckIntervals[ProcessCheckName]) - assert.Equal(false, agentConfig.Scrubber.Enabled) - assert.Equal(5065, config.Datadog.GetInt("process_config.expvar_port")) - - newConfig() - agentConfig = loadAgentConfigForTest(t, "./testdata/TestDDAgentConfigYamlAndSystemProbeConfig.yaml", "./testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net.yaml") - - assert.Equal("apikey_20", config.Datadog.GetString("api_key")) - assert.Equal("http://my-process-app.datadoghq.com", config.Datadog.GetString("process_config.process_dd_url")) - assert.Equal("server-01", agentConfig.HostName) - assert.Equal(10, config.Datadog.GetInt("process_config.queue_size")) - assert.Equal(8*time.Second, agentConfig.CheckIntervals[ContainerCheckName]) - assert.Equal(30*time.Second, agentConfig.CheckIntervals[ProcessCheckName]) - assert.Equal(false, agentConfig.Scrubber.Enabled) - if runtime.GOOS != "windows" { - assert.Equal("/var/my-location/system-probe.log", agentConfig.SystemProbeAddress) - } - - newConfig() - agentConfig = loadAgentConfigForTest(t, "./testdata/TestDDAgentConfigYamlAndSystemProbeConfig.yaml", "./testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net-2.yaml") - - assert.Equal("apikey_20", config.Datadog.GetString("api_key")) - assert.Equal("http://my-process-app.datadoghq.com", config.Datadog.GetString("process_config.process_dd_url")) - assert.Equal(10, config.Datadog.GetInt("process_config.queue_size")) - assert.Equal(8*time.Second, agentConfig.CheckIntervals[ContainerCheckName]) - assert.Equal(30*time.Second, agentConfig.CheckIntervals[ProcessCheckName]) - assert.Equal(false, agentConfig.Scrubber.Enabled) - - newConfig() - agentConfig = loadAgentConfigForTest(t, "./testdata/TestDDAgentConfigYamlAndSystemProbeConfig.yaml", "./testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net-Windows.yaml") - - if runtime.GOOS == "windows" { - assert.Equal("localhost:4444", agentConfig.SystemProbeAddress) - } -} - -func TestProxyEnv(t *testing.T) { - assert := assert.New(t) - for i, tc := range []struct { - host string - port int - user string - pass string - expected string - }{ - { - "example.com", - 1234, - "", - "", - "http://example.com:1234", - }, - { - "https://example.com", - 4567, - "foo", - "bar", - "https://foo:bar@example.com:4567", - }, - { - "example.com", - 0, - "foo", - "", - "http://foo@example.com:3128", - }, - } { - t.Setenv("PROXY_HOST", tc.host) - if tc.port > 0 { - t.Setenv("PROXY_PORT", strconv.Itoa(tc.port)) - } else { - t.Setenv("PROXY_PORT", "") - } - t.Setenv("PROXY_USER", tc.user) - t.Setenv("PROXY_PASSWORD", tc.pass) - pf, err := proxyFromEnv(nil) - assert.NoError(err, "proxy case %d had error", i) - u, err := pf(&http.Request{}) - assert.NoError(err) - assert.Equal(tc.expected, u.String()) - } -} - -func TestEnvOrchestratorAdditionalEndpoints(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - - assert := assert.New(t) - - expected := make(map[string]string) - expected["key1"] = "url1.com" - expected["key2"] = "url2.com" - expected["key3"] = "url2.com" - expected["apikey_20"] = "orchestrator.datadoghq.com" // from config file - - t.Setenv("DD_ORCHESTRATOR_ADDITIONAL_ENDPOINTS", `{"https://url1.com": ["key1"], "https://url2.com": ["key2", "key3"]}`) - - agentConfig := loadAgentConfigForTest(t, "./testdata/TestDDAgentConfigYamlAndSystemProbeConfig.yaml", "./testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net.yaml") - - for _, actual := range agentConfig.Orchestrator.OrchestratorEndpoints { - assert.Equal(expected[actual.APIKey], actual.Endpoint.Hostname(), actual) - } -} - -func TestNetworkConfig(t *testing.T) { - t.Run("yaml", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - - agentConfig := loadAgentConfigForTest(t, "./testdata/TestDDAgentConfigYamlOnly.yaml", "./testdata/TestDDAgentConfig-NetConfig.yaml") - - assert.True(t, agentConfig.EnableSystemProbe) - }) - - t.Run("env", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - - t.Setenv("DD_SYSTEM_PROBE_NETWORK_ENABLED", "true") - - syscfg, err := sysconfig.Merge("") - require.NoError(t, err) - agentConfig, err := NewAgentConfig("test", "", syscfg) - require.NoError(t, err) - - assert.True(t, agentConfig.EnableSystemProbe) - }) -} - -func TestSystemProbeNoNetwork(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - - agentConfig := loadAgentConfigForTest(t, "./testdata/TestDDAgentConfigYamlOnly.yaml", "./testdata/TestDDAgentConfig-OOMKillOnly.yaml") - - assert.True(t, agentConfig.EnableSystemProbe) -} - -func TestGetHostnameFromGRPC(t *testing.T) { - ctx := context.Background() - ctrl := gomock.NewController(t) - defer ctrl.Finish() - - mockClient := mocks.NewMockAgentClient(ctrl) - - mockClient.EXPECT().GetHostname( - gomock.Any(), - &pb.HostnameRequest{}, - ).Return(&pb.HostnameReply{Hostname: "unit-test-hostname"}, nil) - - t.Run("hostname returns from grpc", func(t *testing.T) { - hostname, err := getHostnameFromGRPC(ctx, func(ctx context.Context, opts ...grpc.DialOption) (pb.AgentClient, error) { - return mockClient, nil - }, config.DefaultGRPCConnectionTimeoutSecs*time.Second) - - assert.Nil(t, err) - assert.Equal(t, "unit-test-hostname", hostname) - }) - - t.Run("grpc client is unavailable", func(t *testing.T) { - grpcErr := errors.New("no grpc client") - hostname, err := getHostnameFromGRPC(ctx, func(ctx context.Context, opts ...grpc.DialOption) (pb.AgentClient, error) { - return nil, grpcErr - }, config.DefaultGRPCConnectionTimeoutSecs*time.Second) - - assert.NotNil(t, err) - assert.Equal(t, grpcErr, errors.Unwrap(err)) - assert.Empty(t, hostname) - }) -} - -func TestGetHostnameFromCmd(t *testing.T) { - t.Run("valid hostname", func(t *testing.T) { - h, err := getHostnameFromCmd("agent-success", fakeExecCommand) - assert.Nil(t, err) - assert.Equal(t, "unit_test_hostname", h) - }) - - t.Run("no hostname returned", func(t *testing.T) { - h, err := getHostnameFromCmd("agent-empty_hostname", fakeExecCommand) - assert.NotNil(t, err) - assert.Equal(t, "", h) - }) -} - -func TestInvalidHostname(t *testing.T) { - syscfg, err := sysconfig.Merge("") - require.NoError(t, err) - - // Lower the GRPC timeout, otherwise the test will time out in CI - config.Datadog.Set("process_config.grpc_connection_timeout_secs", 1) - - // Input yaml file has an invalid hostname (localhost) so we expect to configure via environment - agentConfig, err := NewAgentConfig("test", "./testdata/TestDDAgentConfigYamlOnly-InvalidHostname.yaml", syscfg) - require.NoError(t, err) - - expectedHostname, _ := os.Hostname() - assert.Equal(t, expectedHostname, agentConfig.HostName) -} - -// TestGetHostnameShellCmd is a method that is called as a substitute for a dd-agent shell command, -// the GO_TEST_PROCESS flag ensures that if it is called as part of the test suite, it is skipped. -func TestGetHostnameShellCmd(t *testing.T) { - if os.Getenv("GO_TEST_PROCESS") != "1" { - return - } - defer os.Exit(0) - - args := os.Args - for len(args) > 0 { - if args[0] == "--" { - args = args[1:] - break - } - args = args[1:] - } - - if len(args) == 0 { - fmt.Fprintf(os.Stderr, "No command\n") - os.Exit(2) - } - - cmd, args := args[0], args[1:] - switch cmd { - case "agent-success": - assert.EqualValues(t, []string{"hostname"}, args) - fmt.Fprintf(os.Stdout, "unit_test_hostname") - case "agent-empty_hostname": - assert.EqualValues(t, []string{"hostname"}, args) - fmt.Fprintf(os.Stdout, "") - } -} - -// TestProcessDiscoveryInterval tests to make sure that the process discovery interval validation works properly -func TestProcessDiscoveryInterval(t *testing.T) { - for _, tc := range []struct { - name string - interval time.Duration - expectedInterval time.Duration - }{ - { - name: "allowed interval", - interval: 8 * time.Hour, - expectedInterval: 8 * time.Hour, - }, - { - name: "below minimum", - interval: 0, - expectedInterval: discoveryMinInterval, - }, - } { - t.Run(tc.name, func(t *testing.T) { - cfg := config.Mock(t) - cfg.Set("process_config.process_discovery.interval", tc.interval) - - agentCfg := NewDefaultAgentConfig() - assert.NoError(t, agentCfg.LoadAgentConfig("")) - - assert.Equal(t, tc.expectedInterval, agentCfg.CheckIntervals[DiscoveryCheckName]) - }) - } -} - -// fakeExecCommand is a function that initialises a new exec.Cmd, one which will -// simply call TestShellProcessSuccess rather than the command it is provided. It will -// also pass through the command and its arguments as an argument to TestShellProcessSuccess -func fakeExecCommand(command string, args ...string) *exec.Cmd { - cs := []string{"-test.run=TestGetHostnameShellCmd", "--", command} - cs = append(cs, args...) - cmd := exec.Command(os.Args[0], cs...) - cmd.Env = []string{"GO_TEST_PROCESS=1"} - return cmd -} diff --git a/pkg/process/config/testdata/TestDDAgentConfig-NetConfig.yaml b/pkg/process/config/testdata/TestDDAgentConfig-NetConfig.yaml deleted file mode 100644 index 62f9f5f33b6338..00000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfig-NetConfig.yaml +++ /dev/null @@ -1,2 +0,0 @@ -network_config: - enabled: true diff --git a/pkg/process/config/testdata/TestDDAgentConfig-OOMKillOnly.yaml b/pkg/process/config/testdata/TestDDAgentConfig-OOMKillOnly.yaml deleted file mode 100644 index 2dd3fe2cefbba3..00000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfig-OOMKillOnly.yaml +++ /dev/null @@ -1,2 +0,0 @@ -system_probe_config: - enable_oom_kill: true diff --git a/pkg/process/config/testdata/TestDDAgentConfigBothVersions.yaml b/pkg/process/config/testdata/TestDDAgentConfigBothVersions.yaml deleted file mode 100644 index b792ebf4e8dce5..00000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigBothVersions.yaml +++ /dev/null @@ -1,7 +0,0 @@ -api_key: apikey_20 - -process_config: - process_dd_url: http://my-process-app.datadoghq.com - queue_size: 10 - windows: - args_refresh_interval: 40 \ No newline at end of file diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net-2.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net-2.yaml deleted file mode 100644 index 97f2dde7f03e9d..00000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net-2.yaml +++ /dev/null @@ -1,28 +0,0 @@ -system_probe_config: - enabled: true - sysprobe_socket: /var/my-location/system-probe.log - disable_tcp: true - disable_udp: true - disable_ipv6: true - disable_dns_inspection: false - excluded_linux_versions: - - 5.5.0 - - 4.2.1 - closed_channel_size: 1000 - source_excludes: - 127.0.0.1: - - "5005" - 172.0.0.1/20: - - "*" - "*": - - "443" - dest_excludes: - 2001:db8::2:1: - - "5005" - 172.0.0.1/20: - - "*" - "*": - - "*" - -network_config: - enabled: false diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net-Windows.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net-Windows.yaml deleted file mode 100644 index ee20a6dde1ebd7..00000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net-Windows.yaml +++ /dev/null @@ -1,7 +0,0 @@ -system_probe_config: - enabled: true - bpf_debug: true - sysprobe_socket: localhost:4444 - -network_config: - enabled: true diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net.yaml deleted file mode 100644 index 3e215ccb09cbd5..00000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net.yaml +++ /dev/null @@ -1,7 +0,0 @@ -system_probe_config: - enabled: true - bpf_debug: true - sysprobe_socket: /var/my-location/system-probe.log - -network_config: - enabled: true diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig.yaml deleted file mode 100644 index a2d5ac69ca5c29..00000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig.yaml +++ /dev/null @@ -1,16 +0,0 @@ -api_key: apikey_20 -hostname: server-01 - -process_agent_enabled: true -process_config: - process_dd_url: http://my-process-app.datadoghq.com - enabled: 'true' - queue_size: 10 - intervals: - container: 8 - process: 30 - windows: - args_refresh_interval: 100 - add_new_args: false - scrub_args: false - expvar_port: 5065 diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlEnc.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlEnc.yaml deleted file mode 100644 index 0054a16c1765de..00000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlEnc.yaml +++ /dev/null @@ -1,5 +0,0 @@ -api_key: "ENC[my_api_key]" - -process_config: - enabled: 'true' -secret_backend_command: "./testdata/secret" diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlEnc2.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlEnc2.yaml deleted file mode 100644 index d56efdaa64b92d..00000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlEnc2.yaml +++ /dev/null @@ -1,6 +0,0 @@ -api_key: "ENC[encrypted_key]" - -process_config: - enabled: 'true' - process_dd_url: "ENC[burrito.com]" -secret_backend_command: "./testdata/secret" diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-2.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-2.yaml deleted file mode 100644 index 412f6775107430..00000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-2.yaml +++ /dev/null @@ -1,13 +0,0 @@ -api_key: apikey_20 - -process_agent_enabled: true -process_config: - enabled: 'false' - queue_size: 10 - intervals: - container: 8 - process: 30 - windows: - args_refresh_interval: -1 - add_new_args: true - scrub_args: true diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-3.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-3.yaml deleted file mode 100644 index a341991c782599..00000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-3.yaml +++ /dev/null @@ -1,9 +0,0 @@ -api_key: apikey_20 - -process_agent_enabled: true -process_config: - enabled: 'disabled' - queue_size: 10 - intervals: - container: 8 - process: 30 diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-4.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-4.yaml deleted file mode 100644 index a509048f5f855e..00000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-4.yaml +++ /dev/null @@ -1,13 +0,0 @@ -api_key: apikey_20 - -process_agent_enabled: true -process_config: - enabled: 'disabled' - additional_endpoints: - https://process.datadoghq.eu: - - foo - - bar - queue_size: 10 - intervals: - container: 8 - process: 30 diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-5.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-5.yaml deleted file mode 100644 index a539f6d62cc833..00000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-5.yaml +++ /dev/null @@ -1,7 +0,0 @@ -api_key: apikey_20 -site: datadoghq.eu - -process_agent_enabled: true -process_config: - enabled: 'true' - process_dd_url: http://test-process.datadoghq.com diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-6.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-6.yaml deleted file mode 100644 index 7c8f74dfeb52b9..00000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-6.yaml +++ /dev/null @@ -1,6 +0,0 @@ -api_key: apikey_20 -site: datacathq.eu - -process_agent_enabled: true -process_config: - enabled: 'true' diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-InvalidHostname.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-InvalidHostname.yaml deleted file mode 100644 index 84048df948c138..00000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-InvalidHostname.yaml +++ /dev/null @@ -1,5 +0,0 @@ -hostname: localhost - -process_agent_enabled: true -process_config: - enabled: 'true' diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlOnly.yaml deleted file mode 100644 index 021fea35cb7f1c..00000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly.yaml +++ /dev/null @@ -1,14 +0,0 @@ -api_key: apikey_20 - -process_agent_enabled: true -process_config: - enabled: 'true' - grpc_connection_timeout_secs: 0 - queue_size: 10 - intervals: - container: 8 - process: 30 - windows: - args_refresh_interval: 100 - add_new_args: false - scrub_args: false diff --git a/pkg/process/config/testdata/TestEnvSiteConfig-Enc.yaml b/pkg/process/config/testdata/TestEnvSiteConfig-Enc.yaml deleted file mode 100644 index d2168f39a2d8fb..00000000000000 --- a/pkg/process/config/testdata/TestEnvSiteConfig-Enc.yaml +++ /dev/null @@ -1,8 +0,0 @@ -site: datacathq.eu - -process_agent_enabled: true -process_config: - enabled: 'true' - process_dd_url: https://burrito.com -secret_backend_command: "./testdata/secret" - diff --git a/pkg/process/config/testdata/secret.go b/pkg/process/config/testdata/secret.go deleted file mode 100644 index 2e036517d61bdf..00000000000000 --- a/pkg/process/config/testdata/secret.go +++ /dev/null @@ -1,47 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package main - -import ( - "encoding/json" - "fmt" - "os" -) - -type Input struct { - Version string `json:"version"` - Secrets []string `json:"secrets"` -} - -type SecretOutput struct { - Value string `json:"value"` - // Use pointer for error so if it's not provided null will be used - Error *string `json:"error"` -} - -func main() { - in := Input{} - err := json.NewDecoder(os.Stdin).Decode(&in) - if err != nil { - fmt.Fprintf(os.Stderr, "error occurred decoding input: %s", err) - os.Exit(1) - } - - // Append secret to all the secrets requested - - out := map[string]SecretOutput{} - for _, s := range in.Secrets { - out[s] = SecretOutput{ - Value: fmt.Sprintf("secret-%s", s), - } - } - - err = json.NewEncoder(os.Stdout).Encode(out) - if err != nil { - fmt.Fprintf(os.Stderr, "error occurred encoding output: %s", err) - os.Exit(1) - } -} diff --git a/pkg/process/config/yaml_config.go b/pkg/process/config/yaml_config.go deleted file mode 100644 index 6528f20558f11f..00000000000000 --- a/pkg/process/config/yaml_config.go +++ /dev/null @@ -1,131 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package config - -import ( - "path/filepath" - "regexp" - "strings" - "time" - - "github.com/DataDog/datadog-agent/pkg/config" - httputils "github.com/DataDog/datadog-agent/pkg/util/http" - "github.com/DataDog/datadog-agent/pkg/util/log" -) - -const ( - ns = "process_config" - discoveryMinInterval = 10 * time.Minute -) - -func key(pieces ...string) string { - return strings.Join(pieces, ".") -} - -// LoadAgentConfig loads process-agent specific configurations based on the global Config object -func (a *AgentConfig) LoadAgentConfig(path string) error { - loadEnvVariables() - - // Resolve any secrets - if err := config.ResolveSecrets(config.Datadog, filepath.Base(path)); err != nil { - return err - } - - if config.Datadog.IsSet("hostname") { - a.HostName = config.Datadog.GetString("hostname") - } - - // The interval, in seconds, at which we will run each check. If you want consistent - // behavior between real-time you may set the Container/ProcessRT intervals to 10. - // Defaults to 10s for normal checks and 2s for others. - a.setCheckInterval(ns, "container", ContainerCheckName) - a.setCheckInterval(ns, "container_realtime", RTContainerCheckName) - a.setCheckInterval(ns, "process", ProcessCheckName) - a.setCheckInterval(ns, "process_realtime", RTProcessCheckName) - a.setCheckInterval(ns, "connections", ConnectionsCheckName) - - // We don't need to check if the key exists since we already bound it to a default in InitConfig. - // We use a minimum of 10 minutes for this value. - discoveryInterval := config.Datadog.GetDuration("process_config.process_discovery.interval") - if discoveryInterval < discoveryMinInterval { - discoveryInterval = discoveryMinInterval - _ = log.Warnf("Invalid interval for process discovery (<= %s) using default value of %[1]s", discoveryMinInterval.String()) - } - a.CheckIntervals[DiscoveryCheckName] = discoveryInterval - - eventsInterval := config.Datadog.GetDuration("process_config.event_collection.interval") - if eventsInterval < config.DefaultProcessEventsMinCheckInterval { - eventsInterval = config.DefaultProcessEventsCheckInterval - _ = log.Warnf("Invalid interval for process_events check (< %s) using default value of %s", - config.DefaultProcessEventsMinCheckInterval.String(), config.DefaultProcessEventsCheckInterval.String()) - } - a.CheckIntervals[ProcessEventsCheckName] = eventsInterval - - if a.CheckIntervals[ProcessCheckName] < a.CheckIntervals[RTProcessCheckName] || a.CheckIntervals[ProcessCheckName]%a.CheckIntervals[RTProcessCheckName] != 0 { - // Process check interval must be greater or equal to RTProcess check interval and the intervals must be divisible - // in order to be run on the same goroutine - log.Warnf( - "Invalid process check interval overrides [%s,%s], resetting to defaults [%s,%s]", - a.CheckIntervals[ProcessCheckName], - a.CheckIntervals[RTProcessCheckName], - ProcessCheckDefaultInterval, - RTProcessCheckDefaultInterval, - ) - a.CheckIntervals[ProcessCheckName] = ProcessCheckDefaultInterval - a.CheckIntervals[RTProcessCheckName] = RTProcessCheckDefaultInterval - } - - // A list of regex patterns that will exclude a process if matched. - if k := key(ns, "blacklist_patterns"); config.Datadog.IsSet(k) { - for _, b := range config.Datadog.GetStringSlice(k) { - r, err := regexp.Compile(b) - if err != nil { - log.Warnf("Ignoring invalid blacklist pattern: %s", b) - continue - } - a.Blacklist = append(a.Blacklist, r) - } - } - - // Enable/Disable the DataScrubber to obfuscate process args - if scrubArgsKey := key(ns, "scrub_args"); config.Datadog.IsSet(scrubArgsKey) { - a.Scrubber.Enabled = config.Datadog.GetBool(scrubArgsKey) - } - if a.Scrubber.Enabled { // Scrubber is enabled by default when it's created - log.Debug("Starting process-agent with Scrubber enabled") - } - - // A custom word list to enhance the default one used by the DataScrubber - if k := key(ns, "custom_sensitive_words"); config.Datadog.IsSet(k) { - words := config.Datadog.GetStringSlice(k) - a.Scrubber.AddCustomSensitiveWords(words) - log.Debug("Adding custom sensitives words to Scrubber:", words) - } - - // Strips all process arguments - if config.Datadog.GetBool(key(ns, "strip_proc_arguments")) { - log.Debug("Strip all process arguments enabled") - a.Scrubber.StripAllArguments = true - } - - // Build transport (w/ proxy if needed) - a.Transport = httputils.CreateHTTPTransport() - - return nil -} - -func (a *AgentConfig) setCheckInterval(ns, check, checkKey string) { - k := key(ns, "intervals", check) - - if !config.Datadog.IsSet(k) { - return - } - - if interval := config.Datadog.GetInt(k); interval != 0 { - log.Infof("Overriding %s check interval to %ds", checkKey, interval) - a.CheckIntervals[checkKey] = time.Duration(interval) * time.Second - } -} diff --git a/pkg/process/monitor/process_monitor.go b/pkg/process/monitor/process_monitor.go new file mode 100644 index 00000000000000..6d652c5b19732e --- /dev/null +++ b/pkg/process/monitor/process_monitor.go @@ -0,0 +1,360 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux +// +build linux + +package monitor + +import ( + "errors" + "fmt" + "regexp" + "runtime" + "sync" + "time" + + "github.com/DataDog/gopsutil/process" + "github.com/vishvananda/netlink" + + "github.com/DataDog/datadog-agent/pkg/process/util" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +const ( + processMonitorMaxEvents = 2048 +) + +var ( + once sync.Once + processMonitor *ProcessMonitor +) + +// ProcessMonitor will subscribe to the netlink process events like Exec, Exit +// and call the subscribed callbacks +// Initialize() will scan the current process and will call the subscribed callbacks +// +// callbacks will be executed in parallel via a pool of goroutines (runtime.NumCPU()) +// callbackRunner is callbacks queue. The queue size is set by processMonitorMaxEvents +// +// Multiple team can use the same ProcessMonitor, +// the callers need to guarantee calling each Initialize() Stop() one single time +// this maintain an internal reference counter +// +// ProcessMonitor require root or CAP_NET_ADMIN capabilities +type ProcessMonitor struct { + m sync.Mutex + wg sync.WaitGroup + refcount int + + isInitialized bool + + // chan push done by vishvananda/netlink library + events chan netlink.ProcEvent + done chan struct{} + errors chan error + + // callback registration and parallel execution management + procEventCallbacks map[ProcessEventType][]*ProcessCallback + runningPids map[uint32]interface{} + callbackRunner chan func() + callbackRunnerDone chan struct{} +} + +type ProcessEventType int + +const ( + EXEC ProcessEventType = iota + EXIT +) + +type ProcessMetadataField int + +const ( + ANY ProcessMetadataField = iota + NAME +) + +type metadataName struct { + Name string +} + +type ProcessCallback struct { + Event ProcessEventType + Metadata ProcessMetadataField + Regex *regexp.Regexp + Callback func(pid uint32) +} + +// GetProcessMonitor create a monitor (only once) that register to netlink process events. +// +// This monitor can monitor.Subscribe(callback, filter) callback on particular event +// like process EXEC, EXIT. The callback will be called when the filter will match. +// Filter can be applied on : +// process name (NAME) +// by default ANY is applied +// +// Typical initialization: +// mon := GetProcessMonitor() +// mon.Subscribe(callback) +// mon.Initialize() +// +// note: o GetProcessMonitor() will always return the same instance +// as we can only register once with netlink process event +// o mon.Subscribe() will subscribe callback before or after the Initialization +// o mon.Initialize() will scan current processes and call subscribed callback +// +// o callback{Event: EXIT, Metadata: ANY} callback is called for all exit events, system wide +// o callback{Event: EXIT, Metadata: NAME} callback will be called if we seen the process Exec event, +// the metadata will be saved between Exec and Exit event per pid +// then the Exit callback will evaluate the same metadata on Exit. +// We need to save the metadata here as /proc/pid doesn't exist anymore. +func GetProcessMonitor() *ProcessMonitor { + once.Do(func() { + processMonitor = &ProcessMonitor{ + isInitialized: false, + procEventCallbacks: make(map[ProcessEventType][]*ProcessCallback), + runningPids: make(map[uint32]interface{}), + } + }) + + return processMonitor +} + +func (pm *ProcessMonitor) enqueueCallback(callback *ProcessCallback, pid uint32, metadata interface{}) { + if callback.Event == EXEC && callback.Metadata != ANY { + switch callback.Metadata { + case NAME: + pm.runningPids[pid] = metadata + } + } + pm.callbackRunner <- func() { callback.Callback(pid) } +} + +// evalEXECCallback is a best effort and would not return errors, but report them +func (p *ProcessMonitor) evalEXECCallback(c *ProcessCallback, pid uint32) { + if c.Metadata == ANY { + p.enqueueCallback(c, pid, nil) + return + } + + var err error + var proc *process.Process + // We receive the Exec event first and /proc could be slow to update + end := time.Now().Add(10 * time.Millisecond) + for end.After(time.Now()) { + proc, err = process.NewProcess(int32(pid)) + if err == nil { + break + } + time.Sleep(time.Millisecond) + } + if err != nil { + // short living process can hit here (or later proc.Name() parsing) + // as they already exited when we try to find them in /proc + // so let's be quiet on the logs as there not much to do here + return + } + + switch c.Metadata { + case NAME: + pname, err := proc.Name() + if err != nil { + log.Debugf("process %d name parsing failed %s", pid, err) + return + } + if c.Regex.MatchString(pname) { + p.enqueueCallback(c, pid, metadataName{Name: pname}) + } + } +} + +// evalEXITCallback will evaluate the metadata saved by the Exec callback and the callback accordingly +// please refer to GetProcessMonitor documentation +func (p *ProcessMonitor) evalEXITCallback(c *ProcessCallback, pid uint32) { + switch c.Metadata { + case NAME: + metadata, found := p.runningPids[pid] + if !found { + // we can hit here if a process started before the Exec callback has been registred + // and the process Exit, so we don't find his metadata + return + } + pname := metadata.(metadataName).Name + if c.Regex.MatchString(pname) { + p.enqueueCallback(c, pid, metadata) + } + case ANY: + p.enqueueCallback(c, pid, nil) + } +} + +// Initialize will scan all running processes and execute matching callbacks +// Once it's done all new events from netlink socket will be processed by the main async loop +func (pm *ProcessMonitor) Initialize() error { + pm.m.Lock() + defer pm.m.Unlock() + + pm.refcount++ + if pm.isInitialized { + return nil + } + + pm.events = make(chan netlink.ProcEvent, processMonitorMaxEvents) + pm.done = make(chan struct{}) + pm.errors = make(chan error) + + if err := netlink.ProcEventMonitor(pm.events, pm.done, pm.errors); err != nil { + return fmt.Errorf("couldn't initialize process monitor: %s", err) + } + + pm.callbackRunnerDone = make(chan struct{}, runtime.NumCPU()) + pm.callbackRunner = make(chan func(), runtime.NumCPU()) + for i := 0; i < runtime.NumCPU(); i++ { + pm.wg.Add(1) + go func() { + defer pm.wg.Done() + for { + select { + case <-pm.callbackRunnerDone: + return + case call, ok := <-pm.callbackRunner: + if !ok { + continue + } + call() + } + } + }() + } + + // This is the main async loop, where we process processes events from netlink socket + // events are dropped until + pm.wg.Add(1) + go func() { + defer func() { + log.Info("netlink process monitor ended") + pm.wg.Done() + }() + for { + select { + case <-pm.done: + return + + case event, ok := <-pm.events: + if !ok { + return + } + pm.m.Lock() + if !pm.isInitialized { + pm.m.Unlock() + continue + } + + switch ev := event.Msg.(type) { + case *netlink.ExecProcEvent: + for _, c := range pm.procEventCallbacks[EXEC] { + pm.evalEXECCallback(c, ev.ProcessPid) + } + case *netlink.ExitProcEvent: + for _, c := range pm.procEventCallbacks[EXIT] { + pm.evalEXITCallback(c, ev.ProcessPid) + } + delete(pm.runningPids, ev.ProcessPid) + } + pm.m.Unlock() + + case err, ok := <-pm.errors: + if !ok { + return + } + log.Errorf("process montior error: %s", err) + pm.Stop() + return + } + } + }() + + fn := func(pid int) error { + for _, c := range pm.procEventCallbacks[EXEC] { + pm.evalEXECCallback(c, uint32(pid)) + } + return nil + } + + if err := util.WithAllProcs(util.HostProc(), fn); err != nil { + return fmt.Errorf("process monitor init, scanning all process failed %s", err) + } + // enable events to be processed + pm.isInitialized = true + return nil +} + +// Subscribe register a callback and store it pm.procEventCallbacks[callback.Event] list +// this list is maintained out of order, and the return UnSubscribe function callback +// will remove the previously registered callback from the list +// +// By design : 1/ a callback object can be registered only once +// 2/ Exec callback with a Metadata (!=ANY) must be registred before the sibling Exit metadata, +// otherwise the Subscribe() will return an error as no metadata will be saved between Exec and Exit, +// please refer to GetProcessMonitor() +func (pm *ProcessMonitor) Subscribe(callback *ProcessCallback) (UnSubscribe func(), err error) { + pm.m.Lock() + defer pm.m.Unlock() + + for _, c := range pm.procEventCallbacks[callback.Event] { + if c == callback { + return nil, errors.New("same callback can't be registred twice") + } + } + + // check if the sibling Exec callback exist + if callback.Event == EXIT && callback.Metadata != ANY { + foundSibling := false + for _, c := range pm.procEventCallbacks[EXEC] { + if c.Metadata == callback.Metadata && c.Regex.String() == callback.Regex.String() { + foundSibling = true + break + } + } + if !foundSibling { + return nil, errors.New("no Exec callback has been found with the same Metadata and Regex, please Subscribe(Exec callback, Metadata) first") + } + } + + pm.procEventCallbacks[callback.Event] = append(pm.procEventCallbacks[callback.Event], callback) + + // UnSubscribe() + return func() { + pm.m.Lock() + defer pm.m.Unlock() + + // we are scanning all callbacks remove the one we registered + // and remove it from the pm.procEventCallbacks[callback.Event] list + for i, c := range pm.procEventCallbacks[callback.Event] { + if c == callback { + l := len(pm.procEventCallbacks[callback.Event]) + pm.procEventCallbacks[callback.Event][i] = pm.procEventCallbacks[callback.Event][l-1] + pm.procEventCallbacks[callback.Event] = pm.procEventCallbacks[callback.Event][:l-1] + return + } + } + }, nil +} + +func (pm *ProcessMonitor) Stop() { + pm.m.Lock() + defer pm.m.Unlock() + pm.refcount-- + if pm.refcount > 0 { + return + } + + close(pm.callbackRunnerDone) + close(pm.done) + pm.wg.Wait() + + pm.isInitialized = false +} diff --git a/pkg/process/monitor/process_monitor_test.go b/pkg/process/monitor/process_monitor_test.go new file mode 100644 index 00000000000000..8fd230453261fa --- /dev/null +++ b/pkg/process/monitor/process_monitor_test.go @@ -0,0 +1,176 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package monitor + +import ( + "fmt" + "io/ioutil" + "os" + "os/exec" + "path" + "regexp" + "testing" + "time" + + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/pkg/util" +) + +func TestProcessMonitorBasics(t *testing.T) { + // Making sure we get the same process monitor if we call it twice. + pm := GetProcessMonitor() + pm2 := GetProcessMonitor() + + require.Equal(t, pm, pm2) + + // Sanity subscribing a callback. + callback := &ProcessCallback{ + Event: EXEC, + Metadata: ANY, + Callback: func(pid uint32) {}, + } + unsubscribe, err := pm.Subscribe(callback) + require.NoError(t, err) + + // Sanity subscribing a callback. + callback2 := &ProcessCallback{ + Event: EXEC, + Metadata: ANY, + Callback: func(pid uint32) {}, + } + unsubscribe2, err := pm.Subscribe(callback2) + require.NoError(t, err) + + // duplicated subscription should fail. + _, err = pm.Subscribe(callback) + require.Error(t, err) + + // making sure unsubscribe works and does not panic for the second unsubscription. + unsubscribe() + require.NotPanics(t, unsubscribe) + unsubscribe2() + require.NotPanics(t, unsubscribe2) +} + +func TestProcessMonitorCallbacks(t *testing.T) { + pm := GetProcessMonitor() + + numberOfExecs := 0 + numberOfExits := 0 + + tmpFile, err := ioutil.TempFile("", "echo") + require.NoError(t, err) + defer os.Remove(tmpFile.Name()) + err = util.CopyFile("/bin/echo", tmpFile.Name()) + require.NoError(t, err) + + require.NoError(t, os.Chmod(tmpFile.Name(), 0500)) + + require.NoError(t, pm.Initialize()) + defer pm.Stop() + callbackExec := &ProcessCallback{ + Event: EXEC, + Metadata: NAME, + Regex: regexp.MustCompile(path.Base(tmpFile.Name())), + Callback: func(pid uint32) { + numberOfExecs++ + }, + } + callbackExit := &ProcessCallback{ + Event: EXIT, + Metadata: NAME, // we want only the captured Exec process + Regex: regexp.MustCompile(path.Base(tmpFile.Name())), + Callback: func(pid uint32) { + numberOfExits++ + }, + } + + unsubscribeExec, err := pm.Subscribe(callbackExec) + require.NoError(t, err) + unsubscribeExit, err := pm.Subscribe(callbackExit) + require.NoError(t, err) + + require.NoError(t, exec.Command(tmpFile.Name(), "test").Run()) + require.Eventuallyf(t, func() bool { + return numberOfExecs == 1 && numberOfExits == 1 + }, time.Second, time.Millisecond*200, fmt.Sprintf("didn't capture exec %d and exit %d", numberOfExecs, numberOfExits)) + + unsubscribeExit() + require.NoError(t, exec.Command(tmpFile.Name()).Run()) + require.Eventuallyf(t, func() bool { + return numberOfExecs == 2 && numberOfExits == 1 + }, time.Second, time.Millisecond*200, fmt.Sprintf("didn't capture exec %d and exit %d", numberOfExecs, numberOfExits)) + + unsubscribeExec() + require.NoError(t, exec.Command(tmpFile.Name()).Run()) + require.Eventuallyf(t, func() bool { + return numberOfExecs == 2 && numberOfExits == 1 + }, time.Second, time.Millisecond*200, fmt.Sprintf("didn't capture exec %d and exit %d", numberOfExecs, numberOfExits)) + +} + +func TestProcessMonitorRefcount(t *testing.T) { + pm := GetProcessMonitor() + require.Equal(t, pm.refcount, 0) + err := pm.Initialize() + require.Equal(t, pm.refcount, 1) + require.NoError(t, err) + pm.Stop() + require.Equal(t, pm.refcount, 0) + + pm2 := GetProcessMonitor() + + numberOfExecs := 0 + callbackExec := &ProcessCallback{ + Event: EXEC, + Metadata: ANY, + Callback: func(pid uint32) { + numberOfExecs++ + }, + } + _, err = pm.Subscribe(callbackExec) + require.NoError(t, err) + require.NoError(t, pm2.Initialize()) + require.Equal(t, pm.refcount, 1) + + oldNumberOfExecs := numberOfExecs + require.NoError(t, exec.Command("/bin/echo").Run()) + require.Eventuallyf(t, func() bool { + return numberOfExecs > oldNumberOfExecs + }, time.Second, time.Millisecond*200, fmt.Sprintf("didn't capture a new exec %d old %d", numberOfExecs, oldNumberOfExecs)) + + require.NoError(t, pm2.Initialize()) + require.Equal(t, pm.refcount, 2) + + oldNumberOfExecs = numberOfExecs + require.NoError(t, exec.Command("/bin/echo").Run()) + require.Eventuallyf(t, func() bool { + return numberOfExecs > oldNumberOfExecs + }, time.Second, time.Millisecond*200, fmt.Sprintf("didn't capture a new exec %d old %d", numberOfExecs, oldNumberOfExecs)) + + require.Equal(t, pm.refcount, 2) + pm2.Stop() + require.Equal(t, pm.refcount, 1) + + oldNumberOfExecs = numberOfExecs + require.NoError(t, exec.Command("/bin/echo").Run()) + require.Eventuallyf(t, func() bool { + return numberOfExecs > oldNumberOfExecs + }, time.Second, time.Millisecond*200, fmt.Sprintf("didn't capture a new exec %d old %d", numberOfExecs, oldNumberOfExecs)) + + pm2.Stop() + require.Equal(t, pm.refcount, 0) + + oldNumberOfExecs = numberOfExecs + require.NoError(t, exec.Command("/bin/echo").Run()) + require.Eventuallyf(t, func() bool { + return numberOfExecs == oldNumberOfExecs + }, time.Second, time.Millisecond*200, fmt.Sprintf("capture a new exec %d old %d", numberOfExecs, oldNumberOfExecs)) +} diff --git a/pkg/process/net/mocks/sys_probe_util.go b/pkg/process/net/mocks/sys_probe_util.go index fd62825d2a6c95..6626b400338d8c 100644 --- a/pkg/process/net/mocks/sys_probe_util.go +++ b/pkg/process/net/mocks/sys_probe_util.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/process/config/data_scrubber.go b/pkg/process/procutil/data_scrubber.go similarity index 94% rename from pkg/process/config/data_scrubber.go rename to pkg/process/procutil/data_scrubber.go index 1bd2da7f0cf44f..2ca5b1f40ff100 100644 --- a/pkg/process/config/data_scrubber.go +++ b/pkg/process/procutil/data_scrubber.go @@ -3,16 +3,14 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -package config +package procutil import ( "bytes" - "fmt" "regexp" "strconv" "strings" - "github.com/DataDog/datadog-agent/pkg/process/procutil" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -28,7 +26,7 @@ const ( defaultCacheMaxCycles = 25 ) -// DataScrubber allows the agent to blacklist cmdline arguments that match +// DataScrubber allows the agent to disallow-list cmdline arguments that match // a list of predefined and custom words type DataScrubber struct { Enabled bool @@ -87,7 +85,7 @@ func CompileStringsToRegex(words []string) []*regexp.Regexp { valid = false break } else { - enhancedWord.WriteString(fmt.Sprintf("[^\\s=:$/]*")) + enhancedWord.WriteString("[^\\s=:$/]*") } } else { enhancedWord.WriteString(string(rune)) @@ -111,7 +109,7 @@ func CompileStringsToRegex(words []string) []*regexp.Regexp { } // createProcessKey returns an unique identifier for a given process -func createProcessKey(p *procutil.Process) string { +func createProcessKey(p *Process) string { var b bytes.Buffer b.WriteString("p:") b.WriteString(strconv.Itoa(int(p.Pid))) @@ -123,7 +121,7 @@ func createProcessKey(p *procutil.Process) string { // ScrubProcessCommand uses a cache memory to avoid scrubbing already known // process' cmdlines -func (ds *DataScrubber) ScrubProcessCommand(p *procutil.Process) []string { +func (ds *DataScrubber) ScrubProcessCommand(p *Process) []string { if ds.StripAllArguments { return ds.stripArguments(p.Cmdline) } diff --git a/pkg/process/config/data_scrubber_test.go b/pkg/process/procutil/data_scrubber_test.go similarity index 98% rename from pkg/process/config/data_scrubber_test.go rename to pkg/process/procutil/data_scrubber_test.go index c122f80c3607b9..eba60223f8dd12 100644 --- a/pkg/process/config/data_scrubber_test.go +++ b/pkg/process/procutil/data_scrubber_test.go @@ -3,7 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -package config +package procutil import ( "flag" @@ -11,8 +11,6 @@ import ( "time" "github.com/stretchr/testify/assert" - - "github.com/DataDog/datadog-agent/pkg/process/procutil" ) func setupDataScrubber(t *testing.T) *DataScrubber { @@ -58,7 +56,7 @@ type testCase struct { } type testProcess struct { - procutil.Process + Process parsedCmdline []string } @@ -197,9 +195,9 @@ func setupTestProcesses() (fps []testProcess, sensible int) { fps = make([]testProcess, 0, len(cases)) for i, c := range cases { fps = append(fps, testProcess{ - procutil.Process{ + Process{ Pid: int32(i), - Stats: &procutil.Stats{ + Stats: &Stats{ CreateTime: time.Now().Unix(), }, Cmdline: c.cmdline, @@ -219,9 +217,9 @@ func setupTestProcessesForBench() []testProcess { fps := make([]testProcess, 0, len(cases)) for i := 0; i < nbProcesses; i++ { fps = append(fps, testProcess{ - procutil.Process{ + Process{ Pid: int32(i), - Stats: &procutil.Stats{ + Stats: &Stats{ CreateTime: time.Now().Unix(), }, Cmdline: cases[i%len(cases)].cmdline, @@ -296,7 +294,7 @@ func TestUncompilableWord(t *testing.T) { } } -func TestBlacklistedArgs(t *testing.T) { +func TestDisallowListedArgs(t *testing.T) { cases := setupSensitiveCmdlines() scrubber := setupDataScrubber(t) @@ -306,7 +304,7 @@ func TestBlacklistedArgs(t *testing.T) { } } -func TestBlacklistedArgsWhenDisabled(t *testing.T) { +func TestDisallowListedArgsWhenDisabled(t *testing.T) { cases := []struct { cmdline []string parsedCmdline []string @@ -333,7 +331,7 @@ func TestBlacklistedArgsWhenDisabled(t *testing.T) { scrubber.Enabled = false for i := range cases { - fp := &procutil.Process{Cmdline: cases[i].cmdline} + fp := &Process{Cmdline: cases[i].cmdline} cases[i].cmdline = scrubber.ScrubProcessCommand(fp) assert.Equal(t, cases[i].parsedCmdline, cases[i].cmdline) } @@ -368,13 +366,13 @@ func TestScrubberStrippingAllArgument(t *testing.T) { scrubber.StripAllArguments = true for i := range cases { - fp := &procutil.Process{Cmdline: cases[i].cmdline} + fp := &Process{Cmdline: cases[i].cmdline} cases[i].cmdline = scrubber.ScrubProcessCommand(fp) assert.Equal(t, cases[i].parsedCmdline, cases[i].cmdline) } } -func TestNoBlacklistedArgs(t *testing.T) { +func TestNoDisallowListedArgs(t *testing.T) { cases := setupInsensitiveCmdlines() scrubber := setupDataScrubber(t) diff --git a/pkg/process/procutil/mocks/probe.go b/pkg/process/procutil/mocks/probe.go index 1d5c5e2bbbc770..ceaa025a4e87e7 100644 --- a/pkg/process/procutil/mocks/probe.go +++ b/pkg/process/procutil/mocks/probe.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/process/util/status.go b/pkg/process/util/status.go index 434cde89c39d66..396c2c3c6abbd0 100644 --- a/pkg/process/util/status.go +++ b/pkg/process/util/status.go @@ -66,31 +66,32 @@ type MemInfo struct { // ProcessExpvars holds values fetched from the exp var server type ProcessExpvars struct { - Pid int `json:"pid"` - Uptime int `json:"uptime"` - UptimeNano float64 `json:"uptime_nano"` - MemStats MemInfo `json:"memstats"` - Version InfoVersion `json:"version"` - DockerSocket string `json:"docker_socket"` - LastCollectTime string `json:"last_collect_time"` - ProcessCount int `json:"process_count"` - ContainerCount int `json:"container_count"` - ProcessQueueSize int `json:"process_queue_size"` - RTProcessQueueSize int `json:"rtprocess_queue_size"` - ConnectionsQueueSize int `json:"connections_queue_size"` - EventQueueSize int `json:"event_queue_size"` - PodQueueSize int `json:"pod_queue_size"` - ProcessQueueBytes int `json:"process_queue_bytes"` - RTProcessQueueBytes int `json:"rtprocess_queue_bytes"` - ConnectionsQueueBytes int `json:"connections_queue_bytes"` - EventQueueBytes int `json:"event_queue_bytes"` - PodQueueBytes int `json:"pod_queue_bytes"` - ContainerID string `json:"container_id"` - ProxyURL string `json:"proxy_url"` - LogFile string `json:"log_file"` - EnabledChecks []string `json:"enabled_checks"` - Endpoints map[string][]string `json:"endpoints"` - DropCheckPayloads []string `json:"drop_check_payloads"` + Pid int `json:"pid"` + Uptime int `json:"uptime"` + UptimeNano float64 `json:"uptime_nano"` + MemStats MemInfo `json:"memstats"` + Version InfoVersion `json:"version"` + DockerSocket string `json:"docker_socket"` + LastCollectTime string `json:"last_collect_time"` + ProcessCount int `json:"process_count"` + ContainerCount int `json:"container_count"` + ProcessQueueSize int `json:"process_queue_size"` + RTProcessQueueSize int `json:"rtprocess_queue_size"` + ConnectionsQueueSize int `json:"connections_queue_size"` + EventQueueSize int `json:"event_queue_size"` + PodQueueSize int `json:"pod_queue_size"` + ProcessQueueBytes int `json:"process_queue_bytes"` + RTProcessQueueBytes int `json:"rtprocess_queue_bytes"` + ConnectionsQueueBytes int `json:"connections_queue_bytes"` + EventQueueBytes int `json:"event_queue_bytes"` + PodQueueBytes int `json:"pod_queue_bytes"` + ContainerID string `json:"container_id"` + ProxyURL string `json:"proxy_url"` + LogFile string `json:"log_file"` + EnabledChecks []string `json:"enabled_checks"` + Endpoints map[string][]string `json:"endpoints"` + DropCheckPayloads []string `json:"drop_check_payloads"` + SystemProbeProcessModuleEnabled bool `json:"system_probe_process_module_enabled"` } // Status holds runtime information from process-agent diff --git a/pkg/process/util/status_test.go b/pkg/process/util/status_test.go index 2097502b8ad9ca..fb02427d544d37 100644 --- a/pkg/process/util/status_test.go +++ b/pkg/process/util/status_test.go @@ -51,18 +51,19 @@ func TestGetStatus(t *testing.T) { "fakeAPIKey", }, }, - LastCollectTime: "2022-02-011 10:10:00", - DockerSocket: "/var/run/docker.sock", - ProcessCount: 30, - ContainerCount: 2, - ProcessQueueSize: 1, - RTProcessQueueSize: 3, - ConnectionsQueueSize: 4, - PodQueueSize: 5, - ProcessQueueBytes: 2 * 1024, - RTProcessQueueBytes: 512, - ConnectionsQueueBytes: 8 * 1024, - PodQueueBytes: 4 * 1024, + LastCollectTime: "2022-02-011 10:10:00", + DockerSocket: "/var/run/docker.sock", + ProcessCount: 30, + ContainerCount: 2, + ProcessQueueSize: 1, + RTProcessQueueSize: 3, + ConnectionsQueueSize: 4, + PodQueueSize: 5, + ProcessQueueBytes: 2 * 1024, + RTProcessQueueBytes: 512, + ConnectionsQueueBytes: 8 * 1024, + PodQueueBytes: 4 * 1024, + SystemProbeProcessModuleEnabled: true, } // Feature detection needs to run before host methods are called. During runtime, feature detection happens diff --git a/pkg/proto/datadog/remoteconfig/remoteconfig.proto b/pkg/proto/datadog/remoteconfig/remoteconfig.proto index 4b502a89cdad4c..c753b371fb1ac2 100644 --- a/pkg/proto/datadog/remoteconfig/remoteconfig.proto +++ b/pkg/proto/datadog/remoteconfig/remoteconfig.proto @@ -53,6 +53,7 @@ message LatestConfigsRequest { bool has_error = 11; string error = 12; string trace_agent_env = 13; + string org_uuid = 14; } message LatestConfigsResponse { diff --git a/pkg/proto/pbgo/remoteconfig.pb.go b/pkg/proto/pbgo/remoteconfig.pb.go index bc21b43d67d754..10ff0f68a5cd71 100644 --- a/pkg/proto/pbgo/remoteconfig.pb.go +++ b/pkg/proto/pbgo/remoteconfig.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.6.1 +// protoc-gen-go v1.28.1 +// protoc v3.21.8 // source: datadog/remoteconfig/remoteconfig.proto package pbgo @@ -361,6 +361,7 @@ type LatestConfigsRequest struct { HasError bool `protobuf:"varint,11,opt,name=has_error,json=hasError,proto3" json:"has_error,omitempty"` Error string `protobuf:"bytes,12,opt,name=error,proto3" json:"error,omitempty"` TraceAgentEnv string `protobuf:"bytes,13,opt,name=trace_agent_env,json=traceAgentEnv,proto3" json:"trace_agent_env,omitempty"` + OrgUuid string `protobuf:"bytes,14,opt,name=org_uuid,json=orgUuid,proto3" json:"org_uuid,omitempty"` } func (x *LatestConfigsRequest) Reset() { @@ -479,6 +480,13 @@ func (x *LatestConfigsRequest) GetTraceAgentEnv() string { return "" } +func (x *LatestConfigsRequest) GetOrgUuid() string { + if x != nil { + return x.OrgUuid + } + return "" +} + type LatestConfigsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1570,7 +1578,7 @@ var file_datadog_remoteconfig_remoteconfig_proto_rawDesc = []byte{ 0x0a, 0x03, 0x72, 0x61, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x72, 0x61, 0x77, 0x22, 0x2c, 0x0a, 0x04, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x10, 0x0a, 0x03, - 0x72, 0x61, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x72, 0x61, 0x77, 0x22, 0xaa, + 0x72, 0x61, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x72, 0x61, 0x77, 0x22, 0xc5, 0x04, 0x0a, 0x14, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, @@ -1605,185 +1613,186 @@ var file_datadog_remoteconfig_remoteconfig_proto_rawDesc = []byte{ 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x76, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, - 0x61, 0x63, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x76, 0x22, 0xd6, 0x01, 0x0a, 0x15, - 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, - 0x6d, 0x65, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x64, 0x61, - 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x73, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x4d, 0x65, 0x74, 0x61, 0x73, 0x12, 0x44, 0x0a, 0x0e, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x73, 0x52, 0x0d, 0x64, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x74, + 0x61, 0x63, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x76, 0x12, 0x19, 0x0a, 0x08, 0x6f, + 0x72, 0x67, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, + 0x72, 0x67, 0x55, 0x75, 0x69, 0x64, 0x22, 0xd6, 0x01, 0x0a, 0x15, 0x4c, 0x61, 0x74, 0x65, 0x73, + 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x3e, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x65, + 0x74, 0x61, 0x73, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x73, + 0x12, 0x44, 0x0a, 0x0e, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x74, + 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, + 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x73, 0x52, 0x0d, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x4d, 0x65, 0x74, 0x61, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x64, + 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x46, 0x69, + 0x6c, 0x65, 0x52, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x22, + 0x25, 0x0a, 0x0f, 0x4f, 0x72, 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0xef, 0x02, 0x0a, 0x06, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x12, 0x31, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, + 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x72, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x12, 0x41, 0x0a, + 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x72, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x61, 0x63, + 0x65, 0x72, 0x52, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, + 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x0c, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x0b, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6c, + 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, + 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x04, + 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x22, 0xd1, 0x01, 0x0a, 0x0c, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, + 0x75, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, + 0x75, 0x61, 0x67, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x72, 0x5f, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, + 0x61, 0x63, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x65, 0x6e, 0x76, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x5f, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, + 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, + 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x22, 0x3b, 0x0a, 0x0b, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x93, 0x01, 0x0a, 0x0b, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x1f, 0x0a, + 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1f, + 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, + 0x80, 0x02, 0x0a, 0x0b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x21, 0x0a, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x72, 0x6f, 0x6f, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x5f, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0d, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, + 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x1b, 0x0a, + 0x09, 0x68, 0x61, 0x73, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x08, 0x68, 0x61, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x12, 0x30, 0x0a, 0x14, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x5f, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, + 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x22, 0x48, 0x0a, 0x0e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, + 0x48, 0x61, 0x73, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, + 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, + 0x68, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x22, 0x74, 0x0a, 0x0e, + 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x12, + 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x36, 0x0a, 0x06, 0x68, 0x61, + 0x73, 0x68, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x64, 0x61, 0x74, + 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x48, 0x61, 0x73, 0x68, 0x52, 0x06, 0x68, 0x61, 0x73, 0x68, + 0x65, 0x73, 0x22, 0x99, 0x01, 0x0a, 0x17, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x47, 0x65, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, + 0x0a, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x4e, + 0x0a, 0x13, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, + 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x64, 0x61, + 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x11, 0x63, 0x61, 0x63, + 0x68, 0x65, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x22, 0xaa, + 0x01, 0x0a, 0x18, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x72, + 0x6f, 0x6f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x05, 0x72, 0x6f, 0x6f, 0x74, + 0x73, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, - 0x69, 0x6c, 0x65, 0x73, 0x22, 0x25, 0x0a, 0x0f, 0x4f, 0x72, 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0xef, 0x02, 0x0a, 0x06, - 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x74, 0x72, 0x61, 0x63, - 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x54, 0x72, 0x61, 0x63, - 0x65, 0x72, 0x12, 0x41, 0x0a, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x72, 0x61, - 0x63, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x64, 0x61, 0x74, 0x61, - 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x52, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, - 0x72, 0x61, 0x63, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, 0x67, 0x65, 0x6e, - 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x67, 0x65, 0x6e, 0x74, - 0x12, 0x3e, 0x0a, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, - 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x67, - 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, - 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x12, 0x22, 0x0a, - 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x22, 0xd1, 0x01, - 0x0a, 0x0c, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x12, 0x1d, - 0x0a, 0x0a, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, - 0x63, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x63, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, - 0x76, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x65, 0x6e, 0x76, 0x12, 0x1f, 0x0a, 0x0b, - 0x61, 0x70, 0x70, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, - 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, - 0x73, 0x22, 0x3b, 0x0a, 0x0b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x93, - 0x01, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, - 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, - 0x75, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x80, 0x02, 0x0a, 0x0b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x72, 0x6f, 0x6f, 0x74, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x40, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, - 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x61, 0x73, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x68, 0x61, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, - 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x30, 0x0a, 0x14, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, - 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x12, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x48, 0x0a, 0x0e, 0x54, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x46, 0x69, 0x6c, 0x65, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x6c, 0x67, - 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x6c, - 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x4a, 0x04, 0x08, 0x02, 0x10, - 0x03, 0x22, 0x74, 0x0a, 0x0e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x4d, - 0x65, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, - 0x36, 0x0a, 0x06, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x48, 0x61, 0x73, 0x68, 0x52, - 0x06, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x22, 0x99, 0x01, 0x0a, 0x17, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x12, 0x4e, 0x0a, 0x13, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, - 0x52, 0x11, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, 0x69, - 0x6c, 0x65, 0x73, 0x22, 0xaa, 0x01, 0x0a, 0x18, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x47, 0x65, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, - 0x05, 0x72, 0x6f, 0x6f, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, - 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, - 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x0b, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, - 0x22, 0x3d, 0x0a, 0x0d, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x68, - 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x22, - 0xc2, 0x04, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0c, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x37, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x60, 0x0a, 0x0e, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, - 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x66, 0x0a, 0x10, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x1a, 0x5d, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x5f, 0x0a, 0x12, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, - 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x1a, 0x42, 0x0a, 0x14, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0xeb, 0x01, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x50, - 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x56, 0x31, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x63, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x63, 0x65, - 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, - 0x75, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, - 0x75, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, - 0x44, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x49, 0x44, 0x22, 0x67, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x50, 0x72, 0x65, 0x64, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, 0x53, 0x0a, 0x14, 0x74, 0x72, 0x61, 0x63, 0x65, 0x72, - 0x5f, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x31, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x50, 0x72, 0x65, 0x64, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x56, 0x31, 0x52, 0x12, 0x74, 0x72, 0x61, 0x63, 0x65, 0x72, 0x50, - 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x56, 0x31, 0x42, 0x10, 0x5a, 0x0e, 0x70, - 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x67, 0x6f, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x22, 0x3d, 0x0a, 0x0d, 0x46, + 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x22, 0xc2, 0x04, 0x0a, 0x16, 0x47, + 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x64, 0x61, + 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x65, 0x74, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x60, 0x0a, 0x0e, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x64, 0x61, 0x74, 0x61, + 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x66, 0x0a, 0x10, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x66, 0x69, + 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, + 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, + 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x74, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x1a, 0x5d, 0x0a, 0x10, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x33, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5f, 0x0a, 0x12, 0x44, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x54, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0xeb, 0x01, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x56, 0x31, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, + 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, + 0x44, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x65, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x0a, + 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, + 0x0d, 0x74, 0x72, 0x61, 0x63, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x63, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x44, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x44, 0x22, 0x67, 0x0a, + 0x10, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x73, 0x12, 0x53, 0x0a, 0x14, 0x74, 0x72, 0x61, 0x63, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x65, 0x64, + 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x31, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x56, 0x31, 0x52, 0x12, 0x74, 0x72, 0x61, 0x63, 0x65, 0x72, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x73, 0x56, 0x31, 0x42, 0x10, 0x5a, 0x0e, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x67, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/pkg/remoteconfig/state/configs.go b/pkg/remoteconfig/state/configs.go index 251e29cf301bd1..ea813dcce348b1 100644 --- a/pkg/remoteconfig/state/configs.go +++ b/pkg/remoteconfig/state/configs.go @@ -22,19 +22,23 @@ import ( 4. Add a method on the `Repository` to retrieved typed configs for the product. */ -var allProducts = []string{ProductAPMSampling, ProductCWSDD, ProductASMFeatures, ProductASMDD, ProductASMData} +var allProducts = []string{ProductAPMSampling, ProductCWSDD, ProductCWSCustom, ProductASMFeatures, ProductASMDD, ProductASMData, ProductAPMTracing} const ( // ProductAPMSampling is the apm sampling product ProductAPMSampling = "APM_SAMPLING" // ProductCWSDD is the cloud workload security product managed by datadog employees ProductCWSDD = "CWS_DD" + // ProductCWSCustom is the cloud workload security product managed by datadog customers + ProductCWSCustom = "CWS_CUSTOM" // ProductASMFeatures is the ASM product used form ASM activation through remote config ProductASMFeatures = "ASM_FEATURES" // ProductASMDD is the application security monitoring product managed by datadog employees ProductASMDD = "ASM_DD" // ProductASMData is the ASM product used to configure WAF rules data ProductASMData = "ASM_DATA" + // ProductAPMTracing is the apm tracing product + ProductAPMTracing = "APM_TRACING" ) // ErrNoConfigVersion occurs when a target file's custom meta is missing the config version @@ -50,10 +54,14 @@ func parseConfig(product string, raw []byte, metadata Metadata) (interface{}, er c, err = parseASMFeaturesConfig(raw, metadata) case ProductCWSDD: c, err = parseConfigCWSDD(raw, metadata) + case ProductCWSCustom: + c, err = parseConfigCWSCustom(raw, metadata) case ProductASMDD: c, err = parseConfigASMDD(raw, metadata) case ProductASMData: c, err = parseConfigASMData(raw, metadata) + case ProductAPMTracing: + c, err = parseConfigAPMTracing(raw, metadata) default: return nil, fmt.Errorf("unknown product - %s", product) } @@ -128,6 +136,39 @@ func (r *Repository) CWSDDConfigs() map[string]ConfigCWSDD { return typedConfigs } +// ConfigCWSCustom is a deserialized CWS Custom configuration file along with its +// associated remote config metadata +type ConfigCWSCustom struct { + Config []byte + Metadata Metadata +} + +func parseConfigCWSCustom(data []byte, metadata Metadata) (ConfigCWSCustom, error) { + return ConfigCWSCustom{ + Config: data, + Metadata: metadata, + }, nil +} + +// CWSCustomConfigs returns the currently active CWSCustom config files +func (r *Repository) CWSCustomConfigs() map[string]ConfigCWSCustom { + typedConfigs := make(map[string]ConfigCWSCustom) + + configs := r.getConfigs(ProductCWSCustom) + + for path, conf := range configs { + // We control this, so if this has gone wrong something has gone horribly wrong + typed, ok := conf.(ConfigCWSCustom) + if !ok { + panic("unexpected config stored as CWSDD Config") + } + + typedConfigs[path] = typed + } + + return typedConfigs +} + // ConfigASMDD is a deserialized ASM DD configuration file along with its // associated remote config metadata type ConfigASMDD struct { @@ -277,6 +318,34 @@ func (r *Repository) ASMDataConfigs() map[string]ASMDataConfig { return typedConfigs } +type APMTracingConfig struct { + Config []byte + Metadata Metadata +} + +func parseConfigAPMTracing(data []byte, metadata Metadata) (APMTracingConfig, error) { + // Delegate the parsing responsibility to the cluster agent + return APMTracingConfig{ + Config: data, + Metadata: metadata, + }, nil +} + +// APMTracingConfigs returns the currently active APMTracing configs +func (r *Repository) APMTracingConfigs() map[string]APMTracingConfig { + typedConfigs := make(map[string]APMTracingConfig) + configs := r.getConfigs(ProductAPMTracing) + for path, conf := range configs { + // We control this, so if this has gone wrong something has gone horribly wrong + typed, ok := conf.(APMTracingConfig) + if !ok { + panic("unexpected config stored as APMTracingConfig") + } + typedConfigs[path] = typed + } + return typedConfigs +} + // Metadata stores remote config metadata for a given configuration type Metadata struct { Product string diff --git a/pkg/sbom/forwarder.go b/pkg/sbom/forwarder.go new file mode 100644 index 00000000000000..fd42e489468565 --- /dev/null +++ b/pkg/sbom/forwarder.go @@ -0,0 +1,59 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package sbom + +import ( + "fmt" + "net/url" + + "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/config/resolver" + "github.com/DataDog/datadog-agent/pkg/forwarder" + "github.com/DataDog/datadog-agent/pkg/util/flavor" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +func buildKeysPerDomains(conf config.Config) (map[string][]string, error) { + mainURL := config.GetMainEndpointWithConfig(conf, "https://sbom-intake.", "sbom.dd_url") + if _, err := url.Parse(mainURL); err != nil { + return nil, fmt.Errorf("could not parse sbom main endpoint: %w", err) + } + + keysPerDomain := map[string][]string{ + mainURL: { + conf.GetString("api_key"), + }, + } + + if !conf.IsSet("sbom.additional_endpoints") { + return keysPerDomain, nil + } + + additionalEndpoints := conf.GetStringMapStringSlice("sbom.additional_endpoints") + + return config.MergeAdditionalEndpoints(keysPerDomain, additionalEndpoints) +} + +// NewForwarder returns a forwarder for SBOM events +func NewForwarder() *forwarder.DefaultForwarder { + if !config.Datadog.GetBool("sbom.enabled") { + return nil + } + + if flavor.GetFlavor() != flavor.DefaultAgent { + return nil + } + + keysPerDomain, err := buildKeysPerDomains(config.Datadog) + if err != nil { + log.Errorf("Cannot build keys per domains: %v", err) + return nil + } + + options := forwarder.NewOptionsWithResolvers(resolver.NewSingleDomainResolvers(keysPerDomain)) + + return forwarder.NewDefaultForwarder(options) +} diff --git a/pkg/secrets/check_rights_nix.go b/pkg/secrets/check_rights_nix.go index f1fd18d12dfa98..9ce04d09f8d909 100644 --- a/pkg/secrets/check_rights_nix.go +++ b/pkg/secrets/check_rights_nix.go @@ -10,13 +10,10 @@ package secrets import ( "fmt" - "os" "os/user" - "strconv" "syscall" ) -// checkRights validates that a secret backend has supported permissions func checkRights(path string, allowGroupExec bool) error { var stat syscall.Stat_t if err := syscall.Stat(path, &stat); err != nil { @@ -93,52 +90,3 @@ func checkGroupPermission(stat *syscall.Stat_t, usr *user.User, userGroups []str return nil } - -// checkConfigFilePermissions validates that a config file has supported permissions when using secret_backend_command_sha256 hash -var checkConfigFilePermissions = func(path string) error { - var stat syscall.Stat_t - if err := syscall.Stat(path, &stat); err != nil { - return fmt.Errorf("unable to check permissions for '%s': can't stat it: %s", path, err) - } - - if stat.Mode&syscall.S_IWOTH != 0 { - return fmt.Errorf("invalid config file permissions for '%s': cannot have o+w permission", path) - } - - usr, err := user.Current() - if err != nil { - return fmt.Errorf("can't query current user: %s", err) - } - - groups, err := usr.GroupIds() - if err != nil { - return fmt.Errorf("can't query user groups: %s", err) - } - - if strconv.FormatInt(int64(stat.Uid), 10) != usr.Uid { - return fmt.Errorf("invalid config file permissions for '%s': not owned by %s", path, usr.Uid) - } - - for _, g := range groups { - if strconv.FormatInt(int64(stat.Gid), 10) == g { - return nil - } - } - - return fmt.Errorf("invalid config file permissions for '%s': not owned by any groups for user %s", path, usr.Uid) -} - -// lockOpenFile opens the file and prevents overwrite and delete by another process -func lockOpenFile(path string) (*os.File, error) { - fd, err := syscall.Open(path, syscall.O_CREAT|syscall.O_RDONLY, 0600) - if err != nil { - return nil, err - } - - if err = syscall.Flock(fd, syscall.LOCK_EX); err != nil { - syscall.Close(fd) - return nil, err - } - - return os.NewFile(uintptr(fd), path), nil -} diff --git a/pkg/secrets/check_rights_nix_test.go b/pkg/secrets/check_rights_nix_test.go index 22669a2cf6f391..5f8d3668c0d439 100644 --- a/pkg/secrets/check_rights_nix_test.go +++ b/pkg/secrets/check_rights_nix_test.go @@ -144,22 +144,3 @@ func Test_checkGroupPermission(t *testing.T) { }) } } - -func TestCheckConfigFilePermissionsOtherRights(t *testing.T) { - tmpfile, err := os.CreateTemp("", "agent-config-file") - require.Nil(t, err) - defer os.Remove(tmpfile.Name()) - - // file exists - require.Error(t, checkConfigFilePermissions("/does not exists")) - - require.NoError(t, os.Chmod(tmpfile.Name(), 0660)) - require.NoError(t, checkConfigFilePermissions(tmpfile.Name())) - - // other should have no write right - require.NoError(t, os.Chmod(tmpfile.Name(), 0664)) - require.NoError(t, checkConfigFilePermissions(tmpfile.Name())) - - require.NoError(t, os.Chmod(tmpfile.Name(), 0666)) - require.Error(t, checkConfigFilePermissions(tmpfile.Name())) -} diff --git a/pkg/secrets/check_rights_windows.go b/pkg/secrets/check_rights_windows.go index a6746271e0ada0..559386ca1530bb 100644 --- a/pkg/secrets/check_rights_windows.go +++ b/pkg/secrets/check_rights_windows.go @@ -11,7 +11,6 @@ package secrets import ( "fmt" "os" - "syscall" "unsafe" "golang.org/x/sys/windows" @@ -189,99 +188,10 @@ var getDDAgentUserSID = func() (*windows.SID, error) { return nil, fmt.Errorf("could not read installedDomain in registry: %s", err) } - sid, _, _, err := windows.LookupSID(domain, user) - return sid, err -} - -// checkConfigFilePermissions validates that a config file has supported permissions when using secret_backend_command_sha256 hash -var checkConfigFilePermissions = func(filename string) error { - if _, err := os.Stat(filename); err != nil { - if os.IsNotExist(err) { - return fmt.Errorf("config file '%s' does not exist", filename) - } - return fmt.Errorf("unable to check permissions for config file '%s': %s", filename, err) - } - - fileDacl, err := getACL(filename) - if err != nil { - return fmt.Errorf("could not query ACLs for config file '%s': %s", filename, err) - } - - var aclSizeInfo winutil.AclSizeInformation - err = winutil.GetAclInformation(fileDacl, &aclSizeInfo, winutil.AclSizeInformationEnum) - if err != nil { - return fmt.Errorf("could not query ACLs for config file '%s': %s", filename, err) - } - - // create the sids that are acceptable to us (local system account and - // administrators group) - localSystem, err := getLocalSystemSID() - if err != nil { - return fmt.Errorf("could not query Local System SID: %s", err) - } - defer windows.FreeSid(localSystem) - - administrators, err := getAdministratorsSID() - if err != nil { - return fmt.Errorf("could not query Administrator SID: %s", err) - } - defer windows.FreeSid(administrators) - - secretUser, err := getSecretUserSID() - if err != nil { - return err - } - - for i := uint32(0); i < aclSizeInfo.AceCount; i++ { - var pAce *winutil.AccessAllowedAce - if err := winutil.GetAce(fileDacl, i, &pAce); err != nil { - return fmt.Errorf("could not query a ACE on '%s': %s", filename, err) - } - - if pAce.AceType == winutil.ACCESS_DENIED_ACE_TYPE { - return fmt.Errorf("invalid permissions for config file '%s': explicit DENY not supported", filename) - } - - if pAce.AceType == winutil.ACCESS_ALLOWED_ACE_TYPE { - compareSid := (*windows.SID)(unsafe.Pointer(&pAce.SidStart)) - compareIsLocalSystem := windows.EqualSid(compareSid, localSystem) - compareIsAdministrators := windows.EqualSid(compareSid, administrators) - compareIsSecretUser := windows.EqualSid(compareSid, secretUser) - allowedAccountForWrite := compareIsLocalSystem || compareIsAdministrators || compareIsSecretUser - hasOnlyAllowForRead := pAce.AccessMask&^(windows.FILE_GENERIC_READ) == 0 - if !allowedAccountForWrite && !hasOnlyAllowForRead { - return fmt.Errorf("invalid permissions for config file '%s': users/groups other than LOCAL_SYSTEM, Administrators or %s have rights on it", filename, secretUser) - } - } + if domain != "" { + user = domain + `\` + user } - return nil -} - -// lockOpenFile opens the file and prevents overwrite and delete by another process -func lockOpenFile(name string) (*os.File, error) { - h, err := winOpenFileShareRead(name) - if err != nil { - return nil, err - } - return os.NewFile(uintptr(h), name), nil -} - -// winOpenFileShareRead opens the file in FILE_SHARE_READ sharing mode -func winOpenFileShareRead(path string) (syscall.Handle, error) { - const fileFlagNormal = 0x00000080 - filename, err := syscall.UTF16PtrFromString(path) - if err != nil { - return syscall.Handle(0), err - } - handle, err := syscall.CreateFile( - filename, - syscall.GENERIC_READ, - syscall.FILE_SHARE_READ, - nil, - syscall.OPEN_EXISTING, - fileFlagNormal, - 0) - - return handle, err + sid, _, _, err := windows.LookupSID("", user) + return sid, err } diff --git a/pkg/secrets/check_rights_windows_test.go b/pkg/secrets/check_rights_windows_test.go index 7829a8bb984c5c..b1e895d896846f 100644 --- a/pkg/secrets/check_rights_windows_test.go +++ b/pkg/secrets/check_rights_windows_test.go @@ -9,6 +9,7 @@ package secrets import ( + "io/ioutil" "os" "os/exec" "testing" @@ -37,10 +38,18 @@ func TestWrongPath(t *testing.T) { require.NotNil(t, checkRights("does not exists", false)) } -func TestCheckRights(t *testing.T) { - _, err := os.CreateTemp("", "agent-collector-test") +func TestSpaceInPath(t *testing.T) { + tmpDir, err := ioutil.TempDir("", "super temp") + require.Nil(t, err) + defer os.Remove(tmpDir) + tmpFile, err := os.CreateTemp(tmpDir, "agent-collector-test") require.Nil(t, err) + defer os.Remove(tmpFile.Name()) + require.Nil(t, os.Chmod(tmpFile.Name(), 0700)) + require.Nil(t, checkRights(tmpFile.Name(), false)) +} +func TestCheckRights(t *testing.T) { // default options allowGroupExec := false diff --git a/pkg/secrets/fetch_secret.go b/pkg/secrets/fetch_secret.go index 60207c8585d58a..c3da015324c4ec 100644 --- a/pkg/secrets/fetch_secret.go +++ b/pkg/secrets/fetch_secret.go @@ -11,33 +11,21 @@ package secrets import ( "bytes" "context" - "crypto/sha256" "encoding/json" "errors" "fmt" - "hash" - "io" - "os" "os/exec" - "path/filepath" "strconv" "strings" "time" - "github.com/dustin/go-humanize" - "github.com/DataDog/datadog-agent/pkg/telemetry" "github.com/DataDog/datadog-agent/pkg/util/common" "github.com/DataDog/datadog-agent/pkg/util/log" ) -const ( - // PayloadVersion defines the current payload version sent to a secret backend - PayloadVersion = "1.0" - - // maxHashFileLimit is the limit for the size of hashing of the binary - maxHashFileLimit = 1024 * 1024 * 1024 // 1Gi -) +// PayloadVersion defines the current payload version sent to a secret backend +const PayloadVersion = "1.0" var ( tlmSecretBackendElapsed = telemetry.NewGauge("secret_backend", "elapsed_ms", []string{"command", "exit_code"}, "Elapsed time of secret backend invocation") @@ -66,33 +54,7 @@ func execCommand(inputPayload string) ([]byte, error) { } defer done() - if secretBackendCommandSHA256 != "" { - if !filepath.IsAbs(secretBackendCommand) { - return nil, fmt.Errorf("error while running '%s': absolute path required with SHA256", secretBackendCommand) - } - - if err := checkConfigFilePermissions(configFileUsed); err != nil { - return nil, err - } - - f, err := lockOpenFile(secretBackendCommand) - if err != nil { - return nil, err - } - defer f.Close() //nolint:errcheck - - sha256, err := fileHashSHA256(f) - if err != nil { - return nil, err - } - - if !strings.EqualFold(sha256, secretBackendCommandSHA256) { - return nil, fmt.Errorf("error while running '%s': SHA256 mismatch, actual '%s' expected '%s'", secretBackendCommand, sha256, secretBackendCommandSHA256) - } - - } - - if err = checkRights(cmd.Path, secretBackendCommandAllowGroupExec); err != nil { + if err := checkRights(cmd.Path, secretBackendCommandAllowGroupExec); err != nil { return nil, err } @@ -200,52 +162,3 @@ func fetchSecret(secretsHandle []string, origin string) (map[string]string, erro } return res, nil } - -func fileHashSHA256(f *os.File) (string, error) { - stat, err := f.Stat() - if err != nil { - return "", err - } - - if !stat.Mode().IsRegular() || - (stat.Mode()&(os.ModeSymlink|os.ModeSocket|os.ModeCharDevice|os.ModeDevice|os.ModeNamedPipe) != 0) { - return "", fmt.Errorf("expecting regular file, got 0x%x", stat.Mode()) - } - - h := sha256.New() - - fileSize := stat.Size() - if fileSize == 0 { - return formatHash(h), nil - } - - if fileSize > maxHashFileLimit { - return "", fmt.Errorf("file size exceeds the limit of %s", humanize.Bytes(maxHashFileLimit)) - } - - r := io.LimitReader(f, maxHashFileLimit) - - var bufSize int64 = 102400 - if fileSize < bufSize { - bufSize = fileSize - } - - buffer := make([]byte, bufSize) - - for { - read, err := r.Read(buffer) - if err != nil { - if err != io.EOF { - return "", err - } - break - } - h.Write(buffer[:read]) - } - - return formatHash(h), nil -} - -func formatHash(h hash.Hash) string { - return fmt.Sprintf("%x", h.Sum(nil)) -} diff --git a/pkg/secrets/fetch_secret_test.go b/pkg/secrets/fetch_secret_test.go index 57a40eec705c6b..86324390643f48 100644 --- a/pkg/secrets/fetch_secret_test.go +++ b/pkg/secrets/fetch_secret_test.go @@ -13,7 +13,6 @@ import ( "fmt" "os" "os/exec" - "path/filepath" "runtime" "testing" @@ -89,8 +88,7 @@ func TestExecCommandError(t *testing.T) { defer func() { secretBackendCommand = "" secretBackendArguments = []string{} - secretBackendTimeout = defaultSecretBackendTimeout - SecretBackendOutputMaxSize = defaultSecretBackendOutputMaxSize + secretBackendTimeout = 0 }() inputPayload := "{\"version\": \"" + PayloadVersion + "\" , \"secrets\": [\"sec1\", \"sec2\"]}" @@ -148,63 +146,6 @@ func TestExecCommandError(t *testing.T) { assert.Equal(t, "error while running './test/response_too_long/response_too_long"+binExtension+"': command output was too long: exceeded 20 bytes", err.Error()) } -func TestExecCommandWithHash(t *testing.T) { - prevCheckConfigFilePermissions := checkConfigFilePermissions - checkConfigFilePermissions = func(string) error { return nil } - defer func() { - secretBackendCommand = "" - secretBackendArguments = []string{} - secretBackendTimeout = defaultSecretBackendTimeout - secretBackendCommandSHA256 = "" - SecretBackendOutputMaxSize = defaultSecretBackendOutputMaxSize - checkConfigFilePermissions = prevCheckConfigFilePermissions - }() - - inputPayload := `{"version": ""` + PayloadVersion + `" , "secrets": ["sec1", "sec2"]}` - - // test simple with hash (no error) - secretBackendCommand, _ = filepath.Abs("./test/simple/simple" + binExtension) - setCorrectRight(secretBackendCommand) - f, err := os.Open(secretBackendCommand) - require.NoError(t, err) - hash, err := fileHashSHA256(f) - _ = f.Close() - require.NoError(t, err) - secretBackendCommandSHA256 = hash - resp, err := execCommand(inputPayload) - require.NoError(t, err) - require.Equal(t, []byte(`{"handle1":{"value":"simple_password"}}`), resp) -} - -func TestExecCommandErrorNotAbsPath(t *testing.T) { - secretBackendCommand = "test/simple/simple.go" - secretBackendCommandSHA256 = "foo" - defer func() { - secretBackendCommand = "" - secretBackendCommandSHA256 = "" - }() - resp, err := execCommand("") - assert.Nil(t, resp) - assert.EqualError(t, err, `error while running 'test/simple/simple.go': absolute path required with SHA256`) -} - -func TestExecCommandErrorHashMismatch(t *testing.T) { - var err error - secretBackendCommand, err = filepath.Abs("./test/simple/simple.go") - require.NoError(t, err) - secretBackendCommandSHA256 = "foo" - prevCheckConfigFilePermissions := checkConfigFilePermissions - checkConfigFilePermissions = func(string) error { return nil } - defer func() { - secretBackendCommand = "" - secretBackendCommandSHA256 = "" - checkConfigFilePermissions = prevCheckConfigFilePermissions - }() - resp, err := execCommand("") - assert.Nil(t, resp) - assert.EqualError(t, err, `error while running '`+secretBackendCommand+`': SHA256 mismatch, actual '0e47e4f4749aa31a8d0c92607b75c251efdf9602fec15f060a18ad4aabbf0d1f' expected 'foo'`) -} - func TestFetchSecretExecError(t *testing.T) { defer func() { secretCache = map[string]string{} @@ -305,12 +246,3 @@ func TestFetchSecret(t *testing.T) { }, secretCache) assert.Equal(t, map[string]common.StringSet{"handle1": common.NewStringSet("test"), "handle2": common.NewStringSet("test")}, secretOrigin) } - -func TestCheckHash(t *testing.T) { - f, err := os.Open("test/simple/simple.go") - assert.NoError(t, err) - defer f.Close() //nolint:errcheck - hash, err := fileHashSHA256(f) - assert.NoError(t, err) - assert.Equal(t, "0e47e4f4749aa31a8d0c92607b75c251efdf9602fec15f060a18ad4aabbf0d1f", hash) -} diff --git a/pkg/secrets/info.go b/pkg/secrets/info.go index f42c2a456fe34d..4019d6adc9c8b5 100644 --- a/pkg/secrets/info.go +++ b/pkg/secrets/info.go @@ -14,13 +14,12 @@ import ( // SecretInfo export troubleshooting information about the decrypted secrets type SecretInfo struct { - ExecutablePath string - ExecutablePathSHA256 string - Rights string - RightDetails string - UnixOwner string - UnixGroup string - SecretsHandles map[string][]string + ExecutablePath string + Rights string + RightDetails string + UnixOwner string + UnixGroup string + SecretsHandles map[string][]string } // Print output a SecretInfo to a io.Writer @@ -28,12 +27,6 @@ func (si *SecretInfo) Print(w io.Writer) { fmt.Fprintf(w, "=== Checking executable rights ===\n") fmt.Fprintf(w, "Executable path: %s\n", si.ExecutablePath) - sha256 := si.ExecutablePathSHA256 - if si.ExecutablePathSHA256 == "" { - sha256 = "Not configured" - } - fmt.Fprintf(w, "Executable path SHA256: %s\n", sha256) - fmt.Fprintf(w, "Check Rights: %s\n", si.Rights) fmt.Fprintf(w, "\nRights Detail:\n") diff --git a/pkg/secrets/info_windows.go b/pkg/secrets/info_windows.go index 05a53a7ce8edb9..6476ba96a1b7ea 100644 --- a/pkg/secrets/info_windows.go +++ b/pkg/secrets/info_windows.go @@ -12,10 +12,12 @@ import ( "bytes" "fmt" "os/exec" + "strings" ) func (info *SecretInfo) populateRights() { - err := checkRights(info.ExecutablePath, secretBackendCommandAllowGroupExec) + execPath := fmt.Sprintf("\"%s\"", strings.TrimSpace(info.ExecutablePath)) + err := checkRights(execPath, secretBackendCommandAllowGroupExec) if err != nil { info.Rights = fmt.Sprintf("Error: %s", err) } else { @@ -28,7 +30,7 @@ func (info *SecretInfo) populateRights() { return } - cmd := exec.Command(ps, "get-acl", "-Path", info.ExecutablePath, "|", "format-list") + cmd := exec.Command(ps, "get-acl", "-Path", execPath, "|", "format-list") stdout := bytes.Buffer{} stderr := bytes.Buffer{} diff --git a/pkg/secrets/no_secrets.go b/pkg/secrets/no_secrets.go index e20c4be7404bea..3e9cf6972c0a9c 100644 --- a/pkg/secrets/no_secrets.go +++ b/pkg/secrets/no_secrets.go @@ -18,8 +18,7 @@ import ( var SecretBackendOutputMaxSize = 1024 * 1024 // Init placeholder when compiled without the 'secrets' build tag -func Init(command string, arguments []string, timeout int, maxSize int, groupExecPerm bool, sha256 string, configFile string) { -} +func Init(command string, arguments []string, timeout int, maxSize int, groupExecPerm bool) {} // Decrypt encrypted secrets are not available on windows func Decrypt(data []byte, origin string) ([]byte, error) { @@ -28,5 +27,5 @@ func Decrypt(data []byte, origin string) ([]byte, error) { // GetDebugInfo exposes debug informations about secrets to be included in a flare func GetDebugInfo() (*SecretInfo, error) { - return nil, fmt.Errorf("secret feature is not available in this version of the agent") + return nil, fmt.Errorf("Secret feature is not available in this version of the agent") } diff --git a/pkg/secrets/secrets.go b/pkg/secrets/secrets.go index b0aad691c2d715..763fe4c848883e 100644 --- a/pkg/secrets/secrets.go +++ b/pkg/secrets/secrets.go @@ -18,11 +18,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/log" ) -const ( - defaultSecretBackendTimeout = 5 - defaultSecretBackendOutputMaxSize = 1024 * 1024 -) - var ( secretCache map[string]string // list of handles and where they were found @@ -30,13 +25,11 @@ var ( secretBackendCommand string secretBackendArguments []string - secretBackendTimeout = defaultSecretBackendTimeout + secretBackendTimeout = 5 secretBackendCommandAllowGroupExec bool - secretBackendCommandSHA256 string - configFileUsed string // SecretBackendOutputMaxSize defines max size of the JSON output from a secrets reader backend - SecretBackendOutputMaxSize = defaultSecretBackendOutputMaxSize + SecretBackendOutputMaxSize = 1024 * 1024 ) func init() { @@ -47,14 +40,12 @@ func init() { // Init initializes the command and other options of the secrets package. Since // this package is used by the 'config' package to decrypt itself we can't // directly use it. -func Init(command string, arguments []string, timeout int, maxSize int, groupExecPerm bool, sha256 string, configFile string) { +func Init(command string, arguments []string, timeout int, maxSize int, groupExecPerm bool) { secretBackendCommand = command secretBackendArguments = arguments secretBackendTimeout = timeout SecretBackendOutputMaxSize = maxSize secretBackendCommandAllowGroupExec = groupExecPerm - secretBackendCommandSHA256 = sha256 - configFileUsed = configFile if secretBackendCommandAllowGroupExec { log.Warnf("Agent configuration relax permissions constraint on the secret backend cmd, Group can read and exec") } @@ -212,10 +203,7 @@ func GetDebugInfo() (*SecretInfo, error) { if secretBackendCommand == "" { return nil, fmt.Errorf("No secret_backend_command set: secrets feature is not enabled") } - info := &SecretInfo{ - ExecutablePath: secretBackendCommand, - ExecutablePathSHA256: secretBackendCommandSHA256, - } + info := &SecretInfo{ExecutablePath: secretBackendCommand} info.populateRights() info.SecretsHandles = map[string][]string{} diff --git a/pkg/security/api/mocks/security_module__get_process_events_client.go b/pkg/security/api/mocks/security_module__get_process_events_client.go index a465f757aac0a6..55980bf049ac17 100644 --- a/pkg/security/api/mocks/security_module__get_process_events_client.go +++ b/pkg/security/api/mocks/security_module__get_process_events_client.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/security/api/mocks/security_module_client.go b/pkg/security/api/mocks/security_module_client.go index 76085bbc3ab6d7..3d5c0bbf93cef7 100644 --- a/pkg/security/api/mocks/security_module_client.go +++ b/pkg/security/api/mocks/security_module_client.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/security/api/mocks/security_module_server.go b/pkg/security/api/mocks/security_module_server.go index 8bd63b22baa981..7a8a4c5f9f4f60 100644 --- a/pkg/security/api/mocks/security_module_server.go +++ b/pkg/security/api/mocks/security_module_server.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/security/config/config.go b/pkg/security/config/config.go index 0982af8490a46d..2dc50dc6bfbf46 100644 --- a/pkg/security/config/config.go +++ b/pkg/security/config/config.go @@ -300,7 +300,7 @@ func (c *Config) globalSanitize() error { c.RuntimeCompiledConstantsEnabled = false } - serviceName := utils.GetTagValue("service", coreconfig.GetConfiguredTags(true)) + serviceName := utils.GetTagValue("service", coreconfig.GetGlobalConfiguredTags(true)) if len(serviceName) > 0 { c.HostServiceName = fmt.Sprintf("service:%s", serviceName) } diff --git a/pkg/security/ebpf/c/activity_dump.h b/pkg/security/ebpf/c/activity_dump.h index e626088950d598..28985047d5cc76 100644 --- a/pkg/security/ebpf/c/activity_dump.h +++ b/pkg/security/ebpf/c/activity_dump.h @@ -364,7 +364,9 @@ enum rate_limiter_algo_ids { __attribute__((always_inline)) u8 activity_dump_rate_limiter_reset_period(u64 now, struct activity_dump_rate_limiter_ctx* rate_ctx_p) { rate_ctx_p->current_period = now; rate_ctx_p->counter = 0; +#ifndef __BALOUM__ // do not change algo during unit tests rate_ctx_p->algo_id = now % RL_ALGO_TOTAL_NUMBER; +#endif /* __BALOUM__ */ return 1; } diff --git a/pkg/security/ebpf/c/activity_dump_ratelimiter_test.h b/pkg/security/ebpf/c/activity_dump_ratelimiter_test.h new file mode 100644 index 00000000000000..b0984ff58c9bac --- /dev/null +++ b/pkg/security/ebpf/c/activity_dump_ratelimiter_test.h @@ -0,0 +1,128 @@ +#ifndef _ACTIVITY_DUMP_RATELIMITER_TEST_H_ +#define _ACTIVITY_DUMP_RATELIMITER_TEST_H_ + +#include "defs.h" +#include "activity_dump.h" +#include "baloum.h" +#include "utils.h" + +#define AD_RL_TEST_RATE 500 +#define NUMBER_OF_PERIOD_PER_TEST 10 + +SEC("test/ad_ratelimiter_basic") +int test_ad_ratelimiter_basic() +{ + u64 now = bpf_ktime_get_ns(); + + struct activity_dump_config config; + config.events_rate = AD_RL_TEST_RATE; + + struct activity_dump_rate_limiter_ctx ctx; + ctx.counter = 0; + ctx.current_period = now; + ctx.algo_id = RL_ALGO_BASIC; // force algo basic + u32 cookie = 0; + bpf_map_update_elem(&activity_dump_rate_limiters, &cookie, &ctx, BPF_ANY); + + for (int period_cpt = 0; period_cpt < NUMBER_OF_PERIOD_PER_TEST; period_cpt++, now += SEC_TO_NS(2)) { + assert_not_zero(activity_dump_rate_limiter_allow(&config, cookie, now, 0), + "event not allowed which should be"); + for (int i = 0; i < AD_RL_TEST_RATE; i++) { + assert_not_zero(activity_dump_rate_limiter_allow(&config, cookie, now + i, 1), + "event not allowed which should be"); + } + + assert_zero(activity_dump_rate_limiter_allow(&config, cookie, now, 0), + "event allowed which should not be"); + for (int i = 0; i < AD_RL_TEST_RATE; i++) { + assert_zero(activity_dump_rate_limiter_allow(&config, cookie, now + i, 1), + "event allowed which should not be"); + } + assert_zero(activity_dump_rate_limiter_allow(&config, cookie, now, 0), + "event allowed which should not be"); + } + return 0; +} + +SEC("test/ad_ratelimiter_basic_half") +int test_ad_ratelimiter_basic_half() +{ + u64 now = bpf_ktime_get_ns(); + + struct activity_dump_config config; + config.events_rate = AD_RL_TEST_RATE; + + struct activity_dump_rate_limiter_ctx ctx; + ctx.counter = 0; + ctx.current_period = now; + ctx.algo_id = RL_ALGO_BASIC_HALF; // force algo basic half + u32 cookie = 0; + bpf_map_update_elem(&activity_dump_rate_limiters, &cookie, &ctx, BPF_ANY); + + for (int period_cpt = 0; period_cpt < NUMBER_OF_PERIOD_PER_TEST; period_cpt++, now += SEC_TO_NS(1)) { + assert_not_zero(activity_dump_rate_limiter_allow(&config, cookie, now, 0), + "event not allowed which should be"); + for (int i = 0; i < AD_RL_TEST_RATE / 2; i++) { + assert_not_zero(activity_dump_rate_limiter_allow(&config, cookie, now + i, 1), + "event not allowed which should be"); + } + + assert_zero(activity_dump_rate_limiter_allow(&config, cookie, now, 0), + "event allowed which should not be"); + for (int i = 0; i < AD_RL_TEST_RATE / 2; i++) { + assert_zero(activity_dump_rate_limiter_allow(&config, cookie, now + i, 1), + "event allowed which should not be"); + } + assert_zero(activity_dump_rate_limiter_allow(&config, cookie, now, 0), + "event allowed which should not be"); + } + return 0; +} + +__attribute__((always_inline)) int test_ad_ratelimiter_variable_droprate(int algo) +{ + u64 now = bpf_ktime_get_ns(); + + struct activity_dump_config config; + config.events_rate = AD_RL_TEST_RATE; + + struct activity_dump_rate_limiter_ctx ctx; + ctx.counter = 0; + ctx.current_period = now; + ctx.algo_id = algo; // force algo + u32 cookie = 0; + bpf_map_update_elem(&activity_dump_rate_limiters, &cookie, &ctx, BPF_ANY); + + for (int period_cpt = 0; period_cpt < NUMBER_OF_PERIOD_PER_TEST; period_cpt++, now += SEC_TO_NS(2)) { + assert_not_zero(activity_dump_rate_limiter_allow(&config, cookie, now, 0), + "event not allowed which should be"); + for (int i = 0; i < AD_RL_TEST_RATE / 4; i++) { + assert_not_zero(activity_dump_rate_limiter_allow(&config, cookie, now + i, 1), + "event not allowed which should be"); + } + + int total_allowed = 0; + for (int i = 0; i < AD_RL_TEST_RATE * 10; i++) { + if (activity_dump_rate_limiter_allow(&config, cookie, now + i, 1)) { + total_allowed++; + } + } + assert_greater_than(total_allowed, AD_RL_TEST_RATE * 3 / 4, "nope"); + assert_lesser_than(total_allowed, AD_RL_TEST_RATE / 10, "nope"); + } + return 0; +} + +SEC("test/ad_ratelimiter_decreasing_droprate") +int test_ad_ratelimiter_decreasing_droprate() +{ + return test_ad_ratelimiter_variable_droprate(RL_ALGO_DECREASING_DROPRATE); +} + +SEC("test/ad_ratelimiter_increasing_droprate") +int test_ad_ratelimiter_increasing_droprate() +{ + return test_ad_ratelimiter_variable_droprate(RL_ALGO_INCREASING_DROPRATE); +} + +#endif /* _ACTIVITY_DUMP_RATELIMITER_TEST_H_ */ diff --git a/pkg/security/ebpf/c/baloum.h b/pkg/security/ebpf/c/baloum.h new file mode 100644 index 00000000000000..c4e387808adc9b --- /dev/null +++ b/pkg/security/ebpf/c/baloum.h @@ -0,0 +1,106 @@ +#ifdef __BALOUM__ + +#ifndef _BALOUM_H__ +#define _BALOUM_H__ + +struct baloum_ctx +{ + __u64 arg0; + __u64 arg1; + __u64 arg2; + __u64 arg3; + __u64 arg4; +}; +static void *(*baloum_malloc)(__u32 size) = (void *)0xffff; +static int (*baloum_call)(struct baloum_ctx *ctx, const char *section) = (void *)0xfffe; +static int (*baloum_strcmp)(const char *s1, const char *s2) = (void *)0xfffd; +static int (*baloum_memcmp)(const void *b1, const void *b2, __u32 size) = (void *)0xfffc; +static int (*baloum_sleep)(__u64 ns) = (void *)0xfffb; + +#define assert_memcmp(b1, b2, s, msg) \ + if (baloum_memcmp(b1, b2, s) != 0) \ + { \ + bpf_printk("assert line %d : b1 != b2 : %s", __LINE__, msg); \ + return -1; \ + } + +#define assert_strcmp(s1, s2, msg) \ + if (baloum_strcmp(s1, s2) != 0) \ + { \ + bpf_printk("assert line %d : s1 != s2 : %s", __LINE__, msg); \ + return -1; \ + } + +#define assert_equals(v1, v2, msg) \ + if (v1 != v2) \ + { \ + bpf_printk("assert line %d : v1 != v2 : %s", __LINE__, msg); \ + return -1; \ + } + +#define assert_zero(v1, msg) \ + if (v1 != 0) \ + { \ + bpf_printk("assert line %d : v1 == 0 : %s", __LINE__, msg); \ + return -1; \ + } + +#define assert_not_zero(v1, msg) \ + if (v1 == 0) \ + { \ + bpf_printk("assert line %d : v1 != 0 : %s", __LINE__, msg); \ + return -1; \ + } + +#define assert_not_equals(v1, v2, msg) \ + if (v1 == v2) \ + { \ + bpf_printk("assert line %d : v1 == v2 : %s", __LINE__, msg); \ + return -1; \ + } + +#define assert_greater_than(v1, v2, msg) \ + if (v1 > v2) \ + { \ + bpf_printk("assert line %d : v1 == v2 : %s", __LINE__, msg); \ + return -1; \ + } + +#define assert_lesser_than(v1, v2, msg) \ + if (v1 < v2) \ + { \ + bpf_printk("assert line %d : v1 == v2 : %s", __LINE__, msg); \ + return -1; \ + } + +#define assert_greater_or_equal_than(v1, v2, msg) \ + if (v1 >= v2) \ + { \ + bpf_printk("assert line %d : v1 == v2 : %s", __LINE__, msg); \ + return -1; \ + } + +#define assert_lesser_or_equal_than(v1, v2, msg) \ + if (v1 <= v2) \ + { \ + bpf_printk("assert line %d : v1 == v2 : %s", __LINE__, msg); \ + return -1; \ + } + +#define assert_not_null(v1, msg) \ + if (v1 == NULL) \ + { \ + bpf_printk("assert line %d : v1 == NULL : %s", __LINE__, msg); \ + return -1; \ + } + +#define assert_null(v1, msg) \ + if (v1 != NULL) \ + { \ + bpf_printk("assert line %d : v1 != NULL : %s", __LINE__, msg); \ + return -1; \ + } + +#endif + +#endif diff --git a/pkg/security/ebpf/c/defs.h b/pkg/security/ebpf/c/defs.h index 7c97ec9608a04a..9e48615d18fd80 100644 --- a/pkg/security/ebpf/c/defs.h +++ b/pkg/security/ebpf/c/defs.h @@ -251,6 +251,7 @@ struct process_context_t { u32 tid; u32 netns; u32 is_kworker; + u64 inode; }; struct container_context_t { diff --git a/pkg/security/ebpf/c/dentry_resolver.h b/pkg/security/ebpf/c/dentry_resolver.h index f58dec606cfbb6..4c8d41346ddd4d 100644 --- a/pkg/security/ebpf/c/dentry_resolver.h +++ b/pkg/security/ebpf/c/dentry_resolver.h @@ -125,6 +125,7 @@ int __attribute__((always_inline)) resolve_dentry_tail_call(void *ctx, struct de } *params = (struct is_discarded_by_inode_t){ .discarder_type = input->discarder_type, + // TODO(safchain) do we need the pid ????? .tgid = bpf_get_current_pid_tgid() >> 32, .now = bpf_ktime_get_ns(), .ad_state = input->ad_state, diff --git a/pkg/security/ebpf/c/discarders.h b/pkg/security/ebpf/c/discarders.h index 0800cfe7e568ce..4018f452913b0c 100644 --- a/pkg/security/ebpf/c/discarders.h +++ b/pkg/security/ebpf/c/discarders.h @@ -1,14 +1,13 @@ #ifndef _DISCARDERS_H #define _DISCARDERS_H +#include "utils.h" + #define REVISION_ARRAY_SIZE 4096 #define INODE_DISCARDER_TYPE 0 #define PID_DISCARDER_TYPE 1 -#define NS_TO_SEC(x) x / 1000000000 -#define SEC_TO_NS(x) x * 1000000000 - struct discarder_stats_t { u64 discarders_added; u64 event_discarded; @@ -43,9 +42,9 @@ struct bpf_map_def SEC("maps/discarders_revision") discarders_revision = { }; u64 __attribute__((always_inline)) get_discarder_retention() { - u64 retention; + u64 retention = 0; LOAD_CONSTANT("discarder_retention", retention); - return retention; + return retention ? retention : SEC_TO_NS(5); } int __attribute__((always_inline)) monitor_discarder_added(u64 event_type) { @@ -162,7 +161,7 @@ u64* __attribute__((always_inline)) get_discarder_timestamp(struct discarder_par // This function is doing the same thing as the one before, but can only work if `params` is a pointer to a map value // and not a pointer to the stack since kernels < 4.15 does not allow this. On the other hand it is faster and needs less // instructions. -u64* __attribute__((always_inline)) get_discarder_timestamp_from_map(struct discarder_params_t *params, u64 event_type) { +u64 * __attribute__((always_inline)) get_discarder_timestamp_from_map(struct discarder_params_t *params, u64 event_type) { if (EVENT_FIRST_DISCARDER <= event_type && event_type < EVENT_LAST_DISCARDER) { return ¶ms->timestamps[event_type-EVENT_FIRST_DISCARDER]; } @@ -213,6 +212,18 @@ struct bpf_map_def SEC("maps/inode_discarders") inode_discarders = { int __attribute__((always_inline)) expire_inode_discarders(u32 mount_id, u64 inode); +struct inode_discarder_params_t * __attribute__((always_inline)) get_inode_discarder_params(u32 mount_id, u64 inode, u32 is_leaf) { + struct inode_discarder_t key = { + .path_key = { + .ino = inode, + .mount_id = mount_id, + }, + .is_leaf = is_leaf, + }; + + return bpf_map_lookup_elem(&inode_discarders, &key); +} + int __attribute__((always_inline)) discard_inode(u64 event_type, u32 mount_id, u64 inode, u64 timeout, u32 is_leaf) { if (!mount_id || !inode) { return 0; diff --git a/pkg/security/ebpf/c/discarders_test.h b/pkg/security/ebpf/c/discarders_test.h new file mode 100644 index 00000000000000..0afd31605f5b3f --- /dev/null +++ b/pkg/security/ebpf/c/discarders_test.h @@ -0,0 +1,194 @@ +#ifndef _DISCARDERS_TEST_H +#define _DISCARDERS_TEST_H + +#include "defs.h" +#include "discarders.h" +#include "baloum.h" + +int __attribute__((always_inline)) _is_discarded_by_inode(u64 event_type, u32 mount_id, u64 inode) { + struct is_discarded_by_inode_t params = { + .discarder_type = event_type, + .discarder = { + .path_key.ino = inode, + .path_key.mount_id = mount_id, + } + }; + + return is_discarded_by_inode(¶ms); +} + +SEC("test/discarders_event_mask") +int test_discarders_event_mask() +{ + u32 mount_id = 123; + u64 inode = 456; + + int ret = discard_inode(EVENT_OPEN, mount_id, inode, 0, 0); + assert_zero(ret, "failed to discard the inode"); + + struct inode_discarder_params_t *inode_params = get_inode_discarder_params(mount_id, inode, 0); + assert_not_null(inode_params, "unable to find the inode discarder entry"); + + ret = mask_has_event(inode_params->params.event_mask, EVENT_OPEN); + assert_not_zero(ret, "event not found in mask"); + + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id, inode); + assert_not_zero(ret, "inode should be discarded"); + + // add another event type + ret = discard_inode(EVENT_CHMOD, mount_id, inode, 0, 0); + assert_zero(ret, "failed to discard the inode"); + + // check that we have now both open and chmod event discarded + inode_params = get_inode_discarder_params(mount_id, inode, 0); + assert_not_null(inode_params, "unable to find the inode discarder entry"); + + ret = mask_has_event(inode_params->params.event_mask, EVENT_OPEN); + assert_not_zero(ret, "event not found in mask"); + + ret = mask_has_event(inode_params->params.event_mask, EVENT_CHMOD); + assert_not_zero(ret, "event not found in mask"); + + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id, inode); + assert_not_zero(ret, "inode should be discarded"); + + ret = _is_discarded_by_inode(EVENT_CHMOD, mount_id, inode); + assert_not_zero(ret, "inode should be discarded"); + + return 0; +} + +SEC("test/discarders_retention") +int test_discarders_retention() +{ + u32 mount_id = 123; + u64 inode = 456; + + int ret = discard_inode(EVENT_OPEN, mount_id, inode, 0, 0); + assert_zero(ret, "failed to discard the inode"); + + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id, inode); + assert_not_zero(ret, "inode should be discarded"); + + // expire the discarder + expire_inode_discarders(mount_id, inode); + + // shouldn't be discarded anymore + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id, inode); + assert_zero(ret, "inode shouldn't be discarded"); + + // we shouldn't be able to add a new discarder for the same inode during the retention period + // TODO(safchain) should return an error value + ret = discard_inode(EVENT_OPEN, mount_id, inode, 0, 0); + assert_zero(ret, "able to discard the inode"); + + // shouldn't still be discarded + ret = _is_discarded_by_inode(EVENT_CHMOD, mount_id, inode); + assert_zero(ret, "inode shouldn't be discarded"); + + // wait the retention period + baloum_sleep(get_discarder_retention() + 1); + + // the retention period is now over, we should be able to add a discarder + ret = discard_inode(EVENT_OPEN, mount_id, inode, 0, 0); + assert_zero(ret, "failed to discard the inode"); + + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id, inode); + assert_not_zero(ret, "inode should be discarded"); + + return 0; +} + +SEC("test/discarders_revision") +int test_discarders_revision() +{ + u32 mount_id1 = 123; + u64 inode1 = 456; + + u32 mount_id2 = 456; + u64 inode2 = 789; + + int ret = discard_inode(EVENT_OPEN, mount_id1, inode1, 0, 0); + assert_zero(ret, "failed to discard the inode"); + + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id1, inode1); + assert_not_zero(ret, "inode should be discarded"); + + ret = discard_inode(EVENT_OPEN, mount_id2, inode2, 0, 0); + assert_zero(ret, "failed to discard the inode"); + + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id2, inode2); + assert_not_zero(ret, "inode should be discarded"); + + // expire the discarders + bump_discarders_revision(); + + // now all the discarders whatever their mount id should be discarded + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id1, inode1); + assert_zero(ret, "inode shouldn't be discarded"); + + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id2, inode2); + assert_zero(ret, "inode shouldn't be discarded"); + + // check that we added a retention period + ret = discard_inode(EVENT_OPEN, mount_id1, inode1, 0, 0); + assert_zero(ret, "able to discard the inode"); + + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id1, inode1); + assert_zero(ret, "inode shouldn't be discarded"); + + // wait the retention period + baloum_sleep(get_discarder_retention() + 1); + + ret = discard_inode(EVENT_OPEN, mount_id1, inode1, 0, 0); + assert_zero(ret, "able to discard the inode"); + + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id1, inode1); + assert_not_zero(ret, "inode should be discarded"); + + return 0; +} + +SEC("test/discarders_mount_revision") +int test_discarders_mount_revision() +{ + u32 mount_id1 = 123; + u64 inode1 = 456; + + u32 mount_id2 = 456; + u64 inode2 = 789; + + int ret = discard_inode(EVENT_OPEN, mount_id1, inode1, 0, 0); + assert_zero(ret, "failed to discard the inode"); + + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id1, inode1); + assert_not_zero(ret, "inode should be discarded"); + + ret = discard_inode(EVENT_OPEN, mount_id2, inode2, 0, 0); + assert_zero(ret, "failed to discard the inode"); + + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id2, inode2); + assert_not_zero(ret, "inode should be discarded"); + + // bump the revision + bump_mount_discarder_revision(mount_id1); + + // now the inode1 shouldn't be discarded anymore + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id1, inode1); + assert_zero(ret, "inode shouldn't be discarded"); + + // while node2 should still be + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id2, inode2); + assert_not_zero(ret, "inode should be discarded"); + + // we are allowed to re-add inode1 right away + ret = discard_inode(EVENT_OPEN, mount_id1, inode1, 0, 0); + assert_zero(ret, "failed to discard the inode"); + + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id1, inode1); + assert_not_zero(ret, "inode should be discarded"); + + return 0; +} + +#endif \ No newline at end of file diff --git a/pkg/security/ebpf/c/exec.h b/pkg/security/ebpf/c/exec.h index c78e82b5463b74..3955ce35737c25 100644 --- a/pkg/security/ebpf/c/exec.h +++ b/pkg/security/ebpf/c/exec.h @@ -11,9 +11,10 @@ #define MAX_PERF_STR_BUFF_LEN 256 #define MAX_STR_BUFF_LEN (1 << 15) -#define MAX_ARRAY_ELEMENT_PER_TAIL 23 #define MAX_ARRAY_ELEMENT_SIZE 4096 -#define MAX_ARGS_ELEMENTS 140 +#define MAX_ARRAY_ELEMENT_PER_TAIL 28 +#define MAX_ARGS_ELEMENTS (MAX_ARRAY_ELEMENT_PER_TAIL * (32 / 2)) // split tailcall limit +#define MAX_ARGS_READ_PER_TAIL 208 struct args_envs_event_t { struct kevent_t event; @@ -26,11 +27,15 @@ struct str_array_buffer_t { char value[MAX_STR_BUFF_LEN]; }; +#define EXEC_GET_ENVS_OFFSET 0 +#define EXEC_PARSE_ARGS_ENVS_SPLIT 1 +#define EXEC_PARSE_ARGS_ENVS 2 + struct bpf_map_def SEC("maps/args_envs_progs") args_envs_progs = { .type = BPF_MAP_TYPE_PROG_ARRAY, .key_size = sizeof(u32), .value_size = sizeof(u32), - .max_entries = 10, + .max_entries = 3, }; struct bpf_map_def SEC("maps/str_array_buffers") str_array_buffers = { @@ -148,112 +153,15 @@ struct proc_cache_t __attribute__((always_inline)) *get_proc_from_cookie(u32 coo return bpf_map_lookup_elem(&proc_cache, &cookie); } -void __attribute__((always_inline)) parse_str_array(struct pt_regs *ctx, struct str_array_ref_t *array_ref, u64 event_type) { - const char **array = array_ref->array; - int index = array_ref->index; - if (index == 255) { - return; - } - - array_ref->truncated = 0; - - u32 key = 0; - struct str_array_buffer_t *buff = bpf_map_lookup_elem(&str_array_buffers, &key); - if (!buff) { - return; - } - - const char *str; - bpf_probe_read(&str, sizeof(str), (void *)&array[index]); - - struct args_envs_event_t event = { - .id = array_ref->id, - }; - - int i = 0; - int n = 0; - - void *perf_ptr = &buff->value[0]; - -#pragma unroll - for (i = 0; i < MAX_ARRAY_ELEMENT_PER_TAIL; i++) { - void *ptr = &(buff->value[(event.size + sizeof(n)) & (MAX_STR_BUFF_LEN - MAX_ARRAY_ELEMENT_SIZE - 1)]); - - n = bpf_probe_read_str(ptr, MAX_ARRAY_ELEMENT_SIZE, (void *)str); - if (n > 0) { - n--; // remove trailing 0 - - // insert size before the string - bpf_probe_read(&(buff->value[event.size&(MAX_STR_BUFF_LEN - MAX_ARRAY_ELEMENT_SIZE - 1)]), sizeof(n), &n); - - int len = n + sizeof(n); - if (event.size + len >= MAX_PERF_STR_BUFF_LEN) { - // copy value to the event - bpf_probe_read(&event.value, MAX_PERF_STR_BUFF_LEN, perf_ptr); - - // an only one argument overflow the limit - if (event.size == 0) { - event.size = MAX_PERF_STR_BUFF_LEN; - index++; - } - - send_event(ctx, event_type, event); - event.size = 0; - } else { - event.size += len; - index++; - } - - bpf_probe_read(&str, sizeof(str), (void *)&array[index]); - } else { - index = 255; // stop here - break; - } - } - array_ref->index = index; - array_ref->truncated = i == MAX_ARRAY_ELEMENT_PER_TAIL; - - // flush remaining values - if (event.size > 0) { - bpf_probe_read(&event.value, MAX_PERF_STR_BUFF_LEN, perf_ptr); - - send_event(ctx, event_type, event); - } -} - -SEC("kprobe/parse_args_envs") -int kprobe_parse_args_envs(struct pt_regs *ctx) { - struct syscall_cache_t *syscall = peek_syscall(EVENT_EXEC); - if (!syscall) { - return 0; - } - - struct str_array_ref_t *array = &syscall->exec.args; - if (syscall->exec.next_tail > MAX_ARGS_ELEMENTS / MAX_ARRAY_ELEMENT_PER_TAIL) { - array = &syscall->exec.envs; - } - - parse_str_array(ctx, array, EVENT_ARGS_ENVS); - - syscall->exec.next_tail++; - - bpf_tail_call_compat(ctx, &args_envs_progs, syscall->exec.next_tail); - - return 0; -} - int __attribute__((always_inline)) trace__sys_execveat(struct pt_regs *ctx, const char **argv, const char **env) { struct syscall_cache_t syscall = { .type = EVENT_EXEC, .exec = { .args = { .id = bpf_get_prandom_u32(), - .array = argv, - .index = 0, }, .envs = { .id = bpf_get_prandom_u32(), - .array = env, } } }; @@ -669,40 +577,8 @@ int kprobe_exit_itimers(struct pt_regs *ctx) { return 0; } -int __attribute__((always_inline)) parse_args_and_env(struct pt_regs *ctx) { - struct syscall_cache_t *syscall = peek_syscall(EVENT_EXEC); - if (!syscall) { - return 0; - } - - // call it here before the memory get replaced - fill_span_context(&syscall->exec.span_context); - - bpf_tail_call_compat(ctx, &args_envs_progs, syscall->exec.next_tail); - return 0; -} - -SEC("kprobe/prepare_binprm") -int kprobe_prepare_binprm(struct pt_regs *ctx) { - return parse_args_and_env(ctx); -} - -SEC("kprobe/bprm_execve") -int kprobe_bprm_execve(struct pt_regs *ctx) { - return parse_args_and_env(ctx); -} - -SEC("kprobe/security_bprm_check") -int kprobe_security_bprm_check(struct pt_regs *ctx) { - return parse_args_and_env(ctx); -} - -void __attribute__((always_inline)) fill_args_envs(struct exec_event_t *event, struct syscall_cache_t *syscall) { - event->args_id = syscall->exec.args.id; - event->args_truncated = syscall->exec.args.truncated; - event->envs_id = syscall->exec.envs.id; - event->envs_truncated = syscall->exec.envs.truncated; -} +// the following functions must use the {peek,pop}_current_or_impersonated_exec_syscall to retrieve the syscall context +// because the task performing the exec syscall may change its pid in the flush_old_exec() kernel function struct syscall_cache_t *__attribute__((always_inline)) peek_current_or_impersonated_exec_syscall() { struct syscall_cache_t *syscall = peek_syscall(EVENT_EXEC); @@ -748,6 +624,205 @@ struct syscall_cache_t *__attribute__((always_inline)) pop_current_or_impersonat return syscall; } +int __attribute__((always_inline)) fill_exec_context(struct pt_regs *ctx) { + struct syscall_cache_t *syscall = peek_current_or_impersonated_exec_syscall(); + if (!syscall) { + return 0; + } + + // call it here before the memory get replaced + fill_span_context(&syscall->exec.span_context); + + return 0; +} + +SEC("kprobe/prepare_binprm") +int kprobe_prepare_binprm(struct pt_regs *ctx) { + return fill_exec_context(ctx); +} + +SEC("kprobe/bprm_execve") +int kprobe_bprm_execve(struct pt_regs *ctx) { + return fill_exec_context(ctx); +} + +SEC("kprobe/security_bprm_check") +int kprobe_security_bprm_check(struct pt_regs *ctx) { + return fill_exec_context(ctx); +} + +SEC("kprobe/get_envs_offset") +int kprobe_get_envs_offset(struct pt_regs *ctx) { + struct syscall_cache_t *syscall = peek_current_or_impersonated_exec_syscall(); + if (!syscall) { + return 0; + } + + u32 key = 0; + struct str_array_buffer_t *buff = bpf_map_lookup_elem(&str_array_buffers, &key); + if (!buff) { + return 0; + } + + int i; + long bytes_read; + const char *args_start = syscall->exec.args_envs_ctx.args_start; + u64 offset = syscall->exec.args_envs_ctx.envs_offset; + u32 args_count = syscall->exec.args_envs_ctx.args_count; + +#pragma unroll + for (i = 0; i < MAX_ARGS_READ_PER_TAIL && args_count < syscall->exec.args.count; i++) { + bytes_read = bpf_probe_read_str(&buff->value[0], MAX_ARRAY_ELEMENT_SIZE, (void *)(args_start + offset)); + if (bytes_read <= 0 || bytes_read == MAX_ARRAY_ELEMENT_SIZE) { + syscall->exec.args_envs_ctx.envs_offset = 0; + return 0; + } + offset += bytes_read; + args_count++; + } + + syscall->exec.args_envs_ctx.envs_offset = offset; + syscall->exec.args_envs_ctx.args_count = args_count; + + if (args_count == syscall->exec.args.count) { + return 0; + } + + bpf_tail_call_compat(ctx, &args_envs_progs, EXEC_GET_ENVS_OFFSET); + + // make sure to reset envs_offset if the tailcall limit is reached and all args couldn't be read + if (args_count != syscall->exec.args.count) { + syscall->exec.args_envs_ctx.envs_offset = 0; + } + + return 0; +} + +void __attribute__((always_inline)) parse_args_envs(struct pt_regs *ctx, struct args_envs_parsing_context_t *args_envs_ctx, struct args_envs_t *args_envs) { + const char *args_start = args_envs_ctx->args_start; + int offset = args_envs_ctx->parsing_offset; + + args_envs->truncated = 0; + + u32 key = 0; + struct str_array_buffer_t *buff = bpf_map_lookup_elem(&str_array_buffers, &key); + if (!buff) { + return; + } + + struct args_envs_event_t event = { + .id = args_envs->id, + }; + + int i = 0; + int bytes_read = 0; + + void *buff_ptr = &buff->value[0]; + +#pragma unroll + for (i = 0; i < MAX_ARRAY_ELEMENT_PER_TAIL; i++) { + void *string_array_ptr = &(buff->value[(event.size + sizeof(bytes_read)) & (MAX_STR_BUFF_LEN - MAX_ARRAY_ELEMENT_SIZE - 1)]); + + bytes_read = bpf_probe_read_str(string_array_ptr, MAX_ARRAY_ELEMENT_SIZE, (void *)(args_start + offset)); + if (bytes_read > 0) { + bytes_read--; // remove trailing 0 + + // insert size before the string + bpf_probe_read(&(buff->value[event.size&(MAX_STR_BUFF_LEN - MAX_ARRAY_ELEMENT_SIZE - 1)]), sizeof(bytes_read), &bytes_read); + + int data_length = bytes_read + sizeof(bytes_read); + if (event.size + data_length >= MAX_PERF_STR_BUFF_LEN) { + // copy value to the event + bpf_probe_read(&event.value, MAX_PERF_STR_BUFF_LEN, buff_ptr); + + // only one argument overflows the limit + if (event.size == 0) { + event.size = MAX_PERF_STR_BUFF_LEN; + args_envs->counter++; + offset += bytes_read + 1; // count trailing 0 + } + + send_event(ctx, EVENT_ARGS_ENVS, event); + event.size = 0; + } else { + event.size += data_length; + args_envs->counter++; + offset += bytes_read + 1; + } + + if (args_envs->counter == args_envs->count) { + break; + } + } else { + break; + } + } + args_envs_ctx->parsing_offset = offset; + args_envs->truncated = i == MAX_ARRAY_ELEMENT_PER_TAIL; + + // flush remaining values + if (event.size > 0) { + bpf_probe_read(&event.value, MAX_PERF_STR_BUFF_LEN, buff_ptr); + + send_event(ctx, EVENT_ARGS_ENVS, event); + } +} + +SEC("kprobe/parse_args_envs_split") +int kprobe_parse_args_envs_split(struct pt_regs *ctx) { + struct syscall_cache_t *syscall = peek_current_or_impersonated_exec_syscall(); + if (!syscall) { + return 0; + } + + struct args_envs_t *args_envs; + + if (syscall->exec.args.counter < syscall->exec.args.count && syscall->exec.args.counter <= MAX_ARGS_ELEMENTS) { + args_envs = &syscall->exec.args; + } else if (syscall->exec.envs.counter < syscall->exec.envs.count) { + if (syscall->exec.envs.counter == 0) { + syscall->exec.args_envs_ctx.parsing_offset = syscall->exec.args_envs_ctx.envs_offset; + } + args_envs = &syscall->exec.envs; + } else { + return 0; + } + + parse_args_envs(ctx, &syscall->exec.args_envs_ctx, args_envs); + + bpf_tail_call_compat(ctx, &args_envs_progs, EXEC_PARSE_ARGS_ENVS_SPLIT); + + args_envs->truncated = 1; + + return 0; +} + +SEC("kprobe/parse_args_envs") +int kprobe_parse_args_envs(struct pt_regs *ctx) { + struct syscall_cache_t *syscall = peek_current_or_impersonated_exec_syscall(); + if (!syscall) { + return 0; + } + + struct args_envs_t *args_envs; + + if (syscall->exec.args.counter < syscall->exec.args.count) { + args_envs = &syscall->exec.args; + } else if (syscall->exec.envs.counter < syscall->exec.envs.count) { + args_envs = &syscall->exec.envs; + } else { + return 0; + } + + parse_args_envs(ctx, &syscall->exec.args_envs_ctx, args_envs); + + bpf_tail_call_compat(ctx, &args_envs_progs, EXEC_PARSE_ARGS_ENVS); + + args_envs->truncated = 1; + + return 0; +} + int __attribute__((always_inline)) fetch_interpreter(struct pt_regs *ctx, struct linux_binprm *bprm) { struct syscall_cache_t *syscall = peek_current_or_impersonated_exec_syscall(); if (!syscall) { @@ -777,7 +852,76 @@ int __attribute__((always_inline)) fetch_interpreter(struct pt_regs *ctx, struct return handle_interpreted_exec_event(ctx, syscall, interpreter); } -int __attribute__((always_inline)) send_exec_event(struct pt_regs *ctx, struct linux_binprm *bprm) { +SEC("kprobe/setup_new_exec") +int kprobe_setup_new_exec_interp(struct pt_regs *ctx) { + struct linux_binprm *bprm = (struct linux_binprm *) PT_REGS_PARM1(ctx); + return fetch_interpreter(ctx, bprm); +} + +SEC("kprobe/setup_new_exec") +int kprobe_setup_new_exec_args_envs(struct pt_regs *ctx) { + struct syscall_cache_t *syscall = peek_current_or_impersonated_exec_syscall(); + if (!syscall) { + return 0; + } + + void *bprm = (void *)PT_REGS_PARM1(ctx); + + int argc = 0; + u64 argc_offset; + LOAD_CONSTANT("linux_binprm_argc_offset", argc_offset); + bpf_probe_read(&argc, sizeof(argc), (char *)bprm + argc_offset); + + int envc = 0; + u64 envc_offset; + LOAD_CONSTANT("linux_binprm_envc_offset", envc_offset); + bpf_probe_read(&envc, sizeof(envc), (char *)bprm + envc_offset); + + unsigned long p = 0; + u64 p_offset; + LOAD_CONSTANT("linux_binprm_p_offset", p_offset); + bpf_probe_read(&p, sizeof(p), (char *)bprm + p_offset); + // if we fail to retrieve the pointer to the args then don't bother parsing them + if (p == 0) { + return 0; + } + + syscall->exec.args_envs_ctx.args_start = (char *)p; + syscall->exec.args_envs_ctx.args_count = 0; + syscall->exec.args_envs_ctx.parsing_offset = 0; + syscall->exec.args_envs_ctx.envs_offset = 0; + syscall->exec.args.count = argc; + syscall->exec.envs.count = envc; + + bpf_tail_call_compat(ctx, &args_envs_progs, EXEC_GET_ENVS_OFFSET); + + return 0; +} + +SEC("kprobe/setup_arg_pages") +int kprobe_setup_arg_pages(struct pt_regs *ctx) { + struct syscall_cache_t *syscall = peek_current_or_impersonated_exec_syscall(); + if (!syscall) { + return 0; + } + + if (syscall->exec.args_envs_ctx.envs_offset != 0) { + bpf_tail_call_compat(ctx, &args_envs_progs, EXEC_PARSE_ARGS_ENVS_SPLIT); + } else { + bpf_tail_call_compat(ctx, &args_envs_progs, EXEC_PARSE_ARGS_ENVS); + } + + return 0; +} + +void __attribute__((always_inline)) fill_args_envs(struct exec_event_t *event, struct syscall_cache_t *syscall) { + event->args_id = syscall->exec.args.id; + event->args_truncated = syscall->exec.args.truncated; + event->envs_id = syscall->exec.envs.id; + event->envs_truncated = syscall->exec.envs.truncated; +} + +int __attribute__((always_inline)) send_exec_event(struct pt_regs *ctx) { struct syscall_cache_t *syscall = pop_current_or_impersonated_exec_syscall(); if (!syscall) { return 0; @@ -829,36 +973,9 @@ int __attribute__((always_inline)) send_exec_event(struct pt_regs *ctx, struct l return 0; } -SEC("kprobe/security_bprm_committed_creds") -int kprobe_security_bprm_committed_creds(struct pt_regs *ctx) { - u64 setup_new_exec_is_last; - LOAD_CONSTANT("setup_new_exec_is_last", setup_new_exec_is_last); - - struct linux_binprm *bprm = (struct linux_binprm *) PT_REGS_PARM1(ctx); - - if (setup_new_exec_is_last) { - fetch_interpreter(ctx, bprm); - } else { - send_exec_event(ctx, bprm); - } - - return 0; -} - -SEC("kprobe/setup_new_exec") -int kprobe_setup_new_exec(struct pt_regs *ctx) { - u64 setup_new_exec_is_last; - LOAD_CONSTANT("setup_new_exec_is_last", setup_new_exec_is_last); - - struct linux_binprm *bprm = (struct linux_binprm *) PT_REGS_PARM1(ctx); - - if (setup_new_exec_is_last) { - send_exec_event(ctx, bprm); - } else { - fetch_interpreter(ctx, bprm); - } - - return 0; +SEC("kprobe/mprotect_fixup") +int kprobe_mprotect_fixup(struct pt_regs *ctx) { + return send_exec_event(ctx); } #endif diff --git a/pkg/security/ebpf/c/prebuilt/probe.c b/pkg/security/ebpf/c/prebuilt/probe.c index 8dafff3b5f3c44..b6087dd65f0d7a 100644 --- a/pkg/security/ebpf/c/prebuilt/probe.c +++ b/pkg/security/ebpf/c/prebuilt/probe.c @@ -105,6 +105,11 @@ void __attribute__((always_inline)) invalidate_inode(struct pt_regs *ctx, u32 mo } } +// unit tests +#ifdef __BALOUM__ +#include "tests.h" +#endif + __u32 _version SEC("version") = 0xFFFFFFFE; char LICENSE[] SEC("license") = "GPL"; diff --git a/pkg/security/ebpf/c/process.h b/pkg/security/ebpf/c/process.h index d68af44ca818af..94f6b176a57c6c 100644 --- a/pkg/security/ebpf/c/process.h +++ b/pkg/security/ebpf/c/process.h @@ -138,7 +138,12 @@ static struct proc_cache_t * __attribute__((always_inline)) fill_process_context data->is_kworker = 1; } - return get_proc_cache(tgid); + struct proc_cache_t *pc = get_proc_cache(tgid); + if (pc) { + data->inode = pc->entry.executable.path_key.ino; + } + + return pc; } static struct proc_cache_t * __attribute__((always_inline)) fill_process_context(struct process_context_t *data) { diff --git a/pkg/security/ebpf/c/syscalls.h b/pkg/security/ebpf/c/syscalls.h index 7e1933cd7a66a4..6c1b8d05790bb0 100644 --- a/pkg/security/ebpf/c/syscalls.h +++ b/pkg/security/ebpf/c/syscalls.h @@ -12,11 +12,18 @@ enum { ASYNC_SYSCALL }; -struct str_array_ref_t { +struct args_envs_t { + u32 count; // argc/envc retrieved from the kernel + u32 counter; // counter incremented while parsing args/envs u32 id; - u8 index; u8 truncated; - const char **array; +}; + +struct args_envs_parsing_context_t { + const char *args_start; + u64 envs_offset; + u64 parsing_offset; + u32 args_count; }; struct dentry_resolver_input_t { @@ -137,11 +144,11 @@ struct syscall_cache_t { struct { struct dentry *dentry; struct file_t file; - struct str_array_ref_t args; - struct str_array_ref_t envs; + struct args_envs_t args; + struct args_envs_t envs; + struct args_envs_parsing_context_t args_envs_ctx; struct span_context_t span_context; struct linux_binprm_t linux_binprm; - u32 next_tail; u8 is_parsed; } exec; diff --git a/pkg/security/ebpf/c/tests.h b/pkg/security/ebpf/c/tests.h new file mode 100644 index 00000000000000..9e9652d486857c --- /dev/null +++ b/pkg/security/ebpf/c/tests.h @@ -0,0 +1,7 @@ +#ifndef _TESTS_H +#define _TESTS_H + +#include "discarders_test.h" +#include "activity_dump_ratelimiter_test.h" + +#endif diff --git a/pkg/security/ebpf/c/utils.h b/pkg/security/ebpf/c/utils.h new file mode 100644 index 00000000000000..4fd4dc6bbb0597 --- /dev/null +++ b/pkg/security/ebpf/c/utils.h @@ -0,0 +1,7 @@ +#ifndef _UTILS_H_ +#define _UTILS_H_ + +#define NS_TO_SEC(x) (x) / 1000000000 +#define SEC_TO_NS(x) (x) * 1000000000 + +#endif /* _UTILS_H_ */ diff --git a/pkg/security/ebpf/loader.go b/pkg/security/ebpf/loader.go index 9cef286ce22680..8f4d94aff46581 100644 --- a/pkg/security/ebpf/loader.go +++ b/pkg/security/ebpf/loader.go @@ -9,10 +9,13 @@ package ebpf import ( + "strings" + "github.com/DataDog/datadog-agent/pkg/ebpf/bytecode" "github.com/DataDog/datadog-agent/pkg/security/config" "github.com/DataDog/datadog-agent/pkg/security/seclog" "github.com/DataDog/datadog-go/v5/statsd" + manager "github.com/DataDog/ebpf-manager" ) // ProbeLoader defines an eBPF ProbeLoader @@ -95,3 +98,13 @@ func (l *OffsetGuesserLoader) Close() error { func (l *OffsetGuesserLoader) Load() (bytecode.AssetReader, error) { return bytecode.GetReader(l.config.BPFDir, "runtime-security-offset-guesser.o") } + +// IsSyscallWrapperRequired checks whether the wrapper is required +func IsSyscallWrapperRequired() (bool, error) { + openSyscall, err := manager.GetSyscallFnName("open") + if err != nil { + return false, err + } + + return !strings.HasPrefix(openSyscall, "SyS_") && !strings.HasPrefix(openSyscall, "sys_"), nil +} diff --git a/pkg/security/ebpf/probes/const.go b/pkg/security/ebpf/probes/const.go index 71127a796433e9..8201677b70b4d0 100644 --- a/pkg/security/ebpf/probes/const.go +++ b/pkg/security/ebpf/probes/const.go @@ -81,3 +81,12 @@ const ( // TCDNSRequestParserKey is the key to DNS request parser program TCDNSRequestParserKey ) + +const ( + // ExecGetEnvsOffsetKey is the key to the program that computes the environment variables offset + ExecGetEnvsOffsetKey uint32 = iota + // ExecParseArgsEnvsSplitKey is the key to the program that splits the parsing of arguments and environment variables between tailcalls + ExecParseArgsEnvsSplitKey + // ExecParseArgsEnvsKey is the key to the program that parses arguments and then environment variables + ExecParseArgsEnvsKey +) diff --git a/pkg/security/ebpf/probes/event_types.go b/pkg/security/ebpf/probes/event_types.go index 068db081e9dc61..e3cee9d0efb08d 100644 --- a/pkg/security/ebpf/probes/event_types.go +++ b/pkg/security/ebpf/probes/event_types.go @@ -81,14 +81,16 @@ func GetSelectorsPerEventType() map[eval.EventType][]manager.ProbesSelector { &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "tracepoint/raw_syscalls/sys_exit", EBPFFuncName: "sys_exit"}}, &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "tracepoint/sched/sched_process_fork", EBPFFuncName: "sched_process_fork"}}, &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/do_exit", EBPFFuncName: "kprobe_do_exit"}}, - &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/security_bprm_committed_creds", EBPFFuncName: "kprobe_security_bprm_committed_creds"}}, - &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/exit_itimers", EBPFFuncName: "kprobe_exit_itimers"}}, &manager.BestEffort{Selectors: []manager.ProbesSelector{ &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/prepare_binprm", EBPFFuncName: "kprobe_prepare_binprm"}}, &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/bprm_execve", EBPFFuncName: "kprobe_bprm_execve"}}, &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/security_bprm_check", EBPFFuncName: "kprobe_security_bprm_check"}}, }}, - &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/setup_new_exec", EBPFFuncName: "kprobe_setup_new_exec"}}, + &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/setup_new_exec", EBPFFuncName: "kprobe_setup_new_exec_interp"}}, + &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID + "_a", EBPFSection: "kprobe/setup_new_exec", EBPFFuncName: "kprobe_setup_new_exec_args_envs"}}, + &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/setup_arg_pages", EBPFFuncName: "kprobe_setup_arg_pages"}}, + &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/mprotect_fixup", EBPFFuncName: "kprobe_mprotect_fixup"}}, + &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/exit_itimers", EBPFFuncName: "kprobe_exit_itimers"}}, &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/vfs_open", EBPFFuncName: "kprobe_vfs_open"}}, &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/do_dentry_open", EBPFFuncName: "kprobe_do_dentry_open"}}, &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/commit_creds", EBPFFuncName: "kprobe_commit_creds"}}, diff --git a/pkg/security/ebpf/probes/exec.go b/pkg/security/ebpf/probes/exec.go index 0f1c834c56993b..43687c00d0ec8e 100644 --- a/pkg/security/ebpf/probes/exec.go +++ b/pkg/security/ebpf/probes/exec.go @@ -12,6 +12,27 @@ import manager "github.com/DataDog/ebpf-manager" // execProbes holds the list of probes used to track processes execution var execProbes = []*manager.Probe{ + { + ProbeIdentificationPair: manager.ProbeIdentificationPair{ + UID: SecurityAgentUID, + EBPFSection: "kprobe/prepare_binprm", + EBPFFuncName: "kprobe_prepare_binprm", + }, + }, + { + ProbeIdentificationPair: manager.ProbeIdentificationPair{ + UID: SecurityAgentUID, + EBPFSection: "kprobe/bprm_execve", + EBPFFuncName: "kprobe_bprm_execve", + }, + }, + { + ProbeIdentificationPair: manager.ProbeIdentificationPair{ + UID: SecurityAgentUID, + EBPFSection: "kprobe/security_bprm_check", + EBPFFuncName: "kprobe_security_bprm_check", + }, + }, { ProbeIdentificationPair: manager.ProbeIdentificationPair{ UID: SecurityAgentUID, @@ -85,36 +106,29 @@ var execProbes = []*manager.Probe{ { ProbeIdentificationPair: manager.ProbeIdentificationPair{ UID: SecurityAgentUID, - EBPFSection: "kprobe/prepare_binprm", - EBPFFuncName: "kprobe_prepare_binprm", - }, - }, - { - ProbeIdentificationPair: manager.ProbeIdentificationPair{ - UID: SecurityAgentUID, - EBPFSection: "kprobe/bprm_execve", - EBPFFuncName: "kprobe_bprm_execve", + EBPFSection: "kprobe/setup_new_exec", + EBPFFuncName: "kprobe_setup_new_exec_interp", }, }, { ProbeIdentificationPair: manager.ProbeIdentificationPair{ - UID: SecurityAgentUID, - EBPFSection: "kprobe/security_bprm_check", - EBPFFuncName: "kprobe_security_bprm_check", + UID: SecurityAgentUID + "_a", + EBPFSection: "kprobe/setup_new_exec", + EBPFFuncName: "kprobe_setup_new_exec_args_envs", }, }, { ProbeIdentificationPair: manager.ProbeIdentificationPair{ UID: SecurityAgentUID, - EBPFSection: "kprobe/setup_new_exec", - EBPFFuncName: "kprobe_setup_new_exec", + EBPFSection: "kprobe/setup_arg_pages", + EBPFFuncName: "kprobe_setup_arg_pages", }, }, { ProbeIdentificationPair: manager.ProbeIdentificationPair{ UID: SecurityAgentUID, - EBPFSection: "kprobe/security_bprm_committed_creds", - EBPFFuncName: "kprobe_security_bprm_committed_creds", + EBPFSection: "kprobe/mprotect_fixup", + EBPFFuncName: "kprobe_mprotect_fixup", }, }, { @@ -227,19 +241,30 @@ func getExecProbes() []*manager.Probe { } func getExecTailCallRoutes() []manager.TailCallRoute { - var routes []manager.TailCallRoute - - for i := uint32(0); i != 10; i++ { - route := manager.TailCallRoute{ + return []manager.TailCallRoute{ + { + ProgArrayName: "args_envs_progs", + Key: ExecGetEnvsOffsetKey, + ProbeIdentificationPair: manager.ProbeIdentificationPair{ + EBPFSection: "kprobe/get_envs_offset", + EBPFFuncName: "kprobe_get_envs_offset", + }, + }, + { ProgArrayName: "args_envs_progs", - Key: i, + Key: ExecParseArgsEnvsSplitKey, + ProbeIdentificationPair: manager.ProbeIdentificationPair{ + EBPFSection: "kprobe/parse_args_envs_split", + EBPFFuncName: "kprobe_parse_args_envs_split", + }, + }, + { + ProgArrayName: "args_envs_progs", + Key: ExecParseArgsEnvsKey, ProbeIdentificationPair: manager.ProbeIdentificationPair{ EBPFSection: "kprobe/parse_args_envs", EBPFFuncName: "kprobe_parse_args_envs", }, - } - routes = append(routes, route) + }, } - - return routes } diff --git a/pkg/security/ebpf/tests/activity_dump_ratelimiter_test.go b/pkg/security/ebpf/tests/activity_dump_ratelimiter_test.go new file mode 100644 index 00000000000000..277a37e03a427b --- /dev/null +++ b/pkg/security/ebpf/tests/activity_dump_ratelimiter_test.go @@ -0,0 +1,47 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux && ebpf_bindata +// +build linux,ebpf_bindata + +package tests + +import ( + "testing" + + "github.com/safchain/baloum/pkg/baloum" +) + +func TestActivityDumpRateLimiterBasic(t *testing.T) { + var ctx baloum.StdContext + code, err := newVM(t).RunProgram(&ctx, "test/ad_ratelimiter_basic") + if err != nil || code != 0 { + t.Errorf("unexpected error: %v, %d", err, code) + } +} + +func TestActivityDumpRateLimiterBasicHalf(t *testing.T) { + var ctx baloum.StdContext + code, err := newVM(t).RunProgram(&ctx, "test/ad_ratelimiter_basic_half") + if err != nil || code != 0 { + t.Errorf("unexpected error: %v, %d", err, code) + } +} + +func TestActivityDumpRateLimiterDecreasingDroprate(t *testing.T) { + var ctx baloum.StdContext + code, err := newVM(t).RunProgram(&ctx, "test/ad_ratelimiter_decreasing_droprate") + if err != nil || code != 0 { + t.Errorf("unexpected error: %v, %d", err, code) + } +} + +func TestActivityDumpRateLimiterIncreasingDroprate(t *testing.T) { + var ctx baloum.StdContext + code, err := newVM(t).RunProgram(&ctx, "test/ad_ratelimiter_increasing_droprate") + if err != nil || code != 0 { + t.Errorf("unexpected error: %v, %d", err, code) + } +} diff --git a/pkg/security/ebpf/tests/discarders_test.go b/pkg/security/ebpf/tests/discarders_test.go new file mode 100644 index 00000000000000..06d0b9d400f2da --- /dev/null +++ b/pkg/security/ebpf/tests/discarders_test.go @@ -0,0 +1,47 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux && ebpf_bindata +// +build linux,ebpf_bindata + +package tests + +import ( + "testing" + + "github.com/safchain/baloum/pkg/baloum" +) + +func TestDiscarderEventMask(t *testing.T) { + var ctx baloum.StdContext + code, err := newVM(t).RunProgram(&ctx, "test/discarders_event_mask") + if err != nil || code != 0 { + t.Errorf("unexpected error: %v, %d", err, code) + } +} + +func TestDiscarderRetention(t *testing.T) { + var ctx baloum.StdContext + code, err := newVM(t).RunProgram(&ctx, "test/discarders_retention") + if err != nil || code != 0 { + t.Errorf("unexpected error: %v, %d", err, code) + } +} + +func TestDiscarderRevision(t *testing.T) { + var ctx baloum.StdContext + code, err := newVM(t).RunProgram(&ctx, "test/discarders_revision") + if err != nil || code != 0 { + t.Errorf("unexpected error: %v, %d", err, code) + } +} + +func TestDiscarderMountRevision(t *testing.T) { + var ctx baloum.StdContext + code, err := newVM(t).RunProgram(&ctx, "test/discarders_mount_revision") + if err != nil || code != 0 { + t.Errorf("unexpected error: %v, %d", err, code) + } +} diff --git a/pkg/security/ebpf/tests/helpers_test.go b/pkg/security/ebpf/tests/helpers_test.go new file mode 100644 index 00000000000000..a0192ba542b093 --- /dev/null +++ b/pkg/security/ebpf/tests/helpers_test.go @@ -0,0 +1,100 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux && ebpf_bindata +// +build linux,ebpf_bindata + +package tests + +import ( + "flag" + "os" + "testing" + "time" + + "github.com/DataDog/datadog-agent/pkg/security/config" + secebpf "github.com/DataDog/datadog-agent/pkg/security/ebpf" + "github.com/DataDog/datadog-go/v5/statsd" + "github.com/cilium/ebpf" + "github.com/safchain/baloum/pkg/baloum" +) + +type testLogger struct { + t *testing.T + trace bool +} + +func (l *testLogger) Info(params ...interface{}) { + l.t.Log(params...) +} + +func (l *testLogger) Infof(format string, params ...interface{}) { + l.t.Logf(format, params...) +} + +func (l *testLogger) Debug(params ...interface{}) { + if l.trace { + l.t.Log(params...) + } +} + +func (l *testLogger) Debugf(format string, params ...interface{}) { + if l.trace { + l.t.Logf(format, params...) + } +} + +func (l *testLogger) Error(params ...interface{}) { + l.t.Error(params...) +} + +func (l *testLogger) Errorf(format string, params ...interface{}) { + l.t.Errorf(format, params...) +} + +var trace bool + +func newVM(t *testing.T) *baloum.VM { + useSyscallWrapper, err := secebpf.IsSyscallWrapperRequired() + if err != nil { + t.Fatal(err) + } + + loader := secebpf.NewProbeLoader(&config.Config{}, useSyscallWrapper, &statsd.NoOpClient{}) + reader, _, err := loader.Load() + if err != nil { + t.Fatal(err) + } + + spec, err := ebpf.LoadCollectionSpecFromReader(reader) + if err != nil { + t.Fatal(err) + } + + var now time.Time + + fncs := baloum.Fncs{ + TracePrintk: func(vm *baloum.VM, format string, args ...interface{}) error { + t.Logf(format, args...) + return nil + }, + // fake the time duration to speed up the tests + KtimeGetNS: func(vm *baloum.VM) (uint64, error) { + return uint64(now.UnixNano()), nil + }, + Sleep: func(vm *baloum.VM, duration time.Duration) error { + now = now.Add(duration) + return nil + }, + } + + return baloum.NewVM(spec, baloum.Opts{Fncs: fncs, Logger: &testLogger{t: t, trace: trace}}) +} + +func TestMain(m *testing.M) { + flag.BoolVar(&trace, "trace", false, "enable eBPF VM instruction tracing") + flag.Parse() + os.Exit(m.Run()) +} diff --git a/pkg/security/events/custom.go b/pkg/security/events/custom.go new file mode 100644 index 00000000000000..8ded6863003ca7 --- /dev/null +++ b/pkg/security/events/custom.go @@ -0,0 +1,90 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package events + +import ( + "github.com/mailru/easyjson" + "github.com/mailru/easyjson/jwriter" + + "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" + "github.com/DataDog/datadog-agent/pkg/security/secl/rules" +) + +const ( + // LostEventsRuleID is the rule ID for the lost_events_* events + LostEventsRuleID = "lost_events" + // RulesetLoadedRuleID is the rule ID for the ruleset_loaded events + RulesetLoadedRuleID = "ruleset_loaded" + // NoisyProcessRuleID is the rule ID for the noisy_process events + NoisyProcessRuleID = "noisy_process" + // AbnormalPathRuleID is the rule ID for the abnormal_path events + AbnormalPathRuleID = "abnormal_path" + // SelfTestRuleID is the rule ID for the self_test events + SelfTestRuleID = "self_test" +) + +// NewCustomRule returns a new custom rule +func NewCustomRule(id eval.RuleID) *rules.Rule { + return &rules.Rule{ + Rule: &eval.Rule{ID: id}, + Definition: &rules.RuleDefinition{ID: id}, + } +} + +// AllCustomRuleIDs returns the list of custom rule IDs +func AllCustomRuleIDs() []string { + return []string{ + LostEventsRuleID, + RulesetLoadedRuleID, + NoisyProcessRuleID, + AbnormalPathRuleID, + SelfTestRuleID, + } +} + +// NewCustomEvent returns a new custom event +func NewCustomEvent(eventType model.EventType, marshaler easyjson.Marshaler) *CustomEvent { + return &CustomEvent{ + eventType: eventType, + marshaler: marshaler, + } +} + +// CustomEvent is used to send custom security events to Datadog +type CustomEvent struct { + eventType model.EventType + tags []string + marshaler easyjson.Marshaler +} + +// Clone returns a copy of the current CustomEvent +func (ce *CustomEvent) Clone() CustomEvent { + return CustomEvent{ + eventType: ce.eventType, + tags: ce.tags, + marshaler: ce.marshaler, + } +} + +// GetTags returns the tags of the custom event +func (ce *CustomEvent) GetTags() []string { + return append(ce.tags, "type:"+ce.GetType()) +} + +// GetType returns the type of the custom event as a string +func (ce *CustomEvent) GetType() string { + return ce.eventType.String() +} + +// GetEventType returns the event type +func (ce *CustomEvent) GetEventType() model.EventType { + return ce.eventType +} + +func (ce *CustomEvent) MarshalEasyJSON(w *jwriter.Writer) { + ce.marshaler.MarshalEasyJSON(w) +} diff --git a/pkg/security/module/event.go b/pkg/security/module/event.go index de7e39b91647cc..c73444f372316a 100644 --- a/pkg/security/module/event.go +++ b/pkg/security/module/event.go @@ -35,4 +35,5 @@ type Event interface { // EventSender defines an event sender type EventSender interface { SendEvent(rule *rules.Rule, event Event, extTagsCb func() []string, service string) + SendProcessEventData(data []byte) } diff --git a/pkg/security/module/module.go b/pkg/security/module/module.go index 0104581e9cb044..d4cde2ea4032c5 100644 --- a/pkg/security/module/module.go +++ b/pkg/security/module/module.go @@ -29,6 +29,7 @@ import ( "github.com/DataDog/datadog-agent/cmd/system-probe/api/module" sapi "github.com/DataDog/datadog-agent/pkg/security/api" sconfig "github.com/DataDog/datadog-agent/pkg/security/config" + "github.com/DataDog/datadog-agent/pkg/security/events" "github.com/DataDog/datadog-agent/pkg/security/metrics" sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/probe/selftests" @@ -328,7 +329,7 @@ func (m *Module) newRuleOpts() (opts rules.Opts) { opts. WithSupportedDiscarders(sprobe.SupportedDiscarders). WithEventTypeEnabled(m.getEventTypeEnabled()). - WithReservedRuleIDs(sprobe.AllCustomRuleIDs()). + WithReservedRuleIDs(events.AllCustomRuleIDs()). WithLogger(seclog.DefaultLogger) return } @@ -348,14 +349,13 @@ func (m *Module) getApproverRuleset(policyProviders []rules.PolicyProvider) (*ru opts.WithStateScopes(map[rules.Scope]rules.VariableProviderFactory{ "process": func() rules.VariableProvider { return eval.NewScopedVariables(func(ctx *eval.Context) unsafe.Pointer { - return unsafe.Pointer(&(*model.Event)(ctx.Object).ProcessContext) + return unsafe.Pointer(&ctx.Event.(*model.Event).ProcessContext) }, nil) }, }) // approver ruleset - model := &model.Model{} - approverRuleSet := rules.NewRuleSet(model, model.NewEvent, &opts, &evalOpts, &eval.MacroStore{}) + approverRuleSet := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) // load policies loadApproversErrs := approverRuleSet.LoadPolicies(m.policyLoader, m.policyOpts) @@ -394,7 +394,7 @@ func (m *Module) LoadPolicies(policyProviders []rules.PolicyProvider, sendLoaded WithStateScopes(map[rules.Scope]rules.VariableProviderFactory{ "process": func() rules.VariableProvider { scoper := func(ctx *eval.Context) unsafe.Pointer { - return unsafe.Pointer((*sprobe.Event)(ctx.Object).ProcessCacheEntry) + return unsafe.Pointer(ctx.Event.(*model.Event).ProcessCacheEntry) } return m.probe.GetResolvers().ProcessResolver.NewProcessVariables(scoper) }, @@ -404,7 +404,7 @@ func (m *Module) LoadPolicies(policyProviders []rules.PolicyProvider, sendLoaded evalOpts.WithVariables(model.SECLVariables) // standard ruleset - ruleSet := m.probe.NewRuleSet(&opts, &evalOpts, &eval.MacroStore{}) + ruleSet := m.probe.NewRuleSet(&opts, &evalOpts) loadErrs := ruleSet.LoadPolicies(m.policyLoader, m.policyOpts) if loadApproversErrs.ErrorOrNil() == nil && loadErrs.ErrorOrNil() != nil { @@ -431,21 +431,19 @@ func (m *Module) LoadPolicies(policyProviders []rules.PolicyProvider, sendLoaded } // set the rate limiters - m.rateLimiter.Apply(ruleSet, sprobe.AllCustomRuleIDs()) + m.rateLimiter.Apply(ruleSet, events.AllCustomRuleIDs()) // full list of IDs, user rules + custom var ruleIDs []rules.RuleID ruleIDs = append(ruleIDs, ruleSet.ListRuleIDs()...) - ruleIDs = append(ruleIDs, sprobe.AllCustomRuleIDs()...) + ruleIDs = append(ruleIDs, events.AllCustomRuleIDs()...) + m.apiServer.Apply(ruleIDs) m.displayReport(report) if sendLoadedReport { - // report that a new policy was loaded - monitor := m.probe.GetMonitor() - monitor.ReportRuleSetLoaded(ruleSet, loadApproversErrs) - + ReportRuleSetLoaded(m.eventSender, m.statsdClient, ruleSet, loadApproversErrs) m.policyMonitor.AddPolicies(ruleSet.GetPolicies(), loadApproversErrs) } @@ -493,13 +491,11 @@ func (m *Module) EventDiscarderFound(rs *rules.RuleSet, event eval.Event, field return } - if err := m.probe.OnNewDiscarder(rs, event.(*sprobe.Event), field, eventType); err != nil { - seclog.Trace(err) - } + m.probe.OnNewDiscarder(rs, event.(*model.Event), field, eventType) } // HandleEvent is called by the probe when an event arrives from the kernel -func (m *Module) HandleEvent(event *sprobe.Event) { +func (m *Module) HandleEvent(event *model.Event) { // if the event should have been discarded in kernel space, we don't need to evaluate it if event.SavedByActivityDumps { return @@ -511,20 +507,23 @@ func (m *Module) HandleEvent(event *sprobe.Event) { } // HandleCustomEvent is called by the probe when an event should be sent to Datadog but doesn't need evaluation -func (m *Module) HandleCustomEvent(rule *rules.Rule, event *sprobe.CustomEvent) { +func (m *Module) HandleCustomEvent(rule *rules.Rule, event *events.CustomEvent) { m.eventSender.SendEvent(rule, event, func() []string { return nil }, "") } // RuleMatch is called by the ruleset when a rule matches func (m *Module) RuleMatch(rule *rules.Rule, event eval.Event) { - // prepare the event - m.probe.OnRuleMatch(rule, event.(*sprobe.Event)) + ev := event.(*model.Event) + + // ensure that all the fields are resolved before sending + ev.FieldHandlers.ResolveContainerID(ev, &ev.ContainerContext) + ev.FieldHandlers.ResolveContainerTags(ev, &ev.ContainerContext) // needs to be resolved here, outside of the callback as using process tree // which can be modified during queuing - service := event.(*sprobe.Event).GetProcessServiceTag() + service := ev.FieldHandlers.GetProcessServiceTag(ev) - id := event.(*sprobe.Event).ContainerContext.ID + id := ev.ContainerContext.ID extTagsCb := func() []string { var tags []string @@ -542,7 +541,7 @@ func (m *Module) RuleMatch(rule *rules.Rule, event eval.Event) { } // send if not selftest related events - if m.selfTester == nil || !m.selfTester.IsExpectedEvent(rule, event) { + if m.selfTester == nil || !m.selfTester.IsExpectedEvent(rule, event, m.probe) { m.eventSender.SendEvent(rule, event, extTagsCb, service) } } @@ -556,6 +555,16 @@ func (m *Module) SendEvent(rule *rules.Rule, event Event, extTagsCb func() []str } } +// SendProcessEvent sends a process event using the provided EventSender interface +func (m *Module) SendProcessEvent(data []byte) { + m.eventSender.SendProcessEventData(data) +} + +// SendProcessEventData implements the EventSender interface forwarding a process event to the APIServer +func (m *Module) SendProcessEventData(data []byte) { + m.apiServer.SendProcessEvent(data) +} + // HandleActivityDump sends an activity dump to the backend func (m *Module) HandleActivityDump(dump *sapi.ActivityDumpStreamMessage) { m.apiServer.SendActivityDump(dump) @@ -743,8 +752,7 @@ func (m *Module) RunSelfTest(sendLoadedReport bool) error { // send the report if m.config.SelfTestSendReport { - monitor := m.probe.GetMonitor() - monitor.ReportSelfTest(success, fails) + ReportSelfTest(m.eventSender, m.statsdClient, success, fails) } return nil diff --git a/pkg/security/module/policy_monitor.go b/pkg/security/module/policy_monitor.go index cd5369898c0642..8514001f28dfd2 100644 --- a/pkg/security/module/policy_monitor.go +++ b/pkg/security/module/policy_monitor.go @@ -1,11 +1,10 @@ +//go:generate go run github.com/mailru/easyjson/easyjson -gen_build_flags=-mod=mod -no_std_marshalers $GOFILE + // Unless explicitly stated otherwise all files in this repository are licensed // under the Apache License Version 2.0. // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:build linux -// +build linux - package module import ( @@ -18,7 +17,9 @@ import ( "github.com/hashicorp/go-multierror" "github.com/DataDog/datadog-agent/pkg/dogstatsd" + "github.com/DataDog/datadog-agent/pkg/security/events" "github.com/DataDog/datadog-agent/pkg/security/metrics" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" "github.com/DataDog/datadog-agent/pkg/tagger/collectors" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -119,3 +120,110 @@ func NewPolicyMonitor(statsdClient statsd.ClientInterface) *PolicyMonitor { rules: make(map[string]string), } } + +// RuleSetLoadedReport represents the rule and the custom event related to a RuleSetLoaded event, ready to be dispatched +type RuleSetLoadedReport struct { + Rule *rules.Rule + Event *events.CustomEvent +} + +// ReportRuleSetLoaded reports to Datadog that new ruleset was loaded +func ReportRuleSetLoaded(sender EventSender, statsdClient statsd.ClientInterface, ruleSet *rules.RuleSet, err *multierror.Error) { + rule, event := NewRuleSetLoadedEvent(ruleSet, err) + + if err := statsdClient.Count(metrics.MetricRuleSetLoaded, 1, []string{}, 1.0); err != nil { + log.Error(fmt.Errorf("failed to send ruleset_loaded metric: %w", err)) + } + + sender.SendEvent(rule, event, func() []string { return nil }, "") +} + +// RuleLoaded defines a loaded rule +// easyjson:json +type RuleState struct { + ID string `json:"id"` + Version string `json:"version,omitempty"` + Expression string `json:"expression"` + Status string `json:"status"` + Message string `json:"message,omitempty"` +} + +// PolicyState is used to report policy was loaded +// easyjson:json +type PolicyState struct { + Name string `json:"name"` + Version string `json:"version"` + Source string `json:"source"` + Rules []*RuleState `json:"rules"` +} + +// RulesetLoadedEvent is used to report that a new ruleset was loaded +// easyjson:json +type RulesetLoadedEvent struct { + Timestamp time.Time `json:"date"` + Policies []*PolicyState `json:"policies"` +} + +func PolicyStateFromRuleDefinition(def *rules.RuleDefinition) *PolicyState { + return &PolicyState{ + Name: def.Policy.Name, + Version: def.Policy.Version, + Source: def.Policy.Source, + } +} + +func RuleStateFromDefinition(def *rules.RuleDefinition, status string, message string) *RuleState { + return &RuleState{ + ID: def.ID, + Version: def.Version, + Expression: def.Expression, + Status: status, + Message: message, + } +} + +// NewRuleSetLoadedEvent returns the rule and a populated custom event for a new_rules_loaded event +func NewRuleSetLoadedEvent(rs *rules.RuleSet, err *multierror.Error) (*rules.Rule, *events.CustomEvent) { + mp := make(map[string]*PolicyState) + + var policyState *PolicyState + var exists bool + + for _, rule := range rs.GetRules() { + ruleDef := rule.Definition + policyName := ruleDef.Policy.Name + + if policyState, exists = mp[policyName]; !exists { + policyState = PolicyStateFromRuleDefinition(ruleDef) + mp[policyName] = policyState + } + policyState.Rules = append(policyState.Rules, RuleStateFromDefinition(ruleDef, "loaded", "")) + } + + // rules ignored due to errors + if err != nil && err.Errors != nil { + for _, err := range err.Errors { + if rerr, ok := err.(*rules.ErrRuleLoad); ok { + policyName := rerr.Definition.Policy.Name + + if _, exists := mp[policyName]; !exists { + policyState = PolicyStateFromRuleDefinition(rerr.Definition) + mp[policyName] = policyState + } else { + policyState = mp[policyName] + } + policyState.Rules = append(policyState.Rules, RuleStateFromDefinition(rerr.Definition, string(rerr.Type()), rerr.Err.Error())) + } + } + } + + var policies []*PolicyState + for _, policy := range mp { + policies = append(policies, policy) + } + + return events.NewCustomRule(events.RulesetLoadedRuleID), events.NewCustomEvent(model.CustomRulesetLoadedEventType, RulesetLoadedEvent{ + Timestamp: time.Now(), + Policies: policies, + }) +} diff --git a/pkg/security/module/policy_monitor_easyjson.go b/pkg/security/module/policy_monitor_easyjson.go new file mode 100644 index 00000000000000..34d911311751db --- /dev/null +++ b/pkg/security/module/policy_monitor_easyjson.go @@ -0,0 +1,321 @@ +// Code generated by easyjson for marshaling/unmarshaling. DO NOT EDIT. + +package module + +import ( + json "encoding/json" + easyjson "github.com/mailru/easyjson" + jlexer "github.com/mailru/easyjson/jlexer" + jwriter "github.com/mailru/easyjson/jwriter" +) + +// suppress unused package warning +var ( + _ *json.RawMessage + _ *jlexer.Lexer + _ *jwriter.Writer + _ easyjson.Marshaler +) + +func easyjson6151911dDecodeGithubComDataDogDatadogAgentPkgSecurityModule(in *jlexer.Lexer, out *RulesetLoadedEvent) { + isTopLevel := in.IsStart() + if in.IsNull() { + if isTopLevel { + in.Consumed() + } + in.Skip() + return + } + in.Delim('{') + for !in.IsDelim('}') { + key := in.UnsafeFieldName(false) + in.WantColon() + if in.IsNull() { + in.Skip() + in.WantComma() + continue + } + switch key { + case "date": + if data := in.Raw(); in.Ok() { + in.AddError((out.Timestamp).UnmarshalJSON(data)) + } + case "policies": + if in.IsNull() { + in.Skip() + out.Policies = nil + } else { + in.Delim('[') + if out.Policies == nil { + if !in.IsDelim(']') { + out.Policies = make([]*PolicyState, 0, 8) + } else { + out.Policies = []*PolicyState{} + } + } else { + out.Policies = (out.Policies)[:0] + } + for !in.IsDelim(']') { + var v1 *PolicyState + if in.IsNull() { + in.Skip() + v1 = nil + } else { + if v1 == nil { + v1 = new(PolicyState) + } + (*v1).UnmarshalEasyJSON(in) + } + out.Policies = append(out.Policies, v1) + in.WantComma() + } + in.Delim(']') + } + default: + in.SkipRecursive() + } + in.WantComma() + } + in.Delim('}') + if isTopLevel { + in.Consumed() + } +} +func easyjson6151911dEncodeGithubComDataDogDatadogAgentPkgSecurityModule(out *jwriter.Writer, in RulesetLoadedEvent) { + out.RawByte('{') + first := true + _ = first + { + const prefix string = ",\"date\":" + out.RawString(prefix[1:]) + out.Raw((in.Timestamp).MarshalJSON()) + } + { + const prefix string = ",\"policies\":" + out.RawString(prefix) + if in.Policies == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { + out.RawString("null") + } else { + out.RawByte('[') + for v2, v3 := range in.Policies { + if v2 > 0 { + out.RawByte(',') + } + if v3 == nil { + out.RawString("null") + } else { + (*v3).MarshalEasyJSON(out) + } + } + out.RawByte(']') + } + } + out.RawByte('}') +} + +// MarshalEasyJSON supports easyjson.Marshaler interface +func (v RulesetLoadedEvent) MarshalEasyJSON(w *jwriter.Writer) { + easyjson6151911dEncodeGithubComDataDogDatadogAgentPkgSecurityModule(w, v) +} + +// UnmarshalEasyJSON supports easyjson.Unmarshaler interface +func (v *RulesetLoadedEvent) UnmarshalEasyJSON(l *jlexer.Lexer) { + easyjson6151911dDecodeGithubComDataDogDatadogAgentPkgSecurityModule(l, v) +} +func easyjson6151911dDecodeGithubComDataDogDatadogAgentPkgSecurityModule1(in *jlexer.Lexer, out *RuleState) { + isTopLevel := in.IsStart() + if in.IsNull() { + if isTopLevel { + in.Consumed() + } + in.Skip() + return + } + in.Delim('{') + for !in.IsDelim('}') { + key := in.UnsafeFieldName(false) + in.WantColon() + if in.IsNull() { + in.Skip() + in.WantComma() + continue + } + switch key { + case "id": + out.ID = string(in.String()) + case "version": + out.Version = string(in.String()) + case "expression": + out.Expression = string(in.String()) + case "status": + out.Status = string(in.String()) + case "message": + out.Message = string(in.String()) + default: + in.SkipRecursive() + } + in.WantComma() + } + in.Delim('}') + if isTopLevel { + in.Consumed() + } +} +func easyjson6151911dEncodeGithubComDataDogDatadogAgentPkgSecurityModule1(out *jwriter.Writer, in RuleState) { + out.RawByte('{') + first := true + _ = first + { + const prefix string = ",\"id\":" + out.RawString(prefix[1:]) + out.String(string(in.ID)) + } + if in.Version != "" { + const prefix string = ",\"version\":" + out.RawString(prefix) + out.String(string(in.Version)) + } + { + const prefix string = ",\"expression\":" + out.RawString(prefix) + out.String(string(in.Expression)) + } + { + const prefix string = ",\"status\":" + out.RawString(prefix) + out.String(string(in.Status)) + } + if in.Message != "" { + const prefix string = ",\"message\":" + out.RawString(prefix) + out.String(string(in.Message)) + } + out.RawByte('}') +} + +// MarshalEasyJSON supports easyjson.Marshaler interface +func (v RuleState) MarshalEasyJSON(w *jwriter.Writer) { + easyjson6151911dEncodeGithubComDataDogDatadogAgentPkgSecurityModule1(w, v) +} + +// UnmarshalEasyJSON supports easyjson.Unmarshaler interface +func (v *RuleState) UnmarshalEasyJSON(l *jlexer.Lexer) { + easyjson6151911dDecodeGithubComDataDogDatadogAgentPkgSecurityModule1(l, v) +} +func easyjson6151911dDecodeGithubComDataDogDatadogAgentPkgSecurityModule2(in *jlexer.Lexer, out *PolicyState) { + isTopLevel := in.IsStart() + if in.IsNull() { + if isTopLevel { + in.Consumed() + } + in.Skip() + return + } + in.Delim('{') + for !in.IsDelim('}') { + key := in.UnsafeFieldName(false) + in.WantColon() + if in.IsNull() { + in.Skip() + in.WantComma() + continue + } + switch key { + case "name": + out.Name = string(in.String()) + case "version": + out.Version = string(in.String()) + case "source": + out.Source = string(in.String()) + case "rules": + if in.IsNull() { + in.Skip() + out.Rules = nil + } else { + in.Delim('[') + if out.Rules == nil { + if !in.IsDelim(']') { + out.Rules = make([]*RuleState, 0, 8) + } else { + out.Rules = []*RuleState{} + } + } else { + out.Rules = (out.Rules)[:0] + } + for !in.IsDelim(']') { + var v4 *RuleState + if in.IsNull() { + in.Skip() + v4 = nil + } else { + if v4 == nil { + v4 = new(RuleState) + } + (*v4).UnmarshalEasyJSON(in) + } + out.Rules = append(out.Rules, v4) + in.WantComma() + } + in.Delim(']') + } + default: + in.SkipRecursive() + } + in.WantComma() + } + in.Delim('}') + if isTopLevel { + in.Consumed() + } +} +func easyjson6151911dEncodeGithubComDataDogDatadogAgentPkgSecurityModule2(out *jwriter.Writer, in PolicyState) { + out.RawByte('{') + first := true + _ = first + { + const prefix string = ",\"name\":" + out.RawString(prefix[1:]) + out.String(string(in.Name)) + } + { + const prefix string = ",\"version\":" + out.RawString(prefix) + out.String(string(in.Version)) + } + { + const prefix string = ",\"source\":" + out.RawString(prefix) + out.String(string(in.Source)) + } + { + const prefix string = ",\"rules\":" + out.RawString(prefix) + if in.Rules == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { + out.RawString("null") + } else { + out.RawByte('[') + for v5, v6 := range in.Rules { + if v5 > 0 { + out.RawByte(',') + } + if v6 == nil { + out.RawString("null") + } else { + (*v6).MarshalEasyJSON(out) + } + } + out.RawByte(']') + } + } + out.RawByte('}') +} + +// MarshalEasyJSON supports easyjson.Marshaler interface +func (v PolicyState) MarshalEasyJSON(w *jwriter.Writer) { + easyjson6151911dEncodeGithubComDataDogDatadogAgentPkgSecurityModule2(w, v) +} + +// UnmarshalEasyJSON supports easyjson.Unmarshaler interface +func (v *PolicyState) UnmarshalEasyJSON(l *jlexer.Lexer) { + easyjson6151911dDecodeGithubComDataDogDatadogAgentPkgSecurityModule2(l, v) +} diff --git a/pkg/security/module/process_monitor.go b/pkg/security/module/process_monitor.go index 0e73f11ad07a88..107f8c93d188fc 100644 --- a/pkg/security/module/process_monitor.go +++ b/pkg/security/module/process_monitor.go @@ -10,7 +10,8 @@ package module import ( "github.com/DataDog/datadog-agent/pkg/process/events/model" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/events" + smodel "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -21,7 +22,7 @@ type ProcessMonitoring struct { } // HandleEvent implement the EventHandler interface -func (p *ProcessMonitoring) HandleEvent(event *sprobe.Event) { +func (p *ProcessMonitoring) HandleEvent(event *smodel.Event) { // Force resolution of all event fields before exposing it through the API server event.ResolveFields(false) event.ResolveEventTimestamp() @@ -61,11 +62,11 @@ func (p *ProcessMonitoring) HandleEvent(event *sprobe.Event) { return } - p.module.apiServer.SendProcessEvent(data) + p.module.SendProcessEvent(data) } // HandleCustomEvent implement the EventHandler interface -func (p *ProcessMonitoring) HandleCustomEvent(rule *rules.Rule, event *sprobe.CustomEvent) { +func (p *ProcessMonitoring) HandleCustomEvent(rule *rules.Rule, event *events.CustomEvent) { } // NewProcessMonitoring returns a new ProcessMonitoring instance diff --git a/pkg/security/module/rate_limiter.go b/pkg/security/module/rate_limiter.go index 15fd87c11f67f5..e592b363c9c461 100644 --- a/pkg/security/module/rate_limiter.go +++ b/pkg/security/module/rate_limiter.go @@ -17,8 +17,8 @@ import ( "go.uber.org/atomic" "golang.org/x/time/rate" + "github.com/DataDog/datadog-agent/pkg/security/events" "github.com/DataDog/datadog-agent/pkg/security/metrics" - "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -31,8 +31,8 @@ var ( defaultBurst int = 40 defaultPerRuleLimiters = map[eval.RuleID]*Limiter{ - probe.RulesetLoadedRuleID: NewLimiter(rate.Inf, 1), // No limit on ruleset loaded - probe.AbnormalPathRuleID: NewLimiter(rate.Every(30*time.Second), 1), + events.RulesetLoadedRuleID: NewLimiter(rate.Inf, 1), // No limit on ruleset loaded + events.AbnormalPathRuleID: NewLimiter(rate.Every(30*time.Second), 1), } ) diff --git a/pkg/security/module/rule_filters_model.go b/pkg/security/module/rule_filters_model.go index 6856466fa73731..b8f4c26acaf592 100644 --- a/pkg/security/module/rule_filters_model.go +++ b/pkg/security/module/rule_filters_model.go @@ -7,7 +7,6 @@ package module import ( "reflect" - "unsafe" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" ) @@ -43,10 +42,6 @@ func (e *RuleFilterEvent) GetTags() []string { return []string{} } -func (e *RuleFilterEvent) GetPointer() unsafe.Pointer { - return unsafe.Pointer(e) -} - func (m *RuleFilterModel) ValidateField(key string, value eval.FieldValue) error { return nil } diff --git a/pkg/security/module/rule_filters_model_linux.go b/pkg/security/module/rule_filters_model_linux.go index f94adc524dd1e2..0ab7d9c0e7ac33 100644 --- a/pkg/security/module/rule_filters_model_linux.go +++ b/pkg/security/module/rule_filters_model_linux.go @@ -40,7 +40,7 @@ func (m *RuleFilterModel) GetEvaluator(field eval.Field, regID eval.RegisterID) case "kernel.version.major": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - kv := (*RuleFilterEvent)(ctx.Object).kv + kv := ctx.Event.(*RuleFilterEvent).kv if ubuntuKernelVersion := kv.UbuntuKernelVersion(); ubuntuKernelVersion != nil { return int(ubuntuKernelVersion.Major) } @@ -51,7 +51,7 @@ func (m *RuleFilterModel) GetEvaluator(field eval.Field, regID eval.RegisterID) case "kernel.version.minor": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - kv := (*RuleFilterEvent)(ctx.Object).kv + kv := ctx.Event.(*RuleFilterEvent).kv if ubuntuKernelVersion := kv.UbuntuKernelVersion(); ubuntuKernelVersion != nil { return int(ubuntuKernelVersion.Minor) } @@ -62,7 +62,7 @@ func (m *RuleFilterModel) GetEvaluator(field eval.Field, regID eval.RegisterID) case "kernel.version.patch": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - kv := (*RuleFilterEvent)(ctx.Object).kv + kv := ctx.Event.(*RuleFilterEvent).kv if ubuntuKernelVersion := kv.UbuntuKernelVersion(); ubuntuKernelVersion != nil { return int(ubuntuKernelVersion.Patch) } @@ -73,7 +73,7 @@ func (m *RuleFilterModel) GetEvaluator(field eval.Field, regID eval.RegisterID) case "kernel.version.abi": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - kv := (*RuleFilterEvent)(ctx.Object).kv + kv := ctx.Event.(*RuleFilterEvent).kv if ubuntuKernelVersion := kv.UbuntuKernelVersion(); ubuntuKernelVersion != nil { return int(ubuntuKernelVersion.Abi) } @@ -84,7 +84,7 @@ func (m *RuleFilterModel) GetEvaluator(field eval.Field, regID eval.RegisterID) case "kernel.version.flavor": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - kv := (*RuleFilterEvent)(ctx.Object).kv + kv := ctx.Event.(*RuleFilterEvent).kv if ubuntuKernelVersion := kv.UbuntuKernelVersion(); ubuntuKernelVersion != nil { return ubuntuKernelVersion.Flavor } @@ -99,70 +99,70 @@ func (m *RuleFilterModel) GetEvaluator(field eval.Field, regID eval.RegisterID) }, nil case "os.id": return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { return (*RuleFilterEvent)(ctx.Object).kv.OsRelease["ID"] }, + EvalFnc: func(ctx *eval.Context) string { return ctx.Event.(*RuleFilterEvent).kv.OsRelease["ID"] }, Field: field, }, nil case "os.platform_id": return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { return (*RuleFilterEvent)(ctx.Object).kv.OsRelease["PLATFORM_ID"] }, + EvalFnc: func(ctx *eval.Context) string { return ctx.Event.(*RuleFilterEvent).kv.OsRelease["PLATFORM_ID"] }, Field: field, }, nil case "os.version_id": return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { return (*RuleFilterEvent)(ctx.Object).kv.OsRelease["VERSION_ID"] }, + EvalFnc: func(ctx *eval.Context) string { return ctx.Event.(*RuleFilterEvent).kv.OsRelease["VERSION_ID"] }, Field: field, }, nil case "os.is_amazon_linux": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*RuleFilterEvent)(ctx.Object).kv.IsAmazonLinuxKernel() }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*RuleFilterEvent).kv.IsAmazonLinuxKernel() }, Field: field, }, nil case "os.is_cos": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*RuleFilterEvent)(ctx.Object).kv.IsCOSKernel() }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*RuleFilterEvent).kv.IsCOSKernel() }, Field: field, }, nil case "os.is_debian": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*RuleFilterEvent)(ctx.Object).kv.IsDebianKernel() }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*RuleFilterEvent).kv.IsDebianKernel() }, Field: field, }, nil case "os.is_oracle": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*RuleFilterEvent)(ctx.Object).kv.IsOracleUEKKernel() }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*RuleFilterEvent).kv.IsOracleUEKKernel() }, Field: field, }, nil case "os.is_rhel": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*RuleFilterEvent)(ctx.Object).kv.IsRH7Kernel() || (*RuleFilterEvent)(ctx.Object).kv.IsRH8Kernel() + return ctx.Event.(*RuleFilterEvent).kv.IsRH7Kernel() || ctx.Event.(*RuleFilterEvent).kv.IsRH8Kernel() }, Field: field, }, nil case "os.is_rhel7": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*RuleFilterEvent)(ctx.Object).kv.IsRH7Kernel() }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*RuleFilterEvent).kv.IsRH7Kernel() }, Field: field, }, nil case "os.is_rhel8": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*RuleFilterEvent)(ctx.Object).kv.IsRH8Kernel() }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*RuleFilterEvent).kv.IsRH8Kernel() }, Field: field, }, nil case "os.is_sles": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*RuleFilterEvent)(ctx.Object).kv.IsSLESKernel() }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*RuleFilterEvent).kv.IsSLESKernel() }, Field: field, }, nil case "os.is_sles12": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*RuleFilterEvent)(ctx.Object).kv.IsSuse12Kernel() }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*RuleFilterEvent).kv.IsSuse12Kernel() }, Field: field, }, nil case "os.is_sles15": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*RuleFilterEvent)(ctx.Object).kv.IsSuse15Kernel() }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*RuleFilterEvent).kv.IsSuse15Kernel() }, Field: field, }, nil } diff --git a/pkg/security/module/self_tests.go b/pkg/security/module/self_tests.go new file mode 100644 index 00000000000000..6054dab73eb2d4 --- /dev/null +++ b/pkg/security/module/self_tests.go @@ -0,0 +1,53 @@ +//go:generate go run github.com/mailru/easyjson/easyjson -gen_build_flags=-mod=mod -no_std_marshalers $GOFILE + +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package module + +import ( + "fmt" + "time" + + "github.com/DataDog/datadog-agent/pkg/security/events" + "github.com/DataDog/datadog-agent/pkg/security/metrics" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" + "github.com/DataDog/datadog-agent/pkg/security/secl/rules" + "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-go/v5/statsd" +) + +// SelfTestEvent is used to report a self test result +// easyjson:json +type SelfTestEvent struct { + Timestamp time.Time `json:"date"` + Success []string `json:"succeeded_tests"` + Fails []string `json:"failed_tests"` +} + +// NewSelfTestEvent returns the rule and the result of the self test +func NewSelfTestEvent(success []string, fails []string) (*rules.Rule, *events.CustomEvent) { + return events.NewCustomRule(events.SelfTestRuleID), events.NewCustomEvent(model.CustomSelfTestEventType, SelfTestEvent{ + Timestamp: time.Now(), + Success: success, + Fails: fails, + }) +} + +// ReportSelfTest reports to Datadog that a self test was performed +func ReportSelfTest(sender EventSender, statsdClient statsd.ClientInterface, success []string, fails []string) { + // send metric with number of success and fails + tags := []string{ + fmt.Sprintf("success:%d", len(success)), + fmt.Sprintf("fails:%d", len(fails)), + } + if err := statsdClient.Count(metrics.MetricSelfTest, 1, tags, 1.0); err != nil { + log.Error(fmt.Errorf("failed to send self_test metric: %w", err)) + } + + // send the custom event with the list of succeed and failed self tests + rule, event := NewSelfTestEvent(success, fails) + sender.SendEvent(rule, event, func() []string { return nil }, "") +} diff --git a/pkg/security/module/self_tests_easyjson.go b/pkg/security/module/self_tests_easyjson.go new file mode 100644 index 00000000000000..d391ca3c1fd65e --- /dev/null +++ b/pkg/security/module/self_tests_easyjson.go @@ -0,0 +1,151 @@ +// Code generated by easyjson for marshaling/unmarshaling. DO NOT EDIT. + +package module + +import ( + json "encoding/json" + easyjson "github.com/mailru/easyjson" + jlexer "github.com/mailru/easyjson/jlexer" + jwriter "github.com/mailru/easyjson/jwriter" +) + +// suppress unused package warning +var ( + _ *json.RawMessage + _ *jlexer.Lexer + _ *jwriter.Writer + _ easyjson.Marshaler +) + +func easyjsonF0077844DecodeGithubComDataDogDatadogAgentPkgSecurityModule(in *jlexer.Lexer, out *SelfTestEvent) { + isTopLevel := in.IsStart() + if in.IsNull() { + if isTopLevel { + in.Consumed() + } + in.Skip() + return + } + in.Delim('{') + for !in.IsDelim('}') { + key := in.UnsafeFieldName(false) + in.WantColon() + if in.IsNull() { + in.Skip() + in.WantComma() + continue + } + switch key { + case "date": + if data := in.Raw(); in.Ok() { + in.AddError((out.Timestamp).UnmarshalJSON(data)) + } + case "succeeded_tests": + if in.IsNull() { + in.Skip() + out.Success = nil + } else { + in.Delim('[') + if out.Success == nil { + if !in.IsDelim(']') { + out.Success = make([]string, 0, 4) + } else { + out.Success = []string{} + } + } else { + out.Success = (out.Success)[:0] + } + for !in.IsDelim(']') { + var v1 string + v1 = string(in.String()) + out.Success = append(out.Success, v1) + in.WantComma() + } + in.Delim(']') + } + case "failed_tests": + if in.IsNull() { + in.Skip() + out.Fails = nil + } else { + in.Delim('[') + if out.Fails == nil { + if !in.IsDelim(']') { + out.Fails = make([]string, 0, 4) + } else { + out.Fails = []string{} + } + } else { + out.Fails = (out.Fails)[:0] + } + for !in.IsDelim(']') { + var v2 string + v2 = string(in.String()) + out.Fails = append(out.Fails, v2) + in.WantComma() + } + in.Delim(']') + } + default: + in.SkipRecursive() + } + in.WantComma() + } + in.Delim('}') + if isTopLevel { + in.Consumed() + } +} +func easyjsonF0077844EncodeGithubComDataDogDatadogAgentPkgSecurityModule(out *jwriter.Writer, in SelfTestEvent) { + out.RawByte('{') + first := true + _ = first + { + const prefix string = ",\"date\":" + out.RawString(prefix[1:]) + out.Raw((in.Timestamp).MarshalJSON()) + } + { + const prefix string = ",\"succeeded_tests\":" + out.RawString(prefix) + if in.Success == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { + out.RawString("null") + } else { + out.RawByte('[') + for v3, v4 := range in.Success { + if v3 > 0 { + out.RawByte(',') + } + out.String(string(v4)) + } + out.RawByte(']') + } + } + { + const prefix string = ",\"failed_tests\":" + out.RawString(prefix) + if in.Fails == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { + out.RawString("null") + } else { + out.RawByte('[') + for v5, v6 := range in.Fails { + if v5 > 0 { + out.RawByte(',') + } + out.String(string(v6)) + } + out.RawByte(']') + } + } + out.RawByte('}') +} + +// MarshalEasyJSON supports easyjson.Marshaler interface +func (v SelfTestEvent) MarshalEasyJSON(w *jwriter.Writer) { + easyjsonF0077844EncodeGithubComDataDogDatadogAgentPkgSecurityModule(w, v) +} + +// UnmarshalEasyJSON supports easyjson.Unmarshaler interface +func (v *SelfTestEvent) UnmarshalEasyJSON(l *jlexer.Lexer) { + easyjsonF0077844DecodeGithubComDataDogDatadogAgentPkgSecurityModule(l, v) +} diff --git a/pkg/security/module/server.go b/pkg/security/module/server.go index 1b919992e2ba3d..f63299dc52f126 100644 --- a/pkg/security/module/server.go +++ b/pkg/security/module/server.go @@ -19,6 +19,7 @@ import ( "github.com/DataDog/datadog-go/v5/statsd" easyjson "github.com/mailru/easyjson" + jwriter "github.com/mailru/easyjson/jwriter" "go.uber.org/atomic" "golang.org/x/time/rate" @@ -439,7 +440,7 @@ func (a *APIServer) SendEvent(rule *rules.Rule, event Event, extTagsCb func() [] ruleEvent.AgentContext.PolicyVersion = policy.Version } - probeJSON, err := json.Marshal(event) + probeJSON, err := marshalEvent(event, a.probe) if err != nil { seclog.Errorf("failed to marshal event: %v", err) return @@ -477,6 +478,22 @@ func (a *APIServer) SendEvent(rule *rules.Rule, event Event, extTagsCb func() [] a.enqueue(msg) } +func marshalEvent(event Event, probe *sprobe.Probe) ([]byte, error) { + if ev, ok := event.(*model.Event); ok { + return sprobe.MarshalEvent(ev, probe) + } + + if m, ok := event.(easyjson.Marshaler); ok { + w := &jwriter.Writer{ + Flags: jwriter.NilSliceAsEmpty | jwriter.NilMapAsEmpty, + } + m.MarshalEasyJSON(w) + return w.BuildBytes() + } + + return json.Marshal(event) +} + // expireEvent updates the count of expired messages for the appropriate rule func (a *APIServer) expireEvent(msg *api.SecurityEventMessage) { a.expiredEventsLock.RLock() diff --git a/pkg/security/probe/accessors.go b/pkg/security/probe/accessors.go deleted file mode 100644 index 3d824571203315..00000000000000 --- a/pkg/security/probe/accessors.go +++ /dev/null @@ -1,33004 +0,0 @@ -//go:build linux -// +build linux - -// Code generated - DO NOT EDIT. -package probe - -import ( - "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" - "github.com/DataDog/datadog-agent/pkg/security/secl/model" - _ "github.com/DataDog/datadog-agent/pkg/security/secl/model" - "net" - "reflect" - "unsafe" -) - -// suppress unused package warning -var ( - _ *unsafe.Pointer -) - -func (m *Model) GetIterator(field eval.Field) (eval.Iterator, error) { - switch field { - case "process.ancestors": - return &model.ProcessAncestorsIterator{}, nil - case "ptrace.tracee.ancestors": - return &model.ProcessAncestorsIterator{}, nil - case "signal.target.ancestors": - return &model.ProcessAncestorsIterator{}, nil - } - return nil, &eval.ErrIteratorNotSupported{Field: field} -} -func (m *Model) GetEventTypes() []eval.EventType { - return []eval.EventType{ - eval.EventType("bind"), - eval.EventType("bpf"), - eval.EventType("capset"), - eval.EventType("chmod"), - eval.EventType("chown"), - eval.EventType("dns"), - eval.EventType("exec"), - eval.EventType("exit"), - eval.EventType("link"), - eval.EventType("load_module"), - eval.EventType("mkdir"), - eval.EventType("mmap"), - eval.EventType("mount"), - eval.EventType("mprotect"), - eval.EventType("open"), - eval.EventType("ptrace"), - eval.EventType("removexattr"), - eval.EventType("rename"), - eval.EventType("rmdir"), - eval.EventType("selinux"), - eval.EventType("setgid"), - eval.EventType("setuid"), - eval.EventType("setxattr"), - eval.EventType("signal"), - eval.EventType("splice"), - eval.EventType("unlink"), - eval.EventType("unload_module"), - eval.EventType("utimes"), - } -} -func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Evaluator, error) { - switch field { - case "async": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Async - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bind.addr.family": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Bind.AddrFamily) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bind.addr.ip": - return &eval.CIDREvaluator{ - EvalFnc: func(ctx *eval.Context) net.IPNet { - return (*Event)(ctx.Object).Bind.Addr.IPNet - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bind.addr.port": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Bind.Addr.Port) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bind.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Bind.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bpf.cmd": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.Cmd) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bpf.map.name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).BPF.Map.Name - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bpf.map.type": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.Map.Type) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bpf.prog.attach_type": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.Program.AttachType) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bpf.prog.helpers": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - result := make([]int, len((*Event)(ctx.Object).ResolveHelpers(&(*Event)(ctx.Object).BPF.Program))) - for i, v := range (*Event)(ctx.Object).ResolveHelpers(&(*Event)(ctx.Object).BPF.Program) { - result[i] = int(v) - } - return result - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "bpf.prog.name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).BPF.Program.Name - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bpf.prog.tag": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).BPF.Program.Tag - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bpf.prog.type": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.Program.Type) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bpf.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "capset.cap_effective": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Capset.CapEffective) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "capset.cap_permitted": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Capset.CapPermitted) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.destination.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.destination.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Chmod.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chmod.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Chmod.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chmod.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Chmod.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chmod.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Chmod.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chmod.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Chmod.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chmod.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Chmod.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chmod.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Chmod.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chmod.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Chmod.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chmod.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Chmod.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chmod.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.destination.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.destination.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveChownGID(&(*Event)(ctx.Object).Chown) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.destination.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.destination.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveChownUID(&(*Event)(ctx.Object).Chown) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Chown.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Chown.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Chown.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Chown.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Chown.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Chown.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Chown.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Chown.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Chown.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "container.id": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveContainerID(&(*Event)(ctx.Object).ContainerContext) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "container.tags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveContainerTags(&(*Event)(ctx.Object).ContainerContext) - }, - Field: field, - Weight: 9999 * eval.HandlerWeight, - }, nil - case "dns.id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.ID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "dns.question.class": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.Class) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "dns.question.count": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.Count) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "dns.question.length": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.Size) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "dns.question.name": - return &eval.StringEvaluator{ - OpOverrides: eval.DNSNameCmp, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).DNS.Name - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "dns.question.name.length": - return &eval.IntEvaluator{ - OpOverrides: eval.DNSNameCmp, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).DNS.Name) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "dns.question.type": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.Type) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.args": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgs((*Event)(ctx.Object).Exec.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "exec.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsFlags((*Event)(ctx.Object).Exec.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsOptions((*Event)(ctx.Object).Exec.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.args_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessArgsTruncated((*Event)(ctx.Object).Exec.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgv((*Event)(ctx.Object).Exec.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "exec.argv0": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgv0((*Event)(ctx.Object).Exec.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "exec.cap_effective": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.CapEffective) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.cap_permitted": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.CapPermitted) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.comm": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Comm - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.container.id": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.ContainerID - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.cookie": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Cookie) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.created_at": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveProcessCreatedAt((*Event)(ctx.Object).Exec.Process)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.egid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.EGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.egroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.EGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvp((*Event)(ctx.Object).Exec.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvs((*Event)(ctx.Object).Exec.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.envs_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessEnvsTruncated((*Event)(ctx.Object).Exec.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.euid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.EUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.euser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.EUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Exec.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Exec.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Exec.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Exec.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Exec.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Exec.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Exec.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Exec.Process.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Exec.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.fsgid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.FSGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.fsgroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.FSGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.fsuid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.FSUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.fsuser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.FSUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.Group - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.interpreter.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.interpreter.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.interpreter.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.interpreter.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.interpreter.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.interpreter.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.interpreter.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.interpreter.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.interpreter.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.interpreter.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.interpreter.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.interpreter.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.interpreter.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.interpreter.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.interpreter.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.interpreter.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.is_kworker": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exec.Process.PIDContext.IsKworker - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.is_thread": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exec.Process.IsThread - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.pid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.PIDContext.Pid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.ppid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.PPid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.tid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.PIDContext.Tid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.tty_name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.TTYName - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.User - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.args": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgs((*Event)(ctx.Object).Exit.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "exit.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsFlags((*Event)(ctx.Object).Exit.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsOptions((*Event)(ctx.Object).Exit.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.args_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessArgsTruncated((*Event)(ctx.Object).Exit.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgv((*Event)(ctx.Object).Exit.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "exit.argv0": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgv0((*Event)(ctx.Object).Exit.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "exit.cap_effective": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.CapEffective) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.cap_permitted": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.CapPermitted) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.cause": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Cause) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.code": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Code) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.comm": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Comm - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.container.id": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.ContainerID - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.cookie": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Cookie) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.created_at": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveProcessCreatedAt((*Event)(ctx.Object).Exit.Process)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.egid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.EGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.egroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.EGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvp((*Event)(ctx.Object).Exit.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvs((*Event)(ctx.Object).Exit.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.envs_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessEnvsTruncated((*Event)(ctx.Object).Exit.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.euid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.EUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.euser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.EUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Exit.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Exit.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Exit.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Exit.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Exit.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Exit.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Exit.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Exit.Process.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Exit.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.fsgid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.FSGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.fsgroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.FSGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.fsuid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.FSUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.fsuser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.FSUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.Group - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.interpreter.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.interpreter.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.interpreter.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.interpreter.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.interpreter.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.interpreter.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.interpreter.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.interpreter.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.interpreter.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.interpreter.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.interpreter.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.interpreter.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.interpreter.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.interpreter.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.interpreter.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.interpreter.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.is_kworker": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exit.Process.PIDContext.IsKworker - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.is_thread": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exit.Process.IsThread - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.pid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.PIDContext.Pid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.ppid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.PPid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.tid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.PIDContext.Tid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.tty_name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.TTYName - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.User - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.destination.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.destination.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Link.Target) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.destination.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.destination.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Link.Target.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.destination.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Link.Target.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.destination.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.destination.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.destination.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.destination.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.destination.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Link.Target) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.destination.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Link.Target)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.destination.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Link.Target) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.destination.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Link.Target)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.destination.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Link.Target.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.destination.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.destination.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Link.Target.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Link.Source) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Link.Source.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Link.Source.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Link.Source) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Link.Source)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Link.Source) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Link.Source)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Link.Source.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Link.Source.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).LoadModule.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "load_module.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).LoadModule.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "load_module.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).LoadModule.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "load_module.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).LoadModule.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "load_module.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).LoadModule.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "load_module.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).LoadModule.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "load_module.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).LoadModule.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "load_module.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).LoadModule.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "load_module.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).LoadModule.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "load_module.loaded_from_memory": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).LoadModule.LoadedFromMemory - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).LoadModule.Name - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.destination.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.destination.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Mkdir.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mkdir.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Mkdir.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mkdir.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Mkdir.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mkdir.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Mkdir.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mkdir.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Mkdir.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mkdir.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Mkdir.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mkdir.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Mkdir.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mkdir.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Mkdir.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mkdir.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Mkdir.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mkdir.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).MMap.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mmap.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).MMap.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mmap.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).MMap.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mmap.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).MMap.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mmap.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).MMap.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mmap.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).MMap.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mmap.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).MMap.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mmap.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).MMap.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mmap.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).MMap.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mmap.flags": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return (*Event)(ctx.Object).MMap.Flags - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.protection": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return (*Event)(ctx.Object).MMap.Protection - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mount.fs_type": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Mount.Mount.FSType - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mount.mountpoint.path": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveMountPointPath(&(*Event)(ctx.Object).Mount) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mount.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mount.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mount.source.path": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveMountSourcePath(&(*Event)(ctx.Object).Mount) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mprotect.req_protection": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return (*Event)(ctx.Object).MProtect.ReqProtection - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mprotect.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MProtect.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mprotect.vm_protection": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return (*Event)(ctx.Object).MProtect.VMProtection - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "network.destination.ip": - return &eval.CIDREvaluator{ - EvalFnc: func(ctx *eval.Context) net.IPNet { - return (*Event)(ctx.Object).NetworkContext.Destination.IPNet - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "network.destination.port": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.Destination.Port) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "network.device.ifindex": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.Device.IfIndex) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "network.device.ifname": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveNetworkDeviceIfName(&(*Event)(ctx.Object).NetworkContext.Device) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "network.l3_protocol": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.L3Protocol) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "network.l4_protocol": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.L4Protocol) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "network.size": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.Size) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "network.source.ip": - return &eval.CIDREvaluator{ - EvalFnc: func(ctx *eval.Context) net.IPNet { - return (*Event)(ctx.Object).NetworkContext.Source.IPNet - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "network.source.port": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.Source.Port) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.file.destination.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Open.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "open.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Open.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "open.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Open.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "open.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Open.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "open.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Open.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "open.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Open.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "open.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Open.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "open.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Open.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "open.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Open.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "open.flags": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.Flags) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.ancestors.args": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgs(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: 100 * eval.IteratorWeight, - }, nil - case "process.ancestors.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgsFlags(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgsOptions(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.args_truncated": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgsTruncated(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgv(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: 100 * eval.IteratorWeight, - }, nil - case "process.ancestors.argv0": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgv0(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: 100 * eval.IteratorWeight, - }, nil - case "process.ancestors.cap_effective": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.CapEffective) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.cap_permitted": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.CapPermitted) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.comm": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Comm - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.container.id": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.ContainerID - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.cookie": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Cookie) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.created_at": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int((*Event)(ctx.Object).ResolveProcessCreatedAt(&element.ProcessContext.Process)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.egid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.EGID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.egroup": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.EGroup - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessEnvp(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessEnvs(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.envs_truncated": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessEnvsTruncated(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.euid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.EUID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.euser": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.EUser - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.change_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.CTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.filesystem": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.gid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.GID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.group": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.in_upper_layer": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, false) - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.inode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.Inode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.mode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.modification_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.MTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.mount_id": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.MountID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.name": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.name.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.path": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.path.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.rights": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.FileEvent.FileFields)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.uid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.UID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.user": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.fsgid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.FSGID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.fsgroup": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.FSGroup - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.fsuid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.FSUID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.fsuser": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.FSUser - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.gid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.GID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.group": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.Group - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.change_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.filesystem": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.gid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.group": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.in_upper_layer": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, false) - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.inode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.mode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.modification_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.mount_id": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.name": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.name.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.path": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.path.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.rights": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.uid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.user": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.is_kworker": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.PIDContext.IsKworker - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.is_thread": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.IsThread - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.pid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.PIDContext.Pid) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.ppid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.PPid) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.tid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.PIDContext.Tid) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.tty_name": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.TTYName - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.uid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.UID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.user": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.User - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.args": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgs(&(*Event)(ctx.Object).ProcessContext.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "process.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsFlags(&(*Event)(ctx.Object).ProcessContext.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsOptions(&(*Event)(ctx.Object).ProcessContext.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.args_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessArgsTruncated(&(*Event)(ctx.Object).ProcessContext.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgv(&(*Event)(ctx.Object).ProcessContext.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "process.argv0": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgv0(&(*Event)(ctx.Object).ProcessContext.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "process.cap_effective": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.CapEffective) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.cap_permitted": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.CapPermitted) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.comm": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Comm - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.container.id": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.ContainerID - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.cookie": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Cookie) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.created_at": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveProcessCreatedAt(&(*Event)(ctx.Object).ProcessContext.Process)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.egid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.EGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.egroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.EGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvp(&(*Event)(ctx.Object).ProcessContext.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvs(&(*Event)(ctx.Object).ProcessContext.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.envs_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessEnvsTruncated(&(*Event)(ctx.Object).ProcessContext.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.euid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.EUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.euser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.EUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).ProcessContext.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).ProcessContext.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).ProcessContext.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).ProcessContext.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).ProcessContext.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.fsgid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.FSGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.fsgroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.FSGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.fsuid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.FSUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.fsuser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.FSUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.Group - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.interpreter.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.interpreter.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.interpreter.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.interpreter.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.interpreter.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.interpreter.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.interpreter.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.interpreter.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.interpreter.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.interpreter.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.interpreter.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.interpreter.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.interpreter.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.interpreter.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.interpreter.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.interpreter.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.is_kworker": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ProcessContext.Process.PIDContext.IsKworker - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.is_thread": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ProcessContext.Process.IsThread - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.args": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveProcessArgs((*Event)(ctx.Object).ProcessContext.Parent) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "process.parent.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessArgsFlags((*Event)(ctx.Object).ProcessContext.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessArgsOptions((*Event)(ctx.Object).ProcessContext.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.args_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return false - } - return (*Event)(ctx.Object).ResolveProcessArgsTruncated((*Event)(ctx.Object).ProcessContext.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessArgv((*Event)(ctx.Object).ProcessContext.Parent) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "process.parent.argv0": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveProcessArgv0((*Event)(ctx.Object).ProcessContext.Parent) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "process.parent.cap_effective": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.CapEffective) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.cap_permitted": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.CapPermitted) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.comm": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ProcessContext.Parent.Comm - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.container.id": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ProcessContext.Parent.ContainerID - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.cookie": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.Cookie) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.created_at": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ResolveProcessCreatedAt((*Event)(ctx.Object).ProcessContext.Parent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.egid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.EGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.egroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.EGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessEnvp((*Event)(ctx.Object).ProcessContext.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessEnvs((*Event)(ctx.Object).ProcessContext.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.envs_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return false - } - return (*Event)(ctx.Object).ResolveProcessEnvsTruncated((*Event)(ctx.Object).ProcessContext.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.euid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.EUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.euser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.EUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).ProcessContext.Parent.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return false - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).ProcessContext.Parent.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).ProcessContext.Parent.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).ProcessContext.Parent.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).ProcessContext.Parent.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.fsgid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.FSGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.fsgroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.FSGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.fsuid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.FSUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.fsuser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.FSUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.Group - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.interpreter.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.interpreter.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.interpreter.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.interpreter.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.interpreter.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return false - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.interpreter.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.interpreter.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.interpreter.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.interpreter.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.interpreter.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.interpreter.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.interpreter.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.interpreter.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.interpreter.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.interpreter.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.interpreter.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.is_kworker": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return false - } - return (*Event)(ctx.Object).ProcessContext.Parent.PIDContext.IsKworker - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.is_thread": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return false - } - return (*Event)(ctx.Object).ProcessContext.Parent.IsThread - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.pid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.PIDContext.Pid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.ppid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.PPid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.tid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.PIDContext.Tid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.tty_name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ProcessContext.Parent.TTYName - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.User - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.pid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.PIDContext.Pid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.ppid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.PPid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.tid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.PIDContext.Tid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.tty_name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.TTYName - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.User - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.request": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Request) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.ancestors.args": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgs(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: 100 * eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgsFlags(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgsOptions(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.args_truncated": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgsTruncated(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgv(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: 100 * eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.argv0": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgv0(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: 100 * eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.cap_effective": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.CapEffective) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.cap_permitted": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.CapPermitted) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.comm": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Comm - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.container.id": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.ContainerID - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.cookie": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Cookie) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.created_at": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int((*Event)(ctx.Object).ResolveProcessCreatedAt(&element.ProcessContext.Process)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.egid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.EGID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.egroup": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.EGroup - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessEnvp(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessEnvs(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.envs_truncated": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessEnvsTruncated(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.euid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.EUID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.euser": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.EUser - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.change_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.CTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.filesystem": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.gid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.GID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.group": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.in_upper_layer": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, false) - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.inode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.Inode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.mode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.modification_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.MTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.mount_id": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.MountID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.name": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.name.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.path": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.path.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.rights": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.FileEvent.FileFields)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.uid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.UID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.user": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.fsgid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.FSGID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.fsgroup": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.FSGroup - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.fsuid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.FSUID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.fsuser": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.FSUser - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.gid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.GID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.group": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.Group - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.change_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.filesystem": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.gid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.group": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.in_upper_layer": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, false) - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.inode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.mode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.modification_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.mount_id": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.name": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.name.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.path": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.path.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.rights": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.uid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.user": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.is_kworker": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.PIDContext.IsKworker - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.is_thread": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.IsThread - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.pid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.PIDContext.Pid) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.ppid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.PPid) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.tid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.PIDContext.Tid) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.tty_name": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.TTYName - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.uid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.UID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.user": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.User - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.args": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgs(&(*Event)(ctx.Object).PTrace.Tracee.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "ptrace.tracee.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsFlags(&(*Event)(ctx.Object).PTrace.Tracee.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsOptions(&(*Event)(ctx.Object).PTrace.Tracee.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.args_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessArgsTruncated(&(*Event)(ctx.Object).PTrace.Tracee.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgv(&(*Event)(ctx.Object).PTrace.Tracee.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "ptrace.tracee.argv0": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgv0(&(*Event)(ctx.Object).PTrace.Tracee.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "ptrace.tracee.cap_effective": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.CapEffective) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.cap_permitted": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.CapPermitted) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.comm": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Comm - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.container.id": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.ContainerID - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.cookie": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Cookie) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.created_at": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveProcessCreatedAt(&(*Event)(ctx.Object).PTrace.Tracee.Process)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.egid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.EGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.egroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.EGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvp(&(*Event)(ctx.Object).PTrace.Tracee.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvs(&(*Event)(ctx.Object).PTrace.Tracee.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.envs_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessEnvsTruncated(&(*Event)(ctx.Object).PTrace.Tracee.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.euid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.EUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.euser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.EUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.fsgid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.FSGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.fsgroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.FSGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.fsuid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.FSUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.fsuser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.FSUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.Group - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.interpreter.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.interpreter.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.interpreter.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.interpreter.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.interpreter.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.interpreter.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.interpreter.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.interpreter.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.interpreter.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.interpreter.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.interpreter.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.interpreter.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.interpreter.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.interpreter.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.interpreter.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.interpreter.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.is_kworker": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).PTrace.Tracee.Process.PIDContext.IsKworker - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.is_thread": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).PTrace.Tracee.Process.IsThread - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.args": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveProcessArgs((*Event)(ctx.Object).PTrace.Tracee.Parent) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessArgsFlags((*Event)(ctx.Object).PTrace.Tracee.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessArgsOptions((*Event)(ctx.Object).PTrace.Tracee.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.args_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return false - } - return (*Event)(ctx.Object).ResolveProcessArgsTruncated((*Event)(ctx.Object).PTrace.Tracee.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessArgv((*Event)(ctx.Object).PTrace.Tracee.Parent) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.argv0": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveProcessArgv0((*Event)(ctx.Object).PTrace.Tracee.Parent) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.cap_effective": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.CapEffective) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.cap_permitted": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.CapPermitted) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.comm": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Comm - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.container.id": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.ContainerID - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.cookie": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Cookie) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.created_at": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ResolveProcessCreatedAt((*Event)(ctx.Object).PTrace.Tracee.Parent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.egid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.EGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.egroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.EGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessEnvp((*Event)(ctx.Object).PTrace.Tracee.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessEnvs((*Event)(ctx.Object).PTrace.Tracee.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.envs_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return false - } - return (*Event)(ctx.Object).ResolveProcessEnvsTruncated((*Event)(ctx.Object).PTrace.Tracee.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.euid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.EUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.euser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.EUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return false - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.fsgid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.FSGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.fsgroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.FSGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.fsuid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.FSUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.fsuser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.FSUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.Group - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return false - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.is_kworker": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return false - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.PIDContext.IsKworker - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.is_thread": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return false - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.IsThread - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.pid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.PIDContext.Pid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.ppid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.PPid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.tid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.PIDContext.Tid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.tty_name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.TTYName - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.User - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.pid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.PIDContext.Pid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.ppid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.PPid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.tid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.PIDContext.Tid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.tty_name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.TTYName - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.User - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "removexattr.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "removexattr.file.destination.name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveXAttrName(&(*Event)(ctx.Object).RemoveXAttr) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.destination.namespace": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveXAttrNamespace(&(*Event)(ctx.Object).RemoveXAttr) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).RemoveXAttr.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "removexattr.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).RemoveXAttr.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).RemoveXAttr.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "removexattr.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "removexattr.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "removexattr.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "removexattr.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).RemoveXAttr.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).RemoveXAttr.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).RemoveXAttr.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).RemoveXAttr.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).RemoveXAttr.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "removexattr.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).RemoveXAttr.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.destination.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.destination.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Rename.New) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.destination.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.destination.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Rename.New.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.destination.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Rename.New.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.destination.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.destination.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.destination.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.destination.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.destination.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Rename.New) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.destination.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Rename.New)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.destination.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Rename.New) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.destination.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Rename.New)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.destination.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Rename.New.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.destination.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.destination.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Rename.New.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Rename.Old) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Rename.Old.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Rename.Old.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Rename.Old) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Rename.Old)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Rename.Old) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Rename.Old)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Rename.Old.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Rename.Old.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rmdir.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rmdir.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Rmdir.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rmdir.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rmdir.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Rmdir.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rmdir.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Rmdir.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rmdir.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rmdir.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rmdir.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rmdir.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rmdir.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Rmdir.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rmdir.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Rmdir.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rmdir.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Rmdir.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rmdir.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Rmdir.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rmdir.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Rmdir.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rmdir.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rmdir.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Rmdir.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rmdir.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "selinux.bool.name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveSELinuxBoolName(&(*Event)(ctx.Object).SELinux) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "selinux.bool.state": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SELinux.BoolChangeValue - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "selinux.bool_commit.state": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).SELinux.BoolCommitValue - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "selinux.enforce.status": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SELinux.EnforceStatus - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setgid.egid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetGID.EGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setgid.egroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveSetgidEGroup(&(*Event)(ctx.Object).SetGID) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setgid.fsgid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetGID.FSGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setgid.fsgroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveSetgidFSGroup(&(*Event)(ctx.Object).SetGID) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setgid.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetGID.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setgid.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveSetgidGroup(&(*Event)(ctx.Object).SetGID) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setuid.euid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetUID.EUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setuid.euser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveSetuidEUser(&(*Event)(ctx.Object).SetUID) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setuid.fsuid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetUID.FSUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setuid.fsuser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveSetuidFSUser(&(*Event)(ctx.Object).SetUID) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setuid.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetUID.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setuid.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveSetuidUser(&(*Event)(ctx.Object).SetUID) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setxattr.file.destination.name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveXAttrName(&(*Event)(ctx.Object).SetXAttr) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.destination.namespace": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveXAttrNamespace(&(*Event)(ctx.Object).SetXAttr) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).SetXAttr.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setxattr.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).SetXAttr.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).SetXAttr.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setxattr.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setxattr.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setxattr.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setxattr.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).SetXAttr.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).SetXAttr.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).SetXAttr.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).SetXAttr.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).SetXAttr.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setxattr.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).SetXAttr.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.pid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.PID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.ancestors.args": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgs(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: 100 * eval.IteratorWeight, - }, nil - case "signal.target.ancestors.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgsFlags(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgsOptions(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.args_truncated": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgsTruncated(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgv(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: 100 * eval.IteratorWeight, - }, nil - case "signal.target.ancestors.argv0": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgv0(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: 100 * eval.IteratorWeight, - }, nil - case "signal.target.ancestors.cap_effective": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.CapEffective) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.cap_permitted": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.CapPermitted) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.comm": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Comm - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.container.id": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.ContainerID - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.cookie": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Cookie) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.created_at": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int((*Event)(ctx.Object).ResolveProcessCreatedAt(&element.ProcessContext.Process)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.egid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.EGID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.egroup": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.EGroup - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessEnvp(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessEnvs(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.envs_truncated": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessEnvsTruncated(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.euid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.EUID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.euser": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.EUser - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.change_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.CTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.filesystem": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.gid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.GID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.group": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.in_upper_layer": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, false) - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.inode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.Inode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.mode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.modification_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.MTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.mount_id": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.MountID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.name": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.name.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.path": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.path.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.rights": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.FileEvent.FileFields)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.uid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.UID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.user": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.fsgid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.FSGID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.fsgroup": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.FSGroup - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.fsuid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.FSUID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.fsuser": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.FSUser - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.gid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.GID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.group": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.Group - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.change_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.filesystem": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.gid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.group": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.in_upper_layer": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, false) - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.inode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.mode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.modification_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.mount_id": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.name": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.name.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.path": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.path.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.rights": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.uid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.user": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.is_kworker": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.PIDContext.IsKworker - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.is_thread": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.IsThread - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.pid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.PIDContext.Pid) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.ppid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.PPid) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.tid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.PIDContext.Tid) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.tty_name": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.TTYName - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.uid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.UID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.user": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.User - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.args": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgs(&(*Event)(ctx.Object).Signal.Target.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "signal.target.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsFlags(&(*Event)(ctx.Object).Signal.Target.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsOptions(&(*Event)(ctx.Object).Signal.Target.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.args_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessArgsTruncated(&(*Event)(ctx.Object).Signal.Target.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgv(&(*Event)(ctx.Object).Signal.Target.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "signal.target.argv0": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgv0(&(*Event)(ctx.Object).Signal.Target.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "signal.target.cap_effective": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.CapEffective) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.cap_permitted": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.CapPermitted) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.comm": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Comm - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.container.id": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.ContainerID - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.cookie": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Cookie) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.created_at": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveProcessCreatedAt(&(*Event)(ctx.Object).Signal.Target.Process)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.egid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.EGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.egroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.EGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvp(&(*Event)(ctx.Object).Signal.Target.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvs(&(*Event)(ctx.Object).Signal.Target.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.envs_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessEnvsTruncated(&(*Event)(ctx.Object).Signal.Target.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.euid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.EUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.euser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.EUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Signal.Target.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Signal.Target.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Signal.Target.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Signal.Target.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Signal.Target.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.fsgid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.FSGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.fsgroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.FSGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.fsuid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.FSUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.fsuser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.FSUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.Group - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.interpreter.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.interpreter.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.interpreter.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.interpreter.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.interpreter.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.interpreter.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.interpreter.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.interpreter.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.interpreter.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.interpreter.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.interpreter.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.interpreter.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.interpreter.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.interpreter.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.interpreter.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.interpreter.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.is_kworker": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Signal.Target.Process.PIDContext.IsKworker - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.is_thread": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Signal.Target.Process.IsThread - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.args": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveProcessArgs((*Event)(ctx.Object).Signal.Target.Parent) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "signal.target.parent.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessArgsFlags((*Event)(ctx.Object).Signal.Target.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessArgsOptions((*Event)(ctx.Object).Signal.Target.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.args_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return false - } - return (*Event)(ctx.Object).ResolveProcessArgsTruncated((*Event)(ctx.Object).Signal.Target.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessArgv((*Event)(ctx.Object).Signal.Target.Parent) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "signal.target.parent.argv0": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveProcessArgv0((*Event)(ctx.Object).Signal.Target.Parent) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "signal.target.parent.cap_effective": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.CapEffective) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.cap_permitted": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.CapPermitted) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.comm": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).Signal.Target.Parent.Comm - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.container.id": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).Signal.Target.Parent.ContainerID - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.cookie": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.Cookie) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.created_at": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ResolveProcessCreatedAt((*Event)(ctx.Object).Signal.Target.Parent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.egid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.EGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.egroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.EGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessEnvp((*Event)(ctx.Object).Signal.Target.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessEnvs((*Event)(ctx.Object).Signal.Target.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.envs_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return false - } - return (*Event)(ctx.Object).ResolveProcessEnvsTruncated((*Event)(ctx.Object).Signal.Target.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.euid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.EUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.euser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.EUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Signal.Target.Parent.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return false - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Signal.Target.Parent.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Signal.Target.Parent.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Signal.Target.Parent.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Signal.Target.Parent.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.fsgid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.FSGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.fsgroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.FSGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.fsuid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.FSUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.fsuser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.FSUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.Group - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.interpreter.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.interpreter.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.interpreter.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.interpreter.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.interpreter.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return false - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.interpreter.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.interpreter.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.interpreter.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.interpreter.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.interpreter.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.interpreter.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.interpreter.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.interpreter.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.interpreter.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.interpreter.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.interpreter.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.is_kworker": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return false - } - return (*Event)(ctx.Object).Signal.Target.Parent.PIDContext.IsKworker - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.is_thread": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return false - } - return (*Event)(ctx.Object).Signal.Target.Parent.IsThread - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.pid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.PIDContext.Pid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.ppid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.PPid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.tid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.PIDContext.Tid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.tty_name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).Signal.Target.Parent.TTYName - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.User - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.pid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.PIDContext.Pid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.ppid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.PPid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.tid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.PIDContext.Tid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.tty_name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.TTYName - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.User - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.type": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Type) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Splice.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "splice.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Splice.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "splice.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Splice.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "splice.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Splice.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "splice.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Splice.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "splice.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Splice.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "splice.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Splice.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "splice.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Splice.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "splice.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Splice.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "splice.pipe_entry_flag": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.PipeEntryFlag) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.pipe_exit_flag": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.PipeExitFlag) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unlink.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unlink.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Unlink.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "unlink.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unlink.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Unlink.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "unlink.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Unlink.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "unlink.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unlink.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unlink.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unlink.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unlink.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Unlink.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "unlink.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Unlink.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "unlink.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Unlink.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "unlink.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Unlink.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "unlink.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Unlink.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "unlink.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unlink.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Unlink.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "unlink.flags": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.Flags) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unlink.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unload_module.name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).UnloadModule.Name - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unload_module.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).UnloadModule.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "utimes.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "utimes.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Utimes.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "utimes.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "utimes.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Utimes.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "utimes.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Utimes.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "utimes.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "utimes.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "utimes.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "utimes.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "utimes.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Utimes.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "utimes.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Utimes.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "utimes.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Utimes.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "utimes.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Utimes.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "utimes.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Utimes.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "utimes.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "utimes.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Utimes.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "utimes.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - } - return nil, &eval.ErrFieldNotFound{Field: field} -} -func (e *Event) GetFields() []eval.Field { - return []eval.Field{ - "async", - "bind.addr.family", - "bind.addr.ip", - "bind.addr.port", - "bind.retval", - "bpf.cmd", - "bpf.map.name", - "bpf.map.type", - "bpf.prog.attach_type", - "bpf.prog.helpers", - "bpf.prog.name", - "bpf.prog.tag", - "bpf.prog.type", - "bpf.retval", - "capset.cap_effective", - "capset.cap_permitted", - "chmod.file.change_time", - "chmod.file.destination.mode", - "chmod.file.destination.rights", - "chmod.file.filesystem", - "chmod.file.gid", - "chmod.file.group", - "chmod.file.in_upper_layer", - "chmod.file.inode", - "chmod.file.mode", - "chmod.file.modification_time", - "chmod.file.mount_id", - "chmod.file.name", - "chmod.file.name.length", - "chmod.file.path", - "chmod.file.path.length", - "chmod.file.rights", - "chmod.file.uid", - "chmod.file.user", - "chmod.retval", - "chown.file.change_time", - "chown.file.destination.gid", - "chown.file.destination.group", - "chown.file.destination.uid", - "chown.file.destination.user", - "chown.file.filesystem", - "chown.file.gid", - "chown.file.group", - "chown.file.in_upper_layer", - "chown.file.inode", - "chown.file.mode", - "chown.file.modification_time", - "chown.file.mount_id", - "chown.file.name", - "chown.file.name.length", - "chown.file.path", - "chown.file.path.length", - "chown.file.rights", - "chown.file.uid", - "chown.file.user", - "chown.retval", - "container.id", - "container.tags", - "dns.id", - "dns.question.class", - "dns.question.count", - "dns.question.length", - "dns.question.name", - "dns.question.name.length", - "dns.question.type", - "exec.args", - "exec.args_flags", - "exec.args_options", - "exec.args_truncated", - "exec.argv", - "exec.argv0", - "exec.cap_effective", - "exec.cap_permitted", - "exec.comm", - "exec.container.id", - "exec.cookie", - "exec.created_at", - "exec.egid", - "exec.egroup", - "exec.envp", - "exec.envs", - "exec.envs_truncated", - "exec.euid", - "exec.euser", - "exec.file.change_time", - "exec.file.filesystem", - "exec.file.gid", - "exec.file.group", - "exec.file.in_upper_layer", - "exec.file.inode", - "exec.file.mode", - "exec.file.modification_time", - "exec.file.mount_id", - "exec.file.name", - "exec.file.name.length", - "exec.file.path", - "exec.file.path.length", - "exec.file.rights", - "exec.file.uid", - "exec.file.user", - "exec.fsgid", - "exec.fsgroup", - "exec.fsuid", - "exec.fsuser", - "exec.gid", - "exec.group", - "exec.interpreter.file.change_time", - "exec.interpreter.file.filesystem", - "exec.interpreter.file.gid", - "exec.interpreter.file.group", - "exec.interpreter.file.in_upper_layer", - "exec.interpreter.file.inode", - "exec.interpreter.file.mode", - "exec.interpreter.file.modification_time", - "exec.interpreter.file.mount_id", - "exec.interpreter.file.name", - "exec.interpreter.file.name.length", - "exec.interpreter.file.path", - "exec.interpreter.file.path.length", - "exec.interpreter.file.rights", - "exec.interpreter.file.uid", - "exec.interpreter.file.user", - "exec.is_kworker", - "exec.is_thread", - "exec.pid", - "exec.ppid", - "exec.tid", - "exec.tty_name", - "exec.uid", - "exec.user", - "exit.args", - "exit.args_flags", - "exit.args_options", - "exit.args_truncated", - "exit.argv", - "exit.argv0", - "exit.cap_effective", - "exit.cap_permitted", - "exit.cause", - "exit.code", - "exit.comm", - "exit.container.id", - "exit.cookie", - "exit.created_at", - "exit.egid", - "exit.egroup", - "exit.envp", - "exit.envs", - "exit.envs_truncated", - "exit.euid", - "exit.euser", - "exit.file.change_time", - "exit.file.filesystem", - "exit.file.gid", - "exit.file.group", - "exit.file.in_upper_layer", - "exit.file.inode", - "exit.file.mode", - "exit.file.modification_time", - "exit.file.mount_id", - "exit.file.name", - "exit.file.name.length", - "exit.file.path", - "exit.file.path.length", - "exit.file.rights", - "exit.file.uid", - "exit.file.user", - "exit.fsgid", - "exit.fsgroup", - "exit.fsuid", - "exit.fsuser", - "exit.gid", - "exit.group", - "exit.interpreter.file.change_time", - "exit.interpreter.file.filesystem", - "exit.interpreter.file.gid", - "exit.interpreter.file.group", - "exit.interpreter.file.in_upper_layer", - "exit.interpreter.file.inode", - "exit.interpreter.file.mode", - "exit.interpreter.file.modification_time", - "exit.interpreter.file.mount_id", - "exit.interpreter.file.name", - "exit.interpreter.file.name.length", - "exit.interpreter.file.path", - "exit.interpreter.file.path.length", - "exit.interpreter.file.rights", - "exit.interpreter.file.uid", - "exit.interpreter.file.user", - "exit.is_kworker", - "exit.is_thread", - "exit.pid", - "exit.ppid", - "exit.tid", - "exit.tty_name", - "exit.uid", - "exit.user", - "link.file.change_time", - "link.file.destination.change_time", - "link.file.destination.filesystem", - "link.file.destination.gid", - "link.file.destination.group", - "link.file.destination.in_upper_layer", - "link.file.destination.inode", - "link.file.destination.mode", - "link.file.destination.modification_time", - "link.file.destination.mount_id", - "link.file.destination.name", - "link.file.destination.name.length", - "link.file.destination.path", - "link.file.destination.path.length", - "link.file.destination.rights", - "link.file.destination.uid", - "link.file.destination.user", - "link.file.filesystem", - "link.file.gid", - "link.file.group", - "link.file.in_upper_layer", - "link.file.inode", - "link.file.mode", - "link.file.modification_time", - "link.file.mount_id", - "link.file.name", - "link.file.name.length", - "link.file.path", - "link.file.path.length", - "link.file.rights", - "link.file.uid", - "link.file.user", - "link.retval", - "load_module.file.change_time", - "load_module.file.filesystem", - "load_module.file.gid", - "load_module.file.group", - "load_module.file.in_upper_layer", - "load_module.file.inode", - "load_module.file.mode", - "load_module.file.modification_time", - "load_module.file.mount_id", - "load_module.file.name", - "load_module.file.name.length", - "load_module.file.path", - "load_module.file.path.length", - "load_module.file.rights", - "load_module.file.uid", - "load_module.file.user", - "load_module.loaded_from_memory", - "load_module.name", - "load_module.retval", - "mkdir.file.change_time", - "mkdir.file.destination.mode", - "mkdir.file.destination.rights", - "mkdir.file.filesystem", - "mkdir.file.gid", - "mkdir.file.group", - "mkdir.file.in_upper_layer", - "mkdir.file.inode", - "mkdir.file.mode", - "mkdir.file.modification_time", - "mkdir.file.mount_id", - "mkdir.file.name", - "mkdir.file.name.length", - "mkdir.file.path", - "mkdir.file.path.length", - "mkdir.file.rights", - "mkdir.file.uid", - "mkdir.file.user", - "mkdir.retval", - "mmap.file.change_time", - "mmap.file.filesystem", - "mmap.file.gid", - "mmap.file.group", - "mmap.file.in_upper_layer", - "mmap.file.inode", - "mmap.file.mode", - "mmap.file.modification_time", - "mmap.file.mount_id", - "mmap.file.name", - "mmap.file.name.length", - "mmap.file.path", - "mmap.file.path.length", - "mmap.file.rights", - "mmap.file.uid", - "mmap.file.user", - "mmap.flags", - "mmap.protection", - "mmap.retval", - "mount.fs_type", - "mount.mountpoint.path", - "mount.retval", - "mount.source.path", - "mprotect.req_protection", - "mprotect.retval", - "mprotect.vm_protection", - "network.destination.ip", - "network.destination.port", - "network.device.ifindex", - "network.device.ifname", - "network.l3_protocol", - "network.l4_protocol", - "network.size", - "network.source.ip", - "network.source.port", - "open.file.change_time", - "open.file.destination.mode", - "open.file.filesystem", - "open.file.gid", - "open.file.group", - "open.file.in_upper_layer", - "open.file.inode", - "open.file.mode", - "open.file.modification_time", - "open.file.mount_id", - "open.file.name", - "open.file.name.length", - "open.file.path", - "open.file.path.length", - "open.file.rights", - "open.file.uid", - "open.file.user", - "open.flags", - "open.retval", - "process.ancestors.args", - "process.ancestors.args_flags", - "process.ancestors.args_options", - "process.ancestors.args_truncated", - "process.ancestors.argv", - "process.ancestors.argv0", - "process.ancestors.cap_effective", - "process.ancestors.cap_permitted", - "process.ancestors.comm", - "process.ancestors.container.id", - "process.ancestors.cookie", - "process.ancestors.created_at", - "process.ancestors.egid", - "process.ancestors.egroup", - "process.ancestors.envp", - "process.ancestors.envs", - "process.ancestors.envs_truncated", - "process.ancestors.euid", - "process.ancestors.euser", - "process.ancestors.file.change_time", - "process.ancestors.file.filesystem", - "process.ancestors.file.gid", - "process.ancestors.file.group", - "process.ancestors.file.in_upper_layer", - "process.ancestors.file.inode", - "process.ancestors.file.mode", - "process.ancestors.file.modification_time", - "process.ancestors.file.mount_id", - "process.ancestors.file.name", - "process.ancestors.file.name.length", - "process.ancestors.file.path", - "process.ancestors.file.path.length", - "process.ancestors.file.rights", - "process.ancestors.file.uid", - "process.ancestors.file.user", - "process.ancestors.fsgid", - "process.ancestors.fsgroup", - "process.ancestors.fsuid", - "process.ancestors.fsuser", - "process.ancestors.gid", - "process.ancestors.group", - "process.ancestors.interpreter.file.change_time", - "process.ancestors.interpreter.file.filesystem", - "process.ancestors.interpreter.file.gid", - "process.ancestors.interpreter.file.group", - "process.ancestors.interpreter.file.in_upper_layer", - "process.ancestors.interpreter.file.inode", - "process.ancestors.interpreter.file.mode", - "process.ancestors.interpreter.file.modification_time", - "process.ancestors.interpreter.file.mount_id", - "process.ancestors.interpreter.file.name", - "process.ancestors.interpreter.file.name.length", - "process.ancestors.interpreter.file.path", - "process.ancestors.interpreter.file.path.length", - "process.ancestors.interpreter.file.rights", - "process.ancestors.interpreter.file.uid", - "process.ancestors.interpreter.file.user", - "process.ancestors.is_kworker", - "process.ancestors.is_thread", - "process.ancestors.pid", - "process.ancestors.ppid", - "process.ancestors.tid", - "process.ancestors.tty_name", - "process.ancestors.uid", - "process.ancestors.user", - "process.args", - "process.args_flags", - "process.args_options", - "process.args_truncated", - "process.argv", - "process.argv0", - "process.cap_effective", - "process.cap_permitted", - "process.comm", - "process.container.id", - "process.cookie", - "process.created_at", - "process.egid", - "process.egroup", - "process.envp", - "process.envs", - "process.envs_truncated", - "process.euid", - "process.euser", - "process.file.change_time", - "process.file.filesystem", - "process.file.gid", - "process.file.group", - "process.file.in_upper_layer", - "process.file.inode", - "process.file.mode", - "process.file.modification_time", - "process.file.mount_id", - "process.file.name", - "process.file.name.length", - "process.file.path", - "process.file.path.length", - "process.file.rights", - "process.file.uid", - "process.file.user", - "process.fsgid", - "process.fsgroup", - "process.fsuid", - "process.fsuser", - "process.gid", - "process.group", - "process.interpreter.file.change_time", - "process.interpreter.file.filesystem", - "process.interpreter.file.gid", - "process.interpreter.file.group", - "process.interpreter.file.in_upper_layer", - "process.interpreter.file.inode", - "process.interpreter.file.mode", - "process.interpreter.file.modification_time", - "process.interpreter.file.mount_id", - "process.interpreter.file.name", - "process.interpreter.file.name.length", - "process.interpreter.file.path", - "process.interpreter.file.path.length", - "process.interpreter.file.rights", - "process.interpreter.file.uid", - "process.interpreter.file.user", - "process.is_kworker", - "process.is_thread", - "process.parent.args", - "process.parent.args_flags", - "process.parent.args_options", - "process.parent.args_truncated", - "process.parent.argv", - "process.parent.argv0", - "process.parent.cap_effective", - "process.parent.cap_permitted", - "process.parent.comm", - "process.parent.container.id", - "process.parent.cookie", - "process.parent.created_at", - "process.parent.egid", - "process.parent.egroup", - "process.parent.envp", - "process.parent.envs", - "process.parent.envs_truncated", - "process.parent.euid", - "process.parent.euser", - "process.parent.file.change_time", - "process.parent.file.filesystem", - "process.parent.file.gid", - "process.parent.file.group", - "process.parent.file.in_upper_layer", - "process.parent.file.inode", - "process.parent.file.mode", - "process.parent.file.modification_time", - "process.parent.file.mount_id", - "process.parent.file.name", - "process.parent.file.name.length", - "process.parent.file.path", - "process.parent.file.path.length", - "process.parent.file.rights", - "process.parent.file.uid", - "process.parent.file.user", - "process.parent.fsgid", - "process.parent.fsgroup", - "process.parent.fsuid", - "process.parent.fsuser", - "process.parent.gid", - "process.parent.group", - "process.parent.interpreter.file.change_time", - "process.parent.interpreter.file.filesystem", - "process.parent.interpreter.file.gid", - "process.parent.interpreter.file.group", - "process.parent.interpreter.file.in_upper_layer", - "process.parent.interpreter.file.inode", - "process.parent.interpreter.file.mode", - "process.parent.interpreter.file.modification_time", - "process.parent.interpreter.file.mount_id", - "process.parent.interpreter.file.name", - "process.parent.interpreter.file.name.length", - "process.parent.interpreter.file.path", - "process.parent.interpreter.file.path.length", - "process.parent.interpreter.file.rights", - "process.parent.interpreter.file.uid", - "process.parent.interpreter.file.user", - "process.parent.is_kworker", - "process.parent.is_thread", - "process.parent.pid", - "process.parent.ppid", - "process.parent.tid", - "process.parent.tty_name", - "process.parent.uid", - "process.parent.user", - "process.pid", - "process.ppid", - "process.tid", - "process.tty_name", - "process.uid", - "process.user", - "ptrace.request", - "ptrace.retval", - "ptrace.tracee.ancestors.args", - "ptrace.tracee.ancestors.args_flags", - "ptrace.tracee.ancestors.args_options", - "ptrace.tracee.ancestors.args_truncated", - "ptrace.tracee.ancestors.argv", - "ptrace.tracee.ancestors.argv0", - "ptrace.tracee.ancestors.cap_effective", - "ptrace.tracee.ancestors.cap_permitted", - "ptrace.tracee.ancestors.comm", - "ptrace.tracee.ancestors.container.id", - "ptrace.tracee.ancestors.cookie", - "ptrace.tracee.ancestors.created_at", - "ptrace.tracee.ancestors.egid", - "ptrace.tracee.ancestors.egroup", - "ptrace.tracee.ancestors.envp", - "ptrace.tracee.ancestors.envs", - "ptrace.tracee.ancestors.envs_truncated", - "ptrace.tracee.ancestors.euid", - "ptrace.tracee.ancestors.euser", - "ptrace.tracee.ancestors.file.change_time", - "ptrace.tracee.ancestors.file.filesystem", - "ptrace.tracee.ancestors.file.gid", - "ptrace.tracee.ancestors.file.group", - "ptrace.tracee.ancestors.file.in_upper_layer", - "ptrace.tracee.ancestors.file.inode", - "ptrace.tracee.ancestors.file.mode", - "ptrace.tracee.ancestors.file.modification_time", - "ptrace.tracee.ancestors.file.mount_id", - "ptrace.tracee.ancestors.file.name", - "ptrace.tracee.ancestors.file.name.length", - "ptrace.tracee.ancestors.file.path", - "ptrace.tracee.ancestors.file.path.length", - "ptrace.tracee.ancestors.file.rights", - "ptrace.tracee.ancestors.file.uid", - "ptrace.tracee.ancestors.file.user", - "ptrace.tracee.ancestors.fsgid", - "ptrace.tracee.ancestors.fsgroup", - "ptrace.tracee.ancestors.fsuid", - "ptrace.tracee.ancestors.fsuser", - "ptrace.tracee.ancestors.gid", - "ptrace.tracee.ancestors.group", - "ptrace.tracee.ancestors.interpreter.file.change_time", - "ptrace.tracee.ancestors.interpreter.file.filesystem", - "ptrace.tracee.ancestors.interpreter.file.gid", - "ptrace.tracee.ancestors.interpreter.file.group", - "ptrace.tracee.ancestors.interpreter.file.in_upper_layer", - "ptrace.tracee.ancestors.interpreter.file.inode", - "ptrace.tracee.ancestors.interpreter.file.mode", - "ptrace.tracee.ancestors.interpreter.file.modification_time", - "ptrace.tracee.ancestors.interpreter.file.mount_id", - "ptrace.tracee.ancestors.interpreter.file.name", - "ptrace.tracee.ancestors.interpreter.file.name.length", - "ptrace.tracee.ancestors.interpreter.file.path", - "ptrace.tracee.ancestors.interpreter.file.path.length", - "ptrace.tracee.ancestors.interpreter.file.rights", - "ptrace.tracee.ancestors.interpreter.file.uid", - "ptrace.tracee.ancestors.interpreter.file.user", - "ptrace.tracee.ancestors.is_kworker", - "ptrace.tracee.ancestors.is_thread", - "ptrace.tracee.ancestors.pid", - "ptrace.tracee.ancestors.ppid", - "ptrace.tracee.ancestors.tid", - "ptrace.tracee.ancestors.tty_name", - "ptrace.tracee.ancestors.uid", - "ptrace.tracee.ancestors.user", - "ptrace.tracee.args", - "ptrace.tracee.args_flags", - "ptrace.tracee.args_options", - "ptrace.tracee.args_truncated", - "ptrace.tracee.argv", - "ptrace.tracee.argv0", - "ptrace.tracee.cap_effective", - "ptrace.tracee.cap_permitted", - "ptrace.tracee.comm", - "ptrace.tracee.container.id", - "ptrace.tracee.cookie", - "ptrace.tracee.created_at", - "ptrace.tracee.egid", - "ptrace.tracee.egroup", - "ptrace.tracee.envp", - "ptrace.tracee.envs", - "ptrace.tracee.envs_truncated", - "ptrace.tracee.euid", - "ptrace.tracee.euser", - "ptrace.tracee.file.change_time", - "ptrace.tracee.file.filesystem", - "ptrace.tracee.file.gid", - "ptrace.tracee.file.group", - "ptrace.tracee.file.in_upper_layer", - "ptrace.tracee.file.inode", - "ptrace.tracee.file.mode", - "ptrace.tracee.file.modification_time", - "ptrace.tracee.file.mount_id", - "ptrace.tracee.file.name", - "ptrace.tracee.file.name.length", - "ptrace.tracee.file.path", - "ptrace.tracee.file.path.length", - "ptrace.tracee.file.rights", - "ptrace.tracee.file.uid", - "ptrace.tracee.file.user", - "ptrace.tracee.fsgid", - "ptrace.tracee.fsgroup", - "ptrace.tracee.fsuid", - "ptrace.tracee.fsuser", - "ptrace.tracee.gid", - "ptrace.tracee.group", - "ptrace.tracee.interpreter.file.change_time", - "ptrace.tracee.interpreter.file.filesystem", - "ptrace.tracee.interpreter.file.gid", - "ptrace.tracee.interpreter.file.group", - "ptrace.tracee.interpreter.file.in_upper_layer", - "ptrace.tracee.interpreter.file.inode", - "ptrace.tracee.interpreter.file.mode", - "ptrace.tracee.interpreter.file.modification_time", - "ptrace.tracee.interpreter.file.mount_id", - "ptrace.tracee.interpreter.file.name", - "ptrace.tracee.interpreter.file.name.length", - "ptrace.tracee.interpreter.file.path", - "ptrace.tracee.interpreter.file.path.length", - "ptrace.tracee.interpreter.file.rights", - "ptrace.tracee.interpreter.file.uid", - "ptrace.tracee.interpreter.file.user", - "ptrace.tracee.is_kworker", - "ptrace.tracee.is_thread", - "ptrace.tracee.parent.args", - "ptrace.tracee.parent.args_flags", - "ptrace.tracee.parent.args_options", - "ptrace.tracee.parent.args_truncated", - "ptrace.tracee.parent.argv", - "ptrace.tracee.parent.argv0", - "ptrace.tracee.parent.cap_effective", - "ptrace.tracee.parent.cap_permitted", - "ptrace.tracee.parent.comm", - "ptrace.tracee.parent.container.id", - "ptrace.tracee.parent.cookie", - "ptrace.tracee.parent.created_at", - "ptrace.tracee.parent.egid", - "ptrace.tracee.parent.egroup", - "ptrace.tracee.parent.envp", - "ptrace.tracee.parent.envs", - "ptrace.tracee.parent.envs_truncated", - "ptrace.tracee.parent.euid", - "ptrace.tracee.parent.euser", - "ptrace.tracee.parent.file.change_time", - "ptrace.tracee.parent.file.filesystem", - "ptrace.tracee.parent.file.gid", - "ptrace.tracee.parent.file.group", - "ptrace.tracee.parent.file.in_upper_layer", - "ptrace.tracee.parent.file.inode", - "ptrace.tracee.parent.file.mode", - "ptrace.tracee.parent.file.modification_time", - "ptrace.tracee.parent.file.mount_id", - "ptrace.tracee.parent.file.name", - "ptrace.tracee.parent.file.name.length", - "ptrace.tracee.parent.file.path", - "ptrace.tracee.parent.file.path.length", - "ptrace.tracee.parent.file.rights", - "ptrace.tracee.parent.file.uid", - "ptrace.tracee.parent.file.user", - "ptrace.tracee.parent.fsgid", - "ptrace.tracee.parent.fsgroup", - "ptrace.tracee.parent.fsuid", - "ptrace.tracee.parent.fsuser", - "ptrace.tracee.parent.gid", - "ptrace.tracee.parent.group", - "ptrace.tracee.parent.interpreter.file.change_time", - "ptrace.tracee.parent.interpreter.file.filesystem", - "ptrace.tracee.parent.interpreter.file.gid", - "ptrace.tracee.parent.interpreter.file.group", - "ptrace.tracee.parent.interpreter.file.in_upper_layer", - "ptrace.tracee.parent.interpreter.file.inode", - "ptrace.tracee.parent.interpreter.file.mode", - "ptrace.tracee.parent.interpreter.file.modification_time", - "ptrace.tracee.parent.interpreter.file.mount_id", - "ptrace.tracee.parent.interpreter.file.name", - "ptrace.tracee.parent.interpreter.file.name.length", - "ptrace.tracee.parent.interpreter.file.path", - "ptrace.tracee.parent.interpreter.file.path.length", - "ptrace.tracee.parent.interpreter.file.rights", - "ptrace.tracee.parent.interpreter.file.uid", - "ptrace.tracee.parent.interpreter.file.user", - "ptrace.tracee.parent.is_kworker", - "ptrace.tracee.parent.is_thread", - "ptrace.tracee.parent.pid", - "ptrace.tracee.parent.ppid", - "ptrace.tracee.parent.tid", - "ptrace.tracee.parent.tty_name", - "ptrace.tracee.parent.uid", - "ptrace.tracee.parent.user", - "ptrace.tracee.pid", - "ptrace.tracee.ppid", - "ptrace.tracee.tid", - "ptrace.tracee.tty_name", - "ptrace.tracee.uid", - "ptrace.tracee.user", - "removexattr.file.change_time", - "removexattr.file.destination.name", - "removexattr.file.destination.namespace", - "removexattr.file.filesystem", - "removexattr.file.gid", - "removexattr.file.group", - "removexattr.file.in_upper_layer", - "removexattr.file.inode", - "removexattr.file.mode", - "removexattr.file.modification_time", - "removexattr.file.mount_id", - "removexattr.file.name", - "removexattr.file.name.length", - "removexattr.file.path", - "removexattr.file.path.length", - "removexattr.file.rights", - "removexattr.file.uid", - "removexattr.file.user", - "removexattr.retval", - "rename.file.change_time", - "rename.file.destination.change_time", - "rename.file.destination.filesystem", - "rename.file.destination.gid", - "rename.file.destination.group", - "rename.file.destination.in_upper_layer", - "rename.file.destination.inode", - "rename.file.destination.mode", - "rename.file.destination.modification_time", - "rename.file.destination.mount_id", - "rename.file.destination.name", - "rename.file.destination.name.length", - "rename.file.destination.path", - "rename.file.destination.path.length", - "rename.file.destination.rights", - "rename.file.destination.uid", - "rename.file.destination.user", - "rename.file.filesystem", - "rename.file.gid", - "rename.file.group", - "rename.file.in_upper_layer", - "rename.file.inode", - "rename.file.mode", - "rename.file.modification_time", - "rename.file.mount_id", - "rename.file.name", - "rename.file.name.length", - "rename.file.path", - "rename.file.path.length", - "rename.file.rights", - "rename.file.uid", - "rename.file.user", - "rename.retval", - "rmdir.file.change_time", - "rmdir.file.filesystem", - "rmdir.file.gid", - "rmdir.file.group", - "rmdir.file.in_upper_layer", - "rmdir.file.inode", - "rmdir.file.mode", - "rmdir.file.modification_time", - "rmdir.file.mount_id", - "rmdir.file.name", - "rmdir.file.name.length", - "rmdir.file.path", - "rmdir.file.path.length", - "rmdir.file.rights", - "rmdir.file.uid", - "rmdir.file.user", - "rmdir.retval", - "selinux.bool.name", - "selinux.bool.state", - "selinux.bool_commit.state", - "selinux.enforce.status", - "setgid.egid", - "setgid.egroup", - "setgid.fsgid", - "setgid.fsgroup", - "setgid.gid", - "setgid.group", - "setuid.euid", - "setuid.euser", - "setuid.fsuid", - "setuid.fsuser", - "setuid.uid", - "setuid.user", - "setxattr.file.change_time", - "setxattr.file.destination.name", - "setxattr.file.destination.namespace", - "setxattr.file.filesystem", - "setxattr.file.gid", - "setxattr.file.group", - "setxattr.file.in_upper_layer", - "setxattr.file.inode", - "setxattr.file.mode", - "setxattr.file.modification_time", - "setxattr.file.mount_id", - "setxattr.file.name", - "setxattr.file.name.length", - "setxattr.file.path", - "setxattr.file.path.length", - "setxattr.file.rights", - "setxattr.file.uid", - "setxattr.file.user", - "setxattr.retval", - "signal.pid", - "signal.retval", - "signal.target.ancestors.args", - "signal.target.ancestors.args_flags", - "signal.target.ancestors.args_options", - "signal.target.ancestors.args_truncated", - "signal.target.ancestors.argv", - "signal.target.ancestors.argv0", - "signal.target.ancestors.cap_effective", - "signal.target.ancestors.cap_permitted", - "signal.target.ancestors.comm", - "signal.target.ancestors.container.id", - "signal.target.ancestors.cookie", - "signal.target.ancestors.created_at", - "signal.target.ancestors.egid", - "signal.target.ancestors.egroup", - "signal.target.ancestors.envp", - "signal.target.ancestors.envs", - "signal.target.ancestors.envs_truncated", - "signal.target.ancestors.euid", - "signal.target.ancestors.euser", - "signal.target.ancestors.file.change_time", - "signal.target.ancestors.file.filesystem", - "signal.target.ancestors.file.gid", - "signal.target.ancestors.file.group", - "signal.target.ancestors.file.in_upper_layer", - "signal.target.ancestors.file.inode", - "signal.target.ancestors.file.mode", - "signal.target.ancestors.file.modification_time", - "signal.target.ancestors.file.mount_id", - "signal.target.ancestors.file.name", - "signal.target.ancestors.file.name.length", - "signal.target.ancestors.file.path", - "signal.target.ancestors.file.path.length", - "signal.target.ancestors.file.rights", - "signal.target.ancestors.file.uid", - "signal.target.ancestors.file.user", - "signal.target.ancestors.fsgid", - "signal.target.ancestors.fsgroup", - "signal.target.ancestors.fsuid", - "signal.target.ancestors.fsuser", - "signal.target.ancestors.gid", - "signal.target.ancestors.group", - "signal.target.ancestors.interpreter.file.change_time", - "signal.target.ancestors.interpreter.file.filesystem", - "signal.target.ancestors.interpreter.file.gid", - "signal.target.ancestors.interpreter.file.group", - "signal.target.ancestors.interpreter.file.in_upper_layer", - "signal.target.ancestors.interpreter.file.inode", - "signal.target.ancestors.interpreter.file.mode", - "signal.target.ancestors.interpreter.file.modification_time", - "signal.target.ancestors.interpreter.file.mount_id", - "signal.target.ancestors.interpreter.file.name", - "signal.target.ancestors.interpreter.file.name.length", - "signal.target.ancestors.interpreter.file.path", - "signal.target.ancestors.interpreter.file.path.length", - "signal.target.ancestors.interpreter.file.rights", - "signal.target.ancestors.interpreter.file.uid", - "signal.target.ancestors.interpreter.file.user", - "signal.target.ancestors.is_kworker", - "signal.target.ancestors.is_thread", - "signal.target.ancestors.pid", - "signal.target.ancestors.ppid", - "signal.target.ancestors.tid", - "signal.target.ancestors.tty_name", - "signal.target.ancestors.uid", - "signal.target.ancestors.user", - "signal.target.args", - "signal.target.args_flags", - "signal.target.args_options", - "signal.target.args_truncated", - "signal.target.argv", - "signal.target.argv0", - "signal.target.cap_effective", - "signal.target.cap_permitted", - "signal.target.comm", - "signal.target.container.id", - "signal.target.cookie", - "signal.target.created_at", - "signal.target.egid", - "signal.target.egroup", - "signal.target.envp", - "signal.target.envs", - "signal.target.envs_truncated", - "signal.target.euid", - "signal.target.euser", - "signal.target.file.change_time", - "signal.target.file.filesystem", - "signal.target.file.gid", - "signal.target.file.group", - "signal.target.file.in_upper_layer", - "signal.target.file.inode", - "signal.target.file.mode", - "signal.target.file.modification_time", - "signal.target.file.mount_id", - "signal.target.file.name", - "signal.target.file.name.length", - "signal.target.file.path", - "signal.target.file.path.length", - "signal.target.file.rights", - "signal.target.file.uid", - "signal.target.file.user", - "signal.target.fsgid", - "signal.target.fsgroup", - "signal.target.fsuid", - "signal.target.fsuser", - "signal.target.gid", - "signal.target.group", - "signal.target.interpreter.file.change_time", - "signal.target.interpreter.file.filesystem", - "signal.target.interpreter.file.gid", - "signal.target.interpreter.file.group", - "signal.target.interpreter.file.in_upper_layer", - "signal.target.interpreter.file.inode", - "signal.target.interpreter.file.mode", - "signal.target.interpreter.file.modification_time", - "signal.target.interpreter.file.mount_id", - "signal.target.interpreter.file.name", - "signal.target.interpreter.file.name.length", - "signal.target.interpreter.file.path", - "signal.target.interpreter.file.path.length", - "signal.target.interpreter.file.rights", - "signal.target.interpreter.file.uid", - "signal.target.interpreter.file.user", - "signal.target.is_kworker", - "signal.target.is_thread", - "signal.target.parent.args", - "signal.target.parent.args_flags", - "signal.target.parent.args_options", - "signal.target.parent.args_truncated", - "signal.target.parent.argv", - "signal.target.parent.argv0", - "signal.target.parent.cap_effective", - "signal.target.parent.cap_permitted", - "signal.target.parent.comm", - "signal.target.parent.container.id", - "signal.target.parent.cookie", - "signal.target.parent.created_at", - "signal.target.parent.egid", - "signal.target.parent.egroup", - "signal.target.parent.envp", - "signal.target.parent.envs", - "signal.target.parent.envs_truncated", - "signal.target.parent.euid", - "signal.target.parent.euser", - "signal.target.parent.file.change_time", - "signal.target.parent.file.filesystem", - "signal.target.parent.file.gid", - "signal.target.parent.file.group", - "signal.target.parent.file.in_upper_layer", - "signal.target.parent.file.inode", - "signal.target.parent.file.mode", - "signal.target.parent.file.modification_time", - "signal.target.parent.file.mount_id", - "signal.target.parent.file.name", - "signal.target.parent.file.name.length", - "signal.target.parent.file.path", - "signal.target.parent.file.path.length", - "signal.target.parent.file.rights", - "signal.target.parent.file.uid", - "signal.target.parent.file.user", - "signal.target.parent.fsgid", - "signal.target.parent.fsgroup", - "signal.target.parent.fsuid", - "signal.target.parent.fsuser", - "signal.target.parent.gid", - "signal.target.parent.group", - "signal.target.parent.interpreter.file.change_time", - "signal.target.parent.interpreter.file.filesystem", - "signal.target.parent.interpreter.file.gid", - "signal.target.parent.interpreter.file.group", - "signal.target.parent.interpreter.file.in_upper_layer", - "signal.target.parent.interpreter.file.inode", - "signal.target.parent.interpreter.file.mode", - "signal.target.parent.interpreter.file.modification_time", - "signal.target.parent.interpreter.file.mount_id", - "signal.target.parent.interpreter.file.name", - "signal.target.parent.interpreter.file.name.length", - "signal.target.parent.interpreter.file.path", - "signal.target.parent.interpreter.file.path.length", - "signal.target.parent.interpreter.file.rights", - "signal.target.parent.interpreter.file.uid", - "signal.target.parent.interpreter.file.user", - "signal.target.parent.is_kworker", - "signal.target.parent.is_thread", - "signal.target.parent.pid", - "signal.target.parent.ppid", - "signal.target.parent.tid", - "signal.target.parent.tty_name", - "signal.target.parent.uid", - "signal.target.parent.user", - "signal.target.pid", - "signal.target.ppid", - "signal.target.tid", - "signal.target.tty_name", - "signal.target.uid", - "signal.target.user", - "signal.type", - "splice.file.change_time", - "splice.file.filesystem", - "splice.file.gid", - "splice.file.group", - "splice.file.in_upper_layer", - "splice.file.inode", - "splice.file.mode", - "splice.file.modification_time", - "splice.file.mount_id", - "splice.file.name", - "splice.file.name.length", - "splice.file.path", - "splice.file.path.length", - "splice.file.rights", - "splice.file.uid", - "splice.file.user", - "splice.pipe_entry_flag", - "splice.pipe_exit_flag", - "splice.retval", - "unlink.file.change_time", - "unlink.file.filesystem", - "unlink.file.gid", - "unlink.file.group", - "unlink.file.in_upper_layer", - "unlink.file.inode", - "unlink.file.mode", - "unlink.file.modification_time", - "unlink.file.mount_id", - "unlink.file.name", - "unlink.file.name.length", - "unlink.file.path", - "unlink.file.path.length", - "unlink.file.rights", - "unlink.file.uid", - "unlink.file.user", - "unlink.flags", - "unlink.retval", - "unload_module.name", - "unload_module.retval", - "utimes.file.change_time", - "utimes.file.filesystem", - "utimes.file.gid", - "utimes.file.group", - "utimes.file.in_upper_layer", - "utimes.file.inode", - "utimes.file.mode", - "utimes.file.modification_time", - "utimes.file.mount_id", - "utimes.file.name", - "utimes.file.name.length", - "utimes.file.path", - "utimes.file.path.length", - "utimes.file.rights", - "utimes.file.uid", - "utimes.file.user", - "utimes.retval", - } -} -func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { - switch field { - case "async": - return e.Async, nil - case "bind.addr.family": - return int(e.Bind.AddrFamily), nil - case "bind.addr.ip": - return e.Bind.Addr.IPNet, nil - case "bind.addr.port": - return int(e.Bind.Addr.Port), nil - case "bind.retval": - return int(e.Bind.SyscallEvent.Retval), nil - case "bpf.cmd": - return int(e.BPF.Cmd), nil - case "bpf.map.name": - return e.BPF.Map.Name, nil - case "bpf.map.type": - return int(e.BPF.Map.Type), nil - case "bpf.prog.attach_type": - return int(e.BPF.Program.AttachType), nil - case "bpf.prog.helpers": - result := make([]int, len(e.ResolveHelpers(&e.BPF.Program))) - for i, v := range e.ResolveHelpers(&e.BPF.Program) { - result[i] = int(v) - } - return result, nil - case "bpf.prog.name": - return e.BPF.Program.Name, nil - case "bpf.prog.tag": - return e.BPF.Program.Tag, nil - case "bpf.prog.type": - return int(e.BPF.Program.Type), nil - case "bpf.retval": - return int(e.BPF.SyscallEvent.Retval), nil - case "capset.cap_effective": - return int(e.Capset.CapEffective), nil - case "capset.cap_permitted": - return int(e.Capset.CapPermitted), nil - case "chmod.file.change_time": - return int(e.Chmod.File.FileFields.CTime), nil - case "chmod.file.destination.mode": - return int(e.Chmod.Mode), nil - case "chmod.file.destination.rights": - return int(e.Chmod.Mode), nil - case "chmod.file.filesystem": - return e.ResolveFileFilesystem(&e.Chmod.File), nil - case "chmod.file.gid": - return int(e.Chmod.File.FileFields.GID), nil - case "chmod.file.group": - return e.ResolveFileFieldsGroup(&e.Chmod.File.FileFields), nil - case "chmod.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Chmod.File.FileFields), nil - case "chmod.file.inode": - return int(e.Chmod.File.FileFields.Inode), nil - case "chmod.file.mode": - return int(e.Chmod.File.FileFields.Mode), nil - case "chmod.file.modification_time": - return int(e.Chmod.File.FileFields.MTime), nil - case "chmod.file.mount_id": - return int(e.Chmod.File.FileFields.MountID), nil - case "chmod.file.name": - return e.ResolveFileBasename(&e.Chmod.File), nil - case "chmod.file.name.length": - return e.ResolveFileBasename(&e.Chmod.File), nil - case "chmod.file.path": - return e.ResolveFilePath(&e.Chmod.File), nil - case "chmod.file.path.length": - return e.ResolveFilePath(&e.Chmod.File), nil - case "chmod.file.rights": - return int(e.ResolveRights(&e.Chmod.File.FileFields)), nil - case "chmod.file.uid": - return int(e.Chmod.File.FileFields.UID), nil - case "chmod.file.user": - return e.ResolveFileFieldsUser(&e.Chmod.File.FileFields), nil - case "chmod.retval": - return int(e.Chmod.SyscallEvent.Retval), nil - case "chown.file.change_time": - return int(e.Chown.File.FileFields.CTime), nil - case "chown.file.destination.gid": - return int(e.Chown.GID), nil - case "chown.file.destination.group": - return e.ResolveChownGID(&e.Chown), nil - case "chown.file.destination.uid": - return int(e.Chown.UID), nil - case "chown.file.destination.user": - return e.ResolveChownUID(&e.Chown), nil - case "chown.file.filesystem": - return e.ResolveFileFilesystem(&e.Chown.File), nil - case "chown.file.gid": - return int(e.Chown.File.FileFields.GID), nil - case "chown.file.group": - return e.ResolveFileFieldsGroup(&e.Chown.File.FileFields), nil - case "chown.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Chown.File.FileFields), nil - case "chown.file.inode": - return int(e.Chown.File.FileFields.Inode), nil - case "chown.file.mode": - return int(e.Chown.File.FileFields.Mode), nil - case "chown.file.modification_time": - return int(e.Chown.File.FileFields.MTime), nil - case "chown.file.mount_id": - return int(e.Chown.File.FileFields.MountID), nil - case "chown.file.name": - return e.ResolveFileBasename(&e.Chown.File), nil - case "chown.file.name.length": - return e.ResolveFileBasename(&e.Chown.File), nil - case "chown.file.path": - return e.ResolveFilePath(&e.Chown.File), nil - case "chown.file.path.length": - return e.ResolveFilePath(&e.Chown.File), nil - case "chown.file.rights": - return int(e.ResolveRights(&e.Chown.File.FileFields)), nil - case "chown.file.uid": - return int(e.Chown.File.FileFields.UID), nil - case "chown.file.user": - return e.ResolveFileFieldsUser(&e.Chown.File.FileFields), nil - case "chown.retval": - return int(e.Chown.SyscallEvent.Retval), nil - case "container.id": - return e.ResolveContainerID(&e.ContainerContext), nil - case "container.tags": - return e.ResolveContainerTags(&e.ContainerContext), nil - case "dns.id": - return int(e.DNS.ID), nil - case "dns.question.class": - return int(e.DNS.Class), nil - case "dns.question.count": - return int(e.DNS.Count), nil - case "dns.question.length": - return int(e.DNS.Size), nil - case "dns.question.name": - return e.DNS.Name, nil - case "dns.question.name.length": - return len(e.DNS.Name), nil - case "dns.question.type": - return int(e.DNS.Type), nil - case "exec.args": - return e.ResolveProcessArgs(e.Exec.Process), nil - case "exec.args_flags": - return e.ResolveProcessArgsFlags(e.Exec.Process), nil - case "exec.args_options": - return e.ResolveProcessArgsOptions(e.Exec.Process), nil - case "exec.args_truncated": - return e.ResolveProcessArgsTruncated(e.Exec.Process), nil - case "exec.argv": - return e.ResolveProcessArgv(e.Exec.Process), nil - case "exec.argv0": - return e.ResolveProcessArgv0(e.Exec.Process), nil - case "exec.cap_effective": - return int(e.Exec.Process.Credentials.CapEffective), nil - case "exec.cap_permitted": - return int(e.Exec.Process.Credentials.CapPermitted), nil - case "exec.comm": - return e.Exec.Process.Comm, nil - case "exec.container.id": - return e.Exec.Process.ContainerID, nil - case "exec.cookie": - return int(e.Exec.Process.Cookie), nil - case "exec.created_at": - return int(e.ResolveProcessCreatedAt(e.Exec.Process)), nil - case "exec.egid": - return int(e.Exec.Process.Credentials.EGID), nil - case "exec.egroup": - return e.Exec.Process.Credentials.EGroup, nil - case "exec.envp": - return e.ResolveProcessEnvp(e.Exec.Process), nil - case "exec.envs": - return e.ResolveProcessEnvs(e.Exec.Process), nil - case "exec.envs_truncated": - return e.ResolveProcessEnvsTruncated(e.Exec.Process), nil - case "exec.euid": - return int(e.Exec.Process.Credentials.EUID), nil - case "exec.euser": - return e.Exec.Process.Credentials.EUser, nil - case "exec.file.change_time": - return int(e.Exec.Process.FileEvent.FileFields.CTime), nil - case "exec.file.filesystem": - return e.ResolveFileFilesystem(&e.Exec.Process.FileEvent), nil - case "exec.file.gid": - return int(e.Exec.Process.FileEvent.FileFields.GID), nil - case "exec.file.group": - return e.ResolveFileFieldsGroup(&e.Exec.Process.FileEvent.FileFields), nil - case "exec.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Exec.Process.FileEvent.FileFields), nil - case "exec.file.inode": - return int(e.Exec.Process.FileEvent.FileFields.Inode), nil - case "exec.file.mode": - return int(e.Exec.Process.FileEvent.FileFields.Mode), nil - case "exec.file.modification_time": - return int(e.Exec.Process.FileEvent.FileFields.MTime), nil - case "exec.file.mount_id": - return int(e.Exec.Process.FileEvent.FileFields.MountID), nil - case "exec.file.name": - return e.ResolveFileBasename(&e.Exec.Process.FileEvent), nil - case "exec.file.name.length": - return e.ResolveFileBasename(&e.Exec.Process.FileEvent), nil - case "exec.file.path": - return e.ResolveFilePath(&e.Exec.Process.FileEvent), nil - case "exec.file.path.length": - return e.ResolveFilePath(&e.Exec.Process.FileEvent), nil - case "exec.file.rights": - return int(e.ResolveRights(&e.Exec.Process.FileEvent.FileFields)), nil - case "exec.file.uid": - return int(e.Exec.Process.FileEvent.FileFields.UID), nil - case "exec.file.user": - return e.ResolveFileFieldsUser(&e.Exec.Process.FileEvent.FileFields), nil - case "exec.fsgid": - return int(e.Exec.Process.Credentials.FSGID), nil - case "exec.fsgroup": - return e.Exec.Process.Credentials.FSGroup, nil - case "exec.fsuid": - return int(e.Exec.Process.Credentials.FSUID), nil - case "exec.fsuser": - return e.Exec.Process.Credentials.FSUser, nil - case "exec.gid": - return int(e.Exec.Process.Credentials.GID), nil - case "exec.group": - return e.Exec.Process.Credentials.Group, nil - case "exec.interpreter.file.change_time": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil - case "exec.interpreter.file.filesystem": - return e.ResolveFileFilesystem(&e.Exec.Process.LinuxBinprm.FileEvent), nil - case "exec.interpreter.file.gid": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.GID), nil - case "exec.interpreter.file.group": - return e.ResolveFileFieldsGroup(&e.Exec.Process.LinuxBinprm.FileEvent.FileFields), nil - case "exec.interpreter.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Exec.Process.LinuxBinprm.FileEvent.FileFields), nil - case "exec.interpreter.file.inode": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil - case "exec.interpreter.file.mode": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil - case "exec.interpreter.file.modification_time": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil - case "exec.interpreter.file.mount_id": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil - case "exec.interpreter.file.name": - return e.ResolveFileBasename(&e.Exec.Process.LinuxBinprm.FileEvent), nil - case "exec.interpreter.file.name.length": - return e.ResolveFileBasename(&e.Exec.Process.LinuxBinprm.FileEvent), nil - case "exec.interpreter.file.path": - return e.ResolveFilePath(&e.Exec.Process.LinuxBinprm.FileEvent), nil - case "exec.interpreter.file.path.length": - return e.ResolveFilePath(&e.Exec.Process.LinuxBinprm.FileEvent), nil - case "exec.interpreter.file.rights": - return int(e.ResolveRights(&e.Exec.Process.LinuxBinprm.FileEvent.FileFields)), nil - case "exec.interpreter.file.uid": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.UID), nil - case "exec.interpreter.file.user": - return e.ResolveFileFieldsUser(&e.Exec.Process.LinuxBinprm.FileEvent.FileFields), nil - case "exec.is_kworker": - return e.Exec.Process.PIDContext.IsKworker, nil - case "exec.is_thread": - return e.Exec.Process.IsThread, nil - case "exec.pid": - return int(e.Exec.Process.PIDContext.Pid), nil - case "exec.ppid": - return int(e.Exec.Process.PPid), nil - case "exec.tid": - return int(e.Exec.Process.PIDContext.Tid), nil - case "exec.tty_name": - return e.Exec.Process.TTYName, nil - case "exec.uid": - return int(e.Exec.Process.Credentials.UID), nil - case "exec.user": - return e.Exec.Process.Credentials.User, nil - case "exit.args": - return e.ResolveProcessArgs(e.Exit.Process), nil - case "exit.args_flags": - return e.ResolveProcessArgsFlags(e.Exit.Process), nil - case "exit.args_options": - return e.ResolveProcessArgsOptions(e.Exit.Process), nil - case "exit.args_truncated": - return e.ResolveProcessArgsTruncated(e.Exit.Process), nil - case "exit.argv": - return e.ResolveProcessArgv(e.Exit.Process), nil - case "exit.argv0": - return e.ResolveProcessArgv0(e.Exit.Process), nil - case "exit.cap_effective": - return int(e.Exit.Process.Credentials.CapEffective), nil - case "exit.cap_permitted": - return int(e.Exit.Process.Credentials.CapPermitted), nil - case "exit.cause": - return int(e.Exit.Cause), nil - case "exit.code": - return int(e.Exit.Code), nil - case "exit.comm": - return e.Exit.Process.Comm, nil - case "exit.container.id": - return e.Exit.Process.ContainerID, nil - case "exit.cookie": - return int(e.Exit.Process.Cookie), nil - case "exit.created_at": - return int(e.ResolveProcessCreatedAt(e.Exit.Process)), nil - case "exit.egid": - return int(e.Exit.Process.Credentials.EGID), nil - case "exit.egroup": - return e.Exit.Process.Credentials.EGroup, nil - case "exit.envp": - return e.ResolveProcessEnvp(e.Exit.Process), nil - case "exit.envs": - return e.ResolveProcessEnvs(e.Exit.Process), nil - case "exit.envs_truncated": - return e.ResolveProcessEnvsTruncated(e.Exit.Process), nil - case "exit.euid": - return int(e.Exit.Process.Credentials.EUID), nil - case "exit.euser": - return e.Exit.Process.Credentials.EUser, nil - case "exit.file.change_time": - return int(e.Exit.Process.FileEvent.FileFields.CTime), nil - case "exit.file.filesystem": - return e.ResolveFileFilesystem(&e.Exit.Process.FileEvent), nil - case "exit.file.gid": - return int(e.Exit.Process.FileEvent.FileFields.GID), nil - case "exit.file.group": - return e.ResolveFileFieldsGroup(&e.Exit.Process.FileEvent.FileFields), nil - case "exit.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Exit.Process.FileEvent.FileFields), nil - case "exit.file.inode": - return int(e.Exit.Process.FileEvent.FileFields.Inode), nil - case "exit.file.mode": - return int(e.Exit.Process.FileEvent.FileFields.Mode), nil - case "exit.file.modification_time": - return int(e.Exit.Process.FileEvent.FileFields.MTime), nil - case "exit.file.mount_id": - return int(e.Exit.Process.FileEvent.FileFields.MountID), nil - case "exit.file.name": - return e.ResolveFileBasename(&e.Exit.Process.FileEvent), nil - case "exit.file.name.length": - return e.ResolveFileBasename(&e.Exit.Process.FileEvent), nil - case "exit.file.path": - return e.ResolveFilePath(&e.Exit.Process.FileEvent), nil - case "exit.file.path.length": - return e.ResolveFilePath(&e.Exit.Process.FileEvent), nil - case "exit.file.rights": - return int(e.ResolveRights(&e.Exit.Process.FileEvent.FileFields)), nil - case "exit.file.uid": - return int(e.Exit.Process.FileEvent.FileFields.UID), nil - case "exit.file.user": - return e.ResolveFileFieldsUser(&e.Exit.Process.FileEvent.FileFields), nil - case "exit.fsgid": - return int(e.Exit.Process.Credentials.FSGID), nil - case "exit.fsgroup": - return e.Exit.Process.Credentials.FSGroup, nil - case "exit.fsuid": - return int(e.Exit.Process.Credentials.FSUID), nil - case "exit.fsuser": - return e.Exit.Process.Credentials.FSUser, nil - case "exit.gid": - return int(e.Exit.Process.Credentials.GID), nil - case "exit.group": - return e.Exit.Process.Credentials.Group, nil - case "exit.interpreter.file.change_time": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil - case "exit.interpreter.file.filesystem": - return e.ResolveFileFilesystem(&e.Exit.Process.LinuxBinprm.FileEvent), nil - case "exit.interpreter.file.gid": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.GID), nil - case "exit.interpreter.file.group": - return e.ResolveFileFieldsGroup(&e.Exit.Process.LinuxBinprm.FileEvent.FileFields), nil - case "exit.interpreter.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Exit.Process.LinuxBinprm.FileEvent.FileFields), nil - case "exit.interpreter.file.inode": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil - case "exit.interpreter.file.mode": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil - case "exit.interpreter.file.modification_time": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil - case "exit.interpreter.file.mount_id": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil - case "exit.interpreter.file.name": - return e.ResolveFileBasename(&e.Exit.Process.LinuxBinprm.FileEvent), nil - case "exit.interpreter.file.name.length": - return e.ResolveFileBasename(&e.Exit.Process.LinuxBinprm.FileEvent), nil - case "exit.interpreter.file.path": - return e.ResolveFilePath(&e.Exit.Process.LinuxBinprm.FileEvent), nil - case "exit.interpreter.file.path.length": - return e.ResolveFilePath(&e.Exit.Process.LinuxBinprm.FileEvent), nil - case "exit.interpreter.file.rights": - return int(e.ResolveRights(&e.Exit.Process.LinuxBinprm.FileEvent.FileFields)), nil - case "exit.interpreter.file.uid": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.UID), nil - case "exit.interpreter.file.user": - return e.ResolveFileFieldsUser(&e.Exit.Process.LinuxBinprm.FileEvent.FileFields), nil - case "exit.is_kworker": - return e.Exit.Process.PIDContext.IsKworker, nil - case "exit.is_thread": - return e.Exit.Process.IsThread, nil - case "exit.pid": - return int(e.Exit.Process.PIDContext.Pid), nil - case "exit.ppid": - return int(e.Exit.Process.PPid), nil - case "exit.tid": - return int(e.Exit.Process.PIDContext.Tid), nil - case "exit.tty_name": - return e.Exit.Process.TTYName, nil - case "exit.uid": - return int(e.Exit.Process.Credentials.UID), nil - case "exit.user": - return e.Exit.Process.Credentials.User, nil - case "link.file.change_time": - return int(e.Link.Source.FileFields.CTime), nil - case "link.file.destination.change_time": - return int(e.Link.Target.FileFields.CTime), nil - case "link.file.destination.filesystem": - return e.ResolveFileFilesystem(&e.Link.Target), nil - case "link.file.destination.gid": - return int(e.Link.Target.FileFields.GID), nil - case "link.file.destination.group": - return e.ResolveFileFieldsGroup(&e.Link.Target.FileFields), nil - case "link.file.destination.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Link.Target.FileFields), nil - case "link.file.destination.inode": - return int(e.Link.Target.FileFields.Inode), nil - case "link.file.destination.mode": - return int(e.Link.Target.FileFields.Mode), nil - case "link.file.destination.modification_time": - return int(e.Link.Target.FileFields.MTime), nil - case "link.file.destination.mount_id": - return int(e.Link.Target.FileFields.MountID), nil - case "link.file.destination.name": - return e.ResolveFileBasename(&e.Link.Target), nil - case "link.file.destination.name.length": - return e.ResolveFileBasename(&e.Link.Target), nil - case "link.file.destination.path": - return e.ResolveFilePath(&e.Link.Target), nil - case "link.file.destination.path.length": - return e.ResolveFilePath(&e.Link.Target), nil - case "link.file.destination.rights": - return int(e.ResolveRights(&e.Link.Target.FileFields)), nil - case "link.file.destination.uid": - return int(e.Link.Target.FileFields.UID), nil - case "link.file.destination.user": - return e.ResolveFileFieldsUser(&e.Link.Target.FileFields), nil - case "link.file.filesystem": - return e.ResolveFileFilesystem(&e.Link.Source), nil - case "link.file.gid": - return int(e.Link.Source.FileFields.GID), nil - case "link.file.group": - return e.ResolveFileFieldsGroup(&e.Link.Source.FileFields), nil - case "link.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Link.Source.FileFields), nil - case "link.file.inode": - return int(e.Link.Source.FileFields.Inode), nil - case "link.file.mode": - return int(e.Link.Source.FileFields.Mode), nil - case "link.file.modification_time": - return int(e.Link.Source.FileFields.MTime), nil - case "link.file.mount_id": - return int(e.Link.Source.FileFields.MountID), nil - case "link.file.name": - return e.ResolveFileBasename(&e.Link.Source), nil - case "link.file.name.length": - return e.ResolveFileBasename(&e.Link.Source), nil - case "link.file.path": - return e.ResolveFilePath(&e.Link.Source), nil - case "link.file.path.length": - return e.ResolveFilePath(&e.Link.Source), nil - case "link.file.rights": - return int(e.ResolveRights(&e.Link.Source.FileFields)), nil - case "link.file.uid": - return int(e.Link.Source.FileFields.UID), nil - case "link.file.user": - return e.ResolveFileFieldsUser(&e.Link.Source.FileFields), nil - case "link.retval": - return int(e.Link.SyscallEvent.Retval), nil - case "load_module.file.change_time": - return int(e.LoadModule.File.FileFields.CTime), nil - case "load_module.file.filesystem": - return e.ResolveFileFilesystem(&e.LoadModule.File), nil - case "load_module.file.gid": - return int(e.LoadModule.File.FileFields.GID), nil - case "load_module.file.group": - return e.ResolveFileFieldsGroup(&e.LoadModule.File.FileFields), nil - case "load_module.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.LoadModule.File.FileFields), nil - case "load_module.file.inode": - return int(e.LoadModule.File.FileFields.Inode), nil - case "load_module.file.mode": - return int(e.LoadModule.File.FileFields.Mode), nil - case "load_module.file.modification_time": - return int(e.LoadModule.File.FileFields.MTime), nil - case "load_module.file.mount_id": - return int(e.LoadModule.File.FileFields.MountID), nil - case "load_module.file.name": - return e.ResolveFileBasename(&e.LoadModule.File), nil - case "load_module.file.name.length": - return e.ResolveFileBasename(&e.LoadModule.File), nil - case "load_module.file.path": - return e.ResolveFilePath(&e.LoadModule.File), nil - case "load_module.file.path.length": - return e.ResolveFilePath(&e.LoadModule.File), nil - case "load_module.file.rights": - return int(e.ResolveRights(&e.LoadModule.File.FileFields)), nil - case "load_module.file.uid": - return int(e.LoadModule.File.FileFields.UID), nil - case "load_module.file.user": - return e.ResolveFileFieldsUser(&e.LoadModule.File.FileFields), nil - case "load_module.loaded_from_memory": - return e.LoadModule.LoadedFromMemory, nil - case "load_module.name": - return e.LoadModule.Name, nil - case "load_module.retval": - return int(e.LoadModule.SyscallEvent.Retval), nil - case "mkdir.file.change_time": - return int(e.Mkdir.File.FileFields.CTime), nil - case "mkdir.file.destination.mode": - return int(e.Mkdir.Mode), nil - case "mkdir.file.destination.rights": - return int(e.Mkdir.Mode), nil - case "mkdir.file.filesystem": - return e.ResolveFileFilesystem(&e.Mkdir.File), nil - case "mkdir.file.gid": - return int(e.Mkdir.File.FileFields.GID), nil - case "mkdir.file.group": - return e.ResolveFileFieldsGroup(&e.Mkdir.File.FileFields), nil - case "mkdir.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Mkdir.File.FileFields), nil - case "mkdir.file.inode": - return int(e.Mkdir.File.FileFields.Inode), nil - case "mkdir.file.mode": - return int(e.Mkdir.File.FileFields.Mode), nil - case "mkdir.file.modification_time": - return int(e.Mkdir.File.FileFields.MTime), nil - case "mkdir.file.mount_id": - return int(e.Mkdir.File.FileFields.MountID), nil - case "mkdir.file.name": - return e.ResolveFileBasename(&e.Mkdir.File), nil - case "mkdir.file.name.length": - return e.ResolveFileBasename(&e.Mkdir.File), nil - case "mkdir.file.path": - return e.ResolveFilePath(&e.Mkdir.File), nil - case "mkdir.file.path.length": - return e.ResolveFilePath(&e.Mkdir.File), nil - case "mkdir.file.rights": - return int(e.ResolveRights(&e.Mkdir.File.FileFields)), nil - case "mkdir.file.uid": - return int(e.Mkdir.File.FileFields.UID), nil - case "mkdir.file.user": - return e.ResolveFileFieldsUser(&e.Mkdir.File.FileFields), nil - case "mkdir.retval": - return int(e.Mkdir.SyscallEvent.Retval), nil - case "mmap.file.change_time": - return int(e.MMap.File.FileFields.CTime), nil - case "mmap.file.filesystem": - return e.ResolveFileFilesystem(&e.MMap.File), nil - case "mmap.file.gid": - return int(e.MMap.File.FileFields.GID), nil - case "mmap.file.group": - return e.ResolveFileFieldsGroup(&e.MMap.File.FileFields), nil - case "mmap.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.MMap.File.FileFields), nil - case "mmap.file.inode": - return int(e.MMap.File.FileFields.Inode), nil - case "mmap.file.mode": - return int(e.MMap.File.FileFields.Mode), nil - case "mmap.file.modification_time": - return int(e.MMap.File.FileFields.MTime), nil - case "mmap.file.mount_id": - return int(e.MMap.File.FileFields.MountID), nil - case "mmap.file.name": - return e.ResolveFileBasename(&e.MMap.File), nil - case "mmap.file.name.length": - return e.ResolveFileBasename(&e.MMap.File), nil - case "mmap.file.path": - return e.ResolveFilePath(&e.MMap.File), nil - case "mmap.file.path.length": - return e.ResolveFilePath(&e.MMap.File), nil - case "mmap.file.rights": - return int(e.ResolveRights(&e.MMap.File.FileFields)), nil - case "mmap.file.uid": - return int(e.MMap.File.FileFields.UID), nil - case "mmap.file.user": - return e.ResolveFileFieldsUser(&e.MMap.File.FileFields), nil - case "mmap.flags": - return e.MMap.Flags, nil - case "mmap.protection": - return e.MMap.Protection, nil - case "mmap.retval": - return int(e.MMap.SyscallEvent.Retval), nil - case "mount.fs_type": - return e.Mount.Mount.FSType, nil - case "mount.mountpoint.path": - return e.ResolveMountPointPath(&e.Mount), nil - case "mount.retval": - return int(e.Mount.SyscallEvent.Retval), nil - case "mount.source.path": - return e.ResolveMountSourcePath(&e.Mount), nil - case "mprotect.req_protection": - return e.MProtect.ReqProtection, nil - case "mprotect.retval": - return int(e.MProtect.SyscallEvent.Retval), nil - case "mprotect.vm_protection": - return e.MProtect.VMProtection, nil - case "network.destination.ip": - return e.NetworkContext.Destination.IPNet, nil - case "network.destination.port": - return int(e.NetworkContext.Destination.Port), nil - case "network.device.ifindex": - return int(e.NetworkContext.Device.IfIndex), nil - case "network.device.ifname": - return e.ResolveNetworkDeviceIfName(&e.NetworkContext.Device), nil - case "network.l3_protocol": - return int(e.NetworkContext.L3Protocol), nil - case "network.l4_protocol": - return int(e.NetworkContext.L4Protocol), nil - case "network.size": - return int(e.NetworkContext.Size), nil - case "network.source.ip": - return e.NetworkContext.Source.IPNet, nil - case "network.source.port": - return int(e.NetworkContext.Source.Port), nil - case "open.file.change_time": - return int(e.Open.File.FileFields.CTime), nil - case "open.file.destination.mode": - return int(e.Open.Mode), nil - case "open.file.filesystem": - return e.ResolveFileFilesystem(&e.Open.File), nil - case "open.file.gid": - return int(e.Open.File.FileFields.GID), nil - case "open.file.group": - return e.ResolveFileFieldsGroup(&e.Open.File.FileFields), nil - case "open.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Open.File.FileFields), nil - case "open.file.inode": - return int(e.Open.File.FileFields.Inode), nil - case "open.file.mode": - return int(e.Open.File.FileFields.Mode), nil - case "open.file.modification_time": - return int(e.Open.File.FileFields.MTime), nil - case "open.file.mount_id": - return int(e.Open.File.FileFields.MountID), nil - case "open.file.name": - return e.ResolveFileBasename(&e.Open.File), nil - case "open.file.name.length": - return e.ResolveFileBasename(&e.Open.File), nil - case "open.file.path": - return e.ResolveFilePath(&e.Open.File), nil - case "open.file.path.length": - return e.ResolveFilePath(&e.Open.File), nil - case "open.file.rights": - return int(e.ResolveRights(&e.Open.File.FileFields)), nil - case "open.file.uid": - return int(e.Open.File.FileFields.UID), nil - case "open.file.user": - return e.ResolveFileFieldsUser(&e.Open.File.FileFields), nil - case "open.flags": - return int(e.Open.Flags), nil - case "open.retval": - return int(e.Open.SyscallEvent.Retval), nil - case "process.ancestors.args": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgs(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.args_flags": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgsFlags(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.args_options": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgsOptions(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.args_truncated": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgsTruncated(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.argv": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgv(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.argv0": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgv0(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.cap_effective": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.CapEffective) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.cap_permitted": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.CapPermitted) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.comm": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Comm - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.container.id": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.ContainerID - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.cookie": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Cookie) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.created_at": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int((*Event)(ctx.Object).ResolveProcessCreatedAt(&element.ProcessContext.Process)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.egid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.EGID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.egroup": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.EGroup - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.envp": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessEnvp(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.envs": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessEnvs(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.envs_truncated": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessEnvsTruncated(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.euid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.EUID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.euser": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.EUser - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.change_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.CTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.filesystem": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.gid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.GID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.group": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.in_upper_layer": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.inode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Inode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.mode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.modification_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.MTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.mount_id": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.MountID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.name": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.name.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.path": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.path.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.rights": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.FileEvent.FileFields)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.uid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.UID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.user": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.fsgid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.FSGID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.fsgroup": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.FSGroup - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.fsuid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.FSUID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.fsuser": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.FSUser - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.gid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.GID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.group": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.Group - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.change_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.filesystem": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.gid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.group": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.in_upper_layer": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.inode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.mode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.modification_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.mount_id": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.name": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.name.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.path": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.path.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.rights": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.uid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.user": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.is_kworker": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.PIDContext.IsKworker - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.is_thread": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.IsThread - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.pid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.PIDContext.Pid) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.ppid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.PPid) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.tid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.PIDContext.Tid) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.tty_name": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.TTYName - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.uid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.UID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.user": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.User - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.args": - return e.ResolveProcessArgs(&e.ProcessContext.Process), nil - case "process.args_flags": - return e.ResolveProcessArgsFlags(&e.ProcessContext.Process), nil - case "process.args_options": - return e.ResolveProcessArgsOptions(&e.ProcessContext.Process), nil - case "process.args_truncated": - return e.ResolveProcessArgsTruncated(&e.ProcessContext.Process), nil - case "process.argv": - return e.ResolveProcessArgv(&e.ProcessContext.Process), nil - case "process.argv0": - return e.ResolveProcessArgv0(&e.ProcessContext.Process), nil - case "process.cap_effective": - return int(e.ProcessContext.Process.Credentials.CapEffective), nil - case "process.cap_permitted": - return int(e.ProcessContext.Process.Credentials.CapPermitted), nil - case "process.comm": - return e.ProcessContext.Process.Comm, nil - case "process.container.id": - return e.ProcessContext.Process.ContainerID, nil - case "process.cookie": - return int(e.ProcessContext.Process.Cookie), nil - case "process.created_at": - return int(e.ResolveProcessCreatedAt(&e.ProcessContext.Process)), nil - case "process.egid": - return int(e.ProcessContext.Process.Credentials.EGID), nil - case "process.egroup": - return e.ProcessContext.Process.Credentials.EGroup, nil - case "process.envp": - return e.ResolveProcessEnvp(&e.ProcessContext.Process), nil - case "process.envs": - return e.ResolveProcessEnvs(&e.ProcessContext.Process), nil - case "process.envs_truncated": - return e.ResolveProcessEnvsTruncated(&e.ProcessContext.Process), nil - case "process.euid": - return int(e.ProcessContext.Process.Credentials.EUID), nil - case "process.euser": - return e.ProcessContext.Process.Credentials.EUser, nil - case "process.file.change_time": - return int(e.ProcessContext.Process.FileEvent.FileFields.CTime), nil - case "process.file.filesystem": - return e.ResolveFileFilesystem(&e.ProcessContext.Process.FileEvent), nil - case "process.file.gid": - return int(e.ProcessContext.Process.FileEvent.FileFields.GID), nil - case "process.file.group": - return e.ResolveFileFieldsGroup(&e.ProcessContext.Process.FileEvent.FileFields), nil - case "process.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.ProcessContext.Process.FileEvent.FileFields), nil - case "process.file.inode": - return int(e.ProcessContext.Process.FileEvent.FileFields.Inode), nil - case "process.file.mode": - return int(e.ProcessContext.Process.FileEvent.FileFields.Mode), nil - case "process.file.modification_time": - return int(e.ProcessContext.Process.FileEvent.FileFields.MTime), nil - case "process.file.mount_id": - return int(e.ProcessContext.Process.FileEvent.FileFields.MountID), nil - case "process.file.name": - return e.ResolveFileBasename(&e.ProcessContext.Process.FileEvent), nil - case "process.file.name.length": - return e.ResolveFileBasename(&e.ProcessContext.Process.FileEvent), nil - case "process.file.path": - return e.ResolveFilePath(&e.ProcessContext.Process.FileEvent), nil - case "process.file.path.length": - return e.ResolveFilePath(&e.ProcessContext.Process.FileEvent), nil - case "process.file.rights": - return int(e.ResolveRights(&e.ProcessContext.Process.FileEvent.FileFields)), nil - case "process.file.uid": - return int(e.ProcessContext.Process.FileEvent.FileFields.UID), nil - case "process.file.user": - return e.ResolveFileFieldsUser(&e.ProcessContext.Process.FileEvent.FileFields), nil - case "process.fsgid": - return int(e.ProcessContext.Process.Credentials.FSGID), nil - case "process.fsgroup": - return e.ProcessContext.Process.Credentials.FSGroup, nil - case "process.fsuid": - return int(e.ProcessContext.Process.Credentials.FSUID), nil - case "process.fsuser": - return e.ProcessContext.Process.Credentials.FSUser, nil - case "process.gid": - return int(e.ProcessContext.Process.Credentials.GID), nil - case "process.group": - return e.ProcessContext.Process.Credentials.Group, nil - case "process.interpreter.file.change_time": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil - case "process.interpreter.file.filesystem": - return e.ResolveFileFilesystem(&e.ProcessContext.Process.LinuxBinprm.FileEvent), nil - case "process.interpreter.file.gid": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID), nil - case "process.interpreter.file.group": - return e.ResolveFileFieldsGroup(&e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields), nil - case "process.interpreter.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields), nil - case "process.interpreter.file.inode": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil - case "process.interpreter.file.mode": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil - case "process.interpreter.file.modification_time": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil - case "process.interpreter.file.mount_id": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil - case "process.interpreter.file.name": - return e.ResolveFileBasename(&e.ProcessContext.Process.LinuxBinprm.FileEvent), nil - case "process.interpreter.file.name.length": - return e.ResolveFileBasename(&e.ProcessContext.Process.LinuxBinprm.FileEvent), nil - case "process.interpreter.file.path": - return e.ResolveFilePath(&e.ProcessContext.Process.LinuxBinprm.FileEvent), nil - case "process.interpreter.file.path.length": - return e.ResolveFilePath(&e.ProcessContext.Process.LinuxBinprm.FileEvent), nil - case "process.interpreter.file.rights": - return int(e.ResolveRights(&e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)), nil - case "process.interpreter.file.uid": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID), nil - case "process.interpreter.file.user": - return e.ResolveFileFieldsUser(&e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields), nil - case "process.is_kworker": - return e.ProcessContext.Process.PIDContext.IsKworker, nil - case "process.is_thread": - return e.ProcessContext.Process.IsThread, nil - case "process.parent.args": - return e.ResolveProcessArgs(e.ProcessContext.Parent), nil - case "process.parent.args_flags": - return e.ResolveProcessArgsFlags(e.ProcessContext.Parent), nil - case "process.parent.args_options": - return e.ResolveProcessArgsOptions(e.ProcessContext.Parent), nil - case "process.parent.args_truncated": - return e.ResolveProcessArgsTruncated(e.ProcessContext.Parent), nil - case "process.parent.argv": - return e.ResolveProcessArgv(e.ProcessContext.Parent), nil - case "process.parent.argv0": - return e.ResolveProcessArgv0(e.ProcessContext.Parent), nil - case "process.parent.cap_effective": - return int(e.ProcessContext.Parent.Credentials.CapEffective), nil - case "process.parent.cap_permitted": - return int(e.ProcessContext.Parent.Credentials.CapPermitted), nil - case "process.parent.comm": - return e.ProcessContext.Parent.Comm, nil - case "process.parent.container.id": - return e.ProcessContext.Parent.ContainerID, nil - case "process.parent.cookie": - return int(e.ProcessContext.Parent.Cookie), nil - case "process.parent.created_at": - return int(e.ResolveProcessCreatedAt(e.ProcessContext.Parent)), nil - case "process.parent.egid": - return int(e.ProcessContext.Parent.Credentials.EGID), nil - case "process.parent.egroup": - return e.ProcessContext.Parent.Credentials.EGroup, nil - case "process.parent.envp": - return e.ResolveProcessEnvp(e.ProcessContext.Parent), nil - case "process.parent.envs": - return e.ResolveProcessEnvs(e.ProcessContext.Parent), nil - case "process.parent.envs_truncated": - return e.ResolveProcessEnvsTruncated(e.ProcessContext.Parent), nil - case "process.parent.euid": - return int(e.ProcessContext.Parent.Credentials.EUID), nil - case "process.parent.euser": - return e.ProcessContext.Parent.Credentials.EUser, nil - case "process.parent.file.change_time": - return int(e.ProcessContext.Parent.FileEvent.FileFields.CTime), nil - case "process.parent.file.filesystem": - return e.ResolveFileFilesystem(&e.ProcessContext.Parent.FileEvent), nil - case "process.parent.file.gid": - return int(e.ProcessContext.Parent.FileEvent.FileFields.GID), nil - case "process.parent.file.group": - return e.ResolveFileFieldsGroup(&e.ProcessContext.Parent.FileEvent.FileFields), nil - case "process.parent.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.ProcessContext.Parent.FileEvent.FileFields), nil - case "process.parent.file.inode": - return int(e.ProcessContext.Parent.FileEvent.FileFields.Inode), nil - case "process.parent.file.mode": - return int(e.ProcessContext.Parent.FileEvent.FileFields.Mode), nil - case "process.parent.file.modification_time": - return int(e.ProcessContext.Parent.FileEvent.FileFields.MTime), nil - case "process.parent.file.mount_id": - return int(e.ProcessContext.Parent.FileEvent.FileFields.MountID), nil - case "process.parent.file.name": - return e.ResolveFileBasename(&e.ProcessContext.Parent.FileEvent), nil - case "process.parent.file.name.length": - return e.ResolveFileBasename(&e.ProcessContext.Parent.FileEvent), nil - case "process.parent.file.path": - return e.ResolveFilePath(&e.ProcessContext.Parent.FileEvent), nil - case "process.parent.file.path.length": - return e.ResolveFilePath(&e.ProcessContext.Parent.FileEvent), nil - case "process.parent.file.rights": - return int(e.ResolveRights(&e.ProcessContext.Parent.FileEvent.FileFields)), nil - case "process.parent.file.uid": - return int(e.ProcessContext.Parent.FileEvent.FileFields.UID), nil - case "process.parent.file.user": - return e.ResolveFileFieldsUser(&e.ProcessContext.Parent.FileEvent.FileFields), nil - case "process.parent.fsgid": - return int(e.ProcessContext.Parent.Credentials.FSGID), nil - case "process.parent.fsgroup": - return e.ProcessContext.Parent.Credentials.FSGroup, nil - case "process.parent.fsuid": - return int(e.ProcessContext.Parent.Credentials.FSUID), nil - case "process.parent.fsuser": - return e.ProcessContext.Parent.Credentials.FSUser, nil - case "process.parent.gid": - return int(e.ProcessContext.Parent.Credentials.GID), nil - case "process.parent.group": - return e.ProcessContext.Parent.Credentials.Group, nil - case "process.parent.interpreter.file.change_time": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime), nil - case "process.parent.interpreter.file.filesystem": - return e.ResolveFileFilesystem(&e.ProcessContext.Parent.LinuxBinprm.FileEvent), nil - case "process.parent.interpreter.file.gid": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID), nil - case "process.parent.interpreter.file.group": - return e.ResolveFileFieldsGroup(&e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields), nil - case "process.parent.interpreter.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields), nil - case "process.parent.interpreter.file.inode": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode), nil - case "process.parent.interpreter.file.mode": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil - case "process.parent.interpreter.file.modification_time": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime), nil - case "process.parent.interpreter.file.mount_id": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID), nil - case "process.parent.interpreter.file.name": - return e.ResolveFileBasename(&e.ProcessContext.Parent.LinuxBinprm.FileEvent), nil - case "process.parent.interpreter.file.name.length": - return e.ResolveFileBasename(&e.ProcessContext.Parent.LinuxBinprm.FileEvent), nil - case "process.parent.interpreter.file.path": - return e.ResolveFilePath(&e.ProcessContext.Parent.LinuxBinprm.FileEvent), nil - case "process.parent.interpreter.file.path.length": - return e.ResolveFilePath(&e.ProcessContext.Parent.LinuxBinprm.FileEvent), nil - case "process.parent.interpreter.file.rights": - return int(e.ResolveRights(&e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields)), nil - case "process.parent.interpreter.file.uid": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID), nil - case "process.parent.interpreter.file.user": - return e.ResolveFileFieldsUser(&e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields), nil - case "process.parent.is_kworker": - return e.ProcessContext.Parent.PIDContext.IsKworker, nil - case "process.parent.is_thread": - return e.ProcessContext.Parent.IsThread, nil - case "process.parent.pid": - return int(e.ProcessContext.Parent.PIDContext.Pid), nil - case "process.parent.ppid": - return int(e.ProcessContext.Parent.PPid), nil - case "process.parent.tid": - return int(e.ProcessContext.Parent.PIDContext.Tid), nil - case "process.parent.tty_name": - return e.ProcessContext.Parent.TTYName, nil - case "process.parent.uid": - return int(e.ProcessContext.Parent.Credentials.UID), nil - case "process.parent.user": - return e.ProcessContext.Parent.Credentials.User, nil - case "process.pid": - return int(e.ProcessContext.Process.PIDContext.Pid), nil - case "process.ppid": - return int(e.ProcessContext.Process.PPid), nil - case "process.tid": - return int(e.ProcessContext.Process.PIDContext.Tid), nil - case "process.tty_name": - return e.ProcessContext.Process.TTYName, nil - case "process.uid": - return int(e.ProcessContext.Process.Credentials.UID), nil - case "process.user": - return e.ProcessContext.Process.Credentials.User, nil - case "ptrace.request": - return int(e.PTrace.Request), nil - case "ptrace.retval": - return int(e.PTrace.SyscallEvent.Retval), nil - case "ptrace.tracee.ancestors.args": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgs(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.args_flags": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgsFlags(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.args_options": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgsOptions(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.args_truncated": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgsTruncated(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.argv": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgv(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.argv0": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgv0(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.cap_effective": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.CapEffective) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.cap_permitted": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.CapPermitted) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.comm": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Comm - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.container.id": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.ContainerID - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.cookie": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Cookie) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.created_at": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int((*Event)(ctx.Object).ResolveProcessCreatedAt(&element.ProcessContext.Process)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.egid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.EGID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.egroup": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.EGroup - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.envp": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessEnvp(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.envs": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessEnvs(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.envs_truncated": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessEnvsTruncated(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.euid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.EUID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.euser": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.EUser - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.change_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.CTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.filesystem": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.gid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.GID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.group": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.in_upper_layer": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.inode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Inode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.mode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.modification_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.MTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.mount_id": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.MountID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.name": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.name.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.path": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.path.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.rights": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.FileEvent.FileFields)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.uid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.UID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.user": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.fsgid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.FSGID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.fsgroup": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.FSGroup - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.fsuid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.FSUID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.fsuser": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.FSUser - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.gid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.GID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.group": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.Group - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.change_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.filesystem": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.gid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.group": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.in_upper_layer": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.inode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.mode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.modification_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.mount_id": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.name": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.name.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.path": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.path.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.rights": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.uid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.user": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.is_kworker": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.PIDContext.IsKworker - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.is_thread": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.IsThread - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.pid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.PIDContext.Pid) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.ppid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.PPid) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.tid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.PIDContext.Tid) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.tty_name": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.TTYName - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.uid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.UID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.user": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.User - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.args": - return e.ResolveProcessArgs(&e.PTrace.Tracee.Process), nil - case "ptrace.tracee.args_flags": - return e.ResolveProcessArgsFlags(&e.PTrace.Tracee.Process), nil - case "ptrace.tracee.args_options": - return e.ResolveProcessArgsOptions(&e.PTrace.Tracee.Process), nil - case "ptrace.tracee.args_truncated": - return e.ResolveProcessArgsTruncated(&e.PTrace.Tracee.Process), nil - case "ptrace.tracee.argv": - return e.ResolveProcessArgv(&e.PTrace.Tracee.Process), nil - case "ptrace.tracee.argv0": - return e.ResolveProcessArgv0(&e.PTrace.Tracee.Process), nil - case "ptrace.tracee.cap_effective": - return int(e.PTrace.Tracee.Process.Credentials.CapEffective), nil - case "ptrace.tracee.cap_permitted": - return int(e.PTrace.Tracee.Process.Credentials.CapPermitted), nil - case "ptrace.tracee.comm": - return e.PTrace.Tracee.Process.Comm, nil - case "ptrace.tracee.container.id": - return e.PTrace.Tracee.Process.ContainerID, nil - case "ptrace.tracee.cookie": - return int(e.PTrace.Tracee.Process.Cookie), nil - case "ptrace.tracee.created_at": - return int(e.ResolveProcessCreatedAt(&e.PTrace.Tracee.Process)), nil - case "ptrace.tracee.egid": - return int(e.PTrace.Tracee.Process.Credentials.EGID), nil - case "ptrace.tracee.egroup": - return e.PTrace.Tracee.Process.Credentials.EGroup, nil - case "ptrace.tracee.envp": - return e.ResolveProcessEnvp(&e.PTrace.Tracee.Process), nil - case "ptrace.tracee.envs": - return e.ResolveProcessEnvs(&e.PTrace.Tracee.Process), nil - case "ptrace.tracee.envs_truncated": - return e.ResolveProcessEnvsTruncated(&e.PTrace.Tracee.Process), nil - case "ptrace.tracee.euid": - return int(e.PTrace.Tracee.Process.Credentials.EUID), nil - case "ptrace.tracee.euser": - return e.PTrace.Tracee.Process.Credentials.EUser, nil - case "ptrace.tracee.file.change_time": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.CTime), nil - case "ptrace.tracee.file.filesystem": - return e.ResolveFileFilesystem(&e.PTrace.Tracee.Process.FileEvent), nil - case "ptrace.tracee.file.gid": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.GID), nil - case "ptrace.tracee.file.group": - return e.ResolveFileFieldsGroup(&e.PTrace.Tracee.Process.FileEvent.FileFields), nil - case "ptrace.tracee.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.PTrace.Tracee.Process.FileEvent.FileFields), nil - case "ptrace.tracee.file.inode": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.Inode), nil - case "ptrace.tracee.file.mode": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.Mode), nil - case "ptrace.tracee.file.modification_time": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.MTime), nil - case "ptrace.tracee.file.mount_id": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.MountID), nil - case "ptrace.tracee.file.name": - return e.ResolveFileBasename(&e.PTrace.Tracee.Process.FileEvent), nil - case "ptrace.tracee.file.name.length": - return e.ResolveFileBasename(&e.PTrace.Tracee.Process.FileEvent), nil - case "ptrace.tracee.file.path": - return e.ResolveFilePath(&e.PTrace.Tracee.Process.FileEvent), nil - case "ptrace.tracee.file.path.length": - return e.ResolveFilePath(&e.PTrace.Tracee.Process.FileEvent), nil - case "ptrace.tracee.file.rights": - return int(e.ResolveRights(&e.PTrace.Tracee.Process.FileEvent.FileFields)), nil - case "ptrace.tracee.file.uid": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.UID), nil - case "ptrace.tracee.file.user": - return e.ResolveFileFieldsUser(&e.PTrace.Tracee.Process.FileEvent.FileFields), nil - case "ptrace.tracee.fsgid": - return int(e.PTrace.Tracee.Process.Credentials.FSGID), nil - case "ptrace.tracee.fsgroup": - return e.PTrace.Tracee.Process.Credentials.FSGroup, nil - case "ptrace.tracee.fsuid": - return int(e.PTrace.Tracee.Process.Credentials.FSUID), nil - case "ptrace.tracee.fsuser": - return e.PTrace.Tracee.Process.Credentials.FSUser, nil - case "ptrace.tracee.gid": - return int(e.PTrace.Tracee.Process.Credentials.GID), nil - case "ptrace.tracee.group": - return e.PTrace.Tracee.Process.Credentials.Group, nil - case "ptrace.tracee.interpreter.file.change_time": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil - case "ptrace.tracee.interpreter.file.filesystem": - return e.ResolveFileFilesystem(&e.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.interpreter.file.gid": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID), nil - case "ptrace.tracee.interpreter.file.group": - return e.ResolveFileFieldsGroup(&e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields), nil - case "ptrace.tracee.interpreter.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields), nil - case "ptrace.tracee.interpreter.file.inode": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil - case "ptrace.tracee.interpreter.file.mode": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil - case "ptrace.tracee.interpreter.file.modification_time": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil - case "ptrace.tracee.interpreter.file.mount_id": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil - case "ptrace.tracee.interpreter.file.name": - return e.ResolveFileBasename(&e.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.interpreter.file.name.length": - return e.ResolveFileBasename(&e.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.interpreter.file.path": - return e.ResolveFilePath(&e.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.interpreter.file.path.length": - return e.ResolveFilePath(&e.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.interpreter.file.rights": - return int(e.ResolveRights(&e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields)), nil - case "ptrace.tracee.interpreter.file.uid": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID), nil - case "ptrace.tracee.interpreter.file.user": - return e.ResolveFileFieldsUser(&e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields), nil - case "ptrace.tracee.is_kworker": - return e.PTrace.Tracee.Process.PIDContext.IsKworker, nil - case "ptrace.tracee.is_thread": - return e.PTrace.Tracee.Process.IsThread, nil - case "ptrace.tracee.parent.args": - return e.ResolveProcessArgs(e.PTrace.Tracee.Parent), nil - case "ptrace.tracee.parent.args_flags": - return e.ResolveProcessArgsFlags(e.PTrace.Tracee.Parent), nil - case "ptrace.tracee.parent.args_options": - return e.ResolveProcessArgsOptions(e.PTrace.Tracee.Parent), nil - case "ptrace.tracee.parent.args_truncated": - return e.ResolveProcessArgsTruncated(e.PTrace.Tracee.Parent), nil - case "ptrace.tracee.parent.argv": - return e.ResolveProcessArgv(e.PTrace.Tracee.Parent), nil - case "ptrace.tracee.parent.argv0": - return e.ResolveProcessArgv0(e.PTrace.Tracee.Parent), nil - case "ptrace.tracee.parent.cap_effective": - return int(e.PTrace.Tracee.Parent.Credentials.CapEffective), nil - case "ptrace.tracee.parent.cap_permitted": - return int(e.PTrace.Tracee.Parent.Credentials.CapPermitted), nil - case "ptrace.tracee.parent.comm": - return e.PTrace.Tracee.Parent.Comm, nil - case "ptrace.tracee.parent.container.id": - return e.PTrace.Tracee.Parent.ContainerID, nil - case "ptrace.tracee.parent.cookie": - return int(e.PTrace.Tracee.Parent.Cookie), nil - case "ptrace.tracee.parent.created_at": - return int(e.ResolveProcessCreatedAt(e.PTrace.Tracee.Parent)), nil - case "ptrace.tracee.parent.egid": - return int(e.PTrace.Tracee.Parent.Credentials.EGID), nil - case "ptrace.tracee.parent.egroup": - return e.PTrace.Tracee.Parent.Credentials.EGroup, nil - case "ptrace.tracee.parent.envp": - return e.ResolveProcessEnvp(e.PTrace.Tracee.Parent), nil - case "ptrace.tracee.parent.envs": - return e.ResolveProcessEnvs(e.PTrace.Tracee.Parent), nil - case "ptrace.tracee.parent.envs_truncated": - return e.ResolveProcessEnvsTruncated(e.PTrace.Tracee.Parent), nil - case "ptrace.tracee.parent.euid": - return int(e.PTrace.Tracee.Parent.Credentials.EUID), nil - case "ptrace.tracee.parent.euser": - return e.PTrace.Tracee.Parent.Credentials.EUser, nil - case "ptrace.tracee.parent.file.change_time": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.CTime), nil - case "ptrace.tracee.parent.file.filesystem": - return e.ResolveFileFilesystem(&e.PTrace.Tracee.Parent.FileEvent), nil - case "ptrace.tracee.parent.file.gid": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.GID), nil - case "ptrace.tracee.parent.file.group": - return e.ResolveFileFieldsGroup(&e.PTrace.Tracee.Parent.FileEvent.FileFields), nil - case "ptrace.tracee.parent.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.PTrace.Tracee.Parent.FileEvent.FileFields), nil - case "ptrace.tracee.parent.file.inode": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.Inode), nil - case "ptrace.tracee.parent.file.mode": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.Mode), nil - case "ptrace.tracee.parent.file.modification_time": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.MTime), nil - case "ptrace.tracee.parent.file.mount_id": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.MountID), nil - case "ptrace.tracee.parent.file.name": - return e.ResolveFileBasename(&e.PTrace.Tracee.Parent.FileEvent), nil - case "ptrace.tracee.parent.file.name.length": - return e.ResolveFileBasename(&e.PTrace.Tracee.Parent.FileEvent), nil - case "ptrace.tracee.parent.file.path": - return e.ResolveFilePath(&e.PTrace.Tracee.Parent.FileEvent), nil - case "ptrace.tracee.parent.file.path.length": - return e.ResolveFilePath(&e.PTrace.Tracee.Parent.FileEvent), nil - case "ptrace.tracee.parent.file.rights": - return int(e.ResolveRights(&e.PTrace.Tracee.Parent.FileEvent.FileFields)), nil - case "ptrace.tracee.parent.file.uid": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.UID), nil - case "ptrace.tracee.parent.file.user": - return e.ResolveFileFieldsUser(&e.PTrace.Tracee.Parent.FileEvent.FileFields), nil - case "ptrace.tracee.parent.fsgid": - return int(e.PTrace.Tracee.Parent.Credentials.FSGID), nil - case "ptrace.tracee.parent.fsgroup": - return e.PTrace.Tracee.Parent.Credentials.FSGroup, nil - case "ptrace.tracee.parent.fsuid": - return int(e.PTrace.Tracee.Parent.Credentials.FSUID), nil - case "ptrace.tracee.parent.fsuser": - return e.PTrace.Tracee.Parent.Credentials.FSUser, nil - case "ptrace.tracee.parent.gid": - return int(e.PTrace.Tracee.Parent.Credentials.GID), nil - case "ptrace.tracee.parent.group": - return e.PTrace.Tracee.Parent.Credentials.Group, nil - case "ptrace.tracee.parent.interpreter.file.change_time": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime), nil - case "ptrace.tracee.parent.interpreter.file.filesystem": - return e.ResolveFileFilesystem(&e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.parent.interpreter.file.gid": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID), nil - case "ptrace.tracee.parent.interpreter.file.group": - return e.ResolveFileFieldsGroup(&e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields), nil - case "ptrace.tracee.parent.interpreter.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields), nil - case "ptrace.tracee.parent.interpreter.file.inode": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode), nil - case "ptrace.tracee.parent.interpreter.file.mode": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil - case "ptrace.tracee.parent.interpreter.file.modification_time": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime), nil - case "ptrace.tracee.parent.interpreter.file.mount_id": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID), nil - case "ptrace.tracee.parent.interpreter.file.name": - return e.ResolveFileBasename(&e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.parent.interpreter.file.name.length": - return e.ResolveFileBasename(&e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.parent.interpreter.file.path": - return e.ResolveFilePath(&e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.parent.interpreter.file.path.length": - return e.ResolveFilePath(&e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.parent.interpreter.file.rights": - return int(e.ResolveRights(&e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields)), nil - case "ptrace.tracee.parent.interpreter.file.uid": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID), nil - case "ptrace.tracee.parent.interpreter.file.user": - return e.ResolveFileFieldsUser(&e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields), nil - case "ptrace.tracee.parent.is_kworker": - return e.PTrace.Tracee.Parent.PIDContext.IsKworker, nil - case "ptrace.tracee.parent.is_thread": - return e.PTrace.Tracee.Parent.IsThread, nil - case "ptrace.tracee.parent.pid": - return int(e.PTrace.Tracee.Parent.PIDContext.Pid), nil - case "ptrace.tracee.parent.ppid": - return int(e.PTrace.Tracee.Parent.PPid), nil - case "ptrace.tracee.parent.tid": - return int(e.PTrace.Tracee.Parent.PIDContext.Tid), nil - case "ptrace.tracee.parent.tty_name": - return e.PTrace.Tracee.Parent.TTYName, nil - case "ptrace.tracee.parent.uid": - return int(e.PTrace.Tracee.Parent.Credentials.UID), nil - case "ptrace.tracee.parent.user": - return e.PTrace.Tracee.Parent.Credentials.User, nil - case "ptrace.tracee.pid": - return int(e.PTrace.Tracee.Process.PIDContext.Pid), nil - case "ptrace.tracee.ppid": - return int(e.PTrace.Tracee.Process.PPid), nil - case "ptrace.tracee.tid": - return int(e.PTrace.Tracee.Process.PIDContext.Tid), nil - case "ptrace.tracee.tty_name": - return e.PTrace.Tracee.Process.TTYName, nil - case "ptrace.tracee.uid": - return int(e.PTrace.Tracee.Process.Credentials.UID), nil - case "ptrace.tracee.user": - return e.PTrace.Tracee.Process.Credentials.User, nil - case "removexattr.file.change_time": - return int(e.RemoveXAttr.File.FileFields.CTime), nil - case "removexattr.file.destination.name": - return e.ResolveXAttrName(&e.RemoveXAttr), nil - case "removexattr.file.destination.namespace": - return e.ResolveXAttrNamespace(&e.RemoveXAttr), nil - case "removexattr.file.filesystem": - return e.ResolveFileFilesystem(&e.RemoveXAttr.File), nil - case "removexattr.file.gid": - return int(e.RemoveXAttr.File.FileFields.GID), nil - case "removexattr.file.group": - return e.ResolveFileFieldsGroup(&e.RemoveXAttr.File.FileFields), nil - case "removexattr.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.RemoveXAttr.File.FileFields), nil - case "removexattr.file.inode": - return int(e.RemoveXAttr.File.FileFields.Inode), nil - case "removexattr.file.mode": - return int(e.RemoveXAttr.File.FileFields.Mode), nil - case "removexattr.file.modification_time": - return int(e.RemoveXAttr.File.FileFields.MTime), nil - case "removexattr.file.mount_id": - return int(e.RemoveXAttr.File.FileFields.MountID), nil - case "removexattr.file.name": - return e.ResolveFileBasename(&e.RemoveXAttr.File), nil - case "removexattr.file.name.length": - return e.ResolveFileBasename(&e.RemoveXAttr.File), nil - case "removexattr.file.path": - return e.ResolveFilePath(&e.RemoveXAttr.File), nil - case "removexattr.file.path.length": - return e.ResolveFilePath(&e.RemoveXAttr.File), nil - case "removexattr.file.rights": - return int(e.ResolveRights(&e.RemoveXAttr.File.FileFields)), nil - case "removexattr.file.uid": - return int(e.RemoveXAttr.File.FileFields.UID), nil - case "removexattr.file.user": - return e.ResolveFileFieldsUser(&e.RemoveXAttr.File.FileFields), nil - case "removexattr.retval": - return int(e.RemoveXAttr.SyscallEvent.Retval), nil - case "rename.file.change_time": - return int(e.Rename.Old.FileFields.CTime), nil - case "rename.file.destination.change_time": - return int(e.Rename.New.FileFields.CTime), nil - case "rename.file.destination.filesystem": - return e.ResolveFileFilesystem(&e.Rename.New), nil - case "rename.file.destination.gid": - return int(e.Rename.New.FileFields.GID), nil - case "rename.file.destination.group": - return e.ResolveFileFieldsGroup(&e.Rename.New.FileFields), nil - case "rename.file.destination.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Rename.New.FileFields), nil - case "rename.file.destination.inode": - return int(e.Rename.New.FileFields.Inode), nil - case "rename.file.destination.mode": - return int(e.Rename.New.FileFields.Mode), nil - case "rename.file.destination.modification_time": - return int(e.Rename.New.FileFields.MTime), nil - case "rename.file.destination.mount_id": - return int(e.Rename.New.FileFields.MountID), nil - case "rename.file.destination.name": - return e.ResolveFileBasename(&e.Rename.New), nil - case "rename.file.destination.name.length": - return e.ResolveFileBasename(&e.Rename.New), nil - case "rename.file.destination.path": - return e.ResolveFilePath(&e.Rename.New), nil - case "rename.file.destination.path.length": - return e.ResolveFilePath(&e.Rename.New), nil - case "rename.file.destination.rights": - return int(e.ResolveRights(&e.Rename.New.FileFields)), nil - case "rename.file.destination.uid": - return int(e.Rename.New.FileFields.UID), nil - case "rename.file.destination.user": - return e.ResolveFileFieldsUser(&e.Rename.New.FileFields), nil - case "rename.file.filesystem": - return e.ResolveFileFilesystem(&e.Rename.Old), nil - case "rename.file.gid": - return int(e.Rename.Old.FileFields.GID), nil - case "rename.file.group": - return e.ResolveFileFieldsGroup(&e.Rename.Old.FileFields), nil - case "rename.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Rename.Old.FileFields), nil - case "rename.file.inode": - return int(e.Rename.Old.FileFields.Inode), nil - case "rename.file.mode": - return int(e.Rename.Old.FileFields.Mode), nil - case "rename.file.modification_time": - return int(e.Rename.Old.FileFields.MTime), nil - case "rename.file.mount_id": - return int(e.Rename.Old.FileFields.MountID), nil - case "rename.file.name": - return e.ResolveFileBasename(&e.Rename.Old), nil - case "rename.file.name.length": - return e.ResolveFileBasename(&e.Rename.Old), nil - case "rename.file.path": - return e.ResolveFilePath(&e.Rename.Old), nil - case "rename.file.path.length": - return e.ResolveFilePath(&e.Rename.Old), nil - case "rename.file.rights": - return int(e.ResolveRights(&e.Rename.Old.FileFields)), nil - case "rename.file.uid": - return int(e.Rename.Old.FileFields.UID), nil - case "rename.file.user": - return e.ResolveFileFieldsUser(&e.Rename.Old.FileFields), nil - case "rename.retval": - return int(e.Rename.SyscallEvent.Retval), nil - case "rmdir.file.change_time": - return int(e.Rmdir.File.FileFields.CTime), nil - case "rmdir.file.filesystem": - return e.ResolveFileFilesystem(&e.Rmdir.File), nil - case "rmdir.file.gid": - return int(e.Rmdir.File.FileFields.GID), nil - case "rmdir.file.group": - return e.ResolveFileFieldsGroup(&e.Rmdir.File.FileFields), nil - case "rmdir.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Rmdir.File.FileFields), nil - case "rmdir.file.inode": - return int(e.Rmdir.File.FileFields.Inode), nil - case "rmdir.file.mode": - return int(e.Rmdir.File.FileFields.Mode), nil - case "rmdir.file.modification_time": - return int(e.Rmdir.File.FileFields.MTime), nil - case "rmdir.file.mount_id": - return int(e.Rmdir.File.FileFields.MountID), nil - case "rmdir.file.name": - return e.ResolveFileBasename(&e.Rmdir.File), nil - case "rmdir.file.name.length": - return e.ResolveFileBasename(&e.Rmdir.File), nil - case "rmdir.file.path": - return e.ResolveFilePath(&e.Rmdir.File), nil - case "rmdir.file.path.length": - return e.ResolveFilePath(&e.Rmdir.File), nil - case "rmdir.file.rights": - return int(e.ResolveRights(&e.Rmdir.File.FileFields)), nil - case "rmdir.file.uid": - return int(e.Rmdir.File.FileFields.UID), nil - case "rmdir.file.user": - return e.ResolveFileFieldsUser(&e.Rmdir.File.FileFields), nil - case "rmdir.retval": - return int(e.Rmdir.SyscallEvent.Retval), nil - case "selinux.bool.name": - return e.ResolveSELinuxBoolName(&e.SELinux), nil - case "selinux.bool.state": - return e.SELinux.BoolChangeValue, nil - case "selinux.bool_commit.state": - return e.SELinux.BoolCommitValue, nil - case "selinux.enforce.status": - return e.SELinux.EnforceStatus, nil - case "setgid.egid": - return int(e.SetGID.EGID), nil - case "setgid.egroup": - return e.ResolveSetgidEGroup(&e.SetGID), nil - case "setgid.fsgid": - return int(e.SetGID.FSGID), nil - case "setgid.fsgroup": - return e.ResolveSetgidFSGroup(&e.SetGID), nil - case "setgid.gid": - return int(e.SetGID.GID), nil - case "setgid.group": - return e.ResolveSetgidGroup(&e.SetGID), nil - case "setuid.euid": - return int(e.SetUID.EUID), nil - case "setuid.euser": - return e.ResolveSetuidEUser(&e.SetUID), nil - case "setuid.fsuid": - return int(e.SetUID.FSUID), nil - case "setuid.fsuser": - return e.ResolveSetuidFSUser(&e.SetUID), nil - case "setuid.uid": - return int(e.SetUID.UID), nil - case "setuid.user": - return e.ResolveSetuidUser(&e.SetUID), nil - case "setxattr.file.change_time": - return int(e.SetXAttr.File.FileFields.CTime), nil - case "setxattr.file.destination.name": - return e.ResolveXAttrName(&e.SetXAttr), nil - case "setxattr.file.destination.namespace": - return e.ResolveXAttrNamespace(&e.SetXAttr), nil - case "setxattr.file.filesystem": - return e.ResolveFileFilesystem(&e.SetXAttr.File), nil - case "setxattr.file.gid": - return int(e.SetXAttr.File.FileFields.GID), nil - case "setxattr.file.group": - return e.ResolveFileFieldsGroup(&e.SetXAttr.File.FileFields), nil - case "setxattr.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.SetXAttr.File.FileFields), nil - case "setxattr.file.inode": - return int(e.SetXAttr.File.FileFields.Inode), nil - case "setxattr.file.mode": - return int(e.SetXAttr.File.FileFields.Mode), nil - case "setxattr.file.modification_time": - return int(e.SetXAttr.File.FileFields.MTime), nil - case "setxattr.file.mount_id": - return int(e.SetXAttr.File.FileFields.MountID), nil - case "setxattr.file.name": - return e.ResolveFileBasename(&e.SetXAttr.File), nil - case "setxattr.file.name.length": - return e.ResolveFileBasename(&e.SetXAttr.File), nil - case "setxattr.file.path": - return e.ResolveFilePath(&e.SetXAttr.File), nil - case "setxattr.file.path.length": - return e.ResolveFilePath(&e.SetXAttr.File), nil - case "setxattr.file.rights": - return int(e.ResolveRights(&e.SetXAttr.File.FileFields)), nil - case "setxattr.file.uid": - return int(e.SetXAttr.File.FileFields.UID), nil - case "setxattr.file.user": - return e.ResolveFileFieldsUser(&e.SetXAttr.File.FileFields), nil - case "setxattr.retval": - return int(e.SetXAttr.SyscallEvent.Retval), nil - case "signal.pid": - return int(e.Signal.PID), nil - case "signal.retval": - return int(e.Signal.SyscallEvent.Retval), nil - case "signal.target.ancestors.args": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgs(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.args_flags": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgsFlags(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.args_options": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgsOptions(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.args_truncated": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgsTruncated(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.argv": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgv(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.argv0": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgv0(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.cap_effective": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.CapEffective) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.cap_permitted": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.CapPermitted) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.comm": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Comm - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.container.id": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.ContainerID - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.cookie": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Cookie) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.created_at": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int((*Event)(ctx.Object).ResolveProcessCreatedAt(&element.ProcessContext.Process)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.egid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.EGID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.egroup": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.EGroup - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.envp": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessEnvp(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.envs": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessEnvs(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.envs_truncated": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessEnvsTruncated(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.euid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.EUID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.euser": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.EUser - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.change_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.CTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.filesystem": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.gid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.GID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.group": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.in_upper_layer": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.inode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Inode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.mode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.modification_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.MTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.mount_id": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.MountID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.name": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.name.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.path": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.path.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.rights": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.FileEvent.FileFields)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.uid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.UID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.user": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.fsgid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.FSGID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.fsgroup": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.FSGroup - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.fsuid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.FSUID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.fsuser": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.FSUser - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.gid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.GID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.group": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.Group - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.change_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.filesystem": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.gid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.group": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.in_upper_layer": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.inode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.mode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.modification_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.mount_id": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.name": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.name.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.path": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.path.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.rights": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.uid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.user": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.is_kworker": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.PIDContext.IsKworker - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.is_thread": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.IsThread - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.pid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.PIDContext.Pid) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.ppid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.PPid) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.tid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.PIDContext.Tid) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.tty_name": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.TTYName - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.uid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.UID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.user": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.User - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.args": - return e.ResolveProcessArgs(&e.Signal.Target.Process), nil - case "signal.target.args_flags": - return e.ResolveProcessArgsFlags(&e.Signal.Target.Process), nil - case "signal.target.args_options": - return e.ResolveProcessArgsOptions(&e.Signal.Target.Process), nil - case "signal.target.args_truncated": - return e.ResolveProcessArgsTruncated(&e.Signal.Target.Process), nil - case "signal.target.argv": - return e.ResolveProcessArgv(&e.Signal.Target.Process), nil - case "signal.target.argv0": - return e.ResolveProcessArgv0(&e.Signal.Target.Process), nil - case "signal.target.cap_effective": - return int(e.Signal.Target.Process.Credentials.CapEffective), nil - case "signal.target.cap_permitted": - return int(e.Signal.Target.Process.Credentials.CapPermitted), nil - case "signal.target.comm": - return e.Signal.Target.Process.Comm, nil - case "signal.target.container.id": - return e.Signal.Target.Process.ContainerID, nil - case "signal.target.cookie": - return int(e.Signal.Target.Process.Cookie), nil - case "signal.target.created_at": - return int(e.ResolveProcessCreatedAt(&e.Signal.Target.Process)), nil - case "signal.target.egid": - return int(e.Signal.Target.Process.Credentials.EGID), nil - case "signal.target.egroup": - return e.Signal.Target.Process.Credentials.EGroup, nil - case "signal.target.envp": - return e.ResolveProcessEnvp(&e.Signal.Target.Process), nil - case "signal.target.envs": - return e.ResolveProcessEnvs(&e.Signal.Target.Process), nil - case "signal.target.envs_truncated": - return e.ResolveProcessEnvsTruncated(&e.Signal.Target.Process), nil - case "signal.target.euid": - return int(e.Signal.Target.Process.Credentials.EUID), nil - case "signal.target.euser": - return e.Signal.Target.Process.Credentials.EUser, nil - case "signal.target.file.change_time": - return int(e.Signal.Target.Process.FileEvent.FileFields.CTime), nil - case "signal.target.file.filesystem": - return e.ResolveFileFilesystem(&e.Signal.Target.Process.FileEvent), nil - case "signal.target.file.gid": - return int(e.Signal.Target.Process.FileEvent.FileFields.GID), nil - case "signal.target.file.group": - return e.ResolveFileFieldsGroup(&e.Signal.Target.Process.FileEvent.FileFields), nil - case "signal.target.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Signal.Target.Process.FileEvent.FileFields), nil - case "signal.target.file.inode": - return int(e.Signal.Target.Process.FileEvent.FileFields.Inode), nil - case "signal.target.file.mode": - return int(e.Signal.Target.Process.FileEvent.FileFields.Mode), nil - case "signal.target.file.modification_time": - return int(e.Signal.Target.Process.FileEvent.FileFields.MTime), nil - case "signal.target.file.mount_id": - return int(e.Signal.Target.Process.FileEvent.FileFields.MountID), nil - case "signal.target.file.name": - return e.ResolveFileBasename(&e.Signal.Target.Process.FileEvent), nil - case "signal.target.file.name.length": - return e.ResolveFileBasename(&e.Signal.Target.Process.FileEvent), nil - case "signal.target.file.path": - return e.ResolveFilePath(&e.Signal.Target.Process.FileEvent), nil - case "signal.target.file.path.length": - return e.ResolveFilePath(&e.Signal.Target.Process.FileEvent), nil - case "signal.target.file.rights": - return int(e.ResolveRights(&e.Signal.Target.Process.FileEvent.FileFields)), nil - case "signal.target.file.uid": - return int(e.Signal.Target.Process.FileEvent.FileFields.UID), nil - case "signal.target.file.user": - return e.ResolveFileFieldsUser(&e.Signal.Target.Process.FileEvent.FileFields), nil - case "signal.target.fsgid": - return int(e.Signal.Target.Process.Credentials.FSGID), nil - case "signal.target.fsgroup": - return e.Signal.Target.Process.Credentials.FSGroup, nil - case "signal.target.fsuid": - return int(e.Signal.Target.Process.Credentials.FSUID), nil - case "signal.target.fsuser": - return e.Signal.Target.Process.Credentials.FSUser, nil - case "signal.target.gid": - return int(e.Signal.Target.Process.Credentials.GID), nil - case "signal.target.group": - return e.Signal.Target.Process.Credentials.Group, nil - case "signal.target.interpreter.file.change_time": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil - case "signal.target.interpreter.file.filesystem": - return e.ResolveFileFilesystem(&e.Signal.Target.Process.LinuxBinprm.FileEvent), nil - case "signal.target.interpreter.file.gid": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID), nil - case "signal.target.interpreter.file.group": - return e.ResolveFileFieldsGroup(&e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields), nil - case "signal.target.interpreter.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields), nil - case "signal.target.interpreter.file.inode": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil - case "signal.target.interpreter.file.mode": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil - case "signal.target.interpreter.file.modification_time": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil - case "signal.target.interpreter.file.mount_id": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil - case "signal.target.interpreter.file.name": - return e.ResolveFileBasename(&e.Signal.Target.Process.LinuxBinprm.FileEvent), nil - case "signal.target.interpreter.file.name.length": - return e.ResolveFileBasename(&e.Signal.Target.Process.LinuxBinprm.FileEvent), nil - case "signal.target.interpreter.file.path": - return e.ResolveFilePath(&e.Signal.Target.Process.LinuxBinprm.FileEvent), nil - case "signal.target.interpreter.file.path.length": - return e.ResolveFilePath(&e.Signal.Target.Process.LinuxBinprm.FileEvent), nil - case "signal.target.interpreter.file.rights": - return int(e.ResolveRights(&e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields)), nil - case "signal.target.interpreter.file.uid": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID), nil - case "signal.target.interpreter.file.user": - return e.ResolveFileFieldsUser(&e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields), nil - case "signal.target.is_kworker": - return e.Signal.Target.Process.PIDContext.IsKworker, nil - case "signal.target.is_thread": - return e.Signal.Target.Process.IsThread, nil - case "signal.target.parent.args": - return e.ResolveProcessArgs(e.Signal.Target.Parent), nil - case "signal.target.parent.args_flags": - return e.ResolveProcessArgsFlags(e.Signal.Target.Parent), nil - case "signal.target.parent.args_options": - return e.ResolveProcessArgsOptions(e.Signal.Target.Parent), nil - case "signal.target.parent.args_truncated": - return e.ResolveProcessArgsTruncated(e.Signal.Target.Parent), nil - case "signal.target.parent.argv": - return e.ResolveProcessArgv(e.Signal.Target.Parent), nil - case "signal.target.parent.argv0": - return e.ResolveProcessArgv0(e.Signal.Target.Parent), nil - case "signal.target.parent.cap_effective": - return int(e.Signal.Target.Parent.Credentials.CapEffective), nil - case "signal.target.parent.cap_permitted": - return int(e.Signal.Target.Parent.Credentials.CapPermitted), nil - case "signal.target.parent.comm": - return e.Signal.Target.Parent.Comm, nil - case "signal.target.parent.container.id": - return e.Signal.Target.Parent.ContainerID, nil - case "signal.target.parent.cookie": - return int(e.Signal.Target.Parent.Cookie), nil - case "signal.target.parent.created_at": - return int(e.ResolveProcessCreatedAt(e.Signal.Target.Parent)), nil - case "signal.target.parent.egid": - return int(e.Signal.Target.Parent.Credentials.EGID), nil - case "signal.target.parent.egroup": - return e.Signal.Target.Parent.Credentials.EGroup, nil - case "signal.target.parent.envp": - return e.ResolveProcessEnvp(e.Signal.Target.Parent), nil - case "signal.target.parent.envs": - return e.ResolveProcessEnvs(e.Signal.Target.Parent), nil - case "signal.target.parent.envs_truncated": - return e.ResolveProcessEnvsTruncated(e.Signal.Target.Parent), nil - case "signal.target.parent.euid": - return int(e.Signal.Target.Parent.Credentials.EUID), nil - case "signal.target.parent.euser": - return e.Signal.Target.Parent.Credentials.EUser, nil - case "signal.target.parent.file.change_time": - return int(e.Signal.Target.Parent.FileEvent.FileFields.CTime), nil - case "signal.target.parent.file.filesystem": - return e.ResolveFileFilesystem(&e.Signal.Target.Parent.FileEvent), nil - case "signal.target.parent.file.gid": - return int(e.Signal.Target.Parent.FileEvent.FileFields.GID), nil - case "signal.target.parent.file.group": - return e.ResolveFileFieldsGroup(&e.Signal.Target.Parent.FileEvent.FileFields), nil - case "signal.target.parent.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Signal.Target.Parent.FileEvent.FileFields), nil - case "signal.target.parent.file.inode": - return int(e.Signal.Target.Parent.FileEvent.FileFields.Inode), nil - case "signal.target.parent.file.mode": - return int(e.Signal.Target.Parent.FileEvent.FileFields.Mode), nil - case "signal.target.parent.file.modification_time": - return int(e.Signal.Target.Parent.FileEvent.FileFields.MTime), nil - case "signal.target.parent.file.mount_id": - return int(e.Signal.Target.Parent.FileEvent.FileFields.MountID), nil - case "signal.target.parent.file.name": - return e.ResolveFileBasename(&e.Signal.Target.Parent.FileEvent), nil - case "signal.target.parent.file.name.length": - return e.ResolveFileBasename(&e.Signal.Target.Parent.FileEvent), nil - case "signal.target.parent.file.path": - return e.ResolveFilePath(&e.Signal.Target.Parent.FileEvent), nil - case "signal.target.parent.file.path.length": - return e.ResolveFilePath(&e.Signal.Target.Parent.FileEvent), nil - case "signal.target.parent.file.rights": - return int(e.ResolveRights(&e.Signal.Target.Parent.FileEvent.FileFields)), nil - case "signal.target.parent.file.uid": - return int(e.Signal.Target.Parent.FileEvent.FileFields.UID), nil - case "signal.target.parent.file.user": - return e.ResolveFileFieldsUser(&e.Signal.Target.Parent.FileEvent.FileFields), nil - case "signal.target.parent.fsgid": - return int(e.Signal.Target.Parent.Credentials.FSGID), nil - case "signal.target.parent.fsgroup": - return e.Signal.Target.Parent.Credentials.FSGroup, nil - case "signal.target.parent.fsuid": - return int(e.Signal.Target.Parent.Credentials.FSUID), nil - case "signal.target.parent.fsuser": - return e.Signal.Target.Parent.Credentials.FSUser, nil - case "signal.target.parent.gid": - return int(e.Signal.Target.Parent.Credentials.GID), nil - case "signal.target.parent.group": - return e.Signal.Target.Parent.Credentials.Group, nil - case "signal.target.parent.interpreter.file.change_time": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime), nil - case "signal.target.parent.interpreter.file.filesystem": - return e.ResolveFileFilesystem(&e.Signal.Target.Parent.LinuxBinprm.FileEvent), nil - case "signal.target.parent.interpreter.file.gid": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID), nil - case "signal.target.parent.interpreter.file.group": - return e.ResolveFileFieldsGroup(&e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields), nil - case "signal.target.parent.interpreter.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields), nil - case "signal.target.parent.interpreter.file.inode": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode), nil - case "signal.target.parent.interpreter.file.mode": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil - case "signal.target.parent.interpreter.file.modification_time": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime), nil - case "signal.target.parent.interpreter.file.mount_id": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID), nil - case "signal.target.parent.interpreter.file.name": - return e.ResolveFileBasename(&e.Signal.Target.Parent.LinuxBinprm.FileEvent), nil - case "signal.target.parent.interpreter.file.name.length": - return e.ResolveFileBasename(&e.Signal.Target.Parent.LinuxBinprm.FileEvent), nil - case "signal.target.parent.interpreter.file.path": - return e.ResolveFilePath(&e.Signal.Target.Parent.LinuxBinprm.FileEvent), nil - case "signal.target.parent.interpreter.file.path.length": - return e.ResolveFilePath(&e.Signal.Target.Parent.LinuxBinprm.FileEvent), nil - case "signal.target.parent.interpreter.file.rights": - return int(e.ResolveRights(&e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields)), nil - case "signal.target.parent.interpreter.file.uid": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID), nil - case "signal.target.parent.interpreter.file.user": - return e.ResolveFileFieldsUser(&e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields), nil - case "signal.target.parent.is_kworker": - return e.Signal.Target.Parent.PIDContext.IsKworker, nil - case "signal.target.parent.is_thread": - return e.Signal.Target.Parent.IsThread, nil - case "signal.target.parent.pid": - return int(e.Signal.Target.Parent.PIDContext.Pid), nil - case "signal.target.parent.ppid": - return int(e.Signal.Target.Parent.PPid), nil - case "signal.target.parent.tid": - return int(e.Signal.Target.Parent.PIDContext.Tid), nil - case "signal.target.parent.tty_name": - return e.Signal.Target.Parent.TTYName, nil - case "signal.target.parent.uid": - return int(e.Signal.Target.Parent.Credentials.UID), nil - case "signal.target.parent.user": - return e.Signal.Target.Parent.Credentials.User, nil - case "signal.target.pid": - return int(e.Signal.Target.Process.PIDContext.Pid), nil - case "signal.target.ppid": - return int(e.Signal.Target.Process.PPid), nil - case "signal.target.tid": - return int(e.Signal.Target.Process.PIDContext.Tid), nil - case "signal.target.tty_name": - return e.Signal.Target.Process.TTYName, nil - case "signal.target.uid": - return int(e.Signal.Target.Process.Credentials.UID), nil - case "signal.target.user": - return e.Signal.Target.Process.Credentials.User, nil - case "signal.type": - return int(e.Signal.Type), nil - case "splice.file.change_time": - return int(e.Splice.File.FileFields.CTime), nil - case "splice.file.filesystem": - return e.ResolveFileFilesystem(&e.Splice.File), nil - case "splice.file.gid": - return int(e.Splice.File.FileFields.GID), nil - case "splice.file.group": - return e.ResolveFileFieldsGroup(&e.Splice.File.FileFields), nil - case "splice.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Splice.File.FileFields), nil - case "splice.file.inode": - return int(e.Splice.File.FileFields.Inode), nil - case "splice.file.mode": - return int(e.Splice.File.FileFields.Mode), nil - case "splice.file.modification_time": - return int(e.Splice.File.FileFields.MTime), nil - case "splice.file.mount_id": - return int(e.Splice.File.FileFields.MountID), nil - case "splice.file.name": - return e.ResolveFileBasename(&e.Splice.File), nil - case "splice.file.name.length": - return e.ResolveFileBasename(&e.Splice.File), nil - case "splice.file.path": - return e.ResolveFilePath(&e.Splice.File), nil - case "splice.file.path.length": - return e.ResolveFilePath(&e.Splice.File), nil - case "splice.file.rights": - return int(e.ResolveRights(&e.Splice.File.FileFields)), nil - case "splice.file.uid": - return int(e.Splice.File.FileFields.UID), nil - case "splice.file.user": - return e.ResolveFileFieldsUser(&e.Splice.File.FileFields), nil - case "splice.pipe_entry_flag": - return int(e.Splice.PipeEntryFlag), nil - case "splice.pipe_exit_flag": - return int(e.Splice.PipeExitFlag), nil - case "splice.retval": - return int(e.Splice.SyscallEvent.Retval), nil - case "unlink.file.change_time": - return int(e.Unlink.File.FileFields.CTime), nil - case "unlink.file.filesystem": - return e.ResolveFileFilesystem(&e.Unlink.File), nil - case "unlink.file.gid": - return int(e.Unlink.File.FileFields.GID), nil - case "unlink.file.group": - return e.ResolveFileFieldsGroup(&e.Unlink.File.FileFields), nil - case "unlink.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Unlink.File.FileFields), nil - case "unlink.file.inode": - return int(e.Unlink.File.FileFields.Inode), nil - case "unlink.file.mode": - return int(e.Unlink.File.FileFields.Mode), nil - case "unlink.file.modification_time": - return int(e.Unlink.File.FileFields.MTime), nil - case "unlink.file.mount_id": - return int(e.Unlink.File.FileFields.MountID), nil - case "unlink.file.name": - return e.ResolveFileBasename(&e.Unlink.File), nil - case "unlink.file.name.length": - return e.ResolveFileBasename(&e.Unlink.File), nil - case "unlink.file.path": - return e.ResolveFilePath(&e.Unlink.File), nil - case "unlink.file.path.length": - return e.ResolveFilePath(&e.Unlink.File), nil - case "unlink.file.rights": - return int(e.ResolveRights(&e.Unlink.File.FileFields)), nil - case "unlink.file.uid": - return int(e.Unlink.File.FileFields.UID), nil - case "unlink.file.user": - return e.ResolveFileFieldsUser(&e.Unlink.File.FileFields), nil - case "unlink.flags": - return int(e.Unlink.Flags), nil - case "unlink.retval": - return int(e.Unlink.SyscallEvent.Retval), nil - case "unload_module.name": - return e.UnloadModule.Name, nil - case "unload_module.retval": - return int(e.UnloadModule.SyscallEvent.Retval), nil - case "utimes.file.change_time": - return int(e.Utimes.File.FileFields.CTime), nil - case "utimes.file.filesystem": - return e.ResolveFileFilesystem(&e.Utimes.File), nil - case "utimes.file.gid": - return int(e.Utimes.File.FileFields.GID), nil - case "utimes.file.group": - return e.ResolveFileFieldsGroup(&e.Utimes.File.FileFields), nil - case "utimes.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Utimes.File.FileFields), nil - case "utimes.file.inode": - return int(e.Utimes.File.FileFields.Inode), nil - case "utimes.file.mode": - return int(e.Utimes.File.FileFields.Mode), nil - case "utimes.file.modification_time": - return int(e.Utimes.File.FileFields.MTime), nil - case "utimes.file.mount_id": - return int(e.Utimes.File.FileFields.MountID), nil - case "utimes.file.name": - return e.ResolveFileBasename(&e.Utimes.File), nil - case "utimes.file.name.length": - return e.ResolveFileBasename(&e.Utimes.File), nil - case "utimes.file.path": - return e.ResolveFilePath(&e.Utimes.File), nil - case "utimes.file.path.length": - return e.ResolveFilePath(&e.Utimes.File), nil - case "utimes.file.rights": - return int(e.ResolveRights(&e.Utimes.File.FileFields)), nil - case "utimes.file.uid": - return int(e.Utimes.File.FileFields.UID), nil - case "utimes.file.user": - return e.ResolveFileFieldsUser(&e.Utimes.File.FileFields), nil - case "utimes.retval": - return int(e.Utimes.SyscallEvent.Retval), nil - } - return nil, &eval.ErrFieldNotFound{Field: field} -} -func (e *Event) GetFieldEventType(field eval.Field) (eval.EventType, error) { - switch field { - case "async": - return "*", nil - case "bind.addr.family": - return "bind", nil - case "bind.addr.ip": - return "bind", nil - case "bind.addr.port": - return "bind", nil - case "bind.retval": - return "bind", nil - case "bpf.cmd": - return "bpf", nil - case "bpf.map.name": - return "bpf", nil - case "bpf.map.type": - return "bpf", nil - case "bpf.prog.attach_type": - return "bpf", nil - case "bpf.prog.helpers": - return "bpf", nil - case "bpf.prog.name": - return "bpf", nil - case "bpf.prog.tag": - return "bpf", nil - case "bpf.prog.type": - return "bpf", nil - case "bpf.retval": - return "bpf", nil - case "capset.cap_effective": - return "capset", nil - case "capset.cap_permitted": - return "capset", nil - case "chmod.file.change_time": - return "chmod", nil - case "chmod.file.destination.mode": - return "chmod", nil - case "chmod.file.destination.rights": - return "chmod", nil - case "chmod.file.filesystem": - return "chmod", nil - case "chmod.file.gid": - return "chmod", nil - case "chmod.file.group": - return "chmod", nil - case "chmod.file.in_upper_layer": - return "chmod", nil - case "chmod.file.inode": - return "chmod", nil - case "chmod.file.mode": - return "chmod", nil - case "chmod.file.modification_time": - return "chmod", nil - case "chmod.file.mount_id": - return "chmod", nil - case "chmod.file.name": - return "chmod", nil - case "chmod.file.name.length": - return "chmod", nil - case "chmod.file.path": - return "chmod", nil - case "chmod.file.path.length": - return "chmod", nil - case "chmod.file.rights": - return "chmod", nil - case "chmod.file.uid": - return "chmod", nil - case "chmod.file.user": - return "chmod", nil - case "chmod.retval": - return "chmod", nil - case "chown.file.change_time": - return "chown", nil - case "chown.file.destination.gid": - return "chown", nil - case "chown.file.destination.group": - return "chown", nil - case "chown.file.destination.uid": - return "chown", nil - case "chown.file.destination.user": - return "chown", nil - case "chown.file.filesystem": - return "chown", nil - case "chown.file.gid": - return "chown", nil - case "chown.file.group": - return "chown", nil - case "chown.file.in_upper_layer": - return "chown", nil - case "chown.file.inode": - return "chown", nil - case "chown.file.mode": - return "chown", nil - case "chown.file.modification_time": - return "chown", nil - case "chown.file.mount_id": - return "chown", nil - case "chown.file.name": - return "chown", nil - case "chown.file.name.length": - return "chown", nil - case "chown.file.path": - return "chown", nil - case "chown.file.path.length": - return "chown", nil - case "chown.file.rights": - return "chown", nil - case "chown.file.uid": - return "chown", nil - case "chown.file.user": - return "chown", nil - case "chown.retval": - return "chown", nil - case "container.id": - return "*", nil - case "container.tags": - return "*", nil - case "dns.id": - return "dns", nil - case "dns.question.class": - return "dns", nil - case "dns.question.count": - return "dns", nil - case "dns.question.length": - return "dns", nil - case "dns.question.name": - return "dns", nil - case "dns.question.name.length": - return "dns", nil - case "dns.question.type": - return "dns", nil - case "exec.args": - return "exec", nil - case "exec.args_flags": - return "exec", nil - case "exec.args_options": - return "exec", nil - case "exec.args_truncated": - return "exec", nil - case "exec.argv": - return "exec", nil - case "exec.argv0": - return "exec", nil - case "exec.cap_effective": - return "exec", nil - case "exec.cap_permitted": - return "exec", nil - case "exec.comm": - return "exec", nil - case "exec.container.id": - return "exec", nil - case "exec.cookie": - return "exec", nil - case "exec.created_at": - return "exec", nil - case "exec.egid": - return "exec", nil - case "exec.egroup": - return "exec", nil - case "exec.envp": - return "exec", nil - case "exec.envs": - return "exec", nil - case "exec.envs_truncated": - return "exec", nil - case "exec.euid": - return "exec", nil - case "exec.euser": - return "exec", nil - case "exec.file.change_time": - return "exec", nil - case "exec.file.filesystem": - return "exec", nil - case "exec.file.gid": - return "exec", nil - case "exec.file.group": - return "exec", nil - case "exec.file.in_upper_layer": - return "exec", nil - case "exec.file.inode": - return "exec", nil - case "exec.file.mode": - return "exec", nil - case "exec.file.modification_time": - return "exec", nil - case "exec.file.mount_id": - return "exec", nil - case "exec.file.name": - return "exec", nil - case "exec.file.name.length": - return "exec", nil - case "exec.file.path": - return "exec", nil - case "exec.file.path.length": - return "exec", nil - case "exec.file.rights": - return "exec", nil - case "exec.file.uid": - return "exec", nil - case "exec.file.user": - return "exec", nil - case "exec.fsgid": - return "exec", nil - case "exec.fsgroup": - return "exec", nil - case "exec.fsuid": - return "exec", nil - case "exec.fsuser": - return "exec", nil - case "exec.gid": - return "exec", nil - case "exec.group": - return "exec", nil - case "exec.interpreter.file.change_time": - return "exec", nil - case "exec.interpreter.file.filesystem": - return "exec", nil - case "exec.interpreter.file.gid": - return "exec", nil - case "exec.interpreter.file.group": - return "exec", nil - case "exec.interpreter.file.in_upper_layer": - return "exec", nil - case "exec.interpreter.file.inode": - return "exec", nil - case "exec.interpreter.file.mode": - return "exec", nil - case "exec.interpreter.file.modification_time": - return "exec", nil - case "exec.interpreter.file.mount_id": - return "exec", nil - case "exec.interpreter.file.name": - return "exec", nil - case "exec.interpreter.file.name.length": - return "exec", nil - case "exec.interpreter.file.path": - return "exec", nil - case "exec.interpreter.file.path.length": - return "exec", nil - case "exec.interpreter.file.rights": - return "exec", nil - case "exec.interpreter.file.uid": - return "exec", nil - case "exec.interpreter.file.user": - return "exec", nil - case "exec.is_kworker": - return "exec", nil - case "exec.is_thread": - return "exec", nil - case "exec.pid": - return "exec", nil - case "exec.ppid": - return "exec", nil - case "exec.tid": - return "exec", nil - case "exec.tty_name": - return "exec", nil - case "exec.uid": - return "exec", nil - case "exec.user": - return "exec", nil - case "exit.args": - return "exit", nil - case "exit.args_flags": - return "exit", nil - case "exit.args_options": - return "exit", nil - case "exit.args_truncated": - return "exit", nil - case "exit.argv": - return "exit", nil - case "exit.argv0": - return "exit", nil - case "exit.cap_effective": - return "exit", nil - case "exit.cap_permitted": - return "exit", nil - case "exit.cause": - return "exit", nil - case "exit.code": - return "exit", nil - case "exit.comm": - return "exit", nil - case "exit.container.id": - return "exit", nil - case "exit.cookie": - return "exit", nil - case "exit.created_at": - return "exit", nil - case "exit.egid": - return "exit", nil - case "exit.egroup": - return "exit", nil - case "exit.envp": - return "exit", nil - case "exit.envs": - return "exit", nil - case "exit.envs_truncated": - return "exit", nil - case "exit.euid": - return "exit", nil - case "exit.euser": - return "exit", nil - case "exit.file.change_time": - return "exit", nil - case "exit.file.filesystem": - return "exit", nil - case "exit.file.gid": - return "exit", nil - case "exit.file.group": - return "exit", nil - case "exit.file.in_upper_layer": - return "exit", nil - case "exit.file.inode": - return "exit", nil - case "exit.file.mode": - return "exit", nil - case "exit.file.modification_time": - return "exit", nil - case "exit.file.mount_id": - return "exit", nil - case "exit.file.name": - return "exit", nil - case "exit.file.name.length": - return "exit", nil - case "exit.file.path": - return "exit", nil - case "exit.file.path.length": - return "exit", nil - case "exit.file.rights": - return "exit", nil - case "exit.file.uid": - return "exit", nil - case "exit.file.user": - return "exit", nil - case "exit.fsgid": - return "exit", nil - case "exit.fsgroup": - return "exit", nil - case "exit.fsuid": - return "exit", nil - case "exit.fsuser": - return "exit", nil - case "exit.gid": - return "exit", nil - case "exit.group": - return "exit", nil - case "exit.interpreter.file.change_time": - return "exit", nil - case "exit.interpreter.file.filesystem": - return "exit", nil - case "exit.interpreter.file.gid": - return "exit", nil - case "exit.interpreter.file.group": - return "exit", nil - case "exit.interpreter.file.in_upper_layer": - return "exit", nil - case "exit.interpreter.file.inode": - return "exit", nil - case "exit.interpreter.file.mode": - return "exit", nil - case "exit.interpreter.file.modification_time": - return "exit", nil - case "exit.interpreter.file.mount_id": - return "exit", nil - case "exit.interpreter.file.name": - return "exit", nil - case "exit.interpreter.file.name.length": - return "exit", nil - case "exit.interpreter.file.path": - return "exit", nil - case "exit.interpreter.file.path.length": - return "exit", nil - case "exit.interpreter.file.rights": - return "exit", nil - case "exit.interpreter.file.uid": - return "exit", nil - case "exit.interpreter.file.user": - return "exit", nil - case "exit.is_kworker": - return "exit", nil - case "exit.is_thread": - return "exit", nil - case "exit.pid": - return "exit", nil - case "exit.ppid": - return "exit", nil - case "exit.tid": - return "exit", nil - case "exit.tty_name": - return "exit", nil - case "exit.uid": - return "exit", nil - case "exit.user": - return "exit", nil - case "link.file.change_time": - return "link", nil - case "link.file.destination.change_time": - return "link", nil - case "link.file.destination.filesystem": - return "link", nil - case "link.file.destination.gid": - return "link", nil - case "link.file.destination.group": - return "link", nil - case "link.file.destination.in_upper_layer": - return "link", nil - case "link.file.destination.inode": - return "link", nil - case "link.file.destination.mode": - return "link", nil - case "link.file.destination.modification_time": - return "link", nil - case "link.file.destination.mount_id": - return "link", nil - case "link.file.destination.name": - return "link", nil - case "link.file.destination.name.length": - return "link", nil - case "link.file.destination.path": - return "link", nil - case "link.file.destination.path.length": - return "link", nil - case "link.file.destination.rights": - return "link", nil - case "link.file.destination.uid": - return "link", nil - case "link.file.destination.user": - return "link", nil - case "link.file.filesystem": - return "link", nil - case "link.file.gid": - return "link", nil - case "link.file.group": - return "link", nil - case "link.file.in_upper_layer": - return "link", nil - case "link.file.inode": - return "link", nil - case "link.file.mode": - return "link", nil - case "link.file.modification_time": - return "link", nil - case "link.file.mount_id": - return "link", nil - case "link.file.name": - return "link", nil - case "link.file.name.length": - return "link", nil - case "link.file.path": - return "link", nil - case "link.file.path.length": - return "link", nil - case "link.file.rights": - return "link", nil - case "link.file.uid": - return "link", nil - case "link.file.user": - return "link", nil - case "link.retval": - return "link", nil - case "load_module.file.change_time": - return "load_module", nil - case "load_module.file.filesystem": - return "load_module", nil - case "load_module.file.gid": - return "load_module", nil - case "load_module.file.group": - return "load_module", nil - case "load_module.file.in_upper_layer": - return "load_module", nil - case "load_module.file.inode": - return "load_module", nil - case "load_module.file.mode": - return "load_module", nil - case "load_module.file.modification_time": - return "load_module", nil - case "load_module.file.mount_id": - return "load_module", nil - case "load_module.file.name": - return "load_module", nil - case "load_module.file.name.length": - return "load_module", nil - case "load_module.file.path": - return "load_module", nil - case "load_module.file.path.length": - return "load_module", nil - case "load_module.file.rights": - return "load_module", nil - case "load_module.file.uid": - return "load_module", nil - case "load_module.file.user": - return "load_module", nil - case "load_module.loaded_from_memory": - return "load_module", nil - case "load_module.name": - return "load_module", nil - case "load_module.retval": - return "load_module", nil - case "mkdir.file.change_time": - return "mkdir", nil - case "mkdir.file.destination.mode": - return "mkdir", nil - case "mkdir.file.destination.rights": - return "mkdir", nil - case "mkdir.file.filesystem": - return "mkdir", nil - case "mkdir.file.gid": - return "mkdir", nil - case "mkdir.file.group": - return "mkdir", nil - case "mkdir.file.in_upper_layer": - return "mkdir", nil - case "mkdir.file.inode": - return "mkdir", nil - case "mkdir.file.mode": - return "mkdir", nil - case "mkdir.file.modification_time": - return "mkdir", nil - case "mkdir.file.mount_id": - return "mkdir", nil - case "mkdir.file.name": - return "mkdir", nil - case "mkdir.file.name.length": - return "mkdir", nil - case "mkdir.file.path": - return "mkdir", nil - case "mkdir.file.path.length": - return "mkdir", nil - case "mkdir.file.rights": - return "mkdir", nil - case "mkdir.file.uid": - return "mkdir", nil - case "mkdir.file.user": - return "mkdir", nil - case "mkdir.retval": - return "mkdir", nil - case "mmap.file.change_time": - return "mmap", nil - case "mmap.file.filesystem": - return "mmap", nil - case "mmap.file.gid": - return "mmap", nil - case "mmap.file.group": - return "mmap", nil - case "mmap.file.in_upper_layer": - return "mmap", nil - case "mmap.file.inode": - return "mmap", nil - case "mmap.file.mode": - return "mmap", nil - case "mmap.file.modification_time": - return "mmap", nil - case "mmap.file.mount_id": - return "mmap", nil - case "mmap.file.name": - return "mmap", nil - case "mmap.file.name.length": - return "mmap", nil - case "mmap.file.path": - return "mmap", nil - case "mmap.file.path.length": - return "mmap", nil - case "mmap.file.rights": - return "mmap", nil - case "mmap.file.uid": - return "mmap", nil - case "mmap.file.user": - return "mmap", nil - case "mmap.flags": - return "mmap", nil - case "mmap.protection": - return "mmap", nil - case "mmap.retval": - return "mmap", nil - case "mount.fs_type": - return "mount", nil - case "mount.mountpoint.path": - return "mount", nil - case "mount.retval": - return "mount", nil - case "mount.source.path": - return "mount", nil - case "mprotect.req_protection": - return "mprotect", nil - case "mprotect.retval": - return "mprotect", nil - case "mprotect.vm_protection": - return "mprotect", nil - case "network.destination.ip": - return "*", nil - case "network.destination.port": - return "*", nil - case "network.device.ifindex": - return "*", nil - case "network.device.ifname": - return "*", nil - case "network.l3_protocol": - return "*", nil - case "network.l4_protocol": - return "*", nil - case "network.size": - return "*", nil - case "network.source.ip": - return "*", nil - case "network.source.port": - return "*", nil - case "open.file.change_time": - return "open", nil - case "open.file.destination.mode": - return "open", nil - case "open.file.filesystem": - return "open", nil - case "open.file.gid": - return "open", nil - case "open.file.group": - return "open", nil - case "open.file.in_upper_layer": - return "open", nil - case "open.file.inode": - return "open", nil - case "open.file.mode": - return "open", nil - case "open.file.modification_time": - return "open", nil - case "open.file.mount_id": - return "open", nil - case "open.file.name": - return "open", nil - case "open.file.name.length": - return "open", nil - case "open.file.path": - return "open", nil - case "open.file.path.length": - return "open", nil - case "open.file.rights": - return "open", nil - case "open.file.uid": - return "open", nil - case "open.file.user": - return "open", nil - case "open.flags": - return "open", nil - case "open.retval": - return "open", nil - case "process.ancestors.args": - return "*", nil - case "process.ancestors.args_flags": - return "*", nil - case "process.ancestors.args_options": - return "*", nil - case "process.ancestors.args_truncated": - return "*", nil - case "process.ancestors.argv": - return "*", nil - case "process.ancestors.argv0": - return "*", nil - case "process.ancestors.cap_effective": - return "*", nil - case "process.ancestors.cap_permitted": - return "*", nil - case "process.ancestors.comm": - return "*", nil - case "process.ancestors.container.id": - return "*", nil - case "process.ancestors.cookie": - return "*", nil - case "process.ancestors.created_at": - return "*", nil - case "process.ancestors.egid": - return "*", nil - case "process.ancestors.egroup": - return "*", nil - case "process.ancestors.envp": - return "*", nil - case "process.ancestors.envs": - return "*", nil - case "process.ancestors.envs_truncated": - return "*", nil - case "process.ancestors.euid": - return "*", nil - case "process.ancestors.euser": - return "*", nil - case "process.ancestors.file.change_time": - return "*", nil - case "process.ancestors.file.filesystem": - return "*", nil - case "process.ancestors.file.gid": - return "*", nil - case "process.ancestors.file.group": - return "*", nil - case "process.ancestors.file.in_upper_layer": - return "*", nil - case "process.ancestors.file.inode": - return "*", nil - case "process.ancestors.file.mode": - return "*", nil - case "process.ancestors.file.modification_time": - return "*", nil - case "process.ancestors.file.mount_id": - return "*", nil - case "process.ancestors.file.name": - return "*", nil - case "process.ancestors.file.name.length": - return "*", nil - case "process.ancestors.file.path": - return "*", nil - case "process.ancestors.file.path.length": - return "*", nil - case "process.ancestors.file.rights": - return "*", nil - case "process.ancestors.file.uid": - return "*", nil - case "process.ancestors.file.user": - return "*", nil - case "process.ancestors.fsgid": - return "*", nil - case "process.ancestors.fsgroup": - return "*", nil - case "process.ancestors.fsuid": - return "*", nil - case "process.ancestors.fsuser": - return "*", nil - case "process.ancestors.gid": - return "*", nil - case "process.ancestors.group": - return "*", nil - case "process.ancestors.interpreter.file.change_time": - return "*", nil - case "process.ancestors.interpreter.file.filesystem": - return "*", nil - case "process.ancestors.interpreter.file.gid": - return "*", nil - case "process.ancestors.interpreter.file.group": - return "*", nil - case "process.ancestors.interpreter.file.in_upper_layer": - return "*", nil - case "process.ancestors.interpreter.file.inode": - return "*", nil - case "process.ancestors.interpreter.file.mode": - return "*", nil - case "process.ancestors.interpreter.file.modification_time": - return "*", nil - case "process.ancestors.interpreter.file.mount_id": - return "*", nil - case "process.ancestors.interpreter.file.name": - return "*", nil - case "process.ancestors.interpreter.file.name.length": - return "*", nil - case "process.ancestors.interpreter.file.path": - return "*", nil - case "process.ancestors.interpreter.file.path.length": - return "*", nil - case "process.ancestors.interpreter.file.rights": - return "*", nil - case "process.ancestors.interpreter.file.uid": - return "*", nil - case "process.ancestors.interpreter.file.user": - return "*", nil - case "process.ancestors.is_kworker": - return "*", nil - case "process.ancestors.is_thread": - return "*", nil - case "process.ancestors.pid": - return "*", nil - case "process.ancestors.ppid": - return "*", nil - case "process.ancestors.tid": - return "*", nil - case "process.ancestors.tty_name": - return "*", nil - case "process.ancestors.uid": - return "*", nil - case "process.ancestors.user": - return "*", nil - case "process.args": - return "*", nil - case "process.args_flags": - return "*", nil - case "process.args_options": - return "*", nil - case "process.args_truncated": - return "*", nil - case "process.argv": - return "*", nil - case "process.argv0": - return "*", nil - case "process.cap_effective": - return "*", nil - case "process.cap_permitted": - return "*", nil - case "process.comm": - return "*", nil - case "process.container.id": - return "*", nil - case "process.cookie": - return "*", nil - case "process.created_at": - return "*", nil - case "process.egid": - return "*", nil - case "process.egroup": - return "*", nil - case "process.envp": - return "*", nil - case "process.envs": - return "*", nil - case "process.envs_truncated": - return "*", nil - case "process.euid": - return "*", nil - case "process.euser": - return "*", nil - case "process.file.change_time": - return "*", nil - case "process.file.filesystem": - return "*", nil - case "process.file.gid": - return "*", nil - case "process.file.group": - return "*", nil - case "process.file.in_upper_layer": - return "*", nil - case "process.file.inode": - return "*", nil - case "process.file.mode": - return "*", nil - case "process.file.modification_time": - return "*", nil - case "process.file.mount_id": - return "*", nil - case "process.file.name": - return "*", nil - case "process.file.name.length": - return "*", nil - case "process.file.path": - return "*", nil - case "process.file.path.length": - return "*", nil - case "process.file.rights": - return "*", nil - case "process.file.uid": - return "*", nil - case "process.file.user": - return "*", nil - case "process.fsgid": - return "*", nil - case "process.fsgroup": - return "*", nil - case "process.fsuid": - return "*", nil - case "process.fsuser": - return "*", nil - case "process.gid": - return "*", nil - case "process.group": - return "*", nil - case "process.interpreter.file.change_time": - return "*", nil - case "process.interpreter.file.filesystem": - return "*", nil - case "process.interpreter.file.gid": - return "*", nil - case "process.interpreter.file.group": - return "*", nil - case "process.interpreter.file.in_upper_layer": - return "*", nil - case "process.interpreter.file.inode": - return "*", nil - case "process.interpreter.file.mode": - return "*", nil - case "process.interpreter.file.modification_time": - return "*", nil - case "process.interpreter.file.mount_id": - return "*", nil - case "process.interpreter.file.name": - return "*", nil - case "process.interpreter.file.name.length": - return "*", nil - case "process.interpreter.file.path": - return "*", nil - case "process.interpreter.file.path.length": - return "*", nil - case "process.interpreter.file.rights": - return "*", nil - case "process.interpreter.file.uid": - return "*", nil - case "process.interpreter.file.user": - return "*", nil - case "process.is_kworker": - return "*", nil - case "process.is_thread": - return "*", nil - case "process.parent.args": - return "*", nil - case "process.parent.args_flags": - return "*", nil - case "process.parent.args_options": - return "*", nil - case "process.parent.args_truncated": - return "*", nil - case "process.parent.argv": - return "*", nil - case "process.parent.argv0": - return "*", nil - case "process.parent.cap_effective": - return "*", nil - case "process.parent.cap_permitted": - return "*", nil - case "process.parent.comm": - return "*", nil - case "process.parent.container.id": - return "*", nil - case "process.parent.cookie": - return "*", nil - case "process.parent.created_at": - return "*", nil - case "process.parent.egid": - return "*", nil - case "process.parent.egroup": - return "*", nil - case "process.parent.envp": - return "*", nil - case "process.parent.envs": - return "*", nil - case "process.parent.envs_truncated": - return "*", nil - case "process.parent.euid": - return "*", nil - case "process.parent.euser": - return "*", nil - case "process.parent.file.change_time": - return "*", nil - case "process.parent.file.filesystem": - return "*", nil - case "process.parent.file.gid": - return "*", nil - case "process.parent.file.group": - return "*", nil - case "process.parent.file.in_upper_layer": - return "*", nil - case "process.parent.file.inode": - return "*", nil - case "process.parent.file.mode": - return "*", nil - case "process.parent.file.modification_time": - return "*", nil - case "process.parent.file.mount_id": - return "*", nil - case "process.parent.file.name": - return "*", nil - case "process.parent.file.name.length": - return "*", nil - case "process.parent.file.path": - return "*", nil - case "process.parent.file.path.length": - return "*", nil - case "process.parent.file.rights": - return "*", nil - case "process.parent.file.uid": - return "*", nil - case "process.parent.file.user": - return "*", nil - case "process.parent.fsgid": - return "*", nil - case "process.parent.fsgroup": - return "*", nil - case "process.parent.fsuid": - return "*", nil - case "process.parent.fsuser": - return "*", nil - case "process.parent.gid": - return "*", nil - case "process.parent.group": - return "*", nil - case "process.parent.interpreter.file.change_time": - return "*", nil - case "process.parent.interpreter.file.filesystem": - return "*", nil - case "process.parent.interpreter.file.gid": - return "*", nil - case "process.parent.interpreter.file.group": - return "*", nil - case "process.parent.interpreter.file.in_upper_layer": - return "*", nil - case "process.parent.interpreter.file.inode": - return "*", nil - case "process.parent.interpreter.file.mode": - return "*", nil - case "process.parent.interpreter.file.modification_time": - return "*", nil - case "process.parent.interpreter.file.mount_id": - return "*", nil - case "process.parent.interpreter.file.name": - return "*", nil - case "process.parent.interpreter.file.name.length": - return "*", nil - case "process.parent.interpreter.file.path": - return "*", nil - case "process.parent.interpreter.file.path.length": - return "*", nil - case "process.parent.interpreter.file.rights": - return "*", nil - case "process.parent.interpreter.file.uid": - return "*", nil - case "process.parent.interpreter.file.user": - return "*", nil - case "process.parent.is_kworker": - return "*", nil - case "process.parent.is_thread": - return "*", nil - case "process.parent.pid": - return "*", nil - case "process.parent.ppid": - return "*", nil - case "process.parent.tid": - return "*", nil - case "process.parent.tty_name": - return "*", nil - case "process.parent.uid": - return "*", nil - case "process.parent.user": - return "*", nil - case "process.pid": - return "*", nil - case "process.ppid": - return "*", nil - case "process.tid": - return "*", nil - case "process.tty_name": - return "*", nil - case "process.uid": - return "*", nil - case "process.user": - return "*", nil - case "ptrace.request": - return "ptrace", nil - case "ptrace.retval": - return "ptrace", nil - case "ptrace.tracee.ancestors.args": - return "ptrace", nil - case "ptrace.tracee.ancestors.args_flags": - return "ptrace", nil - case "ptrace.tracee.ancestors.args_options": - return "ptrace", nil - case "ptrace.tracee.ancestors.args_truncated": - return "ptrace", nil - case "ptrace.tracee.ancestors.argv": - return "ptrace", nil - case "ptrace.tracee.ancestors.argv0": - return "ptrace", nil - case "ptrace.tracee.ancestors.cap_effective": - return "ptrace", nil - case "ptrace.tracee.ancestors.cap_permitted": - return "ptrace", nil - case "ptrace.tracee.ancestors.comm": - return "ptrace", nil - case "ptrace.tracee.ancestors.container.id": - return "ptrace", nil - case "ptrace.tracee.ancestors.cookie": - return "ptrace", nil - case "ptrace.tracee.ancestors.created_at": - return "ptrace", nil - case "ptrace.tracee.ancestors.egid": - return "ptrace", nil - case "ptrace.tracee.ancestors.egroup": - return "ptrace", nil - case "ptrace.tracee.ancestors.envp": - return "ptrace", nil - case "ptrace.tracee.ancestors.envs": - return "ptrace", nil - case "ptrace.tracee.ancestors.envs_truncated": - return "ptrace", nil - case "ptrace.tracee.ancestors.euid": - return "ptrace", nil - case "ptrace.tracee.ancestors.euser": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.change_time": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.filesystem": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.gid": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.group": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.in_upper_layer": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.inode": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.mode": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.modification_time": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.mount_id": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.name": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.name.length": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.path": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.path.length": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.rights": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.uid": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.user": - return "ptrace", nil - case "ptrace.tracee.ancestors.fsgid": - return "ptrace", nil - case "ptrace.tracee.ancestors.fsgroup": - return "ptrace", nil - case "ptrace.tracee.ancestors.fsuid": - return "ptrace", nil - case "ptrace.tracee.ancestors.fsuser": - return "ptrace", nil - case "ptrace.tracee.ancestors.gid": - return "ptrace", nil - case "ptrace.tracee.ancestors.group": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.change_time": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.filesystem": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.gid": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.group": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.in_upper_layer": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.inode": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.mode": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.modification_time": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.mount_id": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.name": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.name.length": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.path": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.path.length": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.rights": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.uid": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.user": - return "ptrace", nil - case "ptrace.tracee.ancestors.is_kworker": - return "ptrace", nil - case "ptrace.tracee.ancestors.is_thread": - return "ptrace", nil - case "ptrace.tracee.ancestors.pid": - return "ptrace", nil - case "ptrace.tracee.ancestors.ppid": - return "ptrace", nil - case "ptrace.tracee.ancestors.tid": - return "ptrace", nil - case "ptrace.tracee.ancestors.tty_name": - return "ptrace", nil - case "ptrace.tracee.ancestors.uid": - return "ptrace", nil - case "ptrace.tracee.ancestors.user": - return "ptrace", nil - case "ptrace.tracee.args": - return "ptrace", nil - case "ptrace.tracee.args_flags": - return "ptrace", nil - case "ptrace.tracee.args_options": - return "ptrace", nil - case "ptrace.tracee.args_truncated": - return "ptrace", nil - case "ptrace.tracee.argv": - return "ptrace", nil - case "ptrace.tracee.argv0": - return "ptrace", nil - case "ptrace.tracee.cap_effective": - return "ptrace", nil - case "ptrace.tracee.cap_permitted": - return "ptrace", nil - case "ptrace.tracee.comm": - return "ptrace", nil - case "ptrace.tracee.container.id": - return "ptrace", nil - case "ptrace.tracee.cookie": - return "ptrace", nil - case "ptrace.tracee.created_at": - return "ptrace", nil - case "ptrace.tracee.egid": - return "ptrace", nil - case "ptrace.tracee.egroup": - return "ptrace", nil - case "ptrace.tracee.envp": - return "ptrace", nil - case "ptrace.tracee.envs": - return "ptrace", nil - case "ptrace.tracee.envs_truncated": - return "ptrace", nil - case "ptrace.tracee.euid": - return "ptrace", nil - case "ptrace.tracee.euser": - return "ptrace", nil - case "ptrace.tracee.file.change_time": - return "ptrace", nil - case "ptrace.tracee.file.filesystem": - return "ptrace", nil - case "ptrace.tracee.file.gid": - return "ptrace", nil - case "ptrace.tracee.file.group": - return "ptrace", nil - case "ptrace.tracee.file.in_upper_layer": - return "ptrace", nil - case "ptrace.tracee.file.inode": - return "ptrace", nil - case "ptrace.tracee.file.mode": - return "ptrace", nil - case "ptrace.tracee.file.modification_time": - return "ptrace", nil - case "ptrace.tracee.file.mount_id": - return "ptrace", nil - case "ptrace.tracee.file.name": - return "ptrace", nil - case "ptrace.tracee.file.name.length": - return "ptrace", nil - case "ptrace.tracee.file.path": - return "ptrace", nil - case "ptrace.tracee.file.path.length": - return "ptrace", nil - case "ptrace.tracee.file.rights": - return "ptrace", nil - case "ptrace.tracee.file.uid": - return "ptrace", nil - case "ptrace.tracee.file.user": - return "ptrace", nil - case "ptrace.tracee.fsgid": - return "ptrace", nil - case "ptrace.tracee.fsgroup": - return "ptrace", nil - case "ptrace.tracee.fsuid": - return "ptrace", nil - case "ptrace.tracee.fsuser": - return "ptrace", nil - case "ptrace.tracee.gid": - return "ptrace", nil - case "ptrace.tracee.group": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.change_time": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.filesystem": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.gid": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.group": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.in_upper_layer": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.inode": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.mode": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.modification_time": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.mount_id": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.name": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.name.length": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.path": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.path.length": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.rights": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.uid": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.user": - return "ptrace", nil - case "ptrace.tracee.is_kworker": - return "ptrace", nil - case "ptrace.tracee.is_thread": - return "ptrace", nil - case "ptrace.tracee.parent.args": - return "ptrace", nil - case "ptrace.tracee.parent.args_flags": - return "ptrace", nil - case "ptrace.tracee.parent.args_options": - return "ptrace", nil - case "ptrace.tracee.parent.args_truncated": - return "ptrace", nil - case "ptrace.tracee.parent.argv": - return "ptrace", nil - case "ptrace.tracee.parent.argv0": - return "ptrace", nil - case "ptrace.tracee.parent.cap_effective": - return "ptrace", nil - case "ptrace.tracee.parent.cap_permitted": - return "ptrace", nil - case "ptrace.tracee.parent.comm": - return "ptrace", nil - case "ptrace.tracee.parent.container.id": - return "ptrace", nil - case "ptrace.tracee.parent.cookie": - return "ptrace", nil - case "ptrace.tracee.parent.created_at": - return "ptrace", nil - case "ptrace.tracee.parent.egid": - return "ptrace", nil - case "ptrace.tracee.parent.egroup": - return "ptrace", nil - case "ptrace.tracee.parent.envp": - return "ptrace", nil - case "ptrace.tracee.parent.envs": - return "ptrace", nil - case "ptrace.tracee.parent.envs_truncated": - return "ptrace", nil - case "ptrace.tracee.parent.euid": - return "ptrace", nil - case "ptrace.tracee.parent.euser": - return "ptrace", nil - case "ptrace.tracee.parent.file.change_time": - return "ptrace", nil - case "ptrace.tracee.parent.file.filesystem": - return "ptrace", nil - case "ptrace.tracee.parent.file.gid": - return "ptrace", nil - case "ptrace.tracee.parent.file.group": - return "ptrace", nil - case "ptrace.tracee.parent.file.in_upper_layer": - return "ptrace", nil - case "ptrace.tracee.parent.file.inode": - return "ptrace", nil - case "ptrace.tracee.parent.file.mode": - return "ptrace", nil - case "ptrace.tracee.parent.file.modification_time": - return "ptrace", nil - case "ptrace.tracee.parent.file.mount_id": - return "ptrace", nil - case "ptrace.tracee.parent.file.name": - return "ptrace", nil - case "ptrace.tracee.parent.file.name.length": - return "ptrace", nil - case "ptrace.tracee.parent.file.path": - return "ptrace", nil - case "ptrace.tracee.parent.file.path.length": - return "ptrace", nil - case "ptrace.tracee.parent.file.rights": - return "ptrace", nil - case "ptrace.tracee.parent.file.uid": - return "ptrace", nil - case "ptrace.tracee.parent.file.user": - return "ptrace", nil - case "ptrace.tracee.parent.fsgid": - return "ptrace", nil - case "ptrace.tracee.parent.fsgroup": - return "ptrace", nil - case "ptrace.tracee.parent.fsuid": - return "ptrace", nil - case "ptrace.tracee.parent.fsuser": - return "ptrace", nil - case "ptrace.tracee.parent.gid": - return "ptrace", nil - case "ptrace.tracee.parent.group": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.change_time": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.filesystem": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.gid": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.group": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.in_upper_layer": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.inode": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.mode": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.modification_time": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.mount_id": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.name": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.name.length": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.path": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.path.length": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.rights": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.uid": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.user": - return "ptrace", nil - case "ptrace.tracee.parent.is_kworker": - return "ptrace", nil - case "ptrace.tracee.parent.is_thread": - return "ptrace", nil - case "ptrace.tracee.parent.pid": - return "ptrace", nil - case "ptrace.tracee.parent.ppid": - return "ptrace", nil - case "ptrace.tracee.parent.tid": - return "ptrace", nil - case "ptrace.tracee.parent.tty_name": - return "ptrace", nil - case "ptrace.tracee.parent.uid": - return "ptrace", nil - case "ptrace.tracee.parent.user": - return "ptrace", nil - case "ptrace.tracee.pid": - return "ptrace", nil - case "ptrace.tracee.ppid": - return "ptrace", nil - case "ptrace.tracee.tid": - return "ptrace", nil - case "ptrace.tracee.tty_name": - return "ptrace", nil - case "ptrace.tracee.uid": - return "ptrace", nil - case "ptrace.tracee.user": - return "ptrace", nil - case "removexattr.file.change_time": - return "removexattr", nil - case "removexattr.file.destination.name": - return "removexattr", nil - case "removexattr.file.destination.namespace": - return "removexattr", nil - case "removexattr.file.filesystem": - return "removexattr", nil - case "removexattr.file.gid": - return "removexattr", nil - case "removexattr.file.group": - return "removexattr", nil - case "removexattr.file.in_upper_layer": - return "removexattr", nil - case "removexattr.file.inode": - return "removexattr", nil - case "removexattr.file.mode": - return "removexattr", nil - case "removexattr.file.modification_time": - return "removexattr", nil - case "removexattr.file.mount_id": - return "removexattr", nil - case "removexattr.file.name": - return "removexattr", nil - case "removexattr.file.name.length": - return "removexattr", nil - case "removexattr.file.path": - return "removexattr", nil - case "removexattr.file.path.length": - return "removexattr", nil - case "removexattr.file.rights": - return "removexattr", nil - case "removexattr.file.uid": - return "removexattr", nil - case "removexattr.file.user": - return "removexattr", nil - case "removexattr.retval": - return "removexattr", nil - case "rename.file.change_time": - return "rename", nil - case "rename.file.destination.change_time": - return "rename", nil - case "rename.file.destination.filesystem": - return "rename", nil - case "rename.file.destination.gid": - return "rename", nil - case "rename.file.destination.group": - return "rename", nil - case "rename.file.destination.in_upper_layer": - return "rename", nil - case "rename.file.destination.inode": - return "rename", nil - case "rename.file.destination.mode": - return "rename", nil - case "rename.file.destination.modification_time": - return "rename", nil - case "rename.file.destination.mount_id": - return "rename", nil - case "rename.file.destination.name": - return "rename", nil - case "rename.file.destination.name.length": - return "rename", nil - case "rename.file.destination.path": - return "rename", nil - case "rename.file.destination.path.length": - return "rename", nil - case "rename.file.destination.rights": - return "rename", nil - case "rename.file.destination.uid": - return "rename", nil - case "rename.file.destination.user": - return "rename", nil - case "rename.file.filesystem": - return "rename", nil - case "rename.file.gid": - return "rename", nil - case "rename.file.group": - return "rename", nil - case "rename.file.in_upper_layer": - return "rename", nil - case "rename.file.inode": - return "rename", nil - case "rename.file.mode": - return "rename", nil - case "rename.file.modification_time": - return "rename", nil - case "rename.file.mount_id": - return "rename", nil - case "rename.file.name": - return "rename", nil - case "rename.file.name.length": - return "rename", nil - case "rename.file.path": - return "rename", nil - case "rename.file.path.length": - return "rename", nil - case "rename.file.rights": - return "rename", nil - case "rename.file.uid": - return "rename", nil - case "rename.file.user": - return "rename", nil - case "rename.retval": - return "rename", nil - case "rmdir.file.change_time": - return "rmdir", nil - case "rmdir.file.filesystem": - return "rmdir", nil - case "rmdir.file.gid": - return "rmdir", nil - case "rmdir.file.group": - return "rmdir", nil - case "rmdir.file.in_upper_layer": - return "rmdir", nil - case "rmdir.file.inode": - return "rmdir", nil - case "rmdir.file.mode": - return "rmdir", nil - case "rmdir.file.modification_time": - return "rmdir", nil - case "rmdir.file.mount_id": - return "rmdir", nil - case "rmdir.file.name": - return "rmdir", nil - case "rmdir.file.name.length": - return "rmdir", nil - case "rmdir.file.path": - return "rmdir", nil - case "rmdir.file.path.length": - return "rmdir", nil - case "rmdir.file.rights": - return "rmdir", nil - case "rmdir.file.uid": - return "rmdir", nil - case "rmdir.file.user": - return "rmdir", nil - case "rmdir.retval": - return "rmdir", nil - case "selinux.bool.name": - return "selinux", nil - case "selinux.bool.state": - return "selinux", nil - case "selinux.bool_commit.state": - return "selinux", nil - case "selinux.enforce.status": - return "selinux", nil - case "setgid.egid": - return "setgid", nil - case "setgid.egroup": - return "setgid", nil - case "setgid.fsgid": - return "setgid", nil - case "setgid.fsgroup": - return "setgid", nil - case "setgid.gid": - return "setgid", nil - case "setgid.group": - return "setgid", nil - case "setuid.euid": - return "setuid", nil - case "setuid.euser": - return "setuid", nil - case "setuid.fsuid": - return "setuid", nil - case "setuid.fsuser": - return "setuid", nil - case "setuid.uid": - return "setuid", nil - case "setuid.user": - return "setuid", nil - case "setxattr.file.change_time": - return "setxattr", nil - case "setxattr.file.destination.name": - return "setxattr", nil - case "setxattr.file.destination.namespace": - return "setxattr", nil - case "setxattr.file.filesystem": - return "setxattr", nil - case "setxattr.file.gid": - return "setxattr", nil - case "setxattr.file.group": - return "setxattr", nil - case "setxattr.file.in_upper_layer": - return "setxattr", nil - case "setxattr.file.inode": - return "setxattr", nil - case "setxattr.file.mode": - return "setxattr", nil - case "setxattr.file.modification_time": - return "setxattr", nil - case "setxattr.file.mount_id": - return "setxattr", nil - case "setxattr.file.name": - return "setxattr", nil - case "setxattr.file.name.length": - return "setxattr", nil - case "setxattr.file.path": - return "setxattr", nil - case "setxattr.file.path.length": - return "setxattr", nil - case "setxattr.file.rights": - return "setxattr", nil - case "setxattr.file.uid": - return "setxattr", nil - case "setxattr.file.user": - return "setxattr", nil - case "setxattr.retval": - return "setxattr", nil - case "signal.pid": - return "signal", nil - case "signal.retval": - return "signal", nil - case "signal.target.ancestors.args": - return "signal", nil - case "signal.target.ancestors.args_flags": - return "signal", nil - case "signal.target.ancestors.args_options": - return "signal", nil - case "signal.target.ancestors.args_truncated": - return "signal", nil - case "signal.target.ancestors.argv": - return "signal", nil - case "signal.target.ancestors.argv0": - return "signal", nil - case "signal.target.ancestors.cap_effective": - return "signal", nil - case "signal.target.ancestors.cap_permitted": - return "signal", nil - case "signal.target.ancestors.comm": - return "signal", nil - case "signal.target.ancestors.container.id": - return "signal", nil - case "signal.target.ancestors.cookie": - return "signal", nil - case "signal.target.ancestors.created_at": - return "signal", nil - case "signal.target.ancestors.egid": - return "signal", nil - case "signal.target.ancestors.egroup": - return "signal", nil - case "signal.target.ancestors.envp": - return "signal", nil - case "signal.target.ancestors.envs": - return "signal", nil - case "signal.target.ancestors.envs_truncated": - return "signal", nil - case "signal.target.ancestors.euid": - return "signal", nil - case "signal.target.ancestors.euser": - return "signal", nil - case "signal.target.ancestors.file.change_time": - return "signal", nil - case "signal.target.ancestors.file.filesystem": - return "signal", nil - case "signal.target.ancestors.file.gid": - return "signal", nil - case "signal.target.ancestors.file.group": - return "signal", nil - case "signal.target.ancestors.file.in_upper_layer": - return "signal", nil - case "signal.target.ancestors.file.inode": - return "signal", nil - case "signal.target.ancestors.file.mode": - return "signal", nil - case "signal.target.ancestors.file.modification_time": - return "signal", nil - case "signal.target.ancestors.file.mount_id": - return "signal", nil - case "signal.target.ancestors.file.name": - return "signal", nil - case "signal.target.ancestors.file.name.length": - return "signal", nil - case "signal.target.ancestors.file.path": - return "signal", nil - case "signal.target.ancestors.file.path.length": - return "signal", nil - case "signal.target.ancestors.file.rights": - return "signal", nil - case "signal.target.ancestors.file.uid": - return "signal", nil - case "signal.target.ancestors.file.user": - return "signal", nil - case "signal.target.ancestors.fsgid": - return "signal", nil - case "signal.target.ancestors.fsgroup": - return "signal", nil - case "signal.target.ancestors.fsuid": - return "signal", nil - case "signal.target.ancestors.fsuser": - return "signal", nil - case "signal.target.ancestors.gid": - return "signal", nil - case "signal.target.ancestors.group": - return "signal", nil - case "signal.target.ancestors.interpreter.file.change_time": - return "signal", nil - case "signal.target.ancestors.interpreter.file.filesystem": - return "signal", nil - case "signal.target.ancestors.interpreter.file.gid": - return "signal", nil - case "signal.target.ancestors.interpreter.file.group": - return "signal", nil - case "signal.target.ancestors.interpreter.file.in_upper_layer": - return "signal", nil - case "signal.target.ancestors.interpreter.file.inode": - return "signal", nil - case "signal.target.ancestors.interpreter.file.mode": - return "signal", nil - case "signal.target.ancestors.interpreter.file.modification_time": - return "signal", nil - case "signal.target.ancestors.interpreter.file.mount_id": - return "signal", nil - case "signal.target.ancestors.interpreter.file.name": - return "signal", nil - case "signal.target.ancestors.interpreter.file.name.length": - return "signal", nil - case "signal.target.ancestors.interpreter.file.path": - return "signal", nil - case "signal.target.ancestors.interpreter.file.path.length": - return "signal", nil - case "signal.target.ancestors.interpreter.file.rights": - return "signal", nil - case "signal.target.ancestors.interpreter.file.uid": - return "signal", nil - case "signal.target.ancestors.interpreter.file.user": - return "signal", nil - case "signal.target.ancestors.is_kworker": - return "signal", nil - case "signal.target.ancestors.is_thread": - return "signal", nil - case "signal.target.ancestors.pid": - return "signal", nil - case "signal.target.ancestors.ppid": - return "signal", nil - case "signal.target.ancestors.tid": - return "signal", nil - case "signal.target.ancestors.tty_name": - return "signal", nil - case "signal.target.ancestors.uid": - return "signal", nil - case "signal.target.ancestors.user": - return "signal", nil - case "signal.target.args": - return "signal", nil - case "signal.target.args_flags": - return "signal", nil - case "signal.target.args_options": - return "signal", nil - case "signal.target.args_truncated": - return "signal", nil - case "signal.target.argv": - return "signal", nil - case "signal.target.argv0": - return "signal", nil - case "signal.target.cap_effective": - return "signal", nil - case "signal.target.cap_permitted": - return "signal", nil - case "signal.target.comm": - return "signal", nil - case "signal.target.container.id": - return "signal", nil - case "signal.target.cookie": - return "signal", nil - case "signal.target.created_at": - return "signal", nil - case "signal.target.egid": - return "signal", nil - case "signal.target.egroup": - return "signal", nil - case "signal.target.envp": - return "signal", nil - case "signal.target.envs": - return "signal", nil - case "signal.target.envs_truncated": - return "signal", nil - case "signal.target.euid": - return "signal", nil - case "signal.target.euser": - return "signal", nil - case "signal.target.file.change_time": - return "signal", nil - case "signal.target.file.filesystem": - return "signal", nil - case "signal.target.file.gid": - return "signal", nil - case "signal.target.file.group": - return "signal", nil - case "signal.target.file.in_upper_layer": - return "signal", nil - case "signal.target.file.inode": - return "signal", nil - case "signal.target.file.mode": - return "signal", nil - case "signal.target.file.modification_time": - return "signal", nil - case "signal.target.file.mount_id": - return "signal", nil - case "signal.target.file.name": - return "signal", nil - case "signal.target.file.name.length": - return "signal", nil - case "signal.target.file.path": - return "signal", nil - case "signal.target.file.path.length": - return "signal", nil - case "signal.target.file.rights": - return "signal", nil - case "signal.target.file.uid": - return "signal", nil - case "signal.target.file.user": - return "signal", nil - case "signal.target.fsgid": - return "signal", nil - case "signal.target.fsgroup": - return "signal", nil - case "signal.target.fsuid": - return "signal", nil - case "signal.target.fsuser": - return "signal", nil - case "signal.target.gid": - return "signal", nil - case "signal.target.group": - return "signal", nil - case "signal.target.interpreter.file.change_time": - return "signal", nil - case "signal.target.interpreter.file.filesystem": - return "signal", nil - case "signal.target.interpreter.file.gid": - return "signal", nil - case "signal.target.interpreter.file.group": - return "signal", nil - case "signal.target.interpreter.file.in_upper_layer": - return "signal", nil - case "signal.target.interpreter.file.inode": - return "signal", nil - case "signal.target.interpreter.file.mode": - return "signal", nil - case "signal.target.interpreter.file.modification_time": - return "signal", nil - case "signal.target.interpreter.file.mount_id": - return "signal", nil - case "signal.target.interpreter.file.name": - return "signal", nil - case "signal.target.interpreter.file.name.length": - return "signal", nil - case "signal.target.interpreter.file.path": - return "signal", nil - case "signal.target.interpreter.file.path.length": - return "signal", nil - case "signal.target.interpreter.file.rights": - return "signal", nil - case "signal.target.interpreter.file.uid": - return "signal", nil - case "signal.target.interpreter.file.user": - return "signal", nil - case "signal.target.is_kworker": - return "signal", nil - case "signal.target.is_thread": - return "signal", nil - case "signal.target.parent.args": - return "signal", nil - case "signal.target.parent.args_flags": - return "signal", nil - case "signal.target.parent.args_options": - return "signal", nil - case "signal.target.parent.args_truncated": - return "signal", nil - case "signal.target.parent.argv": - return "signal", nil - case "signal.target.parent.argv0": - return "signal", nil - case "signal.target.parent.cap_effective": - return "signal", nil - case "signal.target.parent.cap_permitted": - return "signal", nil - case "signal.target.parent.comm": - return "signal", nil - case "signal.target.parent.container.id": - return "signal", nil - case "signal.target.parent.cookie": - return "signal", nil - case "signal.target.parent.created_at": - return "signal", nil - case "signal.target.parent.egid": - return "signal", nil - case "signal.target.parent.egroup": - return "signal", nil - case "signal.target.parent.envp": - return "signal", nil - case "signal.target.parent.envs": - return "signal", nil - case "signal.target.parent.envs_truncated": - return "signal", nil - case "signal.target.parent.euid": - return "signal", nil - case "signal.target.parent.euser": - return "signal", nil - case "signal.target.parent.file.change_time": - return "signal", nil - case "signal.target.parent.file.filesystem": - return "signal", nil - case "signal.target.parent.file.gid": - return "signal", nil - case "signal.target.parent.file.group": - return "signal", nil - case "signal.target.parent.file.in_upper_layer": - return "signal", nil - case "signal.target.parent.file.inode": - return "signal", nil - case "signal.target.parent.file.mode": - return "signal", nil - case "signal.target.parent.file.modification_time": - return "signal", nil - case "signal.target.parent.file.mount_id": - return "signal", nil - case "signal.target.parent.file.name": - return "signal", nil - case "signal.target.parent.file.name.length": - return "signal", nil - case "signal.target.parent.file.path": - return "signal", nil - case "signal.target.parent.file.path.length": - return "signal", nil - case "signal.target.parent.file.rights": - return "signal", nil - case "signal.target.parent.file.uid": - return "signal", nil - case "signal.target.parent.file.user": - return "signal", nil - case "signal.target.parent.fsgid": - return "signal", nil - case "signal.target.parent.fsgroup": - return "signal", nil - case "signal.target.parent.fsuid": - return "signal", nil - case "signal.target.parent.fsuser": - return "signal", nil - case "signal.target.parent.gid": - return "signal", nil - case "signal.target.parent.group": - return "signal", nil - case "signal.target.parent.interpreter.file.change_time": - return "signal", nil - case "signal.target.parent.interpreter.file.filesystem": - return "signal", nil - case "signal.target.parent.interpreter.file.gid": - return "signal", nil - case "signal.target.parent.interpreter.file.group": - return "signal", nil - case "signal.target.parent.interpreter.file.in_upper_layer": - return "signal", nil - case "signal.target.parent.interpreter.file.inode": - return "signal", nil - case "signal.target.parent.interpreter.file.mode": - return "signal", nil - case "signal.target.parent.interpreter.file.modification_time": - return "signal", nil - case "signal.target.parent.interpreter.file.mount_id": - return "signal", nil - case "signal.target.parent.interpreter.file.name": - return "signal", nil - case "signal.target.parent.interpreter.file.name.length": - return "signal", nil - case "signal.target.parent.interpreter.file.path": - return "signal", nil - case "signal.target.parent.interpreter.file.path.length": - return "signal", nil - case "signal.target.parent.interpreter.file.rights": - return "signal", nil - case "signal.target.parent.interpreter.file.uid": - return "signal", nil - case "signal.target.parent.interpreter.file.user": - return "signal", nil - case "signal.target.parent.is_kworker": - return "signal", nil - case "signal.target.parent.is_thread": - return "signal", nil - case "signal.target.parent.pid": - return "signal", nil - case "signal.target.parent.ppid": - return "signal", nil - case "signal.target.parent.tid": - return "signal", nil - case "signal.target.parent.tty_name": - return "signal", nil - case "signal.target.parent.uid": - return "signal", nil - case "signal.target.parent.user": - return "signal", nil - case "signal.target.pid": - return "signal", nil - case "signal.target.ppid": - return "signal", nil - case "signal.target.tid": - return "signal", nil - case "signal.target.tty_name": - return "signal", nil - case "signal.target.uid": - return "signal", nil - case "signal.target.user": - return "signal", nil - case "signal.type": - return "signal", nil - case "splice.file.change_time": - return "splice", nil - case "splice.file.filesystem": - return "splice", nil - case "splice.file.gid": - return "splice", nil - case "splice.file.group": - return "splice", nil - case "splice.file.in_upper_layer": - return "splice", nil - case "splice.file.inode": - return "splice", nil - case "splice.file.mode": - return "splice", nil - case "splice.file.modification_time": - return "splice", nil - case "splice.file.mount_id": - return "splice", nil - case "splice.file.name": - return "splice", nil - case "splice.file.name.length": - return "splice", nil - case "splice.file.path": - return "splice", nil - case "splice.file.path.length": - return "splice", nil - case "splice.file.rights": - return "splice", nil - case "splice.file.uid": - return "splice", nil - case "splice.file.user": - return "splice", nil - case "splice.pipe_entry_flag": - return "splice", nil - case "splice.pipe_exit_flag": - return "splice", nil - case "splice.retval": - return "splice", nil - case "unlink.file.change_time": - return "unlink", nil - case "unlink.file.filesystem": - return "unlink", nil - case "unlink.file.gid": - return "unlink", nil - case "unlink.file.group": - return "unlink", nil - case "unlink.file.in_upper_layer": - return "unlink", nil - case "unlink.file.inode": - return "unlink", nil - case "unlink.file.mode": - return "unlink", nil - case "unlink.file.modification_time": - return "unlink", nil - case "unlink.file.mount_id": - return "unlink", nil - case "unlink.file.name": - return "unlink", nil - case "unlink.file.name.length": - return "unlink", nil - case "unlink.file.path": - return "unlink", nil - case "unlink.file.path.length": - return "unlink", nil - case "unlink.file.rights": - return "unlink", nil - case "unlink.file.uid": - return "unlink", nil - case "unlink.file.user": - return "unlink", nil - case "unlink.flags": - return "unlink", nil - case "unlink.retval": - return "unlink", nil - case "unload_module.name": - return "unload_module", nil - case "unload_module.retval": - return "unload_module", nil - case "utimes.file.change_time": - return "utimes", nil - case "utimes.file.filesystem": - return "utimes", nil - case "utimes.file.gid": - return "utimes", nil - case "utimes.file.group": - return "utimes", nil - case "utimes.file.in_upper_layer": - return "utimes", nil - case "utimes.file.inode": - return "utimes", nil - case "utimes.file.mode": - return "utimes", nil - case "utimes.file.modification_time": - return "utimes", nil - case "utimes.file.mount_id": - return "utimes", nil - case "utimes.file.name": - return "utimes", nil - case "utimes.file.name.length": - return "utimes", nil - case "utimes.file.path": - return "utimes", nil - case "utimes.file.path.length": - return "utimes", nil - case "utimes.file.rights": - return "utimes", nil - case "utimes.file.uid": - return "utimes", nil - case "utimes.file.user": - return "utimes", nil - case "utimes.retval": - return "utimes", nil - } - return "", &eval.ErrFieldNotFound{Field: field} -} -func (e *Event) GetFieldType(field eval.Field) (reflect.Kind, error) { - switch field { - case "async": - return reflect.Bool, nil - case "bind.addr.family": - return reflect.Int, nil - case "bind.addr.ip": - return reflect.Struct, nil - case "bind.addr.port": - return reflect.Int, nil - case "bind.retval": - return reflect.Int, nil - case "bpf.cmd": - return reflect.Int, nil - case "bpf.map.name": - return reflect.String, nil - case "bpf.map.type": - return reflect.Int, nil - case "bpf.prog.attach_type": - return reflect.Int, nil - case "bpf.prog.helpers": - return reflect.Int, nil - case "bpf.prog.name": - return reflect.String, nil - case "bpf.prog.tag": - return reflect.String, nil - case "bpf.prog.type": - return reflect.Int, nil - case "bpf.retval": - return reflect.Int, nil - case "capset.cap_effective": - return reflect.Int, nil - case "capset.cap_permitted": - return reflect.Int, nil - case "chmod.file.change_time": - return reflect.Int, nil - case "chmod.file.destination.mode": - return reflect.Int, nil - case "chmod.file.destination.rights": - return reflect.Int, nil - case "chmod.file.filesystem": - return reflect.String, nil - case "chmod.file.gid": - return reflect.Int, nil - case "chmod.file.group": - return reflect.String, nil - case "chmod.file.in_upper_layer": - return reflect.Bool, nil - case "chmod.file.inode": - return reflect.Int, nil - case "chmod.file.mode": - return reflect.Int, nil - case "chmod.file.modification_time": - return reflect.Int, nil - case "chmod.file.mount_id": - return reflect.Int, nil - case "chmod.file.name": - return reflect.String, nil - case "chmod.file.name.length": - return reflect.Int, nil - case "chmod.file.path": - return reflect.String, nil - case "chmod.file.path.length": - return reflect.Int, nil - case "chmod.file.rights": - return reflect.Int, nil - case "chmod.file.uid": - return reflect.Int, nil - case "chmod.file.user": - return reflect.String, nil - case "chmod.retval": - return reflect.Int, nil - case "chown.file.change_time": - return reflect.Int, nil - case "chown.file.destination.gid": - return reflect.Int, nil - case "chown.file.destination.group": - return reflect.String, nil - case "chown.file.destination.uid": - return reflect.Int, nil - case "chown.file.destination.user": - return reflect.String, nil - case "chown.file.filesystem": - return reflect.String, nil - case "chown.file.gid": - return reflect.Int, nil - case "chown.file.group": - return reflect.String, nil - case "chown.file.in_upper_layer": - return reflect.Bool, nil - case "chown.file.inode": - return reflect.Int, nil - case "chown.file.mode": - return reflect.Int, nil - case "chown.file.modification_time": - return reflect.Int, nil - case "chown.file.mount_id": - return reflect.Int, nil - case "chown.file.name": - return reflect.String, nil - case "chown.file.name.length": - return reflect.Int, nil - case "chown.file.path": - return reflect.String, nil - case "chown.file.path.length": - return reflect.Int, nil - case "chown.file.rights": - return reflect.Int, nil - case "chown.file.uid": - return reflect.Int, nil - case "chown.file.user": - return reflect.String, nil - case "chown.retval": - return reflect.Int, nil - case "container.id": - return reflect.String, nil - case "container.tags": - return reflect.String, nil - case "dns.id": - return reflect.Int, nil - case "dns.question.class": - return reflect.Int, nil - case "dns.question.count": - return reflect.Int, nil - case "dns.question.length": - return reflect.Int, nil - case "dns.question.name": - return reflect.String, nil - case "dns.question.name.length": - return reflect.Int, nil - case "dns.question.type": - return reflect.Int, nil - case "exec.args": - return reflect.String, nil - case "exec.args_flags": - return reflect.String, nil - case "exec.args_options": - return reflect.String, nil - case "exec.args_truncated": - return reflect.Bool, nil - case "exec.argv": - return reflect.String, nil - case "exec.argv0": - return reflect.String, nil - case "exec.cap_effective": - return reflect.Int, nil - case "exec.cap_permitted": - return reflect.Int, nil - case "exec.comm": - return reflect.String, nil - case "exec.container.id": - return reflect.String, nil - case "exec.cookie": - return reflect.Int, nil - case "exec.created_at": - return reflect.Int, nil - case "exec.egid": - return reflect.Int, nil - case "exec.egroup": - return reflect.String, nil - case "exec.envp": - return reflect.String, nil - case "exec.envs": - return reflect.String, nil - case "exec.envs_truncated": - return reflect.Bool, nil - case "exec.euid": - return reflect.Int, nil - case "exec.euser": - return reflect.String, nil - case "exec.file.change_time": - return reflect.Int, nil - case "exec.file.filesystem": - return reflect.String, nil - case "exec.file.gid": - return reflect.Int, nil - case "exec.file.group": - return reflect.String, nil - case "exec.file.in_upper_layer": - return reflect.Bool, nil - case "exec.file.inode": - return reflect.Int, nil - case "exec.file.mode": - return reflect.Int, nil - case "exec.file.modification_time": - return reflect.Int, nil - case "exec.file.mount_id": - return reflect.Int, nil - case "exec.file.name": - return reflect.String, nil - case "exec.file.name.length": - return reflect.Int, nil - case "exec.file.path": - return reflect.String, nil - case "exec.file.path.length": - return reflect.Int, nil - case "exec.file.rights": - return reflect.Int, nil - case "exec.file.uid": - return reflect.Int, nil - case "exec.file.user": - return reflect.String, nil - case "exec.fsgid": - return reflect.Int, nil - case "exec.fsgroup": - return reflect.String, nil - case "exec.fsuid": - return reflect.Int, nil - case "exec.fsuser": - return reflect.String, nil - case "exec.gid": - return reflect.Int, nil - case "exec.group": - return reflect.String, nil - case "exec.interpreter.file.change_time": - return reflect.Int, nil - case "exec.interpreter.file.filesystem": - return reflect.String, nil - case "exec.interpreter.file.gid": - return reflect.Int, nil - case "exec.interpreter.file.group": - return reflect.String, nil - case "exec.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "exec.interpreter.file.inode": - return reflect.Int, nil - case "exec.interpreter.file.mode": - return reflect.Int, nil - case "exec.interpreter.file.modification_time": - return reflect.Int, nil - case "exec.interpreter.file.mount_id": - return reflect.Int, nil - case "exec.interpreter.file.name": - return reflect.String, nil - case "exec.interpreter.file.name.length": - return reflect.Int, nil - case "exec.interpreter.file.path": - return reflect.String, nil - case "exec.interpreter.file.path.length": - return reflect.Int, nil - case "exec.interpreter.file.rights": - return reflect.Int, nil - case "exec.interpreter.file.uid": - return reflect.Int, nil - case "exec.interpreter.file.user": - return reflect.String, nil - case "exec.is_kworker": - return reflect.Bool, nil - case "exec.is_thread": - return reflect.Bool, nil - case "exec.pid": - return reflect.Int, nil - case "exec.ppid": - return reflect.Int, nil - case "exec.tid": - return reflect.Int, nil - case "exec.tty_name": - return reflect.String, nil - case "exec.uid": - return reflect.Int, nil - case "exec.user": - return reflect.String, nil - case "exit.args": - return reflect.String, nil - case "exit.args_flags": - return reflect.String, nil - case "exit.args_options": - return reflect.String, nil - case "exit.args_truncated": - return reflect.Bool, nil - case "exit.argv": - return reflect.String, nil - case "exit.argv0": - return reflect.String, nil - case "exit.cap_effective": - return reflect.Int, nil - case "exit.cap_permitted": - return reflect.Int, nil - case "exit.cause": - return reflect.Int, nil - case "exit.code": - return reflect.Int, nil - case "exit.comm": - return reflect.String, nil - case "exit.container.id": - return reflect.String, nil - case "exit.cookie": - return reflect.Int, nil - case "exit.created_at": - return reflect.Int, nil - case "exit.egid": - return reflect.Int, nil - case "exit.egroup": - return reflect.String, nil - case "exit.envp": - return reflect.String, nil - case "exit.envs": - return reflect.String, nil - case "exit.envs_truncated": - return reflect.Bool, nil - case "exit.euid": - return reflect.Int, nil - case "exit.euser": - return reflect.String, nil - case "exit.file.change_time": - return reflect.Int, nil - case "exit.file.filesystem": - return reflect.String, nil - case "exit.file.gid": - return reflect.Int, nil - case "exit.file.group": - return reflect.String, nil - case "exit.file.in_upper_layer": - return reflect.Bool, nil - case "exit.file.inode": - return reflect.Int, nil - case "exit.file.mode": - return reflect.Int, nil - case "exit.file.modification_time": - return reflect.Int, nil - case "exit.file.mount_id": - return reflect.Int, nil - case "exit.file.name": - return reflect.String, nil - case "exit.file.name.length": - return reflect.Int, nil - case "exit.file.path": - return reflect.String, nil - case "exit.file.path.length": - return reflect.Int, nil - case "exit.file.rights": - return reflect.Int, nil - case "exit.file.uid": - return reflect.Int, nil - case "exit.file.user": - return reflect.String, nil - case "exit.fsgid": - return reflect.Int, nil - case "exit.fsgroup": - return reflect.String, nil - case "exit.fsuid": - return reflect.Int, nil - case "exit.fsuser": - return reflect.String, nil - case "exit.gid": - return reflect.Int, nil - case "exit.group": - return reflect.String, nil - case "exit.interpreter.file.change_time": - return reflect.Int, nil - case "exit.interpreter.file.filesystem": - return reflect.String, nil - case "exit.interpreter.file.gid": - return reflect.Int, nil - case "exit.interpreter.file.group": - return reflect.String, nil - case "exit.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "exit.interpreter.file.inode": - return reflect.Int, nil - case "exit.interpreter.file.mode": - return reflect.Int, nil - case "exit.interpreter.file.modification_time": - return reflect.Int, nil - case "exit.interpreter.file.mount_id": - return reflect.Int, nil - case "exit.interpreter.file.name": - return reflect.String, nil - case "exit.interpreter.file.name.length": - return reflect.Int, nil - case "exit.interpreter.file.path": - return reflect.String, nil - case "exit.interpreter.file.path.length": - return reflect.Int, nil - case "exit.interpreter.file.rights": - return reflect.Int, nil - case "exit.interpreter.file.uid": - return reflect.Int, nil - case "exit.interpreter.file.user": - return reflect.String, nil - case "exit.is_kworker": - return reflect.Bool, nil - case "exit.is_thread": - return reflect.Bool, nil - case "exit.pid": - return reflect.Int, nil - case "exit.ppid": - return reflect.Int, nil - case "exit.tid": - return reflect.Int, nil - case "exit.tty_name": - return reflect.String, nil - case "exit.uid": - return reflect.Int, nil - case "exit.user": - return reflect.String, nil - case "link.file.change_time": - return reflect.Int, nil - case "link.file.destination.change_time": - return reflect.Int, nil - case "link.file.destination.filesystem": - return reflect.String, nil - case "link.file.destination.gid": - return reflect.Int, nil - case "link.file.destination.group": - return reflect.String, nil - case "link.file.destination.in_upper_layer": - return reflect.Bool, nil - case "link.file.destination.inode": - return reflect.Int, nil - case "link.file.destination.mode": - return reflect.Int, nil - case "link.file.destination.modification_time": - return reflect.Int, nil - case "link.file.destination.mount_id": - return reflect.Int, nil - case "link.file.destination.name": - return reflect.String, nil - case "link.file.destination.name.length": - return reflect.Int, nil - case "link.file.destination.path": - return reflect.String, nil - case "link.file.destination.path.length": - return reflect.Int, nil - case "link.file.destination.rights": - return reflect.Int, nil - case "link.file.destination.uid": - return reflect.Int, nil - case "link.file.destination.user": - return reflect.String, nil - case "link.file.filesystem": - return reflect.String, nil - case "link.file.gid": - return reflect.Int, nil - case "link.file.group": - return reflect.String, nil - case "link.file.in_upper_layer": - return reflect.Bool, nil - case "link.file.inode": - return reflect.Int, nil - case "link.file.mode": - return reflect.Int, nil - case "link.file.modification_time": - return reflect.Int, nil - case "link.file.mount_id": - return reflect.Int, nil - case "link.file.name": - return reflect.String, nil - case "link.file.name.length": - return reflect.Int, nil - case "link.file.path": - return reflect.String, nil - case "link.file.path.length": - return reflect.Int, nil - case "link.file.rights": - return reflect.Int, nil - case "link.file.uid": - return reflect.Int, nil - case "link.file.user": - return reflect.String, nil - case "link.retval": - return reflect.Int, nil - case "load_module.file.change_time": - return reflect.Int, nil - case "load_module.file.filesystem": - return reflect.String, nil - case "load_module.file.gid": - return reflect.Int, nil - case "load_module.file.group": - return reflect.String, nil - case "load_module.file.in_upper_layer": - return reflect.Bool, nil - case "load_module.file.inode": - return reflect.Int, nil - case "load_module.file.mode": - return reflect.Int, nil - case "load_module.file.modification_time": - return reflect.Int, nil - case "load_module.file.mount_id": - return reflect.Int, nil - case "load_module.file.name": - return reflect.String, nil - case "load_module.file.name.length": - return reflect.Int, nil - case "load_module.file.path": - return reflect.String, nil - case "load_module.file.path.length": - return reflect.Int, nil - case "load_module.file.rights": - return reflect.Int, nil - case "load_module.file.uid": - return reflect.Int, nil - case "load_module.file.user": - return reflect.String, nil - case "load_module.loaded_from_memory": - return reflect.Bool, nil - case "load_module.name": - return reflect.String, nil - case "load_module.retval": - return reflect.Int, nil - case "mkdir.file.change_time": - return reflect.Int, nil - case "mkdir.file.destination.mode": - return reflect.Int, nil - case "mkdir.file.destination.rights": - return reflect.Int, nil - case "mkdir.file.filesystem": - return reflect.String, nil - case "mkdir.file.gid": - return reflect.Int, nil - case "mkdir.file.group": - return reflect.String, nil - case "mkdir.file.in_upper_layer": - return reflect.Bool, nil - case "mkdir.file.inode": - return reflect.Int, nil - case "mkdir.file.mode": - return reflect.Int, nil - case "mkdir.file.modification_time": - return reflect.Int, nil - case "mkdir.file.mount_id": - return reflect.Int, nil - case "mkdir.file.name": - return reflect.String, nil - case "mkdir.file.name.length": - return reflect.Int, nil - case "mkdir.file.path": - return reflect.String, nil - case "mkdir.file.path.length": - return reflect.Int, nil - case "mkdir.file.rights": - return reflect.Int, nil - case "mkdir.file.uid": - return reflect.Int, nil - case "mkdir.file.user": - return reflect.String, nil - case "mkdir.retval": - return reflect.Int, nil - case "mmap.file.change_time": - return reflect.Int, nil - case "mmap.file.filesystem": - return reflect.String, nil - case "mmap.file.gid": - return reflect.Int, nil - case "mmap.file.group": - return reflect.String, nil - case "mmap.file.in_upper_layer": - return reflect.Bool, nil - case "mmap.file.inode": - return reflect.Int, nil - case "mmap.file.mode": - return reflect.Int, nil - case "mmap.file.modification_time": - return reflect.Int, nil - case "mmap.file.mount_id": - return reflect.Int, nil - case "mmap.file.name": - return reflect.String, nil - case "mmap.file.name.length": - return reflect.Int, nil - case "mmap.file.path": - return reflect.String, nil - case "mmap.file.path.length": - return reflect.Int, nil - case "mmap.file.rights": - return reflect.Int, nil - case "mmap.file.uid": - return reflect.Int, nil - case "mmap.file.user": - return reflect.String, nil - case "mmap.flags": - return reflect.Int, nil - case "mmap.protection": - return reflect.Int, nil - case "mmap.retval": - return reflect.Int, nil - case "mount.fs_type": - return reflect.String, nil - case "mount.mountpoint.path": - return reflect.String, nil - case "mount.retval": - return reflect.Int, nil - case "mount.source.path": - return reflect.String, nil - case "mprotect.req_protection": - return reflect.Int, nil - case "mprotect.retval": - return reflect.Int, nil - case "mprotect.vm_protection": - return reflect.Int, nil - case "network.destination.ip": - return reflect.Struct, nil - case "network.destination.port": - return reflect.Int, nil - case "network.device.ifindex": - return reflect.Int, nil - case "network.device.ifname": - return reflect.String, nil - case "network.l3_protocol": - return reflect.Int, nil - case "network.l4_protocol": - return reflect.Int, nil - case "network.size": - return reflect.Int, nil - case "network.source.ip": - return reflect.Struct, nil - case "network.source.port": - return reflect.Int, nil - case "open.file.change_time": - return reflect.Int, nil - case "open.file.destination.mode": - return reflect.Int, nil - case "open.file.filesystem": - return reflect.String, nil - case "open.file.gid": - return reflect.Int, nil - case "open.file.group": - return reflect.String, nil - case "open.file.in_upper_layer": - return reflect.Bool, nil - case "open.file.inode": - return reflect.Int, nil - case "open.file.mode": - return reflect.Int, nil - case "open.file.modification_time": - return reflect.Int, nil - case "open.file.mount_id": - return reflect.Int, nil - case "open.file.name": - return reflect.String, nil - case "open.file.name.length": - return reflect.Int, nil - case "open.file.path": - return reflect.String, nil - case "open.file.path.length": - return reflect.Int, nil - case "open.file.rights": - return reflect.Int, nil - case "open.file.uid": - return reflect.Int, nil - case "open.file.user": - return reflect.String, nil - case "open.flags": - return reflect.Int, nil - case "open.retval": - return reflect.Int, nil - case "process.ancestors.args": - return reflect.String, nil - case "process.ancestors.args_flags": - return reflect.String, nil - case "process.ancestors.args_options": - return reflect.String, nil - case "process.ancestors.args_truncated": - return reflect.Bool, nil - case "process.ancestors.argv": - return reflect.String, nil - case "process.ancestors.argv0": - return reflect.String, nil - case "process.ancestors.cap_effective": - return reflect.Int, nil - case "process.ancestors.cap_permitted": - return reflect.Int, nil - case "process.ancestors.comm": - return reflect.String, nil - case "process.ancestors.container.id": - return reflect.String, nil - case "process.ancestors.cookie": - return reflect.Int, nil - case "process.ancestors.created_at": - return reflect.Int, nil - case "process.ancestors.egid": - return reflect.Int, nil - case "process.ancestors.egroup": - return reflect.String, nil - case "process.ancestors.envp": - return reflect.String, nil - case "process.ancestors.envs": - return reflect.String, nil - case "process.ancestors.envs_truncated": - return reflect.Bool, nil - case "process.ancestors.euid": - return reflect.Int, nil - case "process.ancestors.euser": - return reflect.String, nil - case "process.ancestors.file.change_time": - return reflect.Int, nil - case "process.ancestors.file.filesystem": - return reflect.String, nil - case "process.ancestors.file.gid": - return reflect.Int, nil - case "process.ancestors.file.group": - return reflect.String, nil - case "process.ancestors.file.in_upper_layer": - return reflect.Bool, nil - case "process.ancestors.file.inode": - return reflect.Int, nil - case "process.ancestors.file.mode": - return reflect.Int, nil - case "process.ancestors.file.modification_time": - return reflect.Int, nil - case "process.ancestors.file.mount_id": - return reflect.Int, nil - case "process.ancestors.file.name": - return reflect.String, nil - case "process.ancestors.file.name.length": - return reflect.Int, nil - case "process.ancestors.file.path": - return reflect.String, nil - case "process.ancestors.file.path.length": - return reflect.Int, nil - case "process.ancestors.file.rights": - return reflect.Int, nil - case "process.ancestors.file.uid": - return reflect.Int, nil - case "process.ancestors.file.user": - return reflect.String, nil - case "process.ancestors.fsgid": - return reflect.Int, nil - case "process.ancestors.fsgroup": - return reflect.String, nil - case "process.ancestors.fsuid": - return reflect.Int, nil - case "process.ancestors.fsuser": - return reflect.String, nil - case "process.ancestors.gid": - return reflect.Int, nil - case "process.ancestors.group": - return reflect.String, nil - case "process.ancestors.interpreter.file.change_time": - return reflect.Int, nil - case "process.ancestors.interpreter.file.filesystem": - return reflect.String, nil - case "process.ancestors.interpreter.file.gid": - return reflect.Int, nil - case "process.ancestors.interpreter.file.group": - return reflect.String, nil - case "process.ancestors.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "process.ancestors.interpreter.file.inode": - return reflect.Int, nil - case "process.ancestors.interpreter.file.mode": - return reflect.Int, nil - case "process.ancestors.interpreter.file.modification_time": - return reflect.Int, nil - case "process.ancestors.interpreter.file.mount_id": - return reflect.Int, nil - case "process.ancestors.interpreter.file.name": - return reflect.String, nil - case "process.ancestors.interpreter.file.name.length": - return reflect.Int, nil - case "process.ancestors.interpreter.file.path": - return reflect.String, nil - case "process.ancestors.interpreter.file.path.length": - return reflect.Int, nil - case "process.ancestors.interpreter.file.rights": - return reflect.Int, nil - case "process.ancestors.interpreter.file.uid": - return reflect.Int, nil - case "process.ancestors.interpreter.file.user": - return reflect.String, nil - case "process.ancestors.is_kworker": - return reflect.Bool, nil - case "process.ancestors.is_thread": - return reflect.Bool, nil - case "process.ancestors.pid": - return reflect.Int, nil - case "process.ancestors.ppid": - return reflect.Int, nil - case "process.ancestors.tid": - return reflect.Int, nil - case "process.ancestors.tty_name": - return reflect.String, nil - case "process.ancestors.uid": - return reflect.Int, nil - case "process.ancestors.user": - return reflect.String, nil - case "process.args": - return reflect.String, nil - case "process.args_flags": - return reflect.String, nil - case "process.args_options": - return reflect.String, nil - case "process.args_truncated": - return reflect.Bool, nil - case "process.argv": - return reflect.String, nil - case "process.argv0": - return reflect.String, nil - case "process.cap_effective": - return reflect.Int, nil - case "process.cap_permitted": - return reflect.Int, nil - case "process.comm": - return reflect.String, nil - case "process.container.id": - return reflect.String, nil - case "process.cookie": - return reflect.Int, nil - case "process.created_at": - return reflect.Int, nil - case "process.egid": - return reflect.Int, nil - case "process.egroup": - return reflect.String, nil - case "process.envp": - return reflect.String, nil - case "process.envs": - return reflect.String, nil - case "process.envs_truncated": - return reflect.Bool, nil - case "process.euid": - return reflect.Int, nil - case "process.euser": - return reflect.String, nil - case "process.file.change_time": - return reflect.Int, nil - case "process.file.filesystem": - return reflect.String, nil - case "process.file.gid": - return reflect.Int, nil - case "process.file.group": - return reflect.String, nil - case "process.file.in_upper_layer": - return reflect.Bool, nil - case "process.file.inode": - return reflect.Int, nil - case "process.file.mode": - return reflect.Int, nil - case "process.file.modification_time": - return reflect.Int, nil - case "process.file.mount_id": - return reflect.Int, nil - case "process.file.name": - return reflect.String, nil - case "process.file.name.length": - return reflect.Int, nil - case "process.file.path": - return reflect.String, nil - case "process.file.path.length": - return reflect.Int, nil - case "process.file.rights": - return reflect.Int, nil - case "process.file.uid": - return reflect.Int, nil - case "process.file.user": - return reflect.String, nil - case "process.fsgid": - return reflect.Int, nil - case "process.fsgroup": - return reflect.String, nil - case "process.fsuid": - return reflect.Int, nil - case "process.fsuser": - return reflect.String, nil - case "process.gid": - return reflect.Int, nil - case "process.group": - return reflect.String, nil - case "process.interpreter.file.change_time": - return reflect.Int, nil - case "process.interpreter.file.filesystem": - return reflect.String, nil - case "process.interpreter.file.gid": - return reflect.Int, nil - case "process.interpreter.file.group": - return reflect.String, nil - case "process.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "process.interpreter.file.inode": - return reflect.Int, nil - case "process.interpreter.file.mode": - return reflect.Int, nil - case "process.interpreter.file.modification_time": - return reflect.Int, nil - case "process.interpreter.file.mount_id": - return reflect.Int, nil - case "process.interpreter.file.name": - return reflect.String, nil - case "process.interpreter.file.name.length": - return reflect.Int, nil - case "process.interpreter.file.path": - return reflect.String, nil - case "process.interpreter.file.path.length": - return reflect.Int, nil - case "process.interpreter.file.rights": - return reflect.Int, nil - case "process.interpreter.file.uid": - return reflect.Int, nil - case "process.interpreter.file.user": - return reflect.String, nil - case "process.is_kworker": - return reflect.Bool, nil - case "process.is_thread": - return reflect.Bool, nil - case "process.parent.args": - return reflect.String, nil - case "process.parent.args_flags": - return reflect.String, nil - case "process.parent.args_options": - return reflect.String, nil - case "process.parent.args_truncated": - return reflect.Bool, nil - case "process.parent.argv": - return reflect.String, nil - case "process.parent.argv0": - return reflect.String, nil - case "process.parent.cap_effective": - return reflect.Int, nil - case "process.parent.cap_permitted": - return reflect.Int, nil - case "process.parent.comm": - return reflect.String, nil - case "process.parent.container.id": - return reflect.String, nil - case "process.parent.cookie": - return reflect.Int, nil - case "process.parent.created_at": - return reflect.Int, nil - case "process.parent.egid": - return reflect.Int, nil - case "process.parent.egroup": - return reflect.String, nil - case "process.parent.envp": - return reflect.String, nil - case "process.parent.envs": - return reflect.String, nil - case "process.parent.envs_truncated": - return reflect.Bool, nil - case "process.parent.euid": - return reflect.Int, nil - case "process.parent.euser": - return reflect.String, nil - case "process.parent.file.change_time": - return reflect.Int, nil - case "process.parent.file.filesystem": - return reflect.String, nil - case "process.parent.file.gid": - return reflect.Int, nil - case "process.parent.file.group": - return reflect.String, nil - case "process.parent.file.in_upper_layer": - return reflect.Bool, nil - case "process.parent.file.inode": - return reflect.Int, nil - case "process.parent.file.mode": - return reflect.Int, nil - case "process.parent.file.modification_time": - return reflect.Int, nil - case "process.parent.file.mount_id": - return reflect.Int, nil - case "process.parent.file.name": - return reflect.String, nil - case "process.parent.file.name.length": - return reflect.Int, nil - case "process.parent.file.path": - return reflect.String, nil - case "process.parent.file.path.length": - return reflect.Int, nil - case "process.parent.file.rights": - return reflect.Int, nil - case "process.parent.file.uid": - return reflect.Int, nil - case "process.parent.file.user": - return reflect.String, nil - case "process.parent.fsgid": - return reflect.Int, nil - case "process.parent.fsgroup": - return reflect.String, nil - case "process.parent.fsuid": - return reflect.Int, nil - case "process.parent.fsuser": - return reflect.String, nil - case "process.parent.gid": - return reflect.Int, nil - case "process.parent.group": - return reflect.String, nil - case "process.parent.interpreter.file.change_time": - return reflect.Int, nil - case "process.parent.interpreter.file.filesystem": - return reflect.String, nil - case "process.parent.interpreter.file.gid": - return reflect.Int, nil - case "process.parent.interpreter.file.group": - return reflect.String, nil - case "process.parent.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "process.parent.interpreter.file.inode": - return reflect.Int, nil - case "process.parent.interpreter.file.mode": - return reflect.Int, nil - case "process.parent.interpreter.file.modification_time": - return reflect.Int, nil - case "process.parent.interpreter.file.mount_id": - return reflect.Int, nil - case "process.parent.interpreter.file.name": - return reflect.String, nil - case "process.parent.interpreter.file.name.length": - return reflect.Int, nil - case "process.parent.interpreter.file.path": - return reflect.String, nil - case "process.parent.interpreter.file.path.length": - return reflect.Int, nil - case "process.parent.interpreter.file.rights": - return reflect.Int, nil - case "process.parent.interpreter.file.uid": - return reflect.Int, nil - case "process.parent.interpreter.file.user": - return reflect.String, nil - case "process.parent.is_kworker": - return reflect.Bool, nil - case "process.parent.is_thread": - return reflect.Bool, nil - case "process.parent.pid": - return reflect.Int, nil - case "process.parent.ppid": - return reflect.Int, nil - case "process.parent.tid": - return reflect.Int, nil - case "process.parent.tty_name": - return reflect.String, nil - case "process.parent.uid": - return reflect.Int, nil - case "process.parent.user": - return reflect.String, nil - case "process.pid": - return reflect.Int, nil - case "process.ppid": - return reflect.Int, nil - case "process.tid": - return reflect.Int, nil - case "process.tty_name": - return reflect.String, nil - case "process.uid": - return reflect.Int, nil - case "process.user": - return reflect.String, nil - case "ptrace.request": - return reflect.Int, nil - case "ptrace.retval": - return reflect.Int, nil - case "ptrace.tracee.ancestors.args": - return reflect.String, nil - case "ptrace.tracee.ancestors.args_flags": - return reflect.String, nil - case "ptrace.tracee.ancestors.args_options": - return reflect.String, nil - case "ptrace.tracee.ancestors.args_truncated": - return reflect.Bool, nil - case "ptrace.tracee.ancestors.argv": - return reflect.String, nil - case "ptrace.tracee.ancestors.argv0": - return reflect.String, nil - case "ptrace.tracee.ancestors.cap_effective": - return reflect.Int, nil - case "ptrace.tracee.ancestors.cap_permitted": - return reflect.Int, nil - case "ptrace.tracee.ancestors.comm": - return reflect.String, nil - case "ptrace.tracee.ancestors.container.id": - return reflect.String, nil - case "ptrace.tracee.ancestors.cookie": - return reflect.Int, nil - case "ptrace.tracee.ancestors.created_at": - return reflect.Int, nil - case "ptrace.tracee.ancestors.egid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.egroup": - return reflect.String, nil - case "ptrace.tracee.ancestors.envp": - return reflect.String, nil - case "ptrace.tracee.ancestors.envs": - return reflect.String, nil - case "ptrace.tracee.ancestors.envs_truncated": - return reflect.Bool, nil - case "ptrace.tracee.ancestors.euid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.euser": - return reflect.String, nil - case "ptrace.tracee.ancestors.file.change_time": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.filesystem": - return reflect.String, nil - case "ptrace.tracee.ancestors.file.gid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.group": - return reflect.String, nil - case "ptrace.tracee.ancestors.file.in_upper_layer": - return reflect.Bool, nil - case "ptrace.tracee.ancestors.file.inode": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.mode": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.modification_time": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.mount_id": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.name": - return reflect.String, nil - case "ptrace.tracee.ancestors.file.name.length": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.path": - return reflect.String, nil - case "ptrace.tracee.ancestors.file.path.length": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.rights": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.uid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.user": - return reflect.String, nil - case "ptrace.tracee.ancestors.fsgid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.fsgroup": - return reflect.String, nil - case "ptrace.tracee.ancestors.fsuid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.fsuser": - return reflect.String, nil - case "ptrace.tracee.ancestors.gid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.group": - return reflect.String, nil - case "ptrace.tracee.ancestors.interpreter.file.change_time": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.filesystem": - return reflect.String, nil - case "ptrace.tracee.ancestors.interpreter.file.gid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.group": - return reflect.String, nil - case "ptrace.tracee.ancestors.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "ptrace.tracee.ancestors.interpreter.file.inode": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.mode": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.modification_time": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.mount_id": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.name": - return reflect.String, nil - case "ptrace.tracee.ancestors.interpreter.file.name.length": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.path": - return reflect.String, nil - case "ptrace.tracee.ancestors.interpreter.file.path.length": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.rights": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.uid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.user": - return reflect.String, nil - case "ptrace.tracee.ancestors.is_kworker": - return reflect.Bool, nil - case "ptrace.tracee.ancestors.is_thread": - return reflect.Bool, nil - case "ptrace.tracee.ancestors.pid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.ppid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.tid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.tty_name": - return reflect.String, nil - case "ptrace.tracee.ancestors.uid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.user": - return reflect.String, nil - case "ptrace.tracee.args": - return reflect.String, nil - case "ptrace.tracee.args_flags": - return reflect.String, nil - case "ptrace.tracee.args_options": - return reflect.String, nil - case "ptrace.tracee.args_truncated": - return reflect.Bool, nil - case "ptrace.tracee.argv": - return reflect.String, nil - case "ptrace.tracee.argv0": - return reflect.String, nil - case "ptrace.tracee.cap_effective": - return reflect.Int, nil - case "ptrace.tracee.cap_permitted": - return reflect.Int, nil - case "ptrace.tracee.comm": - return reflect.String, nil - case "ptrace.tracee.container.id": - return reflect.String, nil - case "ptrace.tracee.cookie": - return reflect.Int, nil - case "ptrace.tracee.created_at": - return reflect.Int, nil - case "ptrace.tracee.egid": - return reflect.Int, nil - case "ptrace.tracee.egroup": - return reflect.String, nil - case "ptrace.tracee.envp": - return reflect.String, nil - case "ptrace.tracee.envs": - return reflect.String, nil - case "ptrace.tracee.envs_truncated": - return reflect.Bool, nil - case "ptrace.tracee.euid": - return reflect.Int, nil - case "ptrace.tracee.euser": - return reflect.String, nil - case "ptrace.tracee.file.change_time": - return reflect.Int, nil - case "ptrace.tracee.file.filesystem": - return reflect.String, nil - case "ptrace.tracee.file.gid": - return reflect.Int, nil - case "ptrace.tracee.file.group": - return reflect.String, nil - case "ptrace.tracee.file.in_upper_layer": - return reflect.Bool, nil - case "ptrace.tracee.file.inode": - return reflect.Int, nil - case "ptrace.tracee.file.mode": - return reflect.Int, nil - case "ptrace.tracee.file.modification_time": - return reflect.Int, nil - case "ptrace.tracee.file.mount_id": - return reflect.Int, nil - case "ptrace.tracee.file.name": - return reflect.String, nil - case "ptrace.tracee.file.name.length": - return reflect.Int, nil - case "ptrace.tracee.file.path": - return reflect.String, nil - case "ptrace.tracee.file.path.length": - return reflect.Int, nil - case "ptrace.tracee.file.rights": - return reflect.Int, nil - case "ptrace.tracee.file.uid": - return reflect.Int, nil - case "ptrace.tracee.file.user": - return reflect.String, nil - case "ptrace.tracee.fsgid": - return reflect.Int, nil - case "ptrace.tracee.fsgroup": - return reflect.String, nil - case "ptrace.tracee.fsuid": - return reflect.Int, nil - case "ptrace.tracee.fsuser": - return reflect.String, nil - case "ptrace.tracee.gid": - return reflect.Int, nil - case "ptrace.tracee.group": - return reflect.String, nil - case "ptrace.tracee.interpreter.file.change_time": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.filesystem": - return reflect.String, nil - case "ptrace.tracee.interpreter.file.gid": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.group": - return reflect.String, nil - case "ptrace.tracee.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "ptrace.tracee.interpreter.file.inode": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.mode": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.modification_time": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.mount_id": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.name": - return reflect.String, nil - case "ptrace.tracee.interpreter.file.name.length": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.path": - return reflect.String, nil - case "ptrace.tracee.interpreter.file.path.length": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.rights": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.uid": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.user": - return reflect.String, nil - case "ptrace.tracee.is_kworker": - return reflect.Bool, nil - case "ptrace.tracee.is_thread": - return reflect.Bool, nil - case "ptrace.tracee.parent.args": - return reflect.String, nil - case "ptrace.tracee.parent.args_flags": - return reflect.String, nil - case "ptrace.tracee.parent.args_options": - return reflect.String, nil - case "ptrace.tracee.parent.args_truncated": - return reflect.Bool, nil - case "ptrace.tracee.parent.argv": - return reflect.String, nil - case "ptrace.tracee.parent.argv0": - return reflect.String, nil - case "ptrace.tracee.parent.cap_effective": - return reflect.Int, nil - case "ptrace.tracee.parent.cap_permitted": - return reflect.Int, nil - case "ptrace.tracee.parent.comm": - return reflect.String, nil - case "ptrace.tracee.parent.container.id": - return reflect.String, nil - case "ptrace.tracee.parent.cookie": - return reflect.Int, nil - case "ptrace.tracee.parent.created_at": - return reflect.Int, nil - case "ptrace.tracee.parent.egid": - return reflect.Int, nil - case "ptrace.tracee.parent.egroup": - return reflect.String, nil - case "ptrace.tracee.parent.envp": - return reflect.String, nil - case "ptrace.tracee.parent.envs": - return reflect.String, nil - case "ptrace.tracee.parent.envs_truncated": - return reflect.Bool, nil - case "ptrace.tracee.parent.euid": - return reflect.Int, nil - case "ptrace.tracee.parent.euser": - return reflect.String, nil - case "ptrace.tracee.parent.file.change_time": - return reflect.Int, nil - case "ptrace.tracee.parent.file.filesystem": - return reflect.String, nil - case "ptrace.tracee.parent.file.gid": - return reflect.Int, nil - case "ptrace.tracee.parent.file.group": - return reflect.String, nil - case "ptrace.tracee.parent.file.in_upper_layer": - return reflect.Bool, nil - case "ptrace.tracee.parent.file.inode": - return reflect.Int, nil - case "ptrace.tracee.parent.file.mode": - return reflect.Int, nil - case "ptrace.tracee.parent.file.modification_time": - return reflect.Int, nil - case "ptrace.tracee.parent.file.mount_id": - return reflect.Int, nil - case "ptrace.tracee.parent.file.name": - return reflect.String, nil - case "ptrace.tracee.parent.file.name.length": - return reflect.Int, nil - case "ptrace.tracee.parent.file.path": - return reflect.String, nil - case "ptrace.tracee.parent.file.path.length": - return reflect.Int, nil - case "ptrace.tracee.parent.file.rights": - return reflect.Int, nil - case "ptrace.tracee.parent.file.uid": - return reflect.Int, nil - case "ptrace.tracee.parent.file.user": - return reflect.String, nil - case "ptrace.tracee.parent.fsgid": - return reflect.Int, nil - case "ptrace.tracee.parent.fsgroup": - return reflect.String, nil - case "ptrace.tracee.parent.fsuid": - return reflect.Int, nil - case "ptrace.tracee.parent.fsuser": - return reflect.String, nil - case "ptrace.tracee.parent.gid": - return reflect.Int, nil - case "ptrace.tracee.parent.group": - return reflect.String, nil - case "ptrace.tracee.parent.interpreter.file.change_time": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.filesystem": - return reflect.String, nil - case "ptrace.tracee.parent.interpreter.file.gid": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.group": - return reflect.String, nil - case "ptrace.tracee.parent.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "ptrace.tracee.parent.interpreter.file.inode": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.mode": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.modification_time": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.mount_id": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.name": - return reflect.String, nil - case "ptrace.tracee.parent.interpreter.file.name.length": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.path": - return reflect.String, nil - case "ptrace.tracee.parent.interpreter.file.path.length": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.rights": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.uid": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.user": - return reflect.String, nil - case "ptrace.tracee.parent.is_kworker": - return reflect.Bool, nil - case "ptrace.tracee.parent.is_thread": - return reflect.Bool, nil - case "ptrace.tracee.parent.pid": - return reflect.Int, nil - case "ptrace.tracee.parent.ppid": - return reflect.Int, nil - case "ptrace.tracee.parent.tid": - return reflect.Int, nil - case "ptrace.tracee.parent.tty_name": - return reflect.String, nil - case "ptrace.tracee.parent.uid": - return reflect.Int, nil - case "ptrace.tracee.parent.user": - return reflect.String, nil - case "ptrace.tracee.pid": - return reflect.Int, nil - case "ptrace.tracee.ppid": - return reflect.Int, nil - case "ptrace.tracee.tid": - return reflect.Int, nil - case "ptrace.tracee.tty_name": - return reflect.String, nil - case "ptrace.tracee.uid": - return reflect.Int, nil - case "ptrace.tracee.user": - return reflect.String, nil - case "removexattr.file.change_time": - return reflect.Int, nil - case "removexattr.file.destination.name": - return reflect.String, nil - case "removexattr.file.destination.namespace": - return reflect.String, nil - case "removexattr.file.filesystem": - return reflect.String, nil - case "removexattr.file.gid": - return reflect.Int, nil - case "removexattr.file.group": - return reflect.String, nil - case "removexattr.file.in_upper_layer": - return reflect.Bool, nil - case "removexattr.file.inode": - return reflect.Int, nil - case "removexattr.file.mode": - return reflect.Int, nil - case "removexattr.file.modification_time": - return reflect.Int, nil - case "removexattr.file.mount_id": - return reflect.Int, nil - case "removexattr.file.name": - return reflect.String, nil - case "removexattr.file.name.length": - return reflect.Int, nil - case "removexattr.file.path": - return reflect.String, nil - case "removexattr.file.path.length": - return reflect.Int, nil - case "removexattr.file.rights": - return reflect.Int, nil - case "removexattr.file.uid": - return reflect.Int, nil - case "removexattr.file.user": - return reflect.String, nil - case "removexattr.retval": - return reflect.Int, nil - case "rename.file.change_time": - return reflect.Int, nil - case "rename.file.destination.change_time": - return reflect.Int, nil - case "rename.file.destination.filesystem": - return reflect.String, nil - case "rename.file.destination.gid": - return reflect.Int, nil - case "rename.file.destination.group": - return reflect.String, nil - case "rename.file.destination.in_upper_layer": - return reflect.Bool, nil - case "rename.file.destination.inode": - return reflect.Int, nil - case "rename.file.destination.mode": - return reflect.Int, nil - case "rename.file.destination.modification_time": - return reflect.Int, nil - case "rename.file.destination.mount_id": - return reflect.Int, nil - case "rename.file.destination.name": - return reflect.String, nil - case "rename.file.destination.name.length": - return reflect.Int, nil - case "rename.file.destination.path": - return reflect.String, nil - case "rename.file.destination.path.length": - return reflect.Int, nil - case "rename.file.destination.rights": - return reflect.Int, nil - case "rename.file.destination.uid": - return reflect.Int, nil - case "rename.file.destination.user": - return reflect.String, nil - case "rename.file.filesystem": - return reflect.String, nil - case "rename.file.gid": - return reflect.Int, nil - case "rename.file.group": - return reflect.String, nil - case "rename.file.in_upper_layer": - return reflect.Bool, nil - case "rename.file.inode": - return reflect.Int, nil - case "rename.file.mode": - return reflect.Int, nil - case "rename.file.modification_time": - return reflect.Int, nil - case "rename.file.mount_id": - return reflect.Int, nil - case "rename.file.name": - return reflect.String, nil - case "rename.file.name.length": - return reflect.Int, nil - case "rename.file.path": - return reflect.String, nil - case "rename.file.path.length": - return reflect.Int, nil - case "rename.file.rights": - return reflect.Int, nil - case "rename.file.uid": - return reflect.Int, nil - case "rename.file.user": - return reflect.String, nil - case "rename.retval": - return reflect.Int, nil - case "rmdir.file.change_time": - return reflect.Int, nil - case "rmdir.file.filesystem": - return reflect.String, nil - case "rmdir.file.gid": - return reflect.Int, nil - case "rmdir.file.group": - return reflect.String, nil - case "rmdir.file.in_upper_layer": - return reflect.Bool, nil - case "rmdir.file.inode": - return reflect.Int, nil - case "rmdir.file.mode": - return reflect.Int, nil - case "rmdir.file.modification_time": - return reflect.Int, nil - case "rmdir.file.mount_id": - return reflect.Int, nil - case "rmdir.file.name": - return reflect.String, nil - case "rmdir.file.name.length": - return reflect.Int, nil - case "rmdir.file.path": - return reflect.String, nil - case "rmdir.file.path.length": - return reflect.Int, nil - case "rmdir.file.rights": - return reflect.Int, nil - case "rmdir.file.uid": - return reflect.Int, nil - case "rmdir.file.user": - return reflect.String, nil - case "rmdir.retval": - return reflect.Int, nil - case "selinux.bool.name": - return reflect.String, nil - case "selinux.bool.state": - return reflect.String, nil - case "selinux.bool_commit.state": - return reflect.Bool, nil - case "selinux.enforce.status": - return reflect.String, nil - case "setgid.egid": - return reflect.Int, nil - case "setgid.egroup": - return reflect.String, nil - case "setgid.fsgid": - return reflect.Int, nil - case "setgid.fsgroup": - return reflect.String, nil - case "setgid.gid": - return reflect.Int, nil - case "setgid.group": - return reflect.String, nil - case "setuid.euid": - return reflect.Int, nil - case "setuid.euser": - return reflect.String, nil - case "setuid.fsuid": - return reflect.Int, nil - case "setuid.fsuser": - return reflect.String, nil - case "setuid.uid": - return reflect.Int, nil - case "setuid.user": - return reflect.String, nil - case "setxattr.file.change_time": - return reflect.Int, nil - case "setxattr.file.destination.name": - return reflect.String, nil - case "setxattr.file.destination.namespace": - return reflect.String, nil - case "setxattr.file.filesystem": - return reflect.String, nil - case "setxattr.file.gid": - return reflect.Int, nil - case "setxattr.file.group": - return reflect.String, nil - case "setxattr.file.in_upper_layer": - return reflect.Bool, nil - case "setxattr.file.inode": - return reflect.Int, nil - case "setxattr.file.mode": - return reflect.Int, nil - case "setxattr.file.modification_time": - return reflect.Int, nil - case "setxattr.file.mount_id": - return reflect.Int, nil - case "setxattr.file.name": - return reflect.String, nil - case "setxattr.file.name.length": - return reflect.Int, nil - case "setxattr.file.path": - return reflect.String, nil - case "setxattr.file.path.length": - return reflect.Int, nil - case "setxattr.file.rights": - return reflect.Int, nil - case "setxattr.file.uid": - return reflect.Int, nil - case "setxattr.file.user": - return reflect.String, nil - case "setxattr.retval": - return reflect.Int, nil - case "signal.pid": - return reflect.Int, nil - case "signal.retval": - return reflect.Int, nil - case "signal.target.ancestors.args": - return reflect.String, nil - case "signal.target.ancestors.args_flags": - return reflect.String, nil - case "signal.target.ancestors.args_options": - return reflect.String, nil - case "signal.target.ancestors.args_truncated": - return reflect.Bool, nil - case "signal.target.ancestors.argv": - return reflect.String, nil - case "signal.target.ancestors.argv0": - return reflect.String, nil - case "signal.target.ancestors.cap_effective": - return reflect.Int, nil - case "signal.target.ancestors.cap_permitted": - return reflect.Int, nil - case "signal.target.ancestors.comm": - return reflect.String, nil - case "signal.target.ancestors.container.id": - return reflect.String, nil - case "signal.target.ancestors.cookie": - return reflect.Int, nil - case "signal.target.ancestors.created_at": - return reflect.Int, nil - case "signal.target.ancestors.egid": - return reflect.Int, nil - case "signal.target.ancestors.egroup": - return reflect.String, nil - case "signal.target.ancestors.envp": - return reflect.String, nil - case "signal.target.ancestors.envs": - return reflect.String, nil - case "signal.target.ancestors.envs_truncated": - return reflect.Bool, nil - case "signal.target.ancestors.euid": - return reflect.Int, nil - case "signal.target.ancestors.euser": - return reflect.String, nil - case "signal.target.ancestors.file.change_time": - return reflect.Int, nil - case "signal.target.ancestors.file.filesystem": - return reflect.String, nil - case "signal.target.ancestors.file.gid": - return reflect.Int, nil - case "signal.target.ancestors.file.group": - return reflect.String, nil - case "signal.target.ancestors.file.in_upper_layer": - return reflect.Bool, nil - case "signal.target.ancestors.file.inode": - return reflect.Int, nil - case "signal.target.ancestors.file.mode": - return reflect.Int, nil - case "signal.target.ancestors.file.modification_time": - return reflect.Int, nil - case "signal.target.ancestors.file.mount_id": - return reflect.Int, nil - case "signal.target.ancestors.file.name": - return reflect.String, nil - case "signal.target.ancestors.file.name.length": - return reflect.Int, nil - case "signal.target.ancestors.file.path": - return reflect.String, nil - case "signal.target.ancestors.file.path.length": - return reflect.Int, nil - case "signal.target.ancestors.file.rights": - return reflect.Int, nil - case "signal.target.ancestors.file.uid": - return reflect.Int, nil - case "signal.target.ancestors.file.user": - return reflect.String, nil - case "signal.target.ancestors.fsgid": - return reflect.Int, nil - case "signal.target.ancestors.fsgroup": - return reflect.String, nil - case "signal.target.ancestors.fsuid": - return reflect.Int, nil - case "signal.target.ancestors.fsuser": - return reflect.String, nil - case "signal.target.ancestors.gid": - return reflect.Int, nil - case "signal.target.ancestors.group": - return reflect.String, nil - case "signal.target.ancestors.interpreter.file.change_time": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.filesystem": - return reflect.String, nil - case "signal.target.ancestors.interpreter.file.gid": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.group": - return reflect.String, nil - case "signal.target.ancestors.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "signal.target.ancestors.interpreter.file.inode": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.mode": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.modification_time": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.mount_id": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.name": - return reflect.String, nil - case "signal.target.ancestors.interpreter.file.name.length": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.path": - return reflect.String, nil - case "signal.target.ancestors.interpreter.file.path.length": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.rights": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.uid": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.user": - return reflect.String, nil - case "signal.target.ancestors.is_kworker": - return reflect.Bool, nil - case "signal.target.ancestors.is_thread": - return reflect.Bool, nil - case "signal.target.ancestors.pid": - return reflect.Int, nil - case "signal.target.ancestors.ppid": - return reflect.Int, nil - case "signal.target.ancestors.tid": - return reflect.Int, nil - case "signal.target.ancestors.tty_name": - return reflect.String, nil - case "signal.target.ancestors.uid": - return reflect.Int, nil - case "signal.target.ancestors.user": - return reflect.String, nil - case "signal.target.args": - return reflect.String, nil - case "signal.target.args_flags": - return reflect.String, nil - case "signal.target.args_options": - return reflect.String, nil - case "signal.target.args_truncated": - return reflect.Bool, nil - case "signal.target.argv": - return reflect.String, nil - case "signal.target.argv0": - return reflect.String, nil - case "signal.target.cap_effective": - return reflect.Int, nil - case "signal.target.cap_permitted": - return reflect.Int, nil - case "signal.target.comm": - return reflect.String, nil - case "signal.target.container.id": - return reflect.String, nil - case "signal.target.cookie": - return reflect.Int, nil - case "signal.target.created_at": - return reflect.Int, nil - case "signal.target.egid": - return reflect.Int, nil - case "signal.target.egroup": - return reflect.String, nil - case "signal.target.envp": - return reflect.String, nil - case "signal.target.envs": - return reflect.String, nil - case "signal.target.envs_truncated": - return reflect.Bool, nil - case "signal.target.euid": - return reflect.Int, nil - case "signal.target.euser": - return reflect.String, nil - case "signal.target.file.change_time": - return reflect.Int, nil - case "signal.target.file.filesystem": - return reflect.String, nil - case "signal.target.file.gid": - return reflect.Int, nil - case "signal.target.file.group": - return reflect.String, nil - case "signal.target.file.in_upper_layer": - return reflect.Bool, nil - case "signal.target.file.inode": - return reflect.Int, nil - case "signal.target.file.mode": - return reflect.Int, nil - case "signal.target.file.modification_time": - return reflect.Int, nil - case "signal.target.file.mount_id": - return reflect.Int, nil - case "signal.target.file.name": - return reflect.String, nil - case "signal.target.file.name.length": - return reflect.Int, nil - case "signal.target.file.path": - return reflect.String, nil - case "signal.target.file.path.length": - return reflect.Int, nil - case "signal.target.file.rights": - return reflect.Int, nil - case "signal.target.file.uid": - return reflect.Int, nil - case "signal.target.file.user": - return reflect.String, nil - case "signal.target.fsgid": - return reflect.Int, nil - case "signal.target.fsgroup": - return reflect.String, nil - case "signal.target.fsuid": - return reflect.Int, nil - case "signal.target.fsuser": - return reflect.String, nil - case "signal.target.gid": - return reflect.Int, nil - case "signal.target.group": - return reflect.String, nil - case "signal.target.interpreter.file.change_time": - return reflect.Int, nil - case "signal.target.interpreter.file.filesystem": - return reflect.String, nil - case "signal.target.interpreter.file.gid": - return reflect.Int, nil - case "signal.target.interpreter.file.group": - return reflect.String, nil - case "signal.target.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "signal.target.interpreter.file.inode": - return reflect.Int, nil - case "signal.target.interpreter.file.mode": - return reflect.Int, nil - case "signal.target.interpreter.file.modification_time": - return reflect.Int, nil - case "signal.target.interpreter.file.mount_id": - return reflect.Int, nil - case "signal.target.interpreter.file.name": - return reflect.String, nil - case "signal.target.interpreter.file.name.length": - return reflect.Int, nil - case "signal.target.interpreter.file.path": - return reflect.String, nil - case "signal.target.interpreter.file.path.length": - return reflect.Int, nil - case "signal.target.interpreter.file.rights": - return reflect.Int, nil - case "signal.target.interpreter.file.uid": - return reflect.Int, nil - case "signal.target.interpreter.file.user": - return reflect.String, nil - case "signal.target.is_kworker": - return reflect.Bool, nil - case "signal.target.is_thread": - return reflect.Bool, nil - case "signal.target.parent.args": - return reflect.String, nil - case "signal.target.parent.args_flags": - return reflect.String, nil - case "signal.target.parent.args_options": - return reflect.String, nil - case "signal.target.parent.args_truncated": - return reflect.Bool, nil - case "signal.target.parent.argv": - return reflect.String, nil - case "signal.target.parent.argv0": - return reflect.String, nil - case "signal.target.parent.cap_effective": - return reflect.Int, nil - case "signal.target.parent.cap_permitted": - return reflect.Int, nil - case "signal.target.parent.comm": - return reflect.String, nil - case "signal.target.parent.container.id": - return reflect.String, nil - case "signal.target.parent.cookie": - return reflect.Int, nil - case "signal.target.parent.created_at": - return reflect.Int, nil - case "signal.target.parent.egid": - return reflect.Int, nil - case "signal.target.parent.egroup": - return reflect.String, nil - case "signal.target.parent.envp": - return reflect.String, nil - case "signal.target.parent.envs": - return reflect.String, nil - case "signal.target.parent.envs_truncated": - return reflect.Bool, nil - case "signal.target.parent.euid": - return reflect.Int, nil - case "signal.target.parent.euser": - return reflect.String, nil - case "signal.target.parent.file.change_time": - return reflect.Int, nil - case "signal.target.parent.file.filesystem": - return reflect.String, nil - case "signal.target.parent.file.gid": - return reflect.Int, nil - case "signal.target.parent.file.group": - return reflect.String, nil - case "signal.target.parent.file.in_upper_layer": - return reflect.Bool, nil - case "signal.target.parent.file.inode": - return reflect.Int, nil - case "signal.target.parent.file.mode": - return reflect.Int, nil - case "signal.target.parent.file.modification_time": - return reflect.Int, nil - case "signal.target.parent.file.mount_id": - return reflect.Int, nil - case "signal.target.parent.file.name": - return reflect.String, nil - case "signal.target.parent.file.name.length": - return reflect.Int, nil - case "signal.target.parent.file.path": - return reflect.String, nil - case "signal.target.parent.file.path.length": - return reflect.Int, nil - case "signal.target.parent.file.rights": - return reflect.Int, nil - case "signal.target.parent.file.uid": - return reflect.Int, nil - case "signal.target.parent.file.user": - return reflect.String, nil - case "signal.target.parent.fsgid": - return reflect.Int, nil - case "signal.target.parent.fsgroup": - return reflect.String, nil - case "signal.target.parent.fsuid": - return reflect.Int, nil - case "signal.target.parent.fsuser": - return reflect.String, nil - case "signal.target.parent.gid": - return reflect.Int, nil - case "signal.target.parent.group": - return reflect.String, nil - case "signal.target.parent.interpreter.file.change_time": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.filesystem": - return reflect.String, nil - case "signal.target.parent.interpreter.file.gid": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.group": - return reflect.String, nil - case "signal.target.parent.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "signal.target.parent.interpreter.file.inode": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.mode": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.modification_time": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.mount_id": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.name": - return reflect.String, nil - case "signal.target.parent.interpreter.file.name.length": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.path": - return reflect.String, nil - case "signal.target.parent.interpreter.file.path.length": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.rights": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.uid": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.user": - return reflect.String, nil - case "signal.target.parent.is_kworker": - return reflect.Bool, nil - case "signal.target.parent.is_thread": - return reflect.Bool, nil - case "signal.target.parent.pid": - return reflect.Int, nil - case "signal.target.parent.ppid": - return reflect.Int, nil - case "signal.target.parent.tid": - return reflect.Int, nil - case "signal.target.parent.tty_name": - return reflect.String, nil - case "signal.target.parent.uid": - return reflect.Int, nil - case "signal.target.parent.user": - return reflect.String, nil - case "signal.target.pid": - return reflect.Int, nil - case "signal.target.ppid": - return reflect.Int, nil - case "signal.target.tid": - return reflect.Int, nil - case "signal.target.tty_name": - return reflect.String, nil - case "signal.target.uid": - return reflect.Int, nil - case "signal.target.user": - return reflect.String, nil - case "signal.type": - return reflect.Int, nil - case "splice.file.change_time": - return reflect.Int, nil - case "splice.file.filesystem": - return reflect.String, nil - case "splice.file.gid": - return reflect.Int, nil - case "splice.file.group": - return reflect.String, nil - case "splice.file.in_upper_layer": - return reflect.Bool, nil - case "splice.file.inode": - return reflect.Int, nil - case "splice.file.mode": - return reflect.Int, nil - case "splice.file.modification_time": - return reflect.Int, nil - case "splice.file.mount_id": - return reflect.Int, nil - case "splice.file.name": - return reflect.String, nil - case "splice.file.name.length": - return reflect.Int, nil - case "splice.file.path": - return reflect.String, nil - case "splice.file.path.length": - return reflect.Int, nil - case "splice.file.rights": - return reflect.Int, nil - case "splice.file.uid": - return reflect.Int, nil - case "splice.file.user": - return reflect.String, nil - case "splice.pipe_entry_flag": - return reflect.Int, nil - case "splice.pipe_exit_flag": - return reflect.Int, nil - case "splice.retval": - return reflect.Int, nil - case "unlink.file.change_time": - return reflect.Int, nil - case "unlink.file.filesystem": - return reflect.String, nil - case "unlink.file.gid": - return reflect.Int, nil - case "unlink.file.group": - return reflect.String, nil - case "unlink.file.in_upper_layer": - return reflect.Bool, nil - case "unlink.file.inode": - return reflect.Int, nil - case "unlink.file.mode": - return reflect.Int, nil - case "unlink.file.modification_time": - return reflect.Int, nil - case "unlink.file.mount_id": - return reflect.Int, nil - case "unlink.file.name": - return reflect.String, nil - case "unlink.file.name.length": - return reflect.Int, nil - case "unlink.file.path": - return reflect.String, nil - case "unlink.file.path.length": - return reflect.Int, nil - case "unlink.file.rights": - return reflect.Int, nil - case "unlink.file.uid": - return reflect.Int, nil - case "unlink.file.user": - return reflect.String, nil - case "unlink.flags": - return reflect.Int, nil - case "unlink.retval": - return reflect.Int, nil - case "unload_module.name": - return reflect.String, nil - case "unload_module.retval": - return reflect.Int, nil - case "utimes.file.change_time": - return reflect.Int, nil - case "utimes.file.filesystem": - return reflect.String, nil - case "utimes.file.gid": - return reflect.Int, nil - case "utimes.file.group": - return reflect.String, nil - case "utimes.file.in_upper_layer": - return reflect.Bool, nil - case "utimes.file.inode": - return reflect.Int, nil - case "utimes.file.mode": - return reflect.Int, nil - case "utimes.file.modification_time": - return reflect.Int, nil - case "utimes.file.mount_id": - return reflect.Int, nil - case "utimes.file.name": - return reflect.String, nil - case "utimes.file.name.length": - return reflect.Int, nil - case "utimes.file.path": - return reflect.String, nil - case "utimes.file.path.length": - return reflect.Int, nil - case "utimes.file.rights": - return reflect.Int, nil - case "utimes.file.uid": - return reflect.Int, nil - case "utimes.file.user": - return reflect.String, nil - case "utimes.retval": - return reflect.Int, nil - } - return reflect.Invalid, &eval.ErrFieldNotFound{Field: field} -} -func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { - switch field { - case "async": - var ok bool - if e.Async, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Async"} - } - return nil - case "bind.addr.family": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Bind.AddrFamily"} - } - e.Bind.AddrFamily = uint16(v) - return nil - case "bind.addr.ip": - v, ok := value.(net.IPNet) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Bind.Addr.IPNet"} - } - e.Bind.Addr.IPNet = v - return nil - case "bind.addr.port": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Bind.Addr.Port"} - } - e.Bind.Addr.Port = uint16(v) - return nil - case "bind.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Bind.SyscallEvent.Retval"} - } - e.Bind.SyscallEvent.Retval = int64(v) - return nil - case "bpf.cmd": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "BPF.Cmd"} - } - e.BPF.Cmd = uint32(v) - return nil - case "bpf.map.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "BPF.Map.Name"} - } - e.BPF.Map.Name = str - return nil - case "bpf.map.type": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "BPF.Map.Type"} - } - e.BPF.Map.Type = uint32(v) - return nil - case "bpf.prog.attach_type": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "BPF.Program.AttachType"} - } - e.BPF.Program.AttachType = uint32(v) - return nil - case "bpf.prog.helpers": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "BPF.Program.Helpers"} - } - e.BPF.Program.Helpers = append(e.BPF.Program.Helpers, uint32(v)) - return nil - case "bpf.prog.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "BPF.Program.Name"} - } - e.BPF.Program.Name = str - return nil - case "bpf.prog.tag": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "BPF.Program.Tag"} - } - e.BPF.Program.Tag = str - return nil - case "bpf.prog.type": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "BPF.Program.Type"} - } - e.BPF.Program.Type = uint32(v) - return nil - case "bpf.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "BPF.SyscallEvent.Retval"} - } - e.BPF.SyscallEvent.Retval = int64(v) - return nil - case "capset.cap_effective": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Capset.CapEffective"} - } - e.Capset.CapEffective = uint64(v) - return nil - case "capset.cap_permitted": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Capset.CapPermitted"} - } - e.Capset.CapPermitted = uint64(v) - return nil - case "chmod.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.CTime"} - } - e.Chmod.File.FileFields.CTime = uint64(v) - return nil - case "chmod.file.destination.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.Mode"} - } - e.Chmod.Mode = uint32(v) - return nil - case "chmod.file.destination.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.Mode"} - } - e.Chmod.Mode = uint32(v) - return nil - case "chmod.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.Filesystem"} - } - e.Chmod.File.Filesystem = str - return nil - case "chmod.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.GID"} - } - e.Chmod.File.FileFields.GID = uint32(v) - return nil - case "chmod.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.Group"} - } - e.Chmod.File.FileFields.Group = str - return nil - case "chmod.file.in_upper_layer": - var ok bool - if e.Chmod.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.InUpperLayer"} - } - return nil - case "chmod.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.Inode"} - } - e.Chmod.File.FileFields.Inode = uint64(v) - return nil - case "chmod.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.Mode"} - } - e.Chmod.File.FileFields.Mode = uint16(v) - return nil - case "chmod.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.MTime"} - } - e.Chmod.File.FileFields.MTime = uint64(v) - return nil - case "chmod.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.MountID"} - } - e.Chmod.File.FileFields.MountID = uint32(v) - return nil - case "chmod.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.BasenameStr"} - } - e.Chmod.File.BasenameStr = str - return nil - case "chmod.file.name.length": - return &eval.ErrFieldReadOnly{Field: "chmod.file.name.length"} - case "chmod.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.PathnameStr"} - } - e.Chmod.File.PathnameStr = str - return nil - case "chmod.file.path.length": - return &eval.ErrFieldReadOnly{Field: "chmod.file.path.length"} - case "chmod.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.Mode"} - } - e.Chmod.File.FileFields.Mode = uint16(v) - return nil - case "chmod.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.UID"} - } - e.Chmod.File.FileFields.UID = uint32(v) - return nil - case "chmod.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.User"} - } - e.Chmod.File.FileFields.User = str - return nil - case "chmod.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.SyscallEvent.Retval"} - } - e.Chmod.SyscallEvent.Retval = int64(v) - return nil - case "chown.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.CTime"} - } - e.Chown.File.FileFields.CTime = uint64(v) - return nil - case "chown.file.destination.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.GID"} - } - e.Chown.GID = int64(v) - return nil - case "chown.file.destination.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.Group"} - } - e.Chown.Group = str - return nil - case "chown.file.destination.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.UID"} - } - e.Chown.UID = int64(v) - return nil - case "chown.file.destination.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.User"} - } - e.Chown.User = str - return nil - case "chown.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.Filesystem"} - } - e.Chown.File.Filesystem = str - return nil - case "chown.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.GID"} - } - e.Chown.File.FileFields.GID = uint32(v) - return nil - case "chown.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.Group"} - } - e.Chown.File.FileFields.Group = str - return nil - case "chown.file.in_upper_layer": - var ok bool - if e.Chown.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.InUpperLayer"} - } - return nil - case "chown.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.Inode"} - } - e.Chown.File.FileFields.Inode = uint64(v) - return nil - case "chown.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.Mode"} - } - e.Chown.File.FileFields.Mode = uint16(v) - return nil - case "chown.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.MTime"} - } - e.Chown.File.FileFields.MTime = uint64(v) - return nil - case "chown.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.MountID"} - } - e.Chown.File.FileFields.MountID = uint32(v) - return nil - case "chown.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.BasenameStr"} - } - e.Chown.File.BasenameStr = str - return nil - case "chown.file.name.length": - return &eval.ErrFieldReadOnly{Field: "chown.file.name.length"} - case "chown.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.PathnameStr"} - } - e.Chown.File.PathnameStr = str - return nil - case "chown.file.path.length": - return &eval.ErrFieldReadOnly{Field: "chown.file.path.length"} - case "chown.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.Mode"} - } - e.Chown.File.FileFields.Mode = uint16(v) - return nil - case "chown.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.UID"} - } - e.Chown.File.FileFields.UID = uint32(v) - return nil - case "chown.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.User"} - } - e.Chown.File.FileFields.User = str - return nil - case "chown.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.SyscallEvent.Retval"} - } - e.Chown.SyscallEvent.Retval = int64(v) - return nil - case "container.id": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ContainerContext.ID"} - } - e.ContainerContext.ID = str - return nil - case "container.tags": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ContainerContext.Tags"} - } - e.ContainerContext.Tags = append(e.ContainerContext.Tags, str) - return nil - case "dns.id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "DNS.ID"} - } - e.DNS.ID = uint16(v) - return nil - case "dns.question.class": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "DNS.Class"} - } - e.DNS.Class = uint16(v) - return nil - case "dns.question.count": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "DNS.Count"} - } - e.DNS.Count = uint16(v) - return nil - case "dns.question.length": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "DNS.Size"} - } - e.DNS.Size = uint16(v) - return nil - case "dns.question.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "DNS.Name"} - } - e.DNS.Name = str - return nil - case "dns.question.name.length": - return &eval.ErrFieldReadOnly{Field: "dns.question.name.length"} - case "dns.question.type": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "DNS.Type"} - } - e.DNS.Type = uint16(v) - return nil - case "exec.args": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Args"} - } - e.Exec.Process.Args = str - return nil - case "exec.args_flags": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Argv"} - } - e.Exec.Process.Argv = append(e.Exec.Process.Argv, str) - return nil - case "exec.args_options": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Argv"} - } - e.Exec.Process.Argv = append(e.Exec.Process.Argv, str) - return nil - case "exec.args_truncated": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - var ok bool - if e.Exec.Process.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.ArgsTruncated"} - } - return nil - case "exec.argv": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Argv"} - } - e.Exec.Process.Argv = append(e.Exec.Process.Argv, str) - return nil - case "exec.argv0": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Argv0"} - } - e.Exec.Process.Argv0 = str - return nil - case "exec.cap_effective": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.CapEffective"} - } - e.Exec.Process.Credentials.CapEffective = uint64(v) - return nil - case "exec.cap_permitted": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.CapPermitted"} - } - e.Exec.Process.Credentials.CapPermitted = uint64(v) - return nil - case "exec.comm": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Comm"} - } - e.Exec.Process.Comm = str - return nil - case "exec.container.id": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.ContainerID"} - } - e.Exec.Process.ContainerID = str - return nil - case "exec.cookie": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Cookie"} - } - e.Exec.Process.Cookie = uint32(v) - return nil - case "exec.created_at": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.CreatedAt"} - } - e.Exec.Process.CreatedAt = uint64(v) - return nil - case "exec.egid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.EGID"} - } - e.Exec.Process.Credentials.EGID = uint32(v) - return nil - case "exec.egroup": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.EGroup"} - } - e.Exec.Process.Credentials.EGroup = str - return nil - case "exec.envp": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Envp"} - } - e.Exec.Process.Envp = append(e.Exec.Process.Envp, str) - return nil - case "exec.envs": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Envs"} - } - e.Exec.Process.Envs = append(e.Exec.Process.Envs, str) - return nil - case "exec.envs_truncated": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - var ok bool - if e.Exec.Process.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.EnvsTruncated"} - } - return nil - case "exec.euid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.EUID"} - } - e.Exec.Process.Credentials.EUID = uint32(v) - return nil - case "exec.euser": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.EUser"} - } - e.Exec.Process.Credentials.EUser = str - return nil - case "exec.file.change_time": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.CTime"} - } - e.Exec.Process.FileEvent.FileFields.CTime = uint64(v) - return nil - case "exec.file.filesystem": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.Filesystem"} - } - e.Exec.Process.FileEvent.Filesystem = str - return nil - case "exec.file.gid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.GID"} - } - e.Exec.Process.FileEvent.FileFields.GID = uint32(v) - return nil - case "exec.file.group": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.Group"} - } - e.Exec.Process.FileEvent.FileFields.Group = str - return nil - case "exec.file.in_upper_layer": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - var ok bool - if e.Exec.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "exec.file.inode": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.Inode"} - } - e.Exec.Process.FileEvent.FileFields.Inode = uint64(v) - return nil - case "exec.file.mode": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.Mode"} - } - e.Exec.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "exec.file.modification_time": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.MTime"} - } - e.Exec.Process.FileEvent.FileFields.MTime = uint64(v) - return nil - case "exec.file.mount_id": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.MountID"} - } - e.Exec.Process.FileEvent.FileFields.MountID = uint32(v) - return nil - case "exec.file.name": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.BasenameStr"} - } - e.Exec.Process.FileEvent.BasenameStr = str - return nil - case "exec.file.name.length": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "exec.file.name.length"} - case "exec.file.path": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.PathnameStr"} - } - e.Exec.Process.FileEvent.PathnameStr = str - return nil - case "exec.file.path.length": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "exec.file.path.length"} - case "exec.file.rights": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.Mode"} - } - e.Exec.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "exec.file.uid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.UID"} - } - e.Exec.Process.FileEvent.FileFields.UID = uint32(v) - return nil - case "exec.file.user": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.User"} - } - e.Exec.Process.FileEvent.FileFields.User = str - return nil - case "exec.fsgid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.FSGID"} - } - e.Exec.Process.Credentials.FSGID = uint32(v) - return nil - case "exec.fsgroup": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.FSGroup"} - } - e.Exec.Process.Credentials.FSGroup = str - return nil - case "exec.fsuid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.FSUID"} - } - e.Exec.Process.Credentials.FSUID = uint32(v) - return nil - case "exec.fsuser": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.FSUser"} - } - e.Exec.Process.Credentials.FSUser = str - return nil - case "exec.gid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.GID"} - } - e.Exec.Process.Credentials.GID = uint32(v) - return nil - case "exec.group": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.Group"} - } - e.Exec.Process.Credentials.Group = str - return nil - case "exec.interpreter.file.change_time": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "exec.interpreter.file.filesystem": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.Filesystem"} - } - e.Exec.Process.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "exec.interpreter.file.gid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "exec.interpreter.file.group": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "exec.interpreter.file.in_upper_layer": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - var ok bool - if e.Exec.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "exec.interpreter.file.inode": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "exec.interpreter.file.mode": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "exec.interpreter.file.modification_time": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "exec.interpreter.file.mount_id": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "exec.interpreter.file.name": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.BasenameStr"} - } - e.Exec.Process.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "exec.interpreter.file.name.length": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "exec.interpreter.file.name.length"} - case "exec.interpreter.file.path": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.PathnameStr"} - } - e.Exec.Process.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "exec.interpreter.file.path.length": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "exec.interpreter.file.path.length"} - case "exec.interpreter.file.rights": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "exec.interpreter.file.uid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "exec.interpreter.file.user": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.User"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "exec.is_kworker": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - var ok bool - if e.Exec.Process.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.PIDContext.IsKworker"} - } - return nil - case "exec.is_thread": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - var ok bool - if e.Exec.Process.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.IsThread"} - } - return nil - case "exec.pid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.PIDContext.Pid"} - } - e.Exec.Process.PIDContext.Pid = uint32(v) - return nil - case "exec.ppid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.PPid"} - } - e.Exec.Process.PPid = uint32(v) - return nil - case "exec.tid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.PIDContext.Tid"} - } - e.Exec.Process.PIDContext.Tid = uint32(v) - return nil - case "exec.tty_name": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.TTYName"} - } - e.Exec.Process.TTYName = str - return nil - case "exec.uid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.UID"} - } - e.Exec.Process.Credentials.UID = uint32(v) - return nil - case "exec.user": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.User"} - } - e.Exec.Process.Credentials.User = str - return nil - case "exit.args": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Args"} - } - e.Exit.Process.Args = str - return nil - case "exit.args_flags": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Argv"} - } - e.Exit.Process.Argv = append(e.Exit.Process.Argv, str) - return nil - case "exit.args_options": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Argv"} - } - e.Exit.Process.Argv = append(e.Exit.Process.Argv, str) - return nil - case "exit.args_truncated": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - var ok bool - if e.Exit.Process.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.ArgsTruncated"} - } - return nil - case "exit.argv": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Argv"} - } - e.Exit.Process.Argv = append(e.Exit.Process.Argv, str) - return nil - case "exit.argv0": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Argv0"} - } - e.Exit.Process.Argv0 = str - return nil - case "exit.cap_effective": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.CapEffective"} - } - e.Exit.Process.Credentials.CapEffective = uint64(v) - return nil - case "exit.cap_permitted": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.CapPermitted"} - } - e.Exit.Process.Credentials.CapPermitted = uint64(v) - return nil - case "exit.cause": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Cause"} - } - e.Exit.Cause = uint32(v) - return nil - case "exit.code": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Code"} - } - e.Exit.Code = uint32(v) - return nil - case "exit.comm": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Comm"} - } - e.Exit.Process.Comm = str - return nil - case "exit.container.id": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.ContainerID"} - } - e.Exit.Process.ContainerID = str - return nil - case "exit.cookie": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Cookie"} - } - e.Exit.Process.Cookie = uint32(v) - return nil - case "exit.created_at": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.CreatedAt"} - } - e.Exit.Process.CreatedAt = uint64(v) - return nil - case "exit.egid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.EGID"} - } - e.Exit.Process.Credentials.EGID = uint32(v) - return nil - case "exit.egroup": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.EGroup"} - } - e.Exit.Process.Credentials.EGroup = str - return nil - case "exit.envp": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Envp"} - } - e.Exit.Process.Envp = append(e.Exit.Process.Envp, str) - return nil - case "exit.envs": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Envs"} - } - e.Exit.Process.Envs = append(e.Exit.Process.Envs, str) - return nil - case "exit.envs_truncated": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - var ok bool - if e.Exit.Process.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.EnvsTruncated"} - } - return nil - case "exit.euid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.EUID"} - } - e.Exit.Process.Credentials.EUID = uint32(v) - return nil - case "exit.euser": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.EUser"} - } - e.Exit.Process.Credentials.EUser = str - return nil - case "exit.file.change_time": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.CTime"} - } - e.Exit.Process.FileEvent.FileFields.CTime = uint64(v) - return nil - case "exit.file.filesystem": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.Filesystem"} - } - e.Exit.Process.FileEvent.Filesystem = str - return nil - case "exit.file.gid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.GID"} - } - e.Exit.Process.FileEvent.FileFields.GID = uint32(v) - return nil - case "exit.file.group": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.Group"} - } - e.Exit.Process.FileEvent.FileFields.Group = str - return nil - case "exit.file.in_upper_layer": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - var ok bool - if e.Exit.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "exit.file.inode": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.Inode"} - } - e.Exit.Process.FileEvent.FileFields.Inode = uint64(v) - return nil - case "exit.file.mode": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.Mode"} - } - e.Exit.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "exit.file.modification_time": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.MTime"} - } - e.Exit.Process.FileEvent.FileFields.MTime = uint64(v) - return nil - case "exit.file.mount_id": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.MountID"} - } - e.Exit.Process.FileEvent.FileFields.MountID = uint32(v) - return nil - case "exit.file.name": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.BasenameStr"} - } - e.Exit.Process.FileEvent.BasenameStr = str - return nil - case "exit.file.name.length": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "exit.file.name.length"} - case "exit.file.path": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.PathnameStr"} - } - e.Exit.Process.FileEvent.PathnameStr = str - return nil - case "exit.file.path.length": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "exit.file.path.length"} - case "exit.file.rights": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.Mode"} - } - e.Exit.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "exit.file.uid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.UID"} - } - e.Exit.Process.FileEvent.FileFields.UID = uint32(v) - return nil - case "exit.file.user": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.User"} - } - e.Exit.Process.FileEvent.FileFields.User = str - return nil - case "exit.fsgid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.FSGID"} - } - e.Exit.Process.Credentials.FSGID = uint32(v) - return nil - case "exit.fsgroup": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.FSGroup"} - } - e.Exit.Process.Credentials.FSGroup = str - return nil - case "exit.fsuid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.FSUID"} - } - e.Exit.Process.Credentials.FSUID = uint32(v) - return nil - case "exit.fsuser": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.FSUser"} - } - e.Exit.Process.Credentials.FSUser = str - return nil - case "exit.gid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.GID"} - } - e.Exit.Process.Credentials.GID = uint32(v) - return nil - case "exit.group": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.Group"} - } - e.Exit.Process.Credentials.Group = str - return nil - case "exit.interpreter.file.change_time": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "exit.interpreter.file.filesystem": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.Filesystem"} - } - e.Exit.Process.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "exit.interpreter.file.gid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "exit.interpreter.file.group": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "exit.interpreter.file.in_upper_layer": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - var ok bool - if e.Exit.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "exit.interpreter.file.inode": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "exit.interpreter.file.mode": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "exit.interpreter.file.modification_time": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "exit.interpreter.file.mount_id": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "exit.interpreter.file.name": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.BasenameStr"} - } - e.Exit.Process.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "exit.interpreter.file.name.length": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "exit.interpreter.file.name.length"} - case "exit.interpreter.file.path": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.PathnameStr"} - } - e.Exit.Process.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "exit.interpreter.file.path.length": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "exit.interpreter.file.path.length"} - case "exit.interpreter.file.rights": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "exit.interpreter.file.uid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "exit.interpreter.file.user": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.User"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "exit.is_kworker": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - var ok bool - if e.Exit.Process.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.PIDContext.IsKworker"} - } - return nil - case "exit.is_thread": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - var ok bool - if e.Exit.Process.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.IsThread"} - } - return nil - case "exit.pid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.PIDContext.Pid"} - } - e.Exit.Process.PIDContext.Pid = uint32(v) - return nil - case "exit.ppid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.PPid"} - } - e.Exit.Process.PPid = uint32(v) - return nil - case "exit.tid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.PIDContext.Tid"} - } - e.Exit.Process.PIDContext.Tid = uint32(v) - return nil - case "exit.tty_name": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.TTYName"} - } - e.Exit.Process.TTYName = str - return nil - case "exit.uid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.UID"} - } - e.Exit.Process.Credentials.UID = uint32(v) - return nil - case "exit.user": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.User"} - } - e.Exit.Process.Credentials.User = str - return nil - case "link.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.CTime"} - } - e.Link.Source.FileFields.CTime = uint64(v) - return nil - case "link.file.destination.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.CTime"} - } - e.Link.Target.FileFields.CTime = uint64(v) - return nil - case "link.file.destination.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.Filesystem"} - } - e.Link.Target.Filesystem = str - return nil - case "link.file.destination.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.GID"} - } - e.Link.Target.FileFields.GID = uint32(v) - return nil - case "link.file.destination.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.Group"} - } - e.Link.Target.FileFields.Group = str - return nil - case "link.file.destination.in_upper_layer": - var ok bool - if e.Link.Target.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.InUpperLayer"} - } - return nil - case "link.file.destination.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.Inode"} - } - e.Link.Target.FileFields.Inode = uint64(v) - return nil - case "link.file.destination.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.Mode"} - } - e.Link.Target.FileFields.Mode = uint16(v) - return nil - case "link.file.destination.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.MTime"} - } - e.Link.Target.FileFields.MTime = uint64(v) - return nil - case "link.file.destination.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.MountID"} - } - e.Link.Target.FileFields.MountID = uint32(v) - return nil - case "link.file.destination.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.BasenameStr"} - } - e.Link.Target.BasenameStr = str - return nil - case "link.file.destination.name.length": - return &eval.ErrFieldReadOnly{Field: "link.file.destination.name.length"} - case "link.file.destination.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.PathnameStr"} - } - e.Link.Target.PathnameStr = str - return nil - case "link.file.destination.path.length": - return &eval.ErrFieldReadOnly{Field: "link.file.destination.path.length"} - case "link.file.destination.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.Mode"} - } - e.Link.Target.FileFields.Mode = uint16(v) - return nil - case "link.file.destination.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.UID"} - } - e.Link.Target.FileFields.UID = uint32(v) - return nil - case "link.file.destination.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.User"} - } - e.Link.Target.FileFields.User = str - return nil - case "link.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.Filesystem"} - } - e.Link.Source.Filesystem = str - return nil - case "link.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.GID"} - } - e.Link.Source.FileFields.GID = uint32(v) - return nil - case "link.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.Group"} - } - e.Link.Source.FileFields.Group = str - return nil - case "link.file.in_upper_layer": - var ok bool - if e.Link.Source.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.InUpperLayer"} - } - return nil - case "link.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.Inode"} - } - e.Link.Source.FileFields.Inode = uint64(v) - return nil - case "link.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.Mode"} - } - e.Link.Source.FileFields.Mode = uint16(v) - return nil - case "link.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.MTime"} - } - e.Link.Source.FileFields.MTime = uint64(v) - return nil - case "link.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.MountID"} - } - e.Link.Source.FileFields.MountID = uint32(v) - return nil - case "link.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.BasenameStr"} - } - e.Link.Source.BasenameStr = str - return nil - case "link.file.name.length": - return &eval.ErrFieldReadOnly{Field: "link.file.name.length"} - case "link.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.PathnameStr"} - } - e.Link.Source.PathnameStr = str - return nil - case "link.file.path.length": - return &eval.ErrFieldReadOnly{Field: "link.file.path.length"} - case "link.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.Mode"} - } - e.Link.Source.FileFields.Mode = uint16(v) - return nil - case "link.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.UID"} - } - e.Link.Source.FileFields.UID = uint32(v) - return nil - case "link.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.User"} - } - e.Link.Source.FileFields.User = str - return nil - case "link.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.SyscallEvent.Retval"} - } - e.Link.SyscallEvent.Retval = int64(v) - return nil - case "load_module.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.CTime"} - } - e.LoadModule.File.FileFields.CTime = uint64(v) - return nil - case "load_module.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.Filesystem"} - } - e.LoadModule.File.Filesystem = str - return nil - case "load_module.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.GID"} - } - e.LoadModule.File.FileFields.GID = uint32(v) - return nil - case "load_module.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.Group"} - } - e.LoadModule.File.FileFields.Group = str - return nil - case "load_module.file.in_upper_layer": - var ok bool - if e.LoadModule.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.InUpperLayer"} - } - return nil - case "load_module.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.Inode"} - } - e.LoadModule.File.FileFields.Inode = uint64(v) - return nil - case "load_module.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.Mode"} - } - e.LoadModule.File.FileFields.Mode = uint16(v) - return nil - case "load_module.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.MTime"} - } - e.LoadModule.File.FileFields.MTime = uint64(v) - return nil - case "load_module.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.MountID"} - } - e.LoadModule.File.FileFields.MountID = uint32(v) - return nil - case "load_module.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.BasenameStr"} - } - e.LoadModule.File.BasenameStr = str - return nil - case "load_module.file.name.length": - return &eval.ErrFieldReadOnly{Field: "load_module.file.name.length"} - case "load_module.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.PathnameStr"} - } - e.LoadModule.File.PathnameStr = str - return nil - case "load_module.file.path.length": - return &eval.ErrFieldReadOnly{Field: "load_module.file.path.length"} - case "load_module.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.Mode"} - } - e.LoadModule.File.FileFields.Mode = uint16(v) - return nil - case "load_module.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.UID"} - } - e.LoadModule.File.FileFields.UID = uint32(v) - return nil - case "load_module.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.User"} - } - e.LoadModule.File.FileFields.User = str - return nil - case "load_module.loaded_from_memory": - var ok bool - if e.LoadModule.LoadedFromMemory, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.LoadedFromMemory"} - } - return nil - case "load_module.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.Name"} - } - e.LoadModule.Name = str - return nil - case "load_module.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.SyscallEvent.Retval"} - } - e.LoadModule.SyscallEvent.Retval = int64(v) - return nil - case "mkdir.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.CTime"} - } - e.Mkdir.File.FileFields.CTime = uint64(v) - return nil - case "mkdir.file.destination.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.Mode"} - } - e.Mkdir.Mode = uint32(v) - return nil - case "mkdir.file.destination.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.Mode"} - } - e.Mkdir.Mode = uint32(v) - return nil - case "mkdir.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.Filesystem"} - } - e.Mkdir.File.Filesystem = str - return nil - case "mkdir.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.GID"} - } - e.Mkdir.File.FileFields.GID = uint32(v) - return nil - case "mkdir.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.Group"} - } - e.Mkdir.File.FileFields.Group = str - return nil - case "mkdir.file.in_upper_layer": - var ok bool - if e.Mkdir.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.InUpperLayer"} - } - return nil - case "mkdir.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.Inode"} - } - e.Mkdir.File.FileFields.Inode = uint64(v) - return nil - case "mkdir.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.Mode"} - } - e.Mkdir.File.FileFields.Mode = uint16(v) - return nil - case "mkdir.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.MTime"} - } - e.Mkdir.File.FileFields.MTime = uint64(v) - return nil - case "mkdir.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.MountID"} - } - e.Mkdir.File.FileFields.MountID = uint32(v) - return nil - case "mkdir.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.BasenameStr"} - } - e.Mkdir.File.BasenameStr = str - return nil - case "mkdir.file.name.length": - return &eval.ErrFieldReadOnly{Field: "mkdir.file.name.length"} - case "mkdir.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.PathnameStr"} - } - e.Mkdir.File.PathnameStr = str - return nil - case "mkdir.file.path.length": - return &eval.ErrFieldReadOnly{Field: "mkdir.file.path.length"} - case "mkdir.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.Mode"} - } - e.Mkdir.File.FileFields.Mode = uint16(v) - return nil - case "mkdir.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.UID"} - } - e.Mkdir.File.FileFields.UID = uint32(v) - return nil - case "mkdir.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.User"} - } - e.Mkdir.File.FileFields.User = str - return nil - case "mkdir.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.SyscallEvent.Retval"} - } - e.Mkdir.SyscallEvent.Retval = int64(v) - return nil - case "mmap.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.CTime"} - } - e.MMap.File.FileFields.CTime = uint64(v) - return nil - case "mmap.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.Filesystem"} - } - e.MMap.File.Filesystem = str - return nil - case "mmap.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.GID"} - } - e.MMap.File.FileFields.GID = uint32(v) - return nil - case "mmap.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.Group"} - } - e.MMap.File.FileFields.Group = str - return nil - case "mmap.file.in_upper_layer": - var ok bool - if e.MMap.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.InUpperLayer"} - } - return nil - case "mmap.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.Inode"} - } - e.MMap.File.FileFields.Inode = uint64(v) - return nil - case "mmap.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.Mode"} - } - e.MMap.File.FileFields.Mode = uint16(v) - return nil - case "mmap.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.MTime"} - } - e.MMap.File.FileFields.MTime = uint64(v) - return nil - case "mmap.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.MountID"} - } - e.MMap.File.FileFields.MountID = uint32(v) - return nil - case "mmap.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.BasenameStr"} - } - e.MMap.File.BasenameStr = str - return nil - case "mmap.file.name.length": - return &eval.ErrFieldReadOnly{Field: "mmap.file.name.length"} - case "mmap.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.PathnameStr"} - } - e.MMap.File.PathnameStr = str - return nil - case "mmap.file.path.length": - return &eval.ErrFieldReadOnly{Field: "mmap.file.path.length"} - case "mmap.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.Mode"} - } - e.MMap.File.FileFields.Mode = uint16(v) - return nil - case "mmap.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.UID"} - } - e.MMap.File.FileFields.UID = uint32(v) - return nil - case "mmap.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.User"} - } - e.MMap.File.FileFields.User = str - return nil - case "mmap.flags": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.Flags"} - } - e.MMap.Flags = int(v) - return nil - case "mmap.protection": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.Protection"} - } - e.MMap.Protection = int(v) - return nil - case "mmap.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.SyscallEvent.Retval"} - } - e.MMap.SyscallEvent.Retval = int64(v) - return nil - case "mount.fs_type": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mount.Mount.FSType"} - } - e.Mount.Mount.FSType = str - return nil - case "mount.mountpoint.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mount.MountPointPath"} - } - e.Mount.MountPointPath = str - return nil - case "mount.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mount.SyscallEvent.Retval"} - } - e.Mount.SyscallEvent.Retval = int64(v) - return nil - case "mount.source.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mount.MountSourcePath"} - } - e.Mount.MountSourcePath = str - return nil - case "mprotect.req_protection": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MProtect.ReqProtection"} - } - e.MProtect.ReqProtection = int(v) - return nil - case "mprotect.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MProtect.SyscallEvent.Retval"} - } - e.MProtect.SyscallEvent.Retval = int64(v) - return nil - case "mprotect.vm_protection": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MProtect.VMProtection"} - } - e.MProtect.VMProtection = int(v) - return nil - case "network.destination.ip": - v, ok := value.(net.IPNet) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Destination.IPNet"} - } - e.NetworkContext.Destination.IPNet = v - return nil - case "network.destination.port": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Destination.Port"} - } - e.NetworkContext.Destination.Port = uint16(v) - return nil - case "network.device.ifindex": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Device.IfIndex"} - } - e.NetworkContext.Device.IfIndex = uint32(v) - return nil - case "network.device.ifname": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Device.IfName"} - } - e.NetworkContext.Device.IfName = str - return nil - case "network.l3_protocol": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "NetworkContext.L3Protocol"} - } - e.NetworkContext.L3Protocol = uint16(v) - return nil - case "network.l4_protocol": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "NetworkContext.L4Protocol"} - } - e.NetworkContext.L4Protocol = uint16(v) - return nil - case "network.size": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Size"} - } - e.NetworkContext.Size = uint32(v) - return nil - case "network.source.ip": - v, ok := value.(net.IPNet) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Source.IPNet"} - } - e.NetworkContext.Source.IPNet = v - return nil - case "network.source.port": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Source.Port"} - } - e.NetworkContext.Source.Port = uint16(v) - return nil - case "open.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.CTime"} - } - e.Open.File.FileFields.CTime = uint64(v) - return nil - case "open.file.destination.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.Mode"} - } - e.Open.Mode = uint32(v) - return nil - case "open.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.Filesystem"} - } - e.Open.File.Filesystem = str - return nil - case "open.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.GID"} - } - e.Open.File.FileFields.GID = uint32(v) - return nil - case "open.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.Group"} - } - e.Open.File.FileFields.Group = str - return nil - case "open.file.in_upper_layer": - var ok bool - if e.Open.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.InUpperLayer"} - } - return nil - case "open.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.Inode"} - } - e.Open.File.FileFields.Inode = uint64(v) - return nil - case "open.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.Mode"} - } - e.Open.File.FileFields.Mode = uint16(v) - return nil - case "open.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.MTime"} - } - e.Open.File.FileFields.MTime = uint64(v) - return nil - case "open.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.MountID"} - } - e.Open.File.FileFields.MountID = uint32(v) - return nil - case "open.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.BasenameStr"} - } - e.Open.File.BasenameStr = str - return nil - case "open.file.name.length": - return &eval.ErrFieldReadOnly{Field: "open.file.name.length"} - case "open.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.PathnameStr"} - } - e.Open.File.PathnameStr = str - return nil - case "open.file.path.length": - return &eval.ErrFieldReadOnly{Field: "open.file.path.length"} - case "open.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.Mode"} - } - e.Open.File.FileFields.Mode = uint16(v) - return nil - case "open.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.UID"} - } - e.Open.File.FileFields.UID = uint32(v) - return nil - case "open.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.User"} - } - e.Open.File.FileFields.User = str - return nil - case "open.flags": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.Flags"} - } - e.Open.Flags = uint32(v) - return nil - case "open.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.SyscallEvent.Retval"} - } - e.Open.SyscallEvent.Retval = int64(v) - return nil - case "process.ancestors.args": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Args"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Args = str - return nil - case "process.ancestors.args_flags": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Argv"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(e.ProcessContext.Ancestor.ProcessContext.Process.Argv, str) - return nil - case "process.ancestors.args_options": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Argv"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(e.ProcessContext.Ancestor.ProcessContext.Process.Argv, str) - return nil - case "process.ancestors.args_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.ArgsTruncated"} - } - return nil - case "process.ancestors.argv": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Argv"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(e.ProcessContext.Ancestor.ProcessContext.Process.Argv, str) - return nil - case "process.ancestors.argv0": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Argv0"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Argv0 = str - return nil - case "process.ancestors.cap_effective": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapEffective"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapEffective = uint64(v) - return nil - case "process.ancestors.cap_permitted": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapPermitted"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapPermitted = uint64(v) - return nil - case "process.ancestors.comm": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Comm"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Comm = str - return nil - case "process.ancestors.container.id": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.ContainerID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.ContainerID = str - return nil - case "process.ancestors.cookie": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Cookie"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Cookie = uint32(v) - return nil - case "process.ancestors.created_at": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.CreatedAt"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.CreatedAt = uint64(v) - return nil - case "process.ancestors.egid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGID = uint32(v) - return nil - case "process.ancestors.egroup": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGroup"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGroup = str - return nil - case "process.ancestors.envp": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Envp"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Envp = append(e.ProcessContext.Ancestor.ProcessContext.Process.Envp, str) - return nil - case "process.ancestors.envs": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Envs"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Envs = append(e.ProcessContext.Ancestor.ProcessContext.Process.Envs, str) - return nil - case "process.ancestors.envs_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.EnvsTruncated"} - } - return nil - case "process.ancestors.euid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUID = uint32(v) - return nil - case "process.ancestors.euser": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUser"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUser = str - return nil - case "process.ancestors.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) - return nil - case "process.ancestors.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.Filesystem"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.Filesystem = str - return nil - case "process.ancestors.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) - return nil - case "process.ancestors.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group = str - return nil - case "process.ancestors.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "process.ancestors.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) - return nil - case "process.ancestors.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.ancestors.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) - return nil - case "process.ancestors.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) - return nil - case "process.ancestors.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.BasenameStr"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.BasenameStr = str - return nil - case "process.ancestors.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "process.ancestors.file.name.length"} - case "process.ancestors.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.PathnameStr"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.PathnameStr = str - return nil - case "process.ancestors.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "process.ancestors.file.path.length"} - case "process.ancestors.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.ancestors.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) - return nil - case "process.ancestors.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.User"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.User = str - return nil - case "process.ancestors.fsgid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGID = uint32(v) - return nil - case "process.ancestors.fsgroup": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGroup"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGroup = str - return nil - case "process.ancestors.fsuid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUID = uint32(v) - return nil - case "process.ancestors.fsuser": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUser"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUser = str - return nil - case "process.ancestors.gid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.GID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.GID = uint32(v) - return nil - case "process.ancestors.group": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.Group"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.Group = str - return nil - case "process.ancestors.interpreter.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "process.ancestors.interpreter.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "process.ancestors.interpreter.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "process.ancestors.interpreter.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "process.ancestors.interpreter.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "process.ancestors.interpreter.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "process.ancestors.interpreter.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.ancestors.interpreter.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "process.ancestors.interpreter.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "process.ancestors.interpreter.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "process.ancestors.interpreter.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "process.ancestors.interpreter.file.name.length"} - case "process.ancestors.interpreter.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "process.ancestors.interpreter.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "process.ancestors.interpreter.file.path.length"} - case "process.ancestors.interpreter.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.ancestors.interpreter.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "process.ancestors.interpreter.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "process.ancestors.is_kworker": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.PIDContext.IsKworker"} - } - return nil - case "process.ancestors.is_thread": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.IsThread"} - } - return nil - case "process.ancestors.pid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Pid"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Pid = uint32(v) - return nil - case "process.ancestors.ppid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.PPid"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.PPid = uint32(v) - return nil - case "process.ancestors.tid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Tid"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Tid = uint32(v) - return nil - case "process.ancestors.tty_name": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.TTYName"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.TTYName = str - return nil - case "process.ancestors.uid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.UID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.UID = uint32(v) - return nil - case "process.ancestors.user": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.User"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.User = str - return nil - case "process.args": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Args"} - } - e.ProcessContext.Process.Args = str - return nil - case "process.args_flags": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Argv"} - } - e.ProcessContext.Process.Argv = append(e.ProcessContext.Process.Argv, str) - return nil - case "process.args_options": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Argv"} - } - e.ProcessContext.Process.Argv = append(e.ProcessContext.Process.Argv, str) - return nil - case "process.args_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - var ok bool - if e.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.ArgsTruncated"} - } - return nil - case "process.argv": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Argv"} - } - e.ProcessContext.Process.Argv = append(e.ProcessContext.Process.Argv, str) - return nil - case "process.argv0": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Argv0"} - } - e.ProcessContext.Process.Argv0 = str - return nil - case "process.cap_effective": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.CapEffective"} - } - e.ProcessContext.Process.Credentials.CapEffective = uint64(v) - return nil - case "process.cap_permitted": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.CapPermitted"} - } - e.ProcessContext.Process.Credentials.CapPermitted = uint64(v) - return nil - case "process.comm": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Comm"} - } - e.ProcessContext.Process.Comm = str - return nil - case "process.container.id": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.ContainerID"} - } - e.ProcessContext.Process.ContainerID = str - return nil - case "process.cookie": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Cookie"} - } - e.ProcessContext.Process.Cookie = uint32(v) - return nil - case "process.created_at": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.CreatedAt"} - } - e.ProcessContext.Process.CreatedAt = uint64(v) - return nil - case "process.egid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.EGID"} - } - e.ProcessContext.Process.Credentials.EGID = uint32(v) - return nil - case "process.egroup": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.EGroup"} - } - e.ProcessContext.Process.Credentials.EGroup = str - return nil - case "process.envp": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Envp"} - } - e.ProcessContext.Process.Envp = append(e.ProcessContext.Process.Envp, str) - return nil - case "process.envs": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Envs"} - } - e.ProcessContext.Process.Envs = append(e.ProcessContext.Process.Envs, str) - return nil - case "process.envs_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - var ok bool - if e.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.EnvsTruncated"} - } - return nil - case "process.euid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.EUID"} - } - e.ProcessContext.Process.Credentials.EUID = uint32(v) - return nil - case "process.euser": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.EUser"} - } - e.ProcessContext.Process.Credentials.EUser = str - return nil - case "process.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.CTime"} - } - e.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) - return nil - case "process.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.Filesystem"} - } - e.ProcessContext.Process.FileEvent.Filesystem = str - return nil - case "process.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.GID"} - } - e.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) - return nil - case "process.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.Group"} - } - e.ProcessContext.Process.FileEvent.FileFields.Group = str - return nil - case "process.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - var ok bool - if e.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "process.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.Inode"} - } - e.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) - return nil - case "process.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.MTime"} - } - e.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) - return nil - case "process.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.MountID"} - } - e.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) - return nil - case "process.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.BasenameStr"} - } - e.ProcessContext.Process.FileEvent.BasenameStr = str - return nil - case "process.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "process.file.name.length"} - case "process.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.PathnameStr"} - } - e.ProcessContext.Process.FileEvent.PathnameStr = str - return nil - case "process.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "process.file.path.length"} - case "process.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.UID"} - } - e.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) - return nil - case "process.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.User"} - } - e.ProcessContext.Process.FileEvent.FileFields.User = str - return nil - case "process.fsgid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.FSGID"} - } - e.ProcessContext.Process.Credentials.FSGID = uint32(v) - return nil - case "process.fsgroup": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.FSGroup"} - } - e.ProcessContext.Process.Credentials.FSGroup = str - return nil - case "process.fsuid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.FSUID"} - } - e.ProcessContext.Process.Credentials.FSUID = uint32(v) - return nil - case "process.fsuser": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.FSUser"} - } - e.ProcessContext.Process.Credentials.FSUser = str - return nil - case "process.gid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.GID"} - } - e.ProcessContext.Process.Credentials.GID = uint32(v) - return nil - case "process.group": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.Group"} - } - e.ProcessContext.Process.Credentials.Group = str - return nil - case "process.interpreter.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "process.interpreter.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "process.interpreter.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "process.interpreter.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "process.interpreter.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - var ok bool - if e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "process.interpreter.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "process.interpreter.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.interpreter.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "process.interpreter.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "process.interpreter.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "process.interpreter.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "process.interpreter.file.name.length"} - case "process.interpreter.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "process.interpreter.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "process.interpreter.file.path.length"} - case "process.interpreter.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.interpreter.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "process.interpreter.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "process.is_kworker": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - var ok bool - if e.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.PIDContext.IsKworker"} - } - return nil - case "process.is_thread": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - var ok bool - if e.ProcessContext.Process.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.IsThread"} - } - return nil - case "process.parent.args": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Args"} - } - e.ProcessContext.Parent.Args = str - return nil - case "process.parent.args_flags": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Argv"} - } - e.ProcessContext.Parent.Argv = append(e.ProcessContext.Parent.Argv, str) - return nil - case "process.parent.args_options": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Argv"} - } - e.ProcessContext.Parent.Argv = append(e.ProcessContext.Parent.Argv, str) - return nil - case "process.parent.args_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - var ok bool - if e.ProcessContext.Parent.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.ArgsTruncated"} - } - return nil - case "process.parent.argv": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Argv"} - } - e.ProcessContext.Parent.Argv = append(e.ProcessContext.Parent.Argv, str) - return nil - case "process.parent.argv0": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Argv0"} - } - e.ProcessContext.Parent.Argv0 = str - return nil - case "process.parent.cap_effective": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.CapEffective"} - } - e.ProcessContext.Parent.Credentials.CapEffective = uint64(v) - return nil - case "process.parent.cap_permitted": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.CapPermitted"} - } - e.ProcessContext.Parent.Credentials.CapPermitted = uint64(v) - return nil - case "process.parent.comm": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Comm"} - } - e.ProcessContext.Parent.Comm = str - return nil - case "process.parent.container.id": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.ContainerID"} - } - e.ProcessContext.Parent.ContainerID = str - return nil - case "process.parent.cookie": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Cookie"} - } - e.ProcessContext.Parent.Cookie = uint32(v) - return nil - case "process.parent.created_at": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.CreatedAt"} - } - e.ProcessContext.Parent.CreatedAt = uint64(v) - return nil - case "process.parent.egid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.EGID"} - } - e.ProcessContext.Parent.Credentials.EGID = uint32(v) - return nil - case "process.parent.egroup": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.EGroup"} - } - e.ProcessContext.Parent.Credentials.EGroup = str - return nil - case "process.parent.envp": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Envp"} - } - e.ProcessContext.Parent.Envp = append(e.ProcessContext.Parent.Envp, str) - return nil - case "process.parent.envs": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Envs"} - } - e.ProcessContext.Parent.Envs = append(e.ProcessContext.Parent.Envs, str) - return nil - case "process.parent.envs_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - var ok bool - if e.ProcessContext.Parent.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.EnvsTruncated"} - } - return nil - case "process.parent.euid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.EUID"} - } - e.ProcessContext.Parent.Credentials.EUID = uint32(v) - return nil - case "process.parent.euser": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.EUser"} - } - e.ProcessContext.Parent.Credentials.EUser = str - return nil - case "process.parent.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.CTime"} - } - e.ProcessContext.Parent.FileEvent.FileFields.CTime = uint64(v) - return nil - case "process.parent.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.Filesystem"} - } - e.ProcessContext.Parent.FileEvent.Filesystem = str - return nil - case "process.parent.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.GID"} - } - e.ProcessContext.Parent.FileEvent.FileFields.GID = uint32(v) - return nil - case "process.parent.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.Group"} - } - e.ProcessContext.Parent.FileEvent.FileFields.Group = str - return nil - case "process.parent.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - var ok bool - if e.ProcessContext.Parent.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "process.parent.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.Inode"} - } - e.ProcessContext.Parent.FileEvent.FileFields.Inode = uint64(v) - return nil - case "process.parent.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Parent.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.parent.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.MTime"} - } - e.ProcessContext.Parent.FileEvent.FileFields.MTime = uint64(v) - return nil - case "process.parent.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.MountID"} - } - e.ProcessContext.Parent.FileEvent.FileFields.MountID = uint32(v) - return nil - case "process.parent.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.BasenameStr"} - } - e.ProcessContext.Parent.FileEvent.BasenameStr = str - return nil - case "process.parent.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "process.parent.file.name.length"} - case "process.parent.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.PathnameStr"} - } - e.ProcessContext.Parent.FileEvent.PathnameStr = str - return nil - case "process.parent.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "process.parent.file.path.length"} - case "process.parent.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Parent.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.parent.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.UID"} - } - e.ProcessContext.Parent.FileEvent.FileFields.UID = uint32(v) - return nil - case "process.parent.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.User"} - } - e.ProcessContext.Parent.FileEvent.FileFields.User = str - return nil - case "process.parent.fsgid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.FSGID"} - } - e.ProcessContext.Parent.Credentials.FSGID = uint32(v) - return nil - case "process.parent.fsgroup": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.FSGroup"} - } - e.ProcessContext.Parent.Credentials.FSGroup = str - return nil - case "process.parent.fsuid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.FSUID"} - } - e.ProcessContext.Parent.Credentials.FSUID = uint32(v) - return nil - case "process.parent.fsuser": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.FSUser"} - } - e.ProcessContext.Parent.Credentials.FSUser = str - return nil - case "process.parent.gid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.GID"} - } - e.ProcessContext.Parent.Credentials.GID = uint32(v) - return nil - case "process.parent.group": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.Group"} - } - e.ProcessContext.Parent.Credentials.Group = str - return nil - case "process.parent.interpreter.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "process.parent.interpreter.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.Filesystem"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "process.parent.interpreter.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "process.parent.interpreter.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "process.parent.interpreter.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - var ok bool - if e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "process.parent.interpreter.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "process.parent.interpreter.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.parent.interpreter.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "process.parent.interpreter.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "process.parent.interpreter.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.BasenameStr"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "process.parent.interpreter.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "process.parent.interpreter.file.name.length"} - case "process.parent.interpreter.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.PathnameStr"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "process.parent.interpreter.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "process.parent.interpreter.file.path.length"} - case "process.parent.interpreter.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.parent.interpreter.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "process.parent.interpreter.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.User"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "process.parent.is_kworker": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - var ok bool - if e.ProcessContext.Parent.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.PIDContext.IsKworker"} - } - return nil - case "process.parent.is_thread": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - var ok bool - if e.ProcessContext.Parent.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.IsThread"} - } - return nil - case "process.parent.pid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.PIDContext.Pid"} - } - e.ProcessContext.Parent.PIDContext.Pid = uint32(v) - return nil - case "process.parent.ppid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.PPid"} - } - e.ProcessContext.Parent.PPid = uint32(v) - return nil - case "process.parent.tid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.PIDContext.Tid"} - } - e.ProcessContext.Parent.PIDContext.Tid = uint32(v) - return nil - case "process.parent.tty_name": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.TTYName"} - } - e.ProcessContext.Parent.TTYName = str - return nil - case "process.parent.uid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.UID"} - } - e.ProcessContext.Parent.Credentials.UID = uint32(v) - return nil - case "process.parent.user": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.User"} - } - e.ProcessContext.Parent.Credentials.User = str - return nil - case "process.pid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.PIDContext.Pid"} - } - e.ProcessContext.Process.PIDContext.Pid = uint32(v) - return nil - case "process.ppid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.PPid"} - } - e.ProcessContext.Process.PPid = uint32(v) - return nil - case "process.tid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.PIDContext.Tid"} - } - e.ProcessContext.Process.PIDContext.Tid = uint32(v) - return nil - case "process.tty_name": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.TTYName"} - } - e.ProcessContext.Process.TTYName = str - return nil - case "process.uid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.UID"} - } - e.ProcessContext.Process.Credentials.UID = uint32(v) - return nil - case "process.user": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.User"} - } - e.ProcessContext.Process.Credentials.User = str - return nil - case "ptrace.request": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Request"} - } - e.PTrace.Request = uint32(v) - return nil - case "ptrace.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.SyscallEvent.Retval"} - } - e.PTrace.SyscallEvent.Retval = int64(v) - return nil - case "ptrace.tracee.ancestors.args": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Args"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Args = str - return nil - case "ptrace.tracee.ancestors.args_flags": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Argv"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, str) - return nil - case "ptrace.tracee.ancestors.args_options": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Argv"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, str) - return nil - case "ptrace.tracee.ancestors.args_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.ArgsTruncated"} - } - return nil - case "ptrace.tracee.ancestors.argv": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Argv"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, str) - return nil - case "ptrace.tracee.ancestors.argv0": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Argv0"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv0 = str - return nil - case "ptrace.tracee.ancestors.cap_effective": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapEffective"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapEffective = uint64(v) - return nil - case "ptrace.tracee.ancestors.cap_permitted": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapPermitted"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapPermitted = uint64(v) - return nil - case "ptrace.tracee.ancestors.comm": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Comm"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Comm = str - return nil - case "ptrace.tracee.ancestors.container.id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.ContainerID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.ContainerID = str - return nil - case "ptrace.tracee.ancestors.cookie": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Cookie"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Cookie = uint32(v) - return nil - case "ptrace.tracee.ancestors.created_at": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.CreatedAt"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.CreatedAt = uint64(v) - return nil - case "ptrace.tracee.ancestors.egid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGID = uint32(v) - return nil - case "ptrace.tracee.ancestors.egroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGroup"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGroup = str - return nil - case "ptrace.tracee.ancestors.envp": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Envp"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Envp = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Envp, str) - return nil - case "ptrace.tracee.ancestors.envs": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Envs"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Envs = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Envs, str) - return nil - case "ptrace.tracee.ancestors.envs_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.EnvsTruncated"} - } - return nil - case "ptrace.tracee.ancestors.euid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUID = uint32(v) - return nil - case "ptrace.tracee.ancestors.euser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUser"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUser = str - return nil - case "ptrace.tracee.ancestors.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) - return nil - case "ptrace.tracee.ancestors.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.Filesystem"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.Filesystem = str - return nil - case "ptrace.tracee.ancestors.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) - return nil - case "ptrace.tracee.ancestors.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group = str - return nil - case "ptrace.tracee.ancestors.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "ptrace.tracee.ancestors.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) - return nil - case "ptrace.tracee.ancestors.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.ancestors.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) - return nil - case "ptrace.tracee.ancestors.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) - return nil - case "ptrace.tracee.ancestors.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.BasenameStr"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.BasenameStr = str - return nil - case "ptrace.tracee.ancestors.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.ancestors.file.name.length"} - case "ptrace.tracee.ancestors.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.PathnameStr"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.PathnameStr = str - return nil - case "ptrace.tracee.ancestors.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.ancestors.file.path.length"} - case "ptrace.tracee.ancestors.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.ancestors.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) - return nil - case "ptrace.tracee.ancestors.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.User"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.User = str - return nil - case "ptrace.tracee.ancestors.fsgid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGID = uint32(v) - return nil - case "ptrace.tracee.ancestors.fsgroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGroup"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGroup = str - return nil - case "ptrace.tracee.ancestors.fsuid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUID = uint32(v) - return nil - case "ptrace.tracee.ancestors.fsuser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUser"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUser = str - return nil - case "ptrace.tracee.ancestors.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.GID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.GID = uint32(v) - return nil - case "ptrace.tracee.ancestors.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.Group"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.Group = str - return nil - case "ptrace.tracee.ancestors.interpreter.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "ptrace.tracee.ancestors.interpreter.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "ptrace.tracee.ancestors.interpreter.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "ptrace.tracee.ancestors.interpreter.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "ptrace.tracee.ancestors.interpreter.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "ptrace.tracee.ancestors.interpreter.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "ptrace.tracee.ancestors.interpreter.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.ancestors.interpreter.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "ptrace.tracee.ancestors.interpreter.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "ptrace.tracee.ancestors.interpreter.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "ptrace.tracee.ancestors.interpreter.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.ancestors.interpreter.file.name.length"} - case "ptrace.tracee.ancestors.interpreter.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "ptrace.tracee.ancestors.interpreter.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.ancestors.interpreter.file.path.length"} - case "ptrace.tracee.ancestors.interpreter.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.ancestors.interpreter.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "ptrace.tracee.ancestors.interpreter.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "ptrace.tracee.ancestors.is_kworker": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.IsKworker"} - } - return nil - case "ptrace.tracee.ancestors.is_thread": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.IsThread"} - } - return nil - case "ptrace.tracee.ancestors.pid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Pid"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Pid = uint32(v) - return nil - case "ptrace.tracee.ancestors.ppid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.PPid"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.PPid = uint32(v) - return nil - case "ptrace.tracee.ancestors.tid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Tid"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Tid = uint32(v) - return nil - case "ptrace.tracee.ancestors.tty_name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.TTYName"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.TTYName = str - return nil - case "ptrace.tracee.ancestors.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.UID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.UID = uint32(v) - return nil - case "ptrace.tracee.ancestors.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.User"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.User = str - return nil - case "ptrace.tracee.args": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Args"} - } - e.PTrace.Tracee.Process.Args = str - return nil - case "ptrace.tracee.args_flags": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Argv"} - } - e.PTrace.Tracee.Process.Argv = append(e.PTrace.Tracee.Process.Argv, str) - return nil - case "ptrace.tracee.args_options": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Argv"} - } - e.PTrace.Tracee.Process.Argv = append(e.PTrace.Tracee.Process.Argv, str) - return nil - case "ptrace.tracee.args_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - var ok bool - if e.PTrace.Tracee.Process.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.ArgsTruncated"} - } - return nil - case "ptrace.tracee.argv": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Argv"} - } - e.PTrace.Tracee.Process.Argv = append(e.PTrace.Tracee.Process.Argv, str) - return nil - case "ptrace.tracee.argv0": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Argv0"} - } - e.PTrace.Tracee.Process.Argv0 = str - return nil - case "ptrace.tracee.cap_effective": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.CapEffective"} - } - e.PTrace.Tracee.Process.Credentials.CapEffective = uint64(v) - return nil - case "ptrace.tracee.cap_permitted": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.CapPermitted"} - } - e.PTrace.Tracee.Process.Credentials.CapPermitted = uint64(v) - return nil - case "ptrace.tracee.comm": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Comm"} - } - e.PTrace.Tracee.Process.Comm = str - return nil - case "ptrace.tracee.container.id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.ContainerID"} - } - e.PTrace.Tracee.Process.ContainerID = str - return nil - case "ptrace.tracee.cookie": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Cookie"} - } - e.PTrace.Tracee.Process.Cookie = uint32(v) - return nil - case "ptrace.tracee.created_at": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.CreatedAt"} - } - e.PTrace.Tracee.Process.CreatedAt = uint64(v) - return nil - case "ptrace.tracee.egid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.EGID"} - } - e.PTrace.Tracee.Process.Credentials.EGID = uint32(v) - return nil - case "ptrace.tracee.egroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.EGroup"} - } - e.PTrace.Tracee.Process.Credentials.EGroup = str - return nil - case "ptrace.tracee.envp": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Envp"} - } - e.PTrace.Tracee.Process.Envp = append(e.PTrace.Tracee.Process.Envp, str) - return nil - case "ptrace.tracee.envs": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Envs"} - } - e.PTrace.Tracee.Process.Envs = append(e.PTrace.Tracee.Process.Envs, str) - return nil - case "ptrace.tracee.envs_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - var ok bool - if e.PTrace.Tracee.Process.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.EnvsTruncated"} - } - return nil - case "ptrace.tracee.euid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.EUID"} - } - e.PTrace.Tracee.Process.Credentials.EUID = uint32(v) - return nil - case "ptrace.tracee.euser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.EUser"} - } - e.PTrace.Tracee.Process.Credentials.EUser = str - return nil - case "ptrace.tracee.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.CTime"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.CTime = uint64(v) - return nil - case "ptrace.tracee.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.Filesystem"} - } - e.PTrace.Tracee.Process.FileEvent.Filesystem = str - return nil - case "ptrace.tracee.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.GID"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.GID = uint32(v) - return nil - case "ptrace.tracee.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.Group"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.Group = str - return nil - case "ptrace.tracee.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - var ok bool - if e.PTrace.Tracee.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "ptrace.tracee.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.Inode"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.Inode = uint64(v) - return nil - case "ptrace.tracee.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.MTime"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.MTime = uint64(v) - return nil - case "ptrace.tracee.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.MountID"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.MountID = uint32(v) - return nil - case "ptrace.tracee.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.BasenameStr"} - } - e.PTrace.Tracee.Process.FileEvent.BasenameStr = str - return nil - case "ptrace.tracee.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.file.name.length"} - case "ptrace.tracee.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.PathnameStr"} - } - e.PTrace.Tracee.Process.FileEvent.PathnameStr = str - return nil - case "ptrace.tracee.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.file.path.length"} - case "ptrace.tracee.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.UID"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.UID = uint32(v) - return nil - case "ptrace.tracee.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.User"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.User = str - return nil - case "ptrace.tracee.fsgid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.FSGID"} - } - e.PTrace.Tracee.Process.Credentials.FSGID = uint32(v) - return nil - case "ptrace.tracee.fsgroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.FSGroup"} - } - e.PTrace.Tracee.Process.Credentials.FSGroup = str - return nil - case "ptrace.tracee.fsuid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.FSUID"} - } - e.PTrace.Tracee.Process.Credentials.FSUID = uint32(v) - return nil - case "ptrace.tracee.fsuser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.FSUser"} - } - e.PTrace.Tracee.Process.Credentials.FSUser = str - return nil - case "ptrace.tracee.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.GID"} - } - e.PTrace.Tracee.Process.Credentials.GID = uint32(v) - return nil - case "ptrace.tracee.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.Group"} - } - e.PTrace.Tracee.Process.Credentials.Group = str - return nil - case "ptrace.tracee.interpreter.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "ptrace.tracee.interpreter.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.Filesystem"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "ptrace.tracee.interpreter.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "ptrace.tracee.interpreter.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "ptrace.tracee.interpreter.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - var ok bool - if e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "ptrace.tracee.interpreter.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "ptrace.tracee.interpreter.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.interpreter.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "ptrace.tracee.interpreter.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "ptrace.tracee.interpreter.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.BasenameStr"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "ptrace.tracee.interpreter.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.interpreter.file.name.length"} - case "ptrace.tracee.interpreter.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.PathnameStr"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "ptrace.tracee.interpreter.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.interpreter.file.path.length"} - case "ptrace.tracee.interpreter.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.interpreter.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "ptrace.tracee.interpreter.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.User"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "ptrace.tracee.is_kworker": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - var ok bool - if e.PTrace.Tracee.Process.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.PIDContext.IsKworker"} - } - return nil - case "ptrace.tracee.is_thread": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - var ok bool - if e.PTrace.Tracee.Process.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.IsThread"} - } - return nil - case "ptrace.tracee.parent.args": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Args"} - } - e.PTrace.Tracee.Parent.Args = str - return nil - case "ptrace.tracee.parent.args_flags": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Argv"} - } - e.PTrace.Tracee.Parent.Argv = append(e.PTrace.Tracee.Parent.Argv, str) - return nil - case "ptrace.tracee.parent.args_options": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Argv"} - } - e.PTrace.Tracee.Parent.Argv = append(e.PTrace.Tracee.Parent.Argv, str) - return nil - case "ptrace.tracee.parent.args_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - var ok bool - if e.PTrace.Tracee.Parent.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.ArgsTruncated"} - } - return nil - case "ptrace.tracee.parent.argv": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Argv"} - } - e.PTrace.Tracee.Parent.Argv = append(e.PTrace.Tracee.Parent.Argv, str) - return nil - case "ptrace.tracee.parent.argv0": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Argv0"} - } - e.PTrace.Tracee.Parent.Argv0 = str - return nil - case "ptrace.tracee.parent.cap_effective": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.CapEffective"} - } - e.PTrace.Tracee.Parent.Credentials.CapEffective = uint64(v) - return nil - case "ptrace.tracee.parent.cap_permitted": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.CapPermitted"} - } - e.PTrace.Tracee.Parent.Credentials.CapPermitted = uint64(v) - return nil - case "ptrace.tracee.parent.comm": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Comm"} - } - e.PTrace.Tracee.Parent.Comm = str - return nil - case "ptrace.tracee.parent.container.id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.ContainerID"} - } - e.PTrace.Tracee.Parent.ContainerID = str - return nil - case "ptrace.tracee.parent.cookie": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Cookie"} - } - e.PTrace.Tracee.Parent.Cookie = uint32(v) - return nil - case "ptrace.tracee.parent.created_at": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.CreatedAt"} - } - e.PTrace.Tracee.Parent.CreatedAt = uint64(v) - return nil - case "ptrace.tracee.parent.egid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.EGID"} - } - e.PTrace.Tracee.Parent.Credentials.EGID = uint32(v) - return nil - case "ptrace.tracee.parent.egroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.EGroup"} - } - e.PTrace.Tracee.Parent.Credentials.EGroup = str - return nil - case "ptrace.tracee.parent.envp": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Envp"} - } - e.PTrace.Tracee.Parent.Envp = append(e.PTrace.Tracee.Parent.Envp, str) - return nil - case "ptrace.tracee.parent.envs": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Envs"} - } - e.PTrace.Tracee.Parent.Envs = append(e.PTrace.Tracee.Parent.Envs, str) - return nil - case "ptrace.tracee.parent.envs_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - var ok bool - if e.PTrace.Tracee.Parent.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.EnvsTruncated"} - } - return nil - case "ptrace.tracee.parent.euid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.EUID"} - } - e.PTrace.Tracee.Parent.Credentials.EUID = uint32(v) - return nil - case "ptrace.tracee.parent.euser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.EUser"} - } - e.PTrace.Tracee.Parent.Credentials.EUser = str - return nil - case "ptrace.tracee.parent.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.CTime"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.CTime = uint64(v) - return nil - case "ptrace.tracee.parent.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.Filesystem"} - } - e.PTrace.Tracee.Parent.FileEvent.Filesystem = str - return nil - case "ptrace.tracee.parent.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.GID"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.GID = uint32(v) - return nil - case "ptrace.tracee.parent.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.Group"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.Group = str - return nil - case "ptrace.tracee.parent.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - var ok bool - if e.PTrace.Tracee.Parent.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "ptrace.tracee.parent.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.Inode"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.Inode = uint64(v) - return nil - case "ptrace.tracee.parent.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.parent.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.MTime"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.MTime = uint64(v) - return nil - case "ptrace.tracee.parent.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.MountID"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.MountID = uint32(v) - return nil - case "ptrace.tracee.parent.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.BasenameStr"} - } - e.PTrace.Tracee.Parent.FileEvent.BasenameStr = str - return nil - case "ptrace.tracee.parent.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.parent.file.name.length"} - case "ptrace.tracee.parent.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.PathnameStr"} - } - e.PTrace.Tracee.Parent.FileEvent.PathnameStr = str - return nil - case "ptrace.tracee.parent.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.parent.file.path.length"} - case "ptrace.tracee.parent.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.parent.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.UID"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.UID = uint32(v) - return nil - case "ptrace.tracee.parent.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.User"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.User = str - return nil - case "ptrace.tracee.parent.fsgid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.FSGID"} - } - e.PTrace.Tracee.Parent.Credentials.FSGID = uint32(v) - return nil - case "ptrace.tracee.parent.fsgroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.FSGroup"} - } - e.PTrace.Tracee.Parent.Credentials.FSGroup = str - return nil - case "ptrace.tracee.parent.fsuid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.FSUID"} - } - e.PTrace.Tracee.Parent.Credentials.FSUID = uint32(v) - return nil - case "ptrace.tracee.parent.fsuser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.FSUser"} - } - e.PTrace.Tracee.Parent.Credentials.FSUser = str - return nil - case "ptrace.tracee.parent.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.GID"} - } - e.PTrace.Tracee.Parent.Credentials.GID = uint32(v) - return nil - case "ptrace.tracee.parent.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.Group"} - } - e.PTrace.Tracee.Parent.Credentials.Group = str - return nil - case "ptrace.tracee.parent.interpreter.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "ptrace.tracee.parent.interpreter.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.Filesystem"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "ptrace.tracee.parent.interpreter.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "ptrace.tracee.parent.interpreter.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "ptrace.tracee.parent.interpreter.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - var ok bool - if e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "ptrace.tracee.parent.interpreter.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "ptrace.tracee.parent.interpreter.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.parent.interpreter.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "ptrace.tracee.parent.interpreter.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "ptrace.tracee.parent.interpreter.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.BasenameStr"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "ptrace.tracee.parent.interpreter.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.parent.interpreter.file.name.length"} - case "ptrace.tracee.parent.interpreter.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.PathnameStr"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "ptrace.tracee.parent.interpreter.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.parent.interpreter.file.path.length"} - case "ptrace.tracee.parent.interpreter.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.parent.interpreter.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "ptrace.tracee.parent.interpreter.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.User"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "ptrace.tracee.parent.is_kworker": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - var ok bool - if e.PTrace.Tracee.Parent.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.PIDContext.IsKworker"} - } - return nil - case "ptrace.tracee.parent.is_thread": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - var ok bool - if e.PTrace.Tracee.Parent.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.IsThread"} - } - return nil - case "ptrace.tracee.parent.pid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.PIDContext.Pid"} - } - e.PTrace.Tracee.Parent.PIDContext.Pid = uint32(v) - return nil - case "ptrace.tracee.parent.ppid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.PPid"} - } - e.PTrace.Tracee.Parent.PPid = uint32(v) - return nil - case "ptrace.tracee.parent.tid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.PIDContext.Tid"} - } - e.PTrace.Tracee.Parent.PIDContext.Tid = uint32(v) - return nil - case "ptrace.tracee.parent.tty_name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.TTYName"} - } - e.PTrace.Tracee.Parent.TTYName = str - return nil - case "ptrace.tracee.parent.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.UID"} - } - e.PTrace.Tracee.Parent.Credentials.UID = uint32(v) - return nil - case "ptrace.tracee.parent.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.User"} - } - e.PTrace.Tracee.Parent.Credentials.User = str - return nil - case "ptrace.tracee.pid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.PIDContext.Pid"} - } - e.PTrace.Tracee.Process.PIDContext.Pid = uint32(v) - return nil - case "ptrace.tracee.ppid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.PPid"} - } - e.PTrace.Tracee.Process.PPid = uint32(v) - return nil - case "ptrace.tracee.tid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.PIDContext.Tid"} - } - e.PTrace.Tracee.Process.PIDContext.Tid = uint32(v) - return nil - case "ptrace.tracee.tty_name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.TTYName"} - } - e.PTrace.Tracee.Process.TTYName = str - return nil - case "ptrace.tracee.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.UID"} - } - e.PTrace.Tracee.Process.Credentials.UID = uint32(v) - return nil - case "ptrace.tracee.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.User"} - } - e.PTrace.Tracee.Process.Credentials.User = str - return nil - case "removexattr.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.CTime"} - } - e.RemoveXAttr.File.FileFields.CTime = uint64(v) - return nil - case "removexattr.file.destination.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.Name"} - } - e.RemoveXAttr.Name = str - return nil - case "removexattr.file.destination.namespace": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.Namespace"} - } - e.RemoveXAttr.Namespace = str - return nil - case "removexattr.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.Filesystem"} - } - e.RemoveXAttr.File.Filesystem = str - return nil - case "removexattr.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.GID"} - } - e.RemoveXAttr.File.FileFields.GID = uint32(v) - return nil - case "removexattr.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.Group"} - } - e.RemoveXAttr.File.FileFields.Group = str - return nil - case "removexattr.file.in_upper_layer": - var ok bool - if e.RemoveXAttr.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.InUpperLayer"} - } - return nil - case "removexattr.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.Inode"} - } - e.RemoveXAttr.File.FileFields.Inode = uint64(v) - return nil - case "removexattr.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.Mode"} - } - e.RemoveXAttr.File.FileFields.Mode = uint16(v) - return nil - case "removexattr.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.MTime"} - } - e.RemoveXAttr.File.FileFields.MTime = uint64(v) - return nil - case "removexattr.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.MountID"} - } - e.RemoveXAttr.File.FileFields.MountID = uint32(v) - return nil - case "removexattr.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.BasenameStr"} - } - e.RemoveXAttr.File.BasenameStr = str - return nil - case "removexattr.file.name.length": - return &eval.ErrFieldReadOnly{Field: "removexattr.file.name.length"} - case "removexattr.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.PathnameStr"} - } - e.RemoveXAttr.File.PathnameStr = str - return nil - case "removexattr.file.path.length": - return &eval.ErrFieldReadOnly{Field: "removexattr.file.path.length"} - case "removexattr.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.Mode"} - } - e.RemoveXAttr.File.FileFields.Mode = uint16(v) - return nil - case "removexattr.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.UID"} - } - e.RemoveXAttr.File.FileFields.UID = uint32(v) - return nil - case "removexattr.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.User"} - } - e.RemoveXAttr.File.FileFields.User = str - return nil - case "removexattr.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.SyscallEvent.Retval"} - } - e.RemoveXAttr.SyscallEvent.Retval = int64(v) - return nil - case "rename.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.CTime"} - } - e.Rename.Old.FileFields.CTime = uint64(v) - return nil - case "rename.file.destination.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.CTime"} - } - e.Rename.New.FileFields.CTime = uint64(v) - return nil - case "rename.file.destination.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.Filesystem"} - } - e.Rename.New.Filesystem = str - return nil - case "rename.file.destination.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.GID"} - } - e.Rename.New.FileFields.GID = uint32(v) - return nil - case "rename.file.destination.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.Group"} - } - e.Rename.New.FileFields.Group = str - return nil - case "rename.file.destination.in_upper_layer": - var ok bool - if e.Rename.New.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.InUpperLayer"} - } - return nil - case "rename.file.destination.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.Inode"} - } - e.Rename.New.FileFields.Inode = uint64(v) - return nil - case "rename.file.destination.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.Mode"} - } - e.Rename.New.FileFields.Mode = uint16(v) - return nil - case "rename.file.destination.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.MTime"} - } - e.Rename.New.FileFields.MTime = uint64(v) - return nil - case "rename.file.destination.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.MountID"} - } - e.Rename.New.FileFields.MountID = uint32(v) - return nil - case "rename.file.destination.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.BasenameStr"} - } - e.Rename.New.BasenameStr = str - return nil - case "rename.file.destination.name.length": - return &eval.ErrFieldReadOnly{Field: "rename.file.destination.name.length"} - case "rename.file.destination.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.PathnameStr"} - } - e.Rename.New.PathnameStr = str - return nil - case "rename.file.destination.path.length": - return &eval.ErrFieldReadOnly{Field: "rename.file.destination.path.length"} - case "rename.file.destination.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.Mode"} - } - e.Rename.New.FileFields.Mode = uint16(v) - return nil - case "rename.file.destination.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.UID"} - } - e.Rename.New.FileFields.UID = uint32(v) - return nil - case "rename.file.destination.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.User"} - } - e.Rename.New.FileFields.User = str - return nil - case "rename.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.Filesystem"} - } - e.Rename.Old.Filesystem = str - return nil - case "rename.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.GID"} - } - e.Rename.Old.FileFields.GID = uint32(v) - return nil - case "rename.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.Group"} - } - e.Rename.Old.FileFields.Group = str - return nil - case "rename.file.in_upper_layer": - var ok bool - if e.Rename.Old.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.InUpperLayer"} - } - return nil - case "rename.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.Inode"} - } - e.Rename.Old.FileFields.Inode = uint64(v) - return nil - case "rename.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.Mode"} - } - e.Rename.Old.FileFields.Mode = uint16(v) - return nil - case "rename.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.MTime"} - } - e.Rename.Old.FileFields.MTime = uint64(v) - return nil - case "rename.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.MountID"} - } - e.Rename.Old.FileFields.MountID = uint32(v) - return nil - case "rename.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.BasenameStr"} - } - e.Rename.Old.BasenameStr = str - return nil - case "rename.file.name.length": - return &eval.ErrFieldReadOnly{Field: "rename.file.name.length"} - case "rename.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.PathnameStr"} - } - e.Rename.Old.PathnameStr = str - return nil - case "rename.file.path.length": - return &eval.ErrFieldReadOnly{Field: "rename.file.path.length"} - case "rename.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.Mode"} - } - e.Rename.Old.FileFields.Mode = uint16(v) - return nil - case "rename.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.UID"} - } - e.Rename.Old.FileFields.UID = uint32(v) - return nil - case "rename.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.User"} - } - e.Rename.Old.FileFields.User = str - return nil - case "rename.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.SyscallEvent.Retval"} - } - e.Rename.SyscallEvent.Retval = int64(v) - return nil - case "rmdir.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.CTime"} - } - e.Rmdir.File.FileFields.CTime = uint64(v) - return nil - case "rmdir.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.Filesystem"} - } - e.Rmdir.File.Filesystem = str - return nil - case "rmdir.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.GID"} - } - e.Rmdir.File.FileFields.GID = uint32(v) - return nil - case "rmdir.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.Group"} - } - e.Rmdir.File.FileFields.Group = str - return nil - case "rmdir.file.in_upper_layer": - var ok bool - if e.Rmdir.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.InUpperLayer"} - } - return nil - case "rmdir.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.Inode"} - } - e.Rmdir.File.FileFields.Inode = uint64(v) - return nil - case "rmdir.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.Mode"} - } - e.Rmdir.File.FileFields.Mode = uint16(v) - return nil - case "rmdir.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.MTime"} - } - e.Rmdir.File.FileFields.MTime = uint64(v) - return nil - case "rmdir.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.MountID"} - } - e.Rmdir.File.FileFields.MountID = uint32(v) - return nil - case "rmdir.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.BasenameStr"} - } - e.Rmdir.File.BasenameStr = str - return nil - case "rmdir.file.name.length": - return &eval.ErrFieldReadOnly{Field: "rmdir.file.name.length"} - case "rmdir.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.PathnameStr"} - } - e.Rmdir.File.PathnameStr = str - return nil - case "rmdir.file.path.length": - return &eval.ErrFieldReadOnly{Field: "rmdir.file.path.length"} - case "rmdir.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.Mode"} - } - e.Rmdir.File.FileFields.Mode = uint16(v) - return nil - case "rmdir.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.UID"} - } - e.Rmdir.File.FileFields.UID = uint32(v) - return nil - case "rmdir.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.User"} - } - e.Rmdir.File.FileFields.User = str - return nil - case "rmdir.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.SyscallEvent.Retval"} - } - e.Rmdir.SyscallEvent.Retval = int64(v) - return nil - case "selinux.bool.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SELinux.BoolName"} - } - e.SELinux.BoolName = str - return nil - case "selinux.bool.state": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SELinux.BoolChangeValue"} - } - e.SELinux.BoolChangeValue = str - return nil - case "selinux.bool_commit.state": - var ok bool - if e.SELinux.BoolCommitValue, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "SELinux.BoolCommitValue"} - } - return nil - case "selinux.enforce.status": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SELinux.EnforceStatus"} - } - e.SELinux.EnforceStatus = str - return nil - case "setgid.egid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetGID.EGID"} - } - e.SetGID.EGID = uint32(v) - return nil - case "setgid.egroup": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetGID.EGroup"} - } - e.SetGID.EGroup = str - return nil - case "setgid.fsgid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetGID.FSGID"} - } - e.SetGID.FSGID = uint32(v) - return nil - case "setgid.fsgroup": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetGID.FSGroup"} - } - e.SetGID.FSGroup = str - return nil - case "setgid.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetGID.GID"} - } - e.SetGID.GID = uint32(v) - return nil - case "setgid.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetGID.Group"} - } - e.SetGID.Group = str - return nil - case "setuid.euid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetUID.EUID"} - } - e.SetUID.EUID = uint32(v) - return nil - case "setuid.euser": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetUID.EUser"} - } - e.SetUID.EUser = str - return nil - case "setuid.fsuid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetUID.FSUID"} - } - e.SetUID.FSUID = uint32(v) - return nil - case "setuid.fsuser": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetUID.FSUser"} - } - e.SetUID.FSUser = str - return nil - case "setuid.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetUID.UID"} - } - e.SetUID.UID = uint32(v) - return nil - case "setuid.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetUID.User"} - } - e.SetUID.User = str - return nil - case "setxattr.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.CTime"} - } - e.SetXAttr.File.FileFields.CTime = uint64(v) - return nil - case "setxattr.file.destination.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.Name"} - } - e.SetXAttr.Name = str - return nil - case "setxattr.file.destination.namespace": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.Namespace"} - } - e.SetXAttr.Namespace = str - return nil - case "setxattr.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.Filesystem"} - } - e.SetXAttr.File.Filesystem = str - return nil - case "setxattr.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.GID"} - } - e.SetXAttr.File.FileFields.GID = uint32(v) - return nil - case "setxattr.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.Group"} - } - e.SetXAttr.File.FileFields.Group = str - return nil - case "setxattr.file.in_upper_layer": - var ok bool - if e.SetXAttr.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.InUpperLayer"} - } - return nil - case "setxattr.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.Inode"} - } - e.SetXAttr.File.FileFields.Inode = uint64(v) - return nil - case "setxattr.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.Mode"} - } - e.SetXAttr.File.FileFields.Mode = uint16(v) - return nil - case "setxattr.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.MTime"} - } - e.SetXAttr.File.FileFields.MTime = uint64(v) - return nil - case "setxattr.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.MountID"} - } - e.SetXAttr.File.FileFields.MountID = uint32(v) - return nil - case "setxattr.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.BasenameStr"} - } - e.SetXAttr.File.BasenameStr = str - return nil - case "setxattr.file.name.length": - return &eval.ErrFieldReadOnly{Field: "setxattr.file.name.length"} - case "setxattr.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.PathnameStr"} - } - e.SetXAttr.File.PathnameStr = str - return nil - case "setxattr.file.path.length": - return &eval.ErrFieldReadOnly{Field: "setxattr.file.path.length"} - case "setxattr.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.Mode"} - } - e.SetXAttr.File.FileFields.Mode = uint16(v) - return nil - case "setxattr.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.UID"} - } - e.SetXAttr.File.FileFields.UID = uint32(v) - return nil - case "setxattr.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.User"} - } - e.SetXAttr.File.FileFields.User = str - return nil - case "setxattr.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.SyscallEvent.Retval"} - } - e.SetXAttr.SyscallEvent.Retval = int64(v) - return nil - case "signal.pid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.PID"} - } - e.Signal.PID = uint32(v) - return nil - case "signal.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.SyscallEvent.Retval"} - } - e.Signal.SyscallEvent.Retval = int64(v) - return nil - case "signal.target.ancestors.args": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Args"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Args = str - return nil - case "signal.target.ancestors.args_flags": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Argv"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(e.Signal.Target.Ancestor.ProcessContext.Process.Argv, str) - return nil - case "signal.target.ancestors.args_options": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Argv"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(e.Signal.Target.Ancestor.ProcessContext.Process.Argv, str) - return nil - case "signal.target.ancestors.args_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.ArgsTruncated"} - } - return nil - case "signal.target.ancestors.argv": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Argv"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(e.Signal.Target.Ancestor.ProcessContext.Process.Argv, str) - return nil - case "signal.target.ancestors.argv0": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Argv0"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Argv0 = str - return nil - case "signal.target.ancestors.cap_effective": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapEffective"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapEffective = uint64(v) - return nil - case "signal.target.ancestors.cap_permitted": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapPermitted"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapPermitted = uint64(v) - return nil - case "signal.target.ancestors.comm": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Comm"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Comm = str - return nil - case "signal.target.ancestors.container.id": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.ContainerID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.ContainerID = str - return nil - case "signal.target.ancestors.cookie": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Cookie"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Cookie = uint32(v) - return nil - case "signal.target.ancestors.created_at": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.CreatedAt"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.CreatedAt = uint64(v) - return nil - case "signal.target.ancestors.egid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGID = uint32(v) - return nil - case "signal.target.ancestors.egroup": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGroup"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGroup = str - return nil - case "signal.target.ancestors.envp": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Envp"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Envp = append(e.Signal.Target.Ancestor.ProcessContext.Process.Envp, str) - return nil - case "signal.target.ancestors.envs": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Envs"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Envs = append(e.Signal.Target.Ancestor.ProcessContext.Process.Envs, str) - return nil - case "signal.target.ancestors.envs_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.EnvsTruncated"} - } - return nil - case "signal.target.ancestors.euid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUID = uint32(v) - return nil - case "signal.target.ancestors.euser": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUser"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUser = str - return nil - case "signal.target.ancestors.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) - return nil - case "signal.target.ancestors.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.Filesystem"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.Filesystem = str - return nil - case "signal.target.ancestors.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) - return nil - case "signal.target.ancestors.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group = str - return nil - case "signal.target.ancestors.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "signal.target.ancestors.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) - return nil - case "signal.target.ancestors.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.ancestors.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) - return nil - case "signal.target.ancestors.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) - return nil - case "signal.target.ancestors.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.BasenameStr"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.BasenameStr = str - return nil - case "signal.target.ancestors.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.ancestors.file.name.length"} - case "signal.target.ancestors.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.PathnameStr"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.PathnameStr = str - return nil - case "signal.target.ancestors.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.ancestors.file.path.length"} - case "signal.target.ancestors.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.ancestors.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) - return nil - case "signal.target.ancestors.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.User"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.User = str - return nil - case "signal.target.ancestors.fsgid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGID = uint32(v) - return nil - case "signal.target.ancestors.fsgroup": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGroup"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGroup = str - return nil - case "signal.target.ancestors.fsuid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUID = uint32(v) - return nil - case "signal.target.ancestors.fsuser": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUser"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUser = str - return nil - case "signal.target.ancestors.gid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.GID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.GID = uint32(v) - return nil - case "signal.target.ancestors.group": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.Group"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.Group = str - return nil - case "signal.target.ancestors.interpreter.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "signal.target.ancestors.interpreter.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "signal.target.ancestors.interpreter.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "signal.target.ancestors.interpreter.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "signal.target.ancestors.interpreter.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "signal.target.ancestors.interpreter.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "signal.target.ancestors.interpreter.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.ancestors.interpreter.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "signal.target.ancestors.interpreter.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "signal.target.ancestors.interpreter.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "signal.target.ancestors.interpreter.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.ancestors.interpreter.file.name.length"} - case "signal.target.ancestors.interpreter.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "signal.target.ancestors.interpreter.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.ancestors.interpreter.file.path.length"} - case "signal.target.ancestors.interpreter.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.ancestors.interpreter.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "signal.target.ancestors.interpreter.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "signal.target.ancestors.is_kworker": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.PIDContext.IsKworker"} - } - return nil - case "signal.target.ancestors.is_thread": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.IsThread"} - } - return nil - case "signal.target.ancestors.pid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Pid"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Pid = uint32(v) - return nil - case "signal.target.ancestors.ppid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.PPid"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.PPid = uint32(v) - return nil - case "signal.target.ancestors.tid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Tid"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Tid = uint32(v) - return nil - case "signal.target.ancestors.tty_name": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.TTYName"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.TTYName = str - return nil - case "signal.target.ancestors.uid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.UID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.UID = uint32(v) - return nil - case "signal.target.ancestors.user": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.User"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.User = str - return nil - case "signal.target.args": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Args"} - } - e.Signal.Target.Process.Args = str - return nil - case "signal.target.args_flags": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Argv"} - } - e.Signal.Target.Process.Argv = append(e.Signal.Target.Process.Argv, str) - return nil - case "signal.target.args_options": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Argv"} - } - e.Signal.Target.Process.Argv = append(e.Signal.Target.Process.Argv, str) - return nil - case "signal.target.args_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - var ok bool - if e.Signal.Target.Process.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.ArgsTruncated"} - } - return nil - case "signal.target.argv": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Argv"} - } - e.Signal.Target.Process.Argv = append(e.Signal.Target.Process.Argv, str) - return nil - case "signal.target.argv0": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Argv0"} - } - e.Signal.Target.Process.Argv0 = str - return nil - case "signal.target.cap_effective": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.CapEffective"} - } - e.Signal.Target.Process.Credentials.CapEffective = uint64(v) - return nil - case "signal.target.cap_permitted": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.CapPermitted"} - } - e.Signal.Target.Process.Credentials.CapPermitted = uint64(v) - return nil - case "signal.target.comm": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Comm"} - } - e.Signal.Target.Process.Comm = str - return nil - case "signal.target.container.id": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.ContainerID"} - } - e.Signal.Target.Process.ContainerID = str - return nil - case "signal.target.cookie": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Cookie"} - } - e.Signal.Target.Process.Cookie = uint32(v) - return nil - case "signal.target.created_at": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.CreatedAt"} - } - e.Signal.Target.Process.CreatedAt = uint64(v) - return nil - case "signal.target.egid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.EGID"} - } - e.Signal.Target.Process.Credentials.EGID = uint32(v) - return nil - case "signal.target.egroup": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.EGroup"} - } - e.Signal.Target.Process.Credentials.EGroup = str - return nil - case "signal.target.envp": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Envp"} - } - e.Signal.Target.Process.Envp = append(e.Signal.Target.Process.Envp, str) - return nil - case "signal.target.envs": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Envs"} - } - e.Signal.Target.Process.Envs = append(e.Signal.Target.Process.Envs, str) - return nil - case "signal.target.envs_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - var ok bool - if e.Signal.Target.Process.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.EnvsTruncated"} - } - return nil - case "signal.target.euid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.EUID"} - } - e.Signal.Target.Process.Credentials.EUID = uint32(v) - return nil - case "signal.target.euser": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.EUser"} - } - e.Signal.Target.Process.Credentials.EUser = str - return nil - case "signal.target.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.CTime"} - } - e.Signal.Target.Process.FileEvent.FileFields.CTime = uint64(v) - return nil - case "signal.target.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.Filesystem"} - } - e.Signal.Target.Process.FileEvent.Filesystem = str - return nil - case "signal.target.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.GID"} - } - e.Signal.Target.Process.FileEvent.FileFields.GID = uint32(v) - return nil - case "signal.target.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.Group"} - } - e.Signal.Target.Process.FileEvent.FileFields.Group = str - return nil - case "signal.target.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - var ok bool - if e.Signal.Target.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "signal.target.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.Inode"} - } - e.Signal.Target.Process.FileEvent.FileFields.Inode = uint64(v) - return nil - case "signal.target.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.MTime"} - } - e.Signal.Target.Process.FileEvent.FileFields.MTime = uint64(v) - return nil - case "signal.target.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.MountID"} - } - e.Signal.Target.Process.FileEvent.FileFields.MountID = uint32(v) - return nil - case "signal.target.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.BasenameStr"} - } - e.Signal.Target.Process.FileEvent.BasenameStr = str - return nil - case "signal.target.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.file.name.length"} - case "signal.target.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.PathnameStr"} - } - e.Signal.Target.Process.FileEvent.PathnameStr = str - return nil - case "signal.target.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.file.path.length"} - case "signal.target.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.UID"} - } - e.Signal.Target.Process.FileEvent.FileFields.UID = uint32(v) - return nil - case "signal.target.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.User"} - } - e.Signal.Target.Process.FileEvent.FileFields.User = str - return nil - case "signal.target.fsgid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.FSGID"} - } - e.Signal.Target.Process.Credentials.FSGID = uint32(v) - return nil - case "signal.target.fsgroup": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.FSGroup"} - } - e.Signal.Target.Process.Credentials.FSGroup = str - return nil - case "signal.target.fsuid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.FSUID"} - } - e.Signal.Target.Process.Credentials.FSUID = uint32(v) - return nil - case "signal.target.fsuser": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.FSUser"} - } - e.Signal.Target.Process.Credentials.FSUser = str - return nil - case "signal.target.gid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.GID"} - } - e.Signal.Target.Process.Credentials.GID = uint32(v) - return nil - case "signal.target.group": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.Group"} - } - e.Signal.Target.Process.Credentials.Group = str - return nil - case "signal.target.interpreter.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "signal.target.interpreter.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.Filesystem"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "signal.target.interpreter.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "signal.target.interpreter.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "signal.target.interpreter.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - var ok bool - if e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "signal.target.interpreter.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "signal.target.interpreter.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.interpreter.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "signal.target.interpreter.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "signal.target.interpreter.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.BasenameStr"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "signal.target.interpreter.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.interpreter.file.name.length"} - case "signal.target.interpreter.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.PathnameStr"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "signal.target.interpreter.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.interpreter.file.path.length"} - case "signal.target.interpreter.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.interpreter.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "signal.target.interpreter.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.User"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "signal.target.is_kworker": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - var ok bool - if e.Signal.Target.Process.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.PIDContext.IsKworker"} - } - return nil - case "signal.target.is_thread": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - var ok bool - if e.Signal.Target.Process.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.IsThread"} - } - return nil - case "signal.target.parent.args": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Args"} - } - e.Signal.Target.Parent.Args = str - return nil - case "signal.target.parent.args_flags": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Argv"} - } - e.Signal.Target.Parent.Argv = append(e.Signal.Target.Parent.Argv, str) - return nil - case "signal.target.parent.args_options": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Argv"} - } - e.Signal.Target.Parent.Argv = append(e.Signal.Target.Parent.Argv, str) - return nil - case "signal.target.parent.args_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - var ok bool - if e.Signal.Target.Parent.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.ArgsTruncated"} - } - return nil - case "signal.target.parent.argv": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Argv"} - } - e.Signal.Target.Parent.Argv = append(e.Signal.Target.Parent.Argv, str) - return nil - case "signal.target.parent.argv0": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Argv0"} - } - e.Signal.Target.Parent.Argv0 = str - return nil - case "signal.target.parent.cap_effective": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.CapEffective"} - } - e.Signal.Target.Parent.Credentials.CapEffective = uint64(v) - return nil - case "signal.target.parent.cap_permitted": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.CapPermitted"} - } - e.Signal.Target.Parent.Credentials.CapPermitted = uint64(v) - return nil - case "signal.target.parent.comm": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Comm"} - } - e.Signal.Target.Parent.Comm = str - return nil - case "signal.target.parent.container.id": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.ContainerID"} - } - e.Signal.Target.Parent.ContainerID = str - return nil - case "signal.target.parent.cookie": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Cookie"} - } - e.Signal.Target.Parent.Cookie = uint32(v) - return nil - case "signal.target.parent.created_at": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.CreatedAt"} - } - e.Signal.Target.Parent.CreatedAt = uint64(v) - return nil - case "signal.target.parent.egid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.EGID"} - } - e.Signal.Target.Parent.Credentials.EGID = uint32(v) - return nil - case "signal.target.parent.egroup": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.EGroup"} - } - e.Signal.Target.Parent.Credentials.EGroup = str - return nil - case "signal.target.parent.envp": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Envp"} - } - e.Signal.Target.Parent.Envp = append(e.Signal.Target.Parent.Envp, str) - return nil - case "signal.target.parent.envs": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Envs"} - } - e.Signal.Target.Parent.Envs = append(e.Signal.Target.Parent.Envs, str) - return nil - case "signal.target.parent.envs_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - var ok bool - if e.Signal.Target.Parent.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.EnvsTruncated"} - } - return nil - case "signal.target.parent.euid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.EUID"} - } - e.Signal.Target.Parent.Credentials.EUID = uint32(v) - return nil - case "signal.target.parent.euser": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.EUser"} - } - e.Signal.Target.Parent.Credentials.EUser = str - return nil - case "signal.target.parent.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.CTime"} - } - e.Signal.Target.Parent.FileEvent.FileFields.CTime = uint64(v) - return nil - case "signal.target.parent.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.Filesystem"} - } - e.Signal.Target.Parent.FileEvent.Filesystem = str - return nil - case "signal.target.parent.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.GID"} - } - e.Signal.Target.Parent.FileEvent.FileFields.GID = uint32(v) - return nil - case "signal.target.parent.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.Group"} - } - e.Signal.Target.Parent.FileEvent.FileFields.Group = str - return nil - case "signal.target.parent.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - var ok bool - if e.Signal.Target.Parent.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "signal.target.parent.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.Inode"} - } - e.Signal.Target.Parent.FileEvent.FileFields.Inode = uint64(v) - return nil - case "signal.target.parent.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Parent.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.parent.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.MTime"} - } - e.Signal.Target.Parent.FileEvent.FileFields.MTime = uint64(v) - return nil - case "signal.target.parent.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.MountID"} - } - e.Signal.Target.Parent.FileEvent.FileFields.MountID = uint32(v) - return nil - case "signal.target.parent.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.BasenameStr"} - } - e.Signal.Target.Parent.FileEvent.BasenameStr = str - return nil - case "signal.target.parent.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.parent.file.name.length"} - case "signal.target.parent.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.PathnameStr"} - } - e.Signal.Target.Parent.FileEvent.PathnameStr = str - return nil - case "signal.target.parent.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.parent.file.path.length"} - case "signal.target.parent.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Parent.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.parent.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.UID"} - } - e.Signal.Target.Parent.FileEvent.FileFields.UID = uint32(v) - return nil - case "signal.target.parent.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.User"} - } - e.Signal.Target.Parent.FileEvent.FileFields.User = str - return nil - case "signal.target.parent.fsgid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.FSGID"} - } - e.Signal.Target.Parent.Credentials.FSGID = uint32(v) - return nil - case "signal.target.parent.fsgroup": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.FSGroup"} - } - e.Signal.Target.Parent.Credentials.FSGroup = str - return nil - case "signal.target.parent.fsuid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.FSUID"} - } - e.Signal.Target.Parent.Credentials.FSUID = uint32(v) - return nil - case "signal.target.parent.fsuser": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.FSUser"} - } - e.Signal.Target.Parent.Credentials.FSUser = str - return nil - case "signal.target.parent.gid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.GID"} - } - e.Signal.Target.Parent.Credentials.GID = uint32(v) - return nil - case "signal.target.parent.group": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.Group"} - } - e.Signal.Target.Parent.Credentials.Group = str - return nil - case "signal.target.parent.interpreter.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "signal.target.parent.interpreter.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.Filesystem"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "signal.target.parent.interpreter.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "signal.target.parent.interpreter.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "signal.target.parent.interpreter.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - var ok bool - if e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "signal.target.parent.interpreter.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "signal.target.parent.interpreter.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.parent.interpreter.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "signal.target.parent.interpreter.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "signal.target.parent.interpreter.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.BasenameStr"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "signal.target.parent.interpreter.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.parent.interpreter.file.name.length"} - case "signal.target.parent.interpreter.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.PathnameStr"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "signal.target.parent.interpreter.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.parent.interpreter.file.path.length"} - case "signal.target.parent.interpreter.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.parent.interpreter.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "signal.target.parent.interpreter.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.User"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "signal.target.parent.is_kworker": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - var ok bool - if e.Signal.Target.Parent.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.PIDContext.IsKworker"} - } - return nil - case "signal.target.parent.is_thread": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - var ok bool - if e.Signal.Target.Parent.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.IsThread"} - } - return nil - case "signal.target.parent.pid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.PIDContext.Pid"} - } - e.Signal.Target.Parent.PIDContext.Pid = uint32(v) - return nil - case "signal.target.parent.ppid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.PPid"} - } - e.Signal.Target.Parent.PPid = uint32(v) - return nil - case "signal.target.parent.tid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.PIDContext.Tid"} - } - e.Signal.Target.Parent.PIDContext.Tid = uint32(v) - return nil - case "signal.target.parent.tty_name": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.TTYName"} - } - e.Signal.Target.Parent.TTYName = str - return nil - case "signal.target.parent.uid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.UID"} - } - e.Signal.Target.Parent.Credentials.UID = uint32(v) - return nil - case "signal.target.parent.user": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.User"} - } - e.Signal.Target.Parent.Credentials.User = str - return nil - case "signal.target.pid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.PIDContext.Pid"} - } - e.Signal.Target.Process.PIDContext.Pid = uint32(v) - return nil - case "signal.target.ppid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.PPid"} - } - e.Signal.Target.Process.PPid = uint32(v) - return nil - case "signal.target.tid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.PIDContext.Tid"} - } - e.Signal.Target.Process.PIDContext.Tid = uint32(v) - return nil - case "signal.target.tty_name": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.TTYName"} - } - e.Signal.Target.Process.TTYName = str - return nil - case "signal.target.uid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.UID"} - } - e.Signal.Target.Process.Credentials.UID = uint32(v) - return nil - case "signal.target.user": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.User"} - } - e.Signal.Target.Process.Credentials.User = str - return nil - case "signal.type": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Type"} - } - e.Signal.Type = uint32(v) - return nil - case "splice.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.CTime"} - } - e.Splice.File.FileFields.CTime = uint64(v) - return nil - case "splice.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.Filesystem"} - } - e.Splice.File.Filesystem = str - return nil - case "splice.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.GID"} - } - e.Splice.File.FileFields.GID = uint32(v) - return nil - case "splice.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.Group"} - } - e.Splice.File.FileFields.Group = str - return nil - case "splice.file.in_upper_layer": - var ok bool - if e.Splice.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.InUpperLayer"} - } - return nil - case "splice.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.Inode"} - } - e.Splice.File.FileFields.Inode = uint64(v) - return nil - case "splice.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.Mode"} - } - e.Splice.File.FileFields.Mode = uint16(v) - return nil - case "splice.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.MTime"} - } - e.Splice.File.FileFields.MTime = uint64(v) - return nil - case "splice.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.MountID"} - } - e.Splice.File.FileFields.MountID = uint32(v) - return nil - case "splice.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.BasenameStr"} - } - e.Splice.File.BasenameStr = str - return nil - case "splice.file.name.length": - return &eval.ErrFieldReadOnly{Field: "splice.file.name.length"} - case "splice.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.PathnameStr"} - } - e.Splice.File.PathnameStr = str - return nil - case "splice.file.path.length": - return &eval.ErrFieldReadOnly{Field: "splice.file.path.length"} - case "splice.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.Mode"} - } - e.Splice.File.FileFields.Mode = uint16(v) - return nil - case "splice.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.UID"} - } - e.Splice.File.FileFields.UID = uint32(v) - return nil - case "splice.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.User"} - } - e.Splice.File.FileFields.User = str - return nil - case "splice.pipe_entry_flag": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.PipeEntryFlag"} - } - e.Splice.PipeEntryFlag = uint32(v) - return nil - case "splice.pipe_exit_flag": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.PipeExitFlag"} - } - e.Splice.PipeExitFlag = uint32(v) - return nil - case "splice.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.SyscallEvent.Retval"} - } - e.Splice.SyscallEvent.Retval = int64(v) - return nil - case "unlink.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.CTime"} - } - e.Unlink.File.FileFields.CTime = uint64(v) - return nil - case "unlink.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.Filesystem"} - } - e.Unlink.File.Filesystem = str - return nil - case "unlink.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.GID"} - } - e.Unlink.File.FileFields.GID = uint32(v) - return nil - case "unlink.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.Group"} - } - e.Unlink.File.FileFields.Group = str - return nil - case "unlink.file.in_upper_layer": - var ok bool - if e.Unlink.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.InUpperLayer"} - } - return nil - case "unlink.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.Inode"} - } - e.Unlink.File.FileFields.Inode = uint64(v) - return nil - case "unlink.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.Mode"} - } - e.Unlink.File.FileFields.Mode = uint16(v) - return nil - case "unlink.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.MTime"} - } - e.Unlink.File.FileFields.MTime = uint64(v) - return nil - case "unlink.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.MountID"} - } - e.Unlink.File.FileFields.MountID = uint32(v) - return nil - case "unlink.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.BasenameStr"} - } - e.Unlink.File.BasenameStr = str - return nil - case "unlink.file.name.length": - return &eval.ErrFieldReadOnly{Field: "unlink.file.name.length"} - case "unlink.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.PathnameStr"} - } - e.Unlink.File.PathnameStr = str - return nil - case "unlink.file.path.length": - return &eval.ErrFieldReadOnly{Field: "unlink.file.path.length"} - case "unlink.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.Mode"} - } - e.Unlink.File.FileFields.Mode = uint16(v) - return nil - case "unlink.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.UID"} - } - e.Unlink.File.FileFields.UID = uint32(v) - return nil - case "unlink.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.User"} - } - e.Unlink.File.FileFields.User = str - return nil - case "unlink.flags": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.Flags"} - } - e.Unlink.Flags = uint32(v) - return nil - case "unlink.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.SyscallEvent.Retval"} - } - e.Unlink.SyscallEvent.Retval = int64(v) - return nil - case "unload_module.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "UnloadModule.Name"} - } - e.UnloadModule.Name = str - return nil - case "unload_module.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "UnloadModule.SyscallEvent.Retval"} - } - e.UnloadModule.SyscallEvent.Retval = int64(v) - return nil - case "utimes.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.CTime"} - } - e.Utimes.File.FileFields.CTime = uint64(v) - return nil - case "utimes.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.Filesystem"} - } - e.Utimes.File.Filesystem = str - return nil - case "utimes.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.GID"} - } - e.Utimes.File.FileFields.GID = uint32(v) - return nil - case "utimes.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.Group"} - } - e.Utimes.File.FileFields.Group = str - return nil - case "utimes.file.in_upper_layer": - var ok bool - if e.Utimes.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.InUpperLayer"} - } - return nil - case "utimes.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.Inode"} - } - e.Utimes.File.FileFields.Inode = uint64(v) - return nil - case "utimes.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.Mode"} - } - e.Utimes.File.FileFields.Mode = uint16(v) - return nil - case "utimes.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.MTime"} - } - e.Utimes.File.FileFields.MTime = uint64(v) - return nil - case "utimes.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.MountID"} - } - e.Utimes.File.FileFields.MountID = uint32(v) - return nil - case "utimes.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.BasenameStr"} - } - e.Utimes.File.BasenameStr = str - return nil - case "utimes.file.name.length": - return &eval.ErrFieldReadOnly{Field: "utimes.file.name.length"} - case "utimes.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.PathnameStr"} - } - e.Utimes.File.PathnameStr = str - return nil - case "utimes.file.path.length": - return &eval.ErrFieldReadOnly{Field: "utimes.file.path.length"} - case "utimes.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.Mode"} - } - e.Utimes.File.FileFields.Mode = uint16(v) - return nil - case "utimes.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.UID"} - } - e.Utimes.File.FileFields.UID = uint32(v) - return nil - case "utimes.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.User"} - } - e.Utimes.File.FileFields.User = str - return nil - case "utimes.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.SyscallEvent.Retval"} - } - e.Utimes.SyscallEvent.Retval = int64(v) - return nil - } - return &eval.ErrFieldNotFound{Field: field} -} diff --git a/pkg/security/probe/activity_dump.go b/pkg/security/probe/activity_dump.go index 70560cd4733c39..694e5fbc04961c 100644 --- a/pkg/security/probe/activity_dump.go +++ b/pkg/security/probe/activity_dump.go @@ -504,7 +504,7 @@ func (ad *ActivityDump) debug(w io.Writer) { } } -func (ad *ActivityDump) isEventTypeTraced(event *Event) bool { +func (ad *ActivityDump) isEventTypeTraced(event *model.Event) bool { for _, evtType := range ad.LoadConfig.TracedEventTypes { if evtType == event.GetEventType() { return true @@ -515,7 +515,7 @@ func (ad *ActivityDump) isEventTypeTraced(event *Event) bool { // Insert inserts the provided event in the active ActivityDump. This function returns true if a new entry was added, // false if the event was dropped. -func (ad *ActivityDump) Insert(event *Event) (newEntry bool) { +func (ad *ActivityDump) Insert(event *model.Event) (newEntry bool) { ad.Lock() defer ad.Unlock() @@ -541,7 +541,7 @@ func (ad *ActivityDump) Insert(event *Event) (newEntry bool) { }() // find the node where the event should be inserted - entry, _ := event.ResolveProcessCacheEntry() + entry, _ := event.FieldHandlers.ResolveProcessCacheEntry(event) node := ad.findOrCreateProcessActivityNode(entry, Runtime) if node == nil { // a process node couldn't be found for the provided event as it doesn't match the ActivityDump query @@ -576,6 +576,11 @@ func (ad *ActivityDump) findOrCreateProcessActivityNode(entry *model.ProcessCach return node } + // drop processes with abnormal paths + if entry.GetPathResolutionError() != "" { + return node + } + // look for a ProcessActivityNode by process cookie if entry.Cookie > 0 { var found bool @@ -1098,14 +1103,19 @@ func extractFirstParent(path string) (string, int) { // InsertFileEventInProcess inserts the provided file event in the current node. This function returns true if a new entry was // added, false if the event was dropped. -func (ad *ActivityDump) InsertFileEventInProcess(pan *ProcessActivityNode, fileEvent *model.FileEvent, event *Event, generationType NodeGenerationType) bool { +func (ad *ActivityDump) InsertFileEventInProcess(pan *ProcessActivityNode, fileEvent *model.FileEvent, event *model.Event, generationType NodeGenerationType) bool { var filePath string if generationType != Snapshot { - filePath = event.ResolveFilePath(fileEvent) + filePath = event.FieldHandlers.ResolveFilePath(event, fileEvent) } else { filePath = fileEvent.PathnameStr } + // drop file events with abnormal paths + if event != nil && event.PathResolutionError != nil { + return false + } + parent, nextParentIndex := extractFirstParent(filePath) if nextParentIndex == 0 { return false @@ -1163,8 +1173,8 @@ func (ad *ActivityDump) snapshotProcess(pan *ProcessActivityNode) error { } func (ad *ActivityDump) insertSnapshotedSocket(pan *ProcessActivityNode, p *process.Process, family uint16, ip net.IP, port uint16) { - evt := NewEvent(ad.adm.resolvers, ad.adm.scrubber, ad.adm.probe) - evt.Event.Type = uint32(model.BindEventType) + evt := NewEvent(ad.adm.fieldHandlers) + evt.Type = uint32(model.BindEventType) evt.Bind.SyscallEvent.Retval = 0 evt.Bind.AddrFamily = family @@ -1305,8 +1315,8 @@ func (pan *ProcessActivityNode) snapshotFiles(p *process.Process, ad *ActivityDu continue } - evt := NewEvent(ad.adm.resolvers, ad.adm.scrubber, ad.adm.probe) - evt.Event.Type = uint32(model.FileOpenEventType) + evt := NewEvent(ad.adm.fieldHandlers) + evt.Type = uint32(model.FileOpenEventType) resolvedPath, err = filepath.EvalSymlinks(f) if err != nil { @@ -1418,7 +1428,7 @@ type OpenNode struct { } // NewFileActivityNode returns a new FileActivityNode instance -func NewFileActivityNode(fileEvent *model.FileEvent, event *Event, name string, generationType NodeGenerationType, nodeStats *ActivityDumpNodeStats) *FileActivityNode { +func NewFileActivityNode(fileEvent *model.FileEvent, event *model.Event, name string, generationType NodeGenerationType, nodeStats *ActivityDumpNodeStats) *FileActivityNode { nodeStats.fileNodes++ fan := &FileActivityNode{ Name: name, @@ -1441,12 +1451,12 @@ func (fan *FileActivityNode) getNodeLabel() string { return label } -func (fan *FileActivityNode) enrichFromEvent(event *Event) { +func (fan *FileActivityNode) enrichFromEvent(event *model.Event) { if event == nil { return } if fan.FirstSeen.IsZero() { - fan.FirstSeen = event.ResolveEventTimestamp() + fan.FirstSeen = event.FieldHandlers.ResolveEventTimestamp(event) } switch event.GetEventType() { @@ -1461,7 +1471,7 @@ func (fan *FileActivityNode) enrichFromEvent(event *Event) { // InsertFileEventInFile inserts an event in a FileActivityNode. This function returns true if a new entry was added, false if // the event was dropped. -func (ad *ActivityDump) InsertFileEventInFile(fan *FileActivityNode, fileEvent *model.FileEvent, event *Event, remainingPath string, generationType NodeGenerationType) bool { +func (ad *ActivityDump) InsertFileEventInFile(fan *FileActivityNode, fileEvent *model.FileEvent, event *model.Event, remainingPath string, generationType NodeGenerationType) bool { currentFan := fan currentPath := remainingPath somethingChanged := false diff --git a/pkg/security/probe/activity_dump_manager.go b/pkg/security/probe/activity_dump_manager.go index bfbec0a44ec090..2f33bfc8fb8a4d 100644 --- a/pkg/security/probe/activity_dump_manager.go +++ b/pkg/security/probe/activity_dump_manager.go @@ -18,7 +18,7 @@ import ( "github.com/cilium/ebpf" coreconfig "github.com/DataDog/datadog-agent/pkg/config" - pconfig "github.com/DataDog/datadog-agent/pkg/process/config" + "github.com/DataDog/datadog-agent/pkg/process/procutil" "github.com/DataDog/datadog-agent/pkg/security/api" "github.com/DataDog/datadog-agent/pkg/security/config" "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" @@ -38,12 +38,11 @@ func areCGroupADsEnabled(c *config.Config) bool { // ActivityDumpManager is used to manage ActivityDumps type ActivityDumpManager struct { sync.RWMutex - probe *Probe config *config.Config statsdClient statsd.ClientInterface + fieldHandlers *FieldHandlers resolvers *Resolvers kernelVersion *kernel.Version - scrubber *pconfig.DataScrubber manager *manager.Manager tracedPIDsMap *ebpf.Map @@ -169,7 +168,7 @@ func (adm *ActivityDumpManager) resolveTags() { // NewActivityDumpManager returns a new ActivityDumpManager instance func NewActivityDumpManager(p *Probe, config *config.Config, statsdClient statsd.ClientInterface, resolvers *Resolvers, - kernelVersion *kernel.Version, scrubber *pconfig.DataScrubber, manager *manager.Manager) (*ActivityDumpManager, error) { + kernelVersion *kernel.Version, scrubber *procutil.DataScrubber, manager *manager.Manager) (*ActivityDumpManager, error) { tracedPIDs, err := managerhelper.Map(manager, "traced_pids") if err != nil { return nil, err @@ -203,9 +202,9 @@ func NewActivityDumpManager(p *Probe, config *config.Config, statsdClient statsd adm := &ActivityDumpManager{ config: config, statsdClient: statsdClient, + fieldHandlers: p.fieldHandlers, resolvers: resolvers, kernelVersion: kernelVersion, - scrubber: scrubber, manager: manager, tracedPIDsMap: tracedPIDs, tracedCommsMap: tracedComms, @@ -240,7 +239,7 @@ func (adm *ActivityDumpManager) prepareContextTags() { adm.contextTags = append(adm.contextTags, fmt.Sprintf("host:%s", adm.hostname)) // merge tags from config - for _, tag := range coreconfig.GetConfiguredTags(true) { + for _, tag := range coreconfig.GetGlobalConfiguredTags(true) { if strings.HasPrefix(tag, "host") { continue } @@ -424,7 +423,7 @@ func (adm *ActivityDumpManager) StopActivityDump(params *api.ActivityDumpStopPar } // ProcessEvent processes a new event and insert it in an activity dump if applicable -func (adm *ActivityDumpManager) ProcessEvent(event *Event) { +func (adm *ActivityDumpManager) ProcessEvent(event *model.Event) { // is this event sampled for activity dumps ? if !event.IsActivityDumpSample { return diff --git a/pkg/security/probe/activity_dump_manager_test.go b/pkg/security/probe/activity_dump_manager_test.go index 1cd294012c996d..e62ee17a9fd549 100644 --- a/pkg/security/probe/activity_dump_manager_test.go +++ b/pkg/security/probe/activity_dump_manager_test.go @@ -346,19 +346,15 @@ func TestActivityDumpManager_getOverweightDumps(t *testing.T) { } for _, tt := range tests { - probe := &Probe{ - StatsdClient: &statsd.NoOpClient{}, - Config: &config.Config{ - ActivityDumpMaxDumpSize: func() int { - return 2048 - }, - }} t.Run(tt.name, func(t *testing.T) { adm := &ActivityDumpManager{ - activeDumps: tt.fields.activeDumps, - probe: probe, - config: probe.Config, - statsdClient: probe.StatsdClient, + activeDumps: tt.fields.activeDumps, + config: &config.Config{ + ActivityDumpMaxDumpSize: func() int { + return 2048 + }, + }, + statsdClient: &statsd.NoOpClient{}, ignoreFromSnapshot: make(map[string]bool), } diff --git a/pkg/security/probe/activity_dump_proto_dec_v1.go b/pkg/security/probe/activity_dump_proto_dec_v1.go index dcb124b14b3aae..c01b8b526d562d 100644 --- a/pkg/security/probe/activity_dump_proto_dec_v1.go +++ b/pkg/security/probe/activity_dump_proto_dec_v1.go @@ -129,7 +129,7 @@ func protoDecodeProcessNode(p *adproto.ProcessInfo) model.Process { Credentials: protoDecodeCredentials(p.Credentials), - ScrubbedArgv: make([]string, len(p.Args)), + Argv: make([]string, len(p.Args)), Argv0: p.Argv0, ArgsTruncated: p.ArgsTruncated, @@ -137,7 +137,7 @@ func protoDecodeProcessNode(p *adproto.ProcessInfo) model.Process { EnvsTruncated: p.EnvsTruncated, } - copy(mp.ScrubbedArgv, p.Args) + copy(mp.Argv, p.Args) copy(mp.Envs, p.Envs) return mp } diff --git a/pkg/security/probe/activity_dump_test.go b/pkg/security/probe/activity_dump_test.go index 83f76f0001cb6a..05fb7b7326429e 100644 --- a/pkg/security/probe/activity_dump_test.go +++ b/pkg/security/probe/activity_dump_test.go @@ -116,11 +116,16 @@ func TestInsertFileEvent(t *testing.T) { ad := NewEmptyActivityDump() for _, path := range pathToInserts { - fileEvent := &model.FileEvent{ - IsPathnameStrResolved: true, - PathnameStr: path, + event := &model.Event{ + Open: model.OpenEvent{ + File: model.FileEvent{ + IsPathnameStrResolved: true, + PathnameStr: path, + }, + }, + FieldHandlers: &model.DefaultFieldHandlers{}, } - ad.InsertFileEventInProcess(&pan, fileEvent, nil, Unknown) + ad.InsertFileEventInProcess(&pan, &event.Open.File, event, Unknown) } var builder strings.Builder diff --git a/pkg/security/probe/applier.go b/pkg/security/probe/applier.go index a92ecfad2dc02c..1e523f53abce26 100644 --- a/pkg/security/probe/applier.go +++ b/pkg/security/probe/applier.go @@ -14,6 +14,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/config" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -53,8 +54,8 @@ func (rsa *RuleSetApplier) applyApprovers(eventType eval.EventType, approvers ru // applyDefaultPolicy this will apply the deny policy if kernel filters are enabled func (rsa *RuleSetApplier) applyDefaultFilterPolicies() { - var model Model - for _, eventType := range model.GetEventTypes() { + var m model.Model + for _, eventType := range m.GetEventTypes() { if !rsa.config.EnableKernelFilters { _ = rsa.applyFilterPolicy(eventType, PolicyModeNoFilter, math.MaxUint8) } else { diff --git a/pkg/security/probe/approvers_test.go b/pkg/security/probe/approvers_test.go index a1ac1a57c389e2..c83f7939c78de4 100644 --- a/pkg/security/probe/approvers_test.go +++ b/pkg/security/probe/approvers_test.go @@ -30,8 +30,7 @@ func TestApproverAncestors1(t *testing.T) { WithEventTypeEnabled(enabled). WithLogger(seclog.DefaultLogger) - m := &model.Model{} - rs := rules.NewRuleSet(m, m.NewEvent, &opts, &evalOpts, &eval.MacroStore{}) + rs := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path == "/etc/passwd" && process.ancestors.file.name == "vipw"`, `open.file.path == "/etc/shadow" && process.ancestors.file.name == "vipw"`) capabilities, exists := allCapabilities["open"] @@ -62,8 +61,7 @@ func TestApproverAncestors2(t *testing.T) { WithEventTypeEnabled(enabled). WithLogger(seclog.DefaultLogger) - m := &model.Model{} - rs := rules.NewRuleSet(m, m.NewEvent, &opts, &evalOpts, &eval.MacroStore{}) + rs := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `(open.file.path == "/etc/shadow" || open.file.path == "/etc/gshadow") && process.ancestors.file.path not in ["/usr/bin/dpkg"]`) capabilities, exists := allCapabilities["open"] if !exists { @@ -91,8 +89,7 @@ func TestApproverAncestors3(t *testing.T) { WithEventTypeEnabled(enabled). WithLogger(seclog.DefaultLogger) - m := &model.Model{} - rs := rules.NewRuleSet(m, m.NewEvent, &opts, &evalOpts, &eval.MacroStore{}) + rs := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "/var/run/secrets/eks.amazonaws.com/serviceaccount/*/token" && process.file.path not in ["/bin/kubectl"]`) capabilities, exists := allCapabilities["open"] if !exists { diff --git a/pkg/security/probe/constantfetch/btfhub/constants.json b/pkg/security/probe/constantfetch/btfhub/constants.json index 912fd378f08e84..da4af9740735bd 100644 --- a/pkg/security/probe/constantfetch/btfhub/constants.json +++ b/pkg/security/probe/constantfetch/btfhub/constants.json @@ -1,5 +1,5 @@ { - "commit": "cc5e57e0fc5d9ae5064ee3cfbb34dc9d811cfbae", + "commit": "398c0e61462ac17f87da4c37d9495eaadbf4ad35", "constants": [ { "binprm_file_offset": 168, @@ -15,6 +15,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "pid_level_offset": 4, @@ -43,6 +46,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "pid_level_offset": 4, @@ -71,6 +77,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "nf_conn_ct_net_offset": 144, @@ -100,6 +109,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "pid_level_offset": 4, @@ -128,6 +140,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "pid_level_offset": 4, @@ -156,6 +171,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "nf_conn_ct_net_offset": 144, @@ -182,6 +200,9 @@ "flowi4_uli_offset": 40, "flowi6_saddr_offset": 48, "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 296, "net_ns_offset": 136, "pid_level_offset": 4, @@ -207,6 +228,9 @@ "flowi4_uli_offset": 40, "flowi6_saddr_offset": 48, "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 296, "net_ns_offset": 136, "pid_level_offset": 4, @@ -231,6 +255,9 @@ "flowi4_uli_offset": 28, "flowi6_saddr_offset": 36, "flowi6_uli_offset": 56, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 256, "net_proc_inum_offset": 72, "pid_level_offset": 4, @@ -255,6 +282,9 @@ "flowi4_uli_offset": 28, "flowi6_saddr_offset": 36, "flowi6_uli_offset": 56, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 256, "pid_level_offset": 4, "pid_numbers_offset": 48, @@ -278,6 +308,9 @@ "flowi4_uli_offset": 28, "flowi6_saddr_offset": 36, "flowi6_uli_offset": 56, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 288, "pid_level_offset": 4, "pid_numbers_offset": 48, @@ -303,6 +336,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 48, @@ -330,6 +366,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 48, @@ -357,6 +396,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 48, @@ -387,6 +429,9 @@ "flowi4_uli_offset": 64, "flowi6_saddr_offset": 72, "flowi6_uli_offset": 92, + "linux_binprm_argc_offset": 320, + "linux_binprm_envc_offset": 324, + "linux_binprm_p_offset": 280, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 56, @@ -417,6 +462,9 @@ "flowi4_uli_offset": 64, "flowi6_saddr_offset": 72, "flowi6_uli_offset": 92, + "linux_binprm_argc_offset": 320, + "linux_binprm_envc_offset": 324, + "linux_binprm_p_offset": 280, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 56, @@ -447,6 +495,9 @@ "flowi4_uli_offset": 64, "flowi6_saddr_offset": 72, "flowi6_uli_offset": 92, + "linux_binprm_argc_offset": 320, + "linux_binprm_envc_offset": 324, + "linux_binprm_p_offset": 280, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 56, @@ -477,6 +528,9 @@ "flowi4_uli_offset": 64, "flowi6_saddr_offset": 72, "flowi6_uli_offset": 92, + "linux_binprm_argc_offset": 320, + "linux_binprm_envc_offset": 324, + "linux_binprm_p_offset": 280, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 56, @@ -507,6 +561,9 @@ "flowi4_uli_offset": 64, "flowi6_saddr_offset": 72, "flowi6_uli_offset": 92, + "linux_binprm_argc_offset": 320, + "linux_binprm_envc_offset": 324, + "linux_binprm_p_offset": 280, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 48, @@ -537,6 +594,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 56, @@ -567,6 +627,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 56, @@ -591,6 +654,9 @@ "flowi4_uli_offset": 28, "flowi6_saddr_offset": 36, "flowi6_uli_offset": 56, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 288, "pid_level_offset": 4, "pid_numbers_offset": 48, @@ -615,6 +681,9 @@ "flowi4_uli_offset": 40, "flowi6_saddr_offset": 48, "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 288, "pid_level_offset": 4, "pid_numbers_offset": 48, @@ -646,6 +715,9 @@ "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, "iokiocb_ctx_offset": 80, + "linux_binprm_argc_offset": 88, + "linux_binprm_envc_offset": 92, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 256, "pid_level_offset": 4, "pid_numbers_offset": 96, @@ -677,6 +749,9 @@ "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, "iokiocb_ctx_offset": 96, + "linux_binprm_argc_offset": 72, + "linux_binprm_envc_offset": 76, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 80, @@ -706,53 +781,9 @@ "flowi4_uli_offset": 28, "flowi6_saddr_offset": 36, "flowi6_uli_offset": 56, - "net_device_ifindex_offset": 192, - "net_proc_inum_offset": 72, - "pid_level_offset": 4, - "pid_numbers_offset": 48, - "pipe_inode_info_bufs_offset": 128, - "sb_magic_offset": 88, - "sizeof_inode": 584, - "sizeof_upid": 32, - "sock_common_skc_family_offset": 16, - "sock_common_skc_net_offset": 48, - "socket_sock_offset": 32, - "tty_name_offset": 312, - "tty_offset": 416 - }, - { - "binprm_file_offset": 168, - "creds_uid_offset": 4, - "dentry_sb_offset": 104, - "flowi4_saddr_offset": 20, - "flowi4_uli_offset": 28, - "flowi6_saddr_offset": 36, - "flowi6_uli_offset": 56, - "net_device_ifindex_offset": 192, - "net_proc_inum_offset": 72, - "pid_level_offset": 4, - "pid_numbers_offset": 48, - "pipe_inode_info_bufs_offset": 128, - "sb_magic_offset": 88, - "sizeof_inode": 584, - "sizeof_upid": 32, - "sock_common_skc_family_offset": 16, - "sock_common_skc_net_offset": 48, - "socket_sock_offset": 32, - "tty_name_offset": 312, - "tty_offset": 416 - }, - { - "binprm_file_offset": 168, - "bpf_map_type_offset": 4, - "bpf_prog_aux_id_offset": 24, - "bpf_prog_aux_offset": 0, - "creds_uid_offset": 4, - "dentry_sb_offset": 104, - "flowi4_saddr_offset": 20, - "flowi4_uli_offset": 28, - "flowi6_saddr_offset": 36, - "flowi6_uli_offset": 56, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 192, "net_proc_inum_offset": 72, "pid_level_offset": 4, @@ -783,6 +814,9 @@ "flowi4_uli_offset": 28, "flowi6_saddr_offset": 36, "flowi6_uli_offset": 56, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 192, "net_proc_inum_offset": 72, "pid_level_offset": 4, @@ -814,6 +848,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 56, @@ -844,6 +881,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 56, @@ -875,6 +915,9 @@ "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, "iokiocb_ctx_offset": 96, + "linux_binprm_argc_offset": 72, + "linux_binprm_envc_offset": 76, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 80, @@ -905,6 +948,9 @@ "flowi4_uli_offset": 64, "flowi6_saddr_offset": 72, "flowi6_uli_offset": 92, + "linux_binprm_argc_offset": 320, + "linux_binprm_envc_offset": 324, + "linux_binprm_p_offset": 280, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "pid_level_offset": 4, @@ -936,6 +982,9 @@ "flowi4_uli_offset": 64, "flowi6_saddr_offset": 72, "flowi6_uli_offset": 92, + "linux_binprm_argc_offset": 320, + "linux_binprm_envc_offset": 324, + "linux_binprm_p_offset": 280, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "pid_level_offset": 4, @@ -967,6 +1016,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 112, "nf_conn_ct_net_offset": 144, @@ -999,6 +1051,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 248, "nf_conn_ct_net_offset": 192, @@ -1014,6 +1069,78 @@ "tty_name_offset": 496, "tty_offset": 440 }, + { + "binprm_file_offset": 64, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 88, + "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 28, + "bpf_prog_aux_name_offset": 496, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "iokiocb_ctx_offset": 80, + "linux_binprm_argc_offset": 88, + "linux_binprm_envc_offset": 92, + "linux_binprm_p_offset": 24, + "net_device_ifindex_offset": 256, + "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 96, + "pipe_inode_info_bufs_offset": 152, + "sb_magic_offset": 96, + "sizeof_inode": 600, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 24, + "tty_name_offset": 360, + "tty_offset": 400 + }, + { + "binprm_file_offset": 64, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 88, + "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 28, + "bpf_prog_aux_name_offset": 512, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 168, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "iokiocb_ctx_offset": 80, + "linux_binprm_argc_offset": 88, + "linux_binprm_envc_offset": 92, + "linux_binprm_p_offset": 24, + "net_device_ifindex_offset": 256, + "net_ns_offset": 264, + "nf_conn_ct_net_offset": 192, + "pid_level_offset": 4, + "pid_numbers_offset": 176, + "pipe_inode_info_bufs_offset": 240, + "sb_magic_offset": 96, + "sizeof_inode": 760, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 24, + "tty_name_offset": 488, + "tty_offset": 440 + }, { "binprm_file_offset": 168, "bpf_map_type_offset": 8, @@ -1025,6 +1152,9 @@ "flowi4_uli_offset": 40, "flowi6_saddr_offset": 48, "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 296, "net_ns_offset": 136, "pid_level_offset": 4, @@ -1050,6 +1180,9 @@ "flowi4_uli_offset": 40, "flowi6_saddr_offset": 48, "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 296, "net_ns_offset": 272, "pid_level_offset": 4, @@ -1081,6 +1214,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 112, "pid_level_offset": 4, @@ -1113,6 +1249,9 @@ "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, "iokiocb_ctx_offset": 88, + "linux_binprm_argc_offset": 72, + "linux_binprm_envc_offset": 76, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "nf_conn_ct_net_offset": 144, @@ -1145,6 +1284,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 112, "pid_level_offset": 4, @@ -1177,6 +1319,9 @@ "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, "iokiocb_ctx_offset": 88, + "linux_binprm_argc_offset": 72, + "linux_binprm_envc_offset": 76, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "nf_conn_ct_net_offset": 144, @@ -1209,6 +1354,9 @@ "flowi4_uli_offset": 40, "flowi6_saddr_offset": 48, "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 200, + "linux_binprm_envc_offset": 204, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 112, "pid_level_offset": 4, @@ -1241,6 +1389,9 @@ "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, "iokiocb_ctx_offset": 88, + "linux_binprm_argc_offset": 72, + "linux_binprm_envc_offset": 76, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 256, "net_ns_offset": 120, "nf_conn_ct_net_offset": 144, @@ -1273,6 +1424,9 @@ "flowi4_uli_offset": 40, "flowi6_saddr_offset": 48, "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 200, + "linux_binprm_envc_offset": 204, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 112, "pid_level_offset": 4, @@ -1287,105 +1441,6 @@ "tty_name_offset": 368, "tty_offset": 408 }, - { - "binprm_file_offset": 48, - "bpf_map_id_offset": 48, - "bpf_map_name_offset": 168, - "bpf_map_type_offset": 24, - "bpf_prog_attach_type_offset": 8, - "bpf_prog_aux_id_offset": 24, - "bpf_prog_aux_name_offset": 176, - "bpf_prog_aux_offset": 32, - "bpf_prog_tag_offset": 20, - "bpf_prog_type_offset": 4, - "creds_uid_offset": 4, - "dentry_sb_offset": 104, - "flowi4_saddr_offset": 40, - "flowi4_uli_offset": 48, - "flowi6_saddr_offset": 56, - "flowi6_uli_offset": 76, - "iokiocb_ctx_offset": 88, - "net_device_ifindex_offset": 264, - "net_ns_offset": 112, - "nf_conn_ct_net_offset": 144, - "pid_level_offset": 4, - "pid_numbers_offset": 80, - "pipe_inode_info_bufs_offset": 120, - "sb_magic_offset": 96, - "sizeof_inode": 584, - "sizeof_upid": 16, - "sock_common_skc_family_offset": 16, - "sock_common_skc_net_offset": 48, - "socket_sock_offset": 24, - "tty_name_offset": 368, - "tty_offset": 400 - }, - { - "binprm_file_offset": 64, - "bpf_map_id_offset": 48, - "bpf_map_name_offset": 88, - "bpf_map_type_offset": 24, - "bpf_prog_attach_type_offset": 8, - "bpf_prog_aux_id_offset": 28, - "bpf_prog_aux_name_offset": 416, - "bpf_prog_aux_offset": 32, - "bpf_prog_tag_offset": 20, - "bpf_prog_type_offset": 4, - "creds_uid_offset": 4, - "dentry_sb_offset": 104, - "flowi4_saddr_offset": 40, - "flowi4_uli_offset": 48, - "flowi6_saddr_offset": 56, - "flowi6_uli_offset": 76, - "iokiocb_ctx_offset": 80, - "net_device_ifindex_offset": 256, - "net_ns_offset": 120, - "nf_conn_ct_net_offset": 144, - "pid_level_offset": 4, - "pid_numbers_offset": 96, - "pipe_inode_info_bufs_offset": 152, - "sb_magic_offset": 96, - "sizeof_inode": 600, - "sizeof_upid": 16, - "sock_common_skc_family_offset": 16, - "sock_common_skc_net_offset": 48, - "socket_sock_offset": 24, - "tty_name_offset": 368, - "tty_offset": 408 - }, - { - "binprm_file_offset": 48, - "bpf_map_id_offset": 48, - "bpf_map_name_offset": 168, - "bpf_map_type_offset": 24, - "bpf_prog_attach_type_offset": 8, - "bpf_prog_aux_id_offset": 24, - "bpf_prog_aux_name_offset": 176, - "bpf_prog_aux_offset": 32, - "bpf_prog_tag_offset": 20, - "bpf_prog_type_offset": 4, - "creds_uid_offset": 4, - "dentry_sb_offset": 104, - "flowi4_saddr_offset": 40, - "flowi4_uli_offset": 48, - "flowi6_saddr_offset": 56, - "flowi6_uli_offset": 76, - "iokiocb_ctx_offset": 88, - "net_device_ifindex_offset": 264, - "net_ns_offset": 112, - "nf_conn_ct_net_offset": 144, - "pid_level_offset": 4, - "pid_numbers_offset": 80, - "pipe_inode_info_bufs_offset": 120, - "sb_magic_offset": 96, - "sizeof_inode": 584, - "sizeof_upid": 16, - "sock_common_skc_family_offset": 16, - "sock_common_skc_net_offset": 48, - "socket_sock_offset": 24, - "tty_name_offset": 368, - "tty_offset": 408 - }, { "binprm_file_offset": 168, "bpf_map_id_offset": 48, @@ -1400,6 +1455,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "pid_level_offset": 4, @@ -1428,6 +1486,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "nf_conn_ct_net_offset": 144, @@ -1461,6 +1522,9 @@ "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, "iokiocb_ctx_offset": 96, + "linux_binprm_argc_offset": 72, + "linux_binprm_envc_offset": 76, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "nf_conn_ct_net_offset": 144, @@ -1494,6 +1558,9 @@ "flowi6_saddr_offset": 72, "flowi6_uli_offset": 92, "iokiocb_ctx_offset": 96, + "linux_binprm_argc_offset": 72, + "linux_binprm_envc_offset": 76, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "nf_conn_ct_net_offset": 144, @@ -1527,6 +1594,9 @@ "flowi6_saddr_offset": 72, "flowi6_uli_offset": 92, "iokiocb_ctx_offset": 80, + "linux_binprm_argc_offset": 72, + "linux_binprm_envc_offset": 76, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "nf_conn_ct_net_offset": 144, @@ -1556,6 +1626,9 @@ "flowi4_uli_offset": 28, "flowi6_saddr_offset": 36, "flowi6_uli_offset": 56, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 192, "pid_level_offset": 4, "pid_numbers_offset": 48, @@ -1587,6 +1660,9 @@ "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, "iokiocb_ctx_offset": 96, + "linux_binprm_argc_offset": 72, + "linux_binprm_envc_offset": 76, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "nf_conn_ct_net_offset": 144, @@ -1618,6 +1694,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "pid_level_offset": 4, @@ -1648,6 +1727,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "pid_level_offset": 4, @@ -1664,67 +1746,148 @@ }, { "binprm_file_offset": 168, - "bpf_map_id_offset": 48, - "bpf_map_name_offset": 176, - "bpf_map_type_offset": 24, - "bpf_prog_aux_id_offset": 16, - "bpf_prog_aux_name_offset": 128, - "bpf_prog_aux_offset": 24, - "bpf_prog_tag_offset": 16, - "bpf_prog_type_offset": 4, + "bpf_map_type_offset": 8, + "bpf_prog_aux_offset": 16, + "bpf_prog_type_offset": 8, "creds_uid_offset": 4, "dentry_sb_offset": 104, - "flowi4_saddr_offset": 40, - "flowi4_uli_offset": 48, - "flowi6_saddr_offset": 56, - "flowi6_uli_offset": 76, - "net_device_ifindex_offset": 264, - "net_ns_offset": 120, - "nf_conn_ct_net_offset": 144, + "flowi4_saddr_offset": 32, + "flowi4_uli_offset": 40, + "flowi6_saddr_offset": 48, + "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 288, + "net_ns_offset": 128, "pid_level_offset": 4, "pid_numbers_offset": 48, - "pipe_inode_info_bufs_offset": 120, + "pipe_inode_info_bufs_offset": 128, "sb_magic_offset": 96, - "sizeof_inode": 608, - "sizeof_upid": 16, + "sizeof_inode": 560, + "sizeof_upid": 32, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, "socket_sock_offset": 32, - "tty_name_offset": 368, - "tty_offset": 368 + "tty_name_offset": 400, + "tty_offset": 408 }, { - "binprm_file_offset": 48, - "bpf_map_id_offset": 48, - "bpf_map_name_offset": 168, - "bpf_map_type_offset": 24, - "bpf_prog_attach_type_offset": 8, - "bpf_prog_aux_id_offset": 24, - "bpf_prog_aux_name_offset": 176, - "bpf_prog_aux_offset": 32, - "bpf_prog_tag_offset": 20, - "bpf_prog_type_offset": 4, + "binprm_file_offset": 168, + "bpf_map_type_offset": 8, + "bpf_prog_aux_offset": 16, + "bpf_prog_type_offset": 8, "creds_uid_offset": 4, "dentry_sb_offset": 104, - "flowi4_saddr_offset": 40, - "flowi4_uli_offset": 48, - "flowi6_saddr_offset": 56, - "flowi6_uli_offset": 76, - "iokiocb_ctx_offset": 96, + "flowi4_saddr_offset": 32, + "flowi4_uli_offset": 40, + "flowi6_saddr_offset": 48, + "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 288, + "net_ns_offset": 128, + "pid_level_offset": 4, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 128, + "sb_magic_offset": 96, + "sizeof_inode": 568, + "sizeof_upid": 32, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 400, + "tty_offset": 408 + }, + { + "binprm_file_offset": 168, + "bpf_map_type_offset": 8, + "bpf_prog_aux_offset": 16, + "bpf_prog_type_offset": 8, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 32, + "flowi4_uli_offset": 40, + "flowi6_saddr_offset": 48, + "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 288, + "net_ns_offset": 128, + "pid_level_offset": 4, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 128, + "sb_magic_offset": 96, + "sizeof_inode": 568, + "sizeof_upid": 32, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 400, + "tty_offset": 384 + }, + { + "binprm_file_offset": 168, + "bpf_map_type_offset": 4, + "bpf_prog_aux_offset": 16, + "bpf_prog_type_offset": 8, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 32, + "flowi4_uli_offset": 40, + "flowi6_saddr_offset": 48, + "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 288, + "net_ns_offset": 128, + "pid_level_offset": 4, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 128, + "sb_magic_offset": 96, + "sizeof_inode": 560, + "sizeof_upid": 32, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 400, + "tty_offset": 408 + }, + { + "binprm_file_offset": 168, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 112, + "bpf_map_type_offset": 24, + "bpf_prog_aux_id_offset": 16, + "bpf_prog_aux_name_offset": 128, + "bpf_prog_aux_offset": 24, + "bpf_prog_tag_offset": 16, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, - "nf_conn_ct_net_offset": 144, "pid_level_offset": 4, - "pid_numbers_offset": 80, + "pid_numbers_offset": 48, "pipe_inode_info_bufs_offset": 120, "sb_magic_offset": 96, - "sizeof_inode": 600, + "sizeof_inode": 608, "sizeof_upid": 16, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, - "socket_sock_offset": 24, + "socket_sock_offset": 32, "tty_name_offset": 368, - "tty_offset": 400 + "tty_offset": 368 }, { "binprm_file_offset": 168, @@ -1742,9 +1905,11 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, - "nf_conn_ct_net_offset": 144, "pid_level_offset": 4, "pid_numbers_offset": 48, "pipe_inode_info_bufs_offset": 120, @@ -1773,8 +1938,12 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, "pid_level_offset": 4, "pid_numbers_offset": 48, "pipe_inode_info_bufs_offset": 120, @@ -1803,19 +1972,22 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "pid_level_offset": 4, "pid_numbers_offset": 48, "pipe_inode_info_bufs_offset": 120, "sb_magic_offset": 96, - "sizeof_inode": 608, + "sizeof_inode": 600, "sizeof_upid": 16, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, "socket_sock_offset": 32, "tty_name_offset": 368, - "tty_offset": 368 + "tty_offset": 376 }, { "binprm_file_offset": 168, @@ -1833,6 +2005,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "nf_conn_ct_net_offset": 144, @@ -1864,6 +2039,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "pid_level_offset": 4, @@ -1878,6 +2056,76 @@ "tty_name_offset": 368, "tty_offset": 376 }, + { + "binprm_file_offset": 168, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 176, + "bpf_map_type_offset": 24, + "bpf_prog_aux_id_offset": 16, + "bpf_prog_aux_name_offset": 128, + "bpf_prog_aux_offset": 24, + "bpf_prog_tag_offset": 16, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 264, + "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 120, + "sb_magic_offset": 96, + "sizeof_inode": 608, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 368, + "tty_offset": 368 + }, + { + "binprm_file_offset": 48, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 168, + "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 24, + "bpf_prog_aux_name_offset": 176, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "iokiocb_ctx_offset": 96, + "linux_binprm_argc_offset": 72, + "linux_binprm_envc_offset": 76, + "linux_binprm_p_offset": 24, + "net_device_ifindex_offset": 264, + "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 80, + "pipe_inode_info_bufs_offset": 120, + "sb_magic_offset": 96, + "sizeof_inode": 600, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 24, + "tty_name_offset": 368, + "tty_offset": 400 + }, { "binprm_file_offset": 168, "bpf_map_id_offset": 48, @@ -1894,6 +2142,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "nf_conn_ct_net_offset": 144, @@ -1909,6 +2160,41 @@ "tty_name_offset": 368, "tty_offset": 376 }, + { + "binprm_file_offset": 168, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 176, + "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 16, + "bpf_prog_aux_name_offset": 152, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 264, + "net_ns_offset": 112, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 120, + "sb_magic_offset": 96, + "sizeof_inode": 600, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 368, + "tty_offset": 368 + }, { "binprm_file_offset": 48, "bpf_map_id_offset": 48, @@ -1927,6 +2213,9 @@ "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, "iokiocb_ctx_offset": 96, + "linux_binprm_argc_offset": 72, + "linux_binprm_envc_offset": 76, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "nf_conn_ct_net_offset": 144, @@ -1960,6 +2249,9 @@ "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, "iokiocb_ctx_offset": 80, + "linux_binprm_argc_offset": 88, + "linux_binprm_envc_offset": 92, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 256, "net_ns_offset": 120, "nf_conn_ct_net_offset": 144, @@ -1993,6 +2285,9 @@ "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, "iokiocb_ctx_offset": 80, + "linux_binprm_argc_offset": 88, + "linux_binprm_envc_offset": 92, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 256, "net_ns_offset": 120, "nf_conn_ct_net_offset": 144, @@ -2026,6 +2321,9 @@ "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, "iokiocb_ctx_offset": 80, + "linux_binprm_argc_offset": 88, + "linux_binprm_envc_offset": 92, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 256, "net_ns_offset": 120, "nf_conn_ct_net_offset": 144, @@ -2059,6 +2357,9 @@ "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, "iokiocb_ctx_offset": 80, + "linux_binprm_argc_offset": 88, + "linux_binprm_envc_offset": 92, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 256, "net_ns_offset": 120, "nf_conn_ct_net_offset": 144, @@ -2092,6 +2393,45 @@ "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, "iokiocb_ctx_offset": 80, + "linux_binprm_argc_offset": 88, + "linux_binprm_envc_offset": 92, + "linux_binprm_p_offset": 24, + "net_device_ifindex_offset": 256, + "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 96, + "pipe_inode_info_bufs_offset": 152, + "sb_magic_offset": 96, + "sizeof_inode": 600, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 24, + "tty_name_offset": 368, + "tty_offset": 408 + }, + { + "binprm_file_offset": 64, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 88, + "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 28, + "bpf_prog_aux_name_offset": 416, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "iokiocb_ctx_offset": 80, + "linux_binprm_argc_offset": 88, + "linux_binprm_envc_offset": 92, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 256, "net_ns_offset": 120, "nf_conn_ct_net_offset": 144, @@ -2571,6 +2911,20 @@ "uname_release": "4.14.296-222.539.amzn2.aarch64", "cindex": 2 }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.299-223.520.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.301-224.520.amzn2.aarch64", + "cindex": 2 + }, { "distrib": "amzn", "version": "2", @@ -3089,6 +3443,20 @@ "uname_release": "4.14.296-222.539.amzn2.x86_64", "cindex": 5 }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.299-223.520.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.301-224.520.amzn2.x86_64", + "cindex": 5 + }, { "distrib": "amzn", "version": "2", @@ -4423,6868 +4791,9962 @@ "distrib": "centos", "version": "7", "arch": "x86_64", - "uname_release": "3.10.0-1160.el7.x86_64", + "uname_release": "3.10.0-1160.80.1.el7.x86_64", "cindex": 25 }, { "distrib": "centos", "version": "7", "arch": "x86_64", - "uname_release": "3.10.0-123.1.2.el7.x86_64", - "cindex": 26 + "uname_release": "3.10.0-1160.el7.x86_64", + "cindex": 25 }, { "distrib": "centos", "version": "7", "arch": "x86_64", - "uname_release": "3.10.0-123.13.1.el7.x86_64", + "uname_release": "3.10.0-957.1.3.el7.x86_64", "cindex": 26 }, { "distrib": "centos", "version": "7", "arch": "x86_64", - "uname_release": "3.10.0-123.13.2.el7.x86_64", + "uname_release": "3.10.0-957.10.1.el7.x86_64", "cindex": 26 }, { "distrib": "centos", "version": "7", "arch": "x86_64", - "uname_release": "3.10.0-123.20.1.el7.x86_64", + "uname_release": "3.10.0-957.12.1.el7.x86_64", "cindex": 26 }, { "distrib": "centos", "version": "7", "arch": "x86_64", - "uname_release": "3.10.0-123.4.2.el7.x86_64", + "uname_release": "3.10.0-957.12.2.el7.x86_64", "cindex": 26 }, { "distrib": "centos", "version": "7", "arch": "x86_64", - "uname_release": "3.10.0-123.4.4.el7.x86_64", + "uname_release": "3.10.0-957.21.2.el7.x86_64", "cindex": 26 }, { "distrib": "centos", "version": "7", "arch": "x86_64", - "uname_release": "3.10.0-123.6.3.el7.x86_64", + "uname_release": "3.10.0-957.21.3.el7.x86_64", "cindex": 26 }, { "distrib": "centos", "version": "7", "arch": "x86_64", - "uname_release": "3.10.0-123.8.1.el7.x86_64", + "uname_release": "3.10.0-957.27.2.el7.x86_64", "cindex": 26 }, { "distrib": "centos", "version": "7", "arch": "x86_64", - "uname_release": "3.10.0-123.9.2.el7.x86_64", + "uname_release": "3.10.0-957.5.1.el7.x86_64", "cindex": 26 }, { "distrib": "centos", "version": "7", "arch": "x86_64", - "uname_release": "3.10.0-123.9.3.el7.x86_64", + "uname_release": "3.10.0-957.el7.x86_64", "cindex": 26 }, { "distrib": "centos", "version": "7", "arch": "x86_64", - "uname_release": "3.10.0-123.el7.x86_64", - "cindex": 26 + "uname_release": "4.19.104-300.el7.x86_64", + "cindex": 27 }, { "distrib": "centos", "version": "7", "arch": "x86_64", - "uname_release": "3.10.0-229.1.2.el7.x86_64", - "cindex": 26 + "uname_release": "4.19.110-300.el7.x86_64", + "cindex": 27 }, { "distrib": "centos", "version": "7", "arch": "x86_64", - "uname_release": "3.10.0-229.11.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.19.113-300.el7.x86_64", + "cindex": 28 }, { "distrib": "centos", "version": "7", "arch": "x86_64", - "uname_release": "3.10.0-229.14.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.19.84-300.el7.x86_64", + "cindex": 27 }, { "distrib": "centos", "version": "7", "arch": "x86_64", - "uname_release": "3.10.0-229.20.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.19.94-300.el7.x86_64", + "cindex": 27 }, { "distrib": "centos", "version": "7", "arch": "x86_64", - "uname_release": "3.10.0-229.4.2.el7.x86_64", - "cindex": 26 + "uname_release": "5.4.28-200.el7.x86_64", + "cindex": 29 }, { "distrib": "centos", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-229.7.2.el7.x86_64", - "cindex": 26 + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.0.3.el8_1.aarch64", + "cindex": 30 }, { "distrib": "centos", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-229.el7.x86_64", - "cindex": 26 + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.3.1.el8_1.aarch64", + "cindex": 30 }, { "distrib": "centos", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-327.10.1.el7.x86_64", - "cindex": 26 + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.5.1.el8_1.aarch64", + "cindex": 30 }, { "distrib": "centos", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-327.13.1.el7.x86_64", - "cindex": 26 + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.8.1.el8_1.aarch64", + "cindex": 30 }, { "distrib": "centos", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-327.18.2.el7.x86_64", - "cindex": 26 + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.el8.aarch64", + "cindex": 30 }, { "distrib": "centos", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-327.22.2.el7.x86_64", - "cindex": 26 + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-80.7.1.el8_0.aarch64", + "cindex": 31 }, { "distrib": "centos", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-327.28.2.el7.x86_64", - "cindex": 26 + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-80.el8.aarch64", + "cindex": 31 }, { "distrib": "centos", - "version": "7", + "version": "8", "arch": "x86_64", - "uname_release": "3.10.0-327.28.3.el7.x86_64", - "cindex": 26 + "uname_release": "4.18.0-147.0.3.el8_1.x86_64", + "cindex": 30 }, { "distrib": "centos", - "version": "7", + "version": "8", "arch": "x86_64", - "uname_release": "3.10.0-327.3.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.18.0-147.3.1.el8_1.x86_64", + "cindex": 30 }, { "distrib": "centos", - "version": "7", + "version": "8", "arch": "x86_64", - "uname_release": "3.10.0-327.36.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.18.0-147.5.1.el8_1.x86_64", + "cindex": 30 }, { "distrib": "centos", - "version": "7", + "version": "8", "arch": "x86_64", - "uname_release": "3.10.0-327.36.2.el7.x86_64", - "cindex": 26 + "uname_release": "4.18.0-147.8.1.el8_1.x86_64", + "cindex": 30 }, { "distrib": "centos", - "version": "7", + "version": "8", "arch": "x86_64", - "uname_release": "3.10.0-327.36.3.el7.x86_64", - "cindex": 26 + "uname_release": "4.18.0-147.el8.x86_64", + "cindex": 30 }, { "distrib": "centos", - "version": "7", + "version": "8", "arch": "x86_64", - "uname_release": "3.10.0-327.4.4.el7.x86_64", - "cindex": 26 + "uname_release": "4.18.0-80.7.1.el8_0.x86_64", + "cindex": 31 }, { "distrib": "centos", - "version": "7", + "version": "8", "arch": "x86_64", - "uname_release": "3.10.0-327.4.5.el7.x86_64", - "cindex": 26 + "uname_release": "4.18.0-80.el8.x86_64", + "cindex": 31 }, { - "distrib": "centos", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-327.el7.x86_64", - "cindex": 26 + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "4.19.0-17-arm64", + "cindex": 32 }, { - "distrib": "centos", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-514.10.2.el7.x86_64", - "cindex": 26 + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "4.19.0-17-rt-arm64", + "cindex": 33 }, { - "distrib": "centos", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-514.16.1.el7.x86_64", - "cindex": 26 + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "4.19.0-18-arm64", + "cindex": 32 }, { - "distrib": "centos", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-514.2.2.el7.x86_64", - "cindex": 26 + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "4.19.0-18-rt-arm64", + "cindex": 33 }, { - "distrib": "centos", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-514.21.1.el7.x86_64", - "cindex": 26 + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "4.19.0-20-arm64", + "cindex": 32 }, { - "distrib": "centos", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-514.21.2.el7.x86_64", - "cindex": 26 + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "4.19.0-20-rt-arm64", + "cindex": 33 }, { - "distrib": "centos", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-514.26.1.el7.x86_64", - "cindex": 26 + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "4.19.0-21-arm64", + "cindex": 32 }, { - "distrib": "centos", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-514.26.2.el7.x86_64", - "cindex": 26 + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "4.19.0-21-rt-arm64", + "cindex": 33 }, { - "distrib": "centos", - "version": "7", + "distrib": "debian", + "version": "10", "arch": "x86_64", - "uname_release": "3.10.0-514.6.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.19.0-17-amd64", + "cindex": 32 }, { - "distrib": "centos", - "version": "7", + "distrib": "debian", + "version": "10", "arch": "x86_64", - "uname_release": "3.10.0-514.6.2.el7.x86_64", - "cindex": 26 + "uname_release": "4.19.0-17-cloud-amd64", + "cindex": 32 }, { - "distrib": "centos", - "version": "7", + "distrib": "debian", + "version": "10", "arch": "x86_64", - "uname_release": "3.10.0-514.el7.x86_64", - "cindex": 26 + "uname_release": "4.19.0-17-rt-amd64", + "cindex": 33 }, { - "distrib": "centos", - "version": "7", + "distrib": "debian", + "version": "10", "arch": "x86_64", - "uname_release": "3.10.0-693.1.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.19.0-18-amd64", + "cindex": 32 }, { - "distrib": "centos", - "version": "7", + "distrib": "debian", + "version": "10", "arch": "x86_64", - "uname_release": "3.10.0-693.11.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.19.0-18-cloud-amd64", + "cindex": 32 }, { - "distrib": "centos", - "version": "7", + "distrib": "debian", + "version": "10", "arch": "x86_64", - "uname_release": "3.10.0-693.11.6.el7.x86_64", - "cindex": 26 + "uname_release": "4.19.0-18-rt-amd64", + "cindex": 33 }, { - "distrib": "centos", - "version": "7", + "distrib": "debian", + "version": "10", "arch": "x86_64", - "uname_release": "3.10.0-693.17.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.19.0-20-amd64", + "cindex": 32 }, { - "distrib": "centos", - "version": "7", + "distrib": "debian", + "version": "10", "arch": "x86_64", - "uname_release": "3.10.0-693.2.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.19.0-20-cloud-amd64", + "cindex": 32 }, { - "distrib": "centos", - "version": "7", + "distrib": "debian", + "version": "10", "arch": "x86_64", - "uname_release": "3.10.0-693.2.2.el7.x86_64", - "cindex": 26 + "uname_release": "4.19.0-20-rt-amd64", + "cindex": 33 }, { - "distrib": "centos", - "version": "7", + "distrib": "debian", + "version": "10", "arch": "x86_64", - "uname_release": "3.10.0-693.21.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.19.0-21-amd64", + "cindex": 32 }, { - "distrib": "centos", - "version": "7", + "distrib": "debian", + "version": "10", "arch": "x86_64", - "uname_release": "3.10.0-693.5.2.el7.x86_64", - "cindex": 26 + "uname_release": "4.19.0-21-cloud-amd64", + "cindex": 32 }, { - "distrib": "centos", - "version": "7", + "distrib": "debian", + "version": "10", "arch": "x86_64", - "uname_release": "3.10.0-693.el7.x86_64", - "cindex": 26 + "uname_release": "4.19.0-21-rt-amd64", + "cindex": 33 }, { - "distrib": "centos", - "version": "7", + "distrib": "debian", + "version": "10", "arch": "x86_64", - "uname_release": "3.10.0-862.11.6.el7.x86_64", - "cindex": 27 + "uname_release": "5.10.0-0.deb10.20-amd64", + "cindex": 34 }, { - "distrib": "centos", - "version": "7", + "distrib": "debian", + "version": "10", "arch": "x86_64", - "uname_release": "3.10.0-862.14.4.el7.x86_64", - "cindex": 27 + "uname_release": "5.10.0-0.deb10.20-cloud-amd64", + "cindex": 34 }, { - "distrib": "centos", - "version": "7", + "distrib": "debian", + "version": "10", "arch": "x86_64", - "uname_release": "3.10.0-862.2.3.el7.x86_64", - "cindex": 27 + "uname_release": "5.10.0-0.deb10.20-rt-amd64", + "cindex": 35 }, { - "distrib": "centos", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-862.3.2.el7.x86_64", - "cindex": 27 + "distrib": "debian", + "version": "9", + "arch": "arm64", + "uname_release": "4.9.0-13-arm64", + "cindex": 36 }, { - "distrib": "centos", - "version": "7", + "distrib": "debian", + "version": "9", "arch": "x86_64", - "uname_release": "3.10.0-862.3.3.el7.x86_64", - "cindex": 27 + "uname_release": "4.9.0-13-amd64", + "cindex": 36 }, { - "distrib": "centos", - "version": "7", + "distrib": "debian", + "version": "9", "arch": "x86_64", - "uname_release": "3.10.0-862.6.3.el7.x86_64", - "cindex": 27 + "uname_release": "4.9.0-13-rt-amd64", + "cindex": 37 }, { - "distrib": "centos", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-862.9.1.el7.x86_64", - "cindex": 27 + "distrib": "fedora", + "version": "29", + "arch": "arm64", + "uname_release": "4.18.16-300.fc29.aarch64", + "cindex": 38 }, { - "distrib": "centos", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-862.el7.x86_64", - "cindex": 27 + "distrib": "fedora", + "version": "29", + "arch": "arm64", + "uname_release": "5.3.11-100.fc29.aarch64", + "cindex": 39 }, { - "distrib": "centos", - "version": "7", + "distrib": "fedora", + "version": "29", "arch": "x86_64", - "uname_release": "3.10.0-957.1.3.el7.x86_64", - "cindex": 28 + "uname_release": "4.18.16-300.fc29.x86_64", + "cindex": 40 }, { - "distrib": "centos", - "version": "7", + "distrib": "fedora", + "version": "29", "arch": "x86_64", - "uname_release": "3.10.0-957.10.1.el7.x86_64", - "cindex": 28 + "uname_release": "5.3.11-100.fc29.x86_64", + "cindex": 41 }, { - "distrib": "centos", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-957.12.1.el7.x86_64", - "cindex": 28 + "distrib": "fedora", + "version": "30", + "arch": "arm64", + "uname_release": "5.0.9-301.fc30.aarch64", + "cindex": 42 }, { - "distrib": "centos", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-957.12.2.el7.x86_64", - "cindex": 28 + "distrib": "fedora", + "version": "30", + "arch": "arm64", + "uname_release": "5.6.13-100.fc30.aarch64", + "cindex": 43 }, { - "distrib": "centos", - "version": "7", + "distrib": "fedora", + "version": "30", "arch": "x86_64", - "uname_release": "3.10.0-957.21.2.el7.x86_64", - "cindex": 28 + "uname_release": "5.0.9-301.fc30.x86_64", + "cindex": 44 }, { - "distrib": "centos", - "version": "7", + "distrib": "fedora", + "version": "30", "arch": "x86_64", - "uname_release": "3.10.0-957.21.3.el7.x86_64", - "cindex": 28 + "uname_release": "5.6.13-100.fc30.x86_64", + "cindex": 43 }, { - "distrib": "centos", + "distrib": "ol", "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-957.27.2.el7.x86_64", - "cindex": 28 + "arch": "arm64", + "uname_release": "4.14.35-1902.300.11.el7uek.aarch64", + "cindex": 45 }, { - "distrib": "centos", + "distrib": "ol", "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-957.5.1.el7.x86_64", - "cindex": 28 + "arch": "arm64", + "uname_release": "4.14.35-1902.301.1.el7uek.aarch64", + "cindex": 45 }, { - "distrib": "centos", + "distrib": "ol", "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-957.el7.x86_64", - "cindex": 28 + "arch": "arm64", + "uname_release": "4.14.35-1902.302.0.el7uek.aarch64", + "cindex": 45 }, { - "distrib": "centos", + "distrib": "ol", "version": "7", - "arch": "x86_64", - "uname_release": "4.19.104-300.el7.x86_64", - "cindex": 29 + "arch": "arm64", + "uname_release": "4.14.35-1902.302.1.el7uek.aarch64", + "cindex": 45 }, { - "distrib": "centos", + "distrib": "ol", "version": "7", - "arch": "x86_64", - "uname_release": "4.19.110-300.el7.x86_64", - "cindex": 29 + "arch": "arm64", + "uname_release": "4.14.35-1902.302.2.el7uek.aarch64", + "cindex": 45 }, { - "distrib": "centos", + "distrib": "ol", "version": "7", - "arch": "x86_64", - "uname_release": "4.19.113-300.el7.x86_64", - "cindex": 30 + "arch": "arm64", + "uname_release": "4.14.35-1902.303.0.el7uek.aarch64", + "cindex": 45 }, { - "distrib": "centos", + "distrib": "ol", "version": "7", - "arch": "x86_64", - "uname_release": "4.19.84-300.el7.x86_64", - "cindex": 29 + "arch": "arm64", + "uname_release": "4.14.35-1902.303.1.el7uek.aarch64", + "cindex": 45 }, { - "distrib": "centos", + "distrib": "ol", "version": "7", - "arch": "x86_64", - "uname_release": "4.19.94-300.el7.x86_64", - "cindex": 29 + "arch": "arm64", + "uname_release": "4.14.35-1902.303.2.el7uek.aarch64", + "cindex": 45 }, { - "distrib": "centos", + "distrib": "ol", "version": "7", - "arch": "x86_64", - "uname_release": "5.4.28-200.el7.x86_64", - "cindex": 31 + "arch": "arm64", + "uname_release": "4.14.35-1902.303.4.1.el7uek.aarch64", + "cindex": 45 }, { - "distrib": "centos", - "version": "8", + "distrib": "ol", + "version": "7", "arch": "arm64", - "uname_release": "4.18.0-147.0.3.el8_1.aarch64", - "cindex": 32 + "uname_release": "4.14.35-1902.303.5.3.el7uek.aarch64", + "cindex": 45 }, { - "distrib": "centos", - "version": "8", + "distrib": "ol", + "version": "7", "arch": "arm64", - "uname_release": "4.18.0-147.3.1.el8_1.aarch64", - "cindex": 32 + "uname_release": "4.14.35-1902.304.5.el7uek.aarch64", + "cindex": 45 }, { - "distrib": "centos", - "version": "8", + "distrib": "ol", + "version": "7", "arch": "arm64", - "uname_release": "4.18.0-147.5.1.el8_1.aarch64", - "cindex": 32 + "uname_release": "4.14.35-1902.304.6.3.el7uek.aarch64", + "cindex": 45 }, { - "distrib": "centos", - "version": "8", + "distrib": "ol", + "version": "7", "arch": "arm64", - "uname_release": "4.18.0-147.8.1.el8_1.aarch64", - "cindex": 32 + "uname_release": "4.14.35-1902.304.6.4.el7uek.aarch64", + "cindex": 45 }, { - "distrib": "centos", - "version": "8", + "distrib": "ol", + "version": "7", "arch": "arm64", - "uname_release": "4.18.0-147.el8.aarch64", - "cindex": 32 + "uname_release": "4.14.35-1902.304.6.el7uek.aarch64", + "cindex": 45 }, { - "distrib": "centos", - "version": "8", + "distrib": "ol", + "version": "7", "arch": "arm64", - "uname_release": "4.18.0-80.7.1.el8_0.aarch64", - "cindex": 33 + "uname_release": "4.14.35-1902.305.0.el7uek.aarch64", + "cindex": 45 }, { - "distrib": "centos", - "version": "8", + "distrib": "ol", + "version": "7", "arch": "arm64", - "uname_release": "4.18.0-80.el8.aarch64", - "cindex": 33 + "uname_release": "4.14.35-1902.305.1.el7uek.aarch64", + "cindex": 45 }, { - "distrib": "centos", - "version": "8", - "arch": "x86_64", - "uname_release": "4.18.0-147.0.3.el8_1.x86_64", - "cindex": 32 + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.305.4.1.el7uek.aarch64", + "cindex": 45 }, { - "distrib": "centos", - "version": "8", + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.305.4.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.306.2.1.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.306.2.10.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.306.2.12.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.306.2.13.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.306.2.14.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.306.2.2.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.306.2.4.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.306.2.5.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.306.2.7.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.306.2.8.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.306.2.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1903.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1904.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1905.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1906.1.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1907.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1908.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1909.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1910a.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1911.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1912.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1915.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1916.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1917.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1923.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1929.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1933.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1941.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2013.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2015.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2016.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2017.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2018.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2019.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2020.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.400.3.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.400.8.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.400.9.1.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.400.9.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.401.4.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.402.0.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.402.2.1.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.403.1.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.403.2.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.403.3.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.403.4.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.403.5.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.404.0.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.404.1.1.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.404.1.2.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.405.1.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.405.2.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.405.3.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2039.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2040.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2041.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.500.10.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.500.5.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.500.9.1.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.500.9.3.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.501.0.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.501.1.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.501.2.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.502.3.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.502.4.1.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.502.4.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.502.5.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.503.0.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.503.1.1.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.503.1.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.504.0.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.504.1.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.504.2.3.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.504.2.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.505.0.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.505.1.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.505.2.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.505.3.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.505.4.2.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.505.4.3.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.505.4.4.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.505.4.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.506.0.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.506.1.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.506.10.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.506.2.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.506.4.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.506.8.1.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.506.8.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.507.0.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.507.1.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.507.7.4.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.507.7.5.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.507.7.6.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.508.3.1.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.508.3.2.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.508.3.3.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.508.3.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.509.1.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.509.2.2.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.509.2.3.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.510.0.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.510.1.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.510.2.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.510.3.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.510.4.1.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.510.5.2.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.510.5.3.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.510.5.4.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.510.5.5.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.510.5.6.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.511.0.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.511.2.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.511.3.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.511.5.2.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.511.5.3.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.511.5.4.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.511.5.5.1.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.511.5.5.3.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.511.5.5.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.511.5.6.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.511.5.7.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.511.5.8.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.511.5.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.512.0.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.512.1.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.512.2.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.512.4.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.512.5.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.512.6.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.513.0.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.513.1.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.513.2.1.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.513.2.2.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.513.2.3.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.513.2.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.514.0.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.514.2.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.514.3.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.514.5.1.1.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.514.5.1.2.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.514.5.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.515.3.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.516.1.1.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.516.1.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.516.2.1.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.516.2.2.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.516.2.4.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.516.2.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.517.1.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.517.2.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.517.3.1.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.517.3.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.518.0.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.518.1.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.518.2.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.518.3.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.518.4.1.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.518.4.2.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.518.4.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.519.0.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.519.1.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.519.2.1.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.519.2.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.520.0.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.520.1.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.520.2.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.520.3.1.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.521.1.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.521.2.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2048.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2049.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2050.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2051.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2052.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2102.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2103.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2104.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2105.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2106.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2108.el7uek.aarch64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2109.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2110.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2111.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2112.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2113.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2114.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2115.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2116.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2118.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2120.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2121.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2122.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2124.el7uek.aarch64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.0-1948.3.el7uek.aarch64", + "cindex": 47 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2006.5.el7uek.aarch64", + "cindex": 47 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2011.4.6.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2011.6.2.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2028.2.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2036.100.1.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2036.100.3.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2036.100.6.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2036.101.0.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2036.101.1.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2036.101.2.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2036.102.0.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2036.103.2.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2036.104.0.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2036.104.2.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2036.105.1.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2036.105.3.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2040.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2041.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2051.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.200.7.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.200.9.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.202.4.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.202.5.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.203.3.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.203.4.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.204.0.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.204.1.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.204.2.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.204.3.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.204.4.3.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.205.2.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.205.7.2.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.205.7.3.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.206.1.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2106.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2108.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2109.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2111.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2114.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2118.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2120.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2122.303.5.el7uek.aarch64", + "cindex": 49 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2122.el7uek.aarch64", + "cindex": 48 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2136.300.7.el7uek.aarch64", + "cindex": 49 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2136.301.0.el7uek.aarch64", + "cindex": 49 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.2-1950.2.el7uek.aarch64", + "cindex": 47 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.0.0.0.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.10.1.0.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.10.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.13.1.0.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.13.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.18.2.0.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.18.2.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.19.1.0.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.19.1.0.2.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.19.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.8.2.0.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.8.2.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.11.1.0.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.11.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.15.2.0.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.15.2.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.2.1.0.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.2.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.2.2.0.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.2.2.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.21.1.0.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.21.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.24.1.0.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.24.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.25.1.0.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.25.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.31.1.0.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.31.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.36.2.0.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.36.2.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.41.1.0.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.41.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.42.2.0.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.42.2.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.45.1.0.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.45.1.0.2.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.45.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.6.1.0.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.6.1.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.el7.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.300.11.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.301.1.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.302.0.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.302.1.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.302.2.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.303.0.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.303.1.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.303.2.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.303.4.1.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.303.5.3.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.304.4.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.304.5.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.304.6.3.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.304.6.4.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.304.6.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.305.0.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.305.1.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.305.4.1.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.305.4.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.306.2.1.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.306.2.12.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.306.2.13.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.306.2.14.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.306.2.2.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.306.2.4.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.306.2.5.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.306.2.7.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.306.2.8.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.306.2.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1903.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1904.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1905.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1906.1.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1907.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1908.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1909.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1910a.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1911.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1912.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1915.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1916.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1917.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1923.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1929.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1933.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1941.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2013.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2015.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2016.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2017.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2018.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2019.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2020.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.400.3.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.400.8.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.400.9.1.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.400.9.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.401.4.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.402.0.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.402.2.1.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.403.1.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.403.2.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.403.3.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.403.4.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.403.5.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.404.0.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.404.1.1.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.404.1.2.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.405.1.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.405.2.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.405.3.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2039.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2040.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2041.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.500.10.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.500.5.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.500.9.1.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.500.9.3.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.501.0.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.501.1.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.501.2.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.502.3.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.502.4.1.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.502.4.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.502.5.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.503.0.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.503.1.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.504.0.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.504.1.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.504.2.3.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.504.2.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.505.0.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.505.1.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.505.2.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.505.3.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.505.4.2.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.505.4.3.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.505.4.4.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.505.4.el7uek.x86_64", + "cindex": 45 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.506.0.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.506.1.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.506.10.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.506.2.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.506.4.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.506.8.1.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.506.8.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.507.0.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.507.1.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.507.7.4.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.507.7.5.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.507.7.6.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.508.3.1.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.508.3.2.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.508.3.3.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.508.3.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.509.1.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.509.2.2.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.509.2.3.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.510.0.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.510.1.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.510.2.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.510.3.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.510.4.1.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.510.5.2.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.510.5.3.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.510.5.4.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.510.5.5.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.510.5.6.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.511.0.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.511.2.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.511.3.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.511.5.2.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.511.5.3.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.511.5.4.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.511.5.5.1.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.511.5.5.3.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.511.5.5.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.511.5.6.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", "arch": "x86_64", - "uname_release": "4.18.0-147.3.1.el8_1.x86_64", - "cindex": 32 + "uname_release": "4.14.35-2047.511.5.7.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "centos", - "version": "8", + "distrib": "ol", + "version": "7", "arch": "x86_64", - "uname_release": "4.18.0-147.5.1.el8_1.x86_64", - "cindex": 32 + "uname_release": "4.14.35-2047.511.5.8.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "centos", - "version": "8", + "distrib": "ol", + "version": "7", "arch": "x86_64", - "uname_release": "4.18.0-147.8.1.el8_1.x86_64", - "cindex": 32 + "uname_release": "4.14.35-2047.511.5.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "centos", - "version": "8", + "distrib": "ol", + "version": "7", "arch": "x86_64", - "uname_release": "4.18.0-147.el8.x86_64", - "cindex": 32 + "uname_release": "4.14.35-2047.512.0.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "centos", - "version": "8", + "distrib": "ol", + "version": "7", "arch": "x86_64", - "uname_release": "4.18.0-80.7.1.el8_0.x86_64", - "cindex": 33 + "uname_release": "4.14.35-2047.512.1.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "centos", - "version": "8", + "distrib": "ol", + "version": "7", "arch": "x86_64", - "uname_release": "4.18.0-80.el8.x86_64", - "cindex": 33 + "uname_release": "4.14.35-2047.512.2.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "debian", - "version": "10", - "arch": "arm64", - "uname_release": "4.19.0-17-arm64", - "cindex": 34 + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.512.4.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "debian", - "version": "10", - "arch": "arm64", - "uname_release": "4.19.0-17-rt-arm64", - "cindex": 35 + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.512.5.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "debian", - "version": "10", - "arch": "arm64", - "uname_release": "4.19.0-18-arm64", - "cindex": 34 + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.512.6.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "debian", - "version": "10", - "arch": "arm64", - "uname_release": "4.19.0-18-rt-arm64", - "cindex": 35 + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.513.0.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "debian", - "version": "10", - "arch": "arm64", - "uname_release": "4.19.0-20-arm64", - "cindex": 34 + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.513.1.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "debian", - "version": "10", - "arch": "arm64", - "uname_release": "4.19.0-20-rt-arm64", - "cindex": 35 + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.513.2.1.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "debian", - "version": "10", - "arch": "arm64", - "uname_release": "4.19.0-21-arm64", - "cindex": 34 + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.513.2.2.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "debian", - "version": "10", - "arch": "arm64", - "uname_release": "4.19.0-21-rt-arm64", - "cindex": 35 + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.513.2.3.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "debian", - "version": "10", + "distrib": "ol", + "version": "7", "arch": "x86_64", - "uname_release": "4.19.0-17-amd64", - "cindex": 34 + "uname_release": "4.14.35-2047.513.2.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "debian", - "version": "10", + "distrib": "ol", + "version": "7", "arch": "x86_64", - "uname_release": "4.19.0-17-cloud-amd64", - "cindex": 34 + "uname_release": "4.14.35-2047.514.0.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "debian", - "version": "10", + "distrib": "ol", + "version": "7", "arch": "x86_64", - "uname_release": "4.19.0-17-rt-amd64", - "cindex": 35 + "uname_release": "4.14.35-2047.514.2.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "debian", - "version": "10", + "distrib": "ol", + "version": "7", "arch": "x86_64", - "uname_release": "4.19.0-18-amd64", - "cindex": 34 + "uname_release": "4.14.35-2047.514.3.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "debian", - "version": "10", + "distrib": "ol", + "version": "7", "arch": "x86_64", - "uname_release": "4.19.0-18-cloud-amd64", - "cindex": 34 + "uname_release": "4.14.35-2047.514.5.1.1.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "debian", - "version": "10", + "distrib": "ol", + "version": "7", "arch": "x86_64", - "uname_release": "4.19.0-18-rt-amd64", - "cindex": 35 + "uname_release": "4.14.35-2047.514.5.1.2.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "debian", - "version": "10", + "distrib": "ol", + "version": "7", "arch": "x86_64", - "uname_release": "4.19.0-20-amd64", - "cindex": 34 + "uname_release": "4.14.35-2047.514.5.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "debian", - "version": "10", + "distrib": "ol", + "version": "7", "arch": "x86_64", - "uname_release": "4.19.0-20-cloud-amd64", - "cindex": 34 + "uname_release": "4.14.35-2047.515.3.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "debian", - "version": "10", + "distrib": "ol", + "version": "7", "arch": "x86_64", - "uname_release": "4.19.0-20-rt-amd64", - "cindex": 35 + "uname_release": "4.14.35-2047.516.1.1.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "debian", - "version": "10", + "distrib": "ol", + "version": "7", "arch": "x86_64", - "uname_release": "4.19.0-21-amd64", - "cindex": 34 + "uname_release": "4.14.35-2047.516.1.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "debian", - "version": "10", + "distrib": "ol", + "version": "7", "arch": "x86_64", - "uname_release": "4.19.0-21-cloud-amd64", - "cindex": 34 + "uname_release": "4.14.35-2047.516.2.1.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "debian", - "version": "10", + "distrib": "ol", + "version": "7", "arch": "x86_64", - "uname_release": "4.19.0-21-rt-amd64", - "cindex": 35 + "uname_release": "4.14.35-2047.516.2.2.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.516.2.4.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.516.2.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.517.1.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.517.2.el7uek.x86_64", + "cindex": 46 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.517.3.1.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "debian", - "version": "9", - "arch": "arm64", - "uname_release": "4.9.0-13-arm64", - "cindex": 36 + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.517.3.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "debian", - "version": "9", + "distrib": "ol", + "version": "7", "arch": "x86_64", - "uname_release": "4.9.0-13-amd64", - "cindex": 36 + "uname_release": "4.14.35-2047.518.0.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "debian", - "version": "9", + "distrib": "ol", + "version": "7", "arch": "x86_64", - "uname_release": "4.9.0-13-rt-amd64", - "cindex": 37 + "uname_release": "4.14.35-2047.518.1.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "fedora", - "version": "29", - "arch": "arm64", - "uname_release": "4.18.16-300.fc29.aarch64", - "cindex": 38 + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.518.2.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "fedora", - "version": "29", - "arch": "arm64", - "uname_release": "5.3.11-100.fc29.aarch64", - "cindex": 39 + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.518.3.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "fedora", - "version": "29", + "distrib": "ol", + "version": "7", "arch": "x86_64", - "uname_release": "4.18.16-300.fc29.x86_64", - "cindex": 40 + "uname_release": "4.14.35-2047.518.4.1.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "fedora", - "version": "29", + "distrib": "ol", + "version": "7", "arch": "x86_64", - "uname_release": "5.3.11-100.fc29.x86_64", - "cindex": 41 + "uname_release": "4.14.35-2047.518.4.2.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "fedora", - "version": "30", - "arch": "arm64", - "uname_release": "5.0.9-301.fc30.aarch64", - "cindex": 42 + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.518.4.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "fedora", - "version": "30", - "arch": "arm64", - "uname_release": "5.6.13-100.fc30.aarch64", - "cindex": 43 + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.519.0.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "fedora", - "version": "30", + "distrib": "ol", + "version": "7", "arch": "x86_64", - "uname_release": "5.0.9-301.fc30.x86_64", - "cindex": 44 + "uname_release": "4.14.35-2047.519.1.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "fedora", - "version": "30", + "distrib": "ol", + "version": "7", "arch": "x86_64", - "uname_release": "5.6.13-100.fc30.x86_64", - "cindex": 43 + "uname_release": "4.14.35-2047.519.2.1.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "fedora", - "version": "31", - "arch": "arm64", - "uname_release": "5.3.7-301.fc31.aarch64", - "cindex": 45 + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.519.2.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "fedora", - "version": "31", - "arch": "arm64", - "uname_release": "5.8.18-100.fc31.aarch64", + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.520.0.el7uek.x86_64", "cindex": 46 }, { - "distrib": "fedora", - "version": "31", + "distrib": "ol", + "version": "7", "arch": "x86_64", - "uname_release": "5.3.7-301.fc31.x86_64", - "cindex": 47 + "uname_release": "4.14.35-2047.520.1.el7uek.x86_64", + "cindex": 46 }, { - "distrib": "fedora", - "version": "31", + "distrib": "ol", + "version": "7", "arch": "x86_64", - "uname_release": "5.8.18-100.fc31.x86_64", + "uname_release": "4.14.35-2047.520.2.el7uek.x86_64", "cindex": 46 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.300.11.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "4.14.35-2047.520.3.1.el7uek.x86_64", + "cindex": 46 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.301.1.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "4.14.35-2047.521.1.el7uek.x86_64", + "cindex": 46 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.302.0.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "4.14.35-2047.521.2.el7uek.x86_64", + "cindex": 46 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.302.1.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "4.14.35-2048.el7uek.x86_64", + "cindex": 45 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.302.2.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "4.14.35-2049.el7uek.x86_64", + "cindex": 45 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.303.0.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "4.14.35-2050.el7uek.x86_64", + "cindex": 45 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.303.1.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "4.14.35-2051.el7uek.x86_64", + "cindex": 45 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.303.2.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "4.14.35-2052.el7uek.x86_64", + "cindex": 45 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.303.4.1.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "4.14.35-2102.el7uek.x86_64", + "cindex": 45 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.303.5.3.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "4.14.35-2103.el7uek.x86_64", + "cindex": 45 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.304.5.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "4.14.35-2104.el7uek.x86_64", + "cindex": 45 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.304.6.3.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "4.14.35-2105.el7uek.x86_64", + "cindex": 45 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.304.6.4.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "4.14.35-2106.el7uek.x86_64", + "cindex": 45 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.304.6.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "4.14.35-2108.el7uek.x86_64", + "cindex": 45 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.305.0.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "4.14.35-2109.el7uek.x86_64", + "cindex": 46 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.305.1.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "4.14.35-2110.el7uek.x86_64", + "cindex": 46 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.305.4.1.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "4.14.35-2111.el7uek.x86_64", + "cindex": 46 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.305.4.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "4.14.35-2112.el7uek.x86_64", + "cindex": 46 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.306.2.1.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "4.14.35-2113.el7uek.x86_64", + "cindex": 46 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.306.2.10.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "4.14.35-2114.el7uek.x86_64", + "cindex": 46 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.306.2.12.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "4.14.35-2115.el7uek.x86_64", + "cindex": 46 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.306.2.13.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "4.14.35-2116.el7uek.x86_64", + "cindex": 46 }, { "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.306.2.14.el7uek.aarch64", - "cindex": 48 + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2118.el7uek.x86_64", + "cindex": 46 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.306.2.2.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "4.14.35-2120.el7uek.x86_64", + "cindex": 46 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.306.2.4.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "4.14.35-2121.el7uek.x86_64", + "cindex": 46 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.306.2.5.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "4.14.35-2122.el7uek.x86_64", + "cindex": 46 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.306.2.7.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "4.14.35-2124.el7uek.x86_64", + "cindex": 46 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.306.2.8.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "5.4.0-1948.3.el7uek.x86_64", + "cindex": 51 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.306.2.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "5.4.17-2006.5.el7uek.x86_64", + "cindex": 47 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1903.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2011.0.7.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1904.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2011.1.2.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1905.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2011.2.2.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1906.1.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2011.3.2.1.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1907.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2011.4.4.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1908.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2011.4.6.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1909.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2011.5.3.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1910a.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2011.6.2.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1911.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2011.7.4.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1912.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2028.2.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1915.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2036.100.1.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1916.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2036.100.3.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1917.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2036.100.6.1.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1923.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2036.100.6.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1929.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2036.101.0.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1933.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2036.101.1.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1941.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2036.101.2.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2013.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2036.102.0.2.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2015.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2036.102.0.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2016.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2036.103.2.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2017.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2036.103.3.1.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2018.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2036.103.3.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2019.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2036.104.0.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2020.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2036.104.2.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.400.3.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2036.104.4.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.400.8.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2036.104.5.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.400.9.1.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2036.105.1.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.400.9.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2036.105.3.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.401.4.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2040.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.402.0.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2041.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.402.2.1.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2051.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.403.1.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2102.200.13.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.403.2.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2102.200.7.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.403.3.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2102.200.9.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.403.4.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2102.201.3.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.403.5.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2102.202.4.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.404.0.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2102.202.5.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.404.1.1.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2102.203.3.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.404.1.2.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2102.203.4.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.405.1.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2102.203.5.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.405.2.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2102.203.6.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.405.3.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.0.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2039.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.1.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2040.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.2.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2041.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.3.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.500.10.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.4.2.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.500.5.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.4.3.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.500.9.1.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.4.4.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.500.9.3.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2102.205.2.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.501.0.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2102.205.7.2.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.501.1.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2102.205.7.3.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.501.2.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2102.206.1.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.502.3.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2106.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.502.4.1.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2108.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.502.4.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2109.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.502.5.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2111.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.503.0.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2114.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.503.1.1.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2118.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.503.1.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2120.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.504.0.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "5.4.17-2122.303.5.el7uek.x86_64", + "cindex": 49 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.504.1.el7uek.aarch64", + "arch": "x86_64", + "uname_release": "5.4.17-2122.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.504.2.3.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "5.4.17-2136.300.7.el7uek.x86_64", + "cindex": 49 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.504.2.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "5.4.17-2136.301.0.el7uek.x86_64", + "cindex": 49 }, { "distrib": "ol", "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.505.0.el7uek.aarch64", - "cindex": 48 + "arch": "x86_64", + "uname_release": "5.4.2-1950.2.el7uek.x86_64", + "cindex": 47 }, { "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.505.1.el7uek.aarch64", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2011.0.7.el8uek.x86_64", "cindex": 48 }, { "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.505.2.el7uek.aarch64", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2011.1.2.el8uek.x86_64", "cindex": 48 }, { "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.505.3.el7uek.aarch64", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2011.2.2.el8uek.x86_64", "cindex": 48 }, { "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.505.4.2.el7uek.aarch64", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2011.3.2.1.el8uek.x86_64", "cindex": 48 }, { "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.505.4.3.el7uek.aarch64", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2011.4.4.el8uek.x86_64", "cindex": 48 }, { "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.505.4.4.el7uek.aarch64", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2011.4.6.el8uek.x86_64", "cindex": 48 }, { "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.505.4.el7uek.aarch64", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2011.5.3.el8uek.x86_64", "cindex": 48 }, { "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.506.0.el7uek.aarch64", - "cindex": 49 + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2011.6.2.el8uek.x86_64", + "cindex": 48 }, { - "distrib": "ol", - "version": "7", + "distrib": "rhel", + "version": "8", "arch": "arm64", - "uname_release": "4.14.35-2047.506.1.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.18.0-147.0.2.el8_1.aarch64", + "cindex": 30 }, { - "distrib": "ol", - "version": "7", + "distrib": "rhel", + "version": "8", "arch": "arm64", - "uname_release": "4.14.35-2047.506.10.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.18.0-147.0.3.el8_1.aarch64", + "cindex": 30 }, { - "distrib": "ol", - "version": "7", + "distrib": "rhel", + "version": "8", "arch": "arm64", - "uname_release": "4.14.35-2047.506.2.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.18.0-147.3.1.el8_1.aarch64", + "cindex": 30 }, { - "distrib": "ol", - "version": "7", + "distrib": "rhel", + "version": "8", "arch": "arm64", - "uname_release": "4.14.35-2047.506.4.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.18.0-147.5.1.el8_1.aarch64", + "cindex": 30 }, { - "distrib": "ol", - "version": "7", + "distrib": "rhel", + "version": "8", "arch": "arm64", - "uname_release": "4.14.35-2047.506.8.1.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.18.0-147.8.1.el8_1.aarch64", + "cindex": 30 }, { - "distrib": "ol", - "version": "7", + "distrib": "rhel", + "version": "8", "arch": "arm64", - "uname_release": "4.14.35-2047.506.8.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.18.0-147.el8.aarch64", + "cindex": 30 }, { - "distrib": "ol", - "version": "7", + "distrib": "rhel", + "version": "8", "arch": "arm64", - "uname_release": "4.14.35-2047.507.0.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.18.0-80.1.2.el8_0.aarch64", + "cindex": 31 }, { - "distrib": "ol", - "version": "7", + "distrib": "rhel", + "version": "8", "arch": "arm64", - "uname_release": "4.14.35-2047.507.1.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.18.0-80.11.1.el8_0.aarch64", + "cindex": 31 }, { - "distrib": "ol", - "version": "7", + "distrib": "rhel", + "version": "8", "arch": "arm64", - "uname_release": "4.14.35-2047.507.7.4.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.18.0-80.11.2.el8_0.aarch64", + "cindex": 31 }, { - "distrib": "ol", - "version": "7", + "distrib": "rhel", + "version": "8", "arch": "arm64", - "uname_release": "4.14.35-2047.507.7.5.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.18.0-80.4.2.el8_0.aarch64", + "cindex": 31 }, { - "distrib": "ol", - "version": "7", + "distrib": "rhel", + "version": "8", "arch": "arm64", - "uname_release": "4.14.35-2047.507.7.6.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.18.0-80.7.1.el8_0.aarch64", + "cindex": 31 }, { - "distrib": "ol", - "version": "7", + "distrib": "rhel", + "version": "8", "arch": "arm64", - "uname_release": "4.14.35-2047.508.3.1.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.18.0-80.7.2.el8_0.aarch64", + "cindex": 31 }, { - "distrib": "ol", - "version": "7", + "distrib": "rhel", + "version": "8", "arch": "arm64", - "uname_release": "4.14.35-2047.508.3.2.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.18.0-80.el8.aarch64", + "cindex": 31 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.508.3.3.el7uek.aarch64", - "cindex": 49 + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.0.2.el8_1.x86_64", + "cindex": 30 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.508.3.el7uek.aarch64", - "cindex": 49 + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.0.3.el8_1.x86_64", + "cindex": 30 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.509.1.el7uek.aarch64", - "cindex": 49 + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.13.2.el8_1.x86_64", + "cindex": 30 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.509.2.2.el7uek.aarch64", - "cindex": 49 + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.20.1.el8_1.x86_64", + "cindex": 30 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.509.2.3.el7uek.aarch64", - "cindex": 49 + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.24.2.el8_1.x86_64", + "cindex": 30 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.510.0.el7uek.aarch64", - "cindex": 49 + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.27.1.el8_1.x86_64", + "cindex": 30 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.510.1.el7uek.aarch64", - "cindex": 49 + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.3.1.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.32.1.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.34.1.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.38.1.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.43.1.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.44.1.el8_1.x86_64", + "cindex": 30 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.510.2.el7uek.aarch64", - "cindex": 49 + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.48.1.el8_1.x86_64", + "cindex": 30 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.510.3.el7uek.aarch64", - "cindex": 49 + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.5.1.el8_1.x86_64", + "cindex": 30 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.510.4.1.el7uek.aarch64", - "cindex": 49 + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.51.1.el8_1.x86_64", + "cindex": 30 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.510.5.2.el7uek.aarch64", - "cindex": 49 + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.51.2.el8_1.x86_64", + "cindex": 30 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.510.5.3.el7uek.aarch64", - "cindex": 49 + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.52.1.el8_1.x86_64", + "cindex": 30 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.510.5.4.el7uek.aarch64", - "cindex": 49 + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.54.2.el8_1.x86_64", + "cindex": 30 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.510.5.5.el7uek.aarch64", - "cindex": 49 + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.56.1.el8_1.x86_64", + "cindex": 30 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.510.5.6.el7uek.aarch64", - "cindex": 49 + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.57.1.el8_1.x86_64", + "cindex": 30 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.511.0.el7uek.aarch64", - "cindex": 49 + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.8.1.el8_1.x86_64", + "cindex": 30 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.511.2.el7uek.aarch64", - "cindex": 49 + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.el8.x86_64", + "cindex": 30 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.511.3.el7uek.aarch64", - "cindex": 49 + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.1.2.el8_0.x86_64", + "cindex": 31 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.511.5.2.el7uek.aarch64", - "cindex": 49 + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.11.1.el8_0.x86_64", + "cindex": 31 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.511.5.3.el7uek.aarch64", - "cindex": 49 + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.11.2.el8_0.x86_64", + "cindex": 31 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.511.5.4.el7uek.aarch64", - "cindex": 49 + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.4.2.el8_0.x86_64", + "cindex": 31 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.511.5.5.1.el7uek.aarch64", - "cindex": 49 + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.7.1.el8_0.x86_64", + "cindex": 31 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.511.5.5.3.el7uek.aarch64", - "cindex": 49 + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.7.2.el8_0.x86_64", + "cindex": 31 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.511.5.5.el7uek.aarch64", - "cindex": 49 + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.el8.x86_64", + "cindex": 31 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.511.5.6.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-101-generic", + "cindex": 52 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.511.5.7.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-106-generic", + "cindex": 52 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.511.5.8.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-107-generic", + "cindex": 52 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.511.5.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-1094-aws", + "cindex": 52 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.512.0.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-1095-aws", + "cindex": 52 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.512.1.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-1096-aws", + "cindex": 52 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.512.2.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-1097-aws", + "cindex": 52 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.512.4.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-1098-aws", + "cindex": 52 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.512.5.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-1099-aws", + "cindex": 52 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.512.6.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-112-generic", + "cindex": 52 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.513.0.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-115-generic", + "cindex": 52 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.513.1.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-117-generic", + "cindex": 52 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.513.2.1.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-118-generic", + "cindex": 52 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.513.2.2.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-120-generic", + "cindex": 52 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.513.2.3.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-122-generic", + "cindex": 52 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.513.2.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-123-generic", + "cindex": 52 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.514.0.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-128-generic", + "cindex": 52 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.514.2.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-129-generic", + "cindex": 52 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.514.3.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-132-generic", + "cindex": 52 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.514.5.1.1.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-133-generic", + "cindex": 52 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.514.5.1.2.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-136-generic", + "cindex": 52 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.514.5.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-137-generic", + "cindex": 52 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.515.3.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-139-generic", + "cindex": 52 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.516.1.1.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-140-generic", + "cindex": 52 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.516.1.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-142-generic", + "cindex": 52 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.516.2.1.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-52-generic", + "cindex": 53 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.516.2.2.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-54-generic", + "cindex": 53 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.516.2.4.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-55-generic", + "cindex": 53 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.516.2.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-58-generic", + "cindex": 53 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.517.1.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-60-generic", + "cindex": 53 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.517.2.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-62-generic", + "cindex": 53 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.517.3.1.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-64-generic", + "cindex": 53 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.517.3.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-65-generic", + "cindex": 53 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.518.0.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-66-generic", + "cindex": 53 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.518.1.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-69-generic", + "cindex": 53 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.518.2.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-70-generic", + "cindex": 53 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.518.3.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-72-generic", + "cindex": 53 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.518.4.1.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-74-generic", + "cindex": 53 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.518.4.2.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-76-generic", + "cindex": 53 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.518.4.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-88-generic", + "cindex": 53 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.519.0.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-91-generic", + "cindex": 53 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.519.1.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-96-generic", + "cindex": 53 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.519.2.1.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-99-generic", + "cindex": 52 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.519.2.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.4.0-150-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2047.520.0.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.4.0-151-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2048.el7uek.aarch64", - "cindex": 48 + "uname_release": "4.4.0-154-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2049.el7uek.aarch64", - "cindex": 48 + "uname_release": "4.4.0-157-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2050.el7uek.aarch64", - "cindex": 48 + "uname_release": "4.4.0-159-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2051.el7uek.aarch64", - "cindex": 48 + "uname_release": "4.4.0-161-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2052.el7uek.aarch64", - "cindex": 48 + "uname_release": "4.4.0-164-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2102.el7uek.aarch64", - "cindex": 48 + "uname_release": "4.4.0-165-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2103.el7uek.aarch64", - "cindex": 48 + "uname_release": "4.4.0-166-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2104.el7uek.aarch64", - "cindex": 48 + "uname_release": "4.4.0-168-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2105.el7uek.aarch64", - "cindex": 48 + "uname_release": "4.4.0-169-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2106.el7uek.aarch64", - "cindex": 48 + "uname_release": "4.4.0-170-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2108.el7uek.aarch64", - "cindex": 48 + "uname_release": "4.4.0-171-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2109.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.4.0-173-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2110.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.4.0-174-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2111.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.4.0-176-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2112.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.4.0-177-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2113.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.4.0-178-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2114.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.4.0-179-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2115.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.4.0-184-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2116.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.4.0-185-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2118.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.4.0-186-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2120.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.4.0-187-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2121.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.4.0-189-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2122.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.4.0-190-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.35-2124.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.4.0-193-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "5.4.0-1948.3.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.4.0-194-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "5.4.17-2006.5.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.4.0-197-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "5.4.17-2011.4.6.el7uek.aarch64", - "cindex": 51 + "uname_release": "4.4.0-198-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "5.4.17-2011.6.2.el7uek.aarch64", - "cindex": 51 + "uname_release": "4.4.0-200-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "5.4.17-2028.2.el7uek.aarch64", - "cindex": 51 + "uname_release": "4.4.0-201-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "5.4.17-2036.100.1.el7uek.aarch64", - "cindex": 51 + "uname_release": "4.4.0-203-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "5.4.17-2036.100.3.el7uek.aarch64", - "cindex": 51 + "uname_release": "4.4.0-204-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "5.4.17-2036.100.6.el7uek.aarch64", - "cindex": 51 + "uname_release": "4.4.0-206-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "5.4.17-2036.101.0.el7uek.aarch64", - "cindex": 51 + "uname_release": "4.4.0-208-generic", + "cindex": 56 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "5.4.17-2036.101.1.el7uek.aarch64", - "cindex": 51 + "uname_release": "4.4.0-209-generic", + "cindex": 56 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "5.4.17-2036.101.2.el7uek.aarch64", - "cindex": 51 + "uname_release": "4.4.0-21-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "5.4.17-2036.102.0.el7uek.aarch64", - "cindex": 51 + "uname_release": "4.4.0-210-generic", + "cindex": 56 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2036.103.2.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-101-generic", + "cindex": 58 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2036.104.0.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1013-azure", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2036.104.2.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1014-azure", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2036.105.1.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1018-azure", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2036.105.3.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1018-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2040.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1019-azure", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2041.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1019-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2051.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1021-azure", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2102.200.7.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1021-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2102.200.9.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1022-azure", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2102.202.4.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1023-azure", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2102.202.5.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1023-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2102.203.3.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1024-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2102.203.4.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1025-azure", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2102.204.0.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1025-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2102.204.1.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1026-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2102.204.2.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1027-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2102.204.3.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1028-azure", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2102.204.4.3.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1028-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2102.205.2.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1029-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2102.205.7.2.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1030-azure", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2102.205.7.3.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1030-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2102.206.1.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1031-azure", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2106.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1032-azure", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2108.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1032-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2109.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1033-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2111.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1034-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2114.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1035-azure", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2118.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1036-azure", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2120.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1036-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2122.303.5.el7uek.aarch64", - "cindex": 52 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1037-azure", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2122.el7uek.aarch64", - "cindex": 51 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1037-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2136.300.7.el7uek.aarch64", - "cindex": 52 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1039-azure", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2136.301.0.el7uek.aarch64", - "cindex": 52 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1040-azure", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.2-1950.2.el7uek.aarch64", - "cindex": 50 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1040-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1127.0.0.0.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1041-azure", + "cindex": 61 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1127.10.1.0.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1041-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1127.10.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1042-azure", + "cindex": 61 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1127.13.1.0.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1042-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1127.13.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1044-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1127.18.2.0.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1045-azure", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1046-azure", + "cindex": 61 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1127.18.2.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1046-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1127.19.1.0.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1047-azure", + "cindex": 61 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1127.19.1.0.2.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1047-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1127.19.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1049-azure", + "cindex": 61 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1127.8.2.0.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1049-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1127.8.2.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1050-azure", + "cindex": 61 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.11.1.0.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1050-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.11.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1051-azure", + "cindex": 61 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.15.2.0.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1052-azure", + "cindex": 61 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.15.2.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1052-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.2.1.0.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1055-azure", + "cindex": 61 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.2.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1055-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.2.2.0.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1056-azure", + "cindex": 61 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.2.2.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1057-azure", + "cindex": 61 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.21.1.0.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1058-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.21.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1059-azure", + "cindex": 61 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.24.1.0.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-106-generic", + "cindex": 58 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.24.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1060-azure", + "cindex": 61 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.25.1.0.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1060-gcp", + "cindex": 60 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.25.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1061-azure", + "cindex": 61 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.31.1.0.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1061-gcp", + "cindex": 62 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.31.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1063-azure", + "cindex": 61 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.36.2.0.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1064-azure", + "cindex": 61 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.36.2.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1066-azure", + "cindex": 61 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.41.1.0.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1067-azure", + "cindex": 61 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.41.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1069-azure", + "cindex": 61 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.42.2.0.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-107-generic", + "cindex": 58 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.42.2.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1071-azure", + "cindex": 61 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.45.1.0.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1071-gcp", + "cindex": 62 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.45.1.0.2.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1075-azure", + "cindex": 61 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.45.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1077-azure", + "cindex": 61 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.6.1.0.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1077-gcp", + "cindex": 62 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.6.1.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1078-gcp", + "cindex": 62 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.el7.x86_64", - "cindex": 53 + "uname_release": "4.15.0-1080-gcp", + "cindex": 62 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.300.11.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1081-gcp", + "cindex": 62 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.301.1.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1082-azure", + "cindex": 63 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.302.0.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1083-azure", + "cindex": 63 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.302.1.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1083-gcp", + "cindex": 62 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.302.2.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1084-gcp", + "cindex": 62 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.303.0.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1086-gcp", + "cindex": 62 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.303.1.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1087-gcp", + "cindex": 62 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.303.2.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1089-azure", + "cindex": 63 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.303.4.1.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1090-gcp", + "cindex": 62 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.303.5.3.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1091-azure", + "cindex": 63 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.304.4.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1091-gcp", + "cindex": 62 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.304.5.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1092-azure", + "cindex": 63 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.304.6.3.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1092-gcp", + "cindex": 62 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.304.6.4.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1093-azure", + "cindex": 63 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.304.6.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1093-gcp", + "cindex": 62 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.305.0.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1094-aws", + "cindex": 58 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.305.1.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1094-gcp", + "cindex": 62 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.305.4.1.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1095-aws", + "cindex": 58 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.305.4.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1095-azure", + "cindex": 63 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.306.2.1.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1095-gcp", + "cindex": 62 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.306.2.12.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1096-aws", + "cindex": 58 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.306.2.13.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1096-azure", + "cindex": 63 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.306.2.14.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1096-gcp", + "cindex": 62 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.306.2.2.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1097-aws", + "cindex": 58 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.306.2.4.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1097-gcp", + "cindex": 62 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.306.2.5.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1098-aws", + "cindex": 58 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.306.2.7.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1098-azure", + "cindex": 63 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.306.2.8.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1098-gcp", + "cindex": 62 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1902.306.2.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1099-aws", + "cindex": 58 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1903.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1102-azure", + "cindex": 63 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1904.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1103-azure", + "cindex": 63 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1905.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1106-azure", + "cindex": 63 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1906.1.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1108-azure", + "cindex": 63 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1907.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1109-azure", + "cindex": 63 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1908.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1110-azure", + "cindex": 63 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1909.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1111-azure", + "cindex": 63 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1910a.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1112-azure", + "cindex": 63 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1911.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-1113-azure", + "cindex": 63 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1912.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-112-generic", + "cindex": 58 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1915.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-115-generic", + "cindex": 58 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1916.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-117-generic", + "cindex": 58 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1917.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-118-generic", + "cindex": 58 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1923.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-120-generic", + "cindex": 58 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1929.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-122-generic", + "cindex": 58 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1933.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-123-generic", + "cindex": 58 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-1941.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-128-generic", + "cindex": 58 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2013.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-129-generic", + "cindex": 58 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2015.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-13-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2016.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-132-generic", + "cindex": 58 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2017.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-133-generic", + "cindex": 58 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2018.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-136-generic", + "cindex": 58 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2019.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-137-generic", + "cindex": 58 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2020.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-139-generic", + "cindex": 58 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2025.400.3.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-140-generic", + "cindex": 58 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2025.400.8.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-142-generic", + "cindex": 58 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2025.400.9.1.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-15-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2025.400.9.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-20-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2025.401.4.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-22-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2025.402.0.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-23-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2025.402.2.1.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-24-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2025.403.1.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-29-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2025.403.2.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-30-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2025.403.3.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-32-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2025.403.4.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-33-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2025.403.5.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-34-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2025.404.0.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-36-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2025.404.1.1.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-38-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2025.404.1.2.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-39-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2025.405.1.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-42-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2025.405.2.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-43-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2025.405.3.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-45-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2039.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-46-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2040.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-47-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2041.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-48-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.500.10.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-50-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.500.5.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-51-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.500.9.1.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-52-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.500.9.3.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-54-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.501.0.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-55-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.501.1.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-58-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.501.2.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-60-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.502.3.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-62-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.502.4.1.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-64-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.502.4.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-65-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.502.5.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-66-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.503.0.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-69-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.503.1.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-70-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.504.0.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-72-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.504.1.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-74-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.504.2.3.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-76-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.504.2.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-88-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.505.0.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-91-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.505.1.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-96-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.505.2.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.15.0-99-generic", + "cindex": 58 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.505.3.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.4.0-101-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.505.4.2.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.4.0-1016-aws", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.505.4.3.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.4.0-1017-aws", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.505.4.4.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.4.0-1018-aws", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.505.4.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.4.0-1020-aws", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.506.0.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1022-aws", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.506.1.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1026-aws", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.506.10.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1028-aws", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.506.2.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-103-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.506.4.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1030-aws", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.506.8.1.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1031-aws", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.506.8.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1032-aws", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.507.0.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1035-aws", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.507.1.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1037-aws", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.507.7.4.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1038-aws", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.507.7.5.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1039-aws", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.507.7.6.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-104-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.508.3.1.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1041-aws", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.508.3.2.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1043-aws", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.508.3.3.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1044-aws", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.508.3.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1047-aws", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.509.1.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1048-aws", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.509.2.2.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1049-aws", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.509.2.3.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1050-aws", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.510.0.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1052-aws", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.510.1.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1054-aws", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.510.2.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1055-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.510.3.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1057-aws", + "cindex": 54 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1060-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.510.4.1.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1061-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.510.5.2.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1062-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.510.5.3.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1063-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.510.5.4.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1065-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.510.5.5.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1066-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.510.5.6.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1067-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.511.0.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1069-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.511.2.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1070-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.511.3.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1072-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.511.5.2.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1073-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.511.5.3.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1074-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.511.5.4.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1075-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.511.5.5.1.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1077-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.511.5.5.3.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1079-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.511.5.5.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-108-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.511.5.6.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1081-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.511.5.7.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1083-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.511.5.8.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1084-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.511.5.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1085-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.512.0.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1087-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.512.1.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1088-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.512.2.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-109-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.512.4.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1090-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.512.5.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1092-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.512.6.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1094-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.513.0.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1095-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.513.1.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1096-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.513.2.1.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1098-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.513.2.2.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1099-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.513.2.3.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1100-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.513.2.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1101-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.514.0.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1102-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.514.2.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1104-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.514.3.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1105-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.514.5.1.1.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1106-aws", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.514.5.1.2.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1107-aws", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.514.5.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1109-aws", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.515.3.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1110-aws", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.516.1.1.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1111-aws", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.516.1.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1112-aws", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.516.2.1.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1113-aws", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.516.2.2.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1114-aws", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.516.2.4.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1117-aws", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.516.2.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1118-aws", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.517.1.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1119-aws", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.517.2.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-112-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.517.3.1.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1121-aws", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.517.3.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1122-aws", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.518.0.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1123-aws", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.518.1.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1124-aws", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.518.2.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1126-aws", + "cindex": 56 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.518.3.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1127-aws", + "cindex": 56 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.518.4.1.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-1128-aws", + "cindex": 56 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.518.4.2.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-116-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.518.4.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-119-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.519.0.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-121-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.519.1.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-122-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.519.2.1.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-124-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.519.2.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-127-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2047.520.0.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-128-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2048.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.4.0-130-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2049.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.4.0-131-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2050.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.4.0-133-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2051.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.4.0-134-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2052.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.4.0-135-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2102.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.4.0-137-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2103.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.4.0-138-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2104.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.4.0-139-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2105.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.4.0-140-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2106.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.4.0-141-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2108.el7uek.x86_64", - "cindex": 48 + "uname_release": "4.4.0-142-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2109.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-143-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2110.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-145-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2111.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-146-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2112.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-148-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2113.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-150-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2114.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-151-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2115.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-154-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2116.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-157-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2118.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-159-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2120.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-161-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2121.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-164-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2122.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-165-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.35-2124.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.4.0-166-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.0-1948.3.el7uek.x86_64", + "uname_release": "4.4.0-168-generic", "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2006.5.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.4.0-169-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2011.0.7.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-170-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2011.1.2.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-171-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2011.2.2.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-173-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2011.3.2.1.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-174-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2011.4.4.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-176-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2011.4.6.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-177-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2011.5.3.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-178-generic", + "cindex": 54 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2011.6.2.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-179-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2011.7.4.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-184-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2028.2.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-185-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.100.1.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-186-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.100.3.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-187-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.100.6.1.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-189-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.100.6.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-190-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.101.0.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-193-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.101.1.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-194-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.101.2.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-197-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.102.0.2.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-198-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.102.0.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-200-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.103.2.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-201-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.103.3.1.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-203-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.103.3.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-204-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.104.0.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-206-generic", + "cindex": 55 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.104.2.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-208-generic", + "cindex": 56 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.104.4.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-209-generic", + "cindex": 56 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.104.5.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-21-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.105.1.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-210-generic", + "cindex": 56 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.105.3.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-22-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2040.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-24-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2041.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-28-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2051.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-31-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.200.13.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-34-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.200.7.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-36-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.200.9.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-38-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.201.3.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-42-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.202.4.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-43-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.202.5.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-45-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.203.3.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-47-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.203.4.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-51-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.203.5.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-53-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.203.6.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-57-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.204.0.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-59-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.204.1.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-62-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.204.2.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-63-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.204.3.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-64-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.204.4.2.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-66-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.204.4.3.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-67-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.204.4.4.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-70-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.205.2.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-71-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.205.7.2.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-72-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.205.7.3.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-75-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.206.1.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-77-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2106.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-78-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2108.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-79-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2109.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-81-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2111.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-83-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2114.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-87-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2118.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-89-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2120.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-91-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2122.303.5.el7uek.x86_64", - "cindex": 52 + "uname_release": "4.4.0-92-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2122.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-93-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2136.300.7.el7uek.x86_64", - "cindex": 52 + "uname_release": "4.4.0-96-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2136.301.0.el7uek.x86_64", - "cindex": 52 + "uname_release": "4.4.0-97-generic", + "cindex": 57 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.2-1950.2.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.4.0-98-generic", + "cindex": 57 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-101-generic", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1041-aws", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1043-aws", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1044-aws", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1045-aws", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1047-aws", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1048-aws", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1050-aws", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1051-aws", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1052-aws", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1054-aws", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1056-aws", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1057-aws", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1058-aws", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-106-generic", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1060-aws", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1063-aws", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1065-aws", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1066-aws", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1067-aws", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1073-aws", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1076-aws", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1077-aws", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1079-aws", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-108-generic", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1080-aws", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1082-aws", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1083-aws", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1086-aws", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1087-aws", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-109-generic", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1090-aws", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1091-aws", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1092-aws", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1093-aws", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1094-aws", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1095-aws", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1096-aws", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1097-aws", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1098-aws", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1099-aws", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1101-aws", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1102-aws", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1103-aws", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1106-aws", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1109-aws", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-111-generic", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1110-aws", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1111-aws", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1112-aws", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1114-aws", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1115-aws", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1116-aws", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1118-aws", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1119-aws", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-112-generic", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1121-aws", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1123-aws", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1124-aws", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1126-aws", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1127-aws", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1128-aws", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1130-aws", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1133-aws", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1136-aws", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1139-aws", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1140-aws", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1141-aws", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1142-aws", - "cindex": 57 + "cindex": 64 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1143-aws", + "cindex": 64 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1146-aws", + "cindex": 64 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1147-aws", + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-115-generic", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-117-generic", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-118-generic", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-121-generic", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-122-generic", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-123-generic", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-124-generic", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-128-generic", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-129-generic", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-130-generic", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-132-generic", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-134-generic", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-135-generic", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-136-generic", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-137-generic", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-139-generic", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-140-generic", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-141-generic", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-142-generic", - "cindex": 55 + "cindex": 52 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-143-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-144-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-147-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-151-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-153-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-154-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-156-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-158-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-159-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-161-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-162-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-163-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-166-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-167-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-169-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-171-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-173-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-175-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-176-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-177-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-180-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-184-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-187-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-188-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-189-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-191-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-192-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-193-generic", - "cindex": 57 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-194-generic", - "cindex": 57 + "cindex": 64 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-196-generic", + "cindex": 64 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-197-generic", + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-20-generic", - "cindex": 56 + "cindex": 53 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-200-generic", + "cindex": 64 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-201-generic", + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-52-generic", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-54-generic", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-55-generic", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-58-generic", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-60-generic", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-62-generic", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-64-generic", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-65-generic", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-66-generic", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-69-generic", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-70-generic", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-72-generic", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-74-generic", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-76-generic", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-88-generic", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-91-generic", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-96-generic", - "cindex": 56 + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-99-generic", - "cindex": 55 + "cindex": 52 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.18.0-22-generic", + "cindex": 38 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.18.0-24-generic", + "cindex": 38 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.18.0-25-generic", + "cindex": 38 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1018-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1020-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1022-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1024-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1025-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1028-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1029-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1032-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1034-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1035-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1037-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1038-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1039-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1041-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1043-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1045-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1047-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1048-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1049-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1051-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1054-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1055-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1056-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1057-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1058-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1059-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1060-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-37-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-39-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-40-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-42-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-45-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-47-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-48-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-51-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-52-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-53-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-54-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-58-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-59-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-60-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-62-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-64-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-65-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-66-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-67-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-70-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-71-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-72-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-73-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-74-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-77-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-80-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-81-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-84-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-86-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-87-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-89-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-90-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-91-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1006-gcp", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1007-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1008-gcp", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1009-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1009-azure", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1009-gcp", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-101-generic", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1010-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1010-gcp", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1011-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1012-azure", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1013-azure", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1014-azure", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1014-gcp", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1015-gcp", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1016-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1017-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1017-gcp", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1018-azure", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1018-gcp", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1019-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1019-azure", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1019-gcp", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1020-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1021-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1021-azure", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1021-gcp", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1022-azure", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1023-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1023-azure", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1023-gcp", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1024-gcp", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1025-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1025-azure", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1025-gcp", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1026-gcp", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1027-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1027-gcp", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1028-azure", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1028-gcp", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1029-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1029-gcp", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1030-azure", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1030-gcp", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1030-gke", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1031-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1031-azure", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1032-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1032-azure", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1032-gcp", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1032-gke", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1033-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1033-gcp", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1033-gke", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1034-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1034-gcp", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1034-gke", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1035-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1035-azure", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1036-azure", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1036-gcp", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1036-gke", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1037-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1037-azure", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1037-gcp", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1037-gke", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1039-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1040-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1040-gcp", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1040-gke", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1041-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1041-gke", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1042-gcp", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1042-gke", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1043-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1044-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1044-gcp", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1044-gke", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1045-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1045-gke", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1046-gke", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1047-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1048-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1048-gke", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1049-gke", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1050-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1050-gke", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1051-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1052-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1052-gke", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1054-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1055-gke", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1056-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1057-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1057-gke", - "cindex": 59 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1058-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", @@ -11305,21 +14767,21 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-106-generic", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1060-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1063-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", @@ -11340,14 +14802,14 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1065-aws", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1066-aws", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", @@ -11361,7 +14823,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1067-aws", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", @@ -11396,7 +14858,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1073-aws", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", @@ -11410,7 +14872,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1076-aws", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", @@ -11424,7 +14886,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1077-aws", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", @@ -11445,7 +14907,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1079-aws", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", @@ -11459,21 +14921,21 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-108-generic", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1080-aws", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1082-aws", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", @@ -11487,7 +14949,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1083-aws", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", @@ -11501,14 +14963,14 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1086-aws", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1087-aws", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", @@ -11522,21 +14984,21 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-109-generic", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1090-aws", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1091-aws", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", @@ -11550,7 +15012,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1092-aws", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", @@ -11564,7 +15026,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1093-aws", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", @@ -11585,7 +15047,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1094-aws", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", @@ -11599,7 +15061,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1095-aws", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", @@ -11620,7 +15082,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1096-aws", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", @@ -11641,7 +15103,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1097-aws", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", @@ -11655,7 +15117,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1098-aws", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", @@ -11669,7 +15131,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1099-aws", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", @@ -11697,7 +15159,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1101-aws", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", @@ -11809,7 +15271,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-111-generic", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", @@ -11893,7 +15355,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1114-azure", - "cindex": 64 + "cindex": 66 }, { "distrib": "ubuntu", @@ -11914,7 +15376,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1115-azure", - "cindex": 64 + "cindex": 66 }, { "distrib": "ubuntu", @@ -11949,7 +15411,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1118-azure", - "cindex": 64 + "cindex": 66 }, { "distrib": "ubuntu", @@ -11977,7 +15439,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-112-generic", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", @@ -11998,7 +15460,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1121-azure", - "cindex": 64 + "cindex": 66 }, { "distrib": "ubuntu", @@ -12012,7 +15474,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1122-azure", - "cindex": 64 + "cindex": 66 }, { "distrib": "ubuntu", @@ -12033,7 +15495,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1123-azure", - "cindex": 64 + "cindex": 66 }, { "distrib": "ubuntu", @@ -12047,7 +15509,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1124-azure", - "cindex": 64 + "cindex": 66 }, { "distrib": "ubuntu", @@ -12061,7 +15523,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1125-azure", - "cindex": 64 + "cindex": 66 }, { "distrib": "ubuntu", @@ -12075,7 +15537,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1126-azure", - "cindex": 64 + "cindex": 66 }, { "distrib": "ubuntu", @@ -12089,7 +15551,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1127-azure", - "cindex": 64 + "cindex": 66 }, { "distrib": "ubuntu", @@ -12110,7 +15572,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1129-azure", - "cindex": 64 + "cindex": 66 }, { "distrib": "ubuntu", @@ -12124,7 +15586,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1130-azure", - "cindex": 64 + "cindex": 66 }, { "distrib": "ubuntu", @@ -12138,7 +15600,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1131-azure", - "cindex": 64 + "cindex": 66 }, { "distrib": "ubuntu", @@ -12159,14 +15621,14 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1133-azure", - "cindex": 64 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1134-azure", - "cindex": 64 + "cindex": 66 }, { "distrib": "ubuntu", @@ -12194,7 +15656,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1136-azure", - "cindex": 64 + "cindex": 66 }, { "distrib": "ubuntu", @@ -12203,12 +15665,19 @@ "uname_release": "4.15.0-1136-gcp", "cindex": 62 }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.15.0-1137-aws", + "cindex": 62 + }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1137-azure", - "cindex": 64 + "cindex": 66 }, { "distrib": "ubuntu", @@ -12222,7 +15691,14 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1138-azure", - "cindex": 64 + "cindex": 66 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.15.0-1138-gcp", + "cindex": 62 }, { "distrib": "ubuntu", @@ -12236,7 +15712,7 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1139-azure", - "cindex": 64 + "cindex": 66 }, { "distrib": "ubuntu", @@ -12252,6 +15728,13 @@ "uname_release": "4.15.0-1141-aws", "cindex": 62 }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.15.0-1141-gcp", + "cindex": 62 + }, { "distrib": "ubuntu", "version": "18.04", @@ -12264,175 +15747,224 @@ "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1142-azure", - "cindex": 64 + "cindex": 66 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.15.0-1142-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.15.0-1143-aws", + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1145-azure", - "cindex": 64 + "cindex": 66 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.15.0-1146-aws", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.15.0-1146-azure", + "cindex": 66 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.15.0-1147-aws", + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1149-azure", - "cindex": 64 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-115-generic", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1150-azure", - "cindex": 64 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1151-azure", - "cindex": 64 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1153-azure", - "cindex": 64 + "cindex": 66 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.15.0-1157-azure", + "cindex": 66 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.15.0-1158-azure", + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-117-generic", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-118-generic", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-121-generic", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-122-generic", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-123-generic", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-124-generic", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-128-generic", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-129-generic", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-130-generic", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-132-generic", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-134-generic", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-135-generic", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-136-generic", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-137-generic", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-139-generic", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-140-generic", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-141-generic", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-142-generic", - "cindex": 61 + "cindex": 58 }, { "distrib": "ubuntu", @@ -12602,6 +16134,13 @@ "uname_release": "4.15.0-188-generic", "cindex": 62 }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.15.0-189-generic", + "cindex": 62 + }, { "distrib": "ubuntu", "version": "18.04", @@ -12630,3533 +16169,3659 @@ "uname_release": "4.15.0-194-generic", "cindex": 62 }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.15.0-196-generic", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.15.0-197-generic", + "cindex": 62 + }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-20-generic", - "cindex": 60 + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.15.0-200-generic", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.15.0-201-generic", + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-22-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-23-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-24-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-29-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-30-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-32-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-33-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-34-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-36-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-38-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-39-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-42-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-43-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-44-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-45-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-46-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-47-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-48-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-50-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-51-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-52-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-54-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-55-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-58-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-60-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-62-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-64-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-65-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-66-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-69-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-70-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-72-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-74-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-76-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-88-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-91-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-96-generic", - "cindex": 60 + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-99-generic", - "cindex": 61 + "cindex": 58 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.18.0-1004-gcp", + "cindex": 67 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.18.0-1005-gcp", + "cindex": 67 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.18.0-1006-azure", + "cindex": 38 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.18.0-1006-gcp", + "cindex": 67 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.18.0-1007-azure", + "cindex": 38 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.18.0-1007-gcp", + "cindex": 67 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.18.0-1008-azure", + "cindex": 38 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.18.0-1008-gcp", + "cindex": 67 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.18.0-1009-gcp", + "cindex": 67 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.18.0-1011-gcp", + "cindex": 67 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.18.0-1012-gcp", + "cindex": 67 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.18.0-1013-gcp", + "cindex": 67 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.18.0-1015-gcp", + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1018-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1019-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1020-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1020-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1021-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1022-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1022-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1022-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1023-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1024-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1024-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1025-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1025-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1025-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1025-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1026-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1027-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1028-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1028-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1029-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1029-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1029-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1031-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1032-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1032-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1032-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1033-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1033-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1034-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1034-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1034-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1035-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1035-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1035-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1036-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1036-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1036-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1037-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1037-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1037-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1038-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1038-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1039-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1039-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1039-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1040-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1040-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1040-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1041-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1041-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1041-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1042-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1042-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1043-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1043-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1043-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1043-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1044-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1044-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1044-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1045-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1046-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1046-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1046-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1047-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1047-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1048-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1048-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1049-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1049-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1049-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1049-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1051-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1051-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1051-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1051-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1052-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1052-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1053-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1053-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1054-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1054-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1055-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1055-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1055-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1055-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1056-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1056-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1056-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1056-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1057-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1057-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1057-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1058-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1058-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1058-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1059-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1059-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1059-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1060-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1061-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1061-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1062-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1062-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1063-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1063-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1064-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1065-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1066-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1067-gke", - "cindex": 58 + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "5.4.0-1068-gke", + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-37-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-39-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-40-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-42-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-45-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-47-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-48-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-51-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-52-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-53-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-54-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-58-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-59-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-60-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-62-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-64-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-65-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-66-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-67-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-70-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-71-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-72-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-73-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-74-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-77-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-80-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-81-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-84-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-86-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-87-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-89-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-90-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-91-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.11.0-1009-aws", - "cindex": 66 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.11.0-1014-aws", - "cindex": 66 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.11.0-1016-aws", - "cindex": 66 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.11.0-1017-aws", - "cindex": 66 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.11.0-1019-aws", - "cindex": 66 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.11.0-1020-aws", - "cindex": 66 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.11.0-1025-azure", - "cindex": 67 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.11.0-1027-azure", - "cindex": 67 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1009-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1011-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1015-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1017-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1018-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1020-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1021-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1022-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1024-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1025-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1028-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1029-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1032-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1034-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1035-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1037-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1038-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1039-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1041-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1043-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1045-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1047-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1048-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1049-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1051-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1054-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1055-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1056-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1057-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1058-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1059-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1060-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-26-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-28-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-29-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-31-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-33-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-37-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-39-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-40-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-42-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-45-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-47-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-48-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-51-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-52-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-53-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-54-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-58-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-59-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-60-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-62-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-64-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-65-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-66-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-67-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-70-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-71-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-72-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-73-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-74-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-77-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-80-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-81-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-84-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-86-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-88-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-89-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-90-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-91-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-1035-aws", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-1038-aws", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-1041-aws", - "cindex": 69 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-1042-aws", - "cindex": 69 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-23-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-25-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-28-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-29-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-33-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-34-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-36-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-38-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-40-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-41-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-43-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-44-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-45-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-48-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-49-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-50-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-53-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-55-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-59-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-63-generic", - "cindex": 69 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1007-azure", - "cindex": 67 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1009-aws", - "cindex": 66 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1009-gcp", - "cindex": 66 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1012-azure", - "cindex": 67 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1013-azure", - "cindex": 67 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1014-aws", - "cindex": 66 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1014-gcp", - "cindex": 66 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1015-azure", - "cindex": 67 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1016-aws", - "cindex": 66 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1017-aws", - "cindex": 66 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1017-azure", - "cindex": 67 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1017-gcp", - "cindex": 66 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1018-gcp", - "cindex": 66 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1019-aws", - "cindex": 66 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1019-azure", - "cindex": 67 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1020-aws", - "cindex": 66 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1020-azure", - "cindex": 67 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1020-gcp", - "cindex": 66 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1021-azure", - "cindex": 67 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1021-gcp", - "cindex": 66 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1022-azure", - "cindex": 67 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1022-gcp", - "cindex": 66 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1023-gcp", - "cindex": 66 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1024-gcp", - "cindex": 66 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1025-azure", - "cindex": 67 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1026-gcp", - "cindex": 66 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1027-azure", - "cindex": 67 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1028-gcp", - "cindex": 66 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1009-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1009-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1010-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1011-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1011-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1012-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1015-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1015-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1016-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1017-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1018-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1018-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1019-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1019-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1020-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1020-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1021-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1021-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1022-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1022-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1022-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1023-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1024-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1024-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1025-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1025-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1025-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1026-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1028-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1028-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1029-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1029-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1031-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1032-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1032-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1033-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1033-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1034-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1034-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1034-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1035-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1035-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1035-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1036-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1036-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1036-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1037-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1037-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1037-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1038-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1038-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1039-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1039-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1039-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1040-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1040-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1041-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1041-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1041-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1041-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1042-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1042-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1043-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1043-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1043-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1043-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1044-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1044-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1044-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1045-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1046-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1046-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1046-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1047-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1047-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1048-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1048-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1049-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1049-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1049-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1049-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1051-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1051-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1051-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1051-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1052-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1052-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1053-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1053-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1054-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1054-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1055-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1055-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1055-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1055-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1056-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1056-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1056-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1056-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1057-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1057-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1057-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1058-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1058-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1058-gcp", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1059-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1059-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1059-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1060-aws", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1061-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1061-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1062-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1062-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1063-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1063-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1064-azure", - "cindex": 65 + "cindex": 68 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1065-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1066-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1067-gke", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-26-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-28-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-29-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-31-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-33-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-37-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-39-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-40-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-42-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-45-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-47-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-48-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-51-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-52-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-53-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-54-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-58-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-59-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-60-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-62-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-64-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-65-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-66-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-67-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-70-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-71-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-72-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-73-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-74-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-77-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-80-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-81-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-84-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-86-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-88-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-89-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-90-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-91-generic", - "cindex": 58 + "cindex": 65 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1032-gcp", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1033-azure", - "cindex": 46 + "cindex": 73 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1035-aws", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1035-gcp", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1036-azure", - "cindex": 46 + "cindex": 73 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1038-aws", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1038-gcp", - "cindex": 69 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1039-azure", - "cindex": 70 + "cindex": 74 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1039-gcp", - "cindex": 69 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1040-azure", - "cindex": 70 + "cindex": 74 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1041-aws", - "cindex": 69 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1041-azure", - "cindex": 70 + "cindex": 74 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1042-aws", - "cindex": 69 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1042-azure", - "cindex": 70 + "cindex": 74 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1043-azure", - "cindex": 70 + "cindex": 74 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-23-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-25-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-28-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-29-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-33-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-34-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-36-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-38-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-40-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-41-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-43-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-44-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-45-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-48-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-49-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-50-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-53-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-55-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-59-generic", - "cindex": 68 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-63-generic", - "cindex": 69 + "cindex": 72 } ] } \ No newline at end of file diff --git a/pkg/security/probe/constantfetch/constant_names.go b/pkg/security/probe/constantfetch/constant_names.go index 3b97584232cc24..25ba04ca205e5e 100644 --- a/pkg/security/probe/constantfetch/constant_names.go +++ b/pkg/security/probe/constantfetch/constant_names.go @@ -20,6 +20,9 @@ const ( OffsetNameSignalStructStructTTY = "tty_offset" OffsetNameTTYStructStructName = "tty_name_offset" OffsetNameCredStructUID = "creds_uid_offset" + OffsetNameLinuxBinprmP = "linux_binprm_p_offset" + OffsetNameLinuxBinprmArgc = "linux_binprm_argc_offset" + OffsetNameLinuxBinprmEnvc = "linux_binprm_envc_offset" // bpf offsets OffsetNameBPFMapStructID = "bpf_map_id_offset" diff --git a/pkg/security/probe/constantfetch/fallback.go b/pkg/security/probe/constantfetch/fallback.go index 3b2c0e737367ac..e8766484d96eb3 100644 --- a/pkg/security/probe/constantfetch/fallback.go +++ b/pkg/security/probe/constantfetch/fallback.go @@ -102,6 +102,12 @@ func (f *FallbackConstantFetcher) appendRequest(id string) { value = getBinPrmFileFieldOffset(f.kernelVersion) case OffsetNameIoKiocbStructCtx: value = getIoKcbCtxOffset(f.kernelVersion) + case OffsetNameLinuxBinprmP: + value = getLinuxBinPrmPOffset(f.kernelVersion) + case OffsetNameLinuxBinprmArgc: + value = getLinuxBinPrmArgcOffset(f.kernelVersion) + case OffsetNameLinuxBinprmEnvc: + value = getLinuxBinPrmEnvcOffset(f.kernelVersion) } f.res[id] = value } @@ -719,3 +725,66 @@ func getIoKcbCtxOffset(kv *kernel.Version) uint64 { return 80 } } + +func getLinuxBinPrmPOffset(kv *kernel.Version) uint64 { + offset := uint64(152) + + switch { + case kv.Code >= kernel.Kernel5_2: + offset = 24 + case kv.IsRH8Kernel(): + fallthrough + case kv.IsAmazonLinuxKernel() && kv.Code == kernel.Kernel4_14 && + (kv.Code.Patch() == uint8(146) || kv.Code.Patch() == uint8(152) || kv.Code.Patch() == uint8(154) || + kv.Code.Patch() == uint8(158) || kv.Code.Patch() == uint8(200) || kv.Code.Patch() == uint8(203)): + offset = 280 + } + + return offset +} + +func getLinuxBinPrmArgcOffset(kv *kernel.Version) uint64 { + offset := uint64(192) + + switch { + case kv.IsInRangeCloseOpen(kernel.Kernel4_19, kernel.Kernel5_0): + offset = 192 + case kv.IsInRangeCloseOpen(kernel.Kernel5_0, kernel.Kernel5_2): + offset = 200 + case kv.IsInRangeCloseOpen(kernel.Kernel5_2, kernel.Kernel5_8): + offset = 72 + case kv.Code >= kernel.Kernel5_8: + offset = 88 + case kv.IsRH8Kernel(): + fallthrough + case kv.IsAmazonLinuxKernel() && kv.Code == kernel.Kernel4_14 && + (kv.Code.Patch() == uint8(146) || kv.Code.Patch() == uint8(152) || kv.Code.Patch() == uint8(154) || + kv.Code.Patch() == uint8(158) || kv.Code.Patch() == uint8(200) || kv.Code.Patch() == uint8(203)): + offset = 320 + } + + return offset +} + +func getLinuxBinPrmEnvcOffset(kv *kernel.Version) uint64 { + offset := uint64(196) + + switch { + case kv.IsInRangeCloseOpen(kernel.Kernel4_19, kernel.Kernel5_0): + offset = 196 + case kv.IsInRangeCloseOpen(kernel.Kernel5_0, kernel.Kernel5_2): + offset = 204 + case kv.IsInRangeCloseOpen(kernel.Kernel5_2, kernel.Kernel5_8): + offset = 76 + case kv.Code >= kernel.Kernel5_8: + offset = 92 + case kv.IsRH8Kernel(): + fallthrough + case kv.IsAmazonLinuxKernel() && kv.Code == kernel.Kernel4_14 && + (kv.Code.Patch() == uint8(146) || kv.Code.Patch() == uint8(152) || kv.Code.Patch() == uint8(154) || + kv.Code.Patch() == uint8(158) || kv.Code.Patch() == uint8(200) || kv.Code.Patch() == uint8(203)): + offset = 324 + } + + return offset +} diff --git a/pkg/security/probe/custom_events.go b/pkg/security/probe/custom_events.go index 92448d64699b55..d3258f45caeb9b 100644 --- a/pkg/security/probe/custom_events.go +++ b/pkg/security/probe/custom_events.go @@ -11,101 +11,14 @@ package probe import ( - "encoding/json" "time" - "github.com/hashicorp/go-multierror" - "github.com/mailru/easyjson" - + "github.com/DataDog/datadog-agent/pkg/security/events" "github.com/DataDog/datadog-agent/pkg/security/probe/resolvers" - "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) -const ( - // LostEventsRuleID is the rule ID for the lost_events_* events - LostEventsRuleID = "lost_events" - // RulesetLoadedRuleID is the rule ID for the ruleset_loaded events - RulesetLoadedRuleID = "ruleset_loaded" - // NoisyProcessRuleID is the rule ID for the noisy_process events - NoisyProcessRuleID = "noisy_process" - // AbnormalPathRuleID is the rule ID for the abnormal_path events - AbnormalPathRuleID = "abnormal_path" - // SelfTestRuleID is the rule ID for the self_test events - SelfTestRuleID = "self_test" -) - -// AllCustomRuleIDs returns the list of custom rule IDs -func AllCustomRuleIDs() []string { - return []string{ - LostEventsRuleID, - RulesetLoadedRuleID, - NoisyProcessRuleID, - AbnormalPathRuleID, - SelfTestRuleID, - } -} - -func newCustomEvent(eventType model.EventType, marshaler easyjson.Marshaler) *CustomEvent { - return &CustomEvent{ - eventType: eventType, - marshaler: marshaler, - } -} - -// CustomEvent is used to send custom security events to Datadog -type CustomEvent struct { - eventType model.EventType - tags []string - marshaler easyjson.Marshaler -} - -// Clone returns a copy of the current CustomEvent -func (ce *CustomEvent) Clone() CustomEvent { - return CustomEvent{ - eventType: ce.eventType, - tags: ce.tags, - marshaler: ce.marshaler, - } -} - -// GetTags returns the tags of the custom event -func (ce *CustomEvent) GetTags() []string { - return append(ce.tags, "type:"+ce.GetType()) -} - -// GetType returns the type of the custom event as a string -func (ce *CustomEvent) GetType() string { - return ce.eventType.String() -} - -// GetEventType returns the event type -func (ce *CustomEvent) GetEventType() model.EventType { - return ce.eventType -} - -// MarshalJSON is the JSON marshaller function of the custom event -func (ce *CustomEvent) MarshalJSON() ([]byte, error) { - return easyjson.Marshal(ce.marshaler) -} - -// String returns the string representation of a custom event -func (ce *CustomEvent) String() string { - d, err := json.Marshal(ce) - if err != nil { - return err.Error() - } - return string(d) -} - -func newRule(ruleDef *rules.RuleDefinition) *rules.Rule { - return &rules.Rule{ - Rule: &eval.Rule{ID: ruleDef.ID}, - Definition: ruleDef, - } -} - // EventLostRead is the event used to report lost events detected from user space // easyjson:json type EventLostRead struct { @@ -115,14 +28,12 @@ type EventLostRead struct { } // NewEventLostReadEvent returns the rule and a populated custom event for a lost_events_read event -func NewEventLostReadEvent(mapName string, lost float64) (*rules.Rule, *CustomEvent) { - return newRule(&rules.RuleDefinition{ - ID: LostEventsRuleID, - }), newCustomEvent(model.CustomLostReadEventType, EventLostRead{ - Name: mapName, - Lost: lost, - Timestamp: time.Now(), - }) +func NewEventLostReadEvent(mapName string, lost float64) (*rules.Rule, *events.CustomEvent) { + return events.NewCustomRule(events.LostEventsRuleID), events.NewCustomEvent(model.CustomLostReadEventType, EventLostRead{ + Name: mapName, + Lost: lost, + Timestamp: time.Now(), + }) } // EventLostWrite is the event used to report lost events detected from kernel space @@ -134,106 +45,12 @@ type EventLostWrite struct { } // NewEventLostWriteEvent returns the rule and a populated custom event for a lost_events_write event -func NewEventLostWriteEvent(mapName string, perEventPerCPU map[string]uint64) (*rules.Rule, *CustomEvent) { - return newRule(&rules.RuleDefinition{ - ID: LostEventsRuleID, - }), newCustomEvent(model.CustomLostWriteEventType, EventLostWrite{ - Name: mapName, - Lost: perEventPerCPU, - Timestamp: time.Now(), - }) -} - -// RuleLoaded defines a loaded rule -// easyjson:json -type RuleState struct { - ID string `json:"id"` - Version string `json:"version,omitempty"` - Expression string `json:"expression"` - Status string `json:"status"` - Message string `json:"message,omitempty"` -} - -// PolicyState is used to report policy was loaded -// easyjson:json -type PolicyState struct { - Name string `json:"name"` - Version string `json:"version"` - Source string `json:"source"` - Rules []*RuleState `json:"rules"` -} - -// RulesetLoadedEvent is used to report that a new ruleset was loaded -// easyjson:json -type RulesetLoadedEvent struct { - Timestamp time.Time `json:"date"` - Policies []*PolicyState `json:"policies"` -} - -func PolicyStateFromRuleDefinition(def *rules.RuleDefinition) *PolicyState { - return &PolicyState{ - Name: def.Policy.Name, - Version: def.Policy.Version, - Source: def.Policy.Source, - } -} - -func RuleStateFromDefinition(def *rules.RuleDefinition, status string, message string) *RuleState { - return &RuleState{ - ID: def.ID, - Version: def.Version, - Expression: def.Expression, - Status: status, - Message: message, - } -} - -// NewRuleSetLoadedEvent returns the rule and a populated custom event for a new_rules_loaded event -func NewRuleSetLoadedEvent(rs *rules.RuleSet, err *multierror.Error) (*rules.Rule, *CustomEvent) { - mp := make(map[string]*PolicyState) - - var policyState *PolicyState - var exists bool - - for _, policy := range rs.GetPolicies() { - // rule successfully loaded - for _, ruleDef := range policy.Rules { - policyName := ruleDef.Policy.Name - - if policyState, exists = mp[policyName]; !exists { - policyState = PolicyStateFromRuleDefinition(ruleDef) - mp[policyName] = policyState - } - policyState.Rules = append(policyState.Rules, RuleStateFromDefinition(ruleDef, "loaded", "")) - } - } - - // rules ignored due to errors - if err != nil && err.Errors != nil { - for _, err := range err.Errors { - if rerr, ok := err.(*rules.ErrRuleLoad); ok { - policyName := rerr.Definition.Policy.Name - - if _, exists := mp[policyName]; !exists { - policyState = PolicyStateFromRuleDefinition(rerr.Definition) - mp[policyName] = policyState - } - policyState.Rules = append(policyState.Rules, RuleStateFromDefinition(rerr.Definition, string(rerr.Type()), rerr.Err.Error())) - } - } - } - - var policies []*PolicyState - for _, policy := range mp { - policies = append(policies, policy) - } - - return newRule(&rules.RuleDefinition{ - ID: RulesetLoadedRuleID, - }), newCustomEvent(model.CustomRulesetLoadedEventType, RulesetLoadedEvent{ - Timestamp: time.Now(), - Policies: policies, - }) +func NewEventLostWriteEvent(mapName string, perEventPerCPU map[string]uint64) (*rules.Rule, *events.CustomEvent) { + return events.NewCustomRule(events.LostEventsRuleID), events.NewCustomEvent(model.CustomLostWriteEventType, EventLostWrite{ + Name: mapName, + Lost: perEventPerCPU, + Timestamp: time.Now(), + }) } // NoisyProcessEvent is used to report that a noisy process was temporarily discarded @@ -255,19 +72,17 @@ func NewNoisyProcessEvent(count uint64, discardedUntil time.Time, pid uint32, comm string, - timestamp time.Time) (*rules.Rule, *CustomEvent) { + timestamp time.Time) (*rules.Rule, *events.CustomEvent) { - return newRule(&rules.RuleDefinition{ - ID: NoisyProcessRuleID, - }), newCustomEvent(model.CustomNoisyProcessEventType, NoisyProcessEvent{ - Timestamp: timestamp, - Count: count, - Threshold: threshold, - ControlPeriod: controlPeriod, - DiscardedUntil: discardedUntil, - Pid: pid, - Comm: comm, - }) + return events.NewCustomRule(events.NoisyProcessRuleID), events.NewCustomEvent(model.CustomNoisyProcessEventType, NoisyProcessEvent{ + Timestamp: timestamp, + Count: count, + Threshold: threshold, + ControlPeriod: controlPeriod, + DiscardedUntil: discardedUntil, + Pid: pid, + Comm: comm, + }) } func resolutionErrorToEventType(err error) model.EventType { @@ -288,31 +103,10 @@ type AbnormalPathEvent struct { } // NewAbnormalPathEvent returns the rule and a populated custom event for a abnormal_path event -func NewAbnormalPathEvent(event *Event, pathResolutionError error) (*rules.Rule, *CustomEvent) { - return newRule(&rules.RuleDefinition{ - ID: AbnormalPathRuleID, - }), newCustomEvent(resolutionErrorToEventType(event.GetPathResolutionError()), AbnormalPathEvent{ - Timestamp: event.ResolveEventTimestamp(), - Event: NewEventSerializer(event), - PathResolutionError: pathResolutionError.Error(), - }) -} - -// SelfTestEvent is used to report a self test result -// easyjson:json -type SelfTestEvent struct { - Timestamp time.Time `json:"date"` - Success []string `json:"succeeded_tests"` - Fails []string `json:"failed_tests"` -} - -// NewSelfTestEvent returns the rule and the result of the self test -func NewSelfTestEvent(success []string, fails []string) (*rules.Rule, *CustomEvent) { - return newRule(&rules.RuleDefinition{ - ID: SelfTestRuleID, - }), newCustomEvent(model.CustomSelfTestEventType, SelfTestEvent{ - Timestamp: time.Now(), - Success: success, - Fails: fails, - }) +func NewAbnormalPathEvent(event *model.Event, probe *Probe, pathResolutionError error) (*rules.Rule, *events.CustomEvent) { + return events.NewCustomRule(events.AbnormalPathRuleID), events.NewCustomEvent(resolutionErrorToEventType(event.PathResolutionError), AbnormalPathEvent{ + Timestamp: event.FieldHandlers.ResolveEventTimestamp(event), + Event: NewEventSerializer(event, probe), + PathResolutionError: pathResolutionError.Error(), + }) } diff --git a/pkg/security/probe/custom_events_easyjson.go b/pkg/security/probe/custom_events_easyjson.go index 9ced5a716153fb..8f9de809272a0d 100644 --- a/pkg/security/probe/custom_events_easyjson.go +++ b/pkg/security/probe/custom_events_easyjson.go @@ -21,441 +21,7 @@ var ( _ easyjson.Marshaler ) -func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe(in *jlexer.Lexer, out *SelfTestEvent) { - isTopLevel := in.IsStart() - if in.IsNull() { - if isTopLevel { - in.Consumed() - } - in.Skip() - return - } - in.Delim('{') - for !in.IsDelim('}') { - key := in.UnsafeFieldName(false) - in.WantColon() - if in.IsNull() { - in.Skip() - in.WantComma() - continue - } - switch key { - case "date": - if data := in.Raw(); in.Ok() { - in.AddError((out.Timestamp).UnmarshalJSON(data)) - } - case "succeeded_tests": - if in.IsNull() { - in.Skip() - out.Success = nil - } else { - in.Delim('[') - if out.Success == nil { - if !in.IsDelim(']') { - out.Success = make([]string, 0, 4) - } else { - out.Success = []string{} - } - } else { - out.Success = (out.Success)[:0] - } - for !in.IsDelim(']') { - var v1 string - v1 = string(in.String()) - out.Success = append(out.Success, v1) - in.WantComma() - } - in.Delim(']') - } - case "failed_tests": - if in.IsNull() { - in.Skip() - out.Fails = nil - } else { - in.Delim('[') - if out.Fails == nil { - if !in.IsDelim(']') { - out.Fails = make([]string, 0, 4) - } else { - out.Fails = []string{} - } - } else { - out.Fails = (out.Fails)[:0] - } - for !in.IsDelim(']') { - var v2 string - v2 = string(in.String()) - out.Fails = append(out.Fails, v2) - in.WantComma() - } - in.Delim(']') - } - default: - in.SkipRecursive() - } - in.WantComma() - } - in.Delim('}') - if isTopLevel { - in.Consumed() - } -} -func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe(out *jwriter.Writer, in SelfTestEvent) { - out.RawByte('{') - first := true - _ = first - { - const prefix string = ",\"date\":" - out.RawString(prefix[1:]) - out.Raw((in.Timestamp).MarshalJSON()) - } - { - const prefix string = ",\"succeeded_tests\":" - out.RawString(prefix) - if in.Success == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { - out.RawString("null") - } else { - out.RawByte('[') - for v3, v4 := range in.Success { - if v3 > 0 { - out.RawByte(',') - } - out.String(string(v4)) - } - out.RawByte(']') - } - } - { - const prefix string = ",\"failed_tests\":" - out.RawString(prefix) - if in.Fails == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { - out.RawString("null") - } else { - out.RawByte('[') - for v5, v6 := range in.Fails { - if v5 > 0 { - out.RawByte(',') - } - out.String(string(v6)) - } - out.RawByte(']') - } - } - out.RawByte('}') -} - -// MarshalEasyJSON supports easyjson.Marshaler interface -func (v SelfTestEvent) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe(w, v) -} - -// UnmarshalEasyJSON supports easyjson.Unmarshaler interface -func (v *SelfTestEvent) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe(l, v) -} -func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe1(in *jlexer.Lexer, out *RulesetLoadedEvent) { - isTopLevel := in.IsStart() - if in.IsNull() { - if isTopLevel { - in.Consumed() - } - in.Skip() - return - } - in.Delim('{') - for !in.IsDelim('}') { - key := in.UnsafeFieldName(false) - in.WantColon() - if in.IsNull() { - in.Skip() - in.WantComma() - continue - } - switch key { - case "date": - if data := in.Raw(); in.Ok() { - in.AddError((out.Timestamp).UnmarshalJSON(data)) - } - case "policies": - if in.IsNull() { - in.Skip() - out.Policies = nil - } else { - in.Delim('[') - if out.Policies == nil { - if !in.IsDelim(']') { - out.Policies = make([]*PolicyState, 0, 8) - } else { - out.Policies = []*PolicyState{} - } - } else { - out.Policies = (out.Policies)[:0] - } - for !in.IsDelim(']') { - var v7 *PolicyState - if in.IsNull() { - in.Skip() - v7 = nil - } else { - if v7 == nil { - v7 = new(PolicyState) - } - (*v7).UnmarshalEasyJSON(in) - } - out.Policies = append(out.Policies, v7) - in.WantComma() - } - in.Delim(']') - } - default: - in.SkipRecursive() - } - in.WantComma() - } - in.Delim('}') - if isTopLevel { - in.Consumed() - } -} -func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe1(out *jwriter.Writer, in RulesetLoadedEvent) { - out.RawByte('{') - first := true - _ = first - { - const prefix string = ",\"date\":" - out.RawString(prefix[1:]) - out.Raw((in.Timestamp).MarshalJSON()) - } - { - const prefix string = ",\"policies\":" - out.RawString(prefix) - if in.Policies == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { - out.RawString("null") - } else { - out.RawByte('[') - for v8, v9 := range in.Policies { - if v8 > 0 { - out.RawByte(',') - } - if v9 == nil { - out.RawString("null") - } else { - (*v9).MarshalEasyJSON(out) - } - } - out.RawByte(']') - } - } - out.RawByte('}') -} - -// MarshalEasyJSON supports easyjson.Marshaler interface -func (v RulesetLoadedEvent) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe1(w, v) -} - -// UnmarshalEasyJSON supports easyjson.Unmarshaler interface -func (v *RulesetLoadedEvent) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe1(l, v) -} -func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe2(in *jlexer.Lexer, out *RuleState) { - isTopLevel := in.IsStart() - if in.IsNull() { - if isTopLevel { - in.Consumed() - } - in.Skip() - return - } - in.Delim('{') - for !in.IsDelim('}') { - key := in.UnsafeFieldName(false) - in.WantColon() - if in.IsNull() { - in.Skip() - in.WantComma() - continue - } - switch key { - case "id": - out.ID = string(in.String()) - case "version": - out.Version = string(in.String()) - case "expression": - out.Expression = string(in.String()) - case "status": - out.Status = string(in.String()) - case "message": - out.Message = string(in.String()) - default: - in.SkipRecursive() - } - in.WantComma() - } - in.Delim('}') - if isTopLevel { - in.Consumed() - } -} -func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe2(out *jwriter.Writer, in RuleState) { - out.RawByte('{') - first := true - _ = first - { - const prefix string = ",\"id\":" - out.RawString(prefix[1:]) - out.String(string(in.ID)) - } - if in.Version != "" { - const prefix string = ",\"version\":" - out.RawString(prefix) - out.String(string(in.Version)) - } - { - const prefix string = ",\"expression\":" - out.RawString(prefix) - out.String(string(in.Expression)) - } - { - const prefix string = ",\"status\":" - out.RawString(prefix) - out.String(string(in.Status)) - } - if in.Message != "" { - const prefix string = ",\"message\":" - out.RawString(prefix) - out.String(string(in.Message)) - } - out.RawByte('}') -} - -// MarshalEasyJSON supports easyjson.Marshaler interface -func (v RuleState) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe2(w, v) -} - -// UnmarshalEasyJSON supports easyjson.Unmarshaler interface -func (v *RuleState) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe2(l, v) -} -func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe3(in *jlexer.Lexer, out *PolicyState) { - isTopLevel := in.IsStart() - if in.IsNull() { - if isTopLevel { - in.Consumed() - } - in.Skip() - return - } - in.Delim('{') - for !in.IsDelim('}') { - key := in.UnsafeFieldName(false) - in.WantColon() - if in.IsNull() { - in.Skip() - in.WantComma() - continue - } - switch key { - case "name": - out.Name = string(in.String()) - case "version": - out.Version = string(in.String()) - case "source": - out.Source = string(in.String()) - case "rules": - if in.IsNull() { - in.Skip() - out.Rules = nil - } else { - in.Delim('[') - if out.Rules == nil { - if !in.IsDelim(']') { - out.Rules = make([]*RuleState, 0, 8) - } else { - out.Rules = []*RuleState{} - } - } else { - out.Rules = (out.Rules)[:0] - } - for !in.IsDelim(']') { - var v10 *RuleState - if in.IsNull() { - in.Skip() - v10 = nil - } else { - if v10 == nil { - v10 = new(RuleState) - } - (*v10).UnmarshalEasyJSON(in) - } - out.Rules = append(out.Rules, v10) - in.WantComma() - } - in.Delim(']') - } - default: - in.SkipRecursive() - } - in.WantComma() - } - in.Delim('}') - if isTopLevel { - in.Consumed() - } -} -func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe3(out *jwriter.Writer, in PolicyState) { - out.RawByte('{') - first := true - _ = first - { - const prefix string = ",\"name\":" - out.RawString(prefix[1:]) - out.String(string(in.Name)) - } - { - const prefix string = ",\"version\":" - out.RawString(prefix) - out.String(string(in.Version)) - } - { - const prefix string = ",\"source\":" - out.RawString(prefix) - out.String(string(in.Source)) - } - { - const prefix string = ",\"rules\":" - out.RawString(prefix) - if in.Rules == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { - out.RawString("null") - } else { - out.RawByte('[') - for v11, v12 := range in.Rules { - if v11 > 0 { - out.RawByte(',') - } - if v12 == nil { - out.RawString("null") - } else { - (*v12).MarshalEasyJSON(out) - } - } - out.RawByte(']') - } - } - out.RawByte('}') -} - -// MarshalEasyJSON supports easyjson.Marshaler interface -func (v PolicyState) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe3(w, v) -} - -// UnmarshalEasyJSON supports easyjson.Unmarshaler interface -func (v *PolicyState) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe3(l, v) -} -func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe4(in *jlexer.Lexer, out *NoisyProcessEvent) { +func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe(in *jlexer.Lexer, out *NoisyProcessEvent) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -502,7 +68,7 @@ func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe4(in *jle in.Consumed() } } -func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe4(out *jwriter.Writer, in NoisyProcessEvent) { +func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe(out *jwriter.Writer, in NoisyProcessEvent) { out.RawByte('{') first := true _ = first @@ -546,14 +112,14 @@ func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe4(out *jw // MarshalEasyJSON supports easyjson.Marshaler interface func (v NoisyProcessEvent) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe4(w, v) + easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *NoisyProcessEvent) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe4(l, v) + easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe(l, v) } -func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe5(in *jlexer.Lexer, out *EventLostWrite) { +func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe1(in *jlexer.Lexer, out *EventLostWrite) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -587,9 +153,9 @@ func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe5(in *jle for !in.IsDelim('}') { key := string(in.String()) in.WantColon() - var v13 uint64 - v13 = uint64(in.Uint64()) - (out.Lost)[key] = v13 + var v1 uint64 + v1 = uint64(in.Uint64()) + (out.Lost)[key] = v1 in.WantComma() } in.Delim('}') @@ -604,7 +170,7 @@ func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe5(in *jle in.Consumed() } } -func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe5(out *jwriter.Writer, in EventLostWrite) { +func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe1(out *jwriter.Writer, in EventLostWrite) { out.RawByte('{') first := true _ = first @@ -625,16 +191,16 @@ func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe5(out *jw out.RawString(`null`) } else { out.RawByte('{') - v14First := true - for v14Name, v14Value := range in.Lost { - if v14First { - v14First = false + v2First := true + for v2Name, v2Value := range in.Lost { + if v2First { + v2First = false } else { out.RawByte(',') } - out.String(string(v14Name)) + out.String(string(v2Name)) out.RawByte(':') - out.Uint64(uint64(v14Value)) + out.Uint64(uint64(v2Value)) } out.RawByte('}') } @@ -644,14 +210,14 @@ func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe5(out *jw // MarshalEasyJSON supports easyjson.Marshaler interface func (v EventLostWrite) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe5(w, v) + easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe1(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *EventLostWrite) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe5(l, v) + easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe1(l, v) } -func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe6(in *jlexer.Lexer, out *EventLostRead) { +func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe2(in *jlexer.Lexer, out *EventLostRead) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -688,7 +254,7 @@ func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe6(in *jle in.Consumed() } } -func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe6(out *jwriter.Writer, in EventLostRead) { +func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe2(out *jwriter.Writer, in EventLostRead) { out.RawByte('{') first := true _ = first @@ -712,14 +278,14 @@ func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe6(out *jw // MarshalEasyJSON supports easyjson.Marshaler interface func (v EventLostRead) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe6(w, v) + easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe2(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *EventLostRead) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe6(l, v) + easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe2(l, v) } -func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe7(in *jlexer.Lexer, out *AbnormalPathEvent) { +func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe3(in *jlexer.Lexer, out *AbnormalPathEvent) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -764,7 +330,7 @@ func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe7(in *jle in.Consumed() } } -func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe7(out *jwriter.Writer, in AbnormalPathEvent) { +func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe3(out *jwriter.Writer, in AbnormalPathEvent) { out.RawByte('{') first := true _ = first @@ -792,10 +358,10 @@ func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe7(out *jw // MarshalEasyJSON supports easyjson.Marshaler interface func (v AbnormalPathEvent) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe7(w, v) + easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe3(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *AbnormalPathEvent) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe7(l, v) + easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe3(l, v) } diff --git a/pkg/security/probe/discarders.go b/pkg/security/probe/discarders.go index 396e36871f4d82..b06f60b8b2b6c0 100644 --- a/pkg/security/probe/discarders.go +++ b/pkg/security/probe/discarders.go @@ -78,7 +78,7 @@ func (e ErrDiscarderNotSupported) Error() string { return fmt.Sprintf("discarder not supported for `%s`", e.Field) } -type onDiscarderHandler func(rs *rules.RuleSet, event *Event, probe *Probe, discarder Discarder) (bool, error) +type onDiscarderHandler func(rs *rules.RuleSet, event *model.Event, probe *Probe, discarder Discarder) (bool, error) var ( allDiscarderHandlers = make(map[eval.EventType][]onDiscarderHandler) @@ -88,6 +88,9 @@ var ( var ( dentryInvalidDiscarder = []interface{}{""} + eventZeroDiscarder = &model.Event{ + FieldHandlers: &model.DefaultFieldHandlers{}, + } ) // InvalidDiscarders exposes list of values that are not discarders @@ -181,7 +184,7 @@ type inodeDiscarders struct { erpc *erpc.ERPC dentryResolver *resolvers.DentryResolver rs *rules.RuleSet - discarderEvent *Event + discarderEvent *model.Event evalCtx *eval.Context // parentDiscarderFncs holds parent discarder functions per depth @@ -191,13 +194,14 @@ type inodeDiscarders struct { } func newInodeDiscarders(erpc *erpc.ERPC, dentryResolver *resolvers.DentryResolver) *inodeDiscarders { - event := NewEvent(nil, nil, nil) - ctx := eval.NewContext(event.GetPointer()) + event := *eventZeroDiscarder + + ctx := eval.NewContext(&event) id := &inodeDiscarders{ erpc: erpc, dentryResolver: dentryResolver, - discarderEvent: event, + discarderEvent: &event, evalCtx: ctx, } @@ -368,7 +372,7 @@ func (id *inodeDiscarders) getParentDiscarderFnc(rs *rules.RuleSet, eventType mo defer func() { if altered { - *id.discarderEvent = eventZero + *id.discarderEvent = *eventZeroDiscarder } }() @@ -466,10 +470,10 @@ func (id *inodeDiscarders) discardParentInode(req *erpc.ERPCRequest, rs *rules.R } // function used to retrieve discarder information, *.file.path, FileEvent, file deleted -type inodeEventGetter = func(event *Event) (eval.Field, *model.FileEvent, bool) +type inodeEventGetter = func(event *model.Event) (eval.Field, *model.FileEvent, bool) func filenameDiscarderWrapper(eventType model.EventType, getter inodeEventGetter) onDiscarderHandler { - return func(rs *rules.RuleSet, event *Event, probe *Probe, discarder Discarder) (bool, error) { + return func(rs *rules.RuleSet, event *model.Event, probe *Probe, discarder Discarder) (bool, error) { field, fileEvent, isDeleted := getter(event) if fileEvent.PathResolutionError != nil { @@ -704,67 +708,67 @@ func init() { invalidDiscarders = createInvalidDiscardersCache() allDiscarderHandlers["open"] = append(allDiscarderHandlers["open"], filenameDiscarderWrapper(model.FileOpenEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "open.file.path", &event.Open.File, false })) SupportedDiscarders["open.file.path"] = true allDiscarderHandlers["mkdir"] = append(allDiscarderHandlers["mkdir"], filenameDiscarderWrapper(model.FileMkdirEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "mkdir.file.path", &event.Mkdir.File, false })) SupportedDiscarders["mkdir.file.path"] = true allDiscarderHandlers["unlink"] = append(allDiscarderHandlers["unlink"], filenameDiscarderWrapper(model.FileUnlinkEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "unlink.file.path", &event.Unlink.File, true })) SupportedDiscarders["unlink.file.path"] = true allDiscarderHandlers["rmdir"] = append(allDiscarderHandlers["rmdir"], filenameDiscarderWrapper(model.FileRmdirEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "rmdir.file.path", &event.Rmdir.File, false })) SupportedDiscarders["rmdir.file.path"] = true allDiscarderHandlers["chmod"] = append(allDiscarderHandlers["chmod"], filenameDiscarderWrapper(model.FileChmodEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "chmod.file.path", &event.Chmod.File, false })) SupportedDiscarders["chmod.file.path"] = true allDiscarderHandlers["chown"] = append(allDiscarderHandlers["chown"], filenameDiscarderWrapper(model.FileChownEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "chown.file.path", &event.Chown.File, false })) SupportedDiscarders["chown.file.path"] = true allDiscarderHandlers["utimes"] = append(allDiscarderHandlers["utimes"], filenameDiscarderWrapper(model.FileUtimesEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "utimes.file.path", &event.Utimes.File, false })) SupportedDiscarders["utimes.file.path"] = true allDiscarderHandlers["setxattr"] = append(allDiscarderHandlers["setxattr"], filenameDiscarderWrapper(model.FileSetXAttrEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "setxattr.file.path", &event.SetXAttr.File, false })) SupportedDiscarders["setxattr.file.path"] = true allDiscarderHandlers["removexattr"] = append(allDiscarderHandlers["removexattr"], filenameDiscarderWrapper(model.FileRemoveXAttrEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "removexattr.file.path", &event.RemoveXAttr.File, false })) SupportedDiscarders["removexattr.file.path"] = true allDiscarderHandlers["mmap"] = append(allDiscarderHandlers["mmap"], filenameDiscarderWrapper(model.MMapEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "mmap.file.path", &event.MMap.File, false })) SupportedDiscarders["mmap.file.path"] = true allDiscarderHandlers["splice"] = append(allDiscarderHandlers["splice"], filenameDiscarderWrapper(model.SpliceEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "splice.file.path", &event.Splice.File, false })) SupportedDiscarders["splice.file.path"] = true diff --git a/pkg/security/probe/discarders_test.go b/pkg/security/probe/discarders_test.go index d28f57f4f46071..99144ac9d2b3e0 100644 --- a/pkg/security/probe/discarders_test.go +++ b/pkg/security/probe/discarders_test.go @@ -55,49 +55,49 @@ func TestIsParentDiscarder(t *testing.T) { WithEventTypeEnabled(enabled). WithLogger(seclog.DefaultLogger) - rs := rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/var/log/*" && unlink.file.path != "/var/log/datadog/system-probe.log"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/log/datadog/system-probe.log", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/var/log/*" && unlink.file.path != "/var/log/datadog/system-probe.log"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/lib/datadog/system-probe.sock", 1); !is { t.Error("should be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path == "/var/log/datadog/system-probe.log"`, `unlink.file.name == "datadog"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/log/datadog/datadog-agent.log", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/var/log/*" && unlink.file.name =~ ".*"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/lib/.runc/1234", 1); is { t.Error("shouldn't be able to find a parent discarder, due to partial evaluation: true && unlink.file.name =~ '.*'") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path == "/etc/conf.d/httpd.conf" || unlink.file.name == "conf.d"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/etc/conf.d/nginx.conf", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path == "/etc/conf.d/httpd.conf" || unlink.file.name == "sys.d"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/etc/sys.d/nginx.conf", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.name == "conf.d"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/etc/conf.d/nginx.conf", 1); is { @@ -105,77 +105,77 @@ func TestIsParentDiscarder(t *testing.T) { } // field that doesn't exists shouldn't return any discarders - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `rename.file.path == "/etc/conf.d/abc"`) if is, _ := id.isParentPathDiscarder(rs, model.FileRenameEventType, "rename.file.path", "/etc/conf.d/nginx.conf", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `rename.file.path == "/etc/conf.d/abc"`) if is, _ := id.isParentPathDiscarder(rs, model.FileRenameEventType, "rename.file.path", "/etc/nginx/nginx.conf", 1); !is { t.Error("should be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/etc/conf.d/*"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/etc/sys.d/nginx.conf", 1); !is { t.Error("should be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "*/conf.*"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/etc/conf.d/abc", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/etc/conf.d/ab*"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/etc/conf.d/abc", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "*/conf.d/ab*"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/etc/conf.d/abc", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "*/conf.d"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/etc/conf.d/abc", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/etc/*"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/etc/cron.d/log", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path == "/tmp/passwd"`, `open.file.path == "/tmp/secret"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/tmp/runc", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "/run/secrets/kubernetes.io/serviceaccount/*/token"`, `open.file.path == "/etc/secret"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/tmp/token", 1); !is { t.Error("should be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "*/token"`, `open.file.path == "/etc/secret"`) is, err := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/tmp/token", 1) @@ -186,35 +186,35 @@ func TestIsParentDiscarder(t *testing.T) { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "/tmp/dir/no-approver-*"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/tmp/dir/a/test", 1); !is { t.Error("should be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "/"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/tmp", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "*/conf.d/aaa"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/tmp/dir/bbb", 1); !is { t.Error("should be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "/etc/**"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/etc/conf.d/dir/aaa", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path == "/proc/${process.pid}/maps"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/proc/1/maps", 1); is { @@ -222,14 +222,14 @@ func TestIsParentDiscarder(t *testing.T) { } // test basename conflict, a basename based rule matches the parent discarder - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "/var/log/datadog/**" && open.file.name == "token"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/tmp/test1/test2", 1); !is { t.Error("should be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "/var/log/datadog/**" && open.file.name == "test1"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/tmp/test1/test2", 1); is { @@ -252,105 +252,105 @@ func TestIsGrandParentDiscarder(t *testing.T) { WithEventTypeEnabled(enabled). WithLogger(seclog.DefaultLogger) - rs := rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path == "/var/lib/datadog/system-probe.cache"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/run/datadog/system-probe.pid", 2); !is { t.Error("should be a grand parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/tmp/test"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/lib", 2); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path == "/var/run/datadog/system-probe.pid"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/run/pids/system-probe.pid", 2); is { t.Error("shouldn't be a grand parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/var/lib/datadog/system-probe.cache"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/run/datadog/system-probe.pid", 2); !is { t.Error("should be a grand parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/var/run/datadog/system-probe.pid"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/run/pids/system-probe.pid", 2); is { t.Error("shouldn't be a grand parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "*/run/datadog/system-probe.pid"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/run/datadog/system-probe.pid", 2); is { t.Error("shouldn't be a grand parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "*/run/datadog/system-probe.pid"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/lib/datadog/system-probe.pid", 2); !is { t.Error("should be a grand parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/var/*/datadog/system-probe.pid"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/run/datadog/system-probe.pid", 2); is { t.Error("shouldn't be a grand parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/var/lib/datadog/system-probe.pid"`, `unlink.file.name =~ "run"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/run/datadog/system-probe.pid", 2); is { t.Error("shouldn't be a grand parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/var/*"`, `unlink.file.name =~ "run"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/run/datadog/system-probe.pid", 2); is { t.Error("shouldn't be a grand parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "/tmp/dir/*"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/tmp/dir/a/test", 2); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.name == "dir"`) // + variants if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/tmp/dir/a/test", 2); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path == "/tmp/dir/a"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/tmp", 2); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path == "/tmp"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/tmp/dir/a", 2); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path == "/tmp"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/tmp", 2); is { @@ -386,18 +386,18 @@ func TestIsDiscarderOverride(t *testing.T) { var listener testEventListener - rs := rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) rs.AddListener(&listener) addRuleExpr(t, rs, `unlink.file.path == "/var/log/httpd" && process.file.path == "/bin/touch"`) - var event Event + event := rs.NewEvent().(*model.Event) event.Init() event.Type = uint32(model.FileUnlinkEventType) event.SetFieldValue("unlink.file.path", "/var/log/httpd") event.SetFieldValue("process.file.path", "/bin/touch") - rs.Evaluate(&event) + rs.Evaluate(event) if listener.fields["process.file.path"] > 0 { t.Error("shouldn't get a discarder") @@ -405,7 +405,7 @@ func TestIsDiscarderOverride(t *testing.T) { event.SetFieldValue("process.file.path", "/bin/cat") - rs.Evaluate(&event) + rs.Evaluate(event) if listener.fields["process.file.path"] == 0 { t.Error("should get a discarder") @@ -427,7 +427,7 @@ func BenchmarkParentDiscarder(b *testing.B) { WithEventTypeEnabled(enabled). WithLogger(seclog.DefaultLogger) - rs := rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(b, rs, `unlink.file.path =~ "/var/log/*" && unlink.file.path != "/var/log/datadog/system-probe.log"`) b.ResetTimer() diff --git a/pkg/security/probe/field_handlers.go b/pkg/security/probe/field_handlers.go new file mode 100644 index 00000000000000..949d38326005cd --- /dev/null +++ b/pkg/security/probe/field_handlers.go @@ -0,0 +1,477 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux +// +build linux + +package probe + +import ( + "path" + "sort" + "strings" + "syscall" + "time" + + "github.com/DataDog/datadog-agent/pkg/security/secl/model" +) + +type FieldHandlers struct { + resolvers *Resolvers +} + +// ResolveFilePath resolves the inode to a full path +func (fh *FieldHandlers) ResolveFilePath(ev *model.Event, f *model.FileEvent) string { + if !f.IsPathnameStrResolved && len(f.PathnameStr) == 0 { + path, err := fh.resolvers.resolveFileFieldsPath(&f.FileFields, &ev.PIDContext, &ev.ContainerContext) + if err != nil { + ev.SetPathResolutionError(f, err) + } + f.SetPathnameStr(path) + } + + return f.PathnameStr +} + +// ResolveFileBasename resolves the inode to a full path +func (fh *FieldHandlers) ResolveFileBasename(ev *model.Event, f *model.FileEvent) string { + if !f.IsBasenameStrResolved && len(f.BasenameStr) == 0 { + if f.PathnameStr != "" { + f.SetBasenameStr(path.Base(f.PathnameStr)) + } else { + f.SetBasenameStr(fh.resolvers.resolveBasename(&f.FileFields)) + } + } + return f.BasenameStr +} + +// ResolveFileFilesystem resolves the filesystem a file resides in +func (fh *FieldHandlers) ResolveFileFilesystem(ev *model.Event, f *model.FileEvent) string { + if f.Filesystem == "" && !f.IsFileless() { + fs, err := fh.resolvers.MountResolver.ResolveFilesystem(f.FileFields.MountID, ev.PIDContext.Pid, ev.ContainerContext.ID) + if err != nil { + ev.SetPathResolutionError(f, err) + } + f.Filesystem = fs + } + return f.Filesystem +} + +// ResolveFileFieldsInUpperLayer resolves whether the file is in an upper layer +func (fh *FieldHandlers) ResolveFileFieldsInUpperLayer(ev *model.Event, f *model.FileFields) bool { + return f.GetInUpperLayer() +} + +// ResolveXAttrName returns the string representation of the extended attribute name +func (fh *FieldHandlers) ResolveXAttrName(ev *model.Event, e *model.SetXAttrEvent) string { + if len(e.Name) == 0 { + e.Name, _ = model.UnmarshalString(e.NameRaw[:], 200) + } + return e.Name +} + +// ResolveXAttrNamespace returns the string representation of the extended attribute namespace +func (fh *FieldHandlers) ResolveXAttrNamespace(ev *model.Event, e *model.SetXAttrEvent) string { + if len(e.Namespace) == 0 { + ns, _, found := strings.Cut(fh.ResolveXAttrName(ev, e), ".") + if found { + e.Namespace = ns + } + } + return e.Namespace +} + +// SetMountPoint set the mount point information +func (fh *FieldHandlers) SetMountPoint(ev *model.Event, e *model.Mount) error { + var err error + e.MountPointStr, err = fh.resolvers.DentryResolver.Resolve(e.ParentMountID, e.ParentInode, 0, true) + return err +} + +// ResolveMountPoint resolves the mountpoint to a full path +func (fh *FieldHandlers) ResolveMountPoint(ev *model.Event, e *model.Mount) (string, error) { + if len(e.MountPointStr) == 0 { + if err := fh.SetMountPoint(ev, e); err != nil { + return "", err + } + } + return e.MountPointStr, nil +} + +// SetMountRoot set the mount point information +func (fh *FieldHandlers) SetMountRoot(ev *model.Event, e *model.Mount) error { + var err error + e.RootStr, err = fh.resolvers.DentryResolver.Resolve(e.RootMountID, e.RootInode, 0, true) + return err +} + +// ResolveMountRoot resolves the mountpoint to a full path +func (fh *FieldHandlers) ResolveMountRoot(ev *model.Event, e *model.Mount) (string, error) { + if len(e.RootStr) == 0 { + if err := fh.SetMountRoot(ev, e); err != nil { + return "", err + } + } + return e.RootStr, nil +} + +func (fh *FieldHandlers) ResolveMountPointPath(ev *model.Event, e *model.MountEvent) string { + if len(e.MountPointPath) == 0 { + mountPointPath, err := fh.resolvers.MountResolver.ResolveMountPath(e.MountID, ev.PIDContext.Pid, ev.ContainerContext.ID) + if err != nil { + e.MountPointPathResolutionError = err + return "" + } + e.MountPointPath = mountPointPath + } + return e.MountPointPath +} + +func (fh *FieldHandlers) ResolveMountSourcePath(ev *model.Event, e *model.MountEvent) string { + if e.BindSrcMountID != 0 && len(e.MountSourcePath) == 0 { + bindSourceMountPath, err := fh.resolvers.MountResolver.ResolveMountPath(e.BindSrcMountID, ev.PIDContext.Pid, ev.ContainerContext.ID) + if err != nil { + e.MountSourcePathResolutionError = err + return "" + } + rootStr, err := fh.ResolveMountRoot(ev, &e.Mount) + if err != nil { + e.MountSourcePathResolutionError = err + return "" + } + e.MountSourcePath = path.Join(bindSourceMountPath, rootStr) + } + return e.MountSourcePath +} + +// ResolveContainerID resolves the container ID of the event +func (fh *FieldHandlers) ResolveContainerID(ev *model.Event, e *model.ContainerContext) string { + if len(e.ID) == 0 { + if entry, _ := fh.ResolveProcessCacheEntry(ev); entry != nil { + e.ID = entry.ContainerID + } + } + return e.ID +} + +// ResolveContainerTags resolves the container tags of the event +func (fh *FieldHandlers) ResolveContainerTags(ev *model.Event, e *model.ContainerContext) []string { + if len(e.Tags) == 0 && e.ID != "" { + e.Tags = fh.resolvers.TagsResolver.Resolve(e.ID) + } + return e.Tags +} + +// ResolveRights resolves the rights of a file +func (fh *FieldHandlers) ResolveRights(ev *model.Event, e *model.FileFields) int { + return int(e.Mode) & (syscall.S_ISUID | syscall.S_ISGID | syscall.S_ISVTX | syscall.S_IRWXU | syscall.S_IRWXG | syscall.S_IRWXO) +} + +// ResolveChownUID resolves the ResolveProcessCacheEntry id of a chown event to a username +func (fh *FieldHandlers) ResolveChownUID(ev *model.Event, e *model.ChownEvent) string { + if len(e.User) == 0 { + e.User, _ = fh.resolvers.UserGroupResolver.ResolveUser(int(e.UID)) + } + return e.User +} + +// ResolveChownGID resolves the group id of a chown event to a group name +func (fh *FieldHandlers) ResolveChownGID(ev *model.Event, e *model.ChownEvent) string { + if len(e.Group) == 0 { + e.Group, _ = fh.resolvers.UserGroupResolver.ResolveGroup(int(e.GID)) + } + return e.Group +} + +// ResolveProcessCreatedAt resolves process creation time +func (fh *FieldHandlers) ResolveProcessCreatedAt(ev *model.Event, e *model.Process) int { + return int(e.ExecTime.UnixNano()) +} + +// ResolveProcessArgv0 resolves the first arg of the event +func (fh *FieldHandlers) ResolveProcessArgv0(ev *model.Event, process *model.Process) string { + arg0, _ := fh.resolvers.ProcessResolver.GetProcessArgv0(process) + return arg0 +} + +// ResolveProcessArgs resolves the args of the event +func (fh *FieldHandlers) ResolveProcessArgs(ev *model.Event, process *model.Process) string { + return strings.Join(fh.ResolveProcessArgv(ev, process), " ") +} + +// ResolveProcessArgv resolves the args of the event as an array +func (fh *FieldHandlers) ResolveProcessArgv(ev *model.Event, process *model.Process) []string { + argv, _ := fh.resolvers.ProcessResolver.GetProcessArgv(process) + return argv +} + +// ResolveProcessEnvp resolves the envp of the event as an array +func (fh *FieldHandlers) ResolveProcessEnvp(ev *model.Event, process *model.Process) []string { + envp, _ := fh.resolvers.ProcessResolver.GetProcessEnvp(process) + return envp +} + +// ResolveProcessArgsTruncated returns whether the args are truncated +func (fh *FieldHandlers) ResolveProcessArgsTruncated(ev *model.Event, process *model.Process) bool { + _, truncated := fh.resolvers.ProcessResolver.GetProcessArgv(process) + return truncated +} + +// ResolveProcessArgsFlags resolves the arguments flags of the event +func (fh *FieldHandlers) ResolveProcessArgsFlags(ev *model.Event, process *model.Process) (flags []string) { + for _, arg := range fh.ResolveProcessArgv(ev, process) { + if len(arg) > 1 && arg[0] == '-' { + isFlag := true + name := arg[1:] + if len(name) >= 1 && name[0] == '-' { + name = name[1:] + isFlag = false + } + + isOption := false + for _, r := range name { + isFlag = isFlag && model.IsAlphaNumeric(r) + isOption = isOption || r == '=' + } + + if len(name) > 0 { + if isFlag { + for _, r := range name { + flags = append(flags, string(r)) + } + } + if !isOption && len(name) > 1 { + flags = append(flags, name) + } + } + } + } + return +} + +// ResolveProcessArgsOptions resolves the arguments options of the event +func (fh *FieldHandlers) ResolveProcessArgsOptions(ev *model.Event, process *model.Process) (options []string) { + args := fh.ResolveProcessArgv(ev, process) + for i := 0; i < len(args); i++ { + arg := args[i] + if len(arg) > 1 && arg[0] == '-' { + name := arg[1:] + if len(name) >= 1 && name[0] == '-' { + name = name[1:] + } + if len(name) > 0 && model.IsAlphaNumeric(rune(name[0])) { + if index := strings.IndexRune(name, '='); index == -1 { + if i < len(args)-1 && (len(args[i+1]) == 0 || args[i+1][0] != '-') { + options = append(options, name+"="+args[i+1]) + i++ + } + } else { + options = append(options, name) + } + } + } + } + return +} + +// ResolveProcessEnvsTruncated returns whether the envs are truncated +func (fh *FieldHandlers) ResolveProcessEnvsTruncated(ev *model.Event, process *model.Process) bool { + _, truncated := fh.resolvers.ProcessResolver.GetProcessEnvs(process) + return truncated +} + +// ResolveProcessEnvs resolves the envs of the event +func (fh *FieldHandlers) ResolveProcessEnvs(ev *model.Event, process *model.Process) []string { + envs, _ := fh.resolvers.ProcessResolver.GetProcessEnvs(process) + return envs +} + +// ResolveSetuidUser resolves the user of the Setuid event +func (fh *FieldHandlers) ResolveSetuidUser(ev *model.Event, e *model.SetuidEvent) string { + if len(e.User) == 0 { + e.User, _ = fh.resolvers.UserGroupResolver.ResolveUser(int(e.UID)) + } + return e.User +} + +// ResolveSetuidEUser resolves the effective user of the Setuid event +func (fh *FieldHandlers) ResolveSetuidEUser(ev *model.Event, e *model.SetuidEvent) string { + if len(e.EUser) == 0 { + e.EUser, _ = fh.resolvers.UserGroupResolver.ResolveUser(int(e.EUID)) + } + return e.EUser +} + +// ResolveSetuidFSUser resolves the file-system user of the Setuid event +func (fh *FieldHandlers) ResolveSetuidFSUser(ev *model.Event, e *model.SetuidEvent) string { + if len(e.FSUser) == 0 { + e.FSUser, _ = fh.resolvers.UserGroupResolver.ResolveUser(int(e.FSUID)) + } + return e.FSUser +} + +// ResolveSetgidGroup resolves the group of the Setgid event +func (fh *FieldHandlers) ResolveSetgidGroup(ev *model.Event, e *model.SetgidEvent) string { + if len(e.Group) == 0 { + e.Group, _ = fh.resolvers.UserGroupResolver.ResolveUser(int(e.GID)) + } + return e.Group +} + +// ResolveSetgidEGroup resolves the effective group of the Setgid event +func (fh *FieldHandlers) ResolveSetgidEGroup(ev *model.Event, e *model.SetgidEvent) string { + if len(e.EGroup) == 0 { + e.EGroup, _ = fh.resolvers.UserGroupResolver.ResolveUser(int(e.EGID)) + } + return e.EGroup +} + +// ResolveSetgidFSGroup resolves the file-system group of the Setgid event +func (fh *FieldHandlers) ResolveSetgidFSGroup(ev *model.Event, e *model.SetgidEvent) string { + if len(e.FSGroup) == 0 { + e.FSGroup, _ = fh.resolvers.UserGroupResolver.ResolveUser(int(e.FSGID)) + } + return e.FSGroup +} + +// ResolveSELinuxBoolName resolves the boolean name of the SELinux event +func (fh *FieldHandlers) ResolveSELinuxBoolName(ev *model.Event, e *model.SELinuxEvent) string { + if e.EventKind != model.SELinuxBoolChangeEventKind { + return "" + } + + if len(e.BoolName) == 0 { + e.BoolName = fh.resolvers.resolveBasename(&e.File.FileFields) + } + return e.BoolName +} + +// ResolveProcessCacheEntry queries the ProcessResolver to retrieve the ProcessContext of the event +func (fh *FieldHandlers) ResolveProcessCacheEntry(ev *model.Event) (*model.ProcessCacheEntry, bool) { + if ev.PIDContext.IsKworker { + return ev.NewEmptyProcessCacheEntry(), false + } + + if ev.ProcessCacheEntry == nil { + ev.ProcessCacheEntry = fh.resolvers.ProcessResolver.Resolve(ev.PIDContext.Pid, ev.PIDContext.Tid, ev.PIDContext.Inode) + } + + if ev.ProcessCacheEntry == nil { + // keep the original PIDContext + ev.ProcessCacheEntry = model.NewProcessCacheEntry(nil) + ev.ProcessCacheEntry.PIDContext = ev.PIDContext + + ev.ProcessCacheEntry.FileEvent.SetPathnameStr("") + ev.ProcessCacheEntry.FileEvent.SetBasenameStr("") + + // mark interpreter as resolved too + ev.ProcessCacheEntry.LinuxBinprm.FileEvent.SetPathnameStr("") + ev.ProcessCacheEntry.LinuxBinprm.FileEvent.SetBasenameStr("") + + return ev.ProcessCacheEntry, false + } + + return ev.ProcessCacheEntry, true +} + +// GetProcessServiceTag returns the service tag based on the process context +func (fh *FieldHandlers) GetProcessServiceTag(ev *model.Event) string { + entry, _ := fh.ResolveProcessCacheEntry(ev) + if entry == nil { + return "" + } + + var serviceValues []string + + // first search in the process context itself + if entry.EnvsEntry != nil { + if service := entry.EnvsEntry.Get(ServiceEnvVar); service != "" { + serviceValues = append(serviceValues, service) + } + } + + inContainer := entry.ContainerID != "" + + // while in container check for each ancestor + for ancestor := entry.Ancestor; ancestor != nil; ancestor = ancestor.Ancestor { + if inContainer && ancestor.ContainerID == "" { + break + } + + if ancestor.EnvsEntry != nil { + if service := ancestor.EnvsEntry.Get(ServiceEnvVar); service != "" { + serviceValues = append(serviceValues, service) + } + } + } + + return bestGuessServiceTag(serviceValues) +} + +// ResolveFileFieldsGroup resolves the group id of the file to a group name +func (fh *FieldHandlers) ResolveFileFieldsGroup(ev *model.Event, e *model.FileFields) string { + if len(e.Group) == 0 { + e.Group, _ = fh.resolvers.UserGroupResolver.ResolveGroup(int(e.GID)) + } + return e.Group +} + +func bestGuessServiceTag(serviceValues []string) string { + if len(serviceValues) == 0 { + return "" + } + + firstGuess := serviceValues[0] + + // first we sort base on len, biggest len first + sort.Slice(serviceValues, func(i, j int) bool { + return len(serviceValues[j]) < len(serviceValues[i]) // reverse + }) + + // we then compare [i] and [i + 1] to check if [i + 1] is a prefix of [i] + for i := 0; i < len(serviceValues)-1; i++ { + if !strings.HasPrefix(serviceValues[i], serviceValues[i+1]) { + // if it's not a prefix it means we have multiple disjoints services + // we then return the first guess, closest in the process tree + return firstGuess + } + } + + // we have a prefix chain, let's return the biggest one + return serviceValues[0] +} + +// ResolveNetworkDeviceIfName returns the network iterface name from the network context +func (fh *FieldHandlers) ResolveNetworkDeviceIfName(ev *model.Event, device *model.NetworkDeviceContext) string { + if len(device.IfName) == 0 && fh.resolvers.TCResolver != nil { + ifName, ok := fh.resolvers.TCResolver.ResolveNetworkDeviceIfName(device.IfIndex, device.NetNS) + if ok { + device.IfName = ifName + } + } + + return device.IfName +} + +// ResolveFileFieldsUser resolves the user id of the file to a username +func (fh *FieldHandlers) ResolveFileFieldsUser(ev *model.Event, e *model.FileFields) string { + if len(e.User) == 0 { + e.User, _ = fh.resolvers.UserGroupResolver.ResolveUser(int(e.UID)) + } + return e.User +} + +// ResolveEventTimestamp resolves the monolitic kernel event timestamp to an absolute time +func (fh *FieldHandlers) ResolveEventTimestamp(ev *model.Event) time.Time { + if ev.Timestamp.IsZero() { + fh := ev.FieldHandlers.(*FieldHandlers) + + ev.Timestamp = fh.resolvers.TimeResolver.ResolveMonotonicTimestamp(ev.TimestampRaw) + if ev.Timestamp.IsZero() { + ev.Timestamp = time.Now() + } + } + return ev.Timestamp +} diff --git a/pkg/security/probe/fields_resolver.go b/pkg/security/probe/fields_resolver.go deleted file mode 100644 index f810a32fb72fa0..00000000000000 --- a/pkg/security/probe/fields_resolver.go +++ /dev/null @@ -1,562 +0,0 @@ -//go:build linux -// +build linux - -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2022-present Datadog, Inc. -// Code generated - DO NOT EDIT. -package probe - -// ResolveFields resolves all the fields associate to the event type. Context fields are automatically resolved. -func (ev *Event) ResolveFields(forADs bool) { - // resolve context fields that are not related to any event type - _ = ev.ResolveContainerID(&ev.ContainerContext) - if !forADs { - _ = ev.ResolveContainerTags(&ev.ContainerContext) - } - _ = ev.ResolveNetworkDeviceIfName(&ev.NetworkContext.Device) - _ = ev.ResolveProcessArgs(&ev.ProcessContext.Process) - _ = ev.ResolveProcessArgsTruncated(&ev.ProcessContext.Process) - _ = ev.ResolveProcessArgv(&ev.ProcessContext.Process) - _ = ev.ResolveProcessArgv0(&ev.ProcessContext.Process) - _ = ev.ResolveProcessCreatedAt(&ev.ProcessContext.Process) - _ = ev.ResolveProcessEnvp(&ev.ProcessContext.Process) - _ = ev.ResolveProcessEnvs(&ev.ProcessContext.Process) - _ = ev.ResolveProcessEnvsTruncated(&ev.ProcessContext.Process) - if ev.ProcessContext.Process.IsNotKworker() { - _ = ev.ResolveFileFilesystem(&ev.ProcessContext.Process.FileEvent) - } - if ev.ProcessContext.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsGroup(&ev.ProcessContext.Process.FileEvent.FileFields) - } - if ev.ProcessContext.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.ProcessContext.Process.FileEvent.FileFields) - } - if ev.ProcessContext.Process.IsNotKworker() { - _ = ev.ResolveFileBasename(&ev.ProcessContext.Process.FileEvent) - } - if ev.ProcessContext.Process.IsNotKworker() { - _ = ev.ResolveFilePath(&ev.ProcessContext.Process.FileEvent) - } - if ev.ProcessContext.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsUser(&ev.ProcessContext.Process.FileEvent.FileFields) - } - if ev.ProcessContext.Process.HasInterpreter() { - _ = ev.ResolveFileFilesystem(&ev.ProcessContext.Process.LinuxBinprm.FileEvent) - } - if ev.ProcessContext.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsGroup(&ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.ProcessContext.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.ProcessContext.Process.HasInterpreter() { - _ = ev.ResolveFileBasename(&ev.ProcessContext.Process.LinuxBinprm.FileEvent) - } - if ev.ProcessContext.Process.HasInterpreter() { - _ = ev.ResolveFilePath(&ev.ProcessContext.Process.LinuxBinprm.FileEvent) - } - if ev.ProcessContext.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsUser(&ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveProcessArgs(ev.ProcessContext.Parent) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveProcessArgsTruncated(ev.ProcessContext.Parent) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveProcessArgv(ev.ProcessContext.Parent) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveProcessArgv0(ev.ProcessContext.Parent) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveProcessCreatedAt(ev.ProcessContext.Parent) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveProcessEnvp(ev.ProcessContext.Parent) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveProcessEnvs(ev.ProcessContext.Parent) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveProcessEnvsTruncated(ev.ProcessContext.Parent) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { - _ = ev.ResolveFileFilesystem(&ev.ProcessContext.Parent.FileEvent) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { - _ = ev.ResolveFileFieldsGroup(&ev.ProcessContext.Parent.FileEvent.FileFields) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.ProcessContext.Parent.FileEvent.FileFields) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { - _ = ev.ResolveFileBasename(&ev.ProcessContext.Parent.FileEvent) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { - _ = ev.ResolveFilePath(&ev.ProcessContext.Parent.FileEvent) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { - _ = ev.ResolveFileFieldsUser(&ev.ProcessContext.Parent.FileEvent.FileFields) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { - _ = ev.ResolveFileFilesystem(&ev.ProcessContext.Parent.LinuxBinprm.FileEvent) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { - _ = ev.ResolveFileFieldsGroup(&ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { - _ = ev.ResolveFileBasename(&ev.ProcessContext.Parent.LinuxBinprm.FileEvent) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { - _ = ev.ResolveFilePath(&ev.ProcessContext.Parent.LinuxBinprm.FileEvent) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { - _ = ev.ResolveFileFieldsUser(&ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) - } - // resolve event specific fields - switch ev.GetEventType().String() { - case "bind": - case "bpf": - _ = ev.ResolveHelpers(&ev.BPF.Program) - case "capset": - case "chmod": - _ = ev.ResolveFileFieldsUser(&ev.Chmod.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Chmod.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Chmod.File.FileFields) - _ = ev.ResolveFilePath(&ev.Chmod.File) - _ = ev.ResolveFileBasename(&ev.Chmod.File) - _ = ev.ResolveFileFilesystem(&ev.Chmod.File) - case "chown": - _ = ev.ResolveFileFieldsUser(&ev.Chown.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Chown.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Chown.File.FileFields) - _ = ev.ResolveFilePath(&ev.Chown.File) - _ = ev.ResolveFileBasename(&ev.Chown.File) - _ = ev.ResolveFileFilesystem(&ev.Chown.File) - _ = ev.ResolveChownUID(&ev.Chown) - _ = ev.ResolveChownGID(&ev.Chown) - case "dns": - case "exec": - if ev.Exec.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsUser(&ev.Exec.Process.FileEvent.FileFields) - } - if ev.Exec.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsGroup(&ev.Exec.Process.FileEvent.FileFields) - } - if ev.Exec.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Exec.Process.FileEvent.FileFields) - } - if ev.Exec.Process.IsNotKworker() { - _ = ev.ResolveFilePath(&ev.Exec.Process.FileEvent) - } - if ev.Exec.Process.IsNotKworker() { - _ = ev.ResolveFileBasename(&ev.Exec.Process.FileEvent) - } - if ev.Exec.Process.IsNotKworker() { - _ = ev.ResolveFileFilesystem(&ev.Exec.Process.FileEvent) - } - if ev.Exec.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsUser(&ev.Exec.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.Exec.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsGroup(&ev.Exec.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.Exec.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Exec.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.Exec.Process.HasInterpreter() { - _ = ev.ResolveFilePath(&ev.Exec.Process.LinuxBinprm.FileEvent) - } - if ev.Exec.Process.HasInterpreter() { - _ = ev.ResolveFileBasename(&ev.Exec.Process.LinuxBinprm.FileEvent) - } - if ev.Exec.Process.HasInterpreter() { - _ = ev.ResolveFileFilesystem(&ev.Exec.Process.LinuxBinprm.FileEvent) - } - _ = ev.ResolveProcessCreatedAt(ev.Exec.Process) - _ = ev.ResolveProcessArgv0(ev.Exec.Process) - _ = ev.ResolveProcessArgs(ev.Exec.Process) - _ = ev.ResolveProcessArgv(ev.Exec.Process) - _ = ev.ResolveProcessArgsTruncated(ev.Exec.Process) - _ = ev.ResolveProcessEnvs(ev.Exec.Process) - _ = ev.ResolveProcessEnvp(ev.Exec.Process) - _ = ev.ResolveProcessEnvsTruncated(ev.Exec.Process) - case "exit": - if ev.Exit.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsUser(&ev.Exit.Process.FileEvent.FileFields) - } - if ev.Exit.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsGroup(&ev.Exit.Process.FileEvent.FileFields) - } - if ev.Exit.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Exit.Process.FileEvent.FileFields) - } - if ev.Exit.Process.IsNotKworker() { - _ = ev.ResolveFilePath(&ev.Exit.Process.FileEvent) - } - if ev.Exit.Process.IsNotKworker() { - _ = ev.ResolveFileBasename(&ev.Exit.Process.FileEvent) - } - if ev.Exit.Process.IsNotKworker() { - _ = ev.ResolveFileFilesystem(&ev.Exit.Process.FileEvent) - } - if ev.Exit.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsUser(&ev.Exit.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.Exit.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsGroup(&ev.Exit.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.Exit.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Exit.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.Exit.Process.HasInterpreter() { - _ = ev.ResolveFilePath(&ev.Exit.Process.LinuxBinprm.FileEvent) - } - if ev.Exit.Process.HasInterpreter() { - _ = ev.ResolveFileBasename(&ev.Exit.Process.LinuxBinprm.FileEvent) - } - if ev.Exit.Process.HasInterpreter() { - _ = ev.ResolveFileFilesystem(&ev.Exit.Process.LinuxBinprm.FileEvent) - } - _ = ev.ResolveProcessCreatedAt(ev.Exit.Process) - _ = ev.ResolveProcessArgv0(ev.Exit.Process) - _ = ev.ResolveProcessArgs(ev.Exit.Process) - _ = ev.ResolveProcessArgv(ev.Exit.Process) - _ = ev.ResolveProcessArgsTruncated(ev.Exit.Process) - _ = ev.ResolveProcessEnvs(ev.Exit.Process) - _ = ev.ResolveProcessEnvp(ev.Exit.Process) - _ = ev.ResolveProcessEnvsTruncated(ev.Exit.Process) - case "link": - _ = ev.ResolveFileFieldsUser(&ev.Link.Source.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Link.Source.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Link.Source.FileFields) - _ = ev.ResolveFilePath(&ev.Link.Source) - _ = ev.ResolveFileBasename(&ev.Link.Source) - _ = ev.ResolveFileFilesystem(&ev.Link.Source) - _ = ev.ResolveFileFieldsUser(&ev.Link.Target.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Link.Target.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Link.Target.FileFields) - _ = ev.ResolveFilePath(&ev.Link.Target) - _ = ev.ResolveFileBasename(&ev.Link.Target) - _ = ev.ResolveFileFilesystem(&ev.Link.Target) - case "load_module": - _ = ev.ResolveFileFieldsUser(&ev.LoadModule.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.LoadModule.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.LoadModule.File.FileFields) - _ = ev.ResolveFilePath(&ev.LoadModule.File) - _ = ev.ResolveFileBasename(&ev.LoadModule.File) - _ = ev.ResolveFileFilesystem(&ev.LoadModule.File) - case "mkdir": - _ = ev.ResolveFileFieldsUser(&ev.Mkdir.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Mkdir.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Mkdir.File.FileFields) - _ = ev.ResolveFilePath(&ev.Mkdir.File) - _ = ev.ResolveFileBasename(&ev.Mkdir.File) - _ = ev.ResolveFileFilesystem(&ev.Mkdir.File) - case "mmap": - _ = ev.ResolveFileFieldsUser(&ev.MMap.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.MMap.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.MMap.File.FileFields) - _ = ev.ResolveFilePath(&ev.MMap.File) - _ = ev.ResolveFileBasename(&ev.MMap.File) - _ = ev.ResolveFileFilesystem(&ev.MMap.File) - case "mount": - _ = ev.ResolveMountPointPath(&ev.Mount) - _ = ev.ResolveMountSourcePath(&ev.Mount) - case "mprotect": - case "open": - _ = ev.ResolveFileFieldsUser(&ev.Open.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Open.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Open.File.FileFields) - _ = ev.ResolveFilePath(&ev.Open.File) - _ = ev.ResolveFileBasename(&ev.Open.File) - _ = ev.ResolveFileFilesystem(&ev.Open.File) - case "ptrace": - if ev.PTrace.Tracee.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsUser(&ev.PTrace.Tracee.Process.FileEvent.FileFields) - } - if ev.PTrace.Tracee.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsGroup(&ev.PTrace.Tracee.Process.FileEvent.FileFields) - } - if ev.PTrace.Tracee.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.PTrace.Tracee.Process.FileEvent.FileFields) - } - if ev.PTrace.Tracee.Process.IsNotKworker() { - _ = ev.ResolveFilePath(&ev.PTrace.Tracee.Process.FileEvent) - } - if ev.PTrace.Tracee.Process.IsNotKworker() { - _ = ev.ResolveFileBasename(&ev.PTrace.Tracee.Process.FileEvent) - } - if ev.PTrace.Tracee.Process.IsNotKworker() { - _ = ev.ResolveFileFilesystem(&ev.PTrace.Tracee.Process.FileEvent) - } - if ev.PTrace.Tracee.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsUser(&ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.PTrace.Tracee.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsGroup(&ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.PTrace.Tracee.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.PTrace.Tracee.Process.HasInterpreter() { - _ = ev.ResolveFilePath(&ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent) - } - if ev.PTrace.Tracee.Process.HasInterpreter() { - _ = ev.ResolveFileBasename(&ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent) - } - if ev.PTrace.Tracee.Process.HasInterpreter() { - _ = ev.ResolveFileFilesystem(&ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent) - } - _ = ev.ResolveProcessCreatedAt(&ev.PTrace.Tracee.Process) - _ = ev.ResolveProcessArgv0(&ev.PTrace.Tracee.Process) - _ = ev.ResolveProcessArgs(&ev.PTrace.Tracee.Process) - _ = ev.ResolveProcessArgv(&ev.PTrace.Tracee.Process) - _ = ev.ResolveProcessArgsTruncated(&ev.PTrace.Tracee.Process) - _ = ev.ResolveProcessEnvs(&ev.PTrace.Tracee.Process) - _ = ev.ResolveProcessEnvp(&ev.PTrace.Tracee.Process) - _ = ev.ResolveProcessEnvsTruncated(&ev.PTrace.Tracee.Process) - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { - _ = ev.ResolveFileFieldsUser(&ev.PTrace.Tracee.Parent.FileEvent.FileFields) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { - _ = ev.ResolveFileFieldsGroup(&ev.PTrace.Tracee.Parent.FileEvent.FileFields) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.PTrace.Tracee.Parent.FileEvent.FileFields) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { - _ = ev.ResolveFilePath(&ev.PTrace.Tracee.Parent.FileEvent) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { - _ = ev.ResolveFileBasename(&ev.PTrace.Tracee.Parent.FileEvent) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { - _ = ev.ResolveFileFilesystem(&ev.PTrace.Tracee.Parent.FileEvent) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { - _ = ev.ResolveFileFieldsUser(&ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { - _ = ev.ResolveFileFieldsGroup(&ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { - _ = ev.ResolveFilePath(&ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { - _ = ev.ResolveFileBasename(&ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { - _ = ev.ResolveFileFilesystem(&ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveProcessCreatedAt(ev.PTrace.Tracee.Parent) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveProcessArgv0(ev.PTrace.Tracee.Parent) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveProcessArgs(ev.PTrace.Tracee.Parent) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveProcessArgv(ev.PTrace.Tracee.Parent) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveProcessArgsTruncated(ev.PTrace.Tracee.Parent) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveProcessEnvs(ev.PTrace.Tracee.Parent) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveProcessEnvp(ev.PTrace.Tracee.Parent) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveProcessEnvsTruncated(ev.PTrace.Tracee.Parent) - } - case "removexattr": - _ = ev.ResolveFileFieldsUser(&ev.RemoveXAttr.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.RemoveXAttr.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.RemoveXAttr.File.FileFields) - _ = ev.ResolveFilePath(&ev.RemoveXAttr.File) - _ = ev.ResolveFileBasename(&ev.RemoveXAttr.File) - _ = ev.ResolveFileFilesystem(&ev.RemoveXAttr.File) - _ = ev.ResolveXAttrNamespace(&ev.RemoveXAttr) - _ = ev.ResolveXAttrName(&ev.RemoveXAttr) - case "rename": - _ = ev.ResolveFileFieldsUser(&ev.Rename.Old.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Rename.Old.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Rename.Old.FileFields) - _ = ev.ResolveFilePath(&ev.Rename.Old) - _ = ev.ResolveFileBasename(&ev.Rename.Old) - _ = ev.ResolveFileFilesystem(&ev.Rename.Old) - _ = ev.ResolveFileFieldsUser(&ev.Rename.New.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Rename.New.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Rename.New.FileFields) - _ = ev.ResolveFilePath(&ev.Rename.New) - _ = ev.ResolveFileBasename(&ev.Rename.New) - _ = ev.ResolveFileFilesystem(&ev.Rename.New) - case "rmdir": - _ = ev.ResolveFileFieldsUser(&ev.Rmdir.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Rmdir.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Rmdir.File.FileFields) - _ = ev.ResolveFilePath(&ev.Rmdir.File) - _ = ev.ResolveFileBasename(&ev.Rmdir.File) - _ = ev.ResolveFileFilesystem(&ev.Rmdir.File) - case "selinux": - _ = ev.ResolveSELinuxBoolName(&ev.SELinux) - case "setgid": - _ = ev.ResolveSetgidGroup(&ev.SetGID) - _ = ev.ResolveSetgidEGroup(&ev.SetGID) - _ = ev.ResolveSetgidFSGroup(&ev.SetGID) - case "setuid": - _ = ev.ResolveSetuidUser(&ev.SetUID) - _ = ev.ResolveSetuidEUser(&ev.SetUID) - _ = ev.ResolveSetuidFSUser(&ev.SetUID) - case "setxattr": - _ = ev.ResolveFileFieldsUser(&ev.SetXAttr.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.SetXAttr.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.SetXAttr.File.FileFields) - _ = ev.ResolveFilePath(&ev.SetXAttr.File) - _ = ev.ResolveFileBasename(&ev.SetXAttr.File) - _ = ev.ResolveFileFilesystem(&ev.SetXAttr.File) - _ = ev.ResolveXAttrNamespace(&ev.SetXAttr) - _ = ev.ResolveXAttrName(&ev.SetXAttr) - case "signal": - if ev.Signal.Target.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsUser(&ev.Signal.Target.Process.FileEvent.FileFields) - } - if ev.Signal.Target.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsGroup(&ev.Signal.Target.Process.FileEvent.FileFields) - } - if ev.Signal.Target.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Signal.Target.Process.FileEvent.FileFields) - } - if ev.Signal.Target.Process.IsNotKworker() { - _ = ev.ResolveFilePath(&ev.Signal.Target.Process.FileEvent) - } - if ev.Signal.Target.Process.IsNotKworker() { - _ = ev.ResolveFileBasename(&ev.Signal.Target.Process.FileEvent) - } - if ev.Signal.Target.Process.IsNotKworker() { - _ = ev.ResolveFileFilesystem(&ev.Signal.Target.Process.FileEvent) - } - if ev.Signal.Target.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsUser(&ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.Signal.Target.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsGroup(&ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.Signal.Target.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.Signal.Target.Process.HasInterpreter() { - _ = ev.ResolveFilePath(&ev.Signal.Target.Process.LinuxBinprm.FileEvent) - } - if ev.Signal.Target.Process.HasInterpreter() { - _ = ev.ResolveFileBasename(&ev.Signal.Target.Process.LinuxBinprm.FileEvent) - } - if ev.Signal.Target.Process.HasInterpreter() { - _ = ev.ResolveFileFilesystem(&ev.Signal.Target.Process.LinuxBinprm.FileEvent) - } - _ = ev.ResolveProcessCreatedAt(&ev.Signal.Target.Process) - _ = ev.ResolveProcessArgv0(&ev.Signal.Target.Process) - _ = ev.ResolveProcessArgs(&ev.Signal.Target.Process) - _ = ev.ResolveProcessArgv(&ev.Signal.Target.Process) - _ = ev.ResolveProcessArgsTruncated(&ev.Signal.Target.Process) - _ = ev.ResolveProcessEnvs(&ev.Signal.Target.Process) - _ = ev.ResolveProcessEnvp(&ev.Signal.Target.Process) - _ = ev.ResolveProcessEnvsTruncated(&ev.Signal.Target.Process) - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { - _ = ev.ResolveFileFieldsUser(&ev.Signal.Target.Parent.FileEvent.FileFields) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { - _ = ev.ResolveFileFieldsGroup(&ev.Signal.Target.Parent.FileEvent.FileFields) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Signal.Target.Parent.FileEvent.FileFields) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { - _ = ev.ResolveFilePath(&ev.Signal.Target.Parent.FileEvent) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { - _ = ev.ResolveFileBasename(&ev.Signal.Target.Parent.FileEvent) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { - _ = ev.ResolveFileFilesystem(&ev.Signal.Target.Parent.FileEvent) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { - _ = ev.ResolveFileFieldsUser(&ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { - _ = ev.ResolveFileFieldsGroup(&ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { - _ = ev.ResolveFilePath(&ev.Signal.Target.Parent.LinuxBinprm.FileEvent) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { - _ = ev.ResolveFileBasename(&ev.Signal.Target.Parent.LinuxBinprm.FileEvent) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { - _ = ev.ResolveFileFilesystem(&ev.Signal.Target.Parent.LinuxBinprm.FileEvent) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveProcessCreatedAt(ev.Signal.Target.Parent) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveProcessArgv0(ev.Signal.Target.Parent) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveProcessArgs(ev.Signal.Target.Parent) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveProcessArgv(ev.Signal.Target.Parent) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveProcessArgsTruncated(ev.Signal.Target.Parent) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveProcessEnvs(ev.Signal.Target.Parent) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveProcessEnvp(ev.Signal.Target.Parent) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveProcessEnvsTruncated(ev.Signal.Target.Parent) - } - case "splice": - _ = ev.ResolveFileFieldsUser(&ev.Splice.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Splice.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Splice.File.FileFields) - _ = ev.ResolveFilePath(&ev.Splice.File) - _ = ev.ResolveFileBasename(&ev.Splice.File) - _ = ev.ResolveFileFilesystem(&ev.Splice.File) - case "unlink": - _ = ev.ResolveFileFieldsUser(&ev.Unlink.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Unlink.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Unlink.File.FileFields) - _ = ev.ResolveFilePath(&ev.Unlink.File) - _ = ev.ResolveFileBasename(&ev.Unlink.File) - _ = ev.ResolveFileFilesystem(&ev.Unlink.File) - case "unload_module": - case "utimes": - _ = ev.ResolveFileFieldsUser(&ev.Utimes.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Utimes.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Utimes.File.FileFields) - _ = ev.ResolveFilePath(&ev.Utimes.File) - _ = ev.ResolveFileBasename(&ev.Utimes.File) - _ = ev.ResolveFileFilesystem(&ev.Utimes.File) - } -} diff --git a/pkg/security/probe/load_controller.go b/pkg/security/probe/load_controller.go index 231cc38a081a60..c8de2f7373918d 100644 --- a/pkg/security/probe/load_controller.go +++ b/pkg/security/probe/load_controller.go @@ -84,7 +84,7 @@ func (lc *LoadController) SendStats() error { } // Count processes the provided events and ensures the load of the provided event type is within the configured limits -func (lc *LoadController) Count(event *Event) { +func (lc *LoadController) Count(event *model.Event) { switch event.GetEventType() { case model.ExecEventType, model.InvalidateDentryEventType, model.ForkEventType: case model.ExitEventType: @@ -95,7 +95,7 @@ func (lc *LoadController) Count(event *Event) { } // GenericCount increments the event counter of the provided event type and pid -func (lc *LoadController) GenericCount(event *Event) { +func (lc *LoadController) GenericCount(event *model.Event) { lc.Lock() defer lc.Unlock() @@ -152,7 +152,7 @@ func (lc *LoadController) discardNoisiestProcess() { lc.pidDiscardersCount.Inc() if lc.NoisyProcessCustomEventRate.Allow() { - process := lc.probe.resolvers.ProcessResolver.Resolve(maxKey.Pid, maxKey.Pid) + process := lc.probe.resolvers.ProcessResolver.Resolve(maxKey.Pid, maxKey.Pid, 0) if process == nil { seclog.Warnf("Unable to resolve process with pid: %d", maxKey.Pid) return diff --git a/pkg/security/probe/model.go b/pkg/security/probe/model.go index 4e45c623cd112f..209caef3b6097f 100644 --- a/pkg/security/probe/model.go +++ b/pkg/security/probe/model.go @@ -10,17 +10,7 @@ package probe import ( "fmt" - "path" - "sort" - "strings" - "syscall" - "time" - manager "github.com/DataDog/ebpf-manager" - "github.com/cilium/ebpf/perf" - "github.com/mailru/easyjson/jwriter" - - pconfig "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/security/probe/constantfetch" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" "github.com/DataDog/datadog-agent/pkg/security/secl/model" @@ -31,615 +21,32 @@ const ( ServiceEnvVar = "DD_SERVICE" ) -var eventZero Event - -// Model describes the data model for the runtime security agent probe events -type Model struct { - model.Model - probe *Probe -} - -// ValidateField validates the value of a field -func (m *Model) ValidateField(field eval.Field, fieldValue eval.FieldValue) error { - if err := m.Model.ValidateField(field, fieldValue); err != nil { - return err - } - - switch field { - case "bpf.map.name": - if offset, found := m.probe.constantOffsets[constantfetch.OffsetNameBPFMapStructName]; !found || offset == constantfetch.ErrorSentinel { - return fmt.Errorf("%s is not available on this kernel version", field) - } - - case "bpf.prog.name": - if offset, found := m.probe.constantOffsets[constantfetch.OffsetNameBPFProgAuxStructName]; !found || offset == constantfetch.ErrorSentinel { - return fmt.Errorf("%s is not available on this kernel version", field) - } - } - - return nil -} - -// NewEvent returns a new Event -func (m *Model) NewEvent() eval.Event { - return &Event{} -} - -// NetDeviceKey is used to uniquely identify a network device -type NetDeviceKey struct { - IfIndex uint32 - NetNS uint32 - NetworkDirection manager.TrafficType -} - -// Event describes a probe event -type Event struct { - model.Event - - resolvers *Resolvers - pathResolutionError error - scrubber *pconfig.DataScrubber - probe *Probe -} - -// Retain the event -func (ev *Event) Retain() Event { - if ev.ProcessCacheEntry != nil { - ev.ProcessCacheEntry.Retain() - } - return *ev -} - -// Release the event -func (ev *Event) Release() { - if ev.ProcessCacheEntry != nil { - ev.ProcessCacheEntry.Release() - } -} - -// GetPathResolutionError returns the path resolution error as a string if there is one -func (ev *Event) GetPathResolutionError() error { - return ev.pathResolutionError -} - -// ResolveFilePath resolves the inode to a full path -func (ev *Event) ResolveFilePath(f *model.FileEvent) string { - if !f.IsPathnameStrResolved && len(f.PathnameStr) == 0 { - path, err := ev.resolvers.resolveFileFieldsPath(&f.FileFields, &ev.PIDContext, &ev.ContainerContext) - if err != nil { - ev.SetPathResolutionError(f, err) - } - f.SetPathnameStr(path) - } - - return f.PathnameStr -} - -// ResolveFileBasename resolves the inode to a full path -func (ev *Event) ResolveFileBasename(f *model.FileEvent) string { - if !f.IsBasenameStrResolved && len(f.BasenameStr) == 0 { - if f.PathnameStr != "" { - f.SetBasenameStr(path.Base(f.PathnameStr)) - } else { - f.SetBasenameStr(ev.resolvers.resolveBasename(&f.FileFields)) - } - } - return f.BasenameStr -} - -// ResolveFileFilesystem resolves the filesystem a file resides in -func (ev *Event) ResolveFileFilesystem(f *model.FileEvent) string { - if f.Filesystem == "" && !f.IsFileless() { - fs, err := ev.resolvers.MountResolver.ResolveFilesystem(f.FileFields.MountID, ev.PIDContext.Pid, ev.ContainerContext.ID) - if err != nil { - ev.SetPathResolutionError(f, err) - } - f.Filesystem = fs - } - return f.Filesystem -} - -// ResolveFileFieldsInUpperLayer resolves whether the file is in an upper layer -func (ev *Event) ResolveFileFieldsInUpperLayer(f *model.FileFields) bool { - return f.GetInUpperLayer() -} - -// ResolveXAttrName returns the string representation of the extended attribute name -func (ev *Event) ResolveXAttrName(e *model.SetXAttrEvent) string { - if len(e.Name) == 0 { - e.Name, _ = model.UnmarshalString(e.NameRaw[:], 200) - } - return e.Name -} - -// ResolveHelpers returns the list of eBPF helpers used by the current program -func (ev *Event) ResolveHelpers(e *model.BPFProgram) []uint32 { - return e.Helpers -} +var eventZero model.Event -// ResolveXAttrNamespace returns the string representation of the extended attribute namespace -func (ev *Event) ResolveXAttrNamespace(e *model.SetXAttrEvent) string { - if len(e.Namespace) == 0 { - ns, _, found := strings.Cut(ev.ResolveXAttrName(e), ".") - if found { - e.Namespace = ns - } - } - return e.Namespace -} - -// SetMountPoint set the mount point information -func (ev *Event) SetMountPoint(e *model.Mount) error { - var err error - e.MountPointStr, err = ev.resolvers.DentryResolver.Resolve(e.ParentMountID, e.ParentInode, 0, true) - return err -} - -// ResolveMountPoint resolves the mountpoint to a full path -func (ev *Event) ResolveMountPoint(e *model.Mount) (string, error) { - if len(e.MountPointStr) == 0 { - if err := ev.SetMountPoint(e); err != nil { - return "", err - } - } - return e.MountPointStr, nil -} - -// SetMountRoot set the mount point information -func (ev *Event) SetMountRoot(e *model.Mount) error { - var err error - e.RootStr, err = ev.resolvers.DentryResolver.Resolve(e.RootMountID, e.RootInode, 0, true) - return err -} - -// ResolveMountRoot resolves the mountpoint to a full path -func (ev *Event) ResolveMountRoot(e *model.Mount) (string, error) { - if len(e.RootStr) == 0 { - if err := ev.SetMountRoot(e); err != nil { - return "", err - } - } - return e.RootStr, nil -} - -func (ev *Event) ResolveMountPointPath(e *model.MountEvent) string { - if len(e.MountPointPath) == 0 { - mountPointPath, err := ev.resolvers.MountResolver.ResolveMountPath(e.MountID, ev.PIDContext.Pid, ev.ContainerContext.ID) - if err != nil { - e.MountPointPathResolutionError = err - return "" - } - e.MountPointPath = mountPointPath - } - return e.MountPointPath -} - -func (ev *Event) ResolveMountSourcePath(e *model.MountEvent) string { - if e.BindSrcMountID != 0 && len(e.MountSourcePath) == 0 { - bindSourceMountPath, err := ev.resolvers.MountResolver.ResolveMountPath(e.BindSrcMountID, ev.PIDContext.Pid, ev.ContainerContext.ID) - if err != nil { - e.MountSourcePathResolutionError = err - return "" - } - rootStr, err := ev.ResolveMountRoot(&e.Mount) - if err != nil { - e.MountSourcePathResolutionError = err - return "" - } - e.MountSourcePath = path.Join(bindSourceMountPath, rootStr) - } - return e.MountSourcePath -} - -// ResolveContainerID resolves the container ID of the event -func (ev *Event) ResolveContainerID(e *model.ContainerContext) string { - if len(e.ID) == 0 { - if entry, _ := ev.ResolveProcessCacheEntry(); entry != nil { - e.ID = entry.ContainerID - } - } - return e.ID -} - -// ResolveContainerTags resolves the container tags of the event -func (ev *Event) ResolveContainerTags(e *model.ContainerContext) []string { - if len(e.Tags) == 0 && e.ID != "" { - e.Tags = ev.resolvers.TagsResolver.Resolve(e.ID) - } - return e.Tags -} - -// UnmarshalProcessCacheEntry unmarshal a Process -func (ev *Event) UnmarshalProcessCacheEntry(data []byte) (int, error) { - entry := ev.resolvers.ProcessResolver.NewProcessCacheEntry(ev.PIDContext) - ev.ProcessCacheEntry = entry - - n, err := entry.Process.UnmarshalBinary(data) - if err != nil { - return n, err - } - entry.Process.ContainerID = ev.ContainerContext.ID - - return n, nil -} - -// ResolveFileFieldsUser resolves the user id of the file to a username -func (ev *Event) ResolveFileFieldsUser(e *model.FileFields) string { - if len(e.User) == 0 { - e.User, _ = ev.resolvers.UserGroupResolver.ResolveUser(int(e.UID)) - } - return e.User -} - -// ResolveFileFieldsGroup resolves the group id of the file to a group name -func (ev *Event) ResolveFileFieldsGroup(e *model.FileFields) string { - if len(e.Group) == 0 { - e.Group, _ = ev.resolvers.UserGroupResolver.ResolveGroup(int(e.GID)) - } - return e.Group -} - -// ResolveRights resolves the rights of a file -func (ev *Event) ResolveRights(e *model.FileFields) int { - return int(e.Mode) & (syscall.S_ISUID | syscall.S_ISGID | syscall.S_ISVTX | syscall.S_IRWXU | syscall.S_IRWXG | syscall.S_IRWXO) -} - -// ResolveChownUID resolves the user id of a chown event to a username -func (ev *Event) ResolveChownUID(e *model.ChownEvent) string { - if len(e.User) == 0 { - e.User, _ = ev.resolvers.UserGroupResolver.ResolveUser(int(e.UID)) - } - return e.User -} - -// ResolveChownGID resolves the group id of a chown event to a group name -func (ev *Event) ResolveChownGID(e *model.ChownEvent) string { - if len(e.Group) == 0 { - e.Group, _ = ev.resolvers.UserGroupResolver.ResolveGroup(int(e.GID)) - } - return e.Group -} - -// ResolveProcessCreatedAt resolves process creation time -func (ev *Event) ResolveProcessCreatedAt(e *model.Process) uint64 { - return uint64(e.ExecTime.UnixNano()) -} - -// ResolveProcessArgv0 resolves the first arg of the event -func (ev *Event) ResolveProcessArgv0(process *model.Process) string { - arg0, _ := ev.resolvers.ProcessResolver.GetProcessArgv0(process) - return arg0 -} - -// ResolveProcessArgs resolves the args of the event -func (ev *Event) ResolveProcessArgs(process *model.Process) string { - return strings.Join(ev.ResolveProcessArgv(process), " ") -} - -// ResolveProcessArgv resolves the args of the event as an array -func (ev *Event) ResolveProcessArgv(process *model.Process) []string { - argv, _ := ev.resolvers.ProcessResolver.GetProcessArgv(process) - return argv -} - -// ResolveProcessEnvp resolves the envp of the event as an array -func (ev *Event) ResolveProcessEnvp(process *model.Process) []string { - envp, _ := ev.resolvers.ProcessResolver.GetProcessEnvp(process) - return envp -} - -// ResolveProcessArgsTruncated returns whether the args are truncated -func (ev *Event) ResolveProcessArgsTruncated(process *model.Process) bool { - _, truncated := ev.resolvers.ProcessResolver.GetProcessArgv(process) - return truncated -} - -// ResolveProcessArgsFlags resolves the arguments flags of the event -func (ev *Event) ResolveProcessArgsFlags(process *model.Process) (flags []string) { - for _, arg := range ev.ResolveProcessArgv(process) { - if len(arg) > 1 && arg[0] == '-' { - isFlag := true - name := arg[1:] - if len(name) >= 1 && name[0] == '-' { - name = name[1:] - isFlag = false - } - - isOption := false - for _, r := range name { - isFlag = isFlag && model.IsAlphaNumeric(r) - isOption = isOption || r == '=' - } - - if len(name) > 0 { - if isFlag { - for _, r := range name { - flags = append(flags, string(r)) - } - } - if !isOption && len(name) > 1 { - flags = append(flags, name) +// NewModel returns a new model with some extra field validation +func NewModel(probe *Probe) *model.Model { + return &model.Model{ + ExtraValidateFieldFnc: func(field eval.Field, fieldValue eval.FieldValue) error { + switch field { + case "bpf.map.name": + if offset, found := probe.constantOffsets[constantfetch.OffsetNameBPFMapStructName]; !found || offset == constantfetch.ErrorSentinel { + return fmt.Errorf("%s is not available on this kernel version", field) } - } - } - } - return -} -// ResolveProcessArgsOptions resolves the arguments options of the event -func (ev *Event) ResolveProcessArgsOptions(process *model.Process) (options []string) { - args := ev.ResolveProcessArgv(process) - for i := 0; i < len(args); i++ { - arg := args[i] - if len(arg) > 1 && arg[0] == '-' { - name := arg[1:] - if len(name) >= 1 && name[0] == '-' { - name = name[1:] - } - if len(name) > 0 && model.IsAlphaNumeric(rune(name[0])) { - if index := strings.IndexRune(name, '='); index == -1 { - if i < len(args)-1 && (len(args[i+1]) == 0 || args[i+1][0] != '-') { - options = append(options, name+"="+args[i+1]) - i++ - } - } else { - options = append(options, name) + case "bpf.prog.name": + if offset, found := probe.constantOffsets[constantfetch.OffsetNameBPFProgAuxStructName]; !found || offset == constantfetch.ErrorSentinel { + return fmt.Errorf("%s is not available on this kernel version", field) } } - } - } - return -} - -// ResolveProcessEnvsTruncated returns whether the envs are truncated -func (ev *Event) ResolveProcessEnvsTruncated(process *model.Process) bool { - _, truncated := ev.resolvers.ProcessResolver.GetProcessEnvs(process) - return truncated -} - -// ResolveProcessEnvs resolves the envs of the event -func (ev *Event) ResolveProcessEnvs(process *model.Process) []string { - envs, _ := ev.resolvers.ProcessResolver.GetProcessEnvs(process) - return envs -} - -// ResolveSetuidUser resolves the user of the Setuid event -func (ev *Event) ResolveSetuidUser(e *model.SetuidEvent) string { - if len(e.User) == 0 && ev != nil { - e.User, _ = ev.resolvers.UserGroupResolver.ResolveUser(int(e.UID)) - } - return e.User -} - -// ResolveSetuidEUser resolves the effective user of the Setuid event -func (ev *Event) ResolveSetuidEUser(e *model.SetuidEvent) string { - if len(e.EUser) == 0 && ev != nil { - e.EUser, _ = ev.resolvers.UserGroupResolver.ResolveUser(int(e.EUID)) - } - return e.EUser -} - -// ResolveSetuidFSUser resolves the file-system user of the Setuid event -func (ev *Event) ResolveSetuidFSUser(e *model.SetuidEvent) string { - if len(e.FSUser) == 0 && ev != nil { - e.FSUser, _ = ev.resolvers.UserGroupResolver.ResolveUser(int(e.FSUID)) - } - return e.FSUser -} - -// ResolveSetgidGroup resolves the group of the Setgid event -func (ev *Event) ResolveSetgidGroup(e *model.SetgidEvent) string { - if len(e.Group) == 0 && ev != nil { - e.Group, _ = ev.resolvers.UserGroupResolver.ResolveUser(int(e.GID)) - } - return e.Group -} - -// ResolveSetgidEGroup resolves the effective group of the Setgid event -func (ev *Event) ResolveSetgidEGroup(e *model.SetgidEvent) string { - if len(e.EGroup) == 0 && ev != nil { - e.EGroup, _ = ev.resolvers.UserGroupResolver.ResolveUser(int(e.EGID)) - } - return e.EGroup -} - -// ResolveSetgidFSGroup resolves the file-system group of the Setgid event -func (ev *Event) ResolveSetgidFSGroup(e *model.SetgidEvent) string { - if len(e.FSGroup) == 0 && ev != nil { - e.FSGroup, _ = ev.resolvers.UserGroupResolver.ResolveUser(int(e.FSGID)) - } - return e.FSGroup -} - -// ResolveSELinuxBoolName resolves the boolean name of the SELinux event -func (ev *Event) ResolveSELinuxBoolName(e *model.SELinuxEvent) string { - if e.EventKind != model.SELinuxBoolChangeEventKind { - return "" - } - - if len(ev.SELinux.BoolName) == 0 { - ev.SELinux.BoolName = ev.resolvers.resolveBasename(&e.File.FileFields) - } - return ev.SELinux.BoolName -} - -func (ev *Event) String() string { - d, err := ev.MarshalJSON() - if err != nil { - return err.Error() - } - return string(d) -} - -// SetPathResolutionError sets the Event.pathResolutionError -func (ev *Event) SetPathResolutionError(fileFields *model.FileEvent, err error) { - fileFields.PathResolutionError = err - ev.pathResolutionError = err -} - -// MarshalJSON returns the JSON encoding of the event -func (ev *Event) MarshalJSON() ([]byte, error) { - s := NewEventSerializer(ev) - w := &jwriter.Writer{ - Flags: jwriter.NilSliceAsEmpty | jwriter.NilMapAsEmpty, - } - s.MarshalEasyJSON(w) - return w.BuildBytes() -} - -// ExtractEventInfo extracts cpu and timestamp from the raw data event -func ExtractEventInfo(record *perf.Record) (QuickInfo, error) { - if len(record.RawSample) < 16 { - return QuickInfo{}, model.ErrNotEnoughData - } - - return QuickInfo{ - cpu: model.ByteOrder.Uint64(record.RawSample[0:8]), - timestamp: model.ByteOrder.Uint64(record.RawSample[8:16]), - }, nil -} -// ResolveEventTimestamp resolves the monolitic kernel event timestamp to an absolute time -func (ev *Event) ResolveEventTimestamp() time.Time { - if ev.Timestamp.IsZero() { - ev.Timestamp = ev.resolvers.TimeResolver.ResolveMonotonicTimestamp(ev.TimestampRaw) - if ev.Timestamp.IsZero() { - ev.Timestamp = time.Now() - } - } - return ev.Timestamp -} - -// NewEmptyProcessCacheEntry returns an empty process cache entry for kworker events -func (ev *Event) NewEmptyProcessCacheEntry() *model.ProcessCacheEntry { - return &model.ProcessCacheEntry{ - ProcessContext: model.ProcessContext{ - Process: model.Process{ - PIDContext: ev.PIDContext, - }, + return nil }, } } -// ResolveProcessCacheEntry queries the ProcessResolver to retrieve the ProcessContext of the event -func (ev *Event) ResolveProcessCacheEntry() (*model.ProcessCacheEntry, bool) { - if ev.PIDContext.IsKworker { - return ev.NewEmptyProcessCacheEntry(), false - } - - if ev.ProcessCacheEntry == nil { - ev.ProcessCacheEntry = ev.resolvers.ProcessResolver.Resolve(ev.PIDContext.Pid, ev.PIDContext.Tid) - } - - if ev.ProcessCacheEntry == nil { - // keep the original PIDContext - ev.ProcessCacheEntry = model.NewProcessCacheEntry(nil) - ev.ProcessCacheEntry.PIDContext = ev.PIDContext - - ev.ProcessCacheEntry.FileEvent.SetPathnameStr("") - ev.ProcessCacheEntry.FileEvent.SetBasenameStr("") - - // mark interpreter as resolved too - ev.ProcessCacheEntry.LinuxBinprm.FileEvent.SetPathnameStr("") - ev.ProcessCacheEntry.LinuxBinprm.FileEvent.SetBasenameStr("") - - return ev.ProcessCacheEntry, false - } - - return ev.ProcessCacheEntry, true -} - -// GetProcessServiceTag returns the service tag based on the process context -func (ev *Event) GetProcessServiceTag() string { - entry, _ := ev.ResolveProcessCacheEntry() - if entry == nil { - return "" - } - - var serviceValues []string - - // first search in the process context itself - if entry.EnvsEntry != nil { - if service := entry.EnvsEntry.Get(ServiceEnvVar); service != "" { - serviceValues = append(serviceValues, service) - } - } - - inContainer := entry.ContainerID != "" - - // while in container check for each ancestor - for ancestor := entry.Ancestor; ancestor != nil; ancestor = ancestor.Ancestor { - if inContainer && ancestor.ContainerID == "" { - break - } - - if ancestor.EnvsEntry != nil { - if service := ancestor.EnvsEntry.Get(ServiceEnvVar); service != "" { - serviceValues = append(serviceValues, service) - } - } - } - - return bestGuessServiceTag(serviceValues) -} - -func bestGuessServiceTag(serviceValues []string) string { - if len(serviceValues) == 0 { - return "" - } - - firstGuess := serviceValues[0] - - // first we sort base on len, biggest len first - sort.Slice(serviceValues, func(i, j int) bool { - return len(serviceValues[j]) < len(serviceValues[i]) // reverse - }) - - // we then compare [i] and [i + 1] to check if [i + 1] is a prefix of [i] - for i := 0; i < len(serviceValues)-1; i++ { - if !strings.HasPrefix(serviceValues[i], serviceValues[i+1]) { - // if it's not a prefix it means we have multiple disjoints services - // we then return the first guess, closest in the process tree - return firstGuess - } - } - - // we have a prefix chain, let's return the biggest one - return serviceValues[0] -} - -// ResolveNetworkDeviceIfName returns the network iterface name from the network context -func (ev *Event) ResolveNetworkDeviceIfName(device *model.NetworkDeviceContext) string { - if len(device.IfName) == 0 && ev.probe != nil { - key := NetDeviceKey{ - NetNS: device.NetNS, - IfIndex: device.IfIndex, - NetworkDirection: manager.Egress, - } - - ev.probe.tcProgramsLock.RLock() - defer ev.probe.tcProgramsLock.RUnlock() - - tcProbe, ok := ev.probe.tcPrograms[key] - if !ok { - key.NetworkDirection = manager.Ingress - tcProbe = ev.probe.tcPrograms[key] - } - - if tcProbe != nil { - device.IfName = tcProbe.IfName - } - } - - return device.IfName -} - // NewEvent returns a new event -func NewEvent(resolvers *Resolvers, scrubber *pconfig.DataScrubber, probe *Probe) *Event { - return &Event{ - Event: model.Event{}, - resolvers: resolvers, - scrubber: scrubber, - probe: probe, +func NewEvent(fh *FieldHandlers) *model.Event { + return &model.Event{ + FieldHandlers: fh, } } diff --git a/pkg/security/probe/model_test.go b/pkg/security/probe/model_test.go index 69ad95e4f294ee..ef53f5faeade80 100644 --- a/pkg/security/probe/model_test.go +++ b/pkg/security/probe/model_test.go @@ -15,7 +15,7 @@ import ( "sort" "testing" - pconfig "github.com/DataDog/datadog-agent/pkg/process/config" + "github.com/DataDog/datadog-agent/pkg/process/procutil" "github.com/DataDog/datadog-agent/pkg/security/config" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" "github.com/DataDog/datadog-agent/pkg/security/secl/model" @@ -25,7 +25,7 @@ import ( ) func TestSetFieldValue(t *testing.T) { - event := &Event{} + event := &model.Event{} var readOnlyError *eval.ErrFieldReadOnly for _, field := range event.GetFields() { @@ -73,23 +73,23 @@ func TestProcessArgsFlags(t *testing.T) { "-9", "-", "--", }) - e := Event{ - Event: model.Event{ - Exec: model.ExecEvent{ - Process: &model.Process{ - ArgsEntry: &argsEntry, - }, + resolver, _ := NewProcessResolver(&manager.Manager{}, &config.Config{}, &statsd.NoOpClient{}, + &procutil.DataScrubber{}, NewProcessResolverOpts(nil)) + + e := model.Event{ + Exec: model.ExecEvent{ + Process: &model.Process{ + ArgsEntry: &argsEntry, + }, + }, + FieldHandlers: &FieldHandlers{ + resolvers: &Resolvers{ + ProcessResolver: resolver, }, }, } - resolver, _ := NewProcessResolver(&manager.Manager{}, &config.Config{}, &statsd.NoOpClient{}, - &pconfig.DataScrubber{}, nil, NewProcessResolverOpts(nil)) - e.resolvers = &Resolvers{ - ProcessResolver: resolver, - } - - flags := e.ResolveProcessArgsFlags(e.Exec.Process) + flags := e.FieldHandlers.ResolveProcessArgsFlags(&e, e.Exec.Process) sort.Strings(flags) hasFlag := func(flags []string, flag string) bool { @@ -134,23 +134,23 @@ func TestProcessArgsOptions(t *testing.T) { "--", "---", "-9", }) - e := Event{ - Event: model.Event{ - Exec: model.ExecEvent{ - Process: &model.Process{ - ArgsEntry: &argsEntry, - }, + resolver, _ := NewProcessResolver(&manager.Manager{}, &config.Config{}, &statsd.NoOpClient{}, + &procutil.DataScrubber{}, NewProcessResolverOpts(nil)) + + e := model.Event{ + Exec: model.ExecEvent{ + Process: &model.Process{ + ArgsEntry: &argsEntry, + }, + }, + FieldHandlers: &FieldHandlers{ + resolvers: &Resolvers{ + ProcessResolver: resolver, }, }, } - resolver, _ := NewProcessResolver(&manager.Manager{}, &config.Config{}, &statsd.NoOpClient{}, - &pconfig.DataScrubber{}, nil, NewProcessResolverOpts(nil)) - e.resolvers = &Resolvers{ - ProcessResolver: resolver, - } - - options := e.ResolveProcessArgsOptions(e.Exec.Process) + options := e.FieldHandlers.ResolveProcessArgsOptions(&e, e.Exec.Process) sort.Strings(options) hasOption := func(options []string, option string) bool { diff --git a/pkg/security/probe/namespace_resolver.go b/pkg/security/probe/namespace_resolver.go index 24029df1161408..8fcdb46a3a430a 100644 --- a/pkg/security/probe/namespace_resolver.go +++ b/pkg/security/probe/namespace_resolver.go @@ -165,7 +165,7 @@ func (nn *NetworkNamespace) dequeueNetworkDevices(probe *Probe) { defer handle.Close() for _, queuedDevice := range nn.networkDevicesQueue { - _ = probe.setupNewTCClassifierWithNetNSHandle(queuedDevice, handle) + _ = probe.resolvers.TCResolver.SetupNewTCClassifierWithNetNSHandle(queuedDevice, handle, probe.Manager) } nn.flushNetworkDevicesQueue() } @@ -214,7 +214,7 @@ func NewNamespaceResolver(probe *Probe) (*NamespaceResolver, error) { lru, err := simplelru.NewLRU(1024, func(key uint32, value *NetworkNamespace) { nr.flushNetworkNamespace(value) - nr.probe.flushNetworkNamespace(value) + nr.probe.resolvers.TCResolver.FlushNetworkNamespaceID(value.nsID, nr.probe.Manager) }) if err != nil { return nil, err @@ -326,7 +326,7 @@ func (nr *NamespaceResolver) snapshotNetworkDevices(netns *NetworkNamespace) int NetNS: netns.nsID, } - if err = nr.probe.setupNewTCClassifierWithNetNSHandle(device, handle); err == nil { + if err = nr.probe.resolvers.TCResolver.SetupNewTCClassifierWithNetNSHandle(device, handle, nr.probe.Manager); err == nil { // ignore interfaces that are lazily deleted if !nr.IsLazyDeletionInterface(device.Name) && attrs.HardwareAddr.String() != "" { attachedDeviceCountNoLazyDeletion++ @@ -406,7 +406,7 @@ func (nr *NamespaceResolver) flushNamespaces(ctx context.Context) { case <-ctx.Done(): return case <-ticker.C: - probesCount := nr.probe.flushInactiveProbes() + probesCount := nr.probe.resolvers.TCResolver.FlushInactiveProbes(nr.probe.Manager, nr.IsLazyDeletionInterface) // There is a possible race condition if we lose all network device creations but do notice the new network // namespace: we will create a handle that will never be flushed by `nr.probe.flushInactiveNamespaces()`. @@ -472,7 +472,7 @@ func (nr *NamespaceResolver) preventNetworkNamespaceDrift(probesCount map[uint32 deviceCountNoLoopbackNoDummy := nr.snapshotNetworkDevices(netns) if deviceCountNoLoopbackNoDummy == 0 { nr.flushNetworkNamespace(netns) - nr.probe.flushNetworkNamespace(netns) + nr.probe.resolvers.TCResolver.FlushNetworkNamespaceID(netns.nsID, nr.probe.Manager) netns.Unlock() continue } diff --git a/pkg/security/probe/perfmap.go b/pkg/security/probe/perfmap.go index 7b0165a3e34d16..25d45f12a86365 100644 --- a/pkg/security/probe/perfmap.go +++ b/pkg/security/probe/perfmap.go @@ -20,6 +20,7 @@ import ( "github.com/cilium/ebpf/perf" "github.com/DataDog/datadog-agent/pkg/security/config" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/seclog" ) @@ -85,6 +86,18 @@ func (m *OrderedPerfMap) Resume() error { return m.perfMap.Resume() } +// ExtractEventInfo extracts cpu and timestamp from the raw data event +func ExtractEventInfo(record *perf.Record) (QuickInfo, error) { + if len(record.RawSample) < 16 { + return QuickInfo{}, model.ErrNotEnoughData + } + + return QuickInfo{ + cpu: model.ByteOrder.Uint64(record.RawSample[0:8]), + timestamp: model.ByteOrder.Uint64(record.RawSample[8:16]), + }, nil +} + // NewOrderedPerfMap returned a new ordered perf map. func NewOrderedPerfMap(ctx context.Context, handler func(int, []byte), statsdClient statsd.ClientInterface) (*OrderedPerfMap, error) { recordPool := NewRecordPool() diff --git a/pkg/security/probe/probe.go b/pkg/security/probe/probe.go index 69755fd0c09fb8..1dd7cf2c8bdfa8 100644 --- a/pkg/security/probe/probe.go +++ b/pkg/security/probe/probe.go @@ -15,7 +15,6 @@ import ( "os" "path/filepath" "runtime" - "strings" "sync" "time" @@ -23,21 +22,20 @@ import ( manager "github.com/DataDog/ebpf-manager" "github.com/hashicorp/go-multierror" "github.com/moby/sys/mountinfo" - "github.com/vishvananda/netlink" "golang.org/x/exp/slices" "golang.org/x/sys/unix" "golang.org/x/time/rate" "gopkg.in/yaml.v3" aconfig "github.com/DataDog/datadog-agent/pkg/config" - pconfig "github.com/DataDog/datadog-agent/pkg/process/config" + "github.com/DataDog/datadog-agent/pkg/process/procutil" "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/security/api" "github.com/DataDog/datadog-agent/pkg/security/config" "github.com/DataDog/datadog-agent/pkg/security/ebpf" kernel "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" "github.com/DataDog/datadog-agent/pkg/security/ebpf/probes" - "github.com/DataDog/datadog-agent/pkg/security/metrics" + "github.com/DataDog/datadog-agent/pkg/security/events" "github.com/DataDog/datadog-agent/pkg/security/probe/constantfetch" "github.com/DataDog/datadog-agent/pkg/security/probe/erpc" "github.com/DataDog/datadog-agent/pkg/security/probe/managerhelper" @@ -57,8 +55,8 @@ type ActivityDumpHandler interface { // EventHandler represents an handler for the events sent by the probe type EventHandler interface { - HandleEvent(event *Event) - HandleCustomEvent(rule *rules.Rule, event *CustomEvent) + HandleEvent(event *model.Event) + HandleCustomEvent(rule *rules.Rule, event *events.CustomEvent) } // EventStream describes the interface implemented by reordered perf maps or ring buffers @@ -71,7 +69,7 @@ type EventStream interface { } // NotifyDiscarderPushedCallback describe the callback used to retrieve pushed discarders information -type NotifyDiscarderPushedCallback func(eventType string, event *Event, field string) +type NotifyDiscarderPushedCallback func(eventType string, event *model.Event, field string) // Probe represents the runtime security eBPF probe in charge of // setting up the required kProbes and decoding events sent from the kernel @@ -88,12 +86,15 @@ type Probe struct { cancelFnc context.CancelFunc wg sync.WaitGroup // Events section - handlers [model.MaxAllEventType][]EventHandler - monitor *Monitor - resolvers *Resolvers - event *Event + handlers [model.MaxAllEventType][]EventHandler + monitor *Monitor + resolvers *Resolvers + event *model.Event + fieldHandlers *FieldHandlers + scrubber *procutil.DataScrubber + + // Ring eventStream EventStream - scrubber *pconfig.DataScrubber // ActivityDumps section activityDumpHandler ActivityDumpHandler @@ -111,10 +112,6 @@ type Probe struct { constantOffsets map[string]uint64 runtimeCompiled bool - // network section - tcProgramsLock sync.RWMutex - tcPrograms map[NetDeviceKey]*manager.Probe - isRuntimeDiscarded bool } @@ -223,20 +220,11 @@ func (p *Probe) VerifyEnvironment() *multierror.Error { return err } -func isSyscallWrapperRequired() (bool, error) { - openSyscall, err := manager.GetSyscallFnName("open") - if err != nil { - return false, err - } - - return !strings.HasPrefix(openSyscall, "SyS_") && !strings.HasPrefix(openSyscall, "sys_"), nil -} - // Init initializes the probe func (p *Probe) Init() error { p.startTime = time.Now() - useSyscallWrapper, err := isSyscallWrapperRequired() + useSyscallWrapper, err := ebpf.IsSyscallWrapperRequired() if err != nil { return err } @@ -316,8 +304,11 @@ func (p *Probe) AddEventHandler(eventType model.EventType, handler EventHandler) } // DispatchEvent sends an event to the probe event handler -func (p *Probe) DispatchEvent(event *Event) { - seclog.TraceTagf(event.GetEventType(), "Dispatching event %s", event) +func (p *Probe) DispatchEvent(event *model.Event) { + traceEvent("Dispatching event %s", func() ([]byte, model.EventType, error) { + eventJSON, err := MarshalEvent(event, p) + return eventJSON, event.GetEventType(), err + }) // send wildcard first for _, handler := range p.handlers[model.UnknownEventType] { @@ -341,8 +332,11 @@ func (p *Probe) DispatchActivityDump(dump *api.ActivityDumpStreamMessage) { } // DispatchCustomEvent sends a custom event to the probe event handler -func (p *Probe) DispatchCustomEvent(rule *rules.Rule, event *CustomEvent) { - seclog.TraceTagf(event.GetEventType(), "Dispatching custom event %s", event) +func (p *Probe) DispatchCustomEvent(rule *rules.Rule, event *events.CustomEvent) { + traceEvent("Dispatching custom event %s", func() ([]byte, model.EventType, error) { + eventJSON, err := MarshalCustomEvent(event) + return eventJSON, event.GetEventType(), err + }) // send specific event if p.Config.AgentMonitoringEvents { @@ -358,18 +352,23 @@ func (p *Probe) DispatchCustomEvent(rule *rules.Rule, event *CustomEvent) { } } -func (p *Probe) sendTCProgramsStats() { - p.tcProgramsLock.RLock() - defer p.tcProgramsLock.RUnlock() +func traceEvent(fmt string, marshaller func() ([]byte, model.EventType, error)) { + if !seclog.DefaultLogger.IsTracing() { + return + } - if val := float64(len(p.tcPrograms)); val > 0 { - _ = p.StatsdClient.Gauge(metrics.MetricTCProgram, val, []string{}, 1.0) + eventJSON, eventType, err := marshaller() + if err != nil { + seclog.DefaultLogger.TraceTagf(eventType, fmt, err) + return } + + seclog.DefaultLogger.TraceTagf(eventType, fmt, string(eventJSON)) } // SendStats sends statistics about the probe to Datadog func (p *Probe) SendStats() error { - p.sendTCProgramsStats() + p.resolvers.TCResolver.SendTCProgramsStats(p.StatsdClient) return p.monitor.SendStats() } @@ -379,12 +378,13 @@ func (p *Probe) GetMonitor() *Monitor { return p.monitor } -func (p *Probe) zeroEvent() *Event { +func (p *Probe) zeroEvent() *model.Event { *p.event = eventZero + p.event.FieldHandlers = p.fieldHandlers return p.event } -func (p *Probe) unmarshalContexts(data []byte, event *Event) (int, error) { +func (p *Probe) unmarshalContexts(data []byte, event *model.Event) (int, error) { read, err := model.UnmarshalBinary(data, &event.PIDContext, &event.SpanContext, &event.ContainerContext) if err != nil { return 0, err @@ -404,6 +404,20 @@ func (p *Probe) invalidateDentry(mountID uint32, inode uint64) { p.resolvers.DentryResolver.DelCacheEntry(mountID, inode) } +// UnmarshalProcessCacheEntry unmarshal a Process +func (p *Probe) UnmarshalProcessCacheEntry(ev *model.Event, data []byte) (int, error) { + entry := p.resolvers.ProcessResolver.NewProcessCacheEntry(ev.PIDContext) + ev.ProcessCacheEntry = entry + + n, err := entry.Process.UnmarshalBinary(data) + if err != nil { + return n, err + } + entry.Process.ContainerID = ev.ContainerContext.ID + + return n, nil +} + func (p *Probe) handleEvent(CPU int, data []byte) { offset := 0 event := p.zeroEvent() @@ -611,7 +625,7 @@ func (p *Probe) handleEvent(CPU int, data []byte) { return } case model.ForkEventType: - if _, err = event.UnmarshalProcessCacheEntry(data[offset:]); err != nil { + if _, err = p.UnmarshalProcessCacheEntry(event, data[offset:]); err != nil { seclog.Errorf("failed to decode fork event: %s (offset %d, len %d)", err, offset, dataLen) return } @@ -626,7 +640,7 @@ func (p *Probe) handleEvent(CPU int, data []byte) { p.resolvers.ProcessResolver.AddForkEntry(event.ProcessCacheEntry) case model.ExecEventType: // unmarshal and fill event.processCacheEntry - if _, err = event.UnmarshalProcessCacheEntry(data[offset:]); err != nil { + if _, err = p.UnmarshalProcessCacheEntry(event, data[offset:]); err != nil { seclog.Errorf("failed to decode exec event: %s (offset %d, len %d)", err, offset, len(data)) return } @@ -634,7 +648,8 @@ func (p *Probe) handleEvent(CPU int, data []byte) { if err = p.resolvers.ProcessResolver.ResolveNewProcessCacheEntry(event.ProcessCacheEntry, &event.ContainerContext); err != nil { seclog.Debugf("failed to resolve new process cache entry context: %s", err) - if errors.Is(err, &ErrPathResolution{}) { + var errResolution *ErrPathResolution + if errors.As(err, &errResolution) { event.SetPathResolutionError(&event.ProcessCacheEntry.FileEvent, err) } } @@ -649,7 +664,7 @@ func (p *Probe) handleEvent(CPU int, data []byte) { } var exists bool - event.ProcessCacheEntry, exists = event.ResolveProcessCacheEntry() + event.ProcessCacheEntry, exists = p.fieldHandlers.ResolveProcessCacheEntry(event) if !exists { // no need to dispatch an exit event that don't have the corresponding cache entry return @@ -658,7 +673,7 @@ func (p *Probe) handleEvent(CPU int, data []byte) { // Use the event timestamp as exit time // The local process cache hasn't been updated yet with the exit time when the exit event is first seen // The pid_cache kernel map has the exit_time but it's only accessed if there's a local miss - event.ProcessCacheEntry.Process.ExitTime = event.ResolveEventTimestamp() + event.ProcessCacheEntry.Process.ExitTime = p.fieldHandlers.ResolveEventTimestamp(event) event.Exit.Process = &event.ProcessCacheEntry.Process case model.SetuidEventType: if _, err = event.SetUID.UnmarshalBinary(data[offset:]); err != nil { @@ -694,7 +709,7 @@ func (p *Probe) handleEvent(CPU int, data []byte) { return } // resolve tracee process context - cacheEntry := event.resolvers.ProcessResolver.Resolve(event.PTrace.PID, event.PTrace.PID) + cacheEntry := p.resolvers.ProcessResolver.Resolve(event.PTrace.PID, event.PTrace.PID, 0) if cacheEntry != nil { event.PTrace.Tracee = &cacheEntry.ProcessContext } @@ -735,7 +750,7 @@ func (p *Probe) handleEvent(CPU int, data []byte) { return } // resolve target process context - cacheEntry := event.resolvers.ProcessResolver.Resolve(event.Signal.PID, event.Signal.PID) + cacheEntry := p.resolvers.ProcessResolver.Resolve(event.Signal.PID, event.Signal.PID, 0) if cacheEntry != nil { event.Signal.Target = &cacheEntry.ProcessContext } @@ -782,7 +797,7 @@ func (p *Probe) handleEvent(CPU int, data []byte) { } // resolve the process cache entry - event.ProcessCacheEntry, _ = event.ResolveProcessCacheEntry() + event.ProcessCacheEntry, _ = p.fieldHandlers.ResolveProcessCacheEntry(event) // use ProcessCacheEntry process context as process context event.ProcessContext = &event.ProcessCacheEntry.ProcessContext @@ -792,7 +807,7 @@ func (p *Probe) handleEvent(CPU int, data []byte) { } if eventType == model.ExitEventType { - defer p.resolvers.ProcessResolver.DeleteEntry(event.ProcessCacheEntry.Pid, event.ResolveEventTimestamp()) + defer p.resolvers.ProcessResolver.DeleteEntry(event.ProcessCacheEntry.Pid, p.fieldHandlers.ResolveEventTimestamp(event)) } p.DispatchEvent(event) @@ -801,13 +816,6 @@ func (p *Probe) handleEvent(CPU int, data []byte) { p.resolvers.ProcessResolver.DequeueExited() } -// OnRuleMatch is called when a rule matches just before sending -func (p *Probe) OnRuleMatch(rule *rules.Rule, event *Event) { - // ensure that all the fields are resolved before sending - event.ResolveContainerID(&event.ContainerContext) - event.ResolveContainerTags(&event.ContainerContext) -} - // AddNewNotifyDiscarderPushedCallback add a callback to the list of func that have to be called when a discarder is pushed to kernel func (p *Probe) AddNewNotifyDiscarderPushedCallback(cb NotifyDiscarderPushedCallback) { p.notifyDiscarderPushedCallbacksLock.Lock() @@ -817,16 +825,16 @@ func (p *Probe) AddNewNotifyDiscarderPushedCallback(cb NotifyDiscarderPushedCall } // OnNewDiscarder is called when a new discarder is found -func (p *Probe) OnNewDiscarder(rs *rules.RuleSet, event *Event, field eval.Field, eventType eval.EventType) error { +func (p *Probe) OnNewDiscarder(rs *rules.RuleSet, ev *model.Event, field eval.Field, eventType eval.EventType) { // discarders disabled if !p.Config.EnableDiscarders { - return nil + return } if p.isRuntimeDiscarded { - fakeTime := time.Unix(0, int64(event.TimestampRaw)) + fakeTime := time.Unix(0, int64(ev.TimestampRaw)) if !p.discarderRateLimiter.AllowN(fakeTime, 1) { - return nil + return } } @@ -834,19 +842,19 @@ func (p *Probe) OnNewDiscarder(rs *rules.RuleSet, event *Event, field eval.Field if handlers, ok := allDiscarderHandlers[eventType]; ok { for _, handler := range handlers { - discarderPushed, _ := handler(rs, event, p, Discarder{Field: field}) + discarderPushed, _ := handler(rs, ev, p, Discarder{Field: field}) if discarderPushed { p.notifyDiscarderPushedCallbacksLock.Lock() defer p.notifyDiscarderPushedCallbacksLock.Unlock() for _, cb := range p.notifyDiscarderPushedCallbacks { - cb(eventType, event, field) + cb(eventType, ev, field) } } } } - return nil + return } // ApplyFilterPolicy is called when a passing policy for an event type is applied @@ -903,28 +911,6 @@ func (p *Probe) SetApprovers(eventType eval.EventType, approvers rules.Approvers return nil } -func (p *Probe) selectTCProbes() manager.ProbesSelector { - p.tcProgramsLock.RLock() - defer p.tcProgramsLock.RUnlock() - - // Although unlikely, a race is still possible with the umount event of a network namespace: - // - a reload event is triggered - // - selectTCProbes is invoked and the list of currently running probes is generated - // - a container exits and the umount event of its network namespace is handled now (= its TC programs are stopped) - // - the manager executes UpdateActivatedProbes - // In this setup, if we didn't use the best effort selector, the manager would try to init & attach a program that - // was deleted when the container exited. - var activatedProbes manager.BestEffort - for _, tcProbe := range p.tcPrograms { - if tcProbe.IsRunning() { - activatedProbes.Selectors = append(activatedProbes.Selectors, &manager.ProbeSelector{ - ProbeIdentificationPair: tcProbe.ProbeIdentificationPair, - }) - } - } - return &activatedProbes -} - func (p *Probe) isNeededForActivityDump(eventType eval.EventType) bool { if p.Config.ActivityDumpEnabled { for _, e := range p.Config.ActivityDumpTracedEventTypes { @@ -962,7 +948,7 @@ func (p *Probe) SelectProbes(eventTypes []eval.EventType) error { } } - activatedProbes = append(activatedProbes, p.selectTCProbes()) + activatedProbes = append(activatedProbes, p.resolvers.TCResolver.SelectTCProbes()) // Add syscall monitor probes if p.Config.ActivityDumpEnabled { @@ -1123,13 +1109,16 @@ func (p *Probe) GetDebugStats() map[string]interface{} { } // NewRuleSet returns a new rule set -func (p *Probe) NewRuleSet(opts *rules.Opts, evalOpts *eval.Opts, macroStore *eval.MacroStore) *rules.RuleSet { +func (p *Probe) NewRuleSet(opts *rules.Opts, evalOpts *eval.Opts) *rules.RuleSet { + opts.WithLogger(seclog.DefaultLogger) + eventCtor := func() eval.Event { - return NewEvent(p.resolvers, p.scrubber, p) + return &model.Event{ + FieldHandlers: p.fieldHandlers, + } } - opts.WithLogger(seclog.DefaultLogger) - return rules.NewRuleSet(&Model{probe: p}, eventCtor, opts, evalOpts, macroStore) + return rules.NewRuleSet(NewModel(p), eventCtor, opts, evalOpts) } // QueuedNetworkDeviceError is used to indicate that the new network device was queued until its namespace handle is @@ -1156,60 +1145,7 @@ func (p *Probe) setupNewTCClassifier(device model.NetDevice) error { return QueuedNetworkDeviceError{msg: fmt.Sprintf("device %s is queued until %d is resolved", device.Name, device.NetNS)} } defer handle.Close() - return p.setupNewTCClassifierWithNetNSHandle(device, handle) -} - -// setupNewTCClassifierWithNetNSHandle creates and attaches TC probes on the provided device. WARNING: this function -// will not close the provided netns handle, so the caller of this function needs to take care of it. -func (p *Probe) setupNewTCClassifierWithNetNSHandle(device model.NetDevice, netnsHandle *os.File) error { - p.tcProgramsLock.Lock() - defer p.tcProgramsLock.Unlock() - - var combinedErr multierror.Error - for _, tcProbe := range probes.GetTCProbes() { - // make sure we're not overriding an existing network probe - deviceKey := NetDeviceKey{IfIndex: device.IfIndex, NetNS: device.NetNS, NetworkDirection: tcProbe.NetworkDirection} - _, ok := p.tcPrograms[deviceKey] - if ok { - continue - } - - newProbe := tcProbe.Copy() - newProbe.CopyProgram = true - newProbe.UID = probes.SecurityAgentUID + device.GetKey() - newProbe.IfIndex = int(device.IfIndex) - newProbe.IfIndexNetns = uint64(netnsHandle.Fd()) - newProbe.IfIndexNetnsID = device.NetNS - newProbe.KeepProgramSpec = false - newProbe.TCFilterPrio = p.Config.NetworkClassifierPriority - newProbe.TCFilterHandle = netlink.MakeHandle(0, p.Config.NetworkClassifierHandle) - - netnsEditor := []manager.ConstantEditor{ - { - Name: "netns", - Value: uint64(device.NetNS), - }, - } - - if err := p.Manager.CloneProgram(probes.SecurityAgentUID, newProbe, netnsEditor, nil); err != nil { - _ = multierror.Append(&combinedErr, fmt.Errorf("couldn't clone %s: %v", tcProbe.ProbeIdentificationPair, err)) - } else { - p.tcPrograms[deviceKey] = newProbe - } - } - return combinedErr.ErrorOrNil() -} - -// flushNetworkNamespace thread unsafe version of FlushNetworkNamespace -func (p *Probe) flushNetworkNamespace(namespace *NetworkNamespace) { - p.tcProgramsLock.Lock() - defer p.tcProgramsLock.Unlock() - for tcKey, tcProbe := range p.tcPrograms { - if tcKey.NetNS == namespace.nsID { - _ = p.Manager.DetachHook(tcProbe.ProbeIdentificationPair) - delete(p.tcPrograms, tcKey) - } - } + return p.resolvers.TCResolver.SetupNewTCClassifierWithNetNSHandle(device, handle, p.Manager) } // FlushNetworkNamespace removes all references and stops all TC programs in the provided network namespace. This method @@ -1218,40 +1154,10 @@ func (p *Probe) FlushNetworkNamespace(namespace *NetworkNamespace) { p.resolvers.NamespaceResolver.FlushNetworkNamespace(namespace) // cleanup internal structures - p.flushNetworkNamespace(namespace) + p.resolvers.TCResolver.FlushNetworkNamespaceID(namespace.nsID, p.Manager) } -// flushInactiveProbes detaches and deletes inactive probes. This function returns a map containing the count of interfaces -// per network namespace (ignoring the interfaces that are lazily deleted). -func (p *Probe) flushInactiveProbes() map[uint32]int { - p.tcProgramsLock.Lock() - defer p.tcProgramsLock.Unlock() - - probesCountNoLazyDeletion := make(map[uint32]int) - - var linkName string - for tcKey, tcProbe := range p.tcPrograms { - if !tcProbe.IsTCFilterActive() { - _ = p.Manager.DetachHook(tcProbe.ProbeIdentificationPair) - delete(p.tcPrograms, tcKey) - } else { - link, err := tcProbe.ResolveLink() - if err == nil { - linkName = link.Attrs().Name - } else { - linkName = "" - } - // ignore interfaces that are lazily deleted - if link.Attrs().HardwareAddr.String() != "" && !p.resolvers.NamespaceResolver.IsLazyDeletionInterface(linkName) { - probesCountNoLazyDeletion[tcKey.NetNS]++ - } - } - } - - return probesCountNoLazyDeletion -} - -func (p *Probe) handleNewMount(event *Event, m *model.Mount) error { +func (p *Probe) handleNewMount(ev *model.Event, m *model.Mount) error { // There could be entries of a previous mount_id in the cache for instance, // runc does the following : it bind mounts itself (using /proc/exe/self), // opens a file descriptor on the new file with O_CLOEXEC then umount the bind mount using @@ -1261,18 +1167,18 @@ func (p *Probe) handleNewMount(event *Event, m *model.Mount) error { p.resolvers.DentryResolver.DelCacheEntries(m.MountID) // Resolve mount point - if err := event.SetMountPoint(m); err != nil { + if err := p.fieldHandlers.SetMountPoint(ev, m); err != nil { seclog.Debugf("failed to set mount point: %v", err) return err } // Resolve root - if err := event.SetMountRoot(m); err != nil { + if err := p.fieldHandlers.SetMountRoot(ev, m); err != nil { seclog.Debugf("failed to set mount root: %v", err) return err } // Insert new mount point in cache, passing it a copy of the mount that we got from the event - if err := p.resolvers.MountResolver.Insert(*m, event.PIDContext.Pid, event.ResolveContainerID(&event.ContainerContext)); err != nil { + if err := p.resolvers.MountResolver.Insert(*m, ev.PIDContext.Pid, ev.FieldHandlers.ResolveContainerID(ev, &ev.ContainerContext)); err != nil { seclog.Errorf("failed to insert mount event: %v", err) return err } @@ -1297,10 +1203,10 @@ func NewProbe(config *config.Config, statsdClient statsd.ClientInterface) (*Prob cancelFnc: cancel, Erpc: nerpc, erpcRequest: &erpc.ERPCRequest{}, - tcPrograms: make(map[NetDeviceKey]*manager.Probe), StatsdClient: statsdClient, discarderRateLimiter: rate.NewLimiter(rate.Every(time.Second/5), 100), isRuntimeDiscarded: os.Getenv("RUNTIME_SECURITY_TESTSUITE") != "true", + event: &model.Event{}, } if err := p.detectKernelVersion(); err != nil { @@ -1423,10 +1329,6 @@ func NewProbe(config *config.Config, statsdClient statsd.ClientInterface) (*Prob Name: "syscall_monitor_event_period", Value: uint64(p.Config.ActivityDumpSyscallMonitorPeriod.Nanoseconds()), }, - manager.ConstantEditor{ - Name: "setup_new_exec_is_last", - Value: utils.BoolTouint64(!p.kernelVersion.IsRH7Kernel() && p.kernelVersion.Code >= kernel.Kernel5_5), // the setup_new_exec kprobe is after security_bprm_committed_creds in kernels that are not RH7, and additionally, have a kernel version of at least 5.5 - }, ) p.managerOptions.ConstantEditors = append(p.managerOptions.ConstantEditors, DiscarderConstants...) @@ -1465,7 +1367,7 @@ func NewProbe(config *config.Config, statsdClient statsd.ClientInterface) (*Prob p.managerOptions.ExcludedFunctions = append(p.managerOptions.ExcludedFunctions, probes.GetAllTCProgramFunctions()...) } - p.scrubber = pconfig.NewDefaultDataScrubber() + p.scrubber = procutil.NewDefaultDataScrubber() p.scrubber.AddCustomSensitiveWords(config.CustomSensitiveWords) resolvers, err := NewResolvers(config, p) @@ -1474,11 +1376,10 @@ func NewProbe(config *config.Config, statsdClient statsd.ClientInterface) (*Prob } p.resolvers = resolvers - p.event = NewEvent(p.resolvers, p.scrubber, p) + p.fieldHandlers = &FieldHandlers{resolvers: resolvers} - eventZero.resolvers = p.resolvers - eventZero.scrubber = p.scrubber - eventZero.probe = p + // be sure to zero the probe event before everything else + p.zeroEvent() if useRingBuffers { p.eventStream = NewRingBuffer(p.handleEvent) @@ -1529,7 +1430,9 @@ func AppendProbeRequestsToFetcher(constantFetcher constantfetch.ConstantFetcher, constantFetcher.AppendOffsetofRequest(constantfetch.OffsetNameSignalStructStructTTY, "struct signal_struct", "tty", "linux/sched/signal.h") constantFetcher.AppendOffsetofRequest(constantfetch.OffsetNameTTYStructStructName, "struct tty_struct", "name", "linux/tty.h") constantFetcher.AppendOffsetofRequest(constantfetch.OffsetNameCredStructUID, "struct cred", "uid", "linux/cred.h") - + constantFetcher.AppendOffsetofRequest(constantfetch.OffsetNameLinuxBinprmP, "struct linux_binprm", "p", "linux/binfmts.h") + constantFetcher.AppendOffsetofRequest(constantfetch.OffsetNameLinuxBinprmArgc, "struct linux_binprm", "argc", "linux/binfmts.h") + constantFetcher.AppendOffsetofRequest(constantfetch.OffsetNameLinuxBinprmEnvc, "struct linux_binprm", "envc", "linux/binfmts.h") // bpf offsets constantFetcher.AppendOffsetofRequest(constantfetch.OffsetNameBPFMapStructID, "struct bpf_map", "id", "linux/bpf.h") if kv.Code != 0 && (kv.Code >= kernel.Kernel4_15 || kv.IsRH7Kernel()) { diff --git a/pkg/security/probe/probe_monitor.go b/pkg/security/probe/probe_monitor.go index 67f67903710b92..d7c5a59e5bece4 100644 --- a/pkg/security/probe/probe_monitor.go +++ b/pkg/security/probe/probe_monitor.go @@ -15,12 +15,8 @@ import ( "sync" "time" - "github.com/hashicorp/go-multierror" - "github.com/DataDog/datadog-agent/pkg/security/api" - "github.com/DataDog/datadog-agent/pkg/security/metrics" - "github.com/DataDog/datadog-agent/pkg/security/secl/rules" - "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" ) // Monitor regroups all the work we want to do to monitor the probes we pushed in the kernel @@ -157,14 +153,15 @@ func (m *Monitor) SendStats() error { } // ProcessEvent processes an event through the various monitors and controllers of the probe -func (m *Monitor) ProcessEvent(event *Event) { +func (m *Monitor) ProcessEvent(event *model.Event) { m.loadController.Count(event) // Look for an unresolved path - if err := event.GetPathResolutionError(); err != nil { - if !errors.Is(err, &ErrPathResolutionNotCritical{}) { + if err := event.PathResolutionError; err != nil { + var notCritical *ErrPathResolutionNotCritical + if !errors.As(err, ¬Critical) { m.probe.DispatchCustomEvent( - NewAbnormalPathEvent(event, err), + NewAbnormalPathEvent(event, m.probe, err), ) } } else { @@ -174,47 +171,6 @@ func (m *Monitor) ProcessEvent(event *Event) { } } -// RuleSetLoadedReport represents the rule and the custom event related to a RuleSetLoaded event, ready to be dispatched -type RuleSetLoadedReport struct { - Rule *rules.Rule - Event *CustomEvent -} - -// ReportRuleSetLoaded reports to Datadog that new ruleset was loaded -func (m *Monitor) ReportRuleSetLoaded(ruleSet *rules.RuleSet, err *multierror.Error) { - r, ev := NewRuleSetLoadedEvent(ruleSet, err) - report := RuleSetLoadedReport{Rule: r, Event: ev} - - if err := m.probe.StatsdClient.Count(metrics.MetricRuleSetLoaded, 1, []string{}, 1.0); err != nil { - log.Error(fmt.Errorf("failed to send ruleset_loaded metric: %w", err)) - } - - m.probe.DispatchCustomEvent(report.Rule, report.Event) -} - -// SelfTestReport represents the rule and the custom event related to a SelfTest event; ready to be dispatched -type SelfTestReport struct { - Rule *rules.Rule - Event *CustomEvent -} - -// ReportSelfTest reports to Datadog that a self test was performed -func (m *Monitor) ReportSelfTest(success []string, fails []string) { - // send metric with number of success and fails - tags := []string{ - fmt.Sprintf("success:%d", len(success)), - fmt.Sprintf("fails:%d", len(fails)), - } - if err := m.probe.StatsdClient.Count(metrics.MetricSelfTest, 1, tags, 1.0); err != nil { - log.Error(fmt.Errorf("failed to send self_test metric: %w", err)) - } - - // send the custom event with the list of succeed and failed self tests - r, ev := NewSelfTestEvent(success, fails) - report := SelfTestReport{Rule: r, Event: ev} - m.probe.DispatchCustomEvent(report.Rule, report.Event) -} - // ErrActivityDumpManagerDisabled is returned when the activity dump manager is disabled var ErrActivityDumpManagerDisabled = errors.New("ActivityDumpManager is disabled") diff --git a/pkg/security/probe/process_resolver.go b/pkg/security/probe/process_resolver.go index e93fc854ed5b4c..d6b64021bae2f5 100644 --- a/pkg/security/probe/process_resolver.go +++ b/pkg/security/probe/process_resolver.go @@ -29,7 +29,7 @@ import ( "github.com/hashicorp/golang-lru/v2/simplelru" "go.uber.org/atomic" - pconfig "github.com/DataDog/datadog-agent/pkg/process/config" + "github.com/DataDog/datadog-agent/pkg/process/procutil" "github.com/DataDog/datadog-agent/pkg/security/config" "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" "github.com/DataDog/datadog-agent/pkg/security/metrics" @@ -103,7 +103,7 @@ type ProcessResolver struct { manager *manager.Manager config *config.Config statsdClient statsd.ClientInterface - scrubber *pconfig.DataScrubber + scrubber *procutil.DataScrubber resolvers *Resolvers execFileCacheMap *lib.Map @@ -447,10 +447,9 @@ func (p *ProcessResolver) enrichEventFromProc(entry *model.ProcessCacheEntry, pr entry.ArgsEntry.SetValues(filledProc.Cmdline) } - if envs, truncated, err := utils.EnvVars(proc.Pid); err == nil { + if envs, err := utils.EnvVars(proc.Pid); err == nil { entry.EnvsEntry = &model.EnvsEntry{} entry.EnvsEntry.SetValues(envs) - entry.EnvsTruncated = truncated } if parent := p.entryCache[entry.PPid]; parent != nil { @@ -560,7 +559,7 @@ func (p *ProcessResolver) insertForkEntry(entry *model.ProcessCacheEntry) { parent := p.entryCache[entry.PPid] if parent == nil && entry.PPid >= 1 { - parent = p.resolve(entry.PPid, entry.PPid) + parent = p.resolve(entry.PPid, entry.PPid, entry.Inode) } if parent != nil { @@ -609,15 +608,15 @@ func (p *ProcessResolver) DeleteEntry(pid uint32, exitTime time.Time) { } // Resolve returns the cache entry for the given pid -func (p *ProcessResolver) Resolve(pid, tid uint32) *model.ProcessCacheEntry { +func (p *ProcessResolver) Resolve(pid, tid uint32, inode uint64) *model.ProcessCacheEntry { p.Lock() defer p.Unlock() - return p.resolve(pid, tid) + return p.resolve(pid, tid, inode) } -func (p *ProcessResolver) resolve(pid, tid uint32) *model.ProcessCacheEntry { - if entry := p.resolveFromCache(pid, tid); entry != nil { +func (p *ProcessResolver) resolve(pid, tid uint32, inode uint64) *model.ProcessCacheEntry { + if entry := p.resolveFromCache(pid, tid, inode); entry != nil { p.hitsStats[metrics.CacheTag].Inc() return entry } @@ -711,18 +710,25 @@ func (p *ProcessResolver) ApplyBootTime(entry *model.ProcessCacheEntry) { } // ResolveFromCache resolves cache entry from the cache -func (p *ProcessResolver) ResolveFromCache(pid, tid uint32) *model.ProcessCacheEntry { +func (p *ProcessResolver) ResolveFromCache(pid, tid uint32, inode uint64) *model.ProcessCacheEntry { p.Lock() defer p.Unlock() - return p.resolveFromCache(pid, tid) + return p.resolveFromCache(pid, tid, inode) } -func (p *ProcessResolver) resolveFromCache(pid, tid uint32) *model.ProcessCacheEntry { +func (p *ProcessResolver) resolveFromCache(pid, tid uint32, inode uint64) *model.ProcessCacheEntry { entry, exists := p.entryCache[pid] if !exists { return nil } + // Compare inode to ensure that the cache is up-to-date. + // Be sure to compare with the file inode and not the pidcontext which can be empty + // if the entry originates from procfs. + if inode != 0 && inode != entry.Process.FileEvent.Inode { + return nil + } + // make to update the tid with the that triggers the resolution entry.Tid = tid @@ -1013,7 +1019,7 @@ func (p *ProcessResolver) Get(pid uint32) *model.ProcessCacheEntry { } // UpdateUID updates the credentials of the provided pid -func (p *ProcessResolver) UpdateUID(pid uint32, e *Event) { +func (p *ProcessResolver) UpdateUID(pid uint32, e *model.Event) { if e.ProcessContext.Pid != e.ProcessContext.Tid { return } @@ -1023,16 +1029,16 @@ func (p *ProcessResolver) UpdateUID(pid uint32, e *Event) { entry := p.entryCache[pid] if entry != nil { entry.Credentials.UID = e.SetUID.UID - entry.Credentials.User = e.ResolveSetuidUser(&e.SetUID) + entry.Credentials.User = e.FieldHandlers.ResolveSetuidUser(e, &e.SetUID) entry.Credentials.EUID = e.SetUID.EUID - entry.Credentials.EUser = e.ResolveSetuidEUser(&e.SetUID) + entry.Credentials.EUser = e.FieldHandlers.ResolveSetuidEUser(e, &e.SetUID) entry.Credentials.FSUID = e.SetUID.FSUID - entry.Credentials.FSUser = e.ResolveSetuidFSUser(&e.SetUID) + entry.Credentials.FSUser = e.FieldHandlers.ResolveSetuidFSUser(e, &e.SetUID) } } // UpdateGID updates the credentials of the provided pid -func (p *ProcessResolver) UpdateGID(pid uint32, e *Event) { +func (p *ProcessResolver) UpdateGID(pid uint32, e *model.Event) { if e.ProcessContext.Pid != e.ProcessContext.Tid { return } @@ -1042,16 +1048,16 @@ func (p *ProcessResolver) UpdateGID(pid uint32, e *Event) { entry := p.entryCache[pid] if entry != nil { entry.Credentials.GID = e.SetGID.GID - entry.Credentials.Group = e.ResolveSetgidGroup(&e.SetGID) + entry.Credentials.Group = e.FieldHandlers.ResolveSetgidGroup(e, &e.SetGID) entry.Credentials.EGID = e.SetGID.EGID - entry.Credentials.EGroup = e.ResolveSetgidEGroup(&e.SetGID) + entry.Credentials.EGroup = e.FieldHandlers.ResolveSetgidEGroup(e, &e.SetGID) entry.Credentials.FSGID = e.SetGID.FSGID - entry.Credentials.FSGroup = e.ResolveSetgidFSGroup(&e.SetGID) + entry.Credentials.FSGroup = e.FieldHandlers.ResolveSetgidFSGroup(e, &e.SetGID) } } // UpdateCapset updates the credentials of the provided pid -func (p *ProcessResolver) UpdateCapset(pid uint32, e *Event) { +func (p *ProcessResolver) UpdateCapset(pid uint32, e *model.Event) { if e.ProcessContext.Pid != e.ProcessContext.Tid { return } @@ -1290,7 +1296,7 @@ func (p *ProcessResolver) NewProcessVariables(scoper func(ctx *eval.Context) uns // NewProcessResolver returns a new process resolver func NewProcessResolver(manager *manager.Manager, config *config.Config, statsdClient statsd.ClientInterface, - scrubber *pconfig.DataScrubber, resolvers *Resolvers, opts ProcessResolverOpts) (*ProcessResolver, error) { + scrubber *procutil.DataScrubber, opts ProcessResolverOpts) (*ProcessResolver, error) { argsEnvsCache, err := simplelru.NewLRU[uint32, *model.ArgsEnvsCacheEntry](maxParallelArgsEnvs, nil) if err != nil { return nil, err @@ -1301,7 +1307,6 @@ func NewProcessResolver(manager *manager.Manager, config *config.Config, statsdC config: config, statsdClient: statsdClient, scrubber: scrubber, - resolvers: resolvers, entryCache: make(map[uint32]*model.ProcessCacheEntry), opts: opts, argsEnvsCache: argsEnvsCache, diff --git a/pkg/security/probe/process_resolver_test.go b/pkg/security/probe/process_resolver_test.go index 372f25cf54ffc5..87b834a350a30f 100644 --- a/pkg/security/probe/process_resolver_test.go +++ b/pkg/security/probe/process_resolver_test.go @@ -34,7 +34,7 @@ func testCacheSize(t *testing.T, resolver *ProcessResolver) { } func TestFork1st(t *testing.T) { - resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, nil, NewProcessResolverOpts(nil)) + resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, NewProcessResolverOpts(nil)) if err != nil { t.Fatal(err) } @@ -73,7 +73,7 @@ func TestFork1st(t *testing.T) { } func TestFork2nd(t *testing.T) { - resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, nil, NewProcessResolverOpts(nil)) + resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, NewProcessResolverOpts(nil)) if err != nil { t.Fatal(err) } @@ -114,7 +114,7 @@ func TestFork2nd(t *testing.T) { } func TestForkExec(t *testing.T) { - resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, nil, NewProcessResolverOpts(nil)) + resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, NewProcessResolverOpts(nil)) if err != nil { t.Fatal(err) } @@ -169,7 +169,7 @@ func TestForkExec(t *testing.T) { } func TestOrphanExec(t *testing.T) { - resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, nil, NewProcessResolverOpts(nil)) + resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, NewProcessResolverOpts(nil)) if err != nil { t.Fatal(err) } @@ -224,7 +224,7 @@ func TestOrphanExec(t *testing.T) { } func TestForkExecExec(t *testing.T) { - resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, nil, NewProcessResolverOpts(nil)) + resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, NewProcessResolverOpts(nil)) if err != nil { t.Fatal(err) } @@ -293,7 +293,7 @@ func TestForkExecExec(t *testing.T) { } func TestForkReuse(t *testing.T) { - resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, nil, NewProcessResolverOpts(nil)) + resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, NewProcessResolverOpts(nil)) if err != nil { t.Fatal(err) } @@ -387,7 +387,7 @@ func TestForkReuse(t *testing.T) { } func TestForkForkExec(t *testing.T) { - resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, nil, NewProcessResolverOpts(nil)) + resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, NewProcessResolverOpts(nil)) if err != nil { t.Fatal(err) } diff --git a/pkg/security/probe/resolvers.go b/pkg/security/probe/resolvers.go index 971768bb91c7f8..2adda55ed89e45 100644 --- a/pkg/security/probe/resolvers.go +++ b/pkg/security/probe/resolvers.go @@ -23,11 +23,12 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/utils" "github.com/DataDog/datadog-agent/pkg/util/log" + manager "github.com/DataDog/ebpf-manager" ) // Resolvers holds the list of the event attribute resolvers type Resolvers struct { - probe *Probe + manager *manager.Manager MountResolver *resolvers.MountResolver ContainerResolver *resolvers.ContainerResolver TimeResolver *resolvers.TimeResolver @@ -37,6 +38,7 @@ type Resolvers struct { ProcessResolver *ProcessResolver NamespaceResolver *NamespaceResolver CgroupsResolver *resolvers.CgroupsResolver + TCResolver *resolvers.TCResolver } // NewResolvers creates a new instance of Resolvers @@ -71,8 +73,16 @@ func NewResolvers(config *config.Config, probe *Probe) (*Resolvers, error) { return nil, err } + tcResolver := resolvers.NewTCResolver(config) + + processResolver, err := NewProcessResolver(probe.Manager, probe.Config, probe.StatsdClient, + probe.scrubber, NewProcessResolverOpts(probe.Config.EnvsWithValue)) + if err != nil { + return nil, err + } + resolvers := &Resolvers{ - probe: probe, + manager: probe.Manager, MountResolver: mountResolver, ContainerResolver: &resolvers.ContainerResolver{}, TimeResolver: timeResolver, @@ -81,14 +91,11 @@ func NewResolvers(config *config.Config, probe *Probe) (*Resolvers, error) { DentryResolver: dentryResolver, NamespaceResolver: namespaceResolver, CgroupsResolver: cgroupsResolver, + TCResolver: tcResolver, + ProcessResolver: processResolver, } - processResolver, err := NewProcessResolver(probe.Manager, probe.Config, probe.StatsdClient, - probe.scrubber, resolvers, NewProcessResolverOpts(probe.Config.EnvsWithValue)) - if err != nil { - return nil, err - } - resolvers.ProcessResolver = processResolver + resolvers.ProcessResolver.resolvers = resolvers return resolvers, nil } @@ -136,22 +143,6 @@ func (r *Resolvers) resolveFileFieldsPath(e *model.FileFields, pidCtx *model.PID return pathStr, err } -// ResolveFileFieldsUser resolves the user id of the file to a username -func (r *Resolvers) ResolveFileFieldsUser(e *model.FileFields) string { - if len(e.User) == 0 { - e.User, _ = r.UserGroupResolver.ResolveUser(int(e.UID)) - } - return e.User -} - -// ResolveFileFieldsGroup resolves the group id of the file to a group name -func (r *Resolvers) ResolveFileFieldsGroup(e *model.FileFields) string { - if len(e.Group) == 0 { - e.Group, _ = r.UserGroupResolver.ResolveGroup(int(e.GID)) - } - return e.Group -} - // ResolveCredentialsUser resolves the user id of the process to a username func (r *Resolvers) ResolveCredentialsUser(e *model.Credentials) string { if len(e.User) == 0 { @@ -200,14 +191,6 @@ func (r *Resolvers) ResolveCredentialsFSGroup(e *model.Credentials) string { return e.FSGroup } -// ResolvePCEContainerTags resolves the container tags of a ProcessCacheEntry -func (r *Resolvers) ResolvePCEContainerTags(e *model.ProcessCacheEntry) []string { - if len(e.ContainerTags) == 0 && len(e.ContainerID) > 0 { - e.ContainerTags = r.TagsResolver.Resolve(e.ContainerID) - } - return e.ContainerTags -} - // Start the resolvers func (r *Resolvers) Start(ctx context.Context) error { if err := r.ProcessResolver.Start(ctx); err != nil { @@ -219,7 +202,7 @@ func (r *Resolvers) Start(ctx context.Context) error { return err } - if err := r.DentryResolver.Start(r.probe.Manager); err != nil { + if err := r.DentryResolver.Start(r.manager); err != nil { return err } @@ -235,7 +218,7 @@ func (r *Resolvers) Snapshot() error { r.ProcessResolver.SetState(snapshotted) r.NamespaceResolver.SetState(snapshotted) - selinuxStatusMap, err := managerhelper.Map(r.probe.Manager, "selinux_enforce_status") + selinuxStatusMap, err := managerhelper.Map(r.manager, "selinux_enforce_status") if err != nil { return fmt.Errorf("unable to snapshot SELinux: %w", err) } diff --git a/pkg/security/probe/resolvers/cgroups_resolver.go b/pkg/security/probe/resolvers/cgroups_resolver.go index 89b1629091f9ac..11d0c5890cba59 100644 --- a/pkg/security/probe/resolvers/cgroups_resolver.go +++ b/pkg/security/probe/resolvers/cgroups_resolver.go @@ -54,8 +54,8 @@ func (cr *CgroupsResolver) GetPID1(id string) (uint32, bool) { return entry.pid, true } -// DelByPID1 force removes the entry -func (cr *CgroupsResolver) DelByPID1(pid uint32) { +// DelByPID force removes the entry +func (cr *CgroupsResolver) DelByPID(pid uint32) { cr.Lock() defer cr.Unlock() diff --git a/pkg/security/probe/resolvers/mount_resolver.go b/pkg/security/probe/resolvers/mount_resolver.go index d6bd82d9616000..4d28afad7957ff 100644 --- a/pkg/security/probe/resolvers/mount_resolver.go +++ b/pkg/security/probe/resolvers/mount_resolver.go @@ -43,7 +43,8 @@ var ( ) const ( - deleteDelayTime = 5 * time.Second + deleteDelayTime = 5 * time.Second + fallbackLimiterPeriod = 5 * time.Second ) func parseGroupID(mnt *mountinfo.Info) (uint32, error) { @@ -102,6 +103,7 @@ type MountResolver struct { deleteQueue []deleteRequest minMountID uint32 redemption *simplelru.LRU[uint32, *model.Mount] + fallbackLimiter *simplelru.LRU[uint32, time.Time] // stats cacheHitsStats *atomic.Int64 @@ -128,11 +130,9 @@ func (mr *MountResolver) SyncCache(pid uint32) error { mr.lock.Lock() defer mr.lock.Unlock() - if err := mr.syncCache(pid); err != nil { - return err - } + err := mr.syncCache(pid) - // store the minimal mount ID found to use it a reference + // store the minimal mount ID found to use it as a reference if pid == 1 { for mountID := range mr.mounts { if mr.minMountID == 0 || mr.minMountID > mountID { @@ -141,26 +141,34 @@ func (mr *MountResolver) SyncCache(pid uint32) error { } } - return nil + return err } -func (mr *MountResolver) syncCache(pid uint32) error { - mnts, err := kernel.ParseMountInfoFile(int32(pid)) - if err != nil { - mr.cgroupsResolver.DelByPID1(pid) - return err - } +// syncCache update cache with the first working pid +func (mr *MountResolver) syncCache(pids ...uint32) error { + var err error + var mnts []*mountinfo.Info - for _, mnt := range mnts { - if _, exists := mr.mounts[uint32(mnt.ID)]; exists { + for _, pid := range pids { + mnts, err = kernel.ParseMountInfoFile(int32(pid)) + if err != nil { + mr.cgroupsResolver.DelByPID(pid) continue } - m := newMountFromMountInfo(mnt) - mr.insert(m) + for _, mnt := range mnts { + if _, exists := mr.mounts[uint32(mnt.ID)]; exists { + continue + } + + m := newMountFromMountInfo(mnt) + mr.insert(m) + } + + return nil } - return nil + return err } func (mr *MountResolver) finalizeChildren(parent *model.Mount) { @@ -392,14 +400,29 @@ func (mr *MountResolver) ResolveMountPath(mountID, pid uint32, containerID strin return mr.resolveMountPath(mountID, pid, containerID) } +func (mr *MountResolver) isSyncCacheAllowed(mountID uint32) bool { + now := time.Now() + if ts, ok := mr.fallbackLimiter.Get(mountID); ok { + if now.After(ts) { + mr.fallbackLimiter.Remove(mountID) + } else { + return false + } + } + return true +} + +func (mr *MountResolver) syncCacheMiss(mountID uint32) { + mr.procMissStats.Inc() + + // add to fallback limiter to avoid storm of file access + mr.fallbackLimiter.Add(mountID, time.Now().Add(fallbackLimiterPeriod)) +} + func (mr *MountResolver) resolveMountPath(mountID, pid uint32, containerID string) (string, error) { if _, err := mr.IsMountIDValid(mountID); err != nil { return "", err } - // force pid1 resolution here to keep the LRU doing his job and not evicting important entries - if pid1, exists := mr.cgroupsResolver.GetPID1(containerID); exists { - pid = pid1 - } path, err := mr.getMountPath(mountID) if err == nil { @@ -416,10 +439,22 @@ func (mr *MountResolver) resolveMountPath(mountID, pid uint32, containerID strin return "", ErrMountNotFound } - if err := mr.syncCache(pid); err != nil { - mr.procMissStats.Inc() + // force pid1 resolution here to keep the LRU doing his job and not evicting important entries + pid1, _ := mr.cgroupsResolver.GetPID1(containerID) + if pid1 == 0 { + // use the pid1 of the host + pid1 = 1 + } + + if !mr.isSyncCacheAllowed(mountID) { + return "", ErrMountNotFound + } + + if err := mr.syncCache(pid, pid1); err != nil { + mr.syncCacheMiss(mountID) return "", err } + path, err = mr.getMountPath(mountID) if err == nil { mr.procHitsStats.Inc() @@ -443,11 +478,6 @@ func (mr *MountResolver) resolveMount(mountID, pid uint32, containerID string) ( return nil, err } - // force pid1 resolution here to keep the LRU doing his job and not evicting important entries - if pid1, exists := mr.cgroupsResolver.GetPID1(containerID); exists { - pid = pid1 - } - mount, exists := mr.mounts[mountID] if exists { mr.cacheHitsStats.Inc() @@ -463,10 +493,18 @@ func (mr *MountResolver) resolveMount(mountID, pid uint32, containerID string) ( return nil, ErrMountNotFound } - if err := mr.syncCache(pid); err != nil { - mr.procMissStats.Inc() + // force pid1 resolution here to keep the LRU doing his job and not evicting important entries + pid1, _ := mr.cgroupsResolver.GetPID1(containerID) + if pid1 == 0 { + // use the pid1 of the host + pid1 = 1 + } + + if err := mr.syncCache(mountID, pid, pid1); err != nil { + mr.syncCacheMiss(mountID) return nil, err } + mount, exists = mr.mounts[mountID] if exists { mr.procMissStats.Inc() @@ -598,5 +636,11 @@ func NewMountResolver(statsdClient statsd.ClientInterface, cgroupsResolver *Cgro } mr.redemption = redemption + fallbackLimiter, err := simplelru.NewLRU[uint32, time.Time](64, nil) + if err != nil { + return nil, err + } + mr.fallbackLimiter = fallbackLimiter + return mr, nil } diff --git a/pkg/security/probe/resolvers/tc_resolver.go b/pkg/security/probe/resolvers/tc_resolver.go new file mode 100644 index 00000000000000..d4525c327a6ffa --- /dev/null +++ b/pkg/security/probe/resolvers/tc_resolver.go @@ -0,0 +1,178 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux +// +build linux + +package resolvers + +import ( + "fmt" + "os" + "sync" + + "github.com/DataDog/datadog-agent/pkg/security/config" + "github.com/DataDog/datadog-agent/pkg/security/ebpf/probes" + "github.com/DataDog/datadog-agent/pkg/security/metrics" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" + "github.com/DataDog/datadog-go/v5/statsd" + manager "github.com/DataDog/ebpf-manager" + "github.com/hashicorp/go-multierror" + "github.com/vishvananda/netlink" +) + +// NetDeviceKey is used to uniquely identify a network device +type NetDeviceKey struct { + IfIndex uint32 + NetNS uint32 + NetworkDirection manager.TrafficType +} + +type TCResolver struct { + sync.RWMutex + config *config.Config + programs map[NetDeviceKey]*manager.Probe +} + +func NewTCResolver(config *config.Config) *TCResolver { + return &TCResolver{ + config: config, + programs: make(map[NetDeviceKey]*manager.Probe), + } +} + +func (tcr *TCResolver) SendTCProgramsStats(statsdClient statsd.ClientInterface) { + tcr.RLock() + defer tcr.RUnlock() + + if val := float64(len(tcr.programs)); val > 0 { + _ = statsdClient.Gauge(metrics.MetricTCProgram, val, []string{}, 1.0) + } +} + +func (tcr *TCResolver) SelectTCProbes() manager.ProbesSelector { + tcr.RLock() + defer tcr.RUnlock() + + // Although unlikely, a race is still possible with the umount event of a network namespace: + // - a reload event is triggered + // - selectTCProbes is invoked and the list of currently running probes is generated + // - a container exits and the umount event of its network namespace is handled now (= its TC programs are stopped) + // - the manager executes UpdateActivatedProbes + // In this setup, if we didn't use the best effort selector, the manager would try to init & attach a program that + // was deleted when the container exited. + var activatedProbes manager.BestEffort + for _, tcProbe := range tcr.programs { + if tcProbe.IsRunning() { + activatedProbes.Selectors = append(activatedProbes.Selectors, &manager.ProbeSelector{ + ProbeIdentificationPair: tcProbe.ProbeIdentificationPair, + }) + } + } + return &activatedProbes +} + +// SetupNewTCClassifierWithNetNSHandle creates and attaches TC probes on the provided device. WARNING: this function +// will not close the provided netns handle, so the caller of this function needs to take care of it. +func (tcr *TCResolver) SetupNewTCClassifierWithNetNSHandle(device model.NetDevice, netnsHandle *os.File, m *manager.Manager) error { + tcr.Lock() + defer tcr.Unlock() + + var combinedErr multierror.Error + for _, tcProbe := range probes.GetTCProbes() { + // make sure we're not overriding an existing network probe + deviceKey := NetDeviceKey{IfIndex: device.IfIndex, NetNS: device.NetNS, NetworkDirection: tcProbe.NetworkDirection} + _, ok := tcr.programs[deviceKey] + if ok { + continue + } + + newProbe := tcProbe.Copy() + newProbe.CopyProgram = true + newProbe.UID = probes.SecurityAgentUID + device.GetKey() + newProbe.IfIndex = int(device.IfIndex) + newProbe.IfIndexNetns = uint64(netnsHandle.Fd()) + newProbe.IfIndexNetnsID = device.NetNS + newProbe.KeepProgramSpec = false + newProbe.TCFilterPrio = tcr.config.NetworkClassifierPriority + newProbe.TCFilterHandle = netlink.MakeHandle(0, tcr.config.NetworkClassifierHandle) + + netnsEditor := []manager.ConstantEditor{ + { + Name: "netns", + Value: uint64(device.NetNS), + }, + } + + if err := m.CloneProgram(probes.SecurityAgentUID, newProbe, netnsEditor, nil); err != nil { + _ = multierror.Append(&combinedErr, fmt.Errorf("couldn't clone %s: %v", tcProbe.ProbeIdentificationPair, err)) + } else { + tcr.programs[deviceKey] = newProbe + } + } + return combinedErr.ErrorOrNil() +} + +// flushNetworkNamespace thread unsafe version of FlushNetworkNamespace +func (tcr *TCResolver) FlushNetworkNamespaceID(namespaceID uint32, m *manager.Manager) { + tcr.Lock() + defer tcr.Unlock() + + for tcKey, tcProbe := range tcr.programs { + if tcKey.NetNS == namespaceID { + _ = m.DetachHook(tcProbe.ProbeIdentificationPair) + delete(tcr.programs, tcKey) + } + } +} + +// FlushInactiveProbes detaches and deletes inactive probes. This function returns a map containing the count of interfaces +// per network namespace (ignoring the interfaces that are lazily deleted). +func (tcr *TCResolver) FlushInactiveProbes(m *manager.Manager, isLazy func(string) bool) map[uint32]int { + tcr.Lock() + defer tcr.Unlock() + + probesCountNoLazyDeletion := make(map[uint32]int) + + var linkName string + for tcKey, tcProbe := range tcr.programs { + if !tcProbe.IsTCFilterActive() { + _ = m.DetachHook(tcProbe.ProbeIdentificationPair) + delete(tcr.programs, tcKey) + } else { + link, err := tcProbe.ResolveLink() + if err == nil { + linkName = link.Attrs().Name + } else { + linkName = "" + } + // ignore interfaces that are lazily deleted + if link.Attrs().HardwareAddr.String() != "" && !isLazy(linkName) { + probesCountNoLazyDeletion[tcKey.NetNS]++ + } + } + } + + return probesCountNoLazyDeletion +} + +func (tcr *TCResolver) ResolveNetworkDeviceIfName(ifIndex, netNS uint32) (string, bool) { + tcr.RLock() + defer tcr.RUnlock() + + for _, direction := range []manager.TrafficType{manager.Egress, manager.Ingress} { + key := NetDeviceKey{ + IfIndex: ifIndex, + NetNS: netNS, + NetworkDirection: direction, + } + + tcProbe, ok := tcr.programs[key] + if ok { + return tcProbe.IfName, true + } + } + return "", false +} diff --git a/pkg/security/probe/selftests/tester.go b/pkg/security/probe/selftests/tester.go index 0fde2fdbf2e976..61fd287a3ba512 100644 --- a/pkg/security/probe/selftests/tester.go +++ b/pkg/security/probe/selftests/tester.go @@ -20,6 +20,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/api" "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -191,14 +192,14 @@ type selfTestEvent struct { } // IsExpectedEvent sends an event to the tester -func (t *SelfTester) IsExpectedEvent(rule *rules.Rule, event eval.Event) bool { +func (t *SelfTester) IsExpectedEvent(rule *rules.Rule, event eval.Event, p *probe.Probe) bool { if t.waitingForEvent.Load() && rule.Definition.Policy.Source == policySource { - ev, ok := event.(*probe.Event) + ev, ok := event.(*model.Event) if !ok { return true } - s := probe.NewEventSerializer(ev) + s := probe.NewEventSerializer(ev, p) if s == nil || s.FileEventSerializer == nil { return true } diff --git a/pkg/security/probe/serializers.go b/pkg/security/probe/serializers.go index b69c5959c551ba..a94c8f2a55c3a1 100644 --- a/pkg/security/probe/serializers.go +++ b/pkg/security/probe/serializers.go @@ -18,9 +18,11 @@ import ( "golang.org/x/sys/unix" + "github.com/DataDog/datadog-agent/pkg/security/events" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/utils" + jwriter "github.com/mailru/easyjson/jwriter" ) // FileSerializer serializes a file to JSON @@ -205,9 +207,9 @@ type ProcessSerializer struct { // Indicator of environments variable truncation EnvsTruncated bool `json:"envs_truncated,omitempty"` // Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program) - IsThread bool `json:"is_thread,omitempty" jsonschema_description:""` + IsThread bool `json:"is_thread,omitempty"` // Indicates whether the process is a kworker - IsKworker bool `json:"is_kworker,omitempty" jsonschema_description:""` + IsKworker bool `json:"is_kworker,omitempty"` } // ContainerContextSerializer serializes a container context to JSON @@ -488,8 +490,10 @@ type BindEventSerializer struct { // ExitEventSerializer serializes an exit event to JSON // easyjson:json type ExitEventSerializer struct { - Cause string `json:"cause" jsonschema_description:"Cause of the process termination (one of EXITED, SIGNALED, COREDUMPED)"` - Code uint32 `json:"code" jsonschema_description:"Exit code of the process or number of the signal that caused the process to terminate"` + // Cause of the process termination (one of EXITED, SIGNALED, COREDUMPED) + Cause string `json:"cause"` + // Exit code of the process or number of the signal that caused the process to terminate + Code uint32 `json:"code"` } // MountEventSerializer serializes a mount event to JSON @@ -534,7 +538,7 @@ type EventSerializer struct { Date utils.EasyjsonTime `json:"date,omitempty"` } -func getInUpperLayer(r *Resolvers, f *model.FileFields) *bool { +func getInUpperLayer(f *model.FileFields) *bool { lowerLayer := f.GetInLowerLayer() upperLayer := f.GetInUpperLayer() if !lowerLayer && !upperLayer { @@ -543,7 +547,7 @@ func getInUpperLayer(r *Resolvers, f *model.FileFields) *bool { return &upperLayer } -func newFileSerializer(fe *model.FileEvent, e *Event, forceInode ...uint64) *FileSerializer { +func newFileSerializer(fe *model.FileEvent, e *model.Event, forceInode ...uint64) *FileSerializer { inode := fe.Inode if len(forceInode) > 0 { inode = forceInode[0] @@ -551,20 +555,20 @@ func newFileSerializer(fe *model.FileEvent, e *Event, forceInode ...uint64) *Fil mode := uint32(fe.FileFields.Mode) return &FileSerializer{ - Path: e.ResolveFilePath(fe), + Path: e.FieldHandlers.ResolveFilePath(e, fe), PathResolutionError: fe.GetPathResolutionError(), - Name: e.ResolveFileBasename(fe), + Name: e.FieldHandlers.ResolveFileBasename(e, fe), Inode: getUint64Pointer(&inode), MountID: getUint32Pointer(&fe.MountID), - Filesystem: e.ResolveFileFilesystem(fe), + Filesystem: e.FieldHandlers.ResolveFileFilesystem(e, fe), Mode: getUint32Pointer(&mode), // only used by open events UID: int64(fe.UID), GID: int64(fe.GID), - User: e.ResolveFileFieldsUser(&fe.FileFields), - Group: e.ResolveFileFieldsGroup(&fe.FileFields), + User: e.FieldHandlers.ResolveFileFieldsUser(e, &fe.FileFields), + Group: e.FieldHandlers.ResolveFileFieldsGroup(e, &fe.FileFields), Mtime: getTimeIfNotZero(time.Unix(0, int64(fe.MTime))), Ctime: getTimeIfNotZero(time.Unix(0, int64(fe.CTime))), - InUpperLayer: getInUpperLayer(e.resolvers, &fe.FileFields), + InUpperLayer: getInUpperLayer(&fe.FileFields), } } @@ -609,11 +613,11 @@ func newCredentialsSerializer(ce *model.Credentials) *CredentialsSerializer { } } -func newProcessSerializer(ps *model.Process, e *Event) *ProcessSerializer { +func newProcessSerializer(ps *model.Process, e *model.Event, resolvers *Resolvers) *ProcessSerializer { if ps.IsNotKworker() { - argv, argvTruncated := e.resolvers.ProcessResolver.GetProcessScrubbedArgv(ps) - envs, EnvsTruncated := e.resolvers.ProcessResolver.GetProcessEnvs(ps) - argv0, _ := e.resolvers.ProcessResolver.GetProcessArgv0(ps) + argv, argvTruncated := resolvers.ProcessResolver.GetProcessScrubbedArgv(ps) + envs, EnvsTruncated := resolvers.ProcessResolver.GetProcessEnvs(ps) + argv0, _ := resolvers.ProcessResolver.GetProcessArgv0(ps) psSerializer := &ProcessSerializer{ ForkTime: getTimeIfNotZero(ps.ForkTime), @@ -664,7 +668,7 @@ func newProcessSerializer(ps *model.Process, e *Event) *ProcessSerializer { } } -func newDDContextSerializer(e *Event) *DDContextSerializer { +func newDDContextSerializer(e *model.Event) *DDContextSerializer { s := &DDContextSerializer{ SpanID: e.SpanContext.SpanID, TraceID: e.SpanContext.TraceID, @@ -673,7 +677,7 @@ func newDDContextSerializer(e *Event) *DDContextSerializer { return s } - ctx := eval.NewContext(e.GetPointer()) + ctx := eval.NewContext(e) it := &model.ProcessAncestorsIterator{} ptr := it.Front(ctx) @@ -692,31 +696,25 @@ func newDDContextSerializer(e *Event) *DDContextSerializer { return s } -func newUserContextSerializer(e *Event) *UserContextSerializer { +func newUserContextSerializer(e *model.Event) *UserContextSerializer { return &UserContextSerializer{ User: e.ProcessContext.User, Group: e.ProcessContext.Group, } } -func newProcessContextSerializer(pc *model.ProcessContext, e *Event, r *Resolvers) *ProcessContextSerializer { - if pc == nil || pc.Pid == 0 { +func newProcessContextSerializer(pc *model.ProcessContext, e *model.Event, resolvers *Resolvers) *ProcessContextSerializer { + if pc == nil || pc.Pid == 0 || e == nil { return nil } var ps ProcessContextSerializer - if e == nil { - // custom events create an empty event - e = NewEvent(r, nil, nil) - e.ProcessContext = pc - } - ps = ProcessContextSerializer{ - ProcessSerializer: newProcessSerializer(&pc.Process, e), + ProcessSerializer: newProcessSerializer(&pc.Process, e, resolvers), } - ctx := eval.NewContext(e.GetPointer()) + ctx := eval.NewContext(e) it := &model.ProcessAncestorsIterator{} ptr := it.Front(ctx) @@ -729,7 +727,7 @@ func newProcessContextSerializer(pc *model.ProcessContext, e *Event, r *Resolver for ptr != nil { pce := (*model.ProcessCacheEntry)(ptr) - s := newProcessSerializer(&pce.Process, e) + s := newProcessSerializer(&pce.Process, e, resolvers) ps.Ancestors = append(ps.Ancestors, s) if first { @@ -751,12 +749,12 @@ func newProcessContextSerializer(pc *model.ProcessContext, e *Event, r *Resolver return &ps } -func newSELinuxSerializer(e *Event) *SELinuxEventSerializer { +func newSELinuxSerializer(e *model.Event) *SELinuxEventSerializer { switch e.SELinux.EventKind { case model.SELinuxBoolChangeEventKind: return &SELinuxEventSerializer{ BoolChange: &SELinuxBoolChangeSerializer{ - Name: e.ResolveSELinuxBoolName(&e.SELinux), + Name: e.FieldHandlers.ResolveSELinuxBoolName(e, &e.SELinux), State: e.SELinux.BoolChangeValue, }, } @@ -777,7 +775,7 @@ func newSELinuxSerializer(e *Event) *SELinuxEventSerializer { } } -func newBPFMapSerializer(e *Event) *BPFMapSerializer { +func newBPFMapSerializer(e *model.Event) *BPFMapSerializer { if e.BPF.Map.ID == 0 { return nil } @@ -787,7 +785,7 @@ func newBPFMapSerializer(e *Event) *BPFMapSerializer { } } -func newBPFProgramSerializer(e *Event) *BPFProgramSerializer { +func newBPFProgramSerializer(e *model.Event) *BPFProgramSerializer { if e.BPF.Program.ID == 0 { return nil } @@ -801,7 +799,7 @@ func newBPFProgramSerializer(e *Event) *BPFProgramSerializer { } } -func newBPFEventSerializer(e *Event) *BPFEventSerializer { +func newBPFEventSerializer(e *model.Event) *BPFEventSerializer { return &BPFEventSerializer{ Cmd: model.BPFCmd(e.BPF.Cmd).String(), Map: newBPFMapSerializer(e), @@ -809,7 +807,7 @@ func newBPFEventSerializer(e *Event) *BPFEventSerializer { } } -func newMMapEventSerializer(e *Event) *MMapEventSerializer { +func newMMapEventSerializer(e *model.Event) *MMapEventSerializer { return &MMapEventSerializer{ Address: fmt.Sprintf("0x%x", e.MMap.Addr), Offset: e.MMap.Offset, @@ -819,7 +817,7 @@ func newMMapEventSerializer(e *Event) *MMapEventSerializer { } } -func newMProtectEventSerializer(e *Event) *MProtectEventSerializer { +func newMProtectEventSerializer(e *model.Event) *MProtectEventSerializer { return &MProtectEventSerializer{ VMStart: fmt.Sprintf("0x%x", e.MProtect.VMStart), VMEnd: fmt.Sprintf("0x%x", e.MProtect.VMEnd), @@ -828,15 +826,15 @@ func newMProtectEventSerializer(e *Event) *MProtectEventSerializer { } } -func newPTraceEventSerializer(e *Event) *PTraceEventSerializer { +func newPTraceEventSerializer(e *model.Event, resolvers *Resolvers) *PTraceEventSerializer { return &PTraceEventSerializer{ Request: model.PTraceRequest(e.PTrace.Request).String(), Address: fmt.Sprintf("0x%x", e.PTrace.Address), - Tracee: newProcessContextSerializer(e.PTrace.Tracee, e, e.resolvers), + Tracee: newProcessContextSerializer(e.PTrace.Tracee, e, resolvers), } } -func newLoadModuleEventSerializer(e *Event) *ModuleEventSerializer { +func newLoadModuleEventSerializer(e *model.Event) *ModuleEventSerializer { loadedFromMemory := e.LoadModule.LoadedFromMemory return &ModuleEventSerializer{ Name: e.LoadModule.Name, @@ -844,22 +842,22 @@ func newLoadModuleEventSerializer(e *Event) *ModuleEventSerializer { } } -func newUnloadModuleEventSerializer(e *Event) *ModuleEventSerializer { +func newUnloadModuleEventSerializer(e *model.Event) *ModuleEventSerializer { return &ModuleEventSerializer{ Name: e.UnloadModule.Name, } } -func newSignalEventSerializer(e *Event) *SignalEventSerializer { +func newSignalEventSerializer(e *model.Event, resolvers *Resolvers) *SignalEventSerializer { ses := &SignalEventSerializer{ Type: model.Signal(e.Signal.Type).String(), PID: e.Signal.PID, - Target: newProcessContextSerializer(e.Signal.Target, e, e.resolvers), + Target: newProcessContextSerializer(e.Signal.Target, e, resolvers), } return ses } -func newSpliceEventSerializer(e *Event) *SpliceEventSerializer { +func newSpliceEventSerializer(e *model.Event) *SpliceEventSerializer { return &SpliceEventSerializer{ PipeEntryFlag: model.PipeBufFlag(e.Splice.PipeEntryFlag).String(), PipeExitFlag: model.PipeBufFlag(e.Splice.PipeExitFlag).String(), @@ -898,15 +896,15 @@ func newIPPortFamilySerializer(c *model.IPPortContext, family string) *IPPortFam } } -func newNetworkDeviceSerializer(e *Event) *NetworkDeviceSerializer { +func newNetworkDeviceSerializer(e *model.Event) *NetworkDeviceSerializer { return &NetworkDeviceSerializer{ NetNS: e.NetworkContext.Device.NetNS, IfIndex: e.NetworkContext.Device.IfIndex, - IfName: e.ResolveNetworkDeviceIfName(&e.NetworkContext.Device), + IfName: e.FieldHandlers.ResolveNetworkDeviceIfName(e, &e.NetworkContext.Device), } } -func newNetworkContextSerializer(e *Event) *NetworkContextSerializer { +func newNetworkContextSerializer(e *model.Event) *NetworkContextSerializer { return &NetworkContextSerializer{ Device: newNetworkDeviceSerializer(e), L3Protocol: model.L3Protocol(e.NetworkContext.L3Protocol).String(), @@ -917,7 +915,7 @@ func newNetworkContextSerializer(e *Event) *NetworkContextSerializer { } } -func newBindEventSerializer(e *Event) *BindEventSerializer { +func newBindEventSerializer(e *model.Event) *BindEventSerializer { bes := &BindEventSerializer{ Addr: newIPPortFamilySerializer(&e.Bind.Addr, model.AddressFamily(e.Bind.AddrFamily).String()), @@ -925,18 +923,20 @@ func newBindEventSerializer(e *Event) *BindEventSerializer { return bes } -func newExitEventSerializer(e *Event) *ExitEventSerializer { +func newExitEventSerializer(e *model.Event) *ExitEventSerializer { return &ExitEventSerializer{ Cause: model.ExitCause(e.Exit.Cause).String(), Code: e.Exit.Code, } } -func newMountEventSerializer(e *Event) *MountEventSerializer { - src, srcErr := e.ResolveMountRoot(&e.Mount.Mount) - dst, dstErr := e.ResolveMountPoint(&e.Mount.Mount) - mountPointPath := e.ResolveMountPointPath(&e.Mount) - mountSourcePath := e.ResolveMountSourcePath(&e.Mount) +func newMountEventSerializer(e *model.Event) *MountEventSerializer { + fh := e.FieldHandlers.(*FieldHandlers) + + src, srcErr := fh.ResolveMountRoot(e, &e.Mount.Mount) + dst, dstErr := fh.ResolveMountPoint(e, &e.Mount.Mount) + mountPointPath := fh.ResolveMountPointPath(e, &e.Mount) + mountSourcePath := fh.ResolveMountSourcePath(e, &e.Mount) mountSerializer := &MountEventSerializer{ MountPoint: &FileSerializer{ @@ -988,10 +988,27 @@ func serializeSyscallRetval(retval int64) string { } } +func MarshalEvent(event *model.Event, probe *Probe) ([]byte, error) { + s := NewEventSerializer(event, probe) + w := &jwriter.Writer{ + Flags: jwriter.NilSliceAsEmpty | jwriter.NilMapAsEmpty, + } + s.MarshalEasyJSON(w) + return w.BuildBytes() +} + +func MarshalCustomEvent(event *events.CustomEvent) ([]byte, error) { + w := &jwriter.Writer{ + Flags: jwriter.NilSliceAsEmpty | jwriter.NilMapAsEmpty, + } + event.MarshalEasyJSON(w) + return w.BuildBytes() +} + // NewEventSerializer creates a new event serializer based on the event type -func NewEventSerializer(event *Event) *EventSerializer { +func NewEventSerializer(event *model.Event, probe *Probe) *EventSerializer { var pc model.ProcessContext - if entry, _ := event.ResolveProcessCacheEntry(); entry != nil { + if entry, _ := event.FieldHandlers.ResolveProcessCacheEntry(event); entry != nil { pc = entry.ProcessContext } @@ -999,13 +1016,13 @@ func NewEventSerializer(event *Event) *EventSerializer { EventContextSerializer: EventContextSerializer{ Name: model.EventType(event.Type).String(), }, - ProcessContextSerializer: newProcessContextSerializer(&pc, event, event.resolvers), + ProcessContextSerializer: newProcessContextSerializer(&pc, event, probe.resolvers), DDContextSerializer: newDDContextSerializer(event), UserContextSerializer: newUserContextSerializer(event), - Date: utils.NewEasyjsonTime(event.ResolveEventTimestamp()), + Date: utils.NewEasyjsonTime(event.FieldHandlers.ResolveEventTimestamp(event)), } - if id := event.ResolveContainerID(&event.ContainerContext); id != "" { + if id := event.FieldHandlers.ResolveContainerID(event, &event.ContainerContext); id != "" { s.ContainerContextSerializer = &ContainerContextSerializer{ ID: id, } @@ -1093,8 +1110,8 @@ func NewEventSerializer(event *Event) *EventSerializer { s.FileEventSerializer = &FileEventSerializer{ FileSerializer: *newFileSerializer(&event.RemoveXAttr.File, event), Destination: &FileSerializer{ - XAttrName: event.ResolveXAttrName(&event.RemoveXAttr), - XAttrNamespace: event.ResolveXAttrNamespace(&event.RemoveXAttr), + XAttrName: event.FieldHandlers.ResolveXAttrName(event, &event.RemoveXAttr), + XAttrNamespace: event.FieldHandlers.ResolveXAttrNamespace(event, &event.RemoveXAttr), }, } s.EventContextSerializer.Outcome = serializeSyscallRetval(event.RemoveXAttr.Retval) @@ -1102,8 +1119,8 @@ func NewEventSerializer(event *Event) *EventSerializer { s.FileEventSerializer = &FileEventSerializer{ FileSerializer: *newFileSerializer(&event.SetXAttr.File, event), Destination: &FileSerializer{ - XAttrName: event.ResolveXAttrName(&event.SetXAttr), - XAttrNamespace: event.ResolveXAttrNamespace(&event.SetXAttr), + XAttrName: event.FieldHandlers.ResolveXAttrName(event, &event.SetXAttr), + XAttrNamespace: event.FieldHandlers.ResolveXAttrNamespace(event, &event.SetXAttr), }, } s.EventContextSerializer.Outcome = serializeSyscallRetval(event.SetXAttr.Retval) @@ -1127,21 +1144,21 @@ func NewEventSerializer(event *Event) *EventSerializer { case model.SetuidEventType: s.ProcessContextSerializer.Credentials.Destination = &SetuidSerializer{ UID: int(event.SetUID.UID), - User: event.ResolveSetuidUser(&event.SetUID), + User: event.FieldHandlers.ResolveSetuidUser(event, &event.SetUID), EUID: int(event.SetUID.EUID), - EUser: event.ResolveSetuidEUser(&event.SetUID), + EUser: event.FieldHandlers.ResolveSetuidEUser(event, &event.SetUID), FSUID: int(event.SetUID.FSUID), - FSUser: event.ResolveSetuidFSUser(&event.SetUID), + FSUser: event.FieldHandlers.ResolveSetuidFSUser(event, &event.SetUID), } s.EventContextSerializer.Outcome = serializeSyscallRetval(0) case model.SetgidEventType: s.ProcessContextSerializer.Credentials.Destination = &SetgidSerializer{ GID: int(event.SetGID.GID), - Group: event.ResolveSetgidGroup(&event.SetGID), + Group: event.FieldHandlers.ResolveSetgidGroup(event, &event.SetGID), EGID: int(event.SetGID.EGID), - EGroup: event.ResolveSetgidEGroup(&event.SetGID), + EGroup: event.FieldHandlers.ResolveSetgidEGroup(event, &event.SetGID), FSGID: int(event.SetGID.FSGID), - FSGroup: event.ResolveSetgidFSGroup(&event.SetGID), + FSGroup: event.FieldHandlers.ResolveSetgidFSGroup(event, &event.SetGID), } s.EventContextSerializer.Outcome = serializeSyscallRetval(0) case model.CapsetEventType: @@ -1185,7 +1202,7 @@ func NewEventSerializer(event *Event) *EventSerializer { s.MProtectEventSerializer = newMProtectEventSerializer(event) case model.PTraceEventType: s.EventContextSerializer.Outcome = serializeSyscallRetval(event.PTrace.Retval) - s.PTraceEventSerializer = newPTraceEventSerializer(event) + s.PTraceEventSerializer = newPTraceEventSerializer(event, probe.resolvers) case model.LoadModuleEventType: s.EventContextSerializer.Outcome = serializeSyscallRetval(event.LoadModule.Retval) if !event.LoadModule.LoadedFromMemory { @@ -1199,7 +1216,7 @@ func NewEventSerializer(event *Event) *EventSerializer { s.ModuleEventSerializer = newUnloadModuleEventSerializer(event) case model.SignalEventType: s.EventContextSerializer.Outcome = serializeSyscallRetval(event.Signal.Retval) - s.SignalEventSerializer = newSignalEventSerializer(event) + s.SignalEventSerializer = newSignalEventSerializer(event, probe.resolvers) case model.SpliceEventType: s.EventContextSerializer.Outcome = serializeSyscallRetval(event.Splice.Retval) s.SpliceEventSerializer = newSpliceEventSerializer(event) diff --git a/pkg/security/probe/variables.go b/pkg/security/probe/variables.go index ec49b633fc4169..f8b6cfaad2a231 100644 --- a/pkg/security/probe/variables.go +++ b/pkg/security/probe/variables.go @@ -10,13 +10,14 @@ package probe import ( "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" ) var ( // SECLVariables set of variables SECLVariables = map[string]eval.VariableValue{ "process.pid": eval.NewIntVariable(func(ctx *eval.Context) int { - pc := (*Event)(ctx.Object).ProcessContext + pc := ctx.Event.(*model.Event).ProcessContext if pc == nil { return 0 } diff --git a/pkg/security/rconfig/rconfig.go b/pkg/security/rconfig/rconfig.go index 123e60df390149..fc25847075cfdc 100644 --- a/pkg/security/rconfig/rconfig.go +++ b/pkg/security/rconfig/rconfig.go @@ -16,6 +16,7 @@ import ( "github.com/Masterminds/semver/v3" "github.com/hashicorp/go-multierror" + "github.com/skydive-project/go-debouncer" "github.com/DataDog/datadog-agent/pkg/config/remote" "github.com/DataDog/datadog-agent/pkg/config/remote/data" @@ -24,7 +25,10 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/log" ) -const securityAgentRCPollInterval = time.Second * 1 +const ( + securityAgentRCPollInterval = time.Second * 1 + debounceDelay = 5 * time.Second +) // RCPolicyProvider defines a remote config policy provider type RCPolicyProvider struct { @@ -32,40 +36,58 @@ type RCPolicyProvider struct { client *remote.Client onNewPoliciesReadyCb func() - lastConfigs map[string]state.ConfigCWSDD + lastDefaults map[string]state.ConfigCWSDD + lastCustoms map[string]state.ConfigCWSCustom + debouncer *debouncer.Debouncer } var _ rules.PolicyProvider = (*RCPolicyProvider)(nil) // NewRCPolicyProvider returns a new Remote Config based policy provider func NewRCPolicyProvider(name string, agentVersion *semver.Version) (*RCPolicyProvider, error) { - c, err := remote.NewGRPCClient(name, agentVersion.String(), []data.Product{data.ProductCWSDD}, securityAgentRCPollInterval) + c, err := remote.NewGRPCClient(name, agentVersion.String(), []data.Product{data.ProductCWSDD, data.ProductCWSCustom}, securityAgentRCPollInterval) if err != nil { return nil, err } - return &RCPolicyProvider{ + r := &RCPolicyProvider{ client: c, - }, nil + } + r.debouncer = debouncer.New(debounceDelay, r.onNewPoliciesReady) + + return r, nil } // Start starts the Remote Config policy provider and subscribes to updates func (r *RCPolicyProvider) Start() { log.Info("remote-config policies provider started") - r.client.RegisterCWSDDUpdate(r.rcConfigUpdateCallback) + r.debouncer.Start() + + r.client.RegisterCWSDDUpdate(r.rcDefaultsUpdateCallback) + r.client.RegisterCWSCustomUpdate(r.rcCustomsUpdateCallback) r.client.Start() } -func (r *RCPolicyProvider) rcConfigUpdateCallback(configs map[string]state.ConfigCWSDD) { +func (r *RCPolicyProvider) rcDefaultsUpdateCallback(configs map[string]state.ConfigCWSDD) { + r.Lock() + r.lastDefaults = configs + r.Unlock() + + log.Info("new policies from remote-config policy provider") + + r.debouncer.Call() +} + +func (r *RCPolicyProvider) rcCustomsUpdateCallback(configs map[string]state.ConfigCWSCustom) { r.Lock() - r.lastConfigs = configs + r.lastCustoms = configs r.Unlock() log.Info("new policies from remote-config policy provider") - r.onNewPoliciesReadyCb() + r.debouncer.Call() } func normalize(policy *rules.Policy) { @@ -84,10 +106,10 @@ func (r *RCPolicyProvider) LoadPolicies(macroFilters []rules.MacroFilter, ruleFi r.RLock() defer r.RUnlock() - for _, c := range r.lastConfigs { - reader := bytes.NewReader(c.Config) + load := func(id string, cfg []byte) { + reader := bytes.NewReader(cfg) - policy, err := rules.LoadPolicy(c.Metadata.ID, "remote-config", reader, macroFilters, ruleFilters) + policy, err := rules.LoadPolicy(id, "remote-config", reader, macroFilters, ruleFilters) if err != nil { errs = multierror.Append(errs, err) } @@ -95,6 +117,13 @@ func (r *RCPolicyProvider) LoadPolicies(macroFilters []rules.MacroFilter, ruleFi policies = append(policies, policy) } + for _, c := range r.lastDefaults { + load(c.Metadata.ID, c.Config) + } + for _, c := range r.lastCustoms { + load(c.Metadata.ID, c.Config) + } + return policies, errs } @@ -103,8 +132,18 @@ func (r *RCPolicyProvider) SetOnNewPoliciesReadyCb(cb func()) { r.onNewPoliciesReadyCb = cb } +func (r *RCPolicyProvider) onNewPoliciesReady() { + r.RLock() + defer r.RUnlock() + + if r.onNewPoliciesReadyCb != nil { + r.onNewPoliciesReadyCb() + } +} + // Close stops the client func (r *RCPolicyProvider) Close() error { + r.debouncer.Stop() r.client.Close() return nil } diff --git a/pkg/security/secl/compiler/eval/context.go b/pkg/security/secl/compiler/eval/context.go index a6b8259e61b00d..55a9821c197717 100644 --- a/pkg/security/secl/compiler/eval/context.go +++ b/pkg/security/secl/compiler/eval/context.go @@ -13,7 +13,7 @@ import ( // Context describes the context used during a rule evaluation type Context struct { - Object unsafe.Pointer + Event Event Registers Registers @@ -31,14 +31,14 @@ func (c *Context) Now() time.Time { return c.now } -// SetObject set the given object to the context -func (c *Context) SetObject(obj unsafe.Pointer) { - c.Object = obj +// SetEvent set the given event to the context +func (c *Context) SetEvent(evt Event) { + c.Event = evt } // Reset the context func (c *Context) Reset() { - c.Object = nil + c.Event = nil c.Registers = nil c.now = time.Time{} @@ -49,10 +49,10 @@ func (c *Context) Reset() { } // NewContext return a new Context -func NewContext(obj unsafe.Pointer) *Context { +func NewContext(evt Event) *Context { return &Context{ - Object: obj, - Cache: make(map[string]unsafe.Pointer), + Event: evt, + Cache: make(map[string]unsafe.Pointer), } } @@ -61,10 +61,10 @@ type ContextPool struct { pool sync.Pool } -// Get returns a context with the given object -func (c *ContextPool) Get(obj unsafe.Pointer) *Context { +// Get returns a context with the given event +func (c *ContextPool) Get(evt Event) *Context { ctx := c.pool.Get().(*Context) - ctx.SetObject(obj) + ctx.SetEvent(evt) return ctx } diff --git a/pkg/security/secl/compiler/eval/eval.go b/pkg/security/secl/compiler/eval/eval.go index 799c7d4fd9ca9b..5470cd2886d06a 100644 --- a/pkg/security/secl/compiler/eval/eval.go +++ b/pkg/security/secl/compiler/eval/eval.go @@ -64,14 +64,8 @@ type ident struct { Ident *string } -// ReplacementContext represents the group of Options and Macro Store used during SECL evaluation -type ReplacementContext struct { - *Opts - *MacroStore -} - -func identToEvaluator(obj *ident, state *State) (interface{}, lexer.Position, error) { - if accessor, ok := state.replCtx.Opts.Constants[*obj.Ident]; ok { +func identToEvaluator(obj *ident, opts *Opts, state *State) (interface{}, lexer.Position, error) { + if accessor, ok := opts.Constants[*obj.Ident]; ok { return accessor, obj.Pos, nil } @@ -87,11 +81,11 @@ func identToEvaluator(obj *ident, state *State) (interface{}, lexer.Position, er } // transform extracted field to support legacy SECL fields - if state.replCtx.Opts.LegacyFields != nil { - if newField, ok := state.replCtx.Opts.LegacyFields[field]; ok { + if opts.LegacyFields != nil { + if newField, ok := opts.LegacyFields[field]; ok { field = newField } - if newField, ok := state.replCtx.Opts.LegacyFields[field]; ok { + if newField, ok := opts.LegacyFields[field]; ok { itField = newField } } @@ -158,7 +152,7 @@ func identToEvaluator(obj *ident, state *State) (interface{}, lexer.Position, er return accessor, obj.Pos, nil } -func arrayToEvaluator(array *ast.Array, state *State) (interface{}, lexer.Position, error) { +func arrayToEvaluator(array *ast.Array, opts *Opts, state *State) (interface{}, lexer.Position, error) { if len(array.Numbers) != 0 { var evaluator IntArrayEvaluator evaluator.AppendValues(array.Numbers...) @@ -175,13 +169,13 @@ func arrayToEvaluator(array *ast.Array, state *State) (interface{}, lexer.Positi } // could be an iterator - return identToEvaluator(&ident{Pos: array.Pos, Ident: array.Ident}, state) + return identToEvaluator(&ident{Pos: array.Pos, Ident: array.Ident}, opts, state) } else if array.Variable != nil { varName, ok := isVariableName(*array.Variable) if !ok { return nil, array.Pos, NewError(array.Pos, "invalid variable name '%s'", *array.Variable) } - return evaluatorFromVariable(varName, array.Pos, state.replCtx) + return evaluatorFromVariable(varName, array.Pos, opts) } else if array.CIDR != nil { var values CIDRValues if err := values.AppendCIDR(*array.CIDR); err != nil { @@ -224,26 +218,25 @@ func isVariableName(str string) (string, bool) { return "", false } -func evaluatorFromVariable(varname string, pos lexer.Position, replCtx ReplacementContext) (interface{}, lexer.Position, error) { - value, exists := replCtx.Opts.Variables[varname] - if !exists { +func evaluatorFromVariable(varname string, pos lexer.Position, opts *Opts) (interface{}, lexer.Position, error) { + variable := opts.VariableStore.Get(varname) + if variable == nil { return nil, pos, NewError(pos, "variable '%s' doesn't exist", varname) } - return value.GetEvaluator(), pos, nil + return variable.GetEvaluator(), pos, nil } -func stringEvaluatorFromVariable(str string, pos lexer.Position, replCtx ReplacementContext) (interface{}, lexer.Position, error) { +func stringEvaluatorFromVariable(str string, pos lexer.Position, opts *Opts) (interface{}, lexer.Position, error) { var evaluators []*StringEvaluator doLoc := func(sub string) error { if varname, ok := isVariableName(sub); ok { - value, exists := replCtx.Opts.Variables[varname] - if !exists { - return NewError(pos, "variable '%s' doesn't exist", varname) + evaluator, pos, err := evaluatorFromVariable(varname, pos, opts) + if err != nil { + return err } - evaluator := value.GetEvaluator() switch evaluator := evaluator.(type) { case *StringArrayEvaluator: evaluators = append(evaluators, &StringEvaluator{ @@ -386,7 +379,7 @@ func StringArrayMatchesWrapper(a *StringArrayEvaluator, b *StringValuesEvaluator return evaluator, nil } -func nodeToEvaluator(obj interface{}, state *State) (interface{}, lexer.Position, error) { +func nodeToEvaluator(obj interface{}, opts *Opts, state *State) (interface{}, lexer.Position, error) { var err error var boolEvaluator *BoolEvaluator var pos lexer.Position @@ -394,9 +387,9 @@ func nodeToEvaluator(obj interface{}, state *State) (interface{}, lexer.Position switch obj := obj.(type) { case *ast.BooleanExpression: - return nodeToEvaluator(obj.Expression, state) + return nodeToEvaluator(obj.Expression, opts, state) case *ast.Expression: - cmp, pos, err = nodeToEvaluator(obj.Comparison, state) + cmp, pos, err = nodeToEvaluator(obj.Comparison, opts, state) if err != nil { return nil, pos, err } @@ -407,7 +400,7 @@ func nodeToEvaluator(obj interface{}, state *State) (interface{}, lexer.Position return nil, obj.Pos, NewTypeError(obj.Pos, reflect.Bool) } - next, pos, err = nodeToEvaluator(obj.Next, state) + next, pos, err = nodeToEvaluator(obj.Next, opts, state) if err != nil { return nil, pos, err } @@ -435,7 +428,7 @@ func nodeToEvaluator(obj interface{}, state *State) (interface{}, lexer.Position } return cmp, obj.Pos, nil case *ast.BitOperation: - unary, pos, err = nodeToEvaluator(obj.Unary, state) + unary, pos, err = nodeToEvaluator(obj.Unary, opts, state) if err != nil { return nil, pos, err } @@ -446,7 +439,7 @@ func nodeToEvaluator(obj interface{}, state *State) (interface{}, lexer.Position return nil, obj.Pos, NewTypeError(obj.Pos, reflect.Int) } - next, pos, err = nodeToEvaluator(obj.Next, state) + next, pos, err = nodeToEvaluator(obj.Next, opts, state) if err != nil { return nil, pos, err } @@ -481,13 +474,13 @@ func nodeToEvaluator(obj interface{}, state *State) (interface{}, lexer.Position return unary, obj.Pos, nil case *ast.Comparison: - unary, pos, err = nodeToEvaluator(obj.BitOperation, state) + unary, pos, err = nodeToEvaluator(obj.BitOperation, opts, state) if err != nil { return nil, pos, err } if obj.ArrayComparison != nil { - next, pos, err = nodeToEvaluator(obj.ArrayComparison, state) + next, pos, err = nodeToEvaluator(obj.ArrayComparison, opts, state) if err != nil { return nil, pos, err } @@ -710,7 +703,7 @@ func nodeToEvaluator(obj interface{}, state *State) (interface{}, lexer.Position return nil, pos, NewTypeError(pos, reflect.Array) } } else if obj.ScalarComparison != nil { - next, pos, err = nodeToEvaluator(obj.ScalarComparison, state) + next, pos, err = nodeToEvaluator(obj.ScalarComparison, opts, state) if err != nil { return nil, pos, err } @@ -1052,14 +1045,14 @@ func nodeToEvaluator(obj interface{}, state *State) (interface{}, lexer.Position } case *ast.ArrayComparison: - return nodeToEvaluator(obj.Array, state) + return nodeToEvaluator(obj.Array, opts, state) case *ast.ScalarComparison: - return nodeToEvaluator(obj.Next, state) + return nodeToEvaluator(obj.Next, opts, state) case *ast.Unary: if obj.Op != nil { - unary, pos, err = nodeToEvaluator(obj.Unary, state) + unary, pos, err = nodeToEvaluator(obj.Unary, opts, state) if err != nil { return nil, pos, err } @@ -1090,11 +1083,11 @@ func nodeToEvaluator(obj interface{}, state *State) (interface{}, lexer.Position return nil, pos, NewOpUnknownError(obj.Pos, *obj.Op) } - return nodeToEvaluator(obj.Primary, state) + return nodeToEvaluator(obj.Primary, opts, state) case *ast.Primary: switch { case obj.Ident != nil: - return identToEvaluator(&ident{Pos: obj.Pos, Ident: obj.Ident}, state) + return identToEvaluator(&ident{Pos: obj.Pos, Ident: obj.Ident}, opts, state) case obj.Number != nil: return &IntEvaluator{ Value: *obj.Number, @@ -1105,7 +1098,7 @@ func nodeToEvaluator(obj interface{}, state *State) (interface{}, lexer.Position return nil, obj.Pos, NewError(obj.Pos, "internal variable error '%s'", varname) } - return evaluatorFromVariable(varname, obj.Pos, state.replCtx) + return evaluatorFromVariable(varname, obj.Pos, opts) case obj.Duration != nil: return &IntEvaluator{ Value: *obj.Duration, @@ -1116,7 +1109,7 @@ func nodeToEvaluator(obj interface{}, state *State) (interface{}, lexer.Position // contains variables if len(variableRegex.FindAllIndex([]byte(str), -1)) > 0 { - return stringEvaluatorFromVariable(str, obj.Pos, state.replCtx) + return stringEvaluatorFromVariable(str, obj.Pos, opts) } return &StringEvaluator{ @@ -1158,12 +1151,12 @@ func nodeToEvaluator(obj interface{}, state *State) (interface{}, lexer.Position } return evaluator, obj.Pos, nil case obj.SubExpression != nil: - return nodeToEvaluator(obj.SubExpression, state) + return nodeToEvaluator(obj.SubExpression, opts, state) default: return nil, obj.Pos, NewError(obj.Pos, "unknown primary '%s'", reflect.TypeOf(obj)) } case *ast.Array: - return arrayToEvaluator(obj, state) + return arrayToEvaluator(obj, opts, state) } return nil, lexer.Position{}, NewError(lexer.Position{}, "unknown entity '%s'", reflect.TypeOf(obj)) diff --git a/pkg/security/secl/compiler/eval/eval_test.go b/pkg/security/secl/compiler/eval/eval_test.go index bb4a3e666301e7..511fc418c07bfd 100644 --- a/pkg/security/secl/compiler/eval/eval_test.go +++ b/pkg/security/secl/compiler/eval/eval_test.go @@ -15,43 +15,38 @@ import ( "syscall" "testing" "time" - "unsafe" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/ast" ) -func newReplCtxWithParams(constants map[string]interface{}, legacyFields map[Field]Field) ReplacementContext { +func newOptsWithParams(constants map[string]interface{}, legacyFields map[Field]Field) *Opts { opts := &Opts{ Constants: constants, LegacyFields: legacyFields, - Variables: map[string]VariableValue{ - "pid": NewIntVariable(func(ctx *Context) int { - return os.Getpid() - }, nil), - "str": NewStringVariable(func(ctx *Context) string { - return "aaa" - }, nil), - }, } - return ReplacementContext{ - Opts: opts, - MacroStore: &MacroStore{}, + + variables := map[string]VariableValue{ + "pid": NewIntVariable(func(ctx *Context) int { + return os.Getpid() + }, nil), + "str": NewStringVariable(func(ctx *Context) string { + return "aaa" + }, nil), } + + return opts.WithVariables(variables).WithMacroStore(&MacroStore{}) } -func parseRule(expr string, model Model, replCtx ReplacementContext) (*Rule, error) { - pc := ast.NewParsingContext() +func parseRule(expr string, model Model, opts *Opts) (*Rule, error) { + rule := NewRule("id1", expr, opts) - rule := &Rule{ - ID: "id1", - Expression: expr, - } + pc := ast.NewParsingContext() if err := rule.Parse(pc); err != nil { return nil, fmt.Errorf("parsing error: %v", err) } - if err := rule.GenEvaluator(model, pc, replCtx); err != nil { + if err := rule.GenEvaluator(model, pc); err != nil { return rule, fmt.Errorf("compilation error: %v", err) } @@ -61,10 +56,11 @@ func parseRule(expr string, model Model, replCtx ReplacementContext) (*Rule, err func eval(t *testing.T, event *testEvent, expr string) (bool, *ast.Rule, error) { model := &testModel{} - ctx := NewContext(unsafe.Pointer(event)) + ctx := NewContext(event) - replCtx := newReplCtxWithParams(testConstants, nil) - rule, err := parseRule(expr, model, replCtx) + opts := newOptsWithParams(testConstants, nil) + + rule, err := parseRule(expr, model, opts) if err != nil { return false, nil, err } @@ -73,23 +69,16 @@ func eval(t *testing.T, event *testEvent, expr string) (bool, *ast.Rule, error) return r1, rule.GetAst(), nil } -func emptyReplCtx() ReplacementContext { - return ReplacementContext{ - Opts: &Opts{}, - MacroStore: &MacroStore{}, - } -} - func TestStringError(t *testing.T) { model := &testModel{} - replCtx := newReplCtxWithParams(nil, nil) - rule, err := parseRule(`process.name != "/usr/bin/vipw" && process.uid != 0 && open.filename == 3`, model, replCtx) + opts := newOptsWithParams(nil, nil) + rule, err := parseRule(`process.name != "/usr/bin/vipw" && process.uid != 0 && open.filename == 3`, model, opts) if rule == nil { t.Fatal(err) } - _, err = NewRuleEvaluator(rule.GetAst(), model, emptyReplCtx()) + _, err = NewRuleEvaluator(rule.GetAst(), model, opts) if err == nil || err.(*ErrAstToEval).Pos.Column != 73 { t.Fatal("should report a string type error") } @@ -98,13 +87,13 @@ func TestStringError(t *testing.T) { func TestIntError(t *testing.T) { model := &testModel{} - replCtx := newReplCtxWithParams(nil, nil) - rule, err := parseRule(`process.name != "/usr/bin/vipw" && process.uid != "test" && Open.Filename == "/etc/shadow"`, model, replCtx) + opts := newOptsWithParams(nil, nil) + rule, err := parseRule(`process.name != "/usr/bin/vipw" && process.uid != "test" && Open.Filename == "/etc/shadow"`, model, opts) if rule == nil { t.Fatal(err) } - _, err = NewRuleEvaluator(rule.GetAst(), model, emptyReplCtx()) + _, err = NewRuleEvaluator(rule.GetAst(), model, opts) if err == nil || err.(*ErrAstToEval).Pos.Column != 51 { t.Fatal("should report a string type error") } @@ -113,13 +102,13 @@ func TestIntError(t *testing.T) { func TestBoolError(t *testing.T) { model := &testModel{} - replCtx := newReplCtxWithParams(nil, nil) - rule, err := parseRule(`(process.name != "/usr/bin/vipw") == "test"`, model, replCtx) + opts := newOptsWithParams(nil, nil) + rule, err := parseRule(`(process.name != "/usr/bin/vipw") == "test"`, model, opts) if rule == nil { t.Fatal(err) } - _, err = NewRuleEvaluator(rule.GetAst(), model, emptyReplCtx()) + _, err = NewRuleEvaluator(rule.GetAst(), model, opts) if err == nil || err.(*ErrAstToEval).Pos.Column != 38 { t.Fatal("should report a bool type error") } @@ -477,7 +466,7 @@ func TestComplex(t *testing.T) { } func TestPartial(t *testing.T) { - event := testEvent{ + event := &testEvent{ process: testProcess{ name: "abc", uid: 123, @@ -554,16 +543,15 @@ func TestPartial(t *testing.T) { {Expr: `process.name =~ "/usr/sbin/*" && process.uid == 0 && process.is_root`, Field: "process.uid", IsDiscarder: true}, } - ctx := NewContext(event.GetPointer()) + ctx := NewContext(event) for _, test := range tests { model := &testModel{} - replCtx := ReplacementContext{ - Opts: &Opts{Constants: testConstants, Variables: variables}, - MacroStore: &MacroStore{}, - } - rule, err := parseRule(test.Expr, model, replCtx) + opts := newOptsWithParams(testConstants, nil) + opts.WithVariables(variables) + + rule, err := parseRule(test.Expr, model, opts) if err != nil { t.Fatalf("error while evaluating `%s`: %s", test.Expr, err) } @@ -585,27 +573,27 @@ func TestPartial(t *testing.T) { func TestMacroList(t *testing.T) { model := &testModel{} pc := ast.NewParsingContext() - replCtx := newReplCtxWithParams(make(map[string]interface{}), nil) + opts := newOptsWithParams(make(map[string]interface{}), nil) macro, err := NewMacro( "list", `[ "/etc/shadow", "/etc/password" ]`, model, pc, - replCtx, + opts, ) if err != nil { t.Fatal(err) } - replCtx.AddMacro(macro) + opts.MacroStore.Add(macro) expr := `"/etc/shadow" in list` - rule, err := parseRule(expr, model, replCtx) + rule, err := parseRule(expr, model, opts) if err != nil { t.Fatalf("error while evaluating `%s`: %s", expr, err) } - ctx := NewContext(unsafe.Pointer(&testEvent{})) + ctx := NewContext(&testEvent{}) if !rule.Eval(ctx) { t.Fatalf("should return true") @@ -615,19 +603,19 @@ func TestMacroList(t *testing.T) { func TestMacroExpression(t *testing.T) { model := &testModel{} pc := ast.NewParsingContext() - replCtx := newReplCtxWithParams(make(map[string]interface{}), nil) + opts := newOptsWithParams(make(map[string]interface{}), nil) macro, err := NewMacro( "is_passwd", `open.filename in [ "/etc/shadow", "/etc/passwd" ]`, model, pc, - replCtx, + opts, ) if err != nil { t.Fatal(err) } - replCtx.AddMacro(macro) + opts.MacroStore.Add(macro) event := &testEvent{ process: testProcess{ @@ -640,12 +628,12 @@ func TestMacroExpression(t *testing.T) { expr := `process.name == "httpd" && is_passwd` - rule, err := parseRule(expr, model, replCtx) + rule, err := parseRule(expr, model, opts) if err != nil { t.Fatalf("error while evaluating `%s`: %s", expr, err) } - ctx := NewContext(unsafe.Pointer(event)) + ctx := NewContext(event) if !rule.Eval(ctx) { t.Fatalf("should return true") } @@ -654,19 +642,19 @@ func TestMacroExpression(t *testing.T) { func TestMacroPartial(t *testing.T) { model := &testModel{} pc := ast.NewParsingContext() - replCtx := newReplCtxWithParams(make(map[string]interface{}), nil) + opts := newOptsWithParams(make(map[string]interface{}), nil) macro, err := NewMacro( "is_passwd", `open.filename in [ "/etc/shadow", "/etc/passwd" ]`, model, pc, - replCtx, + opts, ) if err != nil { t.Fatal(err) } - replCtx.AddMacro(macro) + opts.MacroStore.Add(macro) event := &testEvent{ process: testProcess{ @@ -679,7 +667,7 @@ func TestMacroPartial(t *testing.T) { expr := `process.name == "httpd" && is_passwd` - rule, err := parseRule(expr, model, replCtx) + rule, err := parseRule(expr, model, opts) if err != nil { t.Fatalf("error while evaluating `%s`: %s", expr, err) } @@ -688,7 +676,7 @@ func TestMacroPartial(t *testing.T) { t.Fatalf("error while generating partials `%s`: %s", expr, err) } - ctx := NewContext(unsafe.Pointer(event)) + ctx := NewContext(event) result, err := rule.PartialEval(ctx, "open.filename") if err != nil { @@ -719,38 +707,38 @@ func TestNestedMacros(t *testing.T) { model := &testModel{} pc := ast.NewParsingContext() - replCtx := newReplCtxWithParams(make(map[string]interface{}), nil) + opts := newOptsWithParams(make(map[string]interface{}), nil) macro1, err := NewMacro( "sensitive_files", `[ "/etc/shadow", "/etc/passwd" ]`, model, pc, - replCtx, + opts, ) if err != nil { t.Fatal(err) } - replCtx.AddMacro(macro1) + opts.MacroStore.Add(macro1) macro2, err := NewMacro( "is_sensitive_opened", `open.filename in sensitive_files`, model, pc, - replCtx, + opts, ) if err != nil { t.Fatal(err) } - replCtx.AddMacro(macro2) + opts.MacroStore.Add(macro2) - rule, err := parseRule(macro2.ID, model, replCtx) + rule, err := parseRule(macro2.ID, model, opts) if err != nil { t.Fatalf("error while evaluating `%s`: %s", macro2.ID, err) } - ctx := NewContext(unsafe.Pointer(event)) + ctx := NewContext(event) if !rule.Eval(ctx) { t.Fatalf("should return true") } @@ -758,15 +746,18 @@ func TestNestedMacros(t *testing.T) { func TestFieldValidator(t *testing.T) { expr := `process.uid == -100 && open.filename == "/etc/passwd"` - replCtx := newReplCtxWithParams(nil, nil) - if _, err := parseRule(expr, &testModel{}, replCtx); err == nil { + + opts := newOptsWithParams(nil, nil) + + if _, err := parseRule(expr, &testModel{}, opts); err == nil { t.Error("expected an error on process.uid being negative") } } func TestLegacyField(t *testing.T) { model := &testModel{} - replCtx := newReplCtxWithParams(testConstants, legacyFields) + + opts := newOptsWithParams(nil, legacyFields) tests := []struct { Expr string @@ -778,7 +769,7 @@ func TestLegacyField(t *testing.T) { } for _, test := range tests { - _, err := parseRule(test.Expr, model, replCtx) + _, err := parseRule(test.Expr, model, opts) if err == nil != test.Expected { t.Errorf("expected result `%t` not found, got `%t`\n%s", test.Expected, err == nil, test.Expr) } @@ -787,7 +778,8 @@ func TestLegacyField(t *testing.T) { func TestRegisterSyntaxError(t *testing.T) { model := &testModel{} - replCtx := newReplCtxWithParams(testConstants, nil) + + opts := newOptsWithParams(nil, nil) tests := []struct { Expr string @@ -803,7 +795,7 @@ func TestRegisterSyntaxError(t *testing.T) { } for _, test := range tests { - _, err := parseRule(test.Expr, model, replCtx) + _, err := parseRule(test.Expr, model, opts) if err == nil != test.Expected { t.Errorf("expected result `%t` not found, got `%t`\n%s", test.Expected, err == nil, test.Expr) } @@ -950,13 +942,14 @@ func TestRegisterPartial(t *testing.T) { //{Expr: `process.list[A].key == 55 && process.list[B].value == "AA"`, Field: "process.list.key", IsDiscarder: true}, } - ctx := NewContext(unsafe.Pointer(event)) + ctx := NewContext(event) for _, test := range tests { model := &testModel{} - replCtx := newReplCtxWithParams(testConstants, nil) - rule, err := parseRule(test.Expr, model, replCtx) + opts := newOptsWithParams(testConstants, nil) + + rule, err := parseRule(test.Expr, model, opts) if err != nil { t.Fatalf("error while evaluating `%s`: %s", test.Expr, err) } @@ -1329,13 +1322,14 @@ func TestOpOverridePartials(t *testing.T) { {Expr: `process.or_array.value not in ["not"] || true`, Field: "process.or_array.value", IsDiscarder: false}, } - ctx := NewContext(unsafe.Pointer(event)) + ctx := NewContext(event) for _, test := range tests { model := &testModel{} - replCtx := newReplCtxWithParams(testConstants, nil) - rule, err := parseRule(test.Expr, model, replCtx) + opts := newOptsWithParams(testConstants, nil) + + rule, err := parseRule(test.Expr, model, opts) if err != nil { t.Fatalf("error while evaluating `%s`: %s", test.Expr, err) } @@ -1370,8 +1364,9 @@ func TestFieldValues(t *testing.T) { for _, test := range tests { model := &testModel{} - replCtx := newReplCtxWithParams(testConstants, nil) - rule, err := parseRule(test.Expr, model, replCtx) + opts := newOptsWithParams(testConstants, nil) + + rule, err := parseRule(test.Expr, model, opts) if err != nil { t.Fatalf("error while evaluating `%s`: %s", test.Expr, err) } @@ -1410,9 +1405,9 @@ func BenchmarkArray(b *testing.B) { } expr := strings.Join(exprs, " && ") + opts := newOptsWithParams(nil, nil) - replCtx := newReplCtxWithParams(nil, nil) - rule, err := parseRule(expr, &testModel{}, replCtx) + rule, err := parseRule(expr, &testModel{}, opts) if err != nil { b.Fatalf("%s\n%s", err, expr) } @@ -1421,7 +1416,7 @@ func BenchmarkArray(b *testing.B) { b.ResetTimer() for i := 0; i < b.N; i++ { - ctx := NewContext(unsafe.Pointer(event)) + ctx := NewContext(event) if evaluator.Eval(ctx) != true { b.Fatal("unexpected result") } @@ -1444,9 +1439,9 @@ func BenchmarkComplex(b *testing.B) { } expr := strings.Join(exprs, " && ") + opts := newOptsWithParams(nil, nil) - replCtx := newReplCtxWithParams(nil, nil) - rule, err := parseRule(expr, &testModel{}, replCtx) + rule, err := parseRule(expr, &testModel{}, opts) if err != nil { b.Fatalf("%s\n%s", err, expr) } @@ -1455,7 +1450,7 @@ func BenchmarkComplex(b *testing.B) { b.ResetTimer() for i := 0; i < b.N; i++ { - ctx := NewContext(unsafe.Pointer(event)) + ctx := NewContext(event) if evaluator.Eval(ctx) != true { b.Fatal("unexpected result") } @@ -1470,7 +1465,7 @@ func BenchmarkPartial(b *testing.B) { }, } - ctx := NewContext(unsafe.Pointer(event)) + ctx := NewContext(event) base := `(process.name == "/usr/bin/ls" && process.uid != 0)` var exprs []string @@ -1480,17 +1475,16 @@ func BenchmarkPartial(b *testing.B) { } expr := strings.Join(exprs, " && ") - model := &testModel{} + opts := newOptsWithParams(nil, nil) - replCtx := newReplCtxWithParams(nil, nil) - rule, err := parseRule(expr, model, replCtx) + rule, err := parseRule(expr, model, opts) if err != nil { b.Fatal(err) } pc := ast.NewParsingContext() - if err := rule.GenEvaluator(model, pc, emptyReplCtx()); err != nil { + if err := rule.GenEvaluator(model, pc); err != nil { b.Fatal(err) } @@ -1526,9 +1520,9 @@ func BenchmarkPool(b *testing.B) { } expr := strings.Join(exprs, " && ") + opts := newOptsWithParams(nil, nil) - replCtx := newReplCtxWithParams(nil, nil) - rule, err := parseRule(expr, &testModel{}, replCtx) + rule, err := parseRule(expr, &testModel{}, opts) if err != nil { b.Fatalf("%s\n%s", err, expr) } @@ -1537,7 +1531,7 @@ func BenchmarkPool(b *testing.B) { b.ResetTimer() for i := 0; i < b.N; i++ { - ctx := pool.Get(unsafe.Pointer(event)) + ctx := pool.Get(event) if evaluator.Eval(ctx) != true { b.Fatal("unexpected result") } diff --git a/pkg/security/secl/compiler/eval/event.go b/pkg/security/secl/compiler/eval/event.go index 8dadb20497ddb9..13b35a6b90c82f 100644 --- a/pkg/security/secl/compiler/eval/event.go +++ b/pkg/security/secl/compiler/eval/event.go @@ -7,7 +7,6 @@ package eval import ( "reflect" - "unsafe" ) // EventType is the type of an event @@ -27,8 +26,6 @@ type Event interface { GetFieldValue(field Field) (interface{}, error) // GetFieldType returns the Type of the Field GetFieldType(field Field) (reflect.Kind, error) - // GetPointer returns an unsafe.Pointer of this object - GetPointer() unsafe.Pointer // GetTags returns a list of tags GetTags() []string } diff --git a/pkg/security/secl/compiler/eval/macro.go b/pkg/security/secl/compiler/eval/macro.go index 3afda7850fa674..10865439a3c6fb 100644 --- a/pkg/security/secl/compiler/eval/macro.go +++ b/pkg/security/secl/compiler/eval/macro.go @@ -16,8 +16,8 @@ type MacroID = string // Macro - Macro object identified by an `ID` containing a SECL `Expression` type Macro struct { - ID MacroID - Store *MacroStore + ID MacroID + Opts *Opts evaluator *MacroEvaluator ast *ast.Macro @@ -31,17 +31,17 @@ type MacroEvaluator struct { } // NewMacro parses an expression and returns a new macro -func NewMacro(id, expression string, model Model, parsingContext *ast.ParsingContext, replCtx ReplacementContext) (*Macro, error) { +func NewMacro(id, expression string, model Model, parsingContext *ast.ParsingContext, opts *Opts) (*Macro, error) { macro := &Macro{ - ID: id, - Store: replCtx.MacroStore, + ID: id, + Opts: opts, } if err := macro.Parse(parsingContext, expression); err != nil { return nil, fmt.Errorf("syntax error: %w", err) } - if err := macro.GenEvaluator(expression, model, replCtx); err != nil { + if err := macro.GenEvaluator(expression, model); err != nil { return nil, fmt.Errorf("compilation error: %w", err) } @@ -49,7 +49,7 @@ func NewMacro(id, expression string, model Model, parsingContext *ast.ParsingCon } // NewStringValuesMacro returns a new macro from an array of strings -func NewStringValuesMacro(id string, values []string, macroStore *MacroStore) (*Macro, error) { +func NewStringValuesMacro(id string, values []string, opts *Opts) (*Macro, error) { var evaluator StringValuesEvaluator for _, value := range values { fieldValue := FieldValue{ @@ -66,7 +66,7 @@ func NewStringValuesMacro(id string, values []string, macroStore *MacroStore) (* return &Macro{ ID: id, - Store: macroStore, + Opts: opts, evaluator: &MacroEvaluator{Value: &evaluator}, }, nil } @@ -91,23 +91,23 @@ func (m *Macro) Parse(parsingContext *ast.ParsingContext, expression string) err return nil } -func macroToEvaluator(macro *ast.Macro, model Model, replCtx ReplacementContext, field Field) (*MacroEvaluator, error) { +func macroToEvaluator(macro *ast.Macro, model Model, opts *Opts, field Field) (*MacroEvaluator, error) { macros := make(map[MacroID]*MacroEvaluator) - for id, macro := range replCtx.Macros { - macros[id] = macro.evaluator + for _, macro := range opts.MacroStore.List() { + macros[macro.ID] = macro.evaluator } - state := NewState(model, field, macros, replCtx) + state := NewState(model, field, macros) var eval interface{} var err error switch { case macro.Expression != nil: - eval, _, err = nodeToEvaluator(macro.Expression, state) + eval, _, err = nodeToEvaluator(macro.Expression, opts, state) case macro.Array != nil: - eval, _, err = nodeToEvaluator(macro.Array, state) + eval, _, err = nodeToEvaluator(macro.Array, opts, state) case macro.Primary != nil: - eval, _, err = nodeToEvaluator(macro.Primary, state) + eval, _, err = nodeToEvaluator(macro.Primary, opts, state) } if err != nil { @@ -127,10 +127,8 @@ func macroToEvaluator(macro *ast.Macro, model Model, replCtx ReplacementContext, } // GenEvaluator - Compiles and generates the evalutor -func (m *Macro) GenEvaluator(expression string, model Model, replCtx ReplacementContext) error { - m.Store = replCtx.MacroStore - - evaluator, err := macroToEvaluator(m.ast, model, replCtx, "") +func (m *Macro) GenEvaluator(expression string, model Model) error { + evaluator, err := macroToEvaluator(m.ast, model, m.Opts, "") if err != nil { if err, ok := err.(*ErrAstToEval); ok { return fmt.Errorf("macro syntax error: %w", &ErrRuleParse{pos: err.Pos, expr: expression}) @@ -146,7 +144,7 @@ func (m *Macro) GenEvaluator(expression string, model Model, replCtx Replacement func (m *Macro) GetEventTypes() []EventType { eventTypes := m.evaluator.EventTypes - for _, macro := range m.Store.Macros { + for _, macro := range m.Opts.MacroStore.List() { eventTypes = append(eventTypes, macro.evaluator.EventTypes...) } @@ -157,7 +155,7 @@ func (m *Macro) GetEventTypes() []EventType { func (m *Macro) GetFields() []Field { fields := m.evaluator.GetFields() - for _, macro := range m.Store.Macros { + for _, macro := range m.Opts.MacroStore.List() { fields = append(fields, macro.evaluator.GetFields()...) } diff --git a/pkg/security/secl/compiler/eval/model_test.go b/pkg/security/secl/compiler/eval/model_test.go index cd16fb809640a0..e18e66b52c7b18 100644 --- a/pkg/security/secl/compiler/eval/model_test.go +++ b/pkg/security/secl/compiler/eval/model_test.go @@ -47,7 +47,7 @@ type testItemListIterator struct { } func (t *testItemListIterator) Front(ctx *Context) unsafe.Pointer { - if front := (*testEvent)(ctx.Object).process.list.Front(); front != nil { + if front := ctx.Event.(*testEvent).process.list.Front(); front != nil { t.prev = front return unsafe.Pointer(front) } @@ -63,14 +63,14 @@ func (t *testItemListIterator) Next() unsafe.Pointer { } type testItemArrayIterator struct { - ctx *Context + event *testEvent index int } func (t *testItemArrayIterator) Front(ctx *Context) unsafe.Pointer { - t.ctx = ctx + t.event = ctx.Event.(*testEvent) - array := (*testEvent)(ctx.Object).process.array + array := ctx.Event.(*testEvent).process.array if t.index < len(array) { t.index++ return unsafe.Pointer(array[0]) @@ -79,7 +79,7 @@ func (t *testItemArrayIterator) Front(ctx *Context) unsafe.Pointer { } func (t *testItemArrayIterator) Next() unsafe.Pointer { - array := (*testEvent)(t.ctx.Object).process.array + array := t.event.process.array if t.index < len(array) { value := array[t.index] t.index++ @@ -133,10 +133,6 @@ func (e *testEvent) GetTags() []string { return []string{} } -func (e *testEvent) GetPointer() unsafe.Pointer { - return unsafe.Pointer(e) -} - func (m *testModel) NewEvent() Event { return &testEvent{} } @@ -175,7 +171,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &CIDREvaluator{ EvalFnc: func(ctx *Context) net.IPNet { - return (*testEvent)(ctx.Object).network.ip + return ctx.Event.(*testEvent).network.ip }, Field: field, }, nil @@ -184,7 +180,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &CIDREvaluator{ EvalFnc: func(ctx *Context) net.IPNet { - return (*testEvent)(ctx.Object).network.cidr + return ctx.Event.(*testEvent).network.cidr }, Field: field, }, nil @@ -194,7 +190,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &CIDRArrayEvaluator{ EvalFnc: func(ctx *Context) []net.IPNet { var ipnets []net.IPNet - for _, ip := range (*testEvent)(ctx.Object).network.ips { + for _, ip := range ctx.Event.(*testEvent).network.ips { ipnets = append(ipnets, ip) } return ipnets @@ -205,7 +201,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &CIDRArrayEvaluator{ EvalFnc: func(ctx *Context) []net.IPNet { - return (*testEvent)(ctx.Object).network.cidrs + return ctx.Event.(*testEvent).network.cidrs }, Field: field, }, nil @@ -213,7 +209,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro case "process.name": return &StringEvaluator{ - EvalFnc: func(ctx *Context) string { return (*testEvent)(ctx.Object).process.name }, + EvalFnc: func(ctx *Context) string { return ctx.Event.(*testEvent).process.name }, Field: field, OpOverrides: GlobCmp, }, nil @@ -221,7 +217,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro case "process.argv0": return &StringEvaluator{ - EvalFnc: func(ctx *Context) string { return (*testEvent)(ctx.Object).process.argv0 }, + EvalFnc: func(ctx *Context) string { return ctx.Event.(*testEvent).process.argv0 }, Field: field, }, nil @@ -230,9 +226,9 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &IntEvaluator{ EvalFnc: func(ctx *Context) int { // to test optimisation - (*testEvent)(ctx.Object).uidEvaluated = true + ctx.Event.(*testEvent).uidEvaluated = true - return (*testEvent)(ctx.Object).process.uid + return ctx.Event.(*testEvent).process.uid }, Field: field, }, nil @@ -242,9 +238,9 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &IntEvaluator{ EvalFnc: func(ctx *Context) int { // to test optimisation - (*testEvent)(ctx.Object).gidEvaluated = true + ctx.Event.(*testEvent).gidEvaluated = true - return (*testEvent)(ctx.Object).process.gid + return ctx.Event.(*testEvent).process.gid }, Field: field, }, nil @@ -254,9 +250,9 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &IntEvaluator{ EvalFnc: func(ctx *Context) int { // to test optimisation - (*testEvent)(ctx.Object).uidEvaluated = true + ctx.Event.(*testEvent).uidEvaluated = true - return (*testEvent)(ctx.Object).process.pid + return ctx.Event.(*testEvent).process.pid }, Field: field, }, nil @@ -264,7 +260,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro case "process.is_root": return &BoolEvaluator{ - EvalFnc: func(ctx *Context) bool { return (*testEvent)(ctx.Object).process.isRoot }, + EvalFnc: func(ctx *Context) bool { return ctx.Event.(*testEvent).process.isRoot }, Field: field, }, nil @@ -273,11 +269,11 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &IntArrayEvaluator{ EvalFnc: func(ctx *Context) []int { // to test optimisation - (*testEvent)(ctx.Object).listEvaluated = true + ctx.Event.(*testEvent).listEvaluated = true var result []int - el := (*testEvent)(ctx.Object).process.list.Front() + el := ctx.Event.(*testEvent).process.list.Front() for el != nil { result = append(result, el.Value.(*testItem).key) el = el.Next() @@ -294,11 +290,11 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &StringArrayEvaluator{ EvalFnc: func(ctx *Context) []string { // to test optimisation - (*testEvent)(ctx.Object).listEvaluated = true + ctx.Event.(*testEvent).listEvaluated = true var values []string - el := (*testEvent)(ctx.Object).process.list.Front() + el := ctx.Event.(*testEvent).process.list.Front() for el != nil { values = append(values, el.Value.(*testItem).value) el = el.Next() @@ -315,11 +311,11 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &BoolArrayEvaluator{ EvalFnc: func(ctx *Context) []bool { // to test optimisation - (*testEvent)(ctx.Object).listEvaluated = true + ctx.Event.(*testEvent).listEvaluated = true var result []bool - el := (*testEvent)(ctx.Object).process.list.Front() + el := ctx.Event.(*testEvent).process.list.Front() for el != nil { result = append(result, el.Value.(*testItem).flag) el = el.Next() @@ -337,7 +333,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro EvalFnc: func(ctx *Context) []int { var result []int - for _, el := range (*testEvent)(ctx.Object).process.array { + for _, el := range ctx.Event.(*testEvent).process.array { result = append(result, el.key) } @@ -353,7 +349,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro EvalFnc: func(ctx *Context) []string { var values []string - for _, el := range (*testEvent)(ctx.Object).process.array { + for _, el := range ctx.Event.(*testEvent).process.array { values = append(values, el.value) } @@ -369,7 +365,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro EvalFnc: func(ctx *Context) []bool { var result []bool - for _, el := range (*testEvent)(ctx.Object).process.array { + for _, el := range ctx.Event.(*testEvent).process.array { result = append(result, el.flag) } @@ -383,7 +379,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &IntEvaluator{ EvalFnc: func(ctx *Context) int { - return int((*testEvent)(ctx.Object).process.createdAt) + return int(ctx.Event.(*testEvent).process.createdAt) }, Field: field, }, nil @@ -392,14 +388,14 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &StringEvaluator{ EvalFnc: func(ctx *Context) string { - return (*testEvent)(ctx.Object).process.orName + return ctx.Event.(*testEvent).process.orName }, Field: field, OpOverrides: &OpOverrides{ StringValuesContains: func(a *StringEvaluator, b *StringValuesEvaluator, state *State) (*BoolEvaluator, error) { evaluator := StringValuesEvaluator{ EvalFnc: func(ctx *Context) *StringValues { - return (*testEvent)(ctx.Object).process.orNameValues() + return ctx.Event.(*testEvent).process.orNameValues() }, } @@ -408,7 +404,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro StringEquals: func(a *StringEvaluator, b *StringEvaluator, state *State) (*BoolEvaluator, error) { evaluator := StringValuesEvaluator{ EvalFnc: func(ctx *Context) *StringValues { - return (*testEvent)(ctx.Object).process.orNameValues() + return ctx.Event.(*testEvent).process.orNameValues() }, } @@ -423,7 +419,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro EvalFnc: func(ctx *Context) []string { var values []string - for _, el := range (*testEvent)(ctx.Object).process.orArray { + for _, el := range ctx.Event.(*testEvent).process.orArray { values = append(values, el.value) } @@ -434,7 +430,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro StringArrayContains: func(a *StringEvaluator, b *StringArrayEvaluator, state *State) (*BoolEvaluator, error) { evaluator := StringValuesEvaluator{ EvalFnc: func(ctx *Context) *StringValues { - return (*testEvent)(ctx.Object).process.orArrayValues() + return ctx.Event.(*testEvent).process.orArrayValues() }, } @@ -443,7 +439,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro StringArrayMatches: func(a *StringArrayEvaluator, b *StringValuesEvaluator, state *State) (*BoolEvaluator, error) { evaluator := StringValuesEvaluator{ EvalFnc: func(ctx *Context) *StringValues { - return (*testEvent)(ctx.Object).process.orArrayValues() + return ctx.Event.(*testEvent).process.orArrayValues() }, } @@ -455,35 +451,35 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro case "open.filename": return &StringEvaluator{ - EvalFnc: func(ctx *Context) string { return (*testEvent)(ctx.Object).open.filename }, + EvalFnc: func(ctx *Context) string { return ctx.Event.(*testEvent).open.filename }, Field: field, }, nil case "open.flags": return &IntEvaluator{ - EvalFnc: func(ctx *Context) int { return (*testEvent)(ctx.Object).open.flags }, + EvalFnc: func(ctx *Context) int { return ctx.Event.(*testEvent).open.flags }, Field: field, }, nil case "open.mode": return &IntEvaluator{ - EvalFnc: func(ctx *Context) int { return (*testEvent)(ctx.Object).open.mode }, + EvalFnc: func(ctx *Context) int { return ctx.Event.(*testEvent).open.mode }, Field: field, }, nil case "mkdir.filename": return &StringEvaluator{ - EvalFnc: func(ctx *Context) string { return (*testEvent)(ctx.Object).mkdir.filename }, + EvalFnc: func(ctx *Context) string { return ctx.Event.(*testEvent).mkdir.filename }, Field: field, }, nil case "mkdir.mode": return &IntEvaluator{ - EvalFnc: func(ctx *Context) int { return (*testEvent)(ctx.Object).mkdir.mode }, + EvalFnc: func(ctx *Context) int { return ctx.Event.(*testEvent).mkdir.mode }, Field: field, }, nil } diff --git a/pkg/security/secl/compiler/eval/oo_dns_name_test.go b/pkg/security/secl/compiler/eval/oo_dns_name_test.go index ae771c2e88585d..60b0b92759b7ec 100644 --- a/pkg/security/secl/compiler/eval/oo_dns_name_test.go +++ b/pkg/security/secl/compiler/eval/oo_dns_name_test.go @@ -26,7 +26,7 @@ func TestLowerCaseEquals(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := DNSNameCmp.StringEquals(a, b, state) assert.Empty(t, err) @@ -51,7 +51,7 @@ func TestLowerCaseEquals(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := DNSNameCmp.StringEquals(a, b, state) assert.Empty(t, err) @@ -76,7 +76,7 @@ func TestLowerCaseEquals(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := DNSNameCmp.StringEquals(a, b, state) assert.Empty(t, err) @@ -101,7 +101,7 @@ func TestLowerCaseEquals(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := DNSNameCmp.StringEquals(a, b, state) assert.Empty(t, err) @@ -131,7 +131,7 @@ func TestLowerCaseContains(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := DNSNameCmp.StringValuesContains(a, b, state) assert.Empty(t, err) @@ -155,7 +155,7 @@ func TestLowerCaseContains(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := DNSNameCmp.StringValuesContains(a, b, state) assert.Empty(t, err) @@ -179,7 +179,7 @@ func TestLowerCaseContains(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := DNSNameCmp.StringValuesContains(a, b, state) assert.Empty(t, err) @@ -203,7 +203,7 @@ func TestLowerCaseContains(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := DNSNameCmp.StringValuesContains(a, b, state) assert.Empty(t, err) @@ -248,7 +248,7 @@ func TestLowerCaseContains(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := DNSNameCmp.StringValuesContains(a, b, state) assert.Empty(t, err) @@ -270,7 +270,7 @@ func TestLowerCaseArrayContains(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := DNSNameCmp.StringArrayContains(a, b, state) assert.Empty(t, err) @@ -290,7 +290,7 @@ func TestLowerCaseArrayContains(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := DNSNameCmp.StringArrayContains(a, b, state) assert.Empty(t, err) @@ -312,17 +312,10 @@ func TestLowerCaseArrayContains(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := DNSNameCmp.StringArrayContains(a, b, state) assert.Empty(t, err) assert.True(t, e.Eval(&ctx).(bool)) }) } - -func nilReplCtx() ReplacementContext { - return ReplacementContext{ - Opts: nil, - MacroStore: nil, - } -} diff --git a/pkg/security/secl/compiler/eval/oo_glob_cmp_test.go b/pkg/security/secl/compiler/eval/oo_glob_cmp_test.go index 0176d5607db29d..c2c83f4bac5e72 100644 --- a/pkg/security/secl/compiler/eval/oo_glob_cmp_test.go +++ b/pkg/security/secl/compiler/eval/oo_glob_cmp_test.go @@ -26,7 +26,7 @@ func TestOPOverrideGlobEquals(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := GlobCmp.StringEquals(a, b, state) assert.Empty(t, err) @@ -51,7 +51,7 @@ func TestOPOverrideGlobEquals(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := GlobCmp.StringEquals(a, b, state) assert.Empty(t, err) @@ -82,7 +82,7 @@ func TestOPOverrideGlobContains(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := GlobCmp.StringValuesContains(a, b, state) assert.Empty(t, err) @@ -106,7 +106,7 @@ func TestOPOverrideGlobContains(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := GlobCmp.StringValuesContains(a, b, state) assert.Empty(t, err) @@ -128,7 +128,7 @@ func TestOPOverrideGlobArrayMatches(t *testing.T) { b := &StringValuesEvaluator{ Values: values, } - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := GlobCmp.StringArrayMatches(a, b, state) assert.Empty(t, err) @@ -147,7 +147,7 @@ func TestOPOverrideGlobArrayMatches(t *testing.T) { b := &StringValuesEvaluator{ Values: values, } - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := GlobCmp.StringArrayMatches(a, b, state) assert.Empty(t, err) @@ -165,7 +165,7 @@ func TestOPOverrideGlobArrayContains(t *testing.T) { b := &StringArrayEvaluator{ Values: []string{"/2/abc/3"}, } - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := GlobCmp.StringArrayContains(a, b, state) assert.Empty(t, err) @@ -182,7 +182,7 @@ func TestOPOverrideGlobArrayContains(t *testing.T) { Field: "dont_forget_me_or_it_wont_compile_a", Values: []string{"/2/abc/3"}, } - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := GlobCmp.StringArrayContains(a, b, state) assert.Empty(t, err) diff --git a/pkg/security/secl/compiler/eval/opts.go b/pkg/security/secl/compiler/eval/opts.go index 1556b148e8dc5d..9d26fba2494e99 100644 --- a/pkg/security/secl/compiler/eval/opts.go +++ b/pkg/security/secl/compiler/eval/opts.go @@ -10,14 +10,8 @@ type MacroStore struct { Macros map[MacroID]*Macro } -// WithMacros set macros fields -func (s *MacroStore) WithMacros(macros map[MacroID]*Macro) *MacroStore { - s.Macros = macros - return s -} - // AddMacro add a macro -func (s *MacroStore) AddMacro(macro *Macro) *MacroStore { +func (s *MacroStore) Add(macro *Macro) *MacroStore { if s.Macros == nil { s.Macros = make(map[string]*Macro) } @@ -25,11 +19,55 @@ func (s *MacroStore) AddMacro(macro *Macro) *MacroStore { return s } +func (s *MacroStore) List() []*Macro { + var macros []*Macro + + if s == nil || s.Macros == nil { + return macros + } + + for _, macro := range s.Macros { + macros = append(macros, macro) + } + return macros +} + +// Get returns the marcro +func (s *MacroStore) Get(id string) *Macro { + if s == nil || s.Macros == nil { + return nil + } + return s.Macros[id] +} + +// VariableStore represents a store of SECL variables +type VariableStore struct { + Variables map[string]VariableValue +} + +// AddVariable add a variable +func (s *VariableStore) Add(name string, variable VariableValue) *VariableStore { + if s.Variables == nil { + s.Variables = make(map[string]VariableValue) + } + s.Variables[name] = variable + return s +} + +// Get returns the variable +func (s *VariableStore) Get(name string) VariableValue { + if s == nil || s.Variables == nil { + return nil + } + return s.Variables[name] +} + // Opts are the options to be passed to the evaluator type Opts struct { - LegacyFields map[Field]Field - Constants map[string]interface{} - Variables map[string]VariableValue + LegacyFields map[Field]Field + Constants map[string]interface{} + VariableStore *VariableStore + MacroStore *MacroStore } // WithConstants set constants @@ -40,12 +78,19 @@ func (o *Opts) WithConstants(constants map[string]interface{}) *Opts { // WithVariables set variables func (o *Opts) WithVariables(variables map[string]VariableValue) *Opts { - optsVariables := make(map[string]VariableValue, len(variables)) - for name, value := range variables { - optsVariables[name] = value + if o.VariableStore == nil { + o.VariableStore = &VariableStore{} } - o.Variables = optsVariables + for n, v := range variables { + o.VariableStore.Add(n, v) + } + return o +} + +// WithVariableStore set the variable store +func (o *Opts) WithVariableStore(store *VariableStore) *Opts { + o.VariableStore = store return o } @@ -54,3 +99,27 @@ func (o *Opts) WithLegacyFields(fields map[Field]Field) *Opts { o.LegacyFields = fields return o } + +// WithMacroStore set the macro store +func (o *Opts) WithMacroStore(store *MacroStore) *Opts { + o.MacroStore = store + return o +} + +// AddMacro add a macro +func (o *Opts) AddMacro(macro *Macro) *Opts { + if o.MacroStore == nil { + o.MacroStore = &MacroStore{} + } + o.MacroStore.Add(macro) + return o +} + +// AddVariable add a variable +func (o *Opts) AddVariable(name string, variable VariableValue) *Opts { + if o.VariableStore == nil { + o.VariableStore = &VariableStore{} + } + o.VariableStore.Add(name, variable) + return o +} diff --git a/pkg/security/secl/compiler/eval/rule.go b/pkg/security/secl/compiler/eval/rule.go index c82ec7f7c799a1..e08d0c5a4ed531 100644 --- a/pkg/security/secl/compiler/eval/rule.go +++ b/pkg/security/secl/compiler/eval/rule.go @@ -17,11 +17,11 @@ type RuleID = string // Rule - Rule object identified by an `ID` containing a SECL `Expression` type Rule struct { - ID RuleID - Expression string - Tags []string - ReplacementCtx ReplacementContext - Model Model + ID RuleID + Expression string + Tags []string + Model Model + Opts *Opts evaluator *RuleEvaluator ast *ast.Rule @@ -36,6 +36,23 @@ type RuleEvaluator struct { partialEvals map[Field]BoolEvalFnc } +// Rule returns a new rule +func NewRule(id string, expression string, opts *Opts, tags ...string) *Rule { + if opts.MacroStore == nil { + opts.WithMacroStore(&MacroStore{}) + } + if opts.VariableStore == nil { + opts.WithVariableStore(&VariableStore{}) + } + + return &Rule{ + ID: id, + Expression: expression, + Opts: opts, + Tags: tags, + } +} + // PartialEval partially evaluation of the Rule with the given Field. func (r *RuleEvaluator) PartialEval(ctx *Context, field Field) (bool, error) { eval, ok := r.partialEvals[field] @@ -88,7 +105,7 @@ func (r *Rule) GetPartialEval(field Field) BoolEvalFnc { func (r *Rule) GetFields() []Field { fields := r.evaluator.GetFields() - for _, macro := range r.ReplacementCtx.Macros { + for _, macro := range r.Opts.MacroStore.List() { fields = append(fields, macro.GetFields()...) } @@ -108,7 +125,7 @@ func (r *Rule) GetEventTypes() ([]EventType, error) { eventTypes := r.evaluator.EventTypes - for _, macro := range r.ReplacementCtx.Macros { + for _, macro := range r.Opts.MacroStore.List() { eventTypes = append(eventTypes, macro.GetEventTypes()...) } @@ -131,14 +148,14 @@ func (r *Rule) Parse(parsingContext *ast.ParsingContext) error { } // NewRuleEvaluator returns a new evaluator for a rule -func NewRuleEvaluator(rule *ast.Rule, model Model, replCtx ReplacementContext) (*RuleEvaluator, error) { +func NewRuleEvaluator(rule *ast.Rule, model Model, opts *Opts) (*RuleEvaluator, error) { macros := make(map[MacroID]*MacroEvaluator) - for id, macro := range replCtx.Macros { - macros[id] = macro.evaluator + for _, macro := range opts.MacroStore.List() { + macros[macro.ID] = macro.evaluator } - state := NewState(model, "", macros, replCtx) + state := NewState(model, "", macros) - eval, _, err := nodeToEvaluator(rule.BooleanExpression, state) + eval, _, err := nodeToEvaluator(rule.BooleanExpression, opts, state) if err != nil { return nil, err } @@ -168,9 +185,8 @@ func NewRuleEvaluator(rule *ast.Rule, model Model, replCtx ReplacementContext) ( } // GenEvaluator - Compile and generates the RuleEvaluator -func (r *Rule) GenEvaluator(model Model, parsingCtx *ast.ParsingContext, replCtx ReplacementContext) error { +func (r *Rule) GenEvaluator(model Model, parsingCtx *ast.ParsingContext) error { r.Model = model - r.ReplacementCtx = replCtx if r.ast == nil { if err := r.Parse(parsingCtx); err != nil { @@ -178,7 +194,7 @@ func (r *Rule) GenEvaluator(model Model, parsingCtx *ast.ParsingContext, replCtx } } - evaluator, err := NewRuleEvaluator(r.ast, model, replCtx) + evaluator, err := NewRuleEvaluator(r.ast, model, r.Opts) if err != nil { if err, ok := err.(*ErrAstToEval); ok { return fmt.Errorf("rule syntax error: %s: %w", err, &ErrRuleParse{pos: err.Pos, expr: r.Expression}) @@ -193,13 +209,13 @@ func (r *Rule) GenEvaluator(model Model, parsingCtx *ast.ParsingContext, replCtx func (r *Rule) genMacroPartials() (map[Field]map[MacroID]*MacroEvaluator, error) { partials := make(map[Field]map[MacroID]*MacroEvaluator) for _, field := range r.GetFields() { - for id, macro := range r.ReplacementCtx.Macros { + for _, macro := range r.Opts.MacroStore.List() { var err error var evaluator *MacroEvaluator if macro.ast != nil { // NOTE(safchain) this is not working with nested macro. It will be removed once partial // will be generated another way - evaluator, err = macroToEvaluator(macro.ast, r.Model, r.ReplacementCtx, field) + evaluator, err = macroToEvaluator(macro.ast, r.Model, r.Opts, field) if err != nil { if err, ok := err.(*ErrAstToEval); ok { return nil, fmt.Errorf("macro syntax error: %w", &ErrRuleParse{pos: err.Pos}) @@ -215,7 +231,7 @@ func (r *Rule) genMacroPartials() (map[Field]map[MacroID]*MacroEvaluator, error) macroEvaluators = make(map[MacroID]*MacroEvaluator) partials[field] = macroEvaluators } - macroEvaluators[id] = evaluator + macroEvaluators[macro.ID] = evaluator } } @@ -230,8 +246,8 @@ func (r *Rule) GenPartials() error { } for _, field := range r.GetFields() { - state := NewState(r.Model, field, macroPartials[field], r.ReplacementCtx) - pEval, _, err := nodeToEvaluator(r.ast.BooleanExpression, state) + state := NewState(r.Model, field, macroPartials[field]) + pEval, _, err := nodeToEvaluator(r.ast.BooleanExpression, r.Opts, state) if err != nil { return fmt.Errorf("couldn't generate partial for field %s and rule %s: %w", field, r.ID, err) } diff --git a/pkg/security/secl/compiler/eval/state.go b/pkg/security/secl/compiler/eval/state.go index 40359e59af2198..50afe9b430f96e 100644 --- a/pkg/security/secl/compiler/eval/state.go +++ b/pkg/security/secl/compiler/eval/state.go @@ -28,7 +28,6 @@ type State struct { macros map[MacroID]*MacroEvaluator registersInfo map[RegisterID]*registerInfo regexpCache StateRegexpCache - replCtx ReplacementContext } // UpdateFields updates the fields used in the rule @@ -60,7 +59,7 @@ func (s *State) UpdateFieldValues(field Field, value FieldValue) error { } // NewState returns a new State -func NewState(model Model, field Field, macros map[MacroID]*MacroEvaluator, replCtx ReplacementContext) *State { +func NewState(model Model, field Field, macros map[MacroID]*MacroEvaluator) *State { if macros == nil { macros = make(map[MacroID]*MacroEvaluator) } @@ -71,6 +70,5 @@ func NewState(model Model, field Field, macros map[MacroID]*MacroEvaluator, repl events: make(map[EventType]bool), fieldValues: make(map[Field][]FieldValue), registersInfo: make(map[RegisterID]*registerInfo), - replCtx: replCtx, } } diff --git a/pkg/security/secl/compiler/generators/accessors/accessors.go b/pkg/security/secl/compiler/generators/accessors/accessors.go index 031cb60875d581..af24901651a6e5 100644 --- a/pkg/security/secl/compiler/generators/accessors/accessors.go +++ b/pkg/security/secl/compiler/generators/accessors/accessors.go @@ -38,14 +38,13 @@ const ( ) var ( - filename string - pkgname string - output string - verbose bool - mock bool - docOutput string - fieldsResolverOutput string - buildTags string + filename string + pkgname string + output string + verbose bool + docOutput string + fieldHandlersOutput string + buildTags string ) var ( @@ -80,7 +79,7 @@ func qualifiedType(module *common.Module, kind string) string { // handleBasic adds fields of "basic" type to list of exposed SECL fields of the module func handleBasic(module *common.Module, name, alias, kind, event string, iterator *common.StructField, isArray bool, opOverrides string, constants string, commentText string) *common.StructField { if verbose { - fmt.Printf("handleBasic name: %s, kind: %s, alias: %s\n", name, kind, alias) + fmt.Printf("handleBasic name: %s, kind: %s, alias: %s, isArray: %v\n", name, kind, alias, isArray) } basicType := origTypeToBasicType(kind) @@ -398,7 +397,7 @@ func handleSpec(module *common.Module, astFile *ast.File, spec interface{}, pref dejavu[fieldBasename] = true if len(fieldType) != 0 { - if err := handleField(module, astFile, fieldBasename, fieldBasenameSECLNormalized, prefix, aliasPrefix, pkgname, fieldType, event, fieldIterator, dejavu, false, opOverrides, constants, fieldCommentText, seclField); err != nil { + if err := handleField(module, astFile, fieldBasename, fieldBasenameSECLNormalized, prefix, aliasPrefix, pkgname, fieldType, event, fieldIterator, dejavu, isArray, opOverrides, constants, fieldCommentText, seclField); err != nil { log.Print(err) } @@ -507,7 +506,6 @@ func parseFile(filename string, pkgName string) (*common.Module, error) { AllFields: make(map[string]*common.StructField), Iterators: make(map[string]*common.StructField), EventTypes: make(map[string]*common.EventTypeMetadata), - Mock: mock, } // If the target package is different from the model package @@ -554,7 +552,7 @@ func newField(allFields map[string]*common.StructField, field *common.StructFiel if field, ok := allFields[path]; ok { if field.IsOrigTypePtr { - result += fmt.Sprintf("if e.%s == nil { e.%s = &%s{} }\n", field.Name, field.Name, field.OrigType) + result += fmt.Sprintf("if ev.%s == nil { ev.%s = &%s{} }\n", field.Name, field.Name, field.OrigType) } } } @@ -562,13 +560,13 @@ func newField(allFields map[string]*common.StructField, field *common.StructFiel return result } -func getFieldResolver(allFields map[string]*common.StructField, field *common.StructField) string { +func getFieldHandler(allFields map[string]*common.StructField, field *common.StructField) string { if field.Handler == "" || field.Iterator != nil || field.CachelessResolution { return "" } if field.Prefix == "" { - return fmt.Sprintf("ev.%s(ev)", field.Handler) + return fmt.Sprintf("ev.FieldHandlers.%s(ev)", field.Handler) } ptr := "&" @@ -576,21 +574,14 @@ func getFieldResolver(allFields map[string]*common.StructField, field *common.St ptr = "" } - return fmt.Sprintf("ev.%s(%sev.%s)", field.Handler, ptr, field.Prefix) + return fmt.Sprintf("ev.FieldHandlers.%s(ev, %sev.%s)", field.Handler, ptr, field.Prefix) } -func fieldADPrint(field *common.StructField, resolver string) string { +func fieldADPrint(field *common.StructField, handler string) string { if field.SkipADResolution { - return fmt.Sprintf("if !forADs { _ = %s }", resolver) + return fmt.Sprintf("if !forADs { _ = %s }", handler) } - return fmt.Sprintf("_ = %s", resolver) -} - -func override(str string, mock bool) string { - if !strings.Contains(str, ".") && !mock { - return "model." + str - } - return str + return fmt.Sprintf("_ = %s", handler) } func getHolder(allFields map[string]*common.StructField, field *common.StructField) *common.StructField { @@ -629,22 +620,55 @@ func getChecks(allFields map[string]*common.StructField, field *common.StructFie return checks } +func getHandlers(allFields map[string]*common.StructField) map[string]string { + handlers := make(map[string]string) + + for _, field := range allFields { + if field.Handler != "" && !field.IsLength { + returnType := field.ReturnType + if field.IsArray { + returnType = "[]" + returnType + } + + handler := fmt.Sprintf("%s(ev *Event, e *%s) %s", field.Handler, field.Struct, returnType) + + if _, exists := handlers[handler]; exists { + continue + } + + name := "e" + strings.TrimPrefix(field.Name, field.Prefix) + + if field.ReturnType == "int" { + if field.IsArray { + handlers[handler] = fmt.Sprintf("{ var result []int; for _, value := range %s { result = append(result, int(value)) }; return result }", name) + } else { + handlers[handler] = fmt.Sprintf("{ return int(%s) }", name) + } + } else { + handlers[handler] = fmt.Sprintf("{ return %s }", name) + } + } + } + + return handlers +} + var funcMap = map[string]interface{}{ - "TrimPrefix": strings.TrimPrefix, - "TrimSuffix": strings.TrimSuffix, - "HasPrefix": strings.HasPrefix, - "NewField": newField, - "Override": override, - "GetFieldResolver": getFieldResolver, - "FieldADPrint": fieldADPrint, - "GetChecks": getChecks, + "TrimPrefix": strings.TrimPrefix, + "TrimSuffix": strings.TrimSuffix, + "HasPrefix": strings.HasPrefix, + "NewField": newField, + "GetFieldHandler": getFieldHandler, + "FieldADPrint": fieldADPrint, + "GetChecks": getChecks, + "GetHandlers": getHandlers, } //go:embed accessors.tmpl var accessorsTemplateCode string -//go:embed fields_resolver.tmpl -var fieldsResolverTemplate string +//go:embed field_handlers.tmpl +var fieldHandlersTemplate string func main() { module, err := parseFile(filename, pkgname) @@ -652,8 +676,8 @@ func main() { panic(err) } - if len(fieldsResolverOutput) > 0 { - if err = GenerateContent(fieldsResolverOutput, module, fieldsResolverTemplate); err != nil { + if len(fieldHandlersOutput) > 0 { + if err = GenerateContent(fieldHandlersOutput, module, fieldHandlersTemplate); err != nil { panic(err) } } @@ -719,9 +743,8 @@ func removeEmptyLines(input *bytes.Buffer) string { func init() { flag.BoolVar(&verbose, "verbose", false, "Be verbose") - flag.BoolVar(&mock, "mock", false, "Mock accessors") flag.StringVar(&docOutput, "doc", "", "Generate documentation JSON") - flag.StringVar(&fieldsResolverOutput, "fields-resolver", "", "Fields resolver output file") + flag.StringVar(&fieldHandlersOutput, "field-handlers", "", "Field handlers output file") flag.StringVar(&filename, "input", os.Getenv("GOFILE"), "Go file to generate decoders from") flag.StringVar(&pkgname, "package", pkgPrefix+"/"+os.Getenv("GOPACKAGE"), "Go package name") flag.StringVar(&buildTags, "tags", "", "build tags used for parsing") diff --git a/pkg/security/secl/compiler/generators/accessors/accessors.tmpl b/pkg/security/secl/compiler/generators/accessors/accessors.tmpl index 860209a13d6f9c..80db63d3d257e1 100644 --- a/pkg/security/secl/compiler/generators/accessors/accessors.tmpl +++ b/pkg/security/secl/compiler/generators/accessors/accessors.tmpl @@ -4,8 +4,6 @@ package {{.Name}} -{{$Mock := .Mock}} - import ( "net" "reflect" @@ -13,10 +11,6 @@ import ( {{if ne $.SourcePkg $.TargetPkg}}"{{.SourcePkg}}"{{end}} "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" - - {{if not $Mock}} - _ "github.com/DataDog/datadog-agent/pkg/security/secl/model" - {{end}} ) // suppress unused package warning @@ -51,20 +45,21 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "{{$Name}}": return &{{$Field.GetEvaluatorType}}{ {{- if $Field.OpOverrides}} - OpOverrides: {{$Mock | Override $Field.OpOverrides}}, + OpOverrides: {{$Field.OpOverrides}}, {{- end}} {{- if $Field.Iterator}} - EvalFnc: func(ctx *eval.Context) []{{$Field.ReturnType}} { + EvalFnc: func(ctx *eval.Context) []{{$Field.ReturnType}} { + {{if $Field.Handler}} + ev := ctx.Event.(*Event) + {{end}} {{$Checks := $Field | GetChecks $.AllFields}} - {{- if not $Mock }} if ptr := ctx.Cache[field]; ptr != nil { if result := (*[]{{$Field.ReturnType}})(ptr); result != nil { return *result } } - {{end -}} var results []{{$Field.ReturnType}} @@ -94,10 +89,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval {{$SubName := $Field.Iterator.Name | TrimPrefix $Field.Name}} {{$Return := $SubName | printf "element%s"}} - {{if and (ne $Field.Handler "") (not $Mock) }} + {{if $Field.Handler }} {{$SubName = $Field.Iterator.Name | TrimPrefix $Field.Prefix}} {{$Handler := $Field.Iterator.Name | TrimPrefix $Field.Handler}} - {{$Return = print "(*Event)(ctx.Object)." $Handler "(&element" $SubName ")"}} + {{$Return = print "ev.FieldHandlers." $Handler "(ev, &element" $SubName ")"}} {{end}} {{if eq $Field.ReturnType "int"}} @@ -110,7 +105,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval result := {{$Return}} {{end}} - {{if eq $Field.GetArrayPrefix ""}} + {{if not $Field.GetArrayPrefix}} results = append(results, result) {{else}} results = append(results, result...) @@ -119,32 +114,32 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() } - {{- if not $Mock }} ctx.Cache[field] = unsafe.Pointer(&results) - {{end}} return results }, {{- else}} {{- $ReturnType := $Field.ReturnType}} EvalFnc: func(ctx *eval.Context) {{$Field.GetArrayPrefix}}{{$ReturnType}} { - {{$Return := $Field.Name | printf "(*Event)(ctx.Object).%s"}} + ev := ctx.Event.(*Event) + + {{$Return := $Field.Name | printf "ev.%s"}} {{$Checks := $Field | GetChecks $.AllFields}} {{range $Check := $Checks}} - {{$Check = $Check | printf "(*Event)(ctx.Object).%s"}} + {{$Check = $Check | printf "ev.%s"}} if !{{$Check}}() { return {{$Field.GetDefaultReturnValue}} } {{end}} - {{- if and (ne $Field.Handler "") (not $Mock)}} + {{- if $Field.Handler}} {{$Ptr := "&"}} {{$Parent := index $.AllFields $Field.Prefix}} {{- if $Parent.IsOrigTypePtr}} {{$Ptr = ""}} {{end}} - {{$Return = print "(*Event)(ctx.Object)." $Field.Handler "(" $Ptr "(*Event)(ctx.Object)." $Field.Prefix ")"}} + {{$Return = print "ev.FieldHandlers." $Field.Handler "(ev, " $Ptr "ev." $Field.Prefix ")"}} {{end}} {{- if eq $ReturnType "int"}} @@ -192,7 +187,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return nil, &eval.ErrFieldNotFound{Field: field} } -func (e *Event) GetFields() []eval.Field { +func (ev *Event) GetFields() []eval.Field { return []eval.Field{ {{range $Name, $Field := .Fields}} "{{$Name}}", @@ -200,14 +195,14 @@ func (e *Event) GetFields() []eval.Field { } } -func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { +func (ev *Event) GetFieldValue(field eval.Field) (interface{}, error) { switch field { {{range $Name, $Field := .Fields}} case "{{$Name}}": {{if $Field.Iterator}} var values []{{$Field.ReturnType}} - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &{{$Field.Iterator.ReturnType}}{} ptr := iterator.Front(ctx) @@ -223,15 +218,16 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { {{$SubName := $Field.Iterator.Name | TrimPrefix $Field.Name}} {{$Return := $SubName | printf "element%s"}} - {{if and (ne $Field.Handler "") (not $Mock) }} + {{if $Field.Handler}} {{$SubName = $Field.Iterator.Name | TrimPrefix $Field.Prefix}} {{$Handler := $Field.Iterator.Name | TrimPrefix $Field.Handler}} - {{$Return = print "(*Event)(ctx.Object)." $Handler "(&element" $SubName ")"}} + {{$Return = print "ev.FieldHandlers." $Handler "(ev, &element" $SubName ")"}} {{end}} {{if $Field.IsLength}} {{$Return = ".length" | TrimSuffix $Return}} {{end}} + {{if and (eq $Field.ReturnType "int") (ne $Field.OrigType "int")}} result := int({{$Return}}) {{else}} @@ -242,7 +238,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { {{end}} {{end}} - {{if eq $Field.GetArrayPrefix ""}} + {{if not $Field.GetArrayPrefix}} values = append(values, result) {{else}} values = append(values, result...) @@ -253,18 +249,18 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil {{else}} - {{$Return := $Field.Name | printf "e.%s"}} + {{$Return := $Field.Name | printf "ev.%s"}} {{if $Field.IsLength}} - {{$Return = ".length" | TrimSuffix $Field.Name | printf "len(e.%s)"}} + {{$Return = ".length" | TrimSuffix $Field.Name | printf "len(ev.%s)"}} {{end}} - {{if and (ne $Field.Handler "") (not $Mock)}} + {{if $Field.Handler}} {{$Ptr := "&"}} {{$Parent := index $.AllFields $Field.Prefix}} {{- if $Parent.IsOrigTypePtr}} {{$Ptr = ""}} {{end}} - {{$Return = print "e." $Field.Handler "(" $Ptr "e." $Field.Prefix ")"}} + {{$Return = print "ev.FieldHandlers." $Field.Handler "(ev, " $Ptr "ev." $Field.Prefix ")"}} {{end}} {{if eq $Field.ReturnType "string"}} @@ -295,7 +291,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return nil, &eval.ErrFieldNotFound{Field: field} } -func (e *Event) GetFieldEventType(field eval.Field) (eval.EventType, error) { +func (ev *Event) GetFieldEventType(field eval.Field) (eval.EventType, error) { switch field { {{range $Name, $Field := .Fields}} case "{{$Name}}": @@ -306,7 +302,7 @@ func (e *Event) GetFieldEventType(field eval.Field) (eval.EventType, error) { return "", &eval.ErrFieldNotFound{Field: field} } -func (e *Event) GetFieldType(field eval.Field) (reflect.Kind, error) { +func (ev *Event) GetFieldType(field eval.Field) (reflect.Kind, error) { switch field { {{range $Name, $Field := .Fields}} @@ -326,10 +322,10 @@ func (e *Event) GetFieldType(field eval.Field) (reflect.Kind, error) { return reflect.Invalid, &eval.ErrFieldNotFound{Field: field} } -func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { +func (ev *Event) SetFieldValue(field eval.Field, value interface{}) error { switch field { {{range $Name, $Field := .Fields}} - {{$FieldName := $Field.Name | printf "e.%s"}} + {{$FieldName := $Field.Name | printf "ev.%s"}} case "{{$Name}}": {{- $Field | NewField $.AllFields}} {{- if eq $Field.OrigType "string"}} @@ -384,4 +380,4 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { } return &eval.ErrFieldNotFound{Field: field} -} +} \ No newline at end of file diff --git a/pkg/security/secl/compiler/generators/accessors/fields_resolver.tmpl b/pkg/security/secl/compiler/generators/accessors/field_handlers.tmpl similarity index 83% rename from pkg/security/secl/compiler/generators/accessors/fields_resolver.tmpl rename to pkg/security/secl/compiler/generators/accessors/field_handlers.tmpl index 8c1fe630e0d3da..07d3f393ce7f2b 100644 --- a/pkg/security/secl/compiler/generators/accessors/fields_resolver.tmpl +++ b/pkg/security/secl/compiler/generators/accessors/field_handlers.tmpl @@ -9,17 +9,13 @@ package {{.Name}} -import ( - -) - // ResolveFields resolves all the fields associate to the event type. Context fields are automatically resolved. func (ev *Event) ResolveFields(forADs bool) { {{ $uniqueResolvers := dict }} // resolve context fields that are not related to any event type {{- range $Key, $Field := .Fields}} {{- if and (eq $Field.Event "*") }} - {{ $resolver := $Field | GetFieldResolver $.AllFields }} + {{ $resolver := $Field | GetFieldHandler $.AllFields }} {{ if and (ne $resolver "") (not (hasKey $uniqueResolvers $resolver)) }} {{$Checks := $Field | GetChecks $.AllFields}} {{if $Checks}} @@ -38,7 +34,7 @@ func (ev *Event) ResolveFields(forADs bool) { {{ $_ := set $uniqueResolvers $resolver "" }} } {{else}} - {{ $resolver := $Field | GetFieldResolver $.AllFields }} + {{ $resolver := $Field | GetFieldHandler $.AllFields }} {{ if and (ne $resolver "") (not (hasKey $uniqueResolvers $resolver)) }} {{ $resolver | FieldADPrint $Field }} {{ $_ := set $uniqueResolvers $resolver "" }} @@ -55,7 +51,7 @@ func (ev *Event) ResolveFields(forADs bool) { case "{{$Name}}": {{- range $Key, $FieldName := $EventType.Fields }} {{- $Field := index $.Fields $FieldName }} - {{ $resolver := $Field | GetFieldResolver $.AllFields }} + {{ $resolver := $Field | GetFieldHandler $.AllFields }} {{ if ne $resolver "" }} {{$Checks := $Field | GetChecks $.AllFields}} {{if $Checks}} @@ -81,3 +77,20 @@ func (ev *Event) ResolveFields(forADs bool) { {{end}} } } + +type FieldHandlers interface { + {{$Handlers := .Fields | GetHandlers}} + {{range $Proto, $Impl := $Handlers}} + {{$Proto}} + {{end}} + + // custom handlers not tied to any fields + ExtraFieldHandlers +} + +type DefaultFieldHandlers struct {} + +{{$Handlers := .Fields | GetHandlers}} +{{range $Proto, $Impl := $Handlers}} + func (dfh *DefaultFieldHandlers) {{$Proto}} {{$Impl}} +{{end}} \ No newline at end of file diff --git a/pkg/security/secl/go.mod b/pkg/security/secl/go.mod index 54b9a8393b476a..1ce25e70243d4a 100644 --- a/pkg/security/secl/go.mod +++ b/pkg/security/secl/go.mod @@ -15,8 +15,8 @@ require ( github.com/spf13/cast v1.5.0 github.com/stretchr/testify v1.8.1 golang.org/x/exp v0.0.0-20221114191408-850992195362 - golang.org/x/sys v0.3.0 - golang.org/x/tools v0.3.0 + golang.org/x/sys v0.4.0 + golang.org/x/tools v0.5.0 gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v3 v3.0.1 ) diff --git a/pkg/security/secl/go.sum b/pkg/security/secl/go.sum index 374e3054dd974e..c4a6bf70a3e5d2 100644 --- a/pkg/security/secl/go.sum +++ b/pkg/security/secl/go.sum @@ -85,8 +85,8 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= @@ -97,8 +97,8 @@ golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.3.0 h1:SrNbZl6ECOS1qFzgTdQfWXZM9XBkiA6tkFrH9YSTPHM= -golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= +golang.org/x/tools v0.5.0 h1:+bSpV5HIeWkuvgaMfI3UmKRThoTA5ODJTUd8T17NO+4= +golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= diff --git a/pkg/security/secl/model/accessors.go b/pkg/security/secl/model/accessors.go index 40faa88721dc1b..2a7735774e02cf 100644 --- a/pkg/security/secl/model/accessors.go +++ b/pkg/security/secl/model/accessors.go @@ -61,7 +61,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "async": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Async + ev := ctx.Event.(*Event) + return ev.Async }, Field: field, Weight: eval.FunctionWeight, @@ -69,7 +70,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bind.addr.family": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Bind.AddrFamily) + ev := ctx.Event.(*Event) + return int(ev.Bind.AddrFamily) }, Field: field, Weight: eval.FunctionWeight, @@ -77,7 +79,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bind.addr.ip": return &eval.CIDREvaluator{ EvalFnc: func(ctx *eval.Context) net.IPNet { - return (*Event)(ctx.Object).Bind.Addr.IPNet + ev := ctx.Event.(*Event) + return ev.Bind.Addr.IPNet }, Field: field, Weight: eval.FunctionWeight, @@ -85,7 +88,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bind.addr.port": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Bind.Addr.Port) + ev := ctx.Event.(*Event) + return int(ev.Bind.Addr.Port) }, Field: field, Weight: eval.FunctionWeight, @@ -93,7 +97,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bind.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Bind.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Bind.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -101,7 +106,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bpf.cmd": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.Cmd) + ev := ctx.Event.(*Event) + return int(ev.BPF.Cmd) }, Field: field, Weight: eval.FunctionWeight, @@ -109,7 +115,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bpf.map.name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).BPF.Map.Name + ev := ctx.Event.(*Event) + return ev.BPF.Map.Name }, Field: field, Weight: eval.FunctionWeight, @@ -117,7 +124,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bpf.map.type": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.Map.Type) + ev := ctx.Event.(*Event) + return int(ev.BPF.Map.Type) }, Field: field, Weight: eval.FunctionWeight, @@ -125,7 +133,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bpf.prog.attach_type": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.Program.AttachType) + ev := ctx.Event.(*Event) + return int(ev.BPF.Program.AttachType) }, Field: field, Weight: eval.FunctionWeight, @@ -133,19 +142,21 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bpf.prog.helpers": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { - result := make([]int, len((*Event)(ctx.Object).BPF.Program.Helpers)) - for i, v := range (*Event)(ctx.Object).BPF.Program.Helpers { + ev := ctx.Event.(*Event) + result := make([]int, len(ev.BPF.Program.Helpers)) + for i, v := range ev.BPF.Program.Helpers { result[i] = int(v) } return result }, Field: field, - Weight: eval.HandlerWeight, + Weight: eval.FunctionWeight, }, nil case "bpf.prog.name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).BPF.Program.Name + ev := ctx.Event.(*Event) + return ev.BPF.Program.Name }, Field: field, Weight: eval.FunctionWeight, @@ -153,7 +164,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bpf.prog.tag": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).BPF.Program.Tag + ev := ctx.Event.(*Event) + return ev.BPF.Program.Tag }, Field: field, Weight: eval.FunctionWeight, @@ -161,7 +173,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bpf.prog.type": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.Program.Type) + ev := ctx.Event.(*Event) + return int(ev.BPF.Program.Type) }, Field: field, Weight: eval.FunctionWeight, @@ -169,7 +182,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bpf.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.BPF.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -177,7 +191,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "capset.cap_effective": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Capset.CapEffective) + ev := ctx.Event.(*Event) + return int(ev.Capset.CapEffective) }, Field: field, Weight: eval.FunctionWeight, @@ -185,7 +200,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "capset.cap_permitted": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Capset.CapPermitted) + ev := ctx.Event.(*Event) + return int(ev.Capset.CapPermitted) }, Field: field, Weight: eval.FunctionWeight, @@ -193,7 +209,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Chmod.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -201,7 +218,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.destination.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.Mode) + ev := ctx.Event.(*Event) + return int(ev.Chmod.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -209,7 +227,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.destination.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.Mode) + ev := ctx.Event.(*Event) + return int(ev.Chmod.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -217,7 +236,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chmod.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Chmod.File) }, Field: field, Weight: eval.HandlerWeight, @@ -225,7 +245,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Chmod.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -233,7 +254,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chmod.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Chmod.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -241,7 +263,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Chmod.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Chmod.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -249,7 +272,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Chmod.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -257,7 +281,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Chmod.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -265,7 +290,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Chmod.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -273,7 +299,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Chmod.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -282,7 +309,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chmod.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chmod.File) }, Field: field, Weight: eval.HandlerWeight, @@ -291,7 +319,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Chmod.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chmod.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -300,7 +329,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chmod.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Chmod.File) }, Field: field, Weight: eval.HandlerWeight, @@ -309,7 +339,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Chmod.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Chmod.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -317,7 +348,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Chmod.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -325,7 +357,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Chmod.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -333,7 +366,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chmod.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Chmod.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -341,7 +375,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Chmod.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -349,7 +384,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Chown.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -357,7 +393,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.destination.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.GID) + ev := ctx.Event.(*Event) + return int(ev.Chown.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -365,7 +402,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.destination.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chown.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveChownGID(ev, &ev.Chown) }, Field: field, Weight: eval.HandlerWeight, @@ -373,7 +411,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.destination.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.UID) + ev := ctx.Event.(*Event) + return int(ev.Chown.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -381,7 +420,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.destination.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chown.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveChownUID(ev, &ev.Chown) }, Field: field, Weight: eval.HandlerWeight, @@ -389,7 +429,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chown.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Chown.File) }, Field: field, Weight: eval.HandlerWeight, @@ -397,7 +438,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Chown.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -405,7 +447,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chown.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Chown.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -413,7 +456,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Chown.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Chown.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -421,7 +465,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Chown.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -429,7 +474,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Chown.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -437,7 +483,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Chown.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -445,7 +492,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Chown.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -454,7 +502,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chown.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chown.File) }, Field: field, Weight: eval.HandlerWeight, @@ -463,7 +512,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Chown.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chown.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -472,7 +522,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chown.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Chown.File) }, Field: field, Weight: eval.HandlerWeight, @@ -481,7 +532,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Chown.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Chown.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -489,7 +541,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Chown.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -497,7 +550,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Chown.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -505,7 +559,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chown.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Chown.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -513,7 +568,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Chown.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -521,7 +577,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "container.id": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ContainerContext.ID + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveContainerID(ev, &ev.ContainerContext) }, Field: field, Weight: eval.HandlerWeight, @@ -529,7 +586,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "container.tags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ContainerContext.Tags + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveContainerTags(ev, &ev.ContainerContext) }, Field: field, Weight: 9999 * eval.HandlerWeight, @@ -537,7 +595,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "dns.id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.ID) + ev := ctx.Event.(*Event) + return int(ev.DNS.ID) }, Field: field, Weight: eval.FunctionWeight, @@ -545,7 +604,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "dns.question.class": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.Class) + ev := ctx.Event.(*Event) + return int(ev.DNS.Class) }, Field: field, Weight: eval.FunctionWeight, @@ -553,7 +613,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "dns.question.count": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.Count) + ev := ctx.Event.(*Event) + return int(ev.DNS.Count) }, Field: field, Weight: eval.FunctionWeight, @@ -561,7 +622,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "dns.question.length": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.Size) + ev := ctx.Event.(*Event) + return int(ev.DNS.Size) }, Field: field, Weight: eval.FunctionWeight, @@ -570,7 +632,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: eval.DNSNameCmp, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).DNS.Name + ev := ctx.Event.(*Event) + return ev.DNS.Name }, Field: field, Weight: eval.FunctionWeight, @@ -579,7 +642,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: eval.DNSNameCmp, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).DNS.Name) + ev := ctx.Event.(*Event) + return len(ev.DNS.Name) }, Field: field, Weight: eval.FunctionWeight, @@ -587,7 +651,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "dns.question.type": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.Type) + ev := ctx.Event.(*Event) + return int(ev.DNS.Type) }, Field: field, Weight: eval.FunctionWeight, @@ -595,7 +660,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.args": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Args + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.Exec.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -603,7 +669,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exec.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.Exec.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -611,7 +678,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exec.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.Exec.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -619,7 +687,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.args_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exec.Process.ArgsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.Exec.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -627,7 +696,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exec.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.Exec.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -635,7 +705,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.argv0": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Argv0 + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.Exec.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -643,7 +714,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.cap_effective": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.CapEffective) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.Credentials.CapEffective) }, Field: field, Weight: eval.FunctionWeight, @@ -651,7 +723,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.cap_permitted": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.CapPermitted) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.Credentials.CapPermitted) }, Field: field, Weight: eval.FunctionWeight, @@ -659,7 +732,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.comm": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Comm + ev := ctx.Event.(*Event) + return ev.Exec.Process.Comm }, Field: field, Weight: eval.FunctionWeight, @@ -667,7 +741,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.container.id": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.ContainerID + ev := ctx.Event.(*Event) + return ev.Exec.Process.ContainerID }, Field: field, Weight: eval.FunctionWeight, @@ -675,7 +750,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.cookie": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Cookie) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.Cookie) }, Field: field, Weight: eval.FunctionWeight, @@ -683,7 +759,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.created_at": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.CreatedAt) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.Exec.Process)) }, Field: field, Weight: eval.HandlerWeight, @@ -691,7 +768,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.egid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.EGID) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.Credentials.EGID) }, Field: field, Weight: eval.FunctionWeight, @@ -699,7 +777,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.egroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.EGroup + ev := ctx.Event.(*Event) + return ev.Exec.Process.Credentials.EGroup }, Field: field, Weight: eval.FunctionWeight, @@ -707,7 +786,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exec.Process.Envp + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.Exec.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -715,7 +795,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exec.Process.Envs + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.Exec.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -723,7 +804,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.envs_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exec.Process.EnvsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.Exec.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -731,7 +813,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.euid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.EUID) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.Credentials.EUID) }, Field: field, Weight: eval.FunctionWeight, @@ -739,7 +822,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.euser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.EUser + ev := ctx.Event.(*Event) + return ev.Exec.Process.Credentials.EUser }, Field: field, Weight: eval.FunctionWeight, @@ -747,10 +831,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.CTime) + return int(ev.Exec.Process.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -758,10 +843,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Exec.Process.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exec.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -769,10 +855,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.GID) + return int(ev.Exec.Process.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -780,10 +867,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exec.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -791,10 +879,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return false } - return (*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exec.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -802,10 +891,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.Inode) + return int(ev.Exec.Process.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -813,10 +903,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.Mode) + return int(ev.Exec.Process.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -824,10 +915,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.MTime) + return int(ev.Exec.Process.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -835,10 +927,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.MountID) + return int(ev.Exec.Process.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -847,10 +940,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Exec.Process.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -859,7 +953,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Exec.Process.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -868,10 +963,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Exec.Process.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -880,7 +976,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Exec.Process.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -888,10 +985,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Exec.Process.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -899,10 +997,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.UID) + return int(ev.Exec.Process.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -910,10 +1009,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exec.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -921,7 +1021,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.fsgid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.FSGID) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.Credentials.FSGID) }, Field: field, Weight: eval.FunctionWeight, @@ -929,7 +1030,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.fsgroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.FSGroup + ev := ctx.Event.(*Event) + return ev.Exec.Process.Credentials.FSGroup }, Field: field, Weight: eval.FunctionWeight, @@ -937,7 +1039,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.fsuid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.FSUID) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.Credentials.FSUID) }, Field: field, Weight: eval.FunctionWeight, @@ -945,7 +1048,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.fsuser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.FSUser + ev := ctx.Event.(*Event) + return ev.Exec.Process.Credentials.FSUser }, Field: field, Weight: eval.FunctionWeight, @@ -953,7 +1057,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.GID) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.Credentials.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -961,7 +1066,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.Group + ev := ctx.Event.(*Event) + return ev.Exec.Process.Credentials.Group }, Field: field, Weight: eval.FunctionWeight, @@ -969,10 +1075,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime) + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -980,10 +1087,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exec.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -991,10 +1099,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.GID) + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -1002,10 +1111,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1013,10 +1123,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return false } - return (*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1024,10 +1135,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode) + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -1035,10 +1147,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -1046,10 +1159,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime) + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -1057,10 +1171,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID) + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -1069,10 +1184,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -1081,7 +1197,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -1090,10 +1207,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -1102,7 +1220,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -1110,10 +1229,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -1121,10 +1241,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.UID) + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -1132,10 +1253,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1143,7 +1265,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.is_kworker": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exec.Process.PIDContext.IsKworker + ev := ctx.Event.(*Event) + return ev.Exec.Process.PIDContext.IsKworker }, Field: field, Weight: eval.FunctionWeight, @@ -1151,7 +1274,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.is_thread": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exec.Process.IsThread + ev := ctx.Event.(*Event) + return ev.Exec.Process.IsThread }, Field: field, Weight: eval.FunctionWeight, @@ -1159,7 +1283,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.pid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.PIDContext.Pid) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.PIDContext.Pid) }, Field: field, Weight: eval.FunctionWeight, @@ -1167,7 +1292,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.ppid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.PPid) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.PPid) }, Field: field, Weight: eval.FunctionWeight, @@ -1175,7 +1301,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.tid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.PIDContext.Tid) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.PIDContext.Tid) }, Field: field, Weight: eval.FunctionWeight, @@ -1183,7 +1310,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.tty_name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.TTYName + ev := ctx.Event.(*Event) + return ev.Exec.Process.TTYName }, Field: field, Weight: eval.FunctionWeight, @@ -1191,7 +1319,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.UID) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.Credentials.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -1199,7 +1328,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.User + ev := ctx.Event.(*Event) + return ev.Exec.Process.Credentials.User }, Field: field, Weight: eval.FunctionWeight, @@ -1207,7 +1337,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.args": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Args + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.Exit.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -1215,7 +1346,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exit.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.Exit.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -1223,7 +1355,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exit.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.Exit.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -1231,7 +1364,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.args_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exit.Process.ArgsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.Exit.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -1239,7 +1373,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exit.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.Exit.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -1247,7 +1382,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.argv0": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Argv0 + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.Exit.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -1255,7 +1391,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.cap_effective": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.CapEffective) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.Credentials.CapEffective) }, Field: field, Weight: eval.FunctionWeight, @@ -1263,7 +1400,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.cap_permitted": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.CapPermitted) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.Credentials.CapPermitted) }, Field: field, Weight: eval.FunctionWeight, @@ -1271,7 +1409,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.cause": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Cause) + ev := ctx.Event.(*Event) + return int(ev.Exit.Cause) }, Field: field, Weight: eval.FunctionWeight, @@ -1279,7 +1418,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.code": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Code) + ev := ctx.Event.(*Event) + return int(ev.Exit.Code) }, Field: field, Weight: eval.FunctionWeight, @@ -1287,7 +1427,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.comm": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Comm + ev := ctx.Event.(*Event) + return ev.Exit.Process.Comm }, Field: field, Weight: eval.FunctionWeight, @@ -1295,7 +1436,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.container.id": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.ContainerID + ev := ctx.Event.(*Event) + return ev.Exit.Process.ContainerID }, Field: field, Weight: eval.FunctionWeight, @@ -1303,7 +1445,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.cookie": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Cookie) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.Cookie) }, Field: field, Weight: eval.FunctionWeight, @@ -1311,7 +1454,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.created_at": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.CreatedAt) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.Exit.Process)) }, Field: field, Weight: eval.HandlerWeight, @@ -1319,7 +1463,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.egid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.EGID) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.Credentials.EGID) }, Field: field, Weight: eval.FunctionWeight, @@ -1327,7 +1472,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.egroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.EGroup + ev := ctx.Event.(*Event) + return ev.Exit.Process.Credentials.EGroup }, Field: field, Weight: eval.FunctionWeight, @@ -1335,7 +1481,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exit.Process.Envp + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.Exit.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -1343,7 +1490,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exit.Process.Envs + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.Exit.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -1351,7 +1499,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.envs_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exit.Process.EnvsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.Exit.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -1359,7 +1508,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.euid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.EUID) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.Credentials.EUID) }, Field: field, Weight: eval.FunctionWeight, @@ -1367,7 +1517,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.euser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.EUser + ev := ctx.Event.(*Event) + return ev.Exit.Process.Credentials.EUser }, Field: field, Weight: eval.FunctionWeight, @@ -1375,10 +1526,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.CTime) + return int(ev.Exit.Process.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -1386,10 +1538,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Exit.Process.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exit.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -1397,10 +1550,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.GID) + return int(ev.Exit.Process.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -1408,10 +1562,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exit.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1419,10 +1574,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return false } - return (*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exit.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1430,10 +1586,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.Inode) + return int(ev.Exit.Process.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -1441,10 +1598,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.Mode) + return int(ev.Exit.Process.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -1452,10 +1610,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.MTime) + return int(ev.Exit.Process.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -1463,10 +1622,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.MountID) + return int(ev.Exit.Process.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -1475,10 +1635,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Exit.Process.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -1487,7 +1648,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Exit.Process.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -1496,10 +1658,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Exit.Process.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -1508,7 +1671,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Exit.Process.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -1516,10 +1680,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Exit.Process.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -1527,10 +1692,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.UID) + return int(ev.Exit.Process.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -1538,10 +1704,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exit.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1549,7 +1716,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.fsgid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.FSGID) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.Credentials.FSGID) }, Field: field, Weight: eval.FunctionWeight, @@ -1557,7 +1725,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.fsgroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.FSGroup + ev := ctx.Event.(*Event) + return ev.Exit.Process.Credentials.FSGroup }, Field: field, Weight: eval.FunctionWeight, @@ -1565,7 +1734,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.fsuid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.FSUID) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.Credentials.FSUID) }, Field: field, Weight: eval.FunctionWeight, @@ -1573,7 +1743,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.fsuser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.FSUser + ev := ctx.Event.(*Event) + return ev.Exit.Process.Credentials.FSUser }, Field: field, Weight: eval.FunctionWeight, @@ -1581,7 +1752,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.GID) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.Credentials.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -1589,7 +1761,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.Group + ev := ctx.Event.(*Event) + return ev.Exit.Process.Credentials.Group }, Field: field, Weight: eval.FunctionWeight, @@ -1597,10 +1770,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime) + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -1608,10 +1782,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exit.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -1619,10 +1794,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.GID) + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -1630,10 +1806,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1641,10 +1818,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return false } - return (*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1652,10 +1830,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode) + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -1663,10 +1842,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -1674,10 +1854,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime) + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -1685,10 +1866,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID) + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -1697,10 +1879,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -1709,7 +1892,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -1718,10 +1902,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -1730,7 +1915,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -1738,10 +1924,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -1749,10 +1936,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.UID) + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -1760,10 +1948,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1771,7 +1960,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.is_kworker": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exit.Process.PIDContext.IsKworker + ev := ctx.Event.(*Event) + return ev.Exit.Process.PIDContext.IsKworker }, Field: field, Weight: eval.FunctionWeight, @@ -1779,7 +1969,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.is_thread": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exit.Process.IsThread + ev := ctx.Event.(*Event) + return ev.Exit.Process.IsThread }, Field: field, Weight: eval.FunctionWeight, @@ -1787,7 +1978,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.pid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.PIDContext.Pid) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.PIDContext.Pid) }, Field: field, Weight: eval.FunctionWeight, @@ -1795,7 +1987,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.ppid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.PPid) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.PPid) }, Field: field, Weight: eval.FunctionWeight, @@ -1803,7 +1996,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.tid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.PIDContext.Tid) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.PIDContext.Tid) }, Field: field, Weight: eval.FunctionWeight, @@ -1811,7 +2005,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.tty_name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.TTYName + ev := ctx.Event.(*Event) + return ev.Exit.Process.TTYName }, Field: field, Weight: eval.FunctionWeight, @@ -1819,7 +2014,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.UID) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.Credentials.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -1827,7 +2023,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.User + ev := ctx.Event.(*Event) + return ev.Exit.Process.Credentials.User }, Field: field, Weight: eval.FunctionWeight, @@ -1835,7 +2032,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Link.Source.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -1843,7 +2041,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Link.Target.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -1851,7 +2050,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Target.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Link.Target) }, Field: field, Weight: eval.HandlerWeight, @@ -1859,7 +2059,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Link.Target.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -1867,7 +2068,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Target.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Link.Target.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1875,7 +2077,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Link.Target.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Link.Target.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1883,7 +2086,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Link.Target.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -1891,7 +2095,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Link.Target.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -1899,7 +2104,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Link.Target.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -1907,7 +2113,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Link.Target.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -1916,7 +2123,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Target.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Target) }, Field: field, Weight: eval.HandlerWeight, @@ -1925,7 +2133,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Link.Target.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Target)) }, Field: field, Weight: eval.HandlerWeight, @@ -1934,7 +2143,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Target.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Target) }, Field: field, Weight: eval.HandlerWeight, @@ -1943,7 +2153,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Link.Target.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Target)) }, Field: field, Weight: eval.HandlerWeight, @@ -1951,7 +2162,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Link.Target.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -1959,7 +2171,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Link.Target.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -1967,7 +2180,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Target.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Link.Target.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1975,7 +2189,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Source.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Link.Source) }, Field: field, Weight: eval.HandlerWeight, @@ -1983,7 +2198,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Link.Source.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -1991,7 +2207,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Source.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Link.Source.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1999,7 +2216,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Link.Source.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Link.Source.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2007,7 +2225,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Link.Source.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -2015,7 +2234,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Link.Source.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -2023,7 +2243,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Link.Source.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -2031,7 +2252,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Link.Source.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -2040,7 +2262,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Source.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Source) }, Field: field, Weight: eval.HandlerWeight, @@ -2049,7 +2272,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Link.Source.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Source)) }, Field: field, Weight: eval.HandlerWeight, @@ -2058,7 +2282,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Source.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Source) }, Field: field, Weight: eval.HandlerWeight, @@ -2067,7 +2292,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Link.Source.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Source)) }, Field: field, Weight: eval.HandlerWeight, @@ -2075,7 +2301,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Link.Source.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -2083,7 +2310,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Link.Source.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -2091,7 +2319,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Source.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Link.Source.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2099,7 +2328,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Link.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -2107,7 +2337,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.LoadModule.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -2115,7 +2346,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).LoadModule.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.LoadModule.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2123,7 +2355,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.LoadModule.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -2131,7 +2364,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).LoadModule.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.LoadModule.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2139,7 +2373,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).LoadModule.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.LoadModule.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2147,7 +2382,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.LoadModule.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -2155,7 +2391,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.LoadModule.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -2163,7 +2400,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.LoadModule.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -2171,7 +2409,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.LoadModule.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -2180,7 +2419,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).LoadModule.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.LoadModule.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2189,7 +2429,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).LoadModule.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.LoadModule.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -2198,7 +2439,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).LoadModule.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.LoadModule.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2207,7 +2449,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).LoadModule.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.LoadModule.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -2215,7 +2458,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.LoadModule.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -2223,7 +2467,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.LoadModule.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -2231,7 +2476,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).LoadModule.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.LoadModule.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2239,7 +2485,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.loaded_from_memory": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).LoadModule.LoadedFromMemory + ev := ctx.Event.(*Event) + return ev.LoadModule.LoadedFromMemory }, Field: field, Weight: eval.FunctionWeight, @@ -2247,7 +2494,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).LoadModule.Name + ev := ctx.Event.(*Event) + return ev.LoadModule.Name }, Field: field, Weight: eval.FunctionWeight, @@ -2255,7 +2503,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.LoadModule.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -2263,7 +2512,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -2271,7 +2521,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.destination.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.Mode) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -2279,7 +2530,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.destination.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.Mode) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -2287,7 +2539,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Mkdir.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Mkdir.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2295,7 +2548,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -2303,7 +2557,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Mkdir.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Mkdir.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2311,7 +2566,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Mkdir.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Mkdir.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2319,7 +2575,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -2327,7 +2584,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -2335,7 +2593,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -2343,7 +2602,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -2352,7 +2612,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Mkdir.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Mkdir.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2361,7 +2622,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Mkdir.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Mkdir.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -2370,7 +2632,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Mkdir.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Mkdir.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2379,7 +2642,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Mkdir.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Mkdir.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -2387,7 +2651,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Mkdir.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -2395,7 +2660,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -2403,7 +2669,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Mkdir.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Mkdir.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2411,7 +2678,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -2419,7 +2687,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.MMap.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -2427,7 +2696,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).MMap.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.MMap.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2435,7 +2705,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.MMap.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -2443,7 +2714,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).MMap.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.MMap.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2451,7 +2723,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).MMap.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.MMap.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2459,7 +2732,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.MMap.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -2467,7 +2741,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.MMap.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -2475,7 +2750,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.MMap.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -2483,7 +2759,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.MMap.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -2492,7 +2769,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).MMap.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.MMap.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2501,7 +2779,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).MMap.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.MMap.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -2510,7 +2789,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).MMap.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.MMap.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2519,7 +2799,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).MMap.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.MMap.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -2527,7 +2808,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.MMap.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -2535,7 +2817,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.MMap.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -2543,7 +2826,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).MMap.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.MMap.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2551,7 +2835,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.flags": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return (*Event)(ctx.Object).MMap.Flags + ev := ctx.Event.(*Event) + return ev.MMap.Flags }, Field: field, Weight: eval.FunctionWeight, @@ -2559,7 +2844,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.protection": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return (*Event)(ctx.Object).MMap.Protection + ev := ctx.Event.(*Event) + return ev.MMap.Protection }, Field: field, Weight: eval.FunctionWeight, @@ -2567,7 +2853,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.MMap.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -2575,7 +2862,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mount.fs_type": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Mount.Mount.FSType + ev := ctx.Event.(*Event) + return ev.Mount.Mount.FSType }, Field: field, Weight: eval.FunctionWeight, @@ -2583,7 +2871,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mount.mountpoint.path": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Mount.MountPointPath + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveMountPointPath(ev, &ev.Mount) }, Field: field, Weight: eval.HandlerWeight, @@ -2591,7 +2880,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mount.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mount.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Mount.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -2599,7 +2889,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mount.source.path": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Mount.MountSourcePath + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveMountSourcePath(ev, &ev.Mount) }, Field: field, Weight: eval.HandlerWeight, @@ -2607,7 +2898,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mprotect.req_protection": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return (*Event)(ctx.Object).MProtect.ReqProtection + ev := ctx.Event.(*Event) + return ev.MProtect.ReqProtection }, Field: field, Weight: eval.FunctionWeight, @@ -2615,7 +2907,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mprotect.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MProtect.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.MProtect.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -2623,7 +2916,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mprotect.vm_protection": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return (*Event)(ctx.Object).MProtect.VMProtection + ev := ctx.Event.(*Event) + return ev.MProtect.VMProtection }, Field: field, Weight: eval.FunctionWeight, @@ -2631,7 +2925,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "network.destination.ip": return &eval.CIDREvaluator{ EvalFnc: func(ctx *eval.Context) net.IPNet { - return (*Event)(ctx.Object).NetworkContext.Destination.IPNet + ev := ctx.Event.(*Event) + return ev.NetworkContext.Destination.IPNet }, Field: field, Weight: eval.FunctionWeight, @@ -2639,7 +2934,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "network.destination.port": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.Destination.Port) + ev := ctx.Event.(*Event) + return int(ev.NetworkContext.Destination.Port) }, Field: field, Weight: eval.FunctionWeight, @@ -2647,7 +2943,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "network.device.ifindex": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.Device.IfIndex) + ev := ctx.Event.(*Event) + return int(ev.NetworkContext.Device.IfIndex) }, Field: field, Weight: eval.FunctionWeight, @@ -2655,7 +2952,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "network.device.ifname": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).NetworkContext.Device.IfName + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveNetworkDeviceIfName(ev, &ev.NetworkContext.Device) }, Field: field, Weight: eval.HandlerWeight, @@ -2663,7 +2961,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "network.l3_protocol": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.L3Protocol) + ev := ctx.Event.(*Event) + return int(ev.NetworkContext.L3Protocol) }, Field: field, Weight: eval.FunctionWeight, @@ -2671,7 +2970,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "network.l4_protocol": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.L4Protocol) + ev := ctx.Event.(*Event) + return int(ev.NetworkContext.L4Protocol) }, Field: field, Weight: eval.FunctionWeight, @@ -2679,7 +2979,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "network.size": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.Size) + ev := ctx.Event.(*Event) + return int(ev.NetworkContext.Size) }, Field: field, Weight: eval.FunctionWeight, @@ -2687,7 +2988,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "network.source.ip": return &eval.CIDREvaluator{ EvalFnc: func(ctx *eval.Context) net.IPNet { - return (*Event)(ctx.Object).NetworkContext.Source.IPNet + ev := ctx.Event.(*Event) + return ev.NetworkContext.Source.IPNet }, Field: field, Weight: eval.FunctionWeight, @@ -2695,7 +2997,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "network.source.port": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.Source.Port) + ev := ctx.Event.(*Event) + return int(ev.NetworkContext.Source.Port) }, Field: field, Weight: eval.FunctionWeight, @@ -2703,7 +3006,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Open.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -2711,7 +3015,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.destination.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.Mode) + ev := ctx.Event.(*Event) + return int(ev.Open.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -2719,7 +3024,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Open.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Open.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2727,7 +3033,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Open.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -2735,7 +3042,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Open.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Open.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2743,7 +3051,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Open.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Open.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2751,7 +3060,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Open.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -2759,7 +3069,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Open.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -2767,7 +3078,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Open.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -2775,7 +3087,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Open.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -2784,7 +3097,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Open.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Open.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2793,7 +3107,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Open.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Open.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -2802,7 +3117,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Open.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Open.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2811,7 +3127,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Open.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Open.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -2819,7 +3136,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Open.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -2827,7 +3145,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Open.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -2835,7 +3154,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Open.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Open.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2843,7 +3163,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.flags": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.Flags) + ev := ctx.Event.(*Event) + return int(ev.Open.Flags) }, Field: field, Weight: eval.FunctionWeight, @@ -2851,7 +3172,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Open.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -2859,15 +3181,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.args": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Args + result := ev.FieldHandlers.ResolveProcessArgs(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: 100 * eval.IteratorWeight, @@ -2875,15 +3204,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsFlags(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -2891,15 +3227,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsOptions(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -2907,15 +3250,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.args_truncated": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.ArgsTruncated + result := ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -2923,15 +3273,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgv(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: 100 * eval.IteratorWeight, @@ -2939,15 +3296,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.argv0": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv0 + result := ev.FieldHandlers.ResolveProcessArgv0(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: 100 * eval.IteratorWeight, @@ -2955,6 +3319,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.cap_effective": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -2964,6 +3333,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -2971,6 +3341,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.cap_permitted": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -2980,6 +3355,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -2987,6 +3363,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.comm": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -2996,6 +3377,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3003,6 +3385,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.container.id": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3012,6 +3399,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3019,6 +3407,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.cookie": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3028,6 +3421,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3035,15 +3429,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.created_at": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.CreatedAt) + result := int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &element.ProcessContext.Process)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3051,6 +3452,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.egid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3060,6 +3466,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3067,6 +3474,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.egroup": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3076,6 +3488,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3083,15 +3496,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Envp + result := ev.FieldHandlers.ResolveProcessEnvp(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3099,15 +3519,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Envs + result := ev.FieldHandlers.ResolveProcessEnvs(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3115,15 +3542,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.envs_truncated": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.EnvsTruncated + result := ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3131,6 +3565,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.euid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3140,6 +3579,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3147,6 +3587,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.euser": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3156,6 +3601,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3163,6 +3609,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.change_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3177,6 +3628,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3184,6 +3636,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.filesystem": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3194,10 +3652,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3205,6 +3664,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.gid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3219,6 +3683,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3226,6 +3691,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.group": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3236,10 +3707,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3247,6 +3719,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.in_upper_layer": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3257,10 +3735,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3268,6 +3747,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.inode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3282,6 +3766,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3289,6 +3774,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.mode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3303,6 +3793,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3310,6 +3801,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.modification_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3324,6 +3820,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3331,6 +3828,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.mount_id": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3345,6 +3847,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3353,6 +3856,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3363,10 +3872,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3375,15 +3885,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3392,6 +3909,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3402,10 +3925,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3414,15 +3938,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3430,6 +3961,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.rights": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3440,10 +3977,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.FileEvent.FileFields)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3451,6 +3989,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.uid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3465,6 +4008,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3472,6 +4016,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.user": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3482,10 +4032,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3493,6 +4044,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.fsgid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3502,6 +4058,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3509,6 +4066,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.fsgroup": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3518,6 +4080,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3525,6 +4088,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.fsuid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3534,6 +4102,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3541,6 +4110,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.fsuser": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3550,6 +4124,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3557,6 +4132,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.gid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3566,6 +4146,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3573,6 +4154,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.group": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3582,6 +4168,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3589,6 +4176,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.change_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3603,6 +4195,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3610,6 +4203,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.filesystem": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3620,10 +4219,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3631,6 +4231,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.gid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3645,6 +4250,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3652,6 +4258,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.group": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3662,10 +4274,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3673,6 +4286,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.in_upper_layer": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3683,10 +4302,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3694,6 +4314,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.inode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3708,6 +4333,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3715,6 +4341,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.mode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3729,6 +4360,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3736,6 +4368,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.modification_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3750,6 +4387,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3757,6 +4395,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.mount_id": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3771,6 +4414,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3779,6 +4423,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3789,10 +4439,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3801,15 +4452,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3818,6 +4476,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3828,10 +4492,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3840,15 +4505,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3856,6 +4528,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.rights": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3866,10 +4544,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3877,6 +4556,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.uid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3891,6 +4575,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3898,6 +4583,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.user": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3908,10 +4599,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3919,6 +4611,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.is_kworker": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3928,6 +4625,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3935,6 +4633,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.is_thread": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3944,6 +4647,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3951,6 +4655,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.pid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3960,6 +4669,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3967,6 +4677,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.ppid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3976,6 +4691,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3983,6 +4699,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.tid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3992,6 +4713,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3999,6 +4721,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.tty_name": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -4008,6 +4735,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -4015,6 +4743,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.uid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -4024,6 +4757,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -4031,6 +4765,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.user": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -4040,6 +4779,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -4047,7 +4787,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.args": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Args + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgs(ev, &ev.ProcessContext.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -4055,7 +4796,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ProcessContext.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, &ev.ProcessContext.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -4063,7 +4805,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ProcessContext.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, &ev.ProcessContext.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -4071,7 +4814,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.args_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ProcessContext.Process.ArgsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &ev.ProcessContext.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -4079,7 +4823,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ProcessContext.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv(ev, &ev.ProcessContext.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -4087,7 +4832,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.argv0": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Argv0 + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv0(ev, &ev.ProcessContext.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -4095,7 +4841,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.cap_effective": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.CapEffective) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.Credentials.CapEffective) }, Field: field, Weight: eval.FunctionWeight, @@ -4103,7 +4850,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.cap_permitted": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.CapPermitted) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.Credentials.CapPermitted) }, Field: field, Weight: eval.FunctionWeight, @@ -4111,7 +4859,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.comm": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Comm + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.Comm }, Field: field, Weight: eval.FunctionWeight, @@ -4119,7 +4868,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.container.id": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.ContainerID + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.ContainerID }, Field: field, Weight: eval.FunctionWeight, @@ -4127,7 +4877,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.cookie": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Cookie) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.Cookie) }, Field: field, Weight: eval.FunctionWeight, @@ -4135,7 +4886,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.created_at": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.CreatedAt) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &ev.ProcessContext.Process)) }, Field: field, Weight: eval.HandlerWeight, @@ -4143,7 +4895,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.egid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.EGID) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.Credentials.EGID) }, Field: field, Weight: eval.FunctionWeight, @@ -4151,7 +4904,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.egroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.EGroup + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.Credentials.EGroup }, Field: field, Weight: eval.FunctionWeight, @@ -4159,7 +4913,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ProcessContext.Process.Envp + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.ProcessContext.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -4167,7 +4922,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ProcessContext.Process.Envs + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvs(ev, &ev.ProcessContext.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -4175,7 +4931,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.envs_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ProcessContext.Process.EnvsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &ev.ProcessContext.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -4183,7 +4940,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.euid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.EUID) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.Credentials.EUID) }, Field: field, Weight: eval.FunctionWeight, @@ -4191,7 +4949,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.euser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.EUser + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.Credentials.EUser }, Field: field, Weight: eval.FunctionWeight, @@ -4199,10 +4958,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.CTime) + return int(ev.ProcessContext.Process.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -4210,10 +4970,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).ProcessContext.Process.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4221,10 +4982,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.GID) + return int(ev.ProcessContext.Process.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -4232,10 +4994,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -4243,10 +5006,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return false } - return (*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -4254,10 +5018,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.Inode) + return int(ev.ProcessContext.Process.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -4265,10 +5030,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.Mode) + return int(ev.ProcessContext.Process.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -4276,10 +5042,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.MTime) + return int(ev.ProcessContext.Process.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -4287,10 +5054,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.MountID) + return int(ev.ProcessContext.Process.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -4299,10 +5067,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).ProcessContext.Process.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4311,7 +5080,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ProcessContext.Process.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -4320,10 +5090,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).ProcessContext.Process.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4332,7 +5103,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ProcessContext.Process.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -4340,10 +5112,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.ProcessContext.Process.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -4351,10 +5124,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.UID) + return int(ev.ProcessContext.Process.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -4362,10 +5136,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -4373,7 +5148,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.fsgid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.FSGID) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.Credentials.FSGID) }, Field: field, Weight: eval.FunctionWeight, @@ -4381,7 +5157,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.fsgroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.FSGroup + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.Credentials.FSGroup }, Field: field, Weight: eval.FunctionWeight, @@ -4389,7 +5166,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.fsuid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.FSUID) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.Credentials.FSUID) }, Field: field, Weight: eval.FunctionWeight, @@ -4397,7 +5175,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.fsuser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.FSUser + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.Credentials.FSUser }, Field: field, Weight: eval.FunctionWeight, @@ -4405,7 +5184,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.GID) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.Credentials.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -4413,7 +5193,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.Group + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.Credentials.Group }, Field: field, Weight: eval.FunctionWeight, @@ -4421,10 +5202,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -4432,10 +5214,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4443,10 +5226,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -4454,10 +5238,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -4465,10 +5250,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return false } - return (*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -4476,10 +5262,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -4487,10 +5274,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -4498,10 +5286,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -4509,10 +5298,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -4521,10 +5311,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4533,7 +5324,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -4542,10 +5334,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4554,7 +5347,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -4562,10 +5356,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -4573,10 +5368,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -4584,10 +5380,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -4595,7 +5392,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.is_kworker": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ProcessContext.Process.PIDContext.IsKworker + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.PIDContext.IsKworker }, Field: field, Weight: eval.FunctionWeight, @@ -4603,7 +5401,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.is_thread": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ProcessContext.Process.IsThread + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.IsThread }, Field: field, Weight: eval.FunctionWeight, @@ -4611,10 +5410,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.args": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.Args + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.ProcessContext.Parent) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -4622,10 +5422,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return []string{} } - return (*Event)(ctx.Object).ProcessContext.Parent.Argv + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.ProcessContext.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -4633,10 +5434,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return []string{} } - return (*Event)(ctx.Object).ProcessContext.Parent.Argv + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.ProcessContext.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -4644,10 +5446,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.args_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return false } - return (*Event)(ctx.Object).ProcessContext.Parent.ArgsTruncated + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.ProcessContext.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -4655,10 +5458,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return []string{} } - return (*Event)(ctx.Object).ProcessContext.Parent.Argv + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.ProcessContext.Parent) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -4666,10 +5470,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.argv0": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.Argv0 + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.ProcessContext.Parent) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -4677,10 +5482,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.cap_effective": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.CapEffective) + return int(ev.ProcessContext.Parent.Credentials.CapEffective) }, Field: field, Weight: eval.FunctionWeight, @@ -4688,10 +5494,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.cap_permitted": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.CapPermitted) + return int(ev.ProcessContext.Parent.Credentials.CapPermitted) }, Field: field, Weight: eval.FunctionWeight, @@ -4699,10 +5506,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.comm": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.Comm + return ev.ProcessContext.Parent.Comm }, Field: field, Weight: eval.FunctionWeight, @@ -4710,10 +5518,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.container.id": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.ContainerID + return ev.ProcessContext.Parent.ContainerID }, Field: field, Weight: eval.FunctionWeight, @@ -4721,10 +5530,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.cookie": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.Cookie) + return int(ev.ProcessContext.Parent.Cookie) }, Field: field, Weight: eval.FunctionWeight, @@ -4732,10 +5542,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.created_at": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.CreatedAt) + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.ProcessContext.Parent)) }, Field: field, Weight: eval.HandlerWeight, @@ -4743,10 +5554,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.egid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.EGID) + return int(ev.ProcessContext.Parent.Credentials.EGID) }, Field: field, Weight: eval.FunctionWeight, @@ -4754,10 +5566,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.egroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.EGroup + return ev.ProcessContext.Parent.Credentials.EGroup }, Field: field, Weight: eval.FunctionWeight, @@ -4765,10 +5578,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return []string{} } - return (*Event)(ctx.Object).ProcessContext.Parent.Envp + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.ProcessContext.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -4776,10 +5590,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return []string{} } - return (*Event)(ctx.Object).ProcessContext.Parent.Envs + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.ProcessContext.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -4787,10 +5602,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.envs_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return false } - return (*Event)(ctx.Object).ProcessContext.Parent.EnvsTruncated + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.ProcessContext.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -4798,10 +5614,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.euid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.EUID) + return int(ev.ProcessContext.Parent.Credentials.EUID) }, Field: field, Weight: eval.FunctionWeight, @@ -4809,10 +5626,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.euser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.EUser + return ev.ProcessContext.Parent.Credentials.EUser }, Field: field, Weight: eval.FunctionWeight, @@ -4820,13 +5638,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.CTime) + return int(ev.ProcessContext.Parent.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -4834,13 +5653,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Parent.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4848,13 +5668,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.GID) + return int(ev.ProcessContext.Parent.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -4862,13 +5683,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Parent.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -4876,13 +5698,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return false } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return false } - return (*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Parent.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -4890,13 +5713,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.Inode) + return int(ev.ProcessContext.Parent.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -4904,13 +5728,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.Mode) + return int(ev.ProcessContext.Parent.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -4918,13 +5743,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.MTime) + return int(ev.ProcessContext.Parent.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -4932,13 +5758,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.MountID) + return int(ev.ProcessContext.Parent.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -4947,13 +5774,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4962,7 +5790,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -4971,13 +5800,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4986,7 +5816,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -4994,13 +5825,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.ProcessContext.Parent.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -5008,13 +5840,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.UID) + return int(ev.ProcessContext.Parent.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -5022,13 +5855,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Parent.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -5036,10 +5870,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.fsgid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.FSGID) + return int(ev.ProcessContext.Parent.Credentials.FSGID) }, Field: field, Weight: eval.FunctionWeight, @@ -5047,10 +5882,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.fsgroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.FSGroup + return ev.ProcessContext.Parent.Credentials.FSGroup }, Field: field, Weight: eval.FunctionWeight, @@ -5058,10 +5894,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.fsuid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.FSUID) + return int(ev.ProcessContext.Parent.Credentials.FSUID) }, Field: field, Weight: eval.FunctionWeight, @@ -5069,10 +5906,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.fsuser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.FSUser + return ev.ProcessContext.Parent.Credentials.FSUser }, Field: field, Weight: eval.FunctionWeight, @@ -5080,10 +5918,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.GID) + return int(ev.ProcessContext.Parent.Credentials.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -5091,10 +5930,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.Group + return ev.ProcessContext.Parent.Credentials.Group }, Field: field, Weight: eval.FunctionWeight, @@ -5102,13 +5942,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime) + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -5116,13 +5957,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -5130,13 +5972,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID) + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -5144,13 +5987,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -5158,13 +6002,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return false } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return false } - return (*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -5172,13 +6017,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode) + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -5186,13 +6032,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -5200,13 +6047,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime) + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -5214,13 +6062,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID) + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -5229,13 +6078,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -5244,7 +6094,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -5253,13 +6104,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -5268,7 +6120,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -5276,13 +6129,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -5290,13 +6144,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID) + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -5304,13 +6159,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -5318,10 +6174,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.is_kworker": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return false } - return (*Event)(ctx.Object).ProcessContext.Parent.PIDContext.IsKworker + return ev.ProcessContext.Parent.PIDContext.IsKworker }, Field: field, Weight: eval.FunctionWeight, @@ -5329,10 +6186,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.is_thread": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return false } - return (*Event)(ctx.Object).ProcessContext.Parent.IsThread + return ev.ProcessContext.Parent.IsThread }, Field: field, Weight: eval.FunctionWeight, @@ -5340,10 +6198,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.pid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.PIDContext.Pid) + return int(ev.ProcessContext.Parent.PIDContext.Pid) }, Field: field, Weight: eval.FunctionWeight, @@ -5351,10 +6210,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.ppid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.PPid) + return int(ev.ProcessContext.Parent.PPid) }, Field: field, Weight: eval.FunctionWeight, @@ -5362,10 +6222,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.tid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.PIDContext.Tid) + return int(ev.ProcessContext.Parent.PIDContext.Tid) }, Field: field, Weight: eval.FunctionWeight, @@ -5373,10 +6234,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.tty_name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.TTYName + return ev.ProcessContext.Parent.TTYName }, Field: field, Weight: eval.FunctionWeight, @@ -5384,10 +6246,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.UID) + return int(ev.ProcessContext.Parent.Credentials.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -5395,10 +6258,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.User + return ev.ProcessContext.Parent.Credentials.User }, Field: field, Weight: eval.FunctionWeight, @@ -5406,7 +6270,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.pid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.PIDContext.Pid) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.PIDContext.Pid) }, Field: field, Weight: eval.FunctionWeight, @@ -5414,7 +6279,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ppid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.PPid) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.PPid) }, Field: field, Weight: eval.FunctionWeight, @@ -5422,7 +6288,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.tid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.PIDContext.Tid) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.PIDContext.Tid) }, Field: field, Weight: eval.FunctionWeight, @@ -5430,7 +6297,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.tty_name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.TTYName + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.TTYName }, Field: field, Weight: eval.FunctionWeight, @@ -5438,7 +6306,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.UID) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.Credentials.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -5446,7 +6315,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.User + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.Credentials.User }, Field: field, Weight: eval.FunctionWeight, @@ -5454,7 +6324,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.request": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Request) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Request) }, Field: field, Weight: eval.FunctionWeight, @@ -5462,7 +6333,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.PTrace.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -5470,15 +6342,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.args": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Args + result := ev.FieldHandlers.ResolveProcessArgs(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: 100 * eval.IteratorWeight, @@ -5486,15 +6365,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsFlags(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5502,15 +6388,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsOptions(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5518,15 +6411,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.args_truncated": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.ArgsTruncated + result := ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5534,15 +6434,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgv(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: 100 * eval.IteratorWeight, @@ -5550,15 +6457,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.argv0": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv0 + result := ev.FieldHandlers.ResolveProcessArgv0(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: 100 * eval.IteratorWeight, @@ -5566,6 +6480,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.cap_effective": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5575,6 +6494,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5582,6 +6502,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.cap_permitted": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5591,6 +6516,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5598,6 +6524,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.comm": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5607,6 +6538,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5614,6 +6546,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.container.id": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5623,6 +6560,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5630,6 +6568,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.cookie": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5639,6 +6582,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5646,15 +6590,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.created_at": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.CreatedAt) + result := int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &element.ProcessContext.Process)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5662,6 +6613,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.egid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5671,6 +6627,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5678,6 +6635,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.egroup": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5687,6 +6649,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5694,15 +6657,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Envp + result := ev.FieldHandlers.ResolveProcessEnvp(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5710,15 +6680,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Envs + result := ev.FieldHandlers.ResolveProcessEnvs(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5726,15 +6703,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.envs_truncated": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.EnvsTruncated + result := ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5742,6 +6726,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.euid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5751,6 +6740,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5758,6 +6748,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.euser": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5767,6 +6762,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5774,6 +6770,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.change_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5788,6 +6789,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5795,6 +6797,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.filesystem": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5805,10 +6813,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5816,6 +6825,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.gid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5830,6 +6844,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5837,6 +6852,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.group": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5847,10 +6868,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5858,6 +6880,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.in_upper_layer": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5868,10 +6896,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5879,6 +6908,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.inode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5893,6 +6927,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5900,6 +6935,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.mode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5914,6 +6954,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5921,6 +6962,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.modification_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5935,6 +6981,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5942,6 +6989,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.mount_id": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5956,6 +7008,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5964,6 +7017,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5974,10 +7033,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5986,15 +7046,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6003,6 +7070,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6013,10 +7086,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6025,15 +7099,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6041,6 +7122,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.rights": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6051,10 +7138,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.FileEvent.FileFields)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6062,6 +7150,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.uid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6076,6 +7169,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6083,6 +7177,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.user": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6093,10 +7193,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6104,6 +7205,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.fsgid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6113,6 +7219,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6120,6 +7227,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.fsgroup": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6129,6 +7241,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6136,6 +7249,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.fsuid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6145,6 +7263,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6152,6 +7271,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.fsuser": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6161,6 +7285,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6168,6 +7293,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.gid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6177,6 +7307,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6184,6 +7315,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.group": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6193,6 +7329,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6200,6 +7337,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.change_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6214,6 +7356,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6221,6 +7364,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.filesystem": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6231,10 +7380,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6242,6 +7392,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.gid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6256,6 +7411,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6263,6 +7419,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.group": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6273,10 +7435,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6284,6 +7447,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.in_upper_layer": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6294,10 +7463,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6305,6 +7475,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.inode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6319,6 +7494,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6326,6 +7502,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.mode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6340,6 +7521,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6347,6 +7529,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.modification_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6361,6 +7548,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6368,6 +7556,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.mount_id": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6382,6 +7575,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6390,6 +7584,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6400,10 +7600,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6412,15 +7613,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6429,6 +7637,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6439,10 +7653,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6451,15 +7666,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6467,6 +7689,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.rights": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6477,10 +7705,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6488,6 +7717,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.uid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6502,6 +7736,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6509,6 +7744,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.user": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6519,10 +7760,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6530,6 +7772,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.is_kworker": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6539,6 +7786,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6546,6 +7794,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.is_thread": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6555,6 +7808,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6562,6 +7816,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.pid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6571,6 +7830,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6578,6 +7838,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.ppid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6587,6 +7852,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6594,6 +7860,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.tid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6603,6 +7874,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6610,6 +7882,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.tty_name": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6619,6 +7896,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6626,6 +7904,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.uid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6635,6 +7918,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6642,6 +7926,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.user": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6651,6 +7940,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6658,7 +7948,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.args": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Args + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgs(ev, &ev.PTrace.Tracee.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -6666,7 +7957,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, &ev.PTrace.Tracee.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -6674,7 +7966,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, &ev.PTrace.Tracee.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -6682,7 +7975,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.args_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).PTrace.Tracee.Process.ArgsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &ev.PTrace.Tracee.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -6690,7 +7984,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv(ev, &ev.PTrace.Tracee.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -6698,7 +7993,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.argv0": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Argv0 + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv0(ev, &ev.PTrace.Tracee.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -6706,7 +8002,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.cap_effective": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.CapEffective) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.Credentials.CapEffective) }, Field: field, Weight: eval.FunctionWeight, @@ -6714,7 +8011,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.cap_permitted": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.CapPermitted) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.Credentials.CapPermitted) }, Field: field, Weight: eval.FunctionWeight, @@ -6722,7 +8020,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.comm": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Comm + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.Comm }, Field: field, Weight: eval.FunctionWeight, @@ -6730,7 +8029,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.container.id": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.ContainerID + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.ContainerID }, Field: field, Weight: eval.FunctionWeight, @@ -6738,7 +8038,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.cookie": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Cookie) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.Cookie) }, Field: field, Weight: eval.FunctionWeight, @@ -6746,7 +8047,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.created_at": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.CreatedAt) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &ev.PTrace.Tracee.Process)) }, Field: field, Weight: eval.HandlerWeight, @@ -6754,7 +8056,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.egid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.EGID) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.Credentials.EGID) }, Field: field, Weight: eval.FunctionWeight, @@ -6762,7 +8065,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.egroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.EGroup + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.Credentials.EGroup }, Field: field, Weight: eval.FunctionWeight, @@ -6770,7 +8074,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Envp + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.PTrace.Tracee.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -6778,7 +8083,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Envs + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvs(ev, &ev.PTrace.Tracee.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -6786,7 +8092,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.envs_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).PTrace.Tracee.Process.EnvsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &ev.PTrace.Tracee.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -6794,7 +8101,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.euid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.EUID) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.Credentials.EUID) }, Field: field, Weight: eval.FunctionWeight, @@ -6802,7 +8110,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.euser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.EUser + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.Credentials.EUser }, Field: field, Weight: eval.FunctionWeight, @@ -6810,10 +8119,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.CTime) + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -6821,10 +8131,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -6832,10 +8143,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.GID) + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -6843,10 +8155,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -6854,10 +8167,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return false } - return (*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -6865,10 +8179,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.Inode) + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -6876,10 +8191,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.Mode) + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -6887,10 +8203,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.MTime) + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -6898,10 +8215,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.MountID) + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -6910,10 +8228,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -6922,7 +8241,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -6931,10 +8251,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -6943,7 +8264,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -6951,10 +8273,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -6962,10 +8285,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.UID) + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -6973,10 +8297,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -6984,7 +8309,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.fsgid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.FSGID) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.Credentials.FSGID) }, Field: field, Weight: eval.FunctionWeight, @@ -6992,7 +8318,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.fsgroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.FSGroup + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.Credentials.FSGroup }, Field: field, Weight: eval.FunctionWeight, @@ -7000,7 +8327,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.fsuid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.FSUID) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.Credentials.FSUID) }, Field: field, Weight: eval.FunctionWeight, @@ -7008,7 +8336,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.fsuser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.FSUser + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.Credentials.FSUser }, Field: field, Weight: eval.FunctionWeight, @@ -7016,7 +8345,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.GID) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.Credentials.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -7024,7 +8354,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.Group + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.Credentials.Group }, Field: field, Weight: eval.FunctionWeight, @@ -7032,10 +8363,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime) + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -7043,10 +8375,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -7054,10 +8387,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID) + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -7065,10 +8399,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7076,10 +8411,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return false } - return (*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7087,10 +8423,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode) + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -7098,10 +8435,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -7109,10 +8447,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime) + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -7120,10 +8459,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID) + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -7132,10 +8472,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -7144,7 +8485,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -7153,10 +8495,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -7165,7 +8508,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -7173,10 +8517,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -7184,10 +8529,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID) + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -7195,10 +8541,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7206,7 +8553,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.is_kworker": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).PTrace.Tracee.Process.PIDContext.IsKworker + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.PIDContext.IsKworker }, Field: field, Weight: eval.FunctionWeight, @@ -7214,7 +8562,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.is_thread": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).PTrace.Tracee.Process.IsThread + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.IsThread }, Field: field, Weight: eval.FunctionWeight, @@ -7222,10 +8571,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.args": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Args + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.PTrace.Tracee.Parent) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -7233,10 +8583,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return []string{} } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Argv + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.PTrace.Tracee.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -7244,10 +8595,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return []string{} } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Argv + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.PTrace.Tracee.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -7255,10 +8607,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.args_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return false } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.ArgsTruncated + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.PTrace.Tracee.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -7266,10 +8619,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return []string{} } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Argv + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.PTrace.Tracee.Parent) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -7277,10 +8631,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.argv0": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Argv0 + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.PTrace.Tracee.Parent) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -7288,10 +8643,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.cap_effective": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.CapEffective) + return int(ev.PTrace.Tracee.Parent.Credentials.CapEffective) }, Field: field, Weight: eval.FunctionWeight, @@ -7299,10 +8655,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.cap_permitted": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.CapPermitted) + return int(ev.PTrace.Tracee.Parent.Credentials.CapPermitted) }, Field: field, Weight: eval.FunctionWeight, @@ -7310,10 +8667,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.comm": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Comm + return ev.PTrace.Tracee.Parent.Comm }, Field: field, Weight: eval.FunctionWeight, @@ -7321,10 +8679,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.container.id": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.ContainerID + return ev.PTrace.Tracee.Parent.ContainerID }, Field: field, Weight: eval.FunctionWeight, @@ -7332,10 +8691,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.cookie": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Cookie) + return int(ev.PTrace.Tracee.Parent.Cookie) }, Field: field, Weight: eval.FunctionWeight, @@ -7343,10 +8703,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.created_at": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.CreatedAt) + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.PTrace.Tracee.Parent)) }, Field: field, Weight: eval.HandlerWeight, @@ -7354,10 +8715,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.egid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.EGID) + return int(ev.PTrace.Tracee.Parent.Credentials.EGID) }, Field: field, Weight: eval.FunctionWeight, @@ -7365,10 +8727,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.egroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.EGroup + return ev.PTrace.Tracee.Parent.Credentials.EGroup }, Field: field, Weight: eval.FunctionWeight, @@ -7376,10 +8739,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return []string{} } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Envp + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.PTrace.Tracee.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -7387,10 +8751,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return []string{} } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Envs + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.PTrace.Tracee.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -7398,10 +8763,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.envs_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return false } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.EnvsTruncated + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.PTrace.Tracee.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -7409,10 +8775,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.euid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.EUID) + return int(ev.PTrace.Tracee.Parent.Credentials.EUID) }, Field: field, Weight: eval.FunctionWeight, @@ -7420,10 +8787,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.euser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.EUser + return ev.PTrace.Tracee.Parent.Credentials.EUser }, Field: field, Weight: eval.FunctionWeight, @@ -7431,13 +8799,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.CTime) + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -7445,13 +8814,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Parent.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -7459,13 +8829,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.GID) + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -7473,13 +8844,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7487,13 +8859,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return false } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return false } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7501,13 +8874,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.Inode) + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -7515,13 +8889,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.Mode) + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -7529,13 +8904,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.MTime) + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -7543,13 +8919,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.MountID) + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -7558,13 +8935,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -7573,7 +8951,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -7582,13 +8961,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -7597,7 +8977,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -7605,13 +8986,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -7619,13 +9001,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.UID) + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -7633,13 +9016,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7647,10 +9031,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.fsgid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.FSGID) + return int(ev.PTrace.Tracee.Parent.Credentials.FSGID) }, Field: field, Weight: eval.FunctionWeight, @@ -7658,10 +9043,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.fsgroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.FSGroup + return ev.PTrace.Tracee.Parent.Credentials.FSGroup }, Field: field, Weight: eval.FunctionWeight, @@ -7669,10 +9055,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.fsuid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.FSUID) + return int(ev.PTrace.Tracee.Parent.Credentials.FSUID) }, Field: field, Weight: eval.FunctionWeight, @@ -7680,10 +9067,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.fsuser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.FSUser + return ev.PTrace.Tracee.Parent.Credentials.FSUser }, Field: field, Weight: eval.FunctionWeight, @@ -7691,10 +9079,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.GID) + return int(ev.PTrace.Tracee.Parent.Credentials.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -7702,10 +9091,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.Group + return ev.PTrace.Tracee.Parent.Credentials.Group }, Field: field, Weight: eval.FunctionWeight, @@ -7713,13 +9103,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime) + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -7727,13 +9118,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -7741,13 +9133,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID) + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -7755,13 +9148,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7769,13 +9163,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return false } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return false } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7783,13 +9178,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode) + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -7797,13 +9193,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -7811,13 +9208,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime) + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -7825,13 +9223,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID) + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -7840,13 +9239,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -7855,7 +9255,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -7864,13 +9265,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -7879,7 +9281,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -7887,13 +9290,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -7901,13 +9305,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID) + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -7915,13 +9320,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7929,10 +9335,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.is_kworker": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return false } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.PIDContext.IsKworker + return ev.PTrace.Tracee.Parent.PIDContext.IsKworker }, Field: field, Weight: eval.FunctionWeight, @@ -7940,10 +9347,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.is_thread": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return false } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.IsThread + return ev.PTrace.Tracee.Parent.IsThread }, Field: field, Weight: eval.FunctionWeight, @@ -7951,10 +9359,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.pid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.PIDContext.Pid) + return int(ev.PTrace.Tracee.Parent.PIDContext.Pid) }, Field: field, Weight: eval.FunctionWeight, @@ -7962,10 +9371,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.ppid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.PPid) + return int(ev.PTrace.Tracee.Parent.PPid) }, Field: field, Weight: eval.FunctionWeight, @@ -7973,10 +9383,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.tid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.PIDContext.Tid) + return int(ev.PTrace.Tracee.Parent.PIDContext.Tid) }, Field: field, Weight: eval.FunctionWeight, @@ -7984,10 +9395,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.tty_name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.TTYName + return ev.PTrace.Tracee.Parent.TTYName }, Field: field, Weight: eval.FunctionWeight, @@ -7995,10 +9407,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.UID) + return int(ev.PTrace.Tracee.Parent.Credentials.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -8006,10 +9419,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.User + return ev.PTrace.Tracee.Parent.Credentials.User }, Field: field, Weight: eval.FunctionWeight, @@ -8017,7 +9431,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.pid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.PIDContext.Pid) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.PIDContext.Pid) }, Field: field, Weight: eval.FunctionWeight, @@ -8025,7 +9440,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ppid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.PPid) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.PPid) }, Field: field, Weight: eval.FunctionWeight, @@ -8033,7 +9449,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.tid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.PIDContext.Tid) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.PIDContext.Tid) }, Field: field, Weight: eval.FunctionWeight, @@ -8041,7 +9458,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.tty_name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.TTYName + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.TTYName }, Field: field, Weight: eval.FunctionWeight, @@ -8049,7 +9467,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.UID) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.Credentials.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -8057,7 +9476,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.User + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.Credentials.User }, Field: field, Weight: eval.FunctionWeight, @@ -8065,7 +9485,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.RemoveXAttr.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -8073,7 +9494,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.destination.name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).RemoveXAttr.Name + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveXAttrName(ev, &ev.RemoveXAttr) }, Field: field, Weight: eval.HandlerWeight, @@ -8081,7 +9503,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.destination.namespace": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).RemoveXAttr.Namespace + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveXAttrNamespace(ev, &ev.RemoveXAttr) }, Field: field, Weight: eval.HandlerWeight, @@ -8089,7 +9512,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).RemoveXAttr.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.RemoveXAttr.File) }, Field: field, Weight: eval.HandlerWeight, @@ -8097,7 +9521,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.RemoveXAttr.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -8105,7 +9530,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).RemoveXAttr.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.RemoveXAttr.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8113,7 +9539,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).RemoveXAttr.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.RemoveXAttr.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8121,7 +9548,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.RemoveXAttr.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -8129,7 +9557,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.RemoveXAttr.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -8137,7 +9566,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.RemoveXAttr.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -8145,7 +9575,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.RemoveXAttr.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -8154,7 +9585,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).RemoveXAttr.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.RemoveXAttr.File) }, Field: field, Weight: eval.HandlerWeight, @@ -8163,7 +9595,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).RemoveXAttr.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.RemoveXAttr.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -8172,7 +9605,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).RemoveXAttr.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.RemoveXAttr.File) }, Field: field, Weight: eval.HandlerWeight, @@ -8181,7 +9615,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).RemoveXAttr.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.RemoveXAttr.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -8189,7 +9624,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.RemoveXAttr.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -8197,7 +9633,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.RemoveXAttr.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -8205,7 +9642,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).RemoveXAttr.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.RemoveXAttr.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8213,7 +9651,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.RemoveXAttr.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -8221,7 +9660,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Rename.Old.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -8229,7 +9669,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Rename.New.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -8237,7 +9678,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.New.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Rename.New) }, Field: field, Weight: eval.HandlerWeight, @@ -8245,7 +9687,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Rename.New.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -8253,7 +9696,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.New.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Rename.New.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8261,7 +9705,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Rename.New.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Rename.New.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8269,7 +9714,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Rename.New.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -8277,7 +9723,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Rename.New.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -8285,7 +9732,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Rename.New.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -8293,7 +9741,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Rename.New.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -8302,7 +9751,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.New.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.New) }, Field: field, Weight: eval.HandlerWeight, @@ -8311,7 +9761,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Rename.New.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.New)) }, Field: field, Weight: eval.HandlerWeight, @@ -8320,7 +9771,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.New.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.New) }, Field: field, Weight: eval.HandlerWeight, @@ -8329,7 +9781,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Rename.New.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.New)) }, Field: field, Weight: eval.HandlerWeight, @@ -8337,7 +9790,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Rename.New.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -8345,7 +9799,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Rename.New.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -8353,7 +9808,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.New.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Rename.New.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8361,7 +9817,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.Old.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Rename.Old) }, Field: field, Weight: eval.HandlerWeight, @@ -8369,7 +9826,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Rename.Old.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -8377,7 +9835,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.Old.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Rename.Old.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8385,7 +9844,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Rename.Old.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Rename.Old.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8393,7 +9853,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Rename.Old.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -8401,7 +9862,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Rename.Old.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -8409,7 +9871,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Rename.Old.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -8417,7 +9880,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Rename.Old.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -8426,7 +9890,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.Old.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.Old) }, Field: field, Weight: eval.HandlerWeight, @@ -8435,7 +9900,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Rename.Old.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.Old)) }, Field: field, Weight: eval.HandlerWeight, @@ -8444,7 +9910,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.Old.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.Old) }, Field: field, Weight: eval.HandlerWeight, @@ -8453,7 +9920,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Rename.Old.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.Old)) }, Field: field, Weight: eval.HandlerWeight, @@ -8461,7 +9929,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Rename.Old.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -8469,7 +9938,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Rename.Old.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -8477,7 +9947,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.Old.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Rename.Old.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8485,7 +9956,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Rename.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -8493,7 +9965,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Rmdir.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -8501,7 +9974,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rmdir.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Rmdir.File) }, Field: field, Weight: eval.HandlerWeight, @@ -8509,7 +9983,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Rmdir.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -8517,7 +9992,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rmdir.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Rmdir.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8525,7 +10001,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Rmdir.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Rmdir.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8533,7 +10010,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Rmdir.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -8541,7 +10019,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Rmdir.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -8549,7 +10028,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Rmdir.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -8557,7 +10037,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Rmdir.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -8566,7 +10047,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rmdir.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rmdir.File) }, Field: field, Weight: eval.HandlerWeight, @@ -8575,7 +10057,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Rmdir.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rmdir.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -8584,7 +10067,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rmdir.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Rmdir.File) }, Field: field, Weight: eval.HandlerWeight, @@ -8593,7 +10077,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Rmdir.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Rmdir.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -8601,7 +10086,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Rmdir.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -8609,7 +10095,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Rmdir.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -8617,7 +10104,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rmdir.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Rmdir.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8625,7 +10113,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Rmdir.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -8633,7 +10122,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "selinux.bool.name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SELinux.BoolName + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveSELinuxBoolName(ev, &ev.SELinux) }, Field: field, Weight: eval.HandlerWeight, @@ -8641,7 +10131,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "selinux.bool.state": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SELinux.BoolChangeValue + ev := ctx.Event.(*Event) + return ev.SELinux.BoolChangeValue }, Field: field, Weight: eval.FunctionWeight, @@ -8649,7 +10140,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "selinux.bool_commit.state": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).SELinux.BoolCommitValue + ev := ctx.Event.(*Event) + return ev.SELinux.BoolCommitValue }, Field: field, Weight: eval.FunctionWeight, @@ -8657,7 +10149,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "selinux.enforce.status": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SELinux.EnforceStatus + ev := ctx.Event.(*Event) + return ev.SELinux.EnforceStatus }, Field: field, Weight: eval.FunctionWeight, @@ -8665,7 +10158,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setgid.egid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetGID.EGID) + ev := ctx.Event.(*Event) + return int(ev.SetGID.EGID) }, Field: field, Weight: eval.FunctionWeight, @@ -8673,7 +10167,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setgid.egroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetGID.EGroup + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveSetgidEGroup(ev, &ev.SetGID) }, Field: field, Weight: eval.HandlerWeight, @@ -8681,7 +10176,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setgid.fsgid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetGID.FSGID) + ev := ctx.Event.(*Event) + return int(ev.SetGID.FSGID) }, Field: field, Weight: eval.FunctionWeight, @@ -8689,7 +10185,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setgid.fsgroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetGID.FSGroup + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveSetgidFSGroup(ev, &ev.SetGID) }, Field: field, Weight: eval.HandlerWeight, @@ -8697,7 +10194,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setgid.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetGID.GID) + ev := ctx.Event.(*Event) + return int(ev.SetGID.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -8705,7 +10203,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setgid.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetGID.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveSetgidGroup(ev, &ev.SetGID) }, Field: field, Weight: eval.HandlerWeight, @@ -8713,7 +10212,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setuid.euid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetUID.EUID) + ev := ctx.Event.(*Event) + return int(ev.SetUID.EUID) }, Field: field, Weight: eval.FunctionWeight, @@ -8721,7 +10221,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setuid.euser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetUID.EUser + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveSetuidEUser(ev, &ev.SetUID) }, Field: field, Weight: eval.HandlerWeight, @@ -8729,7 +10230,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setuid.fsuid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetUID.FSUID) + ev := ctx.Event.(*Event) + return int(ev.SetUID.FSUID) }, Field: field, Weight: eval.FunctionWeight, @@ -8737,7 +10239,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setuid.fsuser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetUID.FSUser + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveSetuidFSUser(ev, &ev.SetUID) }, Field: field, Weight: eval.HandlerWeight, @@ -8745,7 +10248,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setuid.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetUID.UID) + ev := ctx.Event.(*Event) + return int(ev.SetUID.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -8753,7 +10257,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setuid.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetUID.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveSetuidUser(ev, &ev.SetUID) }, Field: field, Weight: eval.HandlerWeight, @@ -8761,7 +10266,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.SetXAttr.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -8769,7 +10275,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.destination.name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetXAttr.Name + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveXAttrName(ev, &ev.SetXAttr) }, Field: field, Weight: eval.HandlerWeight, @@ -8777,7 +10284,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.destination.namespace": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetXAttr.Namespace + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveXAttrNamespace(ev, &ev.SetXAttr) }, Field: field, Weight: eval.HandlerWeight, @@ -8785,7 +10293,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetXAttr.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.SetXAttr.File) }, Field: field, Weight: eval.HandlerWeight, @@ -8793,7 +10302,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.SetXAttr.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -8801,7 +10311,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetXAttr.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.SetXAttr.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8809,7 +10320,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).SetXAttr.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.SetXAttr.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8817,7 +10329,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.SetXAttr.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -8825,7 +10338,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.SetXAttr.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -8833,7 +10347,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.SetXAttr.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -8841,7 +10356,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.SetXAttr.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -8850,7 +10366,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetXAttr.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.SetXAttr.File) }, Field: field, Weight: eval.HandlerWeight, @@ -8859,7 +10376,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).SetXAttr.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.SetXAttr.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -8868,7 +10386,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetXAttr.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.SetXAttr.File) }, Field: field, Weight: eval.HandlerWeight, @@ -8877,7 +10396,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).SetXAttr.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.SetXAttr.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -8885,7 +10405,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.SetXAttr.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -8893,7 +10414,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.SetXAttr.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -8901,7 +10423,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetXAttr.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.SetXAttr.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8909,7 +10432,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.SetXAttr.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -8917,7 +10441,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.pid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.PID) + ev := ctx.Event.(*Event) + return int(ev.Signal.PID) }, Field: field, Weight: eval.FunctionWeight, @@ -8925,7 +10450,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Signal.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -8933,15 +10459,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.args": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Args + result := ev.FieldHandlers.ResolveProcessArgs(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: 100 * eval.IteratorWeight, @@ -8949,15 +10482,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsFlags(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8965,15 +10505,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsOptions(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8981,15 +10528,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.args_truncated": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.ArgsTruncated + result := ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8997,15 +10551,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgv(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: 100 * eval.IteratorWeight, @@ -9013,15 +10574,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.argv0": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv0 + result := ev.FieldHandlers.ResolveProcessArgv0(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: 100 * eval.IteratorWeight, @@ -9029,6 +10597,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.cap_effective": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9038,6 +10611,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9045,6 +10619,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.cap_permitted": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9054,6 +10633,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9061,6 +10641,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.comm": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9070,6 +10655,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9077,6 +10663,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.container.id": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9086,6 +10677,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9093,6 +10685,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.cookie": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9102,6 +10699,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9109,15 +10707,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.created_at": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.CreatedAt) + result := int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &element.ProcessContext.Process)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9125,6 +10730,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.egid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9134,6 +10744,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9141,6 +10752,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.egroup": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9150,6 +10766,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9157,15 +10774,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Envp + result := ev.FieldHandlers.ResolveProcessEnvp(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9173,15 +10797,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Envs + result := ev.FieldHandlers.ResolveProcessEnvs(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9189,15 +10820,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.envs_truncated": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.EnvsTruncated + result := ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9205,6 +10843,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.euid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9214,6 +10857,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9221,6 +10865,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.euser": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9230,6 +10879,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9237,6 +10887,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.change_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9251,6 +10906,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9258,6 +10914,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.filesystem": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9268,10 +10930,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9279,6 +10942,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.gid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9293,6 +10961,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9300,6 +10969,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.group": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9310,10 +10985,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9321,6 +10997,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.in_upper_layer": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9331,10 +11013,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9342,6 +11025,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.inode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9356,6 +11044,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9363,6 +11052,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.mode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9377,6 +11071,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9384,6 +11079,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.modification_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9398,6 +11098,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9405,6 +11106,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.mount_id": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9419,6 +11125,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9427,6 +11134,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9437,10 +11150,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9449,15 +11163,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9466,6 +11187,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9476,10 +11203,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9488,15 +11216,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9504,6 +11239,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.rights": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9514,10 +11255,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.FileEvent.FileFields)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9525,6 +11267,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.uid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9539,6 +11286,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9546,6 +11294,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.user": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9556,10 +11310,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9567,6 +11322,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.fsgid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9576,6 +11336,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9583,6 +11344,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.fsgroup": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9592,6 +11358,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9599,6 +11366,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.fsuid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9608,6 +11380,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9615,6 +11388,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.fsuser": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9624,6 +11402,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9631,6 +11410,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.gid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9640,6 +11424,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9647,6 +11432,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.group": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9656,6 +11446,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9663,6 +11454,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.change_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9677,6 +11473,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9684,6 +11481,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.filesystem": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9694,10 +11497,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9705,6 +11509,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.gid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9719,6 +11528,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9726,6 +11536,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.group": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9736,10 +11552,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9747,6 +11564,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.in_upper_layer": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9757,10 +11580,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9768,6 +11592,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.inode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9782,6 +11611,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9789,6 +11619,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.mode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9803,6 +11638,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9810,6 +11646,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.modification_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9824,6 +11665,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9831,6 +11673,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.mount_id": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9845,6 +11692,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9853,6 +11701,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9863,10 +11717,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9875,15 +11730,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9892,6 +11754,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9902,10 +11770,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9914,15 +11783,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9930,6 +11806,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.rights": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9940,10 +11822,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9951,6 +11834,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.uid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9965,6 +11853,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9972,6 +11861,12 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.user": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9982,10 +11877,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9993,6 +11889,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.is_kworker": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -10002,6 +11903,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -10009,6 +11911,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.is_thread": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -10018,6 +11925,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -10025,6 +11933,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.pid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -10034,6 +11947,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -10041,6 +11955,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.ppid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -10050,6 +11969,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -10057,6 +11977,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.tid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -10066,6 +11991,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -10073,6 +11999,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.tty_name": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -10082,6 +12013,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -10089,6 +12021,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.uid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -10098,6 +12035,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -10105,6 +12043,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.user": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -10114,6 +12057,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -10121,7 +12065,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.args": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Args + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgs(ev, &ev.Signal.Target.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -10129,7 +12074,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Signal.Target.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, &ev.Signal.Target.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -10137,7 +12083,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Signal.Target.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, &ev.Signal.Target.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -10145,7 +12092,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.args_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Signal.Target.Process.ArgsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &ev.Signal.Target.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -10153,7 +12101,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Signal.Target.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv(ev, &ev.Signal.Target.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -10161,7 +12110,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.argv0": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Argv0 + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv0(ev, &ev.Signal.Target.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -10169,7 +12119,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.cap_effective": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.CapEffective) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.Credentials.CapEffective) }, Field: field, Weight: eval.FunctionWeight, @@ -10177,7 +12128,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.cap_permitted": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.CapPermitted) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.Credentials.CapPermitted) }, Field: field, Weight: eval.FunctionWeight, @@ -10185,7 +12137,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.comm": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Comm + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.Comm }, Field: field, Weight: eval.FunctionWeight, @@ -10193,7 +12146,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.container.id": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.ContainerID + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.ContainerID }, Field: field, Weight: eval.FunctionWeight, @@ -10201,7 +12155,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.cookie": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Cookie) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.Cookie) }, Field: field, Weight: eval.FunctionWeight, @@ -10209,7 +12164,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.created_at": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.CreatedAt) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &ev.Signal.Target.Process)) }, Field: field, Weight: eval.HandlerWeight, @@ -10217,7 +12173,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.egid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.EGID) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.Credentials.EGID) }, Field: field, Weight: eval.FunctionWeight, @@ -10225,7 +12182,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.egroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.EGroup + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.Credentials.EGroup }, Field: field, Weight: eval.FunctionWeight, @@ -10233,7 +12191,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Signal.Target.Process.Envp + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.Signal.Target.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -10241,7 +12200,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Signal.Target.Process.Envs + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvs(ev, &ev.Signal.Target.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -10249,7 +12209,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.envs_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Signal.Target.Process.EnvsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &ev.Signal.Target.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -10257,7 +12218,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.euid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.EUID) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.Credentials.EUID) }, Field: field, Weight: eval.FunctionWeight, @@ -10265,7 +12227,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.euser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.EUser + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.Credentials.EUser }, Field: field, Weight: eval.FunctionWeight, @@ -10273,10 +12236,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.CTime) + return int(ev.Signal.Target.Process.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -10284,10 +12248,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Signal.Target.Process.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -10295,10 +12260,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.GID) + return int(ev.Signal.Target.Process.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -10306,10 +12272,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -10317,10 +12284,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return false } - return (*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -10328,10 +12296,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.Inode) + return int(ev.Signal.Target.Process.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -10339,10 +12308,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.Mode) + return int(ev.Signal.Target.Process.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -10350,10 +12320,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.MTime) + return int(ev.Signal.Target.Process.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -10361,10 +12332,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.MountID) + return int(ev.Signal.Target.Process.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -10373,10 +12345,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Signal.Target.Process.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -10385,7 +12358,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Signal.Target.Process.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -10394,10 +12368,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Signal.Target.Process.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -10406,7 +12381,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Signal.Target.Process.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -10414,10 +12390,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Signal.Target.Process.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -10425,10 +12402,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.UID) + return int(ev.Signal.Target.Process.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -10436,10 +12414,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -10447,7 +12426,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.fsgid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.FSGID) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.Credentials.FSGID) }, Field: field, Weight: eval.FunctionWeight, @@ -10455,7 +12435,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.fsgroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.FSGroup + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.Credentials.FSGroup }, Field: field, Weight: eval.FunctionWeight, @@ -10463,7 +12444,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.fsuid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.FSUID) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.Credentials.FSUID) }, Field: field, Weight: eval.FunctionWeight, @@ -10471,7 +12453,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.fsuser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.FSUser + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.Credentials.FSUser }, Field: field, Weight: eval.FunctionWeight, @@ -10479,7 +12462,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.GID) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.Credentials.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -10487,7 +12471,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.Group + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.Credentials.Group }, Field: field, Weight: eval.FunctionWeight, @@ -10495,10 +12480,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime) + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -10506,10 +12492,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -10517,10 +12504,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID) + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -10528,10 +12516,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -10539,10 +12528,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return false } - return (*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -10550,10 +12540,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode) + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -10561,10 +12552,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -10572,10 +12564,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime) + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -10583,10 +12576,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID) + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -10595,10 +12589,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -10607,7 +12602,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -10616,10 +12612,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -10628,7 +12625,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -10636,10 +12634,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -10647,10 +12646,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID) + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -10658,10 +12658,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -10669,7 +12670,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.is_kworker": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Signal.Target.Process.PIDContext.IsKworker + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.PIDContext.IsKworker }, Field: field, Weight: eval.FunctionWeight, @@ -10677,7 +12679,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.is_thread": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Signal.Target.Process.IsThread + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.IsThread }, Field: field, Weight: eval.FunctionWeight, @@ -10685,10 +12688,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.args": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.Args + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.Signal.Target.Parent) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -10696,10 +12700,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return []string{} } - return (*Event)(ctx.Object).Signal.Target.Parent.Argv + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.Signal.Target.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -10707,10 +12712,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return []string{} } - return (*Event)(ctx.Object).Signal.Target.Parent.Argv + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.Signal.Target.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -10718,10 +12724,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.args_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return false } - return (*Event)(ctx.Object).Signal.Target.Parent.ArgsTruncated + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.Signal.Target.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -10729,10 +12736,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return []string{} } - return (*Event)(ctx.Object).Signal.Target.Parent.Argv + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.Signal.Target.Parent) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -10740,10 +12748,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.argv0": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.Argv0 + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.Signal.Target.Parent) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -10751,10 +12760,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.cap_effective": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.CapEffective) + return int(ev.Signal.Target.Parent.Credentials.CapEffective) }, Field: field, Weight: eval.FunctionWeight, @@ -10762,10 +12772,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.cap_permitted": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.CapPermitted) + return int(ev.Signal.Target.Parent.Credentials.CapPermitted) }, Field: field, Weight: eval.FunctionWeight, @@ -10773,10 +12784,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.comm": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.Comm + return ev.Signal.Target.Parent.Comm }, Field: field, Weight: eval.FunctionWeight, @@ -10784,10 +12796,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.container.id": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.ContainerID + return ev.Signal.Target.Parent.ContainerID }, Field: field, Weight: eval.FunctionWeight, @@ -10795,10 +12808,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.cookie": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.Cookie) + return int(ev.Signal.Target.Parent.Cookie) }, Field: field, Weight: eval.FunctionWeight, @@ -10806,10 +12820,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.created_at": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.CreatedAt) + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.Signal.Target.Parent)) }, Field: field, Weight: eval.HandlerWeight, @@ -10817,10 +12832,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.egid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.EGID) + return int(ev.Signal.Target.Parent.Credentials.EGID) }, Field: field, Weight: eval.FunctionWeight, @@ -10828,10 +12844,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.egroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.EGroup + return ev.Signal.Target.Parent.Credentials.EGroup }, Field: field, Weight: eval.FunctionWeight, @@ -10839,10 +12856,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return []string{} } - return (*Event)(ctx.Object).Signal.Target.Parent.Envp + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.Signal.Target.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -10850,10 +12868,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return []string{} } - return (*Event)(ctx.Object).Signal.Target.Parent.Envs + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.Signal.Target.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -10861,10 +12880,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.envs_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return false } - return (*Event)(ctx.Object).Signal.Target.Parent.EnvsTruncated + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.Signal.Target.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -10872,10 +12892,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.euid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.EUID) + return int(ev.Signal.Target.Parent.Credentials.EUID) }, Field: field, Weight: eval.FunctionWeight, @@ -10883,10 +12904,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.euser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.EUser + return ev.Signal.Target.Parent.Credentials.EUser }, Field: field, Weight: eval.FunctionWeight, @@ -10894,13 +12916,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.CTime) + return int(ev.Signal.Target.Parent.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -10908,13 +12931,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Parent.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -10922,13 +12946,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.GID) + return int(ev.Signal.Target.Parent.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -10936,13 +12961,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Parent.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -10950,13 +12976,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return false } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return false } - return (*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Parent.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -10964,13 +12991,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.Inode) + return int(ev.Signal.Target.Parent.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -10978,13 +13006,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.Mode) + return int(ev.Signal.Target.Parent.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -10992,13 +13021,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.MTime) + return int(ev.Signal.Target.Parent.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -11006,13 +13036,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.MountID) + return int(ev.Signal.Target.Parent.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -11021,13 +13052,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -11036,7 +13068,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -11045,13 +13078,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -11060,7 +13094,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -11068,13 +13103,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Signal.Target.Parent.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -11082,13 +13118,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.UID) + return int(ev.Signal.Target.Parent.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -11096,13 +13133,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Parent.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11110,10 +13148,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.fsgid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.FSGID) + return int(ev.Signal.Target.Parent.Credentials.FSGID) }, Field: field, Weight: eval.FunctionWeight, @@ -11121,10 +13160,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.fsgroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.FSGroup + return ev.Signal.Target.Parent.Credentials.FSGroup }, Field: field, Weight: eval.FunctionWeight, @@ -11132,10 +13172,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.fsuid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.FSUID) + return int(ev.Signal.Target.Parent.Credentials.FSUID) }, Field: field, Weight: eval.FunctionWeight, @@ -11143,10 +13184,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.fsuser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.FSUser + return ev.Signal.Target.Parent.Credentials.FSUser }, Field: field, Weight: eval.FunctionWeight, @@ -11154,10 +13196,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.GID) + return int(ev.Signal.Target.Parent.Credentials.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -11165,10 +13208,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.Group + return ev.Signal.Target.Parent.Credentials.Group }, Field: field, Weight: eval.FunctionWeight, @@ -11176,13 +13220,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime) + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -11190,13 +13235,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -11204,13 +13250,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID) + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -11218,13 +13265,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11232,13 +13280,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return false } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return false } - return (*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11246,13 +13295,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode) + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -11260,13 +13310,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -11274,13 +13325,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime) + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -11288,13 +13340,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID) + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -11303,13 +13356,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -11318,7 +13372,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -11327,13 +13382,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -11342,7 +13398,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -11350,13 +13407,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -11364,13 +13422,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID) + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -11378,13 +13437,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11392,10 +13452,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.is_kworker": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return false } - return (*Event)(ctx.Object).Signal.Target.Parent.PIDContext.IsKworker + return ev.Signal.Target.Parent.PIDContext.IsKworker }, Field: field, Weight: eval.FunctionWeight, @@ -11403,10 +13464,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.is_thread": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return false } - return (*Event)(ctx.Object).Signal.Target.Parent.IsThread + return ev.Signal.Target.Parent.IsThread }, Field: field, Weight: eval.FunctionWeight, @@ -11414,10 +13476,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.pid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.PIDContext.Pid) + return int(ev.Signal.Target.Parent.PIDContext.Pid) }, Field: field, Weight: eval.FunctionWeight, @@ -11425,10 +13488,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.ppid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.PPid) + return int(ev.Signal.Target.Parent.PPid) }, Field: field, Weight: eval.FunctionWeight, @@ -11436,10 +13500,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.tid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.PIDContext.Tid) + return int(ev.Signal.Target.Parent.PIDContext.Tid) }, Field: field, Weight: eval.FunctionWeight, @@ -11447,10 +13512,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.tty_name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.TTYName + return ev.Signal.Target.Parent.TTYName }, Field: field, Weight: eval.FunctionWeight, @@ -11458,10 +13524,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.UID) + return int(ev.Signal.Target.Parent.Credentials.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -11469,10 +13536,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.User + return ev.Signal.Target.Parent.Credentials.User }, Field: field, Weight: eval.FunctionWeight, @@ -11480,7 +13548,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.pid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.PIDContext.Pid) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.PIDContext.Pid) }, Field: field, Weight: eval.FunctionWeight, @@ -11488,7 +13557,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ppid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.PPid) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.PPid) }, Field: field, Weight: eval.FunctionWeight, @@ -11496,7 +13566,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.tid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.PIDContext.Tid) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.PIDContext.Tid) }, Field: field, Weight: eval.FunctionWeight, @@ -11504,7 +13575,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.tty_name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.TTYName + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.TTYName }, Field: field, Weight: eval.FunctionWeight, @@ -11512,7 +13584,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.UID) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.Credentials.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -11520,7 +13593,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.User + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.Credentials.User }, Field: field, Weight: eval.FunctionWeight, @@ -11528,7 +13602,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.type": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Type) + ev := ctx.Event.(*Event) + return int(ev.Signal.Type) }, Field: field, Weight: eval.FunctionWeight, @@ -11536,7 +13611,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Splice.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -11544,7 +13620,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Splice.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Splice.File) }, Field: field, Weight: eval.HandlerWeight, @@ -11552,7 +13629,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Splice.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -11560,7 +13638,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Splice.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Splice.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11568,7 +13647,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Splice.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Splice.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11576,7 +13656,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Splice.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -11584,7 +13665,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Splice.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -11592,7 +13674,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Splice.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -11600,7 +13683,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Splice.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -11609,7 +13693,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Splice.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Splice.File) }, Field: field, Weight: eval.HandlerWeight, @@ -11618,7 +13703,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Splice.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Splice.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -11627,7 +13713,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Splice.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Splice.File) }, Field: field, Weight: eval.HandlerWeight, @@ -11636,7 +13723,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Splice.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Splice.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -11644,7 +13732,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Splice.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -11652,7 +13741,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Splice.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -11660,7 +13750,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Splice.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Splice.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11668,7 +13759,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.pipe_entry_flag": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.PipeEntryFlag) + ev := ctx.Event.(*Event) + return int(ev.Splice.PipeEntryFlag) }, Field: field, Weight: eval.FunctionWeight, @@ -11676,7 +13768,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.pipe_exit_flag": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.PipeExitFlag) + ev := ctx.Event.(*Event) + return int(ev.Splice.PipeExitFlag) }, Field: field, Weight: eval.FunctionWeight, @@ -11684,7 +13777,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Splice.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -11692,7 +13786,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Unlink.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -11700,7 +13795,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Unlink.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Unlink.File) }, Field: field, Weight: eval.HandlerWeight, @@ -11708,7 +13804,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Unlink.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -11716,7 +13813,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Unlink.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Unlink.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11724,7 +13822,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Unlink.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Unlink.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11732,7 +13831,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Unlink.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -11740,7 +13840,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Unlink.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -11748,7 +13849,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Unlink.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -11756,7 +13858,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Unlink.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -11765,7 +13868,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Unlink.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Unlink.File) }, Field: field, Weight: eval.HandlerWeight, @@ -11774,7 +13878,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Unlink.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Unlink.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -11783,7 +13888,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Unlink.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Unlink.File) }, Field: field, Weight: eval.HandlerWeight, @@ -11792,7 +13898,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Unlink.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Unlink.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -11800,7 +13907,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Unlink.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -11808,7 +13916,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Unlink.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -11816,7 +13925,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Unlink.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Unlink.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11824,7 +13934,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.flags": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.Flags) + ev := ctx.Event.(*Event) + return int(ev.Unlink.Flags) }, Field: field, Weight: eval.FunctionWeight, @@ -11832,7 +13943,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Unlink.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -11840,7 +13952,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unload_module.name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).UnloadModule.Name + ev := ctx.Event.(*Event) + return ev.UnloadModule.Name }, Field: field, Weight: eval.FunctionWeight, @@ -11848,7 +13961,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unload_module.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).UnloadModule.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.UnloadModule.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -11856,7 +13970,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Utimes.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -11864,7 +13979,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Utimes.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Utimes.File) }, Field: field, Weight: eval.HandlerWeight, @@ -11872,7 +13988,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Utimes.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -11880,7 +13997,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Utimes.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Utimes.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11888,7 +14006,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Utimes.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Utimes.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11896,7 +14015,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Utimes.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -11904,7 +14024,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Utimes.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -11912,7 +14033,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Utimes.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -11920,7 +14042,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Utimes.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -11929,7 +14052,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Utimes.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Utimes.File) }, Field: field, Weight: eval.HandlerWeight, @@ -11938,7 +14062,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Utimes.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Utimes.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -11947,7 +14072,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Utimes.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Utimes.File) }, Field: field, Weight: eval.HandlerWeight, @@ -11956,7 +14082,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Utimes.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Utimes.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -11964,7 +14091,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Utimes.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -11972,7 +14100,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Utimes.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -11980,7 +14109,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Utimes.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Utimes.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11988,7 +14118,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Utimes.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -11996,7 +14127,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval } return nil, &eval.ErrFieldNotFound{Field: field} } -func (e *Event) GetFields() []eval.Field { +func (ev *Event) GetFields() []eval.Field { return []eval.Field{ "async", "bind.addr.family", @@ -13072,731 +15203,731 @@ func (e *Event) GetFields() []eval.Field { "utimes.retval", } } -func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { +func (ev *Event) GetFieldValue(field eval.Field) (interface{}, error) { switch field { case "async": - return e.Async, nil + return ev.Async, nil case "bind.addr.family": - return int(e.Bind.AddrFamily), nil + return int(ev.Bind.AddrFamily), nil case "bind.addr.ip": - return e.Bind.Addr.IPNet, nil + return ev.Bind.Addr.IPNet, nil case "bind.addr.port": - return int(e.Bind.Addr.Port), nil + return int(ev.Bind.Addr.Port), nil case "bind.retval": - return int(e.Bind.SyscallEvent.Retval), nil + return int(ev.Bind.SyscallEvent.Retval), nil case "bpf.cmd": - return int(e.BPF.Cmd), nil + return int(ev.BPF.Cmd), nil case "bpf.map.name": - return e.BPF.Map.Name, nil + return ev.BPF.Map.Name, nil case "bpf.map.type": - return int(e.BPF.Map.Type), nil + return int(ev.BPF.Map.Type), nil case "bpf.prog.attach_type": - return int(e.BPF.Program.AttachType), nil + return int(ev.BPF.Program.AttachType), nil case "bpf.prog.helpers": - result := make([]int, len(e.BPF.Program.Helpers)) - for i, v := range e.BPF.Program.Helpers { + result := make([]int, len(ev.BPF.Program.Helpers)) + for i, v := range ev.BPF.Program.Helpers { result[i] = int(v) } return result, nil case "bpf.prog.name": - return e.BPF.Program.Name, nil + return ev.BPF.Program.Name, nil case "bpf.prog.tag": - return e.BPF.Program.Tag, nil + return ev.BPF.Program.Tag, nil case "bpf.prog.type": - return int(e.BPF.Program.Type), nil + return int(ev.BPF.Program.Type), nil case "bpf.retval": - return int(e.BPF.SyscallEvent.Retval), nil + return int(ev.BPF.SyscallEvent.Retval), nil case "capset.cap_effective": - return int(e.Capset.CapEffective), nil + return int(ev.Capset.CapEffective), nil case "capset.cap_permitted": - return int(e.Capset.CapPermitted), nil + return int(ev.Capset.CapPermitted), nil case "chmod.file.change_time": - return int(e.Chmod.File.FileFields.CTime), nil + return int(ev.Chmod.File.FileFields.CTime), nil case "chmod.file.destination.mode": - return int(e.Chmod.Mode), nil + return int(ev.Chmod.Mode), nil case "chmod.file.destination.rights": - return int(e.Chmod.Mode), nil + return int(ev.Chmod.Mode), nil case "chmod.file.filesystem": - return e.Chmod.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Chmod.File), nil case "chmod.file.gid": - return int(e.Chmod.File.FileFields.GID), nil + return int(ev.Chmod.File.FileFields.GID), nil case "chmod.file.group": - return e.Chmod.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Chmod.File.FileFields), nil case "chmod.file.in_upper_layer": - return e.Chmod.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Chmod.File.FileFields), nil case "chmod.file.inode": - return int(e.Chmod.File.FileFields.Inode), nil + return int(ev.Chmod.File.FileFields.Inode), nil case "chmod.file.mode": - return int(e.Chmod.File.FileFields.Mode), nil + return int(ev.Chmod.File.FileFields.Mode), nil case "chmod.file.modification_time": - return int(e.Chmod.File.FileFields.MTime), nil + return int(ev.Chmod.File.FileFields.MTime), nil case "chmod.file.mount_id": - return int(e.Chmod.File.FileFields.MountID), nil + return int(ev.Chmod.File.FileFields.MountID), nil case "chmod.file.name": - return e.Chmod.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chmod.File), nil case "chmod.file.name.length": - return len(e.Chmod.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chmod.File), nil case "chmod.file.path": - return e.Chmod.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Chmod.File), nil case "chmod.file.path.length": - return len(e.Chmod.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Chmod.File), nil case "chmod.file.rights": - return int(e.Chmod.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Chmod.File.FileFields)), nil case "chmod.file.uid": - return int(e.Chmod.File.FileFields.UID), nil + return int(ev.Chmod.File.FileFields.UID), nil case "chmod.file.user": - return e.Chmod.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Chmod.File.FileFields), nil case "chmod.retval": - return int(e.Chmod.SyscallEvent.Retval), nil + return int(ev.Chmod.SyscallEvent.Retval), nil case "chown.file.change_time": - return int(e.Chown.File.FileFields.CTime), nil + return int(ev.Chown.File.FileFields.CTime), nil case "chown.file.destination.gid": - return int(e.Chown.GID), nil + return int(ev.Chown.GID), nil case "chown.file.destination.group": - return e.Chown.Group, nil + return ev.FieldHandlers.ResolveChownGID(ev, &ev.Chown), nil case "chown.file.destination.uid": - return int(e.Chown.UID), nil + return int(ev.Chown.UID), nil case "chown.file.destination.user": - return e.Chown.User, nil + return ev.FieldHandlers.ResolveChownUID(ev, &ev.Chown), nil case "chown.file.filesystem": - return e.Chown.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Chown.File), nil case "chown.file.gid": - return int(e.Chown.File.FileFields.GID), nil + return int(ev.Chown.File.FileFields.GID), nil case "chown.file.group": - return e.Chown.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Chown.File.FileFields), nil case "chown.file.in_upper_layer": - return e.Chown.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Chown.File.FileFields), nil case "chown.file.inode": - return int(e.Chown.File.FileFields.Inode), nil + return int(ev.Chown.File.FileFields.Inode), nil case "chown.file.mode": - return int(e.Chown.File.FileFields.Mode), nil + return int(ev.Chown.File.FileFields.Mode), nil case "chown.file.modification_time": - return int(e.Chown.File.FileFields.MTime), nil + return int(ev.Chown.File.FileFields.MTime), nil case "chown.file.mount_id": - return int(e.Chown.File.FileFields.MountID), nil + return int(ev.Chown.File.FileFields.MountID), nil case "chown.file.name": - return e.Chown.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chown.File), nil case "chown.file.name.length": - return len(e.Chown.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chown.File), nil case "chown.file.path": - return e.Chown.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Chown.File), nil case "chown.file.path.length": - return len(e.Chown.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Chown.File), nil case "chown.file.rights": - return int(e.Chown.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Chown.File.FileFields)), nil case "chown.file.uid": - return int(e.Chown.File.FileFields.UID), nil + return int(ev.Chown.File.FileFields.UID), nil case "chown.file.user": - return e.Chown.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Chown.File.FileFields), nil case "chown.retval": - return int(e.Chown.SyscallEvent.Retval), nil + return int(ev.Chown.SyscallEvent.Retval), nil case "container.id": - return e.ContainerContext.ID, nil + return ev.FieldHandlers.ResolveContainerID(ev, &ev.ContainerContext), nil case "container.tags": - return e.ContainerContext.Tags, nil + return ev.FieldHandlers.ResolveContainerTags(ev, &ev.ContainerContext), nil case "dns.id": - return int(e.DNS.ID), nil + return int(ev.DNS.ID), nil case "dns.question.class": - return int(e.DNS.Class), nil + return int(ev.DNS.Class), nil case "dns.question.count": - return int(e.DNS.Count), nil + return int(ev.DNS.Count), nil case "dns.question.length": - return int(e.DNS.Size), nil + return int(ev.DNS.Size), nil case "dns.question.name": - return e.DNS.Name, nil + return ev.DNS.Name, nil case "dns.question.name.length": - return len(e.DNS.Name), nil + return len(ev.DNS.Name), nil case "dns.question.type": - return int(e.DNS.Type), nil + return int(ev.DNS.Type), nil case "exec.args": - return e.Exec.Process.Args, nil + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.Exec.Process), nil case "exec.args_flags": - return e.Exec.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.Exec.Process), nil case "exec.args_options": - return e.Exec.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.Exec.Process), nil case "exec.args_truncated": - return e.Exec.Process.ArgsTruncated, nil + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.Exec.Process), nil case "exec.argv": - return e.Exec.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.Exec.Process), nil case "exec.argv0": - return e.Exec.Process.Argv0, nil + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.Exec.Process), nil case "exec.cap_effective": - return int(e.Exec.Process.Credentials.CapEffective), nil + return int(ev.Exec.Process.Credentials.CapEffective), nil case "exec.cap_permitted": - return int(e.Exec.Process.Credentials.CapPermitted), nil + return int(ev.Exec.Process.Credentials.CapPermitted), nil case "exec.comm": - return e.Exec.Process.Comm, nil + return ev.Exec.Process.Comm, nil case "exec.container.id": - return e.Exec.Process.ContainerID, nil + return ev.Exec.Process.ContainerID, nil case "exec.cookie": - return int(e.Exec.Process.Cookie), nil + return int(ev.Exec.Process.Cookie), nil case "exec.created_at": - return int(e.Exec.Process.CreatedAt), nil + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.Exec.Process)), nil case "exec.egid": - return int(e.Exec.Process.Credentials.EGID), nil + return int(ev.Exec.Process.Credentials.EGID), nil case "exec.egroup": - return e.Exec.Process.Credentials.EGroup, nil + return ev.Exec.Process.Credentials.EGroup, nil case "exec.envp": - return e.Exec.Process.Envp, nil + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.Exec.Process), nil case "exec.envs": - return e.Exec.Process.Envs, nil + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.Exec.Process), nil case "exec.envs_truncated": - return e.Exec.Process.EnvsTruncated, nil + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.Exec.Process), nil case "exec.euid": - return int(e.Exec.Process.Credentials.EUID), nil + return int(ev.Exec.Process.Credentials.EUID), nil case "exec.euser": - return e.Exec.Process.Credentials.EUser, nil + return ev.Exec.Process.Credentials.EUser, nil case "exec.file.change_time": - return int(e.Exec.Process.FileEvent.FileFields.CTime), nil + return int(ev.Exec.Process.FileEvent.FileFields.CTime), nil case "exec.file.filesystem": - return e.Exec.Process.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exec.Process.FileEvent), nil case "exec.file.gid": - return int(e.Exec.Process.FileEvent.FileFields.GID), nil + return int(ev.Exec.Process.FileEvent.FileFields.GID), nil case "exec.file.group": - return e.Exec.Process.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exec.Process.FileEvent.FileFields), nil case "exec.file.in_upper_layer": - return e.Exec.Process.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exec.Process.FileEvent.FileFields), nil case "exec.file.inode": - return int(e.Exec.Process.FileEvent.FileFields.Inode), nil + return int(ev.Exec.Process.FileEvent.FileFields.Inode), nil case "exec.file.mode": - return int(e.Exec.Process.FileEvent.FileFields.Mode), nil + return int(ev.Exec.Process.FileEvent.FileFields.Mode), nil case "exec.file.modification_time": - return int(e.Exec.Process.FileEvent.FileFields.MTime), nil + return int(ev.Exec.Process.FileEvent.FileFields.MTime), nil case "exec.file.mount_id": - return int(e.Exec.Process.FileEvent.FileFields.MountID), nil + return int(ev.Exec.Process.FileEvent.FileFields.MountID), nil case "exec.file.name": - return e.Exec.Process.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.FileEvent), nil case "exec.file.name.length": - return len(e.Exec.Process.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.FileEvent), nil case "exec.file.path": - return e.Exec.Process.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.FileEvent), nil case "exec.file.path.length": - return len(e.Exec.Process.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.FileEvent), nil case "exec.file.rights": - return int(e.Exec.Process.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Exec.Process.FileEvent.FileFields)), nil case "exec.file.uid": - return int(e.Exec.Process.FileEvent.FileFields.UID), nil + return int(ev.Exec.Process.FileEvent.FileFields.UID), nil case "exec.file.user": - return e.Exec.Process.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exec.Process.FileEvent.FileFields), nil case "exec.fsgid": - return int(e.Exec.Process.Credentials.FSGID), nil + return int(ev.Exec.Process.Credentials.FSGID), nil case "exec.fsgroup": - return e.Exec.Process.Credentials.FSGroup, nil + return ev.Exec.Process.Credentials.FSGroup, nil case "exec.fsuid": - return int(e.Exec.Process.Credentials.FSUID), nil + return int(ev.Exec.Process.Credentials.FSUID), nil case "exec.fsuser": - return e.Exec.Process.Credentials.FSUser, nil + return ev.Exec.Process.Credentials.FSUser, nil case "exec.gid": - return int(e.Exec.Process.Credentials.GID), nil + return int(ev.Exec.Process.Credentials.GID), nil case "exec.group": - return e.Exec.Process.Credentials.Group, nil + return ev.Exec.Process.Credentials.Group, nil case "exec.interpreter.file.change_time": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil case "exec.interpreter.file.filesystem": - return e.Exec.Process.LinuxBinprm.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exec.Process.LinuxBinprm.FileEvent), nil case "exec.interpreter.file.gid": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.GID), nil + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.GID), nil case "exec.interpreter.file.group": - return e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields), nil case "exec.interpreter.file.in_upper_layer": - return e.Exec.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields), nil case "exec.interpreter.file.inode": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil case "exec.interpreter.file.mode": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil case "exec.interpreter.file.modification_time": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil case "exec.interpreter.file.mount_id": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil case "exec.interpreter.file.name": - return e.Exec.Process.LinuxBinprm.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.LinuxBinprm.FileEvent), nil case "exec.interpreter.file.name.length": - return len(e.Exec.Process.LinuxBinprm.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.LinuxBinprm.FileEvent), nil case "exec.interpreter.file.path": - return e.Exec.Process.LinuxBinprm.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.LinuxBinprm.FileEvent), nil case "exec.interpreter.file.path.length": - return len(e.Exec.Process.LinuxBinprm.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.LinuxBinprm.FileEvent), nil case "exec.interpreter.file.rights": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields)), nil case "exec.interpreter.file.uid": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.UID), nil + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.UID), nil case "exec.interpreter.file.user": - return e.Exec.Process.LinuxBinprm.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields), nil case "exec.is_kworker": - return e.Exec.Process.PIDContext.IsKworker, nil + return ev.Exec.Process.PIDContext.IsKworker, nil case "exec.is_thread": - return e.Exec.Process.IsThread, nil + return ev.Exec.Process.IsThread, nil case "exec.pid": - return int(e.Exec.Process.PIDContext.Pid), nil + return int(ev.Exec.Process.PIDContext.Pid), nil case "exec.ppid": - return int(e.Exec.Process.PPid), nil + return int(ev.Exec.Process.PPid), nil case "exec.tid": - return int(e.Exec.Process.PIDContext.Tid), nil + return int(ev.Exec.Process.PIDContext.Tid), nil case "exec.tty_name": - return e.Exec.Process.TTYName, nil + return ev.Exec.Process.TTYName, nil case "exec.uid": - return int(e.Exec.Process.Credentials.UID), nil + return int(ev.Exec.Process.Credentials.UID), nil case "exec.user": - return e.Exec.Process.Credentials.User, nil + return ev.Exec.Process.Credentials.User, nil case "exit.args": - return e.Exit.Process.Args, nil + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.Exit.Process), nil case "exit.args_flags": - return e.Exit.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.Exit.Process), nil case "exit.args_options": - return e.Exit.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.Exit.Process), nil case "exit.args_truncated": - return e.Exit.Process.ArgsTruncated, nil + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.Exit.Process), nil case "exit.argv": - return e.Exit.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.Exit.Process), nil case "exit.argv0": - return e.Exit.Process.Argv0, nil + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.Exit.Process), nil case "exit.cap_effective": - return int(e.Exit.Process.Credentials.CapEffective), nil + return int(ev.Exit.Process.Credentials.CapEffective), nil case "exit.cap_permitted": - return int(e.Exit.Process.Credentials.CapPermitted), nil + return int(ev.Exit.Process.Credentials.CapPermitted), nil case "exit.cause": - return int(e.Exit.Cause), nil + return int(ev.Exit.Cause), nil case "exit.code": - return int(e.Exit.Code), nil + return int(ev.Exit.Code), nil case "exit.comm": - return e.Exit.Process.Comm, nil + return ev.Exit.Process.Comm, nil case "exit.container.id": - return e.Exit.Process.ContainerID, nil + return ev.Exit.Process.ContainerID, nil case "exit.cookie": - return int(e.Exit.Process.Cookie), nil + return int(ev.Exit.Process.Cookie), nil case "exit.created_at": - return int(e.Exit.Process.CreatedAt), nil + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.Exit.Process)), nil case "exit.egid": - return int(e.Exit.Process.Credentials.EGID), nil + return int(ev.Exit.Process.Credentials.EGID), nil case "exit.egroup": - return e.Exit.Process.Credentials.EGroup, nil + return ev.Exit.Process.Credentials.EGroup, nil case "exit.envp": - return e.Exit.Process.Envp, nil + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.Exit.Process), nil case "exit.envs": - return e.Exit.Process.Envs, nil + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.Exit.Process), nil case "exit.envs_truncated": - return e.Exit.Process.EnvsTruncated, nil + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.Exit.Process), nil case "exit.euid": - return int(e.Exit.Process.Credentials.EUID), nil + return int(ev.Exit.Process.Credentials.EUID), nil case "exit.euser": - return e.Exit.Process.Credentials.EUser, nil + return ev.Exit.Process.Credentials.EUser, nil case "exit.file.change_time": - return int(e.Exit.Process.FileEvent.FileFields.CTime), nil + return int(ev.Exit.Process.FileEvent.FileFields.CTime), nil case "exit.file.filesystem": - return e.Exit.Process.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exit.Process.FileEvent), nil case "exit.file.gid": - return int(e.Exit.Process.FileEvent.FileFields.GID), nil + return int(ev.Exit.Process.FileEvent.FileFields.GID), nil case "exit.file.group": - return e.Exit.Process.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exit.Process.FileEvent.FileFields), nil case "exit.file.in_upper_layer": - return e.Exit.Process.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exit.Process.FileEvent.FileFields), nil case "exit.file.inode": - return int(e.Exit.Process.FileEvent.FileFields.Inode), nil + return int(ev.Exit.Process.FileEvent.FileFields.Inode), nil case "exit.file.mode": - return int(e.Exit.Process.FileEvent.FileFields.Mode), nil + return int(ev.Exit.Process.FileEvent.FileFields.Mode), nil case "exit.file.modification_time": - return int(e.Exit.Process.FileEvent.FileFields.MTime), nil + return int(ev.Exit.Process.FileEvent.FileFields.MTime), nil case "exit.file.mount_id": - return int(e.Exit.Process.FileEvent.FileFields.MountID), nil + return int(ev.Exit.Process.FileEvent.FileFields.MountID), nil case "exit.file.name": - return e.Exit.Process.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.FileEvent), nil case "exit.file.name.length": - return len(e.Exit.Process.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.FileEvent), nil case "exit.file.path": - return e.Exit.Process.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.FileEvent), nil case "exit.file.path.length": - return len(e.Exit.Process.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.FileEvent), nil case "exit.file.rights": - return int(e.Exit.Process.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Exit.Process.FileEvent.FileFields)), nil case "exit.file.uid": - return int(e.Exit.Process.FileEvent.FileFields.UID), nil + return int(ev.Exit.Process.FileEvent.FileFields.UID), nil case "exit.file.user": - return e.Exit.Process.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exit.Process.FileEvent.FileFields), nil case "exit.fsgid": - return int(e.Exit.Process.Credentials.FSGID), nil + return int(ev.Exit.Process.Credentials.FSGID), nil case "exit.fsgroup": - return e.Exit.Process.Credentials.FSGroup, nil + return ev.Exit.Process.Credentials.FSGroup, nil case "exit.fsuid": - return int(e.Exit.Process.Credentials.FSUID), nil + return int(ev.Exit.Process.Credentials.FSUID), nil case "exit.fsuser": - return e.Exit.Process.Credentials.FSUser, nil + return ev.Exit.Process.Credentials.FSUser, nil case "exit.gid": - return int(e.Exit.Process.Credentials.GID), nil + return int(ev.Exit.Process.Credentials.GID), nil case "exit.group": - return e.Exit.Process.Credentials.Group, nil + return ev.Exit.Process.Credentials.Group, nil case "exit.interpreter.file.change_time": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil case "exit.interpreter.file.filesystem": - return e.Exit.Process.LinuxBinprm.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exit.Process.LinuxBinprm.FileEvent), nil case "exit.interpreter.file.gid": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.GID), nil + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.GID), nil case "exit.interpreter.file.group": - return e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields), nil case "exit.interpreter.file.in_upper_layer": - return e.Exit.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields), nil case "exit.interpreter.file.inode": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil case "exit.interpreter.file.mode": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil case "exit.interpreter.file.modification_time": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil case "exit.interpreter.file.mount_id": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil case "exit.interpreter.file.name": - return e.Exit.Process.LinuxBinprm.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.LinuxBinprm.FileEvent), nil case "exit.interpreter.file.name.length": - return len(e.Exit.Process.LinuxBinprm.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.LinuxBinprm.FileEvent), nil case "exit.interpreter.file.path": - return e.Exit.Process.LinuxBinprm.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.LinuxBinprm.FileEvent), nil case "exit.interpreter.file.path.length": - return len(e.Exit.Process.LinuxBinprm.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.LinuxBinprm.FileEvent), nil case "exit.interpreter.file.rights": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields)), nil case "exit.interpreter.file.uid": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.UID), nil + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.UID), nil case "exit.interpreter.file.user": - return e.Exit.Process.LinuxBinprm.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields), nil case "exit.is_kworker": - return e.Exit.Process.PIDContext.IsKworker, nil + return ev.Exit.Process.PIDContext.IsKworker, nil case "exit.is_thread": - return e.Exit.Process.IsThread, nil + return ev.Exit.Process.IsThread, nil case "exit.pid": - return int(e.Exit.Process.PIDContext.Pid), nil + return int(ev.Exit.Process.PIDContext.Pid), nil case "exit.ppid": - return int(e.Exit.Process.PPid), nil + return int(ev.Exit.Process.PPid), nil case "exit.tid": - return int(e.Exit.Process.PIDContext.Tid), nil + return int(ev.Exit.Process.PIDContext.Tid), nil case "exit.tty_name": - return e.Exit.Process.TTYName, nil + return ev.Exit.Process.TTYName, nil case "exit.uid": - return int(e.Exit.Process.Credentials.UID), nil + return int(ev.Exit.Process.Credentials.UID), nil case "exit.user": - return e.Exit.Process.Credentials.User, nil + return ev.Exit.Process.Credentials.User, nil case "link.file.change_time": - return int(e.Link.Source.FileFields.CTime), nil + return int(ev.Link.Source.FileFields.CTime), nil case "link.file.destination.change_time": - return int(e.Link.Target.FileFields.CTime), nil + return int(ev.Link.Target.FileFields.CTime), nil case "link.file.destination.filesystem": - return e.Link.Target.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Link.Target), nil case "link.file.destination.gid": - return int(e.Link.Target.FileFields.GID), nil + return int(ev.Link.Target.FileFields.GID), nil case "link.file.destination.group": - return e.Link.Target.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Link.Target.FileFields), nil case "link.file.destination.in_upper_layer": - return e.Link.Target.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Link.Target.FileFields), nil case "link.file.destination.inode": - return int(e.Link.Target.FileFields.Inode), nil + return int(ev.Link.Target.FileFields.Inode), nil case "link.file.destination.mode": - return int(e.Link.Target.FileFields.Mode), nil + return int(ev.Link.Target.FileFields.Mode), nil case "link.file.destination.modification_time": - return int(e.Link.Target.FileFields.MTime), nil + return int(ev.Link.Target.FileFields.MTime), nil case "link.file.destination.mount_id": - return int(e.Link.Target.FileFields.MountID), nil + return int(ev.Link.Target.FileFields.MountID), nil case "link.file.destination.name": - return e.Link.Target.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Target), nil case "link.file.destination.name.length": - return len(e.Link.Target.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Target), nil case "link.file.destination.path": - return e.Link.Target.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Target), nil case "link.file.destination.path.length": - return len(e.Link.Target.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Target), nil case "link.file.destination.rights": - return int(e.Link.Target.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Link.Target.FileFields)), nil case "link.file.destination.uid": - return int(e.Link.Target.FileFields.UID), nil + return int(ev.Link.Target.FileFields.UID), nil case "link.file.destination.user": - return e.Link.Target.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Link.Target.FileFields), nil case "link.file.filesystem": - return e.Link.Source.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Link.Source), nil case "link.file.gid": - return int(e.Link.Source.FileFields.GID), nil + return int(ev.Link.Source.FileFields.GID), nil case "link.file.group": - return e.Link.Source.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Link.Source.FileFields), nil case "link.file.in_upper_layer": - return e.Link.Source.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Link.Source.FileFields), nil case "link.file.inode": - return int(e.Link.Source.FileFields.Inode), nil + return int(ev.Link.Source.FileFields.Inode), nil case "link.file.mode": - return int(e.Link.Source.FileFields.Mode), nil + return int(ev.Link.Source.FileFields.Mode), nil case "link.file.modification_time": - return int(e.Link.Source.FileFields.MTime), nil + return int(ev.Link.Source.FileFields.MTime), nil case "link.file.mount_id": - return int(e.Link.Source.FileFields.MountID), nil + return int(ev.Link.Source.FileFields.MountID), nil case "link.file.name": - return e.Link.Source.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Source), nil case "link.file.name.length": - return len(e.Link.Source.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Source), nil case "link.file.path": - return e.Link.Source.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Source), nil case "link.file.path.length": - return len(e.Link.Source.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Source), nil case "link.file.rights": - return int(e.Link.Source.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Link.Source.FileFields)), nil case "link.file.uid": - return int(e.Link.Source.FileFields.UID), nil + return int(ev.Link.Source.FileFields.UID), nil case "link.file.user": - return e.Link.Source.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Link.Source.FileFields), nil case "link.retval": - return int(e.Link.SyscallEvent.Retval), nil + return int(ev.Link.SyscallEvent.Retval), nil case "load_module.file.change_time": - return int(e.LoadModule.File.FileFields.CTime), nil + return int(ev.LoadModule.File.FileFields.CTime), nil case "load_module.file.filesystem": - return e.LoadModule.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.LoadModule.File), nil case "load_module.file.gid": - return int(e.LoadModule.File.FileFields.GID), nil + return int(ev.LoadModule.File.FileFields.GID), nil case "load_module.file.group": - return e.LoadModule.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.LoadModule.File.FileFields), nil case "load_module.file.in_upper_layer": - return e.LoadModule.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.LoadModule.File.FileFields), nil case "load_module.file.inode": - return int(e.LoadModule.File.FileFields.Inode), nil + return int(ev.LoadModule.File.FileFields.Inode), nil case "load_module.file.mode": - return int(e.LoadModule.File.FileFields.Mode), nil + return int(ev.LoadModule.File.FileFields.Mode), nil case "load_module.file.modification_time": - return int(e.LoadModule.File.FileFields.MTime), nil + return int(ev.LoadModule.File.FileFields.MTime), nil case "load_module.file.mount_id": - return int(e.LoadModule.File.FileFields.MountID), nil + return int(ev.LoadModule.File.FileFields.MountID), nil case "load_module.file.name": - return e.LoadModule.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.LoadModule.File), nil case "load_module.file.name.length": - return len(e.LoadModule.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.LoadModule.File), nil case "load_module.file.path": - return e.LoadModule.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.LoadModule.File), nil case "load_module.file.path.length": - return len(e.LoadModule.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.LoadModule.File), nil case "load_module.file.rights": - return int(e.LoadModule.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.LoadModule.File.FileFields)), nil case "load_module.file.uid": - return int(e.LoadModule.File.FileFields.UID), nil + return int(ev.LoadModule.File.FileFields.UID), nil case "load_module.file.user": - return e.LoadModule.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.LoadModule.File.FileFields), nil case "load_module.loaded_from_memory": - return e.LoadModule.LoadedFromMemory, nil + return ev.LoadModule.LoadedFromMemory, nil case "load_module.name": - return e.LoadModule.Name, nil + return ev.LoadModule.Name, nil case "load_module.retval": - return int(e.LoadModule.SyscallEvent.Retval), nil + return int(ev.LoadModule.SyscallEvent.Retval), nil case "mkdir.file.change_time": - return int(e.Mkdir.File.FileFields.CTime), nil + return int(ev.Mkdir.File.FileFields.CTime), nil case "mkdir.file.destination.mode": - return int(e.Mkdir.Mode), nil + return int(ev.Mkdir.Mode), nil case "mkdir.file.destination.rights": - return int(e.Mkdir.Mode), nil + return int(ev.Mkdir.Mode), nil case "mkdir.file.filesystem": - return e.Mkdir.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Mkdir.File), nil case "mkdir.file.gid": - return int(e.Mkdir.File.FileFields.GID), nil + return int(ev.Mkdir.File.FileFields.GID), nil case "mkdir.file.group": - return e.Mkdir.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Mkdir.File.FileFields), nil case "mkdir.file.in_upper_layer": - return e.Mkdir.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Mkdir.File.FileFields), nil case "mkdir.file.inode": - return int(e.Mkdir.File.FileFields.Inode), nil + return int(ev.Mkdir.File.FileFields.Inode), nil case "mkdir.file.mode": - return int(e.Mkdir.File.FileFields.Mode), nil + return int(ev.Mkdir.File.FileFields.Mode), nil case "mkdir.file.modification_time": - return int(e.Mkdir.File.FileFields.MTime), nil + return int(ev.Mkdir.File.FileFields.MTime), nil case "mkdir.file.mount_id": - return int(e.Mkdir.File.FileFields.MountID), nil + return int(ev.Mkdir.File.FileFields.MountID), nil case "mkdir.file.name": - return e.Mkdir.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Mkdir.File), nil case "mkdir.file.name.length": - return len(e.Mkdir.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Mkdir.File), nil case "mkdir.file.path": - return e.Mkdir.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Mkdir.File), nil case "mkdir.file.path.length": - return len(e.Mkdir.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Mkdir.File), nil case "mkdir.file.rights": - return int(e.Mkdir.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Mkdir.File.FileFields)), nil case "mkdir.file.uid": - return int(e.Mkdir.File.FileFields.UID), nil + return int(ev.Mkdir.File.FileFields.UID), nil case "mkdir.file.user": - return e.Mkdir.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Mkdir.File.FileFields), nil case "mkdir.retval": - return int(e.Mkdir.SyscallEvent.Retval), nil + return int(ev.Mkdir.SyscallEvent.Retval), nil case "mmap.file.change_time": - return int(e.MMap.File.FileFields.CTime), nil + return int(ev.MMap.File.FileFields.CTime), nil case "mmap.file.filesystem": - return e.MMap.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.MMap.File), nil case "mmap.file.gid": - return int(e.MMap.File.FileFields.GID), nil + return int(ev.MMap.File.FileFields.GID), nil case "mmap.file.group": - return e.MMap.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.MMap.File.FileFields), nil case "mmap.file.in_upper_layer": - return e.MMap.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.MMap.File.FileFields), nil case "mmap.file.inode": - return int(e.MMap.File.FileFields.Inode), nil + return int(ev.MMap.File.FileFields.Inode), nil case "mmap.file.mode": - return int(e.MMap.File.FileFields.Mode), nil + return int(ev.MMap.File.FileFields.Mode), nil case "mmap.file.modification_time": - return int(e.MMap.File.FileFields.MTime), nil + return int(ev.MMap.File.FileFields.MTime), nil case "mmap.file.mount_id": - return int(e.MMap.File.FileFields.MountID), nil + return int(ev.MMap.File.FileFields.MountID), nil case "mmap.file.name": - return e.MMap.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.MMap.File), nil case "mmap.file.name.length": - return len(e.MMap.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.MMap.File), nil case "mmap.file.path": - return e.MMap.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.MMap.File), nil case "mmap.file.path.length": - return len(e.MMap.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.MMap.File), nil case "mmap.file.rights": - return int(e.MMap.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.MMap.File.FileFields)), nil case "mmap.file.uid": - return int(e.MMap.File.FileFields.UID), nil + return int(ev.MMap.File.FileFields.UID), nil case "mmap.file.user": - return e.MMap.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.MMap.File.FileFields), nil case "mmap.flags": - return e.MMap.Flags, nil + return ev.MMap.Flags, nil case "mmap.protection": - return e.MMap.Protection, nil + return ev.MMap.Protection, nil case "mmap.retval": - return int(e.MMap.SyscallEvent.Retval), nil + return int(ev.MMap.SyscallEvent.Retval), nil case "mount.fs_type": - return e.Mount.Mount.FSType, nil + return ev.Mount.Mount.FSType, nil case "mount.mountpoint.path": - return e.Mount.MountPointPath, nil + return ev.FieldHandlers.ResolveMountPointPath(ev, &ev.Mount), nil case "mount.retval": - return int(e.Mount.SyscallEvent.Retval), nil + return int(ev.Mount.SyscallEvent.Retval), nil case "mount.source.path": - return e.Mount.MountSourcePath, nil + return ev.FieldHandlers.ResolveMountSourcePath(ev, &ev.Mount), nil case "mprotect.req_protection": - return e.MProtect.ReqProtection, nil + return ev.MProtect.ReqProtection, nil case "mprotect.retval": - return int(e.MProtect.SyscallEvent.Retval), nil + return int(ev.MProtect.SyscallEvent.Retval), nil case "mprotect.vm_protection": - return e.MProtect.VMProtection, nil + return ev.MProtect.VMProtection, nil case "network.destination.ip": - return e.NetworkContext.Destination.IPNet, nil + return ev.NetworkContext.Destination.IPNet, nil case "network.destination.port": - return int(e.NetworkContext.Destination.Port), nil + return int(ev.NetworkContext.Destination.Port), nil case "network.device.ifindex": - return int(e.NetworkContext.Device.IfIndex), nil + return int(ev.NetworkContext.Device.IfIndex), nil case "network.device.ifname": - return e.NetworkContext.Device.IfName, nil + return ev.FieldHandlers.ResolveNetworkDeviceIfName(ev, &ev.NetworkContext.Device), nil case "network.l3_protocol": - return int(e.NetworkContext.L3Protocol), nil + return int(ev.NetworkContext.L3Protocol), nil case "network.l4_protocol": - return int(e.NetworkContext.L4Protocol), nil + return int(ev.NetworkContext.L4Protocol), nil case "network.size": - return int(e.NetworkContext.Size), nil + return int(ev.NetworkContext.Size), nil case "network.source.ip": - return e.NetworkContext.Source.IPNet, nil + return ev.NetworkContext.Source.IPNet, nil case "network.source.port": - return int(e.NetworkContext.Source.Port), nil + return int(ev.NetworkContext.Source.Port), nil case "open.file.change_time": - return int(e.Open.File.FileFields.CTime), nil + return int(ev.Open.File.FileFields.CTime), nil case "open.file.destination.mode": - return int(e.Open.Mode), nil + return int(ev.Open.Mode), nil case "open.file.filesystem": - return e.Open.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Open.File), nil case "open.file.gid": - return int(e.Open.File.FileFields.GID), nil + return int(ev.Open.File.FileFields.GID), nil case "open.file.group": - return e.Open.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Open.File.FileFields), nil case "open.file.in_upper_layer": - return e.Open.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Open.File.FileFields), nil case "open.file.inode": - return int(e.Open.File.FileFields.Inode), nil + return int(ev.Open.File.FileFields.Inode), nil case "open.file.mode": - return int(e.Open.File.FileFields.Mode), nil + return int(ev.Open.File.FileFields.Mode), nil case "open.file.modification_time": - return int(e.Open.File.FileFields.MTime), nil + return int(ev.Open.File.FileFields.MTime), nil case "open.file.mount_id": - return int(e.Open.File.FileFields.MountID), nil + return int(ev.Open.File.FileFields.MountID), nil case "open.file.name": - return e.Open.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Open.File), nil case "open.file.name.length": - return len(e.Open.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Open.File), nil case "open.file.path": - return e.Open.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Open.File), nil case "open.file.path.length": - return len(e.Open.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Open.File), nil case "open.file.rights": - return int(e.Open.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Open.File.FileFields)), nil case "open.file.uid": - return int(e.Open.File.FileFields.UID), nil + return int(ev.Open.File.FileFields.UID), nil case "open.file.user": - return e.Open.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Open.File.FileFields), nil case "open.flags": - return int(e.Open.Flags), nil + return int(ev.Open.Flags), nil case "open.retval": - return int(e.Open.SyscallEvent.Retval), nil + return int(ev.Open.SyscallEvent.Retval), nil case "process.ancestors.args": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Args + result := ev.FieldHandlers.ResolveProcessArgs(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.args_flags": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsFlags(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "process.ancestors.args_options": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsOptions(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "process.ancestors.args_truncated": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.ArgsTruncated + result := ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.argv": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgv(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "process.ancestors.argv0": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv0 + result := ev.FieldHandlers.ResolveProcessArgv0(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.cap_effective": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13808,7 +15939,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.cap_permitted": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13820,7 +15951,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.comm": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13832,7 +15963,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.container.id": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13844,7 +15975,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.cookie": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13856,19 +15987,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.created_at": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.CreatedAt) + result := int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &element.ProcessContext.Process)) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.egid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13880,7 +16011,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.egroup": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13892,43 +16023,43 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.envp": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Envp + result := ev.FieldHandlers.ResolveProcessEnvp(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "process.ancestors.envs": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Envs + result := ev.FieldHandlers.ResolveProcessEnvs(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "process.ancestors.envs_truncated": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.EnvsTruncated + result := ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.euid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13940,7 +16071,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.euser": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13952,7 +16083,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.file.change_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13964,19 +16095,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.file.filesystem": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.file.gid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13988,31 +16119,31 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.file.group": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.file.in_upper_layer": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.file.inode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14024,7 +16155,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.file.mode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14036,7 +16167,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.file.modification_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14048,7 +16179,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.file.mount_id": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14060,67 +16191,67 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.file.name": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.file.name.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.file.path": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.file.path.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.file.rights": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.FileEvent.FileFields)) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.file.uid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14132,19 +16263,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.file.user": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.fsgid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14156,7 +16287,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.fsgroup": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14168,7 +16299,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.fsuid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14180,7 +16311,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.fsuser": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14192,7 +16323,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.gid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14204,7 +16335,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.group": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14216,7 +16347,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.interpreter.file.change_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14228,19 +16359,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.interpreter.file.filesystem": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.interpreter.file.gid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14252,31 +16383,31 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.interpreter.file.group": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.interpreter.file.in_upper_layer": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.interpreter.file.inode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14288,7 +16419,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.interpreter.file.mode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14300,7 +16431,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.interpreter.file.modification_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14312,7 +16443,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.interpreter.file.mount_id": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14324,67 +16455,67 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.interpreter.file.name": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.interpreter.file.name.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.interpreter.file.path": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.interpreter.file.path.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.interpreter.file.rights": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.interpreter.file.uid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14396,19 +16527,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.interpreter.file.user": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.is_kworker": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14420,7 +16551,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.is_thread": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14432,7 +16563,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.pid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14444,7 +16575,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.ppid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14456,7 +16587,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.tid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14468,7 +16599,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.tty_name": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14480,7 +16611,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.uid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14492,7 +16623,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.user": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14503,344 +16634,344 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { } return values, nil case "process.args": - return e.ProcessContext.Process.Args, nil + return ev.FieldHandlers.ResolveProcessArgs(ev, &ev.ProcessContext.Process), nil case "process.args_flags": - return e.ProcessContext.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, &ev.ProcessContext.Process), nil case "process.args_options": - return e.ProcessContext.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, &ev.ProcessContext.Process), nil case "process.args_truncated": - return e.ProcessContext.Process.ArgsTruncated, nil + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &ev.ProcessContext.Process), nil case "process.argv": - return e.ProcessContext.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgv(ev, &ev.ProcessContext.Process), nil case "process.argv0": - return e.ProcessContext.Process.Argv0, nil + return ev.FieldHandlers.ResolveProcessArgv0(ev, &ev.ProcessContext.Process), nil case "process.cap_effective": - return int(e.ProcessContext.Process.Credentials.CapEffective), nil + return int(ev.ProcessContext.Process.Credentials.CapEffective), nil case "process.cap_permitted": - return int(e.ProcessContext.Process.Credentials.CapPermitted), nil + return int(ev.ProcessContext.Process.Credentials.CapPermitted), nil case "process.comm": - return e.ProcessContext.Process.Comm, nil + return ev.ProcessContext.Process.Comm, nil case "process.container.id": - return e.ProcessContext.Process.ContainerID, nil + return ev.ProcessContext.Process.ContainerID, nil case "process.cookie": - return int(e.ProcessContext.Process.Cookie), nil + return int(ev.ProcessContext.Process.Cookie), nil case "process.created_at": - return int(e.ProcessContext.Process.CreatedAt), nil + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &ev.ProcessContext.Process)), nil case "process.egid": - return int(e.ProcessContext.Process.Credentials.EGID), nil + return int(ev.ProcessContext.Process.Credentials.EGID), nil case "process.egroup": - return e.ProcessContext.Process.Credentials.EGroup, nil + return ev.ProcessContext.Process.Credentials.EGroup, nil case "process.envp": - return e.ProcessContext.Process.Envp, nil + return ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.ProcessContext.Process), nil case "process.envs": - return e.ProcessContext.Process.Envs, nil + return ev.FieldHandlers.ResolveProcessEnvs(ev, &ev.ProcessContext.Process), nil case "process.envs_truncated": - return e.ProcessContext.Process.EnvsTruncated, nil + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &ev.ProcessContext.Process), nil case "process.euid": - return int(e.ProcessContext.Process.Credentials.EUID), nil + return int(ev.ProcessContext.Process.Credentials.EUID), nil case "process.euser": - return e.ProcessContext.Process.Credentials.EUser, nil + return ev.ProcessContext.Process.Credentials.EUser, nil case "process.file.change_time": - return int(e.ProcessContext.Process.FileEvent.FileFields.CTime), nil + return int(ev.ProcessContext.Process.FileEvent.FileFields.CTime), nil case "process.file.filesystem": - return e.ProcessContext.Process.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Process.FileEvent), nil case "process.file.gid": - return int(e.ProcessContext.Process.FileEvent.FileFields.GID), nil + return int(ev.ProcessContext.Process.FileEvent.FileFields.GID), nil case "process.file.group": - return e.ProcessContext.Process.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Process.FileEvent.FileFields), nil case "process.file.in_upper_layer": - return e.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Process.FileEvent.FileFields), nil case "process.file.inode": - return int(e.ProcessContext.Process.FileEvent.FileFields.Inode), nil + return int(ev.ProcessContext.Process.FileEvent.FileFields.Inode), nil case "process.file.mode": - return int(e.ProcessContext.Process.FileEvent.FileFields.Mode), nil + return int(ev.ProcessContext.Process.FileEvent.FileFields.Mode), nil case "process.file.modification_time": - return int(e.ProcessContext.Process.FileEvent.FileFields.MTime), nil + return int(ev.ProcessContext.Process.FileEvent.FileFields.MTime), nil case "process.file.mount_id": - return int(e.ProcessContext.Process.FileEvent.FileFields.MountID), nil + return int(ev.ProcessContext.Process.FileEvent.FileFields.MountID), nil case "process.file.name": - return e.ProcessContext.Process.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.FileEvent), nil case "process.file.name.length": - return len(e.ProcessContext.Process.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.FileEvent), nil case "process.file.path": - return e.ProcessContext.Process.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.FileEvent), nil case "process.file.path.length": - return len(e.ProcessContext.Process.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.FileEvent), nil case "process.file.rights": - return int(e.ProcessContext.Process.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.ProcessContext.Process.FileEvent.FileFields)), nil case "process.file.uid": - return int(e.ProcessContext.Process.FileEvent.FileFields.UID), nil + return int(ev.ProcessContext.Process.FileEvent.FileFields.UID), nil case "process.file.user": - return e.ProcessContext.Process.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Process.FileEvent.FileFields), nil case "process.fsgid": - return int(e.ProcessContext.Process.Credentials.FSGID), nil + return int(ev.ProcessContext.Process.Credentials.FSGID), nil case "process.fsgroup": - return e.ProcessContext.Process.Credentials.FSGroup, nil + return ev.ProcessContext.Process.Credentials.FSGroup, nil case "process.fsuid": - return int(e.ProcessContext.Process.Credentials.FSUID), nil + return int(ev.ProcessContext.Process.Credentials.FSUID), nil case "process.fsuser": - return e.ProcessContext.Process.Credentials.FSUser, nil + return ev.ProcessContext.Process.Credentials.FSUser, nil case "process.gid": - return int(e.ProcessContext.Process.Credentials.GID), nil + return int(ev.ProcessContext.Process.Credentials.GID), nil case "process.group": - return e.ProcessContext.Process.Credentials.Group, nil + return ev.ProcessContext.Process.Credentials.Group, nil case "process.interpreter.file.change_time": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil case "process.interpreter.file.filesystem": - return e.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent), nil case "process.interpreter.file.gid": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID), nil + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID), nil case "process.interpreter.file.group": - return e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields), nil case "process.interpreter.file.in_upper_layer": - return e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields), nil case "process.interpreter.file.inode": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil case "process.interpreter.file.mode": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil case "process.interpreter.file.modification_time": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil case "process.interpreter.file.mount_id": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil case "process.interpreter.file.name": - return e.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent), nil case "process.interpreter.file.name.length": - return len(e.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent), nil case "process.interpreter.file.path": - return e.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent), nil case "process.interpreter.file.path.length": - return len(e.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent), nil case "process.interpreter.file.rights": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)), nil case "process.interpreter.file.uid": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID), nil + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID), nil case "process.interpreter.file.user": - return e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields), nil case "process.is_kworker": - return e.ProcessContext.Process.PIDContext.IsKworker, nil + return ev.ProcessContext.Process.PIDContext.IsKworker, nil case "process.is_thread": - return e.ProcessContext.Process.IsThread, nil + return ev.ProcessContext.Process.IsThread, nil case "process.parent.args": - return e.ProcessContext.Parent.Args, nil + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.ProcessContext.Parent), nil case "process.parent.args_flags": - return e.ProcessContext.Parent.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.ProcessContext.Parent), nil case "process.parent.args_options": - return e.ProcessContext.Parent.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.ProcessContext.Parent), nil case "process.parent.args_truncated": - return e.ProcessContext.Parent.ArgsTruncated, nil + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.ProcessContext.Parent), nil case "process.parent.argv": - return e.ProcessContext.Parent.Argv, nil + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.ProcessContext.Parent), nil case "process.parent.argv0": - return e.ProcessContext.Parent.Argv0, nil + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.ProcessContext.Parent), nil case "process.parent.cap_effective": - return int(e.ProcessContext.Parent.Credentials.CapEffective), nil + return int(ev.ProcessContext.Parent.Credentials.CapEffective), nil case "process.parent.cap_permitted": - return int(e.ProcessContext.Parent.Credentials.CapPermitted), nil + return int(ev.ProcessContext.Parent.Credentials.CapPermitted), nil case "process.parent.comm": - return e.ProcessContext.Parent.Comm, nil + return ev.ProcessContext.Parent.Comm, nil case "process.parent.container.id": - return e.ProcessContext.Parent.ContainerID, nil + return ev.ProcessContext.Parent.ContainerID, nil case "process.parent.cookie": - return int(e.ProcessContext.Parent.Cookie), nil + return int(ev.ProcessContext.Parent.Cookie), nil case "process.parent.created_at": - return int(e.ProcessContext.Parent.CreatedAt), nil + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.ProcessContext.Parent)), nil case "process.parent.egid": - return int(e.ProcessContext.Parent.Credentials.EGID), nil + return int(ev.ProcessContext.Parent.Credentials.EGID), nil case "process.parent.egroup": - return e.ProcessContext.Parent.Credentials.EGroup, nil + return ev.ProcessContext.Parent.Credentials.EGroup, nil case "process.parent.envp": - return e.ProcessContext.Parent.Envp, nil + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.ProcessContext.Parent), nil case "process.parent.envs": - return e.ProcessContext.Parent.Envs, nil + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.ProcessContext.Parent), nil case "process.parent.envs_truncated": - return e.ProcessContext.Parent.EnvsTruncated, nil + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.ProcessContext.Parent), nil case "process.parent.euid": - return int(e.ProcessContext.Parent.Credentials.EUID), nil + return int(ev.ProcessContext.Parent.Credentials.EUID), nil case "process.parent.euser": - return e.ProcessContext.Parent.Credentials.EUser, nil + return ev.ProcessContext.Parent.Credentials.EUser, nil case "process.parent.file.change_time": - return int(e.ProcessContext.Parent.FileEvent.FileFields.CTime), nil + return int(ev.ProcessContext.Parent.FileEvent.FileFields.CTime), nil case "process.parent.file.filesystem": - return e.ProcessContext.Parent.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Parent.FileEvent), nil case "process.parent.file.gid": - return int(e.ProcessContext.Parent.FileEvent.FileFields.GID), nil + return int(ev.ProcessContext.Parent.FileEvent.FileFields.GID), nil case "process.parent.file.group": - return e.ProcessContext.Parent.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Parent.FileEvent.FileFields), nil case "process.parent.file.in_upper_layer": - return e.ProcessContext.Parent.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Parent.FileEvent.FileFields), nil case "process.parent.file.inode": - return int(e.ProcessContext.Parent.FileEvent.FileFields.Inode), nil + return int(ev.ProcessContext.Parent.FileEvent.FileFields.Inode), nil case "process.parent.file.mode": - return int(e.ProcessContext.Parent.FileEvent.FileFields.Mode), nil + return int(ev.ProcessContext.Parent.FileEvent.FileFields.Mode), nil case "process.parent.file.modification_time": - return int(e.ProcessContext.Parent.FileEvent.FileFields.MTime), nil + return int(ev.ProcessContext.Parent.FileEvent.FileFields.MTime), nil case "process.parent.file.mount_id": - return int(e.ProcessContext.Parent.FileEvent.FileFields.MountID), nil + return int(ev.ProcessContext.Parent.FileEvent.FileFields.MountID), nil case "process.parent.file.name": - return e.ProcessContext.Parent.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.FileEvent), nil case "process.parent.file.name.length": - return len(e.ProcessContext.Parent.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.FileEvent), nil case "process.parent.file.path": - return e.ProcessContext.Parent.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.FileEvent), nil case "process.parent.file.path.length": - return len(e.ProcessContext.Parent.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.FileEvent), nil case "process.parent.file.rights": - return int(e.ProcessContext.Parent.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.ProcessContext.Parent.FileEvent.FileFields)), nil case "process.parent.file.uid": - return int(e.ProcessContext.Parent.FileEvent.FileFields.UID), nil + return int(ev.ProcessContext.Parent.FileEvent.FileFields.UID), nil case "process.parent.file.user": - return e.ProcessContext.Parent.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Parent.FileEvent.FileFields), nil case "process.parent.fsgid": - return int(e.ProcessContext.Parent.Credentials.FSGID), nil + return int(ev.ProcessContext.Parent.Credentials.FSGID), nil case "process.parent.fsgroup": - return e.ProcessContext.Parent.Credentials.FSGroup, nil + return ev.ProcessContext.Parent.Credentials.FSGroup, nil case "process.parent.fsuid": - return int(e.ProcessContext.Parent.Credentials.FSUID), nil + return int(ev.ProcessContext.Parent.Credentials.FSUID), nil case "process.parent.fsuser": - return e.ProcessContext.Parent.Credentials.FSUser, nil + return ev.ProcessContext.Parent.Credentials.FSUser, nil case "process.parent.gid": - return int(e.ProcessContext.Parent.Credentials.GID), nil + return int(ev.ProcessContext.Parent.Credentials.GID), nil case "process.parent.group": - return e.ProcessContext.Parent.Credentials.Group, nil + return ev.ProcessContext.Parent.Credentials.Group, nil case "process.parent.interpreter.file.change_time": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime), nil + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime), nil case "process.parent.interpreter.file.filesystem": - return e.ProcessContext.Parent.LinuxBinprm.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent), nil case "process.parent.interpreter.file.gid": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID), nil + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID), nil case "process.parent.interpreter.file.group": - return e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields), nil case "process.parent.interpreter.file.in_upper_layer": - return e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields), nil case "process.parent.interpreter.file.inode": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode), nil + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode), nil case "process.parent.interpreter.file.mode": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil case "process.parent.interpreter.file.modification_time": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime), nil + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime), nil case "process.parent.interpreter.file.mount_id": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID), nil + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID), nil case "process.parent.interpreter.file.name": - return e.ProcessContext.Parent.LinuxBinprm.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent), nil case "process.parent.interpreter.file.name.length": - return len(e.ProcessContext.Parent.LinuxBinprm.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent), nil case "process.parent.interpreter.file.path": - return e.ProcessContext.Parent.LinuxBinprm.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent), nil case "process.parent.interpreter.file.path.length": - return len(e.ProcessContext.Parent.LinuxBinprm.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent), nil case "process.parent.interpreter.file.rights": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields)), nil case "process.parent.interpreter.file.uid": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID), nil + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID), nil case "process.parent.interpreter.file.user": - return e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields), nil case "process.parent.is_kworker": - return e.ProcessContext.Parent.PIDContext.IsKworker, nil + return ev.ProcessContext.Parent.PIDContext.IsKworker, nil case "process.parent.is_thread": - return e.ProcessContext.Parent.IsThread, nil + return ev.ProcessContext.Parent.IsThread, nil case "process.parent.pid": - return int(e.ProcessContext.Parent.PIDContext.Pid), nil + return int(ev.ProcessContext.Parent.PIDContext.Pid), nil case "process.parent.ppid": - return int(e.ProcessContext.Parent.PPid), nil + return int(ev.ProcessContext.Parent.PPid), nil case "process.parent.tid": - return int(e.ProcessContext.Parent.PIDContext.Tid), nil + return int(ev.ProcessContext.Parent.PIDContext.Tid), nil case "process.parent.tty_name": - return e.ProcessContext.Parent.TTYName, nil + return ev.ProcessContext.Parent.TTYName, nil case "process.parent.uid": - return int(e.ProcessContext.Parent.Credentials.UID), nil + return int(ev.ProcessContext.Parent.Credentials.UID), nil case "process.parent.user": - return e.ProcessContext.Parent.Credentials.User, nil + return ev.ProcessContext.Parent.Credentials.User, nil case "process.pid": - return int(e.ProcessContext.Process.PIDContext.Pid), nil + return int(ev.ProcessContext.Process.PIDContext.Pid), nil case "process.ppid": - return int(e.ProcessContext.Process.PPid), nil + return int(ev.ProcessContext.Process.PPid), nil case "process.tid": - return int(e.ProcessContext.Process.PIDContext.Tid), nil + return int(ev.ProcessContext.Process.PIDContext.Tid), nil case "process.tty_name": - return e.ProcessContext.Process.TTYName, nil + return ev.ProcessContext.Process.TTYName, nil case "process.uid": - return int(e.ProcessContext.Process.Credentials.UID), nil + return int(ev.ProcessContext.Process.Credentials.UID), nil case "process.user": - return e.ProcessContext.Process.Credentials.User, nil + return ev.ProcessContext.Process.Credentials.User, nil case "ptrace.request": - return int(e.PTrace.Request), nil + return int(ev.PTrace.Request), nil case "ptrace.retval": - return int(e.PTrace.SyscallEvent.Retval), nil + return int(ev.PTrace.SyscallEvent.Retval), nil case "ptrace.tracee.ancestors.args": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Args + result := ev.FieldHandlers.ResolveProcessArgs(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.args_flags": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsFlags(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.args_options": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsOptions(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.args_truncated": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.ArgsTruncated + result := ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.argv": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgv(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.argv0": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv0 + result := ev.FieldHandlers.ResolveProcessArgv0(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.cap_effective": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14852,7 +16983,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.cap_permitted": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14864,7 +16995,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.comm": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14876,7 +17007,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.container.id": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14888,7 +17019,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.cookie": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14900,19 +17031,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.created_at": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.CreatedAt) + result := int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &element.ProcessContext.Process)) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.egid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14924,7 +17055,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.egroup": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14936,43 +17067,43 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.envp": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Envp + result := ev.FieldHandlers.ResolveProcessEnvp(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.envs": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Envs + result := ev.FieldHandlers.ResolveProcessEnvs(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.envs_truncated": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.EnvsTruncated + result := ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.euid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14984,7 +17115,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.euser": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14996,7 +17127,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.file.change_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15008,19 +17139,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.file.filesystem": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.file.gid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15032,31 +17163,31 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.file.group": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.file.in_upper_layer": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.file.inode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15068,7 +17199,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.file.mode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15080,7 +17211,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.file.modification_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15092,7 +17223,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.file.mount_id": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15104,67 +17235,67 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.file.name": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.file.name.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.file.path": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.file.path.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.file.rights": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.FileEvent.FileFields)) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.file.uid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15176,19 +17307,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.file.user": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.fsgid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15200,7 +17331,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.fsgroup": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15212,7 +17343,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.fsuid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15224,7 +17355,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.fsuser": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15236,7 +17367,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.gid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15248,7 +17379,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.group": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15260,7 +17391,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.interpreter.file.change_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15272,19 +17403,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.interpreter.file.filesystem": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.interpreter.file.gid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15296,31 +17427,31 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.interpreter.file.group": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.interpreter.file.in_upper_layer": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.interpreter.file.inode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15332,7 +17463,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.interpreter.file.mode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15344,7 +17475,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.interpreter.file.modification_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15356,7 +17487,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.interpreter.file.mount_id": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15368,67 +17499,67 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.interpreter.file.name": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.interpreter.file.name.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.interpreter.file.path": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.interpreter.file.path.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.interpreter.file.rights": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.interpreter.file.uid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15440,19 +17571,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.interpreter.file.user": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.is_kworker": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15464,7 +17595,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.is_thread": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15476,7 +17607,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.pid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15488,7 +17619,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.ppid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15500,7 +17631,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.tid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15512,7 +17643,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.tty_name": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15524,7 +17655,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.uid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15536,7 +17667,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.user": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15547,552 +17678,552 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { } return values, nil case "ptrace.tracee.args": - return e.PTrace.Tracee.Process.Args, nil + return ev.FieldHandlers.ResolveProcessArgs(ev, &ev.PTrace.Tracee.Process), nil case "ptrace.tracee.args_flags": - return e.PTrace.Tracee.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, &ev.PTrace.Tracee.Process), nil case "ptrace.tracee.args_options": - return e.PTrace.Tracee.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, &ev.PTrace.Tracee.Process), nil case "ptrace.tracee.args_truncated": - return e.PTrace.Tracee.Process.ArgsTruncated, nil + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &ev.PTrace.Tracee.Process), nil case "ptrace.tracee.argv": - return e.PTrace.Tracee.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgv(ev, &ev.PTrace.Tracee.Process), nil case "ptrace.tracee.argv0": - return e.PTrace.Tracee.Process.Argv0, nil + return ev.FieldHandlers.ResolveProcessArgv0(ev, &ev.PTrace.Tracee.Process), nil case "ptrace.tracee.cap_effective": - return int(e.PTrace.Tracee.Process.Credentials.CapEffective), nil + return int(ev.PTrace.Tracee.Process.Credentials.CapEffective), nil case "ptrace.tracee.cap_permitted": - return int(e.PTrace.Tracee.Process.Credentials.CapPermitted), nil + return int(ev.PTrace.Tracee.Process.Credentials.CapPermitted), nil case "ptrace.tracee.comm": - return e.PTrace.Tracee.Process.Comm, nil + return ev.PTrace.Tracee.Process.Comm, nil case "ptrace.tracee.container.id": - return e.PTrace.Tracee.Process.ContainerID, nil + return ev.PTrace.Tracee.Process.ContainerID, nil case "ptrace.tracee.cookie": - return int(e.PTrace.Tracee.Process.Cookie), nil + return int(ev.PTrace.Tracee.Process.Cookie), nil case "ptrace.tracee.created_at": - return int(e.PTrace.Tracee.Process.CreatedAt), nil + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &ev.PTrace.Tracee.Process)), nil case "ptrace.tracee.egid": - return int(e.PTrace.Tracee.Process.Credentials.EGID), nil + return int(ev.PTrace.Tracee.Process.Credentials.EGID), nil case "ptrace.tracee.egroup": - return e.PTrace.Tracee.Process.Credentials.EGroup, nil + return ev.PTrace.Tracee.Process.Credentials.EGroup, nil case "ptrace.tracee.envp": - return e.PTrace.Tracee.Process.Envp, nil + return ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.PTrace.Tracee.Process), nil case "ptrace.tracee.envs": - return e.PTrace.Tracee.Process.Envs, nil + return ev.FieldHandlers.ResolveProcessEnvs(ev, &ev.PTrace.Tracee.Process), nil case "ptrace.tracee.envs_truncated": - return e.PTrace.Tracee.Process.EnvsTruncated, nil + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &ev.PTrace.Tracee.Process), nil case "ptrace.tracee.euid": - return int(e.PTrace.Tracee.Process.Credentials.EUID), nil + return int(ev.PTrace.Tracee.Process.Credentials.EUID), nil case "ptrace.tracee.euser": - return e.PTrace.Tracee.Process.Credentials.EUser, nil + return ev.PTrace.Tracee.Process.Credentials.EUser, nil case "ptrace.tracee.file.change_time": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.CTime), nil + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.CTime), nil case "ptrace.tracee.file.filesystem": - return e.PTrace.Tracee.Process.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Process.FileEvent), nil case "ptrace.tracee.file.gid": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.GID), nil + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.GID), nil case "ptrace.tracee.file.group": - return e.PTrace.Tracee.Process.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields), nil case "ptrace.tracee.file.in_upper_layer": - return e.PTrace.Tracee.Process.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields), nil case "ptrace.tracee.file.inode": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.Inode), nil + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.Inode), nil case "ptrace.tracee.file.mode": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.Mode), nil + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.Mode), nil case "ptrace.tracee.file.modification_time": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.MTime), nil + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.MTime), nil case "ptrace.tracee.file.mount_id": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.MountID), nil + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.MountID), nil case "ptrace.tracee.file.name": - return e.PTrace.Tracee.Process.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.FileEvent), nil case "ptrace.tracee.file.name.length": - return len(e.PTrace.Tracee.Process.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.FileEvent), nil case "ptrace.tracee.file.path": - return e.PTrace.Tracee.Process.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.FileEvent), nil case "ptrace.tracee.file.path.length": - return len(e.PTrace.Tracee.Process.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.FileEvent), nil case "ptrace.tracee.file.rights": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields)), nil case "ptrace.tracee.file.uid": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.UID), nil + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.UID), nil case "ptrace.tracee.file.user": - return e.PTrace.Tracee.Process.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields), nil case "ptrace.tracee.fsgid": - return int(e.PTrace.Tracee.Process.Credentials.FSGID), nil + return int(ev.PTrace.Tracee.Process.Credentials.FSGID), nil case "ptrace.tracee.fsgroup": - return e.PTrace.Tracee.Process.Credentials.FSGroup, nil + return ev.PTrace.Tracee.Process.Credentials.FSGroup, nil case "ptrace.tracee.fsuid": - return int(e.PTrace.Tracee.Process.Credentials.FSUID), nil + return int(ev.PTrace.Tracee.Process.Credentials.FSUID), nil case "ptrace.tracee.fsuser": - return e.PTrace.Tracee.Process.Credentials.FSUser, nil + return ev.PTrace.Tracee.Process.Credentials.FSUser, nil case "ptrace.tracee.gid": - return int(e.PTrace.Tracee.Process.Credentials.GID), nil + return int(ev.PTrace.Tracee.Process.Credentials.GID), nil case "ptrace.tracee.group": - return e.PTrace.Tracee.Process.Credentials.Group, nil + return ev.PTrace.Tracee.Process.Credentials.Group, nil case "ptrace.tracee.interpreter.file.change_time": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil case "ptrace.tracee.interpreter.file.filesystem": - return e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil case "ptrace.tracee.interpreter.file.gid": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID), nil + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID), nil case "ptrace.tracee.interpreter.file.group": - return e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields), nil case "ptrace.tracee.interpreter.file.in_upper_layer": - return e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields), nil case "ptrace.tracee.interpreter.file.inode": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil case "ptrace.tracee.interpreter.file.mode": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil case "ptrace.tracee.interpreter.file.modification_time": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil case "ptrace.tracee.interpreter.file.mount_id": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil case "ptrace.tracee.interpreter.file.name": - return e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil case "ptrace.tracee.interpreter.file.name.length": - return len(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil case "ptrace.tracee.interpreter.file.path": - return e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil case "ptrace.tracee.interpreter.file.path.length": - return len(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil case "ptrace.tracee.interpreter.file.rights": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields)), nil case "ptrace.tracee.interpreter.file.uid": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID), nil + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID), nil case "ptrace.tracee.interpreter.file.user": - return e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields), nil case "ptrace.tracee.is_kworker": - return e.PTrace.Tracee.Process.PIDContext.IsKworker, nil + return ev.PTrace.Tracee.Process.PIDContext.IsKworker, nil case "ptrace.tracee.is_thread": - return e.PTrace.Tracee.Process.IsThread, nil + return ev.PTrace.Tracee.Process.IsThread, nil case "ptrace.tracee.parent.args": - return e.PTrace.Tracee.Parent.Args, nil + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.PTrace.Tracee.Parent), nil case "ptrace.tracee.parent.args_flags": - return e.PTrace.Tracee.Parent.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.PTrace.Tracee.Parent), nil case "ptrace.tracee.parent.args_options": - return e.PTrace.Tracee.Parent.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.PTrace.Tracee.Parent), nil case "ptrace.tracee.parent.args_truncated": - return e.PTrace.Tracee.Parent.ArgsTruncated, nil + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.PTrace.Tracee.Parent), nil case "ptrace.tracee.parent.argv": - return e.PTrace.Tracee.Parent.Argv, nil + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.PTrace.Tracee.Parent), nil case "ptrace.tracee.parent.argv0": - return e.PTrace.Tracee.Parent.Argv0, nil + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.PTrace.Tracee.Parent), nil case "ptrace.tracee.parent.cap_effective": - return int(e.PTrace.Tracee.Parent.Credentials.CapEffective), nil + return int(ev.PTrace.Tracee.Parent.Credentials.CapEffective), nil case "ptrace.tracee.parent.cap_permitted": - return int(e.PTrace.Tracee.Parent.Credentials.CapPermitted), nil + return int(ev.PTrace.Tracee.Parent.Credentials.CapPermitted), nil case "ptrace.tracee.parent.comm": - return e.PTrace.Tracee.Parent.Comm, nil + return ev.PTrace.Tracee.Parent.Comm, nil case "ptrace.tracee.parent.container.id": - return e.PTrace.Tracee.Parent.ContainerID, nil + return ev.PTrace.Tracee.Parent.ContainerID, nil case "ptrace.tracee.parent.cookie": - return int(e.PTrace.Tracee.Parent.Cookie), nil + return int(ev.PTrace.Tracee.Parent.Cookie), nil case "ptrace.tracee.parent.created_at": - return int(e.PTrace.Tracee.Parent.CreatedAt), nil + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.PTrace.Tracee.Parent)), nil case "ptrace.tracee.parent.egid": - return int(e.PTrace.Tracee.Parent.Credentials.EGID), nil + return int(ev.PTrace.Tracee.Parent.Credentials.EGID), nil case "ptrace.tracee.parent.egroup": - return e.PTrace.Tracee.Parent.Credentials.EGroup, nil + return ev.PTrace.Tracee.Parent.Credentials.EGroup, nil case "ptrace.tracee.parent.envp": - return e.PTrace.Tracee.Parent.Envp, nil + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.PTrace.Tracee.Parent), nil case "ptrace.tracee.parent.envs": - return e.PTrace.Tracee.Parent.Envs, nil + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.PTrace.Tracee.Parent), nil case "ptrace.tracee.parent.envs_truncated": - return e.PTrace.Tracee.Parent.EnvsTruncated, nil + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.PTrace.Tracee.Parent), nil case "ptrace.tracee.parent.euid": - return int(e.PTrace.Tracee.Parent.Credentials.EUID), nil + return int(ev.PTrace.Tracee.Parent.Credentials.EUID), nil case "ptrace.tracee.parent.euser": - return e.PTrace.Tracee.Parent.Credentials.EUser, nil + return ev.PTrace.Tracee.Parent.Credentials.EUser, nil case "ptrace.tracee.parent.file.change_time": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.CTime), nil + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.CTime), nil case "ptrace.tracee.parent.file.filesystem": - return e.PTrace.Tracee.Parent.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Parent.FileEvent), nil case "ptrace.tracee.parent.file.gid": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.GID), nil + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.GID), nil case "ptrace.tracee.parent.file.group": - return e.PTrace.Tracee.Parent.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields), nil case "ptrace.tracee.parent.file.in_upper_layer": - return e.PTrace.Tracee.Parent.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields), nil case "ptrace.tracee.parent.file.inode": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.Inode), nil + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.Inode), nil case "ptrace.tracee.parent.file.mode": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.Mode), nil + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.Mode), nil case "ptrace.tracee.parent.file.modification_time": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.MTime), nil + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.MTime), nil case "ptrace.tracee.parent.file.mount_id": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.MountID), nil + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.MountID), nil case "ptrace.tracee.parent.file.name": - return e.PTrace.Tracee.Parent.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.FileEvent), nil case "ptrace.tracee.parent.file.name.length": - return len(e.PTrace.Tracee.Parent.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.FileEvent), nil case "ptrace.tracee.parent.file.path": - return e.PTrace.Tracee.Parent.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.FileEvent), nil case "ptrace.tracee.parent.file.path.length": - return len(e.PTrace.Tracee.Parent.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.FileEvent), nil case "ptrace.tracee.parent.file.rights": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields)), nil case "ptrace.tracee.parent.file.uid": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.UID), nil + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.UID), nil case "ptrace.tracee.parent.file.user": - return e.PTrace.Tracee.Parent.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields), nil case "ptrace.tracee.parent.fsgid": - return int(e.PTrace.Tracee.Parent.Credentials.FSGID), nil + return int(ev.PTrace.Tracee.Parent.Credentials.FSGID), nil case "ptrace.tracee.parent.fsgroup": - return e.PTrace.Tracee.Parent.Credentials.FSGroup, nil + return ev.PTrace.Tracee.Parent.Credentials.FSGroup, nil case "ptrace.tracee.parent.fsuid": - return int(e.PTrace.Tracee.Parent.Credentials.FSUID), nil + return int(ev.PTrace.Tracee.Parent.Credentials.FSUID), nil case "ptrace.tracee.parent.fsuser": - return e.PTrace.Tracee.Parent.Credentials.FSUser, nil + return ev.PTrace.Tracee.Parent.Credentials.FSUser, nil case "ptrace.tracee.parent.gid": - return int(e.PTrace.Tracee.Parent.Credentials.GID), nil + return int(ev.PTrace.Tracee.Parent.Credentials.GID), nil case "ptrace.tracee.parent.group": - return e.PTrace.Tracee.Parent.Credentials.Group, nil + return ev.PTrace.Tracee.Parent.Credentials.Group, nil case "ptrace.tracee.parent.interpreter.file.change_time": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime), nil + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime), nil case "ptrace.tracee.parent.interpreter.file.filesystem": - return e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil case "ptrace.tracee.parent.interpreter.file.gid": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID), nil + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID), nil case "ptrace.tracee.parent.interpreter.file.group": - return e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields), nil case "ptrace.tracee.parent.interpreter.file.in_upper_layer": - return e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields), nil case "ptrace.tracee.parent.interpreter.file.inode": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode), nil + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode), nil case "ptrace.tracee.parent.interpreter.file.mode": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil case "ptrace.tracee.parent.interpreter.file.modification_time": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime), nil + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime), nil case "ptrace.tracee.parent.interpreter.file.mount_id": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID), nil + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID), nil case "ptrace.tracee.parent.interpreter.file.name": - return e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil case "ptrace.tracee.parent.interpreter.file.name.length": - return len(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil case "ptrace.tracee.parent.interpreter.file.path": - return e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil case "ptrace.tracee.parent.interpreter.file.path.length": - return len(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil case "ptrace.tracee.parent.interpreter.file.rights": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields)), nil case "ptrace.tracee.parent.interpreter.file.uid": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID), nil + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID), nil case "ptrace.tracee.parent.interpreter.file.user": - return e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields), nil case "ptrace.tracee.parent.is_kworker": - return e.PTrace.Tracee.Parent.PIDContext.IsKworker, nil + return ev.PTrace.Tracee.Parent.PIDContext.IsKworker, nil case "ptrace.tracee.parent.is_thread": - return e.PTrace.Tracee.Parent.IsThread, nil + return ev.PTrace.Tracee.Parent.IsThread, nil case "ptrace.tracee.parent.pid": - return int(e.PTrace.Tracee.Parent.PIDContext.Pid), nil + return int(ev.PTrace.Tracee.Parent.PIDContext.Pid), nil case "ptrace.tracee.parent.ppid": - return int(e.PTrace.Tracee.Parent.PPid), nil + return int(ev.PTrace.Tracee.Parent.PPid), nil case "ptrace.tracee.parent.tid": - return int(e.PTrace.Tracee.Parent.PIDContext.Tid), nil + return int(ev.PTrace.Tracee.Parent.PIDContext.Tid), nil case "ptrace.tracee.parent.tty_name": - return e.PTrace.Tracee.Parent.TTYName, nil + return ev.PTrace.Tracee.Parent.TTYName, nil case "ptrace.tracee.parent.uid": - return int(e.PTrace.Tracee.Parent.Credentials.UID), nil + return int(ev.PTrace.Tracee.Parent.Credentials.UID), nil case "ptrace.tracee.parent.user": - return e.PTrace.Tracee.Parent.Credentials.User, nil + return ev.PTrace.Tracee.Parent.Credentials.User, nil case "ptrace.tracee.pid": - return int(e.PTrace.Tracee.Process.PIDContext.Pid), nil + return int(ev.PTrace.Tracee.Process.PIDContext.Pid), nil case "ptrace.tracee.ppid": - return int(e.PTrace.Tracee.Process.PPid), nil + return int(ev.PTrace.Tracee.Process.PPid), nil case "ptrace.tracee.tid": - return int(e.PTrace.Tracee.Process.PIDContext.Tid), nil + return int(ev.PTrace.Tracee.Process.PIDContext.Tid), nil case "ptrace.tracee.tty_name": - return e.PTrace.Tracee.Process.TTYName, nil + return ev.PTrace.Tracee.Process.TTYName, nil case "ptrace.tracee.uid": - return int(e.PTrace.Tracee.Process.Credentials.UID), nil + return int(ev.PTrace.Tracee.Process.Credentials.UID), nil case "ptrace.tracee.user": - return e.PTrace.Tracee.Process.Credentials.User, nil + return ev.PTrace.Tracee.Process.Credentials.User, nil case "removexattr.file.change_time": - return int(e.RemoveXAttr.File.FileFields.CTime), nil + return int(ev.RemoveXAttr.File.FileFields.CTime), nil case "removexattr.file.destination.name": - return e.RemoveXAttr.Name, nil + return ev.FieldHandlers.ResolveXAttrName(ev, &ev.RemoveXAttr), nil case "removexattr.file.destination.namespace": - return e.RemoveXAttr.Namespace, nil + return ev.FieldHandlers.ResolveXAttrNamespace(ev, &ev.RemoveXAttr), nil case "removexattr.file.filesystem": - return e.RemoveXAttr.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.RemoveXAttr.File), nil case "removexattr.file.gid": - return int(e.RemoveXAttr.File.FileFields.GID), nil + return int(ev.RemoveXAttr.File.FileFields.GID), nil case "removexattr.file.group": - return e.RemoveXAttr.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.RemoveXAttr.File.FileFields), nil case "removexattr.file.in_upper_layer": - return e.RemoveXAttr.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.RemoveXAttr.File.FileFields), nil case "removexattr.file.inode": - return int(e.RemoveXAttr.File.FileFields.Inode), nil + return int(ev.RemoveXAttr.File.FileFields.Inode), nil case "removexattr.file.mode": - return int(e.RemoveXAttr.File.FileFields.Mode), nil + return int(ev.RemoveXAttr.File.FileFields.Mode), nil case "removexattr.file.modification_time": - return int(e.RemoveXAttr.File.FileFields.MTime), nil + return int(ev.RemoveXAttr.File.FileFields.MTime), nil case "removexattr.file.mount_id": - return int(e.RemoveXAttr.File.FileFields.MountID), nil + return int(ev.RemoveXAttr.File.FileFields.MountID), nil case "removexattr.file.name": - return e.RemoveXAttr.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.RemoveXAttr.File), nil case "removexattr.file.name.length": - return len(e.RemoveXAttr.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.RemoveXAttr.File), nil case "removexattr.file.path": - return e.RemoveXAttr.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.RemoveXAttr.File), nil case "removexattr.file.path.length": - return len(e.RemoveXAttr.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.RemoveXAttr.File), nil case "removexattr.file.rights": - return int(e.RemoveXAttr.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.RemoveXAttr.File.FileFields)), nil case "removexattr.file.uid": - return int(e.RemoveXAttr.File.FileFields.UID), nil + return int(ev.RemoveXAttr.File.FileFields.UID), nil case "removexattr.file.user": - return e.RemoveXAttr.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.RemoveXAttr.File.FileFields), nil case "removexattr.retval": - return int(e.RemoveXAttr.SyscallEvent.Retval), nil + return int(ev.RemoveXAttr.SyscallEvent.Retval), nil case "rename.file.change_time": - return int(e.Rename.Old.FileFields.CTime), nil + return int(ev.Rename.Old.FileFields.CTime), nil case "rename.file.destination.change_time": - return int(e.Rename.New.FileFields.CTime), nil + return int(ev.Rename.New.FileFields.CTime), nil case "rename.file.destination.filesystem": - return e.Rename.New.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Rename.New), nil case "rename.file.destination.gid": - return int(e.Rename.New.FileFields.GID), nil + return int(ev.Rename.New.FileFields.GID), nil case "rename.file.destination.group": - return e.Rename.New.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Rename.New.FileFields), nil case "rename.file.destination.in_upper_layer": - return e.Rename.New.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Rename.New.FileFields), nil case "rename.file.destination.inode": - return int(e.Rename.New.FileFields.Inode), nil + return int(ev.Rename.New.FileFields.Inode), nil case "rename.file.destination.mode": - return int(e.Rename.New.FileFields.Mode), nil + return int(ev.Rename.New.FileFields.Mode), nil case "rename.file.destination.modification_time": - return int(e.Rename.New.FileFields.MTime), nil + return int(ev.Rename.New.FileFields.MTime), nil case "rename.file.destination.mount_id": - return int(e.Rename.New.FileFields.MountID), nil + return int(ev.Rename.New.FileFields.MountID), nil case "rename.file.destination.name": - return e.Rename.New.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.New), nil case "rename.file.destination.name.length": - return len(e.Rename.New.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.New), nil case "rename.file.destination.path": - return e.Rename.New.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.New), nil case "rename.file.destination.path.length": - return len(e.Rename.New.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.New), nil case "rename.file.destination.rights": - return int(e.Rename.New.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Rename.New.FileFields)), nil case "rename.file.destination.uid": - return int(e.Rename.New.FileFields.UID), nil + return int(ev.Rename.New.FileFields.UID), nil case "rename.file.destination.user": - return e.Rename.New.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Rename.New.FileFields), nil case "rename.file.filesystem": - return e.Rename.Old.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Rename.Old), nil case "rename.file.gid": - return int(e.Rename.Old.FileFields.GID), nil + return int(ev.Rename.Old.FileFields.GID), nil case "rename.file.group": - return e.Rename.Old.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Rename.Old.FileFields), nil case "rename.file.in_upper_layer": - return e.Rename.Old.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Rename.Old.FileFields), nil case "rename.file.inode": - return int(e.Rename.Old.FileFields.Inode), nil + return int(ev.Rename.Old.FileFields.Inode), nil case "rename.file.mode": - return int(e.Rename.Old.FileFields.Mode), nil + return int(ev.Rename.Old.FileFields.Mode), nil case "rename.file.modification_time": - return int(e.Rename.Old.FileFields.MTime), nil + return int(ev.Rename.Old.FileFields.MTime), nil case "rename.file.mount_id": - return int(e.Rename.Old.FileFields.MountID), nil + return int(ev.Rename.Old.FileFields.MountID), nil case "rename.file.name": - return e.Rename.Old.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.Old), nil case "rename.file.name.length": - return len(e.Rename.Old.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.Old), nil case "rename.file.path": - return e.Rename.Old.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.Old), nil case "rename.file.path.length": - return len(e.Rename.Old.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.Old), nil case "rename.file.rights": - return int(e.Rename.Old.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Rename.Old.FileFields)), nil case "rename.file.uid": - return int(e.Rename.Old.FileFields.UID), nil + return int(ev.Rename.Old.FileFields.UID), nil case "rename.file.user": - return e.Rename.Old.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Rename.Old.FileFields), nil case "rename.retval": - return int(e.Rename.SyscallEvent.Retval), nil + return int(ev.Rename.SyscallEvent.Retval), nil case "rmdir.file.change_time": - return int(e.Rmdir.File.FileFields.CTime), nil + return int(ev.Rmdir.File.FileFields.CTime), nil case "rmdir.file.filesystem": - return e.Rmdir.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Rmdir.File), nil case "rmdir.file.gid": - return int(e.Rmdir.File.FileFields.GID), nil + return int(ev.Rmdir.File.FileFields.GID), nil case "rmdir.file.group": - return e.Rmdir.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Rmdir.File.FileFields), nil case "rmdir.file.in_upper_layer": - return e.Rmdir.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Rmdir.File.FileFields), nil case "rmdir.file.inode": - return int(e.Rmdir.File.FileFields.Inode), nil + return int(ev.Rmdir.File.FileFields.Inode), nil case "rmdir.file.mode": - return int(e.Rmdir.File.FileFields.Mode), nil + return int(ev.Rmdir.File.FileFields.Mode), nil case "rmdir.file.modification_time": - return int(e.Rmdir.File.FileFields.MTime), nil + return int(ev.Rmdir.File.FileFields.MTime), nil case "rmdir.file.mount_id": - return int(e.Rmdir.File.FileFields.MountID), nil + return int(ev.Rmdir.File.FileFields.MountID), nil case "rmdir.file.name": - return e.Rmdir.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rmdir.File), nil case "rmdir.file.name.length": - return len(e.Rmdir.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rmdir.File), nil case "rmdir.file.path": - return e.Rmdir.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Rmdir.File), nil case "rmdir.file.path.length": - return len(e.Rmdir.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Rmdir.File), nil case "rmdir.file.rights": - return int(e.Rmdir.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Rmdir.File.FileFields)), nil case "rmdir.file.uid": - return int(e.Rmdir.File.FileFields.UID), nil + return int(ev.Rmdir.File.FileFields.UID), nil case "rmdir.file.user": - return e.Rmdir.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Rmdir.File.FileFields), nil case "rmdir.retval": - return int(e.Rmdir.SyscallEvent.Retval), nil + return int(ev.Rmdir.SyscallEvent.Retval), nil case "selinux.bool.name": - return e.SELinux.BoolName, nil + return ev.FieldHandlers.ResolveSELinuxBoolName(ev, &ev.SELinux), nil case "selinux.bool.state": - return e.SELinux.BoolChangeValue, nil + return ev.SELinux.BoolChangeValue, nil case "selinux.bool_commit.state": - return e.SELinux.BoolCommitValue, nil + return ev.SELinux.BoolCommitValue, nil case "selinux.enforce.status": - return e.SELinux.EnforceStatus, nil + return ev.SELinux.EnforceStatus, nil case "setgid.egid": - return int(e.SetGID.EGID), nil + return int(ev.SetGID.EGID), nil case "setgid.egroup": - return e.SetGID.EGroup, nil + return ev.FieldHandlers.ResolveSetgidEGroup(ev, &ev.SetGID), nil case "setgid.fsgid": - return int(e.SetGID.FSGID), nil + return int(ev.SetGID.FSGID), nil case "setgid.fsgroup": - return e.SetGID.FSGroup, nil + return ev.FieldHandlers.ResolveSetgidFSGroup(ev, &ev.SetGID), nil case "setgid.gid": - return int(e.SetGID.GID), nil + return int(ev.SetGID.GID), nil case "setgid.group": - return e.SetGID.Group, nil + return ev.FieldHandlers.ResolveSetgidGroup(ev, &ev.SetGID), nil case "setuid.euid": - return int(e.SetUID.EUID), nil + return int(ev.SetUID.EUID), nil case "setuid.euser": - return e.SetUID.EUser, nil + return ev.FieldHandlers.ResolveSetuidEUser(ev, &ev.SetUID), nil case "setuid.fsuid": - return int(e.SetUID.FSUID), nil + return int(ev.SetUID.FSUID), nil case "setuid.fsuser": - return e.SetUID.FSUser, nil + return ev.FieldHandlers.ResolveSetuidFSUser(ev, &ev.SetUID), nil case "setuid.uid": - return int(e.SetUID.UID), nil + return int(ev.SetUID.UID), nil case "setuid.user": - return e.SetUID.User, nil + return ev.FieldHandlers.ResolveSetuidUser(ev, &ev.SetUID), nil case "setxattr.file.change_time": - return int(e.SetXAttr.File.FileFields.CTime), nil + return int(ev.SetXAttr.File.FileFields.CTime), nil case "setxattr.file.destination.name": - return e.SetXAttr.Name, nil + return ev.FieldHandlers.ResolveXAttrName(ev, &ev.SetXAttr), nil case "setxattr.file.destination.namespace": - return e.SetXAttr.Namespace, nil + return ev.FieldHandlers.ResolveXAttrNamespace(ev, &ev.SetXAttr), nil case "setxattr.file.filesystem": - return e.SetXAttr.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.SetXAttr.File), nil case "setxattr.file.gid": - return int(e.SetXAttr.File.FileFields.GID), nil + return int(ev.SetXAttr.File.FileFields.GID), nil case "setxattr.file.group": - return e.SetXAttr.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.SetXAttr.File.FileFields), nil case "setxattr.file.in_upper_layer": - return e.SetXAttr.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.SetXAttr.File.FileFields), nil case "setxattr.file.inode": - return int(e.SetXAttr.File.FileFields.Inode), nil + return int(ev.SetXAttr.File.FileFields.Inode), nil case "setxattr.file.mode": - return int(e.SetXAttr.File.FileFields.Mode), nil + return int(ev.SetXAttr.File.FileFields.Mode), nil case "setxattr.file.modification_time": - return int(e.SetXAttr.File.FileFields.MTime), nil + return int(ev.SetXAttr.File.FileFields.MTime), nil case "setxattr.file.mount_id": - return int(e.SetXAttr.File.FileFields.MountID), nil + return int(ev.SetXAttr.File.FileFields.MountID), nil case "setxattr.file.name": - return e.SetXAttr.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.SetXAttr.File), nil case "setxattr.file.name.length": - return len(e.SetXAttr.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.SetXAttr.File), nil case "setxattr.file.path": - return e.SetXAttr.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.SetXAttr.File), nil case "setxattr.file.path.length": - return len(e.SetXAttr.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.SetXAttr.File), nil case "setxattr.file.rights": - return int(e.SetXAttr.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.SetXAttr.File.FileFields)), nil case "setxattr.file.uid": - return int(e.SetXAttr.File.FileFields.UID), nil + return int(ev.SetXAttr.File.FileFields.UID), nil case "setxattr.file.user": - return e.SetXAttr.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.SetXAttr.File.FileFields), nil case "setxattr.retval": - return int(e.SetXAttr.SyscallEvent.Retval), nil + return int(ev.SetXAttr.SyscallEvent.Retval), nil case "signal.pid": - return int(e.Signal.PID), nil + return int(ev.Signal.PID), nil case "signal.retval": - return int(e.Signal.SyscallEvent.Retval), nil + return int(ev.Signal.SyscallEvent.Retval), nil case "signal.target.ancestors.args": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Args + result := ev.FieldHandlers.ResolveProcessArgs(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.args_flags": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsFlags(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.args_options": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsOptions(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.args_truncated": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.ArgsTruncated + result := ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.argv": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgv(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.argv0": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv0 + result := ev.FieldHandlers.ResolveProcessArgv0(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.cap_effective": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16104,7 +18235,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.cap_permitted": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16116,7 +18247,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.comm": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16128,7 +18259,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.container.id": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16140,7 +18271,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.cookie": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16152,19 +18283,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.created_at": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.CreatedAt) + result := int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &element.ProcessContext.Process)) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.egid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16176,7 +18307,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.egroup": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16188,43 +18319,43 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.envp": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Envp + result := ev.FieldHandlers.ResolveProcessEnvp(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.envs": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Envs + result := ev.FieldHandlers.ResolveProcessEnvs(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.envs_truncated": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.EnvsTruncated + result := ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.euid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16236,7 +18367,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.euser": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16248,7 +18379,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.file.change_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16260,19 +18391,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.file.filesystem": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.file.gid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16284,31 +18415,31 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.file.group": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.file.in_upper_layer": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.file.inode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16320,7 +18451,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.file.mode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16332,7 +18463,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.file.modification_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16344,7 +18475,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.file.mount_id": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16356,67 +18487,67 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.file.name": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.file.name.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.file.path": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.file.path.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.file.rights": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.FileEvent.FileFields)) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.file.uid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16428,19 +18559,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.file.user": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.fsgid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16452,7 +18583,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.fsgroup": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16464,7 +18595,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.fsuid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16476,7 +18607,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.fsuser": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16488,7 +18619,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.gid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16500,7 +18631,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.group": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16512,7 +18643,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.interpreter.file.change_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16524,19 +18655,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.interpreter.file.filesystem": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.interpreter.file.gid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16548,31 +18679,31 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.interpreter.file.group": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.interpreter.file.in_upper_layer": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.interpreter.file.inode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16584,7 +18715,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.interpreter.file.mode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16596,7 +18727,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.interpreter.file.modification_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16608,7 +18739,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.interpreter.file.mount_id": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16620,67 +18751,67 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.interpreter.file.name": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.interpreter.file.name.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.interpreter.file.path": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.interpreter.file.path.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.interpreter.file.rights": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.interpreter.file.uid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16692,19 +18823,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.interpreter.file.user": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.is_kworker": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16716,7 +18847,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.is_thread": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16728,7 +18859,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.pid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16740,7 +18871,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.ppid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16752,7 +18883,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.tid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16764,7 +18895,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.tty_name": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16776,7 +18907,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.uid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16788,7 +18919,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.user": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16799,383 +18930,383 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { } return values, nil case "signal.target.args": - return e.Signal.Target.Process.Args, nil + return ev.FieldHandlers.ResolveProcessArgs(ev, &ev.Signal.Target.Process), nil case "signal.target.args_flags": - return e.Signal.Target.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, &ev.Signal.Target.Process), nil case "signal.target.args_options": - return e.Signal.Target.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, &ev.Signal.Target.Process), nil case "signal.target.args_truncated": - return e.Signal.Target.Process.ArgsTruncated, nil + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &ev.Signal.Target.Process), nil case "signal.target.argv": - return e.Signal.Target.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgv(ev, &ev.Signal.Target.Process), nil case "signal.target.argv0": - return e.Signal.Target.Process.Argv0, nil + return ev.FieldHandlers.ResolveProcessArgv0(ev, &ev.Signal.Target.Process), nil case "signal.target.cap_effective": - return int(e.Signal.Target.Process.Credentials.CapEffective), nil + return int(ev.Signal.Target.Process.Credentials.CapEffective), nil case "signal.target.cap_permitted": - return int(e.Signal.Target.Process.Credentials.CapPermitted), nil + return int(ev.Signal.Target.Process.Credentials.CapPermitted), nil case "signal.target.comm": - return e.Signal.Target.Process.Comm, nil + return ev.Signal.Target.Process.Comm, nil case "signal.target.container.id": - return e.Signal.Target.Process.ContainerID, nil + return ev.Signal.Target.Process.ContainerID, nil case "signal.target.cookie": - return int(e.Signal.Target.Process.Cookie), nil + return int(ev.Signal.Target.Process.Cookie), nil case "signal.target.created_at": - return int(e.Signal.Target.Process.CreatedAt), nil + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &ev.Signal.Target.Process)), nil case "signal.target.egid": - return int(e.Signal.Target.Process.Credentials.EGID), nil + return int(ev.Signal.Target.Process.Credentials.EGID), nil case "signal.target.egroup": - return e.Signal.Target.Process.Credentials.EGroup, nil + return ev.Signal.Target.Process.Credentials.EGroup, nil case "signal.target.envp": - return e.Signal.Target.Process.Envp, nil + return ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.Signal.Target.Process), nil case "signal.target.envs": - return e.Signal.Target.Process.Envs, nil + return ev.FieldHandlers.ResolveProcessEnvs(ev, &ev.Signal.Target.Process), nil case "signal.target.envs_truncated": - return e.Signal.Target.Process.EnvsTruncated, nil + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &ev.Signal.Target.Process), nil case "signal.target.euid": - return int(e.Signal.Target.Process.Credentials.EUID), nil + return int(ev.Signal.Target.Process.Credentials.EUID), nil case "signal.target.euser": - return e.Signal.Target.Process.Credentials.EUser, nil + return ev.Signal.Target.Process.Credentials.EUser, nil case "signal.target.file.change_time": - return int(e.Signal.Target.Process.FileEvent.FileFields.CTime), nil + return int(ev.Signal.Target.Process.FileEvent.FileFields.CTime), nil case "signal.target.file.filesystem": - return e.Signal.Target.Process.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Process.FileEvent), nil case "signal.target.file.gid": - return int(e.Signal.Target.Process.FileEvent.FileFields.GID), nil + return int(ev.Signal.Target.Process.FileEvent.FileFields.GID), nil case "signal.target.file.group": - return e.Signal.Target.Process.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Process.FileEvent.FileFields), nil case "signal.target.file.in_upper_layer": - return e.Signal.Target.Process.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Process.FileEvent.FileFields), nil case "signal.target.file.inode": - return int(e.Signal.Target.Process.FileEvent.FileFields.Inode), nil + return int(ev.Signal.Target.Process.FileEvent.FileFields.Inode), nil case "signal.target.file.mode": - return int(e.Signal.Target.Process.FileEvent.FileFields.Mode), nil + return int(ev.Signal.Target.Process.FileEvent.FileFields.Mode), nil case "signal.target.file.modification_time": - return int(e.Signal.Target.Process.FileEvent.FileFields.MTime), nil + return int(ev.Signal.Target.Process.FileEvent.FileFields.MTime), nil case "signal.target.file.mount_id": - return int(e.Signal.Target.Process.FileEvent.FileFields.MountID), nil + return int(ev.Signal.Target.Process.FileEvent.FileFields.MountID), nil case "signal.target.file.name": - return e.Signal.Target.Process.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.FileEvent), nil case "signal.target.file.name.length": - return len(e.Signal.Target.Process.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.FileEvent), nil case "signal.target.file.path": - return e.Signal.Target.Process.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.FileEvent), nil case "signal.target.file.path.length": - return len(e.Signal.Target.Process.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.FileEvent), nil case "signal.target.file.rights": - return int(e.Signal.Target.Process.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Signal.Target.Process.FileEvent.FileFields)), nil case "signal.target.file.uid": - return int(e.Signal.Target.Process.FileEvent.FileFields.UID), nil + return int(ev.Signal.Target.Process.FileEvent.FileFields.UID), nil case "signal.target.file.user": - return e.Signal.Target.Process.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Process.FileEvent.FileFields), nil case "signal.target.fsgid": - return int(e.Signal.Target.Process.Credentials.FSGID), nil + return int(ev.Signal.Target.Process.Credentials.FSGID), nil case "signal.target.fsgroup": - return e.Signal.Target.Process.Credentials.FSGroup, nil + return ev.Signal.Target.Process.Credentials.FSGroup, nil case "signal.target.fsuid": - return int(e.Signal.Target.Process.Credentials.FSUID), nil + return int(ev.Signal.Target.Process.Credentials.FSUID), nil case "signal.target.fsuser": - return e.Signal.Target.Process.Credentials.FSUser, nil + return ev.Signal.Target.Process.Credentials.FSUser, nil case "signal.target.gid": - return int(e.Signal.Target.Process.Credentials.GID), nil + return int(ev.Signal.Target.Process.Credentials.GID), nil case "signal.target.group": - return e.Signal.Target.Process.Credentials.Group, nil + return ev.Signal.Target.Process.Credentials.Group, nil case "signal.target.interpreter.file.change_time": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil case "signal.target.interpreter.file.filesystem": - return e.Signal.Target.Process.LinuxBinprm.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent), nil case "signal.target.interpreter.file.gid": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID), nil + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID), nil case "signal.target.interpreter.file.group": - return e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields), nil case "signal.target.interpreter.file.in_upper_layer": - return e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields), nil case "signal.target.interpreter.file.inode": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil case "signal.target.interpreter.file.mode": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil case "signal.target.interpreter.file.modification_time": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil case "signal.target.interpreter.file.mount_id": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil case "signal.target.interpreter.file.name": - return e.Signal.Target.Process.LinuxBinprm.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent), nil case "signal.target.interpreter.file.name.length": - return len(e.Signal.Target.Process.LinuxBinprm.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent), nil case "signal.target.interpreter.file.path": - return e.Signal.Target.Process.LinuxBinprm.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent), nil case "signal.target.interpreter.file.path.length": - return len(e.Signal.Target.Process.LinuxBinprm.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent), nil case "signal.target.interpreter.file.rights": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields)), nil case "signal.target.interpreter.file.uid": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID), nil + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID), nil case "signal.target.interpreter.file.user": - return e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields), nil case "signal.target.is_kworker": - return e.Signal.Target.Process.PIDContext.IsKworker, nil + return ev.Signal.Target.Process.PIDContext.IsKworker, nil case "signal.target.is_thread": - return e.Signal.Target.Process.IsThread, nil + return ev.Signal.Target.Process.IsThread, nil case "signal.target.parent.args": - return e.Signal.Target.Parent.Args, nil + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.Signal.Target.Parent), nil case "signal.target.parent.args_flags": - return e.Signal.Target.Parent.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.Signal.Target.Parent), nil case "signal.target.parent.args_options": - return e.Signal.Target.Parent.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.Signal.Target.Parent), nil case "signal.target.parent.args_truncated": - return e.Signal.Target.Parent.ArgsTruncated, nil + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.Signal.Target.Parent), nil case "signal.target.parent.argv": - return e.Signal.Target.Parent.Argv, nil + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.Signal.Target.Parent), nil case "signal.target.parent.argv0": - return e.Signal.Target.Parent.Argv0, nil + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.Signal.Target.Parent), nil case "signal.target.parent.cap_effective": - return int(e.Signal.Target.Parent.Credentials.CapEffective), nil + return int(ev.Signal.Target.Parent.Credentials.CapEffective), nil case "signal.target.parent.cap_permitted": - return int(e.Signal.Target.Parent.Credentials.CapPermitted), nil + return int(ev.Signal.Target.Parent.Credentials.CapPermitted), nil case "signal.target.parent.comm": - return e.Signal.Target.Parent.Comm, nil + return ev.Signal.Target.Parent.Comm, nil case "signal.target.parent.container.id": - return e.Signal.Target.Parent.ContainerID, nil + return ev.Signal.Target.Parent.ContainerID, nil case "signal.target.parent.cookie": - return int(e.Signal.Target.Parent.Cookie), nil + return int(ev.Signal.Target.Parent.Cookie), nil case "signal.target.parent.created_at": - return int(e.Signal.Target.Parent.CreatedAt), nil + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.Signal.Target.Parent)), nil case "signal.target.parent.egid": - return int(e.Signal.Target.Parent.Credentials.EGID), nil + return int(ev.Signal.Target.Parent.Credentials.EGID), nil case "signal.target.parent.egroup": - return e.Signal.Target.Parent.Credentials.EGroup, nil + return ev.Signal.Target.Parent.Credentials.EGroup, nil case "signal.target.parent.envp": - return e.Signal.Target.Parent.Envp, nil + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.Signal.Target.Parent), nil case "signal.target.parent.envs": - return e.Signal.Target.Parent.Envs, nil + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.Signal.Target.Parent), nil case "signal.target.parent.envs_truncated": - return e.Signal.Target.Parent.EnvsTruncated, nil + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.Signal.Target.Parent), nil case "signal.target.parent.euid": - return int(e.Signal.Target.Parent.Credentials.EUID), nil + return int(ev.Signal.Target.Parent.Credentials.EUID), nil case "signal.target.parent.euser": - return e.Signal.Target.Parent.Credentials.EUser, nil + return ev.Signal.Target.Parent.Credentials.EUser, nil case "signal.target.parent.file.change_time": - return int(e.Signal.Target.Parent.FileEvent.FileFields.CTime), nil + return int(ev.Signal.Target.Parent.FileEvent.FileFields.CTime), nil case "signal.target.parent.file.filesystem": - return e.Signal.Target.Parent.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Parent.FileEvent), nil case "signal.target.parent.file.gid": - return int(e.Signal.Target.Parent.FileEvent.FileFields.GID), nil + return int(ev.Signal.Target.Parent.FileEvent.FileFields.GID), nil case "signal.target.parent.file.group": - return e.Signal.Target.Parent.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Parent.FileEvent.FileFields), nil case "signal.target.parent.file.in_upper_layer": - return e.Signal.Target.Parent.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Parent.FileEvent.FileFields), nil case "signal.target.parent.file.inode": - return int(e.Signal.Target.Parent.FileEvent.FileFields.Inode), nil + return int(ev.Signal.Target.Parent.FileEvent.FileFields.Inode), nil case "signal.target.parent.file.mode": - return int(e.Signal.Target.Parent.FileEvent.FileFields.Mode), nil + return int(ev.Signal.Target.Parent.FileEvent.FileFields.Mode), nil case "signal.target.parent.file.modification_time": - return int(e.Signal.Target.Parent.FileEvent.FileFields.MTime), nil + return int(ev.Signal.Target.Parent.FileEvent.FileFields.MTime), nil case "signal.target.parent.file.mount_id": - return int(e.Signal.Target.Parent.FileEvent.FileFields.MountID), nil + return int(ev.Signal.Target.Parent.FileEvent.FileFields.MountID), nil case "signal.target.parent.file.name": - return e.Signal.Target.Parent.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.FileEvent), nil case "signal.target.parent.file.name.length": - return len(e.Signal.Target.Parent.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.FileEvent), nil case "signal.target.parent.file.path": - return e.Signal.Target.Parent.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.FileEvent), nil case "signal.target.parent.file.path.length": - return len(e.Signal.Target.Parent.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.FileEvent), nil case "signal.target.parent.file.rights": - return int(e.Signal.Target.Parent.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Signal.Target.Parent.FileEvent.FileFields)), nil case "signal.target.parent.file.uid": - return int(e.Signal.Target.Parent.FileEvent.FileFields.UID), nil + return int(ev.Signal.Target.Parent.FileEvent.FileFields.UID), nil case "signal.target.parent.file.user": - return e.Signal.Target.Parent.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Parent.FileEvent.FileFields), nil case "signal.target.parent.fsgid": - return int(e.Signal.Target.Parent.Credentials.FSGID), nil + return int(ev.Signal.Target.Parent.Credentials.FSGID), nil case "signal.target.parent.fsgroup": - return e.Signal.Target.Parent.Credentials.FSGroup, nil + return ev.Signal.Target.Parent.Credentials.FSGroup, nil case "signal.target.parent.fsuid": - return int(e.Signal.Target.Parent.Credentials.FSUID), nil + return int(ev.Signal.Target.Parent.Credentials.FSUID), nil case "signal.target.parent.fsuser": - return e.Signal.Target.Parent.Credentials.FSUser, nil + return ev.Signal.Target.Parent.Credentials.FSUser, nil case "signal.target.parent.gid": - return int(e.Signal.Target.Parent.Credentials.GID), nil + return int(ev.Signal.Target.Parent.Credentials.GID), nil case "signal.target.parent.group": - return e.Signal.Target.Parent.Credentials.Group, nil + return ev.Signal.Target.Parent.Credentials.Group, nil case "signal.target.parent.interpreter.file.change_time": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime), nil + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime), nil case "signal.target.parent.interpreter.file.filesystem": - return e.Signal.Target.Parent.LinuxBinprm.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent), nil case "signal.target.parent.interpreter.file.gid": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID), nil + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID), nil case "signal.target.parent.interpreter.file.group": - return e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields), nil case "signal.target.parent.interpreter.file.in_upper_layer": - return e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields), nil case "signal.target.parent.interpreter.file.inode": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode), nil + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode), nil case "signal.target.parent.interpreter.file.mode": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil case "signal.target.parent.interpreter.file.modification_time": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime), nil + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime), nil case "signal.target.parent.interpreter.file.mount_id": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID), nil + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID), nil case "signal.target.parent.interpreter.file.name": - return e.Signal.Target.Parent.LinuxBinprm.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent), nil case "signal.target.parent.interpreter.file.name.length": - return len(e.Signal.Target.Parent.LinuxBinprm.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent), nil case "signal.target.parent.interpreter.file.path": - return e.Signal.Target.Parent.LinuxBinprm.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent), nil case "signal.target.parent.interpreter.file.path.length": - return len(e.Signal.Target.Parent.LinuxBinprm.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent), nil case "signal.target.parent.interpreter.file.rights": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields)), nil case "signal.target.parent.interpreter.file.uid": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID), nil + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID), nil case "signal.target.parent.interpreter.file.user": - return e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields), nil case "signal.target.parent.is_kworker": - return e.Signal.Target.Parent.PIDContext.IsKworker, nil + return ev.Signal.Target.Parent.PIDContext.IsKworker, nil case "signal.target.parent.is_thread": - return e.Signal.Target.Parent.IsThread, nil + return ev.Signal.Target.Parent.IsThread, nil case "signal.target.parent.pid": - return int(e.Signal.Target.Parent.PIDContext.Pid), nil + return int(ev.Signal.Target.Parent.PIDContext.Pid), nil case "signal.target.parent.ppid": - return int(e.Signal.Target.Parent.PPid), nil + return int(ev.Signal.Target.Parent.PPid), nil case "signal.target.parent.tid": - return int(e.Signal.Target.Parent.PIDContext.Tid), nil + return int(ev.Signal.Target.Parent.PIDContext.Tid), nil case "signal.target.parent.tty_name": - return e.Signal.Target.Parent.TTYName, nil + return ev.Signal.Target.Parent.TTYName, nil case "signal.target.parent.uid": - return int(e.Signal.Target.Parent.Credentials.UID), nil + return int(ev.Signal.Target.Parent.Credentials.UID), nil case "signal.target.parent.user": - return e.Signal.Target.Parent.Credentials.User, nil + return ev.Signal.Target.Parent.Credentials.User, nil case "signal.target.pid": - return int(e.Signal.Target.Process.PIDContext.Pid), nil + return int(ev.Signal.Target.Process.PIDContext.Pid), nil case "signal.target.ppid": - return int(e.Signal.Target.Process.PPid), nil + return int(ev.Signal.Target.Process.PPid), nil case "signal.target.tid": - return int(e.Signal.Target.Process.PIDContext.Tid), nil + return int(ev.Signal.Target.Process.PIDContext.Tid), nil case "signal.target.tty_name": - return e.Signal.Target.Process.TTYName, nil + return ev.Signal.Target.Process.TTYName, nil case "signal.target.uid": - return int(e.Signal.Target.Process.Credentials.UID), nil + return int(ev.Signal.Target.Process.Credentials.UID), nil case "signal.target.user": - return e.Signal.Target.Process.Credentials.User, nil + return ev.Signal.Target.Process.Credentials.User, nil case "signal.type": - return int(e.Signal.Type), nil + return int(ev.Signal.Type), nil case "splice.file.change_time": - return int(e.Splice.File.FileFields.CTime), nil + return int(ev.Splice.File.FileFields.CTime), nil case "splice.file.filesystem": - return e.Splice.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Splice.File), nil case "splice.file.gid": - return int(e.Splice.File.FileFields.GID), nil + return int(ev.Splice.File.FileFields.GID), nil case "splice.file.group": - return e.Splice.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Splice.File.FileFields), nil case "splice.file.in_upper_layer": - return e.Splice.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Splice.File.FileFields), nil case "splice.file.inode": - return int(e.Splice.File.FileFields.Inode), nil + return int(ev.Splice.File.FileFields.Inode), nil case "splice.file.mode": - return int(e.Splice.File.FileFields.Mode), nil + return int(ev.Splice.File.FileFields.Mode), nil case "splice.file.modification_time": - return int(e.Splice.File.FileFields.MTime), nil + return int(ev.Splice.File.FileFields.MTime), nil case "splice.file.mount_id": - return int(e.Splice.File.FileFields.MountID), nil + return int(ev.Splice.File.FileFields.MountID), nil case "splice.file.name": - return e.Splice.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Splice.File), nil case "splice.file.name.length": - return len(e.Splice.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Splice.File), nil case "splice.file.path": - return e.Splice.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Splice.File), nil case "splice.file.path.length": - return len(e.Splice.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Splice.File), nil case "splice.file.rights": - return int(e.Splice.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Splice.File.FileFields)), nil case "splice.file.uid": - return int(e.Splice.File.FileFields.UID), nil + return int(ev.Splice.File.FileFields.UID), nil case "splice.file.user": - return e.Splice.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Splice.File.FileFields), nil case "splice.pipe_entry_flag": - return int(e.Splice.PipeEntryFlag), nil + return int(ev.Splice.PipeEntryFlag), nil case "splice.pipe_exit_flag": - return int(e.Splice.PipeExitFlag), nil + return int(ev.Splice.PipeExitFlag), nil case "splice.retval": - return int(e.Splice.SyscallEvent.Retval), nil + return int(ev.Splice.SyscallEvent.Retval), nil case "unlink.file.change_time": - return int(e.Unlink.File.FileFields.CTime), nil + return int(ev.Unlink.File.FileFields.CTime), nil case "unlink.file.filesystem": - return e.Unlink.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Unlink.File), nil case "unlink.file.gid": - return int(e.Unlink.File.FileFields.GID), nil + return int(ev.Unlink.File.FileFields.GID), nil case "unlink.file.group": - return e.Unlink.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Unlink.File.FileFields), nil case "unlink.file.in_upper_layer": - return e.Unlink.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Unlink.File.FileFields), nil case "unlink.file.inode": - return int(e.Unlink.File.FileFields.Inode), nil + return int(ev.Unlink.File.FileFields.Inode), nil case "unlink.file.mode": - return int(e.Unlink.File.FileFields.Mode), nil + return int(ev.Unlink.File.FileFields.Mode), nil case "unlink.file.modification_time": - return int(e.Unlink.File.FileFields.MTime), nil + return int(ev.Unlink.File.FileFields.MTime), nil case "unlink.file.mount_id": - return int(e.Unlink.File.FileFields.MountID), nil + return int(ev.Unlink.File.FileFields.MountID), nil case "unlink.file.name": - return e.Unlink.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Unlink.File), nil case "unlink.file.name.length": - return len(e.Unlink.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Unlink.File), nil case "unlink.file.path": - return e.Unlink.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Unlink.File), nil case "unlink.file.path.length": - return len(e.Unlink.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Unlink.File), nil case "unlink.file.rights": - return int(e.Unlink.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Unlink.File.FileFields)), nil case "unlink.file.uid": - return int(e.Unlink.File.FileFields.UID), nil + return int(ev.Unlink.File.FileFields.UID), nil case "unlink.file.user": - return e.Unlink.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Unlink.File.FileFields), nil case "unlink.flags": - return int(e.Unlink.Flags), nil + return int(ev.Unlink.Flags), nil case "unlink.retval": - return int(e.Unlink.SyscallEvent.Retval), nil + return int(ev.Unlink.SyscallEvent.Retval), nil case "unload_module.name": - return e.UnloadModule.Name, nil + return ev.UnloadModule.Name, nil case "unload_module.retval": - return int(e.UnloadModule.SyscallEvent.Retval), nil + return int(ev.UnloadModule.SyscallEvent.Retval), nil case "utimes.file.change_time": - return int(e.Utimes.File.FileFields.CTime), nil + return int(ev.Utimes.File.FileFields.CTime), nil case "utimes.file.filesystem": - return e.Utimes.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Utimes.File), nil case "utimes.file.gid": - return int(e.Utimes.File.FileFields.GID), nil + return int(ev.Utimes.File.FileFields.GID), nil case "utimes.file.group": - return e.Utimes.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Utimes.File.FileFields), nil case "utimes.file.in_upper_layer": - return e.Utimes.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Utimes.File.FileFields), nil case "utimes.file.inode": - return int(e.Utimes.File.FileFields.Inode), nil + return int(ev.Utimes.File.FileFields.Inode), nil case "utimes.file.mode": - return int(e.Utimes.File.FileFields.Mode), nil + return int(ev.Utimes.File.FileFields.Mode), nil case "utimes.file.modification_time": - return int(e.Utimes.File.FileFields.MTime), nil + return int(ev.Utimes.File.FileFields.MTime), nil case "utimes.file.mount_id": - return int(e.Utimes.File.FileFields.MountID), nil + return int(ev.Utimes.File.FileFields.MountID), nil case "utimes.file.name": - return e.Utimes.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Utimes.File), nil case "utimes.file.name.length": - return len(e.Utimes.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Utimes.File), nil case "utimes.file.path": - return e.Utimes.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Utimes.File), nil case "utimes.file.path.length": - return len(e.Utimes.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Utimes.File), nil case "utimes.file.rights": - return int(e.Utimes.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Utimes.File.FileFields)), nil case "utimes.file.uid": - return int(e.Utimes.File.FileFields.UID), nil + return int(ev.Utimes.File.FileFields.UID), nil case "utimes.file.user": - return e.Utimes.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Utimes.File.FileFields), nil case "utimes.retval": - return int(e.Utimes.SyscallEvent.Retval), nil + return int(ev.Utimes.SyscallEvent.Retval), nil } return nil, &eval.ErrFieldNotFound{Field: field} } -func (e *Event) GetFieldEventType(field eval.Field) (eval.EventType, error) { +func (ev *Event) GetFieldEventType(field eval.Field) (eval.EventType, error) { switch field { case "async": return "*", nil @@ -19324,7 +21455,7 @@ func (e *Event) GetFieldEventType(field eval.Field) (eval.EventType, error) { } return "", &eval.ErrFieldNotFound{Field: field} } -func (e *Event) GetFieldType(field eval.Field) (reflect.Kind, error) { +func (ev *Event) GetFieldType(field eval.Field) (reflect.Kind, error) { switch field { case "async": return reflect.Bool, nil @@ -21473,11 +23604,11 @@ func (e *Event) GetFieldType(field eval.Field) (reflect.Kind, error) { } return reflect.Invalid, &eval.ErrFieldNotFound{Field: field} } -func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { +func (ev *Event) SetFieldValue(field eval.Field, value interface{}) error { switch field { case "async": var ok bool - if e.Async, ok = value.(bool); !ok { + if ev.Async, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Async"} } return nil @@ -21486,151 +23617,151 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Bind.AddrFamily"} } - e.Bind.AddrFamily = uint16(v) + ev.Bind.AddrFamily = uint16(v) return nil case "bind.addr.ip": v, ok := value.(net.IPNet) if !ok { return &eval.ErrValueTypeMismatch{Field: "Bind.Addr.IPNet"} } - e.Bind.Addr.IPNet = v + ev.Bind.Addr.IPNet = v return nil case "bind.addr.port": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Bind.Addr.Port"} } - e.Bind.Addr.Port = uint16(v) + ev.Bind.Addr.Port = uint16(v) return nil case "bind.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Bind.SyscallEvent.Retval"} } - e.Bind.SyscallEvent.Retval = int64(v) + ev.Bind.SyscallEvent.Retval = int64(v) return nil case "bpf.cmd": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "BPF.Cmd"} } - e.BPF.Cmd = uint32(v) + ev.BPF.Cmd = uint32(v) return nil case "bpf.map.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "BPF.Map.Name"} } - e.BPF.Map.Name = str + ev.BPF.Map.Name = str return nil case "bpf.map.type": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "BPF.Map.Type"} } - e.BPF.Map.Type = uint32(v) + ev.BPF.Map.Type = uint32(v) return nil case "bpf.prog.attach_type": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "BPF.Program.AttachType"} } - e.BPF.Program.AttachType = uint32(v) + ev.BPF.Program.AttachType = uint32(v) return nil case "bpf.prog.helpers": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "BPF.Program.Helpers"} } - e.BPF.Program.Helpers = append(e.BPF.Program.Helpers, uint32(v)) + ev.BPF.Program.Helpers = append(ev.BPF.Program.Helpers, uint32(v)) return nil case "bpf.prog.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "BPF.Program.Name"} } - e.BPF.Program.Name = str + ev.BPF.Program.Name = str return nil case "bpf.prog.tag": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "BPF.Program.Tag"} } - e.BPF.Program.Tag = str + ev.BPF.Program.Tag = str return nil case "bpf.prog.type": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "BPF.Program.Type"} } - e.BPF.Program.Type = uint32(v) + ev.BPF.Program.Type = uint32(v) return nil case "bpf.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "BPF.SyscallEvent.Retval"} } - e.BPF.SyscallEvent.Retval = int64(v) + ev.BPF.SyscallEvent.Retval = int64(v) return nil case "capset.cap_effective": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Capset.CapEffective"} } - e.Capset.CapEffective = uint64(v) + ev.Capset.CapEffective = uint64(v) return nil case "capset.cap_permitted": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Capset.CapPermitted"} } - e.Capset.CapPermitted = uint64(v) + ev.Capset.CapPermitted = uint64(v) return nil case "chmod.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.CTime"} } - e.Chmod.File.FileFields.CTime = uint64(v) + ev.Chmod.File.FileFields.CTime = uint64(v) return nil case "chmod.file.destination.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.Mode"} } - e.Chmod.Mode = uint32(v) + ev.Chmod.Mode = uint32(v) return nil case "chmod.file.destination.rights": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.Mode"} } - e.Chmod.Mode = uint32(v) + ev.Chmod.Mode = uint32(v) return nil case "chmod.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.Filesystem"} } - e.Chmod.File.Filesystem = str + ev.Chmod.File.Filesystem = str return nil case "chmod.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.GID"} } - e.Chmod.File.FileFields.GID = uint32(v) + ev.Chmod.File.FileFields.GID = uint32(v) return nil case "chmod.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.Group"} } - e.Chmod.File.FileFields.Group = str + ev.Chmod.File.FileFields.Group = str return nil case "chmod.file.in_upper_layer": var ok bool - if e.Chmod.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Chmod.File.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.InUpperLayer"} } return nil @@ -21639,35 +23770,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.Inode"} } - e.Chmod.File.FileFields.Inode = uint64(v) + ev.Chmod.File.FileFields.Inode = uint64(v) return nil case "chmod.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.Mode"} } - e.Chmod.File.FileFields.Mode = uint16(v) + ev.Chmod.File.FileFields.Mode = uint16(v) return nil case "chmod.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.MTime"} } - e.Chmod.File.FileFields.MTime = uint64(v) + ev.Chmod.File.FileFields.MTime = uint64(v) return nil case "chmod.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.MountID"} } - e.Chmod.File.FileFields.MountID = uint32(v) + ev.Chmod.File.FileFields.MountID = uint32(v) return nil case "chmod.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.BasenameStr"} } - e.Chmod.File.BasenameStr = str + ev.Chmod.File.BasenameStr = str return nil case "chmod.file.name.length": return &eval.ErrFieldReadOnly{Field: "chmod.file.name.length"} @@ -21676,7 +23807,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.PathnameStr"} } - e.Chmod.File.PathnameStr = str + ev.Chmod.File.PathnameStr = str return nil case "chmod.file.path.length": return &eval.ErrFieldReadOnly{Field: "chmod.file.path.length"} @@ -21685,88 +23816,88 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.Mode"} } - e.Chmod.File.FileFields.Mode = uint16(v) + ev.Chmod.File.FileFields.Mode = uint16(v) return nil case "chmod.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.UID"} } - e.Chmod.File.FileFields.UID = uint32(v) + ev.Chmod.File.FileFields.UID = uint32(v) return nil case "chmod.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.User"} } - e.Chmod.File.FileFields.User = str + ev.Chmod.File.FileFields.User = str return nil case "chmod.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.SyscallEvent.Retval"} } - e.Chmod.SyscallEvent.Retval = int64(v) + ev.Chmod.SyscallEvent.Retval = int64(v) return nil case "chown.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.CTime"} } - e.Chown.File.FileFields.CTime = uint64(v) + ev.Chown.File.FileFields.CTime = uint64(v) return nil case "chown.file.destination.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.GID"} } - e.Chown.GID = int64(v) + ev.Chown.GID = int64(v) return nil case "chown.file.destination.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.Group"} } - e.Chown.Group = str + ev.Chown.Group = str return nil case "chown.file.destination.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.UID"} } - e.Chown.UID = int64(v) + ev.Chown.UID = int64(v) return nil case "chown.file.destination.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.User"} } - e.Chown.User = str + ev.Chown.User = str return nil case "chown.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.Filesystem"} } - e.Chown.File.Filesystem = str + ev.Chown.File.Filesystem = str return nil case "chown.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.GID"} } - e.Chown.File.FileFields.GID = uint32(v) + ev.Chown.File.FileFields.GID = uint32(v) return nil case "chown.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.Group"} } - e.Chown.File.FileFields.Group = str + ev.Chown.File.FileFields.Group = str return nil case "chown.file.in_upper_layer": var ok bool - if e.Chown.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Chown.File.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.InUpperLayer"} } return nil @@ -21775,35 +23906,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.Inode"} } - e.Chown.File.FileFields.Inode = uint64(v) + ev.Chown.File.FileFields.Inode = uint64(v) return nil case "chown.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.Mode"} } - e.Chown.File.FileFields.Mode = uint16(v) + ev.Chown.File.FileFields.Mode = uint16(v) return nil case "chown.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.MTime"} } - e.Chown.File.FileFields.MTime = uint64(v) + ev.Chown.File.FileFields.MTime = uint64(v) return nil case "chown.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.MountID"} } - e.Chown.File.FileFields.MountID = uint32(v) + ev.Chown.File.FileFields.MountID = uint32(v) return nil case "chown.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.BasenameStr"} } - e.Chown.File.BasenameStr = str + ev.Chown.File.BasenameStr = str return nil case "chown.file.name.length": return &eval.ErrFieldReadOnly{Field: "chown.file.name.length"} @@ -21812,7 +23943,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.PathnameStr"} } - e.Chown.File.PathnameStr = str + ev.Chown.File.PathnameStr = str return nil case "chown.file.path.length": return &eval.ErrFieldReadOnly{Field: "chown.file.path.length"} @@ -21821,77 +23952,77 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.Mode"} } - e.Chown.File.FileFields.Mode = uint16(v) + ev.Chown.File.FileFields.Mode = uint16(v) return nil case "chown.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.UID"} } - e.Chown.File.FileFields.UID = uint32(v) + ev.Chown.File.FileFields.UID = uint32(v) return nil case "chown.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.User"} } - e.Chown.File.FileFields.User = str + ev.Chown.File.FileFields.User = str return nil case "chown.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.SyscallEvent.Retval"} } - e.Chown.SyscallEvent.Retval = int64(v) + ev.Chown.SyscallEvent.Retval = int64(v) return nil case "container.id": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ContainerContext.ID"} } - e.ContainerContext.ID = str + ev.ContainerContext.ID = str return nil case "container.tags": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ContainerContext.Tags"} } - e.ContainerContext.Tags = append(e.ContainerContext.Tags, str) + ev.ContainerContext.Tags = append(ev.ContainerContext.Tags, str) return nil case "dns.id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "DNS.ID"} } - e.DNS.ID = uint16(v) + ev.DNS.ID = uint16(v) return nil case "dns.question.class": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "DNS.Class"} } - e.DNS.Class = uint16(v) + ev.DNS.Class = uint16(v) return nil case "dns.question.count": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "DNS.Count"} } - e.DNS.Count = uint16(v) + ev.DNS.Count = uint16(v) return nil case "dns.question.length": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "DNS.Size"} } - e.DNS.Size = uint16(v) + ev.DNS.Size = uint16(v) return nil case "dns.question.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "DNS.Name"} } - e.DNS.Name = str + ev.DNS.Name = str return nil case "dns.question.name.length": return &eval.ErrFieldReadOnly{Field: "dns.question.name.length"} @@ -21900,1308 +24031,1308 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "DNS.Type"} } - e.DNS.Type = uint16(v) + ev.DNS.Type = uint16(v) return nil case "exec.args": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Args"} } - e.Exec.Process.Args = str + ev.Exec.Process.Args = str return nil case "exec.args_flags": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Argv"} } - e.Exec.Process.Argv = append(e.Exec.Process.Argv, str) + ev.Exec.Process.Argv = append(ev.Exec.Process.Argv, str) return nil case "exec.args_options": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Argv"} } - e.Exec.Process.Argv = append(e.Exec.Process.Argv, str) + ev.Exec.Process.Argv = append(ev.Exec.Process.Argv, str) return nil case "exec.args_truncated": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } var ok bool - if e.Exec.Process.ArgsTruncated, ok = value.(bool); !ok { + if ev.Exec.Process.ArgsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.ArgsTruncated"} } return nil case "exec.argv": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Argv"} } - e.Exec.Process.Argv = append(e.Exec.Process.Argv, str) + ev.Exec.Process.Argv = append(ev.Exec.Process.Argv, str) return nil case "exec.argv0": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Argv0"} } - e.Exec.Process.Argv0 = str + ev.Exec.Process.Argv0 = str return nil case "exec.cap_effective": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.CapEffective"} } - e.Exec.Process.Credentials.CapEffective = uint64(v) + ev.Exec.Process.Credentials.CapEffective = uint64(v) return nil case "exec.cap_permitted": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.CapPermitted"} } - e.Exec.Process.Credentials.CapPermitted = uint64(v) + ev.Exec.Process.Credentials.CapPermitted = uint64(v) return nil case "exec.comm": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Comm"} } - e.Exec.Process.Comm = str + ev.Exec.Process.Comm = str return nil case "exec.container.id": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.ContainerID"} } - e.Exec.Process.ContainerID = str + ev.Exec.Process.ContainerID = str return nil case "exec.cookie": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Cookie"} } - e.Exec.Process.Cookie = uint32(v) + ev.Exec.Process.Cookie = uint32(v) return nil case "exec.created_at": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.CreatedAt"} } - e.Exec.Process.CreatedAt = uint64(v) + ev.Exec.Process.CreatedAt = uint64(v) return nil case "exec.egid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.EGID"} } - e.Exec.Process.Credentials.EGID = uint32(v) + ev.Exec.Process.Credentials.EGID = uint32(v) return nil case "exec.egroup": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.EGroup"} } - e.Exec.Process.Credentials.EGroup = str + ev.Exec.Process.Credentials.EGroup = str return nil case "exec.envp": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Envp"} } - e.Exec.Process.Envp = append(e.Exec.Process.Envp, str) + ev.Exec.Process.Envp = append(ev.Exec.Process.Envp, str) return nil case "exec.envs": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Envs"} } - e.Exec.Process.Envs = append(e.Exec.Process.Envs, str) + ev.Exec.Process.Envs = append(ev.Exec.Process.Envs, str) return nil case "exec.envs_truncated": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } var ok bool - if e.Exec.Process.EnvsTruncated, ok = value.(bool); !ok { + if ev.Exec.Process.EnvsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.EnvsTruncated"} } return nil case "exec.euid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.EUID"} } - e.Exec.Process.Credentials.EUID = uint32(v) + ev.Exec.Process.Credentials.EUID = uint32(v) return nil case "exec.euser": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.EUser"} } - e.Exec.Process.Credentials.EUser = str + ev.Exec.Process.Credentials.EUser = str return nil case "exec.file.change_time": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.CTime"} } - e.Exec.Process.FileEvent.FileFields.CTime = uint64(v) + ev.Exec.Process.FileEvent.FileFields.CTime = uint64(v) return nil case "exec.file.filesystem": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.Filesystem"} } - e.Exec.Process.FileEvent.Filesystem = str + ev.Exec.Process.FileEvent.Filesystem = str return nil case "exec.file.gid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.GID"} } - e.Exec.Process.FileEvent.FileFields.GID = uint32(v) + ev.Exec.Process.FileEvent.FileFields.GID = uint32(v) return nil case "exec.file.group": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.Group"} } - e.Exec.Process.FileEvent.FileFields.Group = str + ev.Exec.Process.FileEvent.FileFields.Group = str return nil case "exec.file.in_upper_layer": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } var ok bool - if e.Exec.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Exec.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.InUpperLayer"} } return nil case "exec.file.inode": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.Inode"} } - e.Exec.Process.FileEvent.FileFields.Inode = uint64(v) + ev.Exec.Process.FileEvent.FileFields.Inode = uint64(v) return nil case "exec.file.mode": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.Mode"} } - e.Exec.Process.FileEvent.FileFields.Mode = uint16(v) + ev.Exec.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "exec.file.modification_time": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.MTime"} } - e.Exec.Process.FileEvent.FileFields.MTime = uint64(v) + ev.Exec.Process.FileEvent.FileFields.MTime = uint64(v) return nil case "exec.file.mount_id": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.MountID"} } - e.Exec.Process.FileEvent.FileFields.MountID = uint32(v) + ev.Exec.Process.FileEvent.FileFields.MountID = uint32(v) return nil case "exec.file.name": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.BasenameStr"} } - e.Exec.Process.FileEvent.BasenameStr = str + ev.Exec.Process.FileEvent.BasenameStr = str return nil case "exec.file.name.length": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } return &eval.ErrFieldReadOnly{Field: "exec.file.name.length"} case "exec.file.path": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.PathnameStr"} } - e.Exec.Process.FileEvent.PathnameStr = str + ev.Exec.Process.FileEvent.PathnameStr = str return nil case "exec.file.path.length": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } return &eval.ErrFieldReadOnly{Field: "exec.file.path.length"} case "exec.file.rights": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.Mode"} } - e.Exec.Process.FileEvent.FileFields.Mode = uint16(v) + ev.Exec.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "exec.file.uid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.UID"} } - e.Exec.Process.FileEvent.FileFields.UID = uint32(v) + ev.Exec.Process.FileEvent.FileFields.UID = uint32(v) return nil case "exec.file.user": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.User"} } - e.Exec.Process.FileEvent.FileFields.User = str + ev.Exec.Process.FileEvent.FileFields.User = str return nil case "exec.fsgid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.FSGID"} } - e.Exec.Process.Credentials.FSGID = uint32(v) + ev.Exec.Process.Credentials.FSGID = uint32(v) return nil case "exec.fsgroup": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.FSGroup"} } - e.Exec.Process.Credentials.FSGroup = str + ev.Exec.Process.Credentials.FSGroup = str return nil case "exec.fsuid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.FSUID"} } - e.Exec.Process.Credentials.FSUID = uint32(v) + ev.Exec.Process.Credentials.FSUID = uint32(v) return nil case "exec.fsuser": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.FSUser"} } - e.Exec.Process.Credentials.FSUser = str + ev.Exec.Process.Credentials.FSUser = str return nil case "exec.gid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.GID"} } - e.Exec.Process.Credentials.GID = uint32(v) + ev.Exec.Process.Credentials.GID = uint32(v) return nil case "exec.group": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.Group"} } - e.Exec.Process.Credentials.Group = str + ev.Exec.Process.Credentials.Group = str return nil case "exec.interpreter.file.change_time": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) return nil case "exec.interpreter.file.filesystem": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.Filesystem"} } - e.Exec.Process.LinuxBinprm.FileEvent.Filesystem = str + ev.Exec.Process.LinuxBinprm.FileEvent.Filesystem = str return nil case "exec.interpreter.file.gid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.GID"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) return nil case "exec.interpreter.file.group": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.Group"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Group = str + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.Group = str return nil case "exec.interpreter.file.in_upper_layer": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } var ok bool - if e.Exec.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } return nil case "exec.interpreter.file.inode": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) return nil case "exec.interpreter.file.mode": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "exec.interpreter.file.modification_time": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) return nil case "exec.interpreter.file.mount_id": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) return nil case "exec.interpreter.file.name": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.BasenameStr"} } - e.Exec.Process.LinuxBinprm.FileEvent.BasenameStr = str + ev.Exec.Process.LinuxBinprm.FileEvent.BasenameStr = str return nil case "exec.interpreter.file.name.length": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } return &eval.ErrFieldReadOnly{Field: "exec.interpreter.file.name.length"} case "exec.interpreter.file.path": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.PathnameStr"} } - e.Exec.Process.LinuxBinprm.FileEvent.PathnameStr = str + ev.Exec.Process.LinuxBinprm.FileEvent.PathnameStr = str return nil case "exec.interpreter.file.path.length": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } return &eval.ErrFieldReadOnly{Field: "exec.interpreter.file.path.length"} case "exec.interpreter.file.rights": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "exec.interpreter.file.uid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.UID"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) return nil case "exec.interpreter.file.user": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.User"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.User = str + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.User = str return nil case "exec.is_kworker": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } var ok bool - if e.Exec.Process.PIDContext.IsKworker, ok = value.(bool); !ok { + if ev.Exec.Process.PIDContext.IsKworker, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.PIDContext.IsKworker"} } return nil case "exec.is_thread": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } var ok bool - if e.Exec.Process.IsThread, ok = value.(bool); !ok { + if ev.Exec.Process.IsThread, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.IsThread"} } return nil case "exec.pid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.PIDContext.Pid"} } - e.Exec.Process.PIDContext.Pid = uint32(v) + ev.Exec.Process.PIDContext.Pid = uint32(v) return nil case "exec.ppid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.PPid"} } - e.Exec.Process.PPid = uint32(v) + ev.Exec.Process.PPid = uint32(v) return nil case "exec.tid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.PIDContext.Tid"} } - e.Exec.Process.PIDContext.Tid = uint32(v) + ev.Exec.Process.PIDContext.Tid = uint32(v) return nil case "exec.tty_name": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.TTYName"} } - e.Exec.Process.TTYName = str + ev.Exec.Process.TTYName = str return nil case "exec.uid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.UID"} } - e.Exec.Process.Credentials.UID = uint32(v) + ev.Exec.Process.Credentials.UID = uint32(v) return nil case "exec.user": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.User"} } - e.Exec.Process.Credentials.User = str + ev.Exec.Process.Credentials.User = str return nil case "exit.args": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Args"} } - e.Exit.Process.Args = str + ev.Exit.Process.Args = str return nil case "exit.args_flags": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Argv"} } - e.Exit.Process.Argv = append(e.Exit.Process.Argv, str) + ev.Exit.Process.Argv = append(ev.Exit.Process.Argv, str) return nil case "exit.args_options": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Argv"} } - e.Exit.Process.Argv = append(e.Exit.Process.Argv, str) + ev.Exit.Process.Argv = append(ev.Exit.Process.Argv, str) return nil case "exit.args_truncated": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } var ok bool - if e.Exit.Process.ArgsTruncated, ok = value.(bool); !ok { + if ev.Exit.Process.ArgsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.ArgsTruncated"} } return nil case "exit.argv": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Argv"} } - e.Exit.Process.Argv = append(e.Exit.Process.Argv, str) + ev.Exit.Process.Argv = append(ev.Exit.Process.Argv, str) return nil case "exit.argv0": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Argv0"} } - e.Exit.Process.Argv0 = str + ev.Exit.Process.Argv0 = str return nil case "exit.cap_effective": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.CapEffective"} } - e.Exit.Process.Credentials.CapEffective = uint64(v) + ev.Exit.Process.Credentials.CapEffective = uint64(v) return nil case "exit.cap_permitted": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.CapPermitted"} } - e.Exit.Process.Credentials.CapPermitted = uint64(v) + ev.Exit.Process.Credentials.CapPermitted = uint64(v) return nil case "exit.cause": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Cause"} } - e.Exit.Cause = uint32(v) + ev.Exit.Cause = uint32(v) return nil case "exit.code": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Code"} } - e.Exit.Code = uint32(v) + ev.Exit.Code = uint32(v) return nil case "exit.comm": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Comm"} } - e.Exit.Process.Comm = str + ev.Exit.Process.Comm = str return nil case "exit.container.id": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.ContainerID"} } - e.Exit.Process.ContainerID = str + ev.Exit.Process.ContainerID = str return nil case "exit.cookie": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Cookie"} } - e.Exit.Process.Cookie = uint32(v) + ev.Exit.Process.Cookie = uint32(v) return nil case "exit.created_at": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.CreatedAt"} } - e.Exit.Process.CreatedAt = uint64(v) + ev.Exit.Process.CreatedAt = uint64(v) return nil case "exit.egid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.EGID"} } - e.Exit.Process.Credentials.EGID = uint32(v) + ev.Exit.Process.Credentials.EGID = uint32(v) return nil case "exit.egroup": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.EGroup"} } - e.Exit.Process.Credentials.EGroup = str + ev.Exit.Process.Credentials.EGroup = str return nil case "exit.envp": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Envp"} } - e.Exit.Process.Envp = append(e.Exit.Process.Envp, str) + ev.Exit.Process.Envp = append(ev.Exit.Process.Envp, str) return nil case "exit.envs": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Envs"} } - e.Exit.Process.Envs = append(e.Exit.Process.Envs, str) + ev.Exit.Process.Envs = append(ev.Exit.Process.Envs, str) return nil case "exit.envs_truncated": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } var ok bool - if e.Exit.Process.EnvsTruncated, ok = value.(bool); !ok { + if ev.Exit.Process.EnvsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.EnvsTruncated"} } return nil case "exit.euid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.EUID"} } - e.Exit.Process.Credentials.EUID = uint32(v) + ev.Exit.Process.Credentials.EUID = uint32(v) return nil case "exit.euser": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.EUser"} } - e.Exit.Process.Credentials.EUser = str + ev.Exit.Process.Credentials.EUser = str return nil case "exit.file.change_time": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.CTime"} } - e.Exit.Process.FileEvent.FileFields.CTime = uint64(v) + ev.Exit.Process.FileEvent.FileFields.CTime = uint64(v) return nil case "exit.file.filesystem": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.Filesystem"} } - e.Exit.Process.FileEvent.Filesystem = str + ev.Exit.Process.FileEvent.Filesystem = str return nil case "exit.file.gid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.GID"} } - e.Exit.Process.FileEvent.FileFields.GID = uint32(v) + ev.Exit.Process.FileEvent.FileFields.GID = uint32(v) return nil case "exit.file.group": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.Group"} } - e.Exit.Process.FileEvent.FileFields.Group = str + ev.Exit.Process.FileEvent.FileFields.Group = str return nil case "exit.file.in_upper_layer": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } var ok bool - if e.Exit.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Exit.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.InUpperLayer"} } return nil case "exit.file.inode": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.Inode"} } - e.Exit.Process.FileEvent.FileFields.Inode = uint64(v) + ev.Exit.Process.FileEvent.FileFields.Inode = uint64(v) return nil case "exit.file.mode": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.Mode"} } - e.Exit.Process.FileEvent.FileFields.Mode = uint16(v) + ev.Exit.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "exit.file.modification_time": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.MTime"} } - e.Exit.Process.FileEvent.FileFields.MTime = uint64(v) + ev.Exit.Process.FileEvent.FileFields.MTime = uint64(v) return nil case "exit.file.mount_id": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.MountID"} } - e.Exit.Process.FileEvent.FileFields.MountID = uint32(v) + ev.Exit.Process.FileEvent.FileFields.MountID = uint32(v) return nil case "exit.file.name": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.BasenameStr"} } - e.Exit.Process.FileEvent.BasenameStr = str + ev.Exit.Process.FileEvent.BasenameStr = str return nil case "exit.file.name.length": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } return &eval.ErrFieldReadOnly{Field: "exit.file.name.length"} case "exit.file.path": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.PathnameStr"} } - e.Exit.Process.FileEvent.PathnameStr = str + ev.Exit.Process.FileEvent.PathnameStr = str return nil case "exit.file.path.length": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } return &eval.ErrFieldReadOnly{Field: "exit.file.path.length"} case "exit.file.rights": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.Mode"} } - e.Exit.Process.FileEvent.FileFields.Mode = uint16(v) + ev.Exit.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "exit.file.uid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.UID"} } - e.Exit.Process.FileEvent.FileFields.UID = uint32(v) + ev.Exit.Process.FileEvent.FileFields.UID = uint32(v) return nil case "exit.file.user": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.User"} } - e.Exit.Process.FileEvent.FileFields.User = str + ev.Exit.Process.FileEvent.FileFields.User = str return nil case "exit.fsgid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.FSGID"} } - e.Exit.Process.Credentials.FSGID = uint32(v) + ev.Exit.Process.Credentials.FSGID = uint32(v) return nil case "exit.fsgroup": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.FSGroup"} } - e.Exit.Process.Credentials.FSGroup = str + ev.Exit.Process.Credentials.FSGroup = str return nil case "exit.fsuid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.FSUID"} } - e.Exit.Process.Credentials.FSUID = uint32(v) + ev.Exit.Process.Credentials.FSUID = uint32(v) return nil case "exit.fsuser": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.FSUser"} } - e.Exit.Process.Credentials.FSUser = str + ev.Exit.Process.Credentials.FSUser = str return nil case "exit.gid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.GID"} } - e.Exit.Process.Credentials.GID = uint32(v) + ev.Exit.Process.Credentials.GID = uint32(v) return nil case "exit.group": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.Group"} } - e.Exit.Process.Credentials.Group = str + ev.Exit.Process.Credentials.Group = str return nil case "exit.interpreter.file.change_time": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) return nil case "exit.interpreter.file.filesystem": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.Filesystem"} } - e.Exit.Process.LinuxBinprm.FileEvent.Filesystem = str + ev.Exit.Process.LinuxBinprm.FileEvent.Filesystem = str return nil case "exit.interpreter.file.gid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.GID"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) return nil case "exit.interpreter.file.group": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.Group"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Group = str + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.Group = str return nil case "exit.interpreter.file.in_upper_layer": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } var ok bool - if e.Exit.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } return nil case "exit.interpreter.file.inode": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) return nil case "exit.interpreter.file.mode": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "exit.interpreter.file.modification_time": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) return nil case "exit.interpreter.file.mount_id": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) return nil case "exit.interpreter.file.name": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.BasenameStr"} } - e.Exit.Process.LinuxBinprm.FileEvent.BasenameStr = str + ev.Exit.Process.LinuxBinprm.FileEvent.BasenameStr = str return nil case "exit.interpreter.file.name.length": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } return &eval.ErrFieldReadOnly{Field: "exit.interpreter.file.name.length"} case "exit.interpreter.file.path": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.PathnameStr"} } - e.Exit.Process.LinuxBinprm.FileEvent.PathnameStr = str + ev.Exit.Process.LinuxBinprm.FileEvent.PathnameStr = str return nil case "exit.interpreter.file.path.length": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } return &eval.ErrFieldReadOnly{Field: "exit.interpreter.file.path.length"} case "exit.interpreter.file.rights": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "exit.interpreter.file.uid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.UID"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) return nil case "exit.interpreter.file.user": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.User"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.User = str + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.User = str return nil case "exit.is_kworker": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } var ok bool - if e.Exit.Process.PIDContext.IsKworker, ok = value.(bool); !ok { + if ev.Exit.Process.PIDContext.IsKworker, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.PIDContext.IsKworker"} } return nil case "exit.is_thread": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } var ok bool - if e.Exit.Process.IsThread, ok = value.(bool); !ok { + if ev.Exit.Process.IsThread, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.IsThread"} } return nil case "exit.pid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.PIDContext.Pid"} } - e.Exit.Process.PIDContext.Pid = uint32(v) + ev.Exit.Process.PIDContext.Pid = uint32(v) return nil case "exit.ppid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.PPid"} } - e.Exit.Process.PPid = uint32(v) + ev.Exit.Process.PPid = uint32(v) return nil case "exit.tid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.PIDContext.Tid"} } - e.Exit.Process.PIDContext.Tid = uint32(v) + ev.Exit.Process.PIDContext.Tid = uint32(v) return nil case "exit.tty_name": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.TTYName"} } - e.Exit.Process.TTYName = str + ev.Exit.Process.TTYName = str return nil case "exit.uid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.UID"} } - e.Exit.Process.Credentials.UID = uint32(v) + ev.Exit.Process.Credentials.UID = uint32(v) return nil case "exit.user": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.User"} } - e.Exit.Process.Credentials.User = str + ev.Exit.Process.Credentials.User = str return nil case "link.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.CTime"} } - e.Link.Source.FileFields.CTime = uint64(v) + ev.Link.Source.FileFields.CTime = uint64(v) return nil case "link.file.destination.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.CTime"} } - e.Link.Target.FileFields.CTime = uint64(v) + ev.Link.Target.FileFields.CTime = uint64(v) return nil case "link.file.destination.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.Filesystem"} } - e.Link.Target.Filesystem = str + ev.Link.Target.Filesystem = str return nil case "link.file.destination.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.GID"} } - e.Link.Target.FileFields.GID = uint32(v) + ev.Link.Target.FileFields.GID = uint32(v) return nil case "link.file.destination.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.Group"} } - e.Link.Target.FileFields.Group = str + ev.Link.Target.FileFields.Group = str return nil case "link.file.destination.in_upper_layer": var ok bool - if e.Link.Target.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Link.Target.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.InUpperLayer"} } return nil @@ -23210,35 +25341,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.Inode"} } - e.Link.Target.FileFields.Inode = uint64(v) + ev.Link.Target.FileFields.Inode = uint64(v) return nil case "link.file.destination.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.Mode"} } - e.Link.Target.FileFields.Mode = uint16(v) + ev.Link.Target.FileFields.Mode = uint16(v) return nil case "link.file.destination.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.MTime"} } - e.Link.Target.FileFields.MTime = uint64(v) + ev.Link.Target.FileFields.MTime = uint64(v) return nil case "link.file.destination.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.MountID"} } - e.Link.Target.FileFields.MountID = uint32(v) + ev.Link.Target.FileFields.MountID = uint32(v) return nil case "link.file.destination.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.BasenameStr"} } - e.Link.Target.BasenameStr = str + ev.Link.Target.BasenameStr = str return nil case "link.file.destination.name.length": return &eval.ErrFieldReadOnly{Field: "link.file.destination.name.length"} @@ -23247,7 +25378,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.PathnameStr"} } - e.Link.Target.PathnameStr = str + ev.Link.Target.PathnameStr = str return nil case "link.file.destination.path.length": return &eval.ErrFieldReadOnly{Field: "link.file.destination.path.length"} @@ -23256,46 +25387,46 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.Mode"} } - e.Link.Target.FileFields.Mode = uint16(v) + ev.Link.Target.FileFields.Mode = uint16(v) return nil case "link.file.destination.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.UID"} } - e.Link.Target.FileFields.UID = uint32(v) + ev.Link.Target.FileFields.UID = uint32(v) return nil case "link.file.destination.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.User"} } - e.Link.Target.FileFields.User = str + ev.Link.Target.FileFields.User = str return nil case "link.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.Filesystem"} } - e.Link.Source.Filesystem = str + ev.Link.Source.Filesystem = str return nil case "link.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.GID"} } - e.Link.Source.FileFields.GID = uint32(v) + ev.Link.Source.FileFields.GID = uint32(v) return nil case "link.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.Group"} } - e.Link.Source.FileFields.Group = str + ev.Link.Source.FileFields.Group = str return nil case "link.file.in_upper_layer": var ok bool - if e.Link.Source.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Link.Source.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.InUpperLayer"} } return nil @@ -23304,35 +25435,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.Inode"} } - e.Link.Source.FileFields.Inode = uint64(v) + ev.Link.Source.FileFields.Inode = uint64(v) return nil case "link.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.Mode"} } - e.Link.Source.FileFields.Mode = uint16(v) + ev.Link.Source.FileFields.Mode = uint16(v) return nil case "link.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.MTime"} } - e.Link.Source.FileFields.MTime = uint64(v) + ev.Link.Source.FileFields.MTime = uint64(v) return nil case "link.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.MountID"} } - e.Link.Source.FileFields.MountID = uint32(v) + ev.Link.Source.FileFields.MountID = uint32(v) return nil case "link.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.BasenameStr"} } - e.Link.Source.BasenameStr = str + ev.Link.Source.BasenameStr = str return nil case "link.file.name.length": return &eval.ErrFieldReadOnly{Field: "link.file.name.length"} @@ -23341,7 +25472,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.PathnameStr"} } - e.Link.Source.PathnameStr = str + ev.Link.Source.PathnameStr = str return nil case "link.file.path.length": return &eval.ErrFieldReadOnly{Field: "link.file.path.length"} @@ -23350,60 +25481,60 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.Mode"} } - e.Link.Source.FileFields.Mode = uint16(v) + ev.Link.Source.FileFields.Mode = uint16(v) return nil case "link.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.UID"} } - e.Link.Source.FileFields.UID = uint32(v) + ev.Link.Source.FileFields.UID = uint32(v) return nil case "link.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.User"} } - e.Link.Source.FileFields.User = str + ev.Link.Source.FileFields.User = str return nil case "link.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.SyscallEvent.Retval"} } - e.Link.SyscallEvent.Retval = int64(v) + ev.Link.SyscallEvent.Retval = int64(v) return nil case "load_module.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.CTime"} } - e.LoadModule.File.FileFields.CTime = uint64(v) + ev.LoadModule.File.FileFields.CTime = uint64(v) return nil case "load_module.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.Filesystem"} } - e.LoadModule.File.Filesystem = str + ev.LoadModule.File.Filesystem = str return nil case "load_module.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.GID"} } - e.LoadModule.File.FileFields.GID = uint32(v) + ev.LoadModule.File.FileFields.GID = uint32(v) return nil case "load_module.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.Group"} } - e.LoadModule.File.FileFields.Group = str + ev.LoadModule.File.FileFields.Group = str return nil case "load_module.file.in_upper_layer": var ok bool - if e.LoadModule.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.LoadModule.File.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.InUpperLayer"} } return nil @@ -23412,35 +25543,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.Inode"} } - e.LoadModule.File.FileFields.Inode = uint64(v) + ev.LoadModule.File.FileFields.Inode = uint64(v) return nil case "load_module.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.Mode"} } - e.LoadModule.File.FileFields.Mode = uint16(v) + ev.LoadModule.File.FileFields.Mode = uint16(v) return nil case "load_module.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.MTime"} } - e.LoadModule.File.FileFields.MTime = uint64(v) + ev.LoadModule.File.FileFields.MTime = uint64(v) return nil case "load_module.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.MountID"} } - e.LoadModule.File.FileFields.MountID = uint32(v) + ev.LoadModule.File.FileFields.MountID = uint32(v) return nil case "load_module.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.BasenameStr"} } - e.LoadModule.File.BasenameStr = str + ev.LoadModule.File.BasenameStr = str return nil case "load_module.file.name.length": return &eval.ErrFieldReadOnly{Field: "load_module.file.name.length"} @@ -23449,7 +25580,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.PathnameStr"} } - e.LoadModule.File.PathnameStr = str + ev.LoadModule.File.PathnameStr = str return nil case "load_module.file.path.length": return &eval.ErrFieldReadOnly{Field: "load_module.file.path.length"} @@ -23458,25 +25589,25 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.Mode"} } - e.LoadModule.File.FileFields.Mode = uint16(v) + ev.LoadModule.File.FileFields.Mode = uint16(v) return nil case "load_module.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.UID"} } - e.LoadModule.File.FileFields.UID = uint32(v) + ev.LoadModule.File.FileFields.UID = uint32(v) return nil case "load_module.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.User"} } - e.LoadModule.File.FileFields.User = str + ev.LoadModule.File.FileFields.User = str return nil case "load_module.loaded_from_memory": var ok bool - if e.LoadModule.LoadedFromMemory, ok = value.(bool); !ok { + if ev.LoadModule.LoadedFromMemory, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.LoadedFromMemory"} } return nil @@ -23485,60 +25616,60 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.Name"} } - e.LoadModule.Name = str + ev.LoadModule.Name = str return nil case "load_module.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.SyscallEvent.Retval"} } - e.LoadModule.SyscallEvent.Retval = int64(v) + ev.LoadModule.SyscallEvent.Retval = int64(v) return nil case "mkdir.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.CTime"} } - e.Mkdir.File.FileFields.CTime = uint64(v) + ev.Mkdir.File.FileFields.CTime = uint64(v) return nil case "mkdir.file.destination.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.Mode"} } - e.Mkdir.Mode = uint32(v) + ev.Mkdir.Mode = uint32(v) return nil case "mkdir.file.destination.rights": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.Mode"} } - e.Mkdir.Mode = uint32(v) + ev.Mkdir.Mode = uint32(v) return nil case "mkdir.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.Filesystem"} } - e.Mkdir.File.Filesystem = str + ev.Mkdir.File.Filesystem = str return nil case "mkdir.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.GID"} } - e.Mkdir.File.FileFields.GID = uint32(v) + ev.Mkdir.File.FileFields.GID = uint32(v) return nil case "mkdir.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.Group"} } - e.Mkdir.File.FileFields.Group = str + ev.Mkdir.File.FileFields.Group = str return nil case "mkdir.file.in_upper_layer": var ok bool - if e.Mkdir.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Mkdir.File.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.InUpperLayer"} } return nil @@ -23547,35 +25678,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.Inode"} } - e.Mkdir.File.FileFields.Inode = uint64(v) + ev.Mkdir.File.FileFields.Inode = uint64(v) return nil case "mkdir.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.Mode"} } - e.Mkdir.File.FileFields.Mode = uint16(v) + ev.Mkdir.File.FileFields.Mode = uint16(v) return nil case "mkdir.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.MTime"} } - e.Mkdir.File.FileFields.MTime = uint64(v) + ev.Mkdir.File.FileFields.MTime = uint64(v) return nil case "mkdir.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.MountID"} } - e.Mkdir.File.FileFields.MountID = uint32(v) + ev.Mkdir.File.FileFields.MountID = uint32(v) return nil case "mkdir.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.BasenameStr"} } - e.Mkdir.File.BasenameStr = str + ev.Mkdir.File.BasenameStr = str return nil case "mkdir.file.name.length": return &eval.ErrFieldReadOnly{Field: "mkdir.file.name.length"} @@ -23584,7 +25715,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.PathnameStr"} } - e.Mkdir.File.PathnameStr = str + ev.Mkdir.File.PathnameStr = str return nil case "mkdir.file.path.length": return &eval.ErrFieldReadOnly{Field: "mkdir.file.path.length"} @@ -23593,60 +25724,60 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.Mode"} } - e.Mkdir.File.FileFields.Mode = uint16(v) + ev.Mkdir.File.FileFields.Mode = uint16(v) return nil case "mkdir.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.UID"} } - e.Mkdir.File.FileFields.UID = uint32(v) + ev.Mkdir.File.FileFields.UID = uint32(v) return nil case "mkdir.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.User"} } - e.Mkdir.File.FileFields.User = str + ev.Mkdir.File.FileFields.User = str return nil case "mkdir.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.SyscallEvent.Retval"} } - e.Mkdir.SyscallEvent.Retval = int64(v) + ev.Mkdir.SyscallEvent.Retval = int64(v) return nil case "mmap.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.CTime"} } - e.MMap.File.FileFields.CTime = uint64(v) + ev.MMap.File.FileFields.CTime = uint64(v) return nil case "mmap.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.Filesystem"} } - e.MMap.File.Filesystem = str + ev.MMap.File.Filesystem = str return nil case "mmap.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.GID"} } - e.MMap.File.FileFields.GID = uint32(v) + ev.MMap.File.FileFields.GID = uint32(v) return nil case "mmap.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.Group"} } - e.MMap.File.FileFields.Group = str + ev.MMap.File.FileFields.Group = str return nil case "mmap.file.in_upper_layer": var ok bool - if e.MMap.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.MMap.File.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.InUpperLayer"} } return nil @@ -23655,35 +25786,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.Inode"} } - e.MMap.File.FileFields.Inode = uint64(v) + ev.MMap.File.FileFields.Inode = uint64(v) return nil case "mmap.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.Mode"} } - e.MMap.File.FileFields.Mode = uint16(v) + ev.MMap.File.FileFields.Mode = uint16(v) return nil case "mmap.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.MTime"} } - e.MMap.File.FileFields.MTime = uint64(v) + ev.MMap.File.FileFields.MTime = uint64(v) return nil case "mmap.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.MountID"} } - e.MMap.File.FileFields.MountID = uint32(v) + ev.MMap.File.FileFields.MountID = uint32(v) return nil case "mmap.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.BasenameStr"} } - e.MMap.File.BasenameStr = str + ev.MMap.File.BasenameStr = str return nil case "mmap.file.name.length": return &eval.ErrFieldReadOnly{Field: "mmap.file.name.length"} @@ -23692,7 +25823,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.PathnameStr"} } - e.MMap.File.PathnameStr = str + ev.MMap.File.PathnameStr = str return nil case "mmap.file.path.length": return &eval.ErrFieldReadOnly{Field: "mmap.file.path.length"} @@ -23701,193 +25832,193 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.Mode"} } - e.MMap.File.FileFields.Mode = uint16(v) + ev.MMap.File.FileFields.Mode = uint16(v) return nil case "mmap.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.UID"} } - e.MMap.File.FileFields.UID = uint32(v) + ev.MMap.File.FileFields.UID = uint32(v) return nil case "mmap.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.User"} } - e.MMap.File.FileFields.User = str + ev.MMap.File.FileFields.User = str return nil case "mmap.flags": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.Flags"} } - e.MMap.Flags = int(v) + ev.MMap.Flags = int(v) return nil case "mmap.protection": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.Protection"} } - e.MMap.Protection = int(v) + ev.MMap.Protection = int(v) return nil case "mmap.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.SyscallEvent.Retval"} } - e.MMap.SyscallEvent.Retval = int64(v) + ev.MMap.SyscallEvent.Retval = int64(v) return nil case "mount.fs_type": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mount.Mount.FSType"} } - e.Mount.Mount.FSType = str + ev.Mount.Mount.FSType = str return nil case "mount.mountpoint.path": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mount.MountPointPath"} } - e.Mount.MountPointPath = str + ev.Mount.MountPointPath = str return nil case "mount.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mount.SyscallEvent.Retval"} } - e.Mount.SyscallEvent.Retval = int64(v) + ev.Mount.SyscallEvent.Retval = int64(v) return nil case "mount.source.path": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mount.MountSourcePath"} } - e.Mount.MountSourcePath = str + ev.Mount.MountSourcePath = str return nil case "mprotect.req_protection": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MProtect.ReqProtection"} } - e.MProtect.ReqProtection = int(v) + ev.MProtect.ReqProtection = int(v) return nil case "mprotect.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MProtect.SyscallEvent.Retval"} } - e.MProtect.SyscallEvent.Retval = int64(v) + ev.MProtect.SyscallEvent.Retval = int64(v) return nil case "mprotect.vm_protection": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MProtect.VMProtection"} } - e.MProtect.VMProtection = int(v) + ev.MProtect.VMProtection = int(v) return nil case "network.destination.ip": v, ok := value.(net.IPNet) if !ok { return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Destination.IPNet"} } - e.NetworkContext.Destination.IPNet = v + ev.NetworkContext.Destination.IPNet = v return nil case "network.destination.port": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Destination.Port"} } - e.NetworkContext.Destination.Port = uint16(v) + ev.NetworkContext.Destination.Port = uint16(v) return nil case "network.device.ifindex": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Device.IfIndex"} } - e.NetworkContext.Device.IfIndex = uint32(v) + ev.NetworkContext.Device.IfIndex = uint32(v) return nil case "network.device.ifname": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Device.IfName"} } - e.NetworkContext.Device.IfName = str + ev.NetworkContext.Device.IfName = str return nil case "network.l3_protocol": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "NetworkContext.L3Protocol"} } - e.NetworkContext.L3Protocol = uint16(v) + ev.NetworkContext.L3Protocol = uint16(v) return nil case "network.l4_protocol": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "NetworkContext.L4Protocol"} } - e.NetworkContext.L4Protocol = uint16(v) + ev.NetworkContext.L4Protocol = uint16(v) return nil case "network.size": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Size"} } - e.NetworkContext.Size = uint32(v) + ev.NetworkContext.Size = uint32(v) return nil case "network.source.ip": v, ok := value.(net.IPNet) if !ok { return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Source.IPNet"} } - e.NetworkContext.Source.IPNet = v + ev.NetworkContext.Source.IPNet = v return nil case "network.source.port": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Source.Port"} } - e.NetworkContext.Source.Port = uint16(v) + ev.NetworkContext.Source.Port = uint16(v) return nil case "open.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.CTime"} } - e.Open.File.FileFields.CTime = uint64(v) + ev.Open.File.FileFields.CTime = uint64(v) return nil case "open.file.destination.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.Mode"} } - e.Open.Mode = uint32(v) + ev.Open.Mode = uint32(v) return nil case "open.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.Filesystem"} } - e.Open.File.Filesystem = str + ev.Open.File.Filesystem = str return nil case "open.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.GID"} } - e.Open.File.FileFields.GID = uint32(v) + ev.Open.File.FileFields.GID = uint32(v) return nil case "open.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.Group"} } - e.Open.File.FileFields.Group = str + ev.Open.File.FileFields.Group = str return nil case "open.file.in_upper_layer": var ok bool - if e.Open.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Open.File.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.InUpperLayer"} } return nil @@ -23896,35 +26027,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.Inode"} } - e.Open.File.FileFields.Inode = uint64(v) + ev.Open.File.FileFields.Inode = uint64(v) return nil case "open.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.Mode"} } - e.Open.File.FileFields.Mode = uint16(v) + ev.Open.File.FileFields.Mode = uint16(v) return nil case "open.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.MTime"} } - e.Open.File.FileFields.MTime = uint64(v) + ev.Open.File.FileFields.MTime = uint64(v) return nil case "open.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.MountID"} } - e.Open.File.FileFields.MountID = uint32(v) + ev.Open.File.FileFields.MountID = uint32(v) return nil case "open.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.BasenameStr"} } - e.Open.File.BasenameStr = str + ev.Open.File.BasenameStr = str return nil case "open.file.name.length": return &eval.ErrFieldReadOnly{Field: "open.file.name.length"} @@ -23933,7 +26064,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.PathnameStr"} } - e.Open.File.PathnameStr = str + ev.Open.File.PathnameStr = str return nil case "open.file.path.length": return &eval.ErrFieldReadOnly{Field: "open.file.path.length"} @@ -23942,4619 +26073,4619 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.Mode"} } - e.Open.File.FileFields.Mode = uint16(v) + ev.Open.File.FileFields.Mode = uint16(v) return nil case "open.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.UID"} } - e.Open.File.FileFields.UID = uint32(v) + ev.Open.File.FileFields.UID = uint32(v) return nil case "open.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.User"} } - e.Open.File.FileFields.User = str + ev.Open.File.FileFields.User = str return nil case "open.flags": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.Flags"} } - e.Open.Flags = uint32(v) + ev.Open.Flags = uint32(v) return nil case "open.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.SyscallEvent.Retval"} } - e.Open.SyscallEvent.Retval = int64(v) + ev.Open.SyscallEvent.Retval = int64(v) return nil case "process.ancestors.args": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Args"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Args = str + ev.ProcessContext.Ancestor.ProcessContext.Process.Args = str return nil case "process.ancestors.args_flags": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Argv"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(e.ProcessContext.Ancestor.ProcessContext.Process.Argv, str) + ev.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(ev.ProcessContext.Ancestor.ProcessContext.Process.Argv, str) return nil case "process.ancestors.args_options": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Argv"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(e.ProcessContext.Ancestor.ProcessContext.Process.Argv, str) + ev.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(ev.ProcessContext.Ancestor.ProcessContext.Process.Argv, str) return nil case "process.ancestors.args_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { + if ev.ProcessContext.Ancestor.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.ArgsTruncated"} } return nil case "process.ancestors.argv": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Argv"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(e.ProcessContext.Ancestor.ProcessContext.Process.Argv, str) + ev.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(ev.ProcessContext.Ancestor.ProcessContext.Process.Argv, str) return nil case "process.ancestors.argv0": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Argv0"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Argv0 = str + ev.ProcessContext.Ancestor.ProcessContext.Process.Argv0 = str return nil case "process.ancestors.cap_effective": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapEffective"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapEffective = uint64(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapEffective = uint64(v) return nil case "process.ancestors.cap_permitted": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapPermitted"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapPermitted = uint64(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapPermitted = uint64(v) return nil case "process.ancestors.comm": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Comm"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Comm = str + ev.ProcessContext.Ancestor.ProcessContext.Process.Comm = str return nil case "process.ancestors.container.id": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.ContainerID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.ContainerID = str + ev.ProcessContext.Ancestor.ProcessContext.Process.ContainerID = str return nil case "process.ancestors.cookie": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Cookie"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Cookie = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.Cookie = uint32(v) return nil case "process.ancestors.created_at": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.CreatedAt"} } - e.ProcessContext.Ancestor.ProcessContext.Process.CreatedAt = uint64(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.CreatedAt = uint64(v) return nil case "process.ancestors.egid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGID = uint32(v) return nil case "process.ancestors.egroup": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGroup"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGroup = str + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGroup = str return nil case "process.ancestors.envp": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Envp"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Envp = append(e.ProcessContext.Ancestor.ProcessContext.Process.Envp, str) + ev.ProcessContext.Ancestor.ProcessContext.Process.Envp = append(ev.ProcessContext.Ancestor.ProcessContext.Process.Envp, str) return nil case "process.ancestors.envs": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Envs"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Envs = append(e.ProcessContext.Ancestor.ProcessContext.Process.Envs, str) + ev.ProcessContext.Ancestor.ProcessContext.Process.Envs = append(ev.ProcessContext.Ancestor.ProcessContext.Process.Envs, str) return nil case "process.ancestors.envs_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { + if ev.ProcessContext.Ancestor.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.EnvsTruncated"} } return nil case "process.ancestors.euid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUID = uint32(v) return nil case "process.ancestors.euser": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUser"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUser = str + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUser = str return nil case "process.ancestors.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) return nil case "process.ancestors.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.Filesystem"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.Filesystem = str + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.Filesystem = str return nil case "process.ancestors.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) return nil case "process.ancestors.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group = str + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group = str return nil case "process.ancestors.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer"} } return nil case "process.ancestors.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) return nil case "process.ancestors.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "process.ancestors.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) return nil case "process.ancestors.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) return nil case "process.ancestors.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.BasenameStr"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.BasenameStr = str + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.BasenameStr = str return nil case "process.ancestors.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "process.ancestors.file.name.length"} case "process.ancestors.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.PathnameStr"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.PathnameStr = str + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.PathnameStr = str return nil case "process.ancestors.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "process.ancestors.file.path.length"} case "process.ancestors.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "process.ancestors.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) return nil case "process.ancestors.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.User"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.User = str + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.User = str return nil case "process.ancestors.fsgid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGID = uint32(v) return nil case "process.ancestors.fsgroup": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGroup"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGroup = str + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGroup = str return nil case "process.ancestors.fsuid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUID = uint32(v) return nil case "process.ancestors.fsuser": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUser"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUser = str + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUser = str return nil case "process.ancestors.gid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.GID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.GID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.GID = uint32(v) return nil case "process.ancestors.group": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.Group"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.Group = str + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.Group = str return nil case "process.ancestors.interpreter.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) return nil case "process.ancestors.interpreter.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str return nil case "process.ancestors.interpreter.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) return nil case "process.ancestors.interpreter.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str return nil case "process.ancestors.interpreter.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } return nil case "process.ancestors.interpreter.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) return nil case "process.ancestors.interpreter.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "process.ancestors.interpreter.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) return nil case "process.ancestors.interpreter.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) return nil case "process.ancestors.interpreter.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str return nil case "process.ancestors.interpreter.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "process.ancestors.interpreter.file.name.length"} case "process.ancestors.interpreter.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str return nil case "process.ancestors.interpreter.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "process.ancestors.interpreter.file.path.length"} case "process.ancestors.interpreter.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "process.ancestors.interpreter.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) return nil case "process.ancestors.interpreter.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str return nil case "process.ancestors.is_kworker": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { + if ev.ProcessContext.Ancestor.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.PIDContext.IsKworker"} } return nil case "process.ancestors.is_thread": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.IsThread, ok = value.(bool); !ok { + if ev.ProcessContext.Ancestor.ProcessContext.Process.IsThread, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.IsThread"} } return nil case "process.ancestors.pid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Pid"} } - e.ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Pid = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Pid = uint32(v) return nil case "process.ancestors.ppid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.PPid"} } - e.ProcessContext.Ancestor.ProcessContext.Process.PPid = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.PPid = uint32(v) return nil case "process.ancestors.tid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Tid"} } - e.ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Tid = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Tid = uint32(v) return nil case "process.ancestors.tty_name": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.TTYName"} } - e.ProcessContext.Ancestor.ProcessContext.Process.TTYName = str + ev.ProcessContext.Ancestor.ProcessContext.Process.TTYName = str return nil case "process.ancestors.uid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.UID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.UID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.UID = uint32(v) return nil case "process.ancestors.user": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.User"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.User = str + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.User = str return nil case "process.args": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Args"} } - e.ProcessContext.Process.Args = str + ev.ProcessContext.Process.Args = str return nil case "process.args_flags": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Argv"} } - e.ProcessContext.Process.Argv = append(e.ProcessContext.Process.Argv, str) + ev.ProcessContext.Process.Argv = append(ev.ProcessContext.Process.Argv, str) return nil case "process.args_options": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Argv"} } - e.ProcessContext.Process.Argv = append(e.ProcessContext.Process.Argv, str) + ev.ProcessContext.Process.Argv = append(ev.ProcessContext.Process.Argv, str) return nil case "process.args_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } var ok bool - if e.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { + if ev.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.ArgsTruncated"} } return nil case "process.argv": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Argv"} } - e.ProcessContext.Process.Argv = append(e.ProcessContext.Process.Argv, str) + ev.ProcessContext.Process.Argv = append(ev.ProcessContext.Process.Argv, str) return nil case "process.argv0": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Argv0"} } - e.ProcessContext.Process.Argv0 = str + ev.ProcessContext.Process.Argv0 = str return nil case "process.cap_effective": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.CapEffective"} } - e.ProcessContext.Process.Credentials.CapEffective = uint64(v) + ev.ProcessContext.Process.Credentials.CapEffective = uint64(v) return nil case "process.cap_permitted": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.CapPermitted"} } - e.ProcessContext.Process.Credentials.CapPermitted = uint64(v) + ev.ProcessContext.Process.Credentials.CapPermitted = uint64(v) return nil case "process.comm": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Comm"} } - e.ProcessContext.Process.Comm = str + ev.ProcessContext.Process.Comm = str return nil case "process.container.id": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.ContainerID"} } - e.ProcessContext.Process.ContainerID = str + ev.ProcessContext.Process.ContainerID = str return nil case "process.cookie": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Cookie"} } - e.ProcessContext.Process.Cookie = uint32(v) + ev.ProcessContext.Process.Cookie = uint32(v) return nil case "process.created_at": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.CreatedAt"} } - e.ProcessContext.Process.CreatedAt = uint64(v) + ev.ProcessContext.Process.CreatedAt = uint64(v) return nil case "process.egid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.EGID"} } - e.ProcessContext.Process.Credentials.EGID = uint32(v) + ev.ProcessContext.Process.Credentials.EGID = uint32(v) return nil case "process.egroup": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.EGroup"} } - e.ProcessContext.Process.Credentials.EGroup = str + ev.ProcessContext.Process.Credentials.EGroup = str return nil case "process.envp": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Envp"} } - e.ProcessContext.Process.Envp = append(e.ProcessContext.Process.Envp, str) + ev.ProcessContext.Process.Envp = append(ev.ProcessContext.Process.Envp, str) return nil case "process.envs": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Envs"} } - e.ProcessContext.Process.Envs = append(e.ProcessContext.Process.Envs, str) + ev.ProcessContext.Process.Envs = append(ev.ProcessContext.Process.Envs, str) return nil case "process.envs_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } var ok bool - if e.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { + if ev.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.EnvsTruncated"} } return nil case "process.euid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.EUID"} } - e.ProcessContext.Process.Credentials.EUID = uint32(v) + ev.ProcessContext.Process.Credentials.EUID = uint32(v) return nil case "process.euser": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.EUser"} } - e.ProcessContext.Process.Credentials.EUser = str + ev.ProcessContext.Process.Credentials.EUser = str return nil case "process.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.CTime"} } - e.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) + ev.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) return nil case "process.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.Filesystem"} } - e.ProcessContext.Process.FileEvent.Filesystem = str + ev.ProcessContext.Process.FileEvent.Filesystem = str return nil case "process.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.GID"} } - e.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) + ev.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) return nil case "process.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.Group"} } - e.ProcessContext.Process.FileEvent.FileFields.Group = str + ev.ProcessContext.Process.FileEvent.FileFields.Group = str return nil case "process.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } var ok bool - if e.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.InUpperLayer"} } return nil case "process.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.Inode"} } - e.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) + ev.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) return nil case "process.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.Mode"} } - e.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "process.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.MTime"} } - e.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) + ev.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) return nil case "process.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.MountID"} } - e.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) + ev.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) return nil case "process.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.BasenameStr"} } - e.ProcessContext.Process.FileEvent.BasenameStr = str + ev.ProcessContext.Process.FileEvent.BasenameStr = str return nil case "process.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "process.file.name.length"} case "process.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.PathnameStr"} } - e.ProcessContext.Process.FileEvent.PathnameStr = str + ev.ProcessContext.Process.FileEvent.PathnameStr = str return nil case "process.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "process.file.path.length"} case "process.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.Mode"} } - e.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "process.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.UID"} } - e.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) + ev.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) return nil case "process.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.User"} } - e.ProcessContext.Process.FileEvent.FileFields.User = str + ev.ProcessContext.Process.FileEvent.FileFields.User = str return nil case "process.fsgid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.FSGID"} } - e.ProcessContext.Process.Credentials.FSGID = uint32(v) + ev.ProcessContext.Process.Credentials.FSGID = uint32(v) return nil case "process.fsgroup": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.FSGroup"} } - e.ProcessContext.Process.Credentials.FSGroup = str + ev.ProcessContext.Process.Credentials.FSGroup = str return nil case "process.fsuid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.FSUID"} } - e.ProcessContext.Process.Credentials.FSUID = uint32(v) + ev.ProcessContext.Process.Credentials.FSUID = uint32(v) return nil case "process.fsuser": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.FSUser"} } - e.ProcessContext.Process.Credentials.FSUser = str + ev.ProcessContext.Process.Credentials.FSUser = str return nil case "process.gid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.GID"} } - e.ProcessContext.Process.Credentials.GID = uint32(v) + ev.ProcessContext.Process.Credentials.GID = uint32(v) return nil case "process.group": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.Group"} } - e.ProcessContext.Process.Credentials.Group = str + ev.ProcessContext.Process.Credentials.Group = str return nil case "process.interpreter.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) return nil case "process.interpreter.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str + ev.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str return nil case "process.interpreter.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) return nil case "process.interpreter.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str return nil case "process.interpreter.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } var ok bool - if e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } return nil case "process.interpreter.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) return nil case "process.interpreter.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "process.interpreter.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) return nil case "process.interpreter.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) return nil case "process.interpreter.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str + ev.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str return nil case "process.interpreter.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "process.interpreter.file.name.length"} case "process.interpreter.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str + ev.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str return nil case "process.interpreter.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "process.interpreter.file.path.length"} case "process.interpreter.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "process.interpreter.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) return nil case "process.interpreter.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str return nil case "process.is_kworker": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } var ok bool - if e.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { + if ev.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.PIDContext.IsKworker"} } return nil case "process.is_thread": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } var ok bool - if e.ProcessContext.Process.IsThread, ok = value.(bool); !ok { + if ev.ProcessContext.Process.IsThread, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.IsThread"} } return nil case "process.parent.args": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Args"} } - e.ProcessContext.Parent.Args = str + ev.ProcessContext.Parent.Args = str return nil case "process.parent.args_flags": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Argv"} } - e.ProcessContext.Parent.Argv = append(e.ProcessContext.Parent.Argv, str) + ev.ProcessContext.Parent.Argv = append(ev.ProcessContext.Parent.Argv, str) return nil case "process.parent.args_options": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Argv"} } - e.ProcessContext.Parent.Argv = append(e.ProcessContext.Parent.Argv, str) + ev.ProcessContext.Parent.Argv = append(ev.ProcessContext.Parent.Argv, str) return nil case "process.parent.args_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } var ok bool - if e.ProcessContext.Parent.ArgsTruncated, ok = value.(bool); !ok { + if ev.ProcessContext.Parent.ArgsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.ArgsTruncated"} } return nil case "process.parent.argv": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Argv"} } - e.ProcessContext.Parent.Argv = append(e.ProcessContext.Parent.Argv, str) + ev.ProcessContext.Parent.Argv = append(ev.ProcessContext.Parent.Argv, str) return nil case "process.parent.argv0": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Argv0"} } - e.ProcessContext.Parent.Argv0 = str + ev.ProcessContext.Parent.Argv0 = str return nil case "process.parent.cap_effective": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.CapEffective"} } - e.ProcessContext.Parent.Credentials.CapEffective = uint64(v) + ev.ProcessContext.Parent.Credentials.CapEffective = uint64(v) return nil case "process.parent.cap_permitted": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.CapPermitted"} } - e.ProcessContext.Parent.Credentials.CapPermitted = uint64(v) + ev.ProcessContext.Parent.Credentials.CapPermitted = uint64(v) return nil case "process.parent.comm": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Comm"} } - e.ProcessContext.Parent.Comm = str + ev.ProcessContext.Parent.Comm = str return nil case "process.parent.container.id": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.ContainerID"} } - e.ProcessContext.Parent.ContainerID = str + ev.ProcessContext.Parent.ContainerID = str return nil case "process.parent.cookie": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Cookie"} } - e.ProcessContext.Parent.Cookie = uint32(v) + ev.ProcessContext.Parent.Cookie = uint32(v) return nil case "process.parent.created_at": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.CreatedAt"} } - e.ProcessContext.Parent.CreatedAt = uint64(v) + ev.ProcessContext.Parent.CreatedAt = uint64(v) return nil case "process.parent.egid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.EGID"} } - e.ProcessContext.Parent.Credentials.EGID = uint32(v) + ev.ProcessContext.Parent.Credentials.EGID = uint32(v) return nil case "process.parent.egroup": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.EGroup"} } - e.ProcessContext.Parent.Credentials.EGroup = str + ev.ProcessContext.Parent.Credentials.EGroup = str return nil case "process.parent.envp": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Envp"} } - e.ProcessContext.Parent.Envp = append(e.ProcessContext.Parent.Envp, str) + ev.ProcessContext.Parent.Envp = append(ev.ProcessContext.Parent.Envp, str) return nil case "process.parent.envs": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Envs"} } - e.ProcessContext.Parent.Envs = append(e.ProcessContext.Parent.Envs, str) + ev.ProcessContext.Parent.Envs = append(ev.ProcessContext.Parent.Envs, str) return nil case "process.parent.envs_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } var ok bool - if e.ProcessContext.Parent.EnvsTruncated, ok = value.(bool); !ok { + if ev.ProcessContext.Parent.EnvsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.EnvsTruncated"} } return nil case "process.parent.euid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.EUID"} } - e.ProcessContext.Parent.Credentials.EUID = uint32(v) + ev.ProcessContext.Parent.Credentials.EUID = uint32(v) return nil case "process.parent.euser": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.EUser"} } - e.ProcessContext.Parent.Credentials.EUser = str + ev.ProcessContext.Parent.Credentials.EUser = str return nil case "process.parent.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.CTime"} } - e.ProcessContext.Parent.FileEvent.FileFields.CTime = uint64(v) + ev.ProcessContext.Parent.FileEvent.FileFields.CTime = uint64(v) return nil case "process.parent.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.Filesystem"} } - e.ProcessContext.Parent.FileEvent.Filesystem = str + ev.ProcessContext.Parent.FileEvent.Filesystem = str return nil case "process.parent.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.GID"} } - e.ProcessContext.Parent.FileEvent.FileFields.GID = uint32(v) + ev.ProcessContext.Parent.FileEvent.FileFields.GID = uint32(v) return nil case "process.parent.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.Group"} } - e.ProcessContext.Parent.FileEvent.FileFields.Group = str + ev.ProcessContext.Parent.FileEvent.FileFields.Group = str return nil case "process.parent.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } var ok bool - if e.ProcessContext.Parent.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.ProcessContext.Parent.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.InUpperLayer"} } return nil case "process.parent.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.Inode"} } - e.ProcessContext.Parent.FileEvent.FileFields.Inode = uint64(v) + ev.ProcessContext.Parent.FileEvent.FileFields.Inode = uint64(v) return nil case "process.parent.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.Mode"} } - e.ProcessContext.Parent.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Parent.FileEvent.FileFields.Mode = uint16(v) return nil case "process.parent.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.MTime"} } - e.ProcessContext.Parent.FileEvent.FileFields.MTime = uint64(v) + ev.ProcessContext.Parent.FileEvent.FileFields.MTime = uint64(v) return nil case "process.parent.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.MountID"} } - e.ProcessContext.Parent.FileEvent.FileFields.MountID = uint32(v) + ev.ProcessContext.Parent.FileEvent.FileFields.MountID = uint32(v) return nil case "process.parent.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.BasenameStr"} } - e.ProcessContext.Parent.FileEvent.BasenameStr = str + ev.ProcessContext.Parent.FileEvent.BasenameStr = str return nil case "process.parent.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "process.parent.file.name.length"} case "process.parent.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.PathnameStr"} } - e.ProcessContext.Parent.FileEvent.PathnameStr = str + ev.ProcessContext.Parent.FileEvent.PathnameStr = str return nil case "process.parent.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "process.parent.file.path.length"} case "process.parent.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.Mode"} } - e.ProcessContext.Parent.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Parent.FileEvent.FileFields.Mode = uint16(v) return nil case "process.parent.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.UID"} } - e.ProcessContext.Parent.FileEvent.FileFields.UID = uint32(v) + ev.ProcessContext.Parent.FileEvent.FileFields.UID = uint32(v) return nil case "process.parent.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.User"} } - e.ProcessContext.Parent.FileEvent.FileFields.User = str + ev.ProcessContext.Parent.FileEvent.FileFields.User = str return nil case "process.parent.fsgid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.FSGID"} } - e.ProcessContext.Parent.Credentials.FSGID = uint32(v) + ev.ProcessContext.Parent.Credentials.FSGID = uint32(v) return nil case "process.parent.fsgroup": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.FSGroup"} } - e.ProcessContext.Parent.Credentials.FSGroup = str + ev.ProcessContext.Parent.Credentials.FSGroup = str return nil case "process.parent.fsuid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.FSUID"} } - e.ProcessContext.Parent.Credentials.FSUID = uint32(v) + ev.ProcessContext.Parent.Credentials.FSUID = uint32(v) return nil case "process.parent.fsuser": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.FSUser"} } - e.ProcessContext.Parent.Credentials.FSUser = str + ev.ProcessContext.Parent.Credentials.FSUser = str return nil case "process.parent.gid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.GID"} } - e.ProcessContext.Parent.Credentials.GID = uint32(v) + ev.ProcessContext.Parent.Credentials.GID = uint32(v) return nil case "process.parent.group": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.Group"} } - e.ProcessContext.Parent.Credentials.Group = str + ev.ProcessContext.Parent.Credentials.Group = str return nil case "process.parent.interpreter.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) return nil case "process.parent.interpreter.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.Filesystem"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.Filesystem = str + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.Filesystem = str return nil case "process.parent.interpreter.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) return nil case "process.parent.interpreter.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Group"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Group = str + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Group = str return nil case "process.parent.interpreter.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } var ok bool - if e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } return nil case "process.parent.interpreter.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) return nil case "process.parent.interpreter.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "process.parent.interpreter.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) return nil case "process.parent.interpreter.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) return nil case "process.parent.interpreter.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.BasenameStr"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.BasenameStr = str + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.BasenameStr = str return nil case "process.parent.interpreter.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "process.parent.interpreter.file.name.length"} case "process.parent.interpreter.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.PathnameStr"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.PathnameStr = str + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.PathnameStr = str return nil case "process.parent.interpreter.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "process.parent.interpreter.file.path.length"} case "process.parent.interpreter.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "process.parent.interpreter.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) return nil case "process.parent.interpreter.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.User"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.User = str + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.User = str return nil case "process.parent.is_kworker": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } var ok bool - if e.ProcessContext.Parent.PIDContext.IsKworker, ok = value.(bool); !ok { + if ev.ProcessContext.Parent.PIDContext.IsKworker, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.PIDContext.IsKworker"} } return nil case "process.parent.is_thread": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } var ok bool - if e.ProcessContext.Parent.IsThread, ok = value.(bool); !ok { + if ev.ProcessContext.Parent.IsThread, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.IsThread"} } return nil case "process.parent.pid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.PIDContext.Pid"} } - e.ProcessContext.Parent.PIDContext.Pid = uint32(v) + ev.ProcessContext.Parent.PIDContext.Pid = uint32(v) return nil case "process.parent.ppid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.PPid"} } - e.ProcessContext.Parent.PPid = uint32(v) + ev.ProcessContext.Parent.PPid = uint32(v) return nil case "process.parent.tid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.PIDContext.Tid"} } - e.ProcessContext.Parent.PIDContext.Tid = uint32(v) + ev.ProcessContext.Parent.PIDContext.Tid = uint32(v) return nil case "process.parent.tty_name": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.TTYName"} } - e.ProcessContext.Parent.TTYName = str + ev.ProcessContext.Parent.TTYName = str return nil case "process.parent.uid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.UID"} } - e.ProcessContext.Parent.Credentials.UID = uint32(v) + ev.ProcessContext.Parent.Credentials.UID = uint32(v) return nil case "process.parent.user": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.User"} } - e.ProcessContext.Parent.Credentials.User = str + ev.ProcessContext.Parent.Credentials.User = str return nil case "process.pid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.PIDContext.Pid"} } - e.ProcessContext.Process.PIDContext.Pid = uint32(v) + ev.ProcessContext.Process.PIDContext.Pid = uint32(v) return nil case "process.ppid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.PPid"} } - e.ProcessContext.Process.PPid = uint32(v) + ev.ProcessContext.Process.PPid = uint32(v) return nil case "process.tid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.PIDContext.Tid"} } - e.ProcessContext.Process.PIDContext.Tid = uint32(v) + ev.ProcessContext.Process.PIDContext.Tid = uint32(v) return nil case "process.tty_name": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.TTYName"} } - e.ProcessContext.Process.TTYName = str + ev.ProcessContext.Process.TTYName = str return nil case "process.uid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.UID"} } - e.ProcessContext.Process.Credentials.UID = uint32(v) + ev.ProcessContext.Process.Credentials.UID = uint32(v) return nil case "process.user": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.User"} } - e.ProcessContext.Process.Credentials.User = str + ev.ProcessContext.Process.Credentials.User = str return nil case "ptrace.request": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Request"} } - e.PTrace.Request = uint32(v) + ev.PTrace.Request = uint32(v) return nil case "ptrace.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.SyscallEvent.Retval"} } - e.PTrace.SyscallEvent.Retval = int64(v) + ev.PTrace.SyscallEvent.Retval = int64(v) return nil case "ptrace.tracee.ancestors.args": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Args"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Args = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Args = str return nil case "ptrace.tracee.ancestors.args_flags": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Argv"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, str) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, str) return nil case "ptrace.tracee.ancestors.args_options": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Argv"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, str) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, str) return nil case "ptrace.tracee.ancestors.args_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Ancestor.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.ArgsTruncated"} } return nil case "ptrace.tracee.ancestors.argv": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Argv"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, str) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, str) return nil case "ptrace.tracee.ancestors.argv0": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Argv0"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv0 = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv0 = str return nil case "ptrace.tracee.ancestors.cap_effective": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapEffective"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapEffective = uint64(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapEffective = uint64(v) return nil case "ptrace.tracee.ancestors.cap_permitted": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapPermitted"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapPermitted = uint64(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapPermitted = uint64(v) return nil case "ptrace.tracee.ancestors.comm": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Comm"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Comm = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Comm = str return nil case "ptrace.tracee.ancestors.container.id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.ContainerID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.ContainerID = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.ContainerID = str return nil case "ptrace.tracee.ancestors.cookie": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Cookie"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Cookie = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Cookie = uint32(v) return nil case "ptrace.tracee.ancestors.created_at": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.CreatedAt"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.CreatedAt = uint64(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.CreatedAt = uint64(v) return nil case "ptrace.tracee.ancestors.egid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGID = uint32(v) return nil case "ptrace.tracee.ancestors.egroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGroup"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGroup = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGroup = str return nil case "ptrace.tracee.ancestors.envp": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Envp"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Envp = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Envp, str) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Envp = append(ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Envp, str) return nil case "ptrace.tracee.ancestors.envs": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Envs"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Envs = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Envs, str) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Envs = append(ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Envs, str) return nil case "ptrace.tracee.ancestors.envs_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Ancestor.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.EnvsTruncated"} } return nil case "ptrace.tracee.ancestors.euid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUID = uint32(v) return nil case "ptrace.tracee.ancestors.euser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUser"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUser = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUser = str return nil case "ptrace.tracee.ancestors.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) return nil case "ptrace.tracee.ancestors.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.Filesystem"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.Filesystem = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.Filesystem = str return nil case "ptrace.tracee.ancestors.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) return nil case "ptrace.tracee.ancestors.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group = str return nil case "ptrace.tracee.ancestors.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer"} } return nil case "ptrace.tracee.ancestors.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) return nil case "ptrace.tracee.ancestors.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "ptrace.tracee.ancestors.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) return nil case "ptrace.tracee.ancestors.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) return nil case "ptrace.tracee.ancestors.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.BasenameStr"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.BasenameStr = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.BasenameStr = str return nil case "ptrace.tracee.ancestors.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.ancestors.file.name.length"} case "ptrace.tracee.ancestors.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.PathnameStr"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.PathnameStr = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.PathnameStr = str return nil case "ptrace.tracee.ancestors.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.ancestors.file.path.length"} case "ptrace.tracee.ancestors.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "ptrace.tracee.ancestors.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) return nil case "ptrace.tracee.ancestors.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.User"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.User = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.User = str return nil case "ptrace.tracee.ancestors.fsgid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGID = uint32(v) return nil case "ptrace.tracee.ancestors.fsgroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGroup"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGroup = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGroup = str return nil case "ptrace.tracee.ancestors.fsuid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUID = uint32(v) return nil case "ptrace.tracee.ancestors.fsuser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUser"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUser = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUser = str return nil case "ptrace.tracee.ancestors.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.GID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.GID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.GID = uint32(v) return nil case "ptrace.tracee.ancestors.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.Group"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.Group = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.Group = str return nil case "ptrace.tracee.ancestors.interpreter.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) return nil case "ptrace.tracee.ancestors.interpreter.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str return nil case "ptrace.tracee.ancestors.interpreter.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) return nil case "ptrace.tracee.ancestors.interpreter.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str return nil case "ptrace.tracee.ancestors.interpreter.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } return nil case "ptrace.tracee.ancestors.interpreter.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) return nil case "ptrace.tracee.ancestors.interpreter.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "ptrace.tracee.ancestors.interpreter.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) return nil case "ptrace.tracee.ancestors.interpreter.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) return nil case "ptrace.tracee.ancestors.interpreter.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str return nil case "ptrace.tracee.ancestors.interpreter.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.ancestors.interpreter.file.name.length"} case "ptrace.tracee.ancestors.interpreter.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str return nil case "ptrace.tracee.ancestors.interpreter.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.ancestors.interpreter.file.path.length"} case "ptrace.tracee.ancestors.interpreter.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "ptrace.tracee.ancestors.interpreter.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) return nil case "ptrace.tracee.ancestors.interpreter.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str return nil case "ptrace.tracee.ancestors.is_kworker": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.IsKworker"} } return nil case "ptrace.tracee.ancestors.is_thread": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.IsThread, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Ancestor.ProcessContext.Process.IsThread, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.IsThread"} } return nil case "ptrace.tracee.ancestors.pid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Pid"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Pid = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Pid = uint32(v) return nil case "ptrace.tracee.ancestors.ppid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.PPid"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.PPid = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.PPid = uint32(v) return nil case "ptrace.tracee.ancestors.tid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Tid"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Tid = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Tid = uint32(v) return nil case "ptrace.tracee.ancestors.tty_name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.TTYName"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.TTYName = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.TTYName = str return nil case "ptrace.tracee.ancestors.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.UID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.UID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.UID = uint32(v) return nil case "ptrace.tracee.ancestors.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.User"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.User = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.User = str return nil case "ptrace.tracee.args": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Args"} } - e.PTrace.Tracee.Process.Args = str + ev.PTrace.Tracee.Process.Args = str return nil case "ptrace.tracee.args_flags": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Argv"} } - e.PTrace.Tracee.Process.Argv = append(e.PTrace.Tracee.Process.Argv, str) + ev.PTrace.Tracee.Process.Argv = append(ev.PTrace.Tracee.Process.Argv, str) return nil case "ptrace.tracee.args_options": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Argv"} } - e.PTrace.Tracee.Process.Argv = append(e.PTrace.Tracee.Process.Argv, str) + ev.PTrace.Tracee.Process.Argv = append(ev.PTrace.Tracee.Process.Argv, str) return nil case "ptrace.tracee.args_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } var ok bool - if e.PTrace.Tracee.Process.ArgsTruncated, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Process.ArgsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.ArgsTruncated"} } return nil case "ptrace.tracee.argv": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Argv"} } - e.PTrace.Tracee.Process.Argv = append(e.PTrace.Tracee.Process.Argv, str) + ev.PTrace.Tracee.Process.Argv = append(ev.PTrace.Tracee.Process.Argv, str) return nil case "ptrace.tracee.argv0": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Argv0"} } - e.PTrace.Tracee.Process.Argv0 = str + ev.PTrace.Tracee.Process.Argv0 = str return nil case "ptrace.tracee.cap_effective": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.CapEffective"} } - e.PTrace.Tracee.Process.Credentials.CapEffective = uint64(v) + ev.PTrace.Tracee.Process.Credentials.CapEffective = uint64(v) return nil case "ptrace.tracee.cap_permitted": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.CapPermitted"} } - e.PTrace.Tracee.Process.Credentials.CapPermitted = uint64(v) + ev.PTrace.Tracee.Process.Credentials.CapPermitted = uint64(v) return nil case "ptrace.tracee.comm": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Comm"} } - e.PTrace.Tracee.Process.Comm = str + ev.PTrace.Tracee.Process.Comm = str return nil case "ptrace.tracee.container.id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.ContainerID"} } - e.PTrace.Tracee.Process.ContainerID = str + ev.PTrace.Tracee.Process.ContainerID = str return nil case "ptrace.tracee.cookie": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Cookie"} } - e.PTrace.Tracee.Process.Cookie = uint32(v) + ev.PTrace.Tracee.Process.Cookie = uint32(v) return nil case "ptrace.tracee.created_at": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.CreatedAt"} } - e.PTrace.Tracee.Process.CreatedAt = uint64(v) + ev.PTrace.Tracee.Process.CreatedAt = uint64(v) return nil case "ptrace.tracee.egid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.EGID"} } - e.PTrace.Tracee.Process.Credentials.EGID = uint32(v) + ev.PTrace.Tracee.Process.Credentials.EGID = uint32(v) return nil case "ptrace.tracee.egroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.EGroup"} } - e.PTrace.Tracee.Process.Credentials.EGroup = str + ev.PTrace.Tracee.Process.Credentials.EGroup = str return nil case "ptrace.tracee.envp": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Envp"} } - e.PTrace.Tracee.Process.Envp = append(e.PTrace.Tracee.Process.Envp, str) + ev.PTrace.Tracee.Process.Envp = append(ev.PTrace.Tracee.Process.Envp, str) return nil case "ptrace.tracee.envs": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Envs"} } - e.PTrace.Tracee.Process.Envs = append(e.PTrace.Tracee.Process.Envs, str) + ev.PTrace.Tracee.Process.Envs = append(ev.PTrace.Tracee.Process.Envs, str) return nil case "ptrace.tracee.envs_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } var ok bool - if e.PTrace.Tracee.Process.EnvsTruncated, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Process.EnvsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.EnvsTruncated"} } return nil case "ptrace.tracee.euid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.EUID"} } - e.PTrace.Tracee.Process.Credentials.EUID = uint32(v) + ev.PTrace.Tracee.Process.Credentials.EUID = uint32(v) return nil case "ptrace.tracee.euser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.EUser"} } - e.PTrace.Tracee.Process.Credentials.EUser = str + ev.PTrace.Tracee.Process.Credentials.EUser = str return nil case "ptrace.tracee.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.CTime"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.CTime = uint64(v) + ev.PTrace.Tracee.Process.FileEvent.FileFields.CTime = uint64(v) return nil case "ptrace.tracee.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.Filesystem"} } - e.PTrace.Tracee.Process.FileEvent.Filesystem = str + ev.PTrace.Tracee.Process.FileEvent.Filesystem = str return nil case "ptrace.tracee.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.GID"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.GID = uint32(v) + ev.PTrace.Tracee.Process.FileEvent.FileFields.GID = uint32(v) return nil case "ptrace.tracee.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.Group"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.Group = str + ev.PTrace.Tracee.Process.FileEvent.FileFields.Group = str return nil case "ptrace.tracee.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } var ok bool - if e.PTrace.Tracee.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.InUpperLayer"} } return nil case "ptrace.tracee.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.Inode"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.Inode = uint64(v) + ev.PTrace.Tracee.Process.FileEvent.FileFields.Inode = uint64(v) return nil case "ptrace.tracee.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "ptrace.tracee.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.MTime"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.MTime = uint64(v) + ev.PTrace.Tracee.Process.FileEvent.FileFields.MTime = uint64(v) return nil case "ptrace.tracee.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.MountID"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.MountID = uint32(v) + ev.PTrace.Tracee.Process.FileEvent.FileFields.MountID = uint32(v) return nil case "ptrace.tracee.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.BasenameStr"} } - e.PTrace.Tracee.Process.FileEvent.BasenameStr = str + ev.PTrace.Tracee.Process.FileEvent.BasenameStr = str return nil case "ptrace.tracee.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.file.name.length"} case "ptrace.tracee.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.PathnameStr"} } - e.PTrace.Tracee.Process.FileEvent.PathnameStr = str + ev.PTrace.Tracee.Process.FileEvent.PathnameStr = str return nil case "ptrace.tracee.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.file.path.length"} case "ptrace.tracee.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "ptrace.tracee.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.UID"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.UID = uint32(v) + ev.PTrace.Tracee.Process.FileEvent.FileFields.UID = uint32(v) return nil case "ptrace.tracee.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.User"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.User = str + ev.PTrace.Tracee.Process.FileEvent.FileFields.User = str return nil case "ptrace.tracee.fsgid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.FSGID"} } - e.PTrace.Tracee.Process.Credentials.FSGID = uint32(v) + ev.PTrace.Tracee.Process.Credentials.FSGID = uint32(v) return nil case "ptrace.tracee.fsgroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.FSGroup"} } - e.PTrace.Tracee.Process.Credentials.FSGroup = str + ev.PTrace.Tracee.Process.Credentials.FSGroup = str return nil case "ptrace.tracee.fsuid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.FSUID"} } - e.PTrace.Tracee.Process.Credentials.FSUID = uint32(v) + ev.PTrace.Tracee.Process.Credentials.FSUID = uint32(v) return nil case "ptrace.tracee.fsuser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.FSUser"} } - e.PTrace.Tracee.Process.Credentials.FSUser = str + ev.PTrace.Tracee.Process.Credentials.FSUser = str return nil case "ptrace.tracee.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.GID"} } - e.PTrace.Tracee.Process.Credentials.GID = uint32(v) + ev.PTrace.Tracee.Process.Credentials.GID = uint32(v) return nil case "ptrace.tracee.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.Group"} } - e.PTrace.Tracee.Process.Credentials.Group = str + ev.PTrace.Tracee.Process.Credentials.Group = str return nil case "ptrace.tracee.interpreter.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) return nil case "ptrace.tracee.interpreter.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.Filesystem"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.Filesystem = str + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.Filesystem = str return nil case "ptrace.tracee.interpreter.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) return nil case "ptrace.tracee.interpreter.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Group"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Group = str + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Group = str return nil case "ptrace.tracee.interpreter.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } var ok bool - if e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } return nil case "ptrace.tracee.interpreter.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) return nil case "ptrace.tracee.interpreter.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "ptrace.tracee.interpreter.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) return nil case "ptrace.tracee.interpreter.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) return nil case "ptrace.tracee.interpreter.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.BasenameStr"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.BasenameStr = str + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.BasenameStr = str return nil case "ptrace.tracee.interpreter.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.interpreter.file.name.length"} case "ptrace.tracee.interpreter.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.PathnameStr"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.PathnameStr = str + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.PathnameStr = str return nil case "ptrace.tracee.interpreter.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.interpreter.file.path.length"} case "ptrace.tracee.interpreter.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "ptrace.tracee.interpreter.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) return nil case "ptrace.tracee.interpreter.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.User"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.User = str + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.User = str return nil case "ptrace.tracee.is_kworker": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } var ok bool - if e.PTrace.Tracee.Process.PIDContext.IsKworker, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Process.PIDContext.IsKworker, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.PIDContext.IsKworker"} } return nil case "ptrace.tracee.is_thread": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } var ok bool - if e.PTrace.Tracee.Process.IsThread, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Process.IsThread, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.IsThread"} } return nil case "ptrace.tracee.parent.args": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Args"} } - e.PTrace.Tracee.Parent.Args = str + ev.PTrace.Tracee.Parent.Args = str return nil case "ptrace.tracee.parent.args_flags": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Argv"} } - e.PTrace.Tracee.Parent.Argv = append(e.PTrace.Tracee.Parent.Argv, str) + ev.PTrace.Tracee.Parent.Argv = append(ev.PTrace.Tracee.Parent.Argv, str) return nil case "ptrace.tracee.parent.args_options": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Argv"} } - e.PTrace.Tracee.Parent.Argv = append(e.PTrace.Tracee.Parent.Argv, str) + ev.PTrace.Tracee.Parent.Argv = append(ev.PTrace.Tracee.Parent.Argv, str) return nil case "ptrace.tracee.parent.args_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } var ok bool - if e.PTrace.Tracee.Parent.ArgsTruncated, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Parent.ArgsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.ArgsTruncated"} } return nil case "ptrace.tracee.parent.argv": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Argv"} } - e.PTrace.Tracee.Parent.Argv = append(e.PTrace.Tracee.Parent.Argv, str) + ev.PTrace.Tracee.Parent.Argv = append(ev.PTrace.Tracee.Parent.Argv, str) return nil case "ptrace.tracee.parent.argv0": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Argv0"} } - e.PTrace.Tracee.Parent.Argv0 = str + ev.PTrace.Tracee.Parent.Argv0 = str return nil case "ptrace.tracee.parent.cap_effective": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.CapEffective"} } - e.PTrace.Tracee.Parent.Credentials.CapEffective = uint64(v) + ev.PTrace.Tracee.Parent.Credentials.CapEffective = uint64(v) return nil case "ptrace.tracee.parent.cap_permitted": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.CapPermitted"} } - e.PTrace.Tracee.Parent.Credentials.CapPermitted = uint64(v) + ev.PTrace.Tracee.Parent.Credentials.CapPermitted = uint64(v) return nil case "ptrace.tracee.parent.comm": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Comm"} } - e.PTrace.Tracee.Parent.Comm = str + ev.PTrace.Tracee.Parent.Comm = str return nil case "ptrace.tracee.parent.container.id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.ContainerID"} } - e.PTrace.Tracee.Parent.ContainerID = str + ev.PTrace.Tracee.Parent.ContainerID = str return nil case "ptrace.tracee.parent.cookie": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Cookie"} } - e.PTrace.Tracee.Parent.Cookie = uint32(v) + ev.PTrace.Tracee.Parent.Cookie = uint32(v) return nil case "ptrace.tracee.parent.created_at": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.CreatedAt"} } - e.PTrace.Tracee.Parent.CreatedAt = uint64(v) + ev.PTrace.Tracee.Parent.CreatedAt = uint64(v) return nil case "ptrace.tracee.parent.egid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.EGID"} } - e.PTrace.Tracee.Parent.Credentials.EGID = uint32(v) + ev.PTrace.Tracee.Parent.Credentials.EGID = uint32(v) return nil case "ptrace.tracee.parent.egroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.EGroup"} } - e.PTrace.Tracee.Parent.Credentials.EGroup = str + ev.PTrace.Tracee.Parent.Credentials.EGroup = str return nil case "ptrace.tracee.parent.envp": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Envp"} } - e.PTrace.Tracee.Parent.Envp = append(e.PTrace.Tracee.Parent.Envp, str) + ev.PTrace.Tracee.Parent.Envp = append(ev.PTrace.Tracee.Parent.Envp, str) return nil case "ptrace.tracee.parent.envs": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Envs"} } - e.PTrace.Tracee.Parent.Envs = append(e.PTrace.Tracee.Parent.Envs, str) + ev.PTrace.Tracee.Parent.Envs = append(ev.PTrace.Tracee.Parent.Envs, str) return nil case "ptrace.tracee.parent.envs_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } var ok bool - if e.PTrace.Tracee.Parent.EnvsTruncated, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Parent.EnvsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.EnvsTruncated"} } return nil case "ptrace.tracee.parent.euid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.EUID"} } - e.PTrace.Tracee.Parent.Credentials.EUID = uint32(v) + ev.PTrace.Tracee.Parent.Credentials.EUID = uint32(v) return nil case "ptrace.tracee.parent.euser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.EUser"} } - e.PTrace.Tracee.Parent.Credentials.EUser = str + ev.PTrace.Tracee.Parent.Credentials.EUser = str return nil case "ptrace.tracee.parent.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.CTime"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.CTime = uint64(v) + ev.PTrace.Tracee.Parent.FileEvent.FileFields.CTime = uint64(v) return nil case "ptrace.tracee.parent.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.Filesystem"} } - e.PTrace.Tracee.Parent.FileEvent.Filesystem = str + ev.PTrace.Tracee.Parent.FileEvent.Filesystem = str return nil case "ptrace.tracee.parent.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.GID"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.GID = uint32(v) + ev.PTrace.Tracee.Parent.FileEvent.FileFields.GID = uint32(v) return nil case "ptrace.tracee.parent.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.Group"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.Group = str + ev.PTrace.Tracee.Parent.FileEvent.FileFields.Group = str return nil case "ptrace.tracee.parent.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } var ok bool - if e.PTrace.Tracee.Parent.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Parent.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.InUpperLayer"} } return nil case "ptrace.tracee.parent.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.Inode"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.Inode = uint64(v) + ev.PTrace.Tracee.Parent.FileEvent.FileFields.Inode = uint64(v) return nil case "ptrace.tracee.parent.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Parent.FileEvent.FileFields.Mode = uint16(v) return nil case "ptrace.tracee.parent.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.MTime"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.MTime = uint64(v) + ev.PTrace.Tracee.Parent.FileEvent.FileFields.MTime = uint64(v) return nil case "ptrace.tracee.parent.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.MountID"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.MountID = uint32(v) + ev.PTrace.Tracee.Parent.FileEvent.FileFields.MountID = uint32(v) return nil case "ptrace.tracee.parent.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.BasenameStr"} } - e.PTrace.Tracee.Parent.FileEvent.BasenameStr = str + ev.PTrace.Tracee.Parent.FileEvent.BasenameStr = str return nil case "ptrace.tracee.parent.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.parent.file.name.length"} case "ptrace.tracee.parent.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.PathnameStr"} } - e.PTrace.Tracee.Parent.FileEvent.PathnameStr = str + ev.PTrace.Tracee.Parent.FileEvent.PathnameStr = str return nil case "ptrace.tracee.parent.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.parent.file.path.length"} case "ptrace.tracee.parent.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Parent.FileEvent.FileFields.Mode = uint16(v) return nil case "ptrace.tracee.parent.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.UID"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.UID = uint32(v) + ev.PTrace.Tracee.Parent.FileEvent.FileFields.UID = uint32(v) return nil case "ptrace.tracee.parent.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.User"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.User = str + ev.PTrace.Tracee.Parent.FileEvent.FileFields.User = str return nil case "ptrace.tracee.parent.fsgid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.FSGID"} } - e.PTrace.Tracee.Parent.Credentials.FSGID = uint32(v) + ev.PTrace.Tracee.Parent.Credentials.FSGID = uint32(v) return nil case "ptrace.tracee.parent.fsgroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.FSGroup"} } - e.PTrace.Tracee.Parent.Credentials.FSGroup = str + ev.PTrace.Tracee.Parent.Credentials.FSGroup = str return nil case "ptrace.tracee.parent.fsuid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.FSUID"} } - e.PTrace.Tracee.Parent.Credentials.FSUID = uint32(v) + ev.PTrace.Tracee.Parent.Credentials.FSUID = uint32(v) return nil case "ptrace.tracee.parent.fsuser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.FSUser"} } - e.PTrace.Tracee.Parent.Credentials.FSUser = str + ev.PTrace.Tracee.Parent.Credentials.FSUser = str return nil case "ptrace.tracee.parent.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.GID"} } - e.PTrace.Tracee.Parent.Credentials.GID = uint32(v) + ev.PTrace.Tracee.Parent.Credentials.GID = uint32(v) return nil case "ptrace.tracee.parent.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.Group"} } - e.PTrace.Tracee.Parent.Credentials.Group = str + ev.PTrace.Tracee.Parent.Credentials.Group = str return nil case "ptrace.tracee.parent.interpreter.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) return nil case "ptrace.tracee.parent.interpreter.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.Filesystem"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.Filesystem = str + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.Filesystem = str return nil case "ptrace.tracee.parent.interpreter.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) return nil case "ptrace.tracee.parent.interpreter.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Group"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Group = str + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Group = str return nil case "ptrace.tracee.parent.interpreter.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } var ok bool - if e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } return nil case "ptrace.tracee.parent.interpreter.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) return nil case "ptrace.tracee.parent.interpreter.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "ptrace.tracee.parent.interpreter.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) return nil case "ptrace.tracee.parent.interpreter.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) return nil case "ptrace.tracee.parent.interpreter.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.BasenameStr"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.BasenameStr = str + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.BasenameStr = str return nil case "ptrace.tracee.parent.interpreter.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.parent.interpreter.file.name.length"} case "ptrace.tracee.parent.interpreter.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.PathnameStr"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.PathnameStr = str + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.PathnameStr = str return nil case "ptrace.tracee.parent.interpreter.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.parent.interpreter.file.path.length"} case "ptrace.tracee.parent.interpreter.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "ptrace.tracee.parent.interpreter.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) return nil case "ptrace.tracee.parent.interpreter.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.User"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.User = str + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.User = str return nil case "ptrace.tracee.parent.is_kworker": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } var ok bool - if e.PTrace.Tracee.Parent.PIDContext.IsKworker, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Parent.PIDContext.IsKworker, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.PIDContext.IsKworker"} } return nil case "ptrace.tracee.parent.is_thread": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } var ok bool - if e.PTrace.Tracee.Parent.IsThread, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Parent.IsThread, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.IsThread"} } return nil case "ptrace.tracee.parent.pid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.PIDContext.Pid"} } - e.PTrace.Tracee.Parent.PIDContext.Pid = uint32(v) + ev.PTrace.Tracee.Parent.PIDContext.Pid = uint32(v) return nil case "ptrace.tracee.parent.ppid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.PPid"} } - e.PTrace.Tracee.Parent.PPid = uint32(v) + ev.PTrace.Tracee.Parent.PPid = uint32(v) return nil case "ptrace.tracee.parent.tid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.PIDContext.Tid"} } - e.PTrace.Tracee.Parent.PIDContext.Tid = uint32(v) + ev.PTrace.Tracee.Parent.PIDContext.Tid = uint32(v) return nil case "ptrace.tracee.parent.tty_name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.TTYName"} } - e.PTrace.Tracee.Parent.TTYName = str + ev.PTrace.Tracee.Parent.TTYName = str return nil case "ptrace.tracee.parent.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.UID"} } - e.PTrace.Tracee.Parent.Credentials.UID = uint32(v) + ev.PTrace.Tracee.Parent.Credentials.UID = uint32(v) return nil case "ptrace.tracee.parent.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.User"} } - e.PTrace.Tracee.Parent.Credentials.User = str + ev.PTrace.Tracee.Parent.Credentials.User = str return nil case "ptrace.tracee.pid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.PIDContext.Pid"} } - e.PTrace.Tracee.Process.PIDContext.Pid = uint32(v) + ev.PTrace.Tracee.Process.PIDContext.Pid = uint32(v) return nil case "ptrace.tracee.ppid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.PPid"} } - e.PTrace.Tracee.Process.PPid = uint32(v) + ev.PTrace.Tracee.Process.PPid = uint32(v) return nil case "ptrace.tracee.tid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.PIDContext.Tid"} } - e.PTrace.Tracee.Process.PIDContext.Tid = uint32(v) + ev.PTrace.Tracee.Process.PIDContext.Tid = uint32(v) return nil case "ptrace.tracee.tty_name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.TTYName"} } - e.PTrace.Tracee.Process.TTYName = str + ev.PTrace.Tracee.Process.TTYName = str return nil case "ptrace.tracee.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.UID"} } - e.PTrace.Tracee.Process.Credentials.UID = uint32(v) + ev.PTrace.Tracee.Process.Credentials.UID = uint32(v) return nil case "ptrace.tracee.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.User"} } - e.PTrace.Tracee.Process.Credentials.User = str + ev.PTrace.Tracee.Process.Credentials.User = str return nil case "removexattr.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.CTime"} } - e.RemoveXAttr.File.FileFields.CTime = uint64(v) + ev.RemoveXAttr.File.FileFields.CTime = uint64(v) return nil case "removexattr.file.destination.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.Name"} } - e.RemoveXAttr.Name = str + ev.RemoveXAttr.Name = str return nil case "removexattr.file.destination.namespace": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.Namespace"} } - e.RemoveXAttr.Namespace = str + ev.RemoveXAttr.Namespace = str return nil case "removexattr.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.Filesystem"} } - e.RemoveXAttr.File.Filesystem = str + ev.RemoveXAttr.File.Filesystem = str return nil case "removexattr.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.GID"} } - e.RemoveXAttr.File.FileFields.GID = uint32(v) + ev.RemoveXAttr.File.FileFields.GID = uint32(v) return nil case "removexattr.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.Group"} } - e.RemoveXAttr.File.FileFields.Group = str + ev.RemoveXAttr.File.FileFields.Group = str return nil case "removexattr.file.in_upper_layer": var ok bool - if e.RemoveXAttr.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.RemoveXAttr.File.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.InUpperLayer"} } return nil @@ -28563,35 +30694,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.Inode"} } - e.RemoveXAttr.File.FileFields.Inode = uint64(v) + ev.RemoveXAttr.File.FileFields.Inode = uint64(v) return nil case "removexattr.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.Mode"} } - e.RemoveXAttr.File.FileFields.Mode = uint16(v) + ev.RemoveXAttr.File.FileFields.Mode = uint16(v) return nil case "removexattr.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.MTime"} } - e.RemoveXAttr.File.FileFields.MTime = uint64(v) + ev.RemoveXAttr.File.FileFields.MTime = uint64(v) return nil case "removexattr.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.MountID"} } - e.RemoveXAttr.File.FileFields.MountID = uint32(v) + ev.RemoveXAttr.File.FileFields.MountID = uint32(v) return nil case "removexattr.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.BasenameStr"} } - e.RemoveXAttr.File.BasenameStr = str + ev.RemoveXAttr.File.BasenameStr = str return nil case "removexattr.file.name.length": return &eval.ErrFieldReadOnly{Field: "removexattr.file.name.length"} @@ -28600,7 +30731,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.PathnameStr"} } - e.RemoveXAttr.File.PathnameStr = str + ev.RemoveXAttr.File.PathnameStr = str return nil case "removexattr.file.path.length": return &eval.ErrFieldReadOnly{Field: "removexattr.file.path.length"} @@ -28609,67 +30740,67 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.Mode"} } - e.RemoveXAttr.File.FileFields.Mode = uint16(v) + ev.RemoveXAttr.File.FileFields.Mode = uint16(v) return nil case "removexattr.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.UID"} } - e.RemoveXAttr.File.FileFields.UID = uint32(v) + ev.RemoveXAttr.File.FileFields.UID = uint32(v) return nil case "removexattr.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.User"} } - e.RemoveXAttr.File.FileFields.User = str + ev.RemoveXAttr.File.FileFields.User = str return nil case "removexattr.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.SyscallEvent.Retval"} } - e.RemoveXAttr.SyscallEvent.Retval = int64(v) + ev.RemoveXAttr.SyscallEvent.Retval = int64(v) return nil case "rename.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.CTime"} } - e.Rename.Old.FileFields.CTime = uint64(v) + ev.Rename.Old.FileFields.CTime = uint64(v) return nil case "rename.file.destination.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.CTime"} } - e.Rename.New.FileFields.CTime = uint64(v) + ev.Rename.New.FileFields.CTime = uint64(v) return nil case "rename.file.destination.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.Filesystem"} } - e.Rename.New.Filesystem = str + ev.Rename.New.Filesystem = str return nil case "rename.file.destination.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.GID"} } - e.Rename.New.FileFields.GID = uint32(v) + ev.Rename.New.FileFields.GID = uint32(v) return nil case "rename.file.destination.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.Group"} } - e.Rename.New.FileFields.Group = str + ev.Rename.New.FileFields.Group = str return nil case "rename.file.destination.in_upper_layer": var ok bool - if e.Rename.New.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Rename.New.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.InUpperLayer"} } return nil @@ -28678,35 +30809,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.Inode"} } - e.Rename.New.FileFields.Inode = uint64(v) + ev.Rename.New.FileFields.Inode = uint64(v) return nil case "rename.file.destination.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.Mode"} } - e.Rename.New.FileFields.Mode = uint16(v) + ev.Rename.New.FileFields.Mode = uint16(v) return nil case "rename.file.destination.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.MTime"} } - e.Rename.New.FileFields.MTime = uint64(v) + ev.Rename.New.FileFields.MTime = uint64(v) return nil case "rename.file.destination.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.MountID"} } - e.Rename.New.FileFields.MountID = uint32(v) + ev.Rename.New.FileFields.MountID = uint32(v) return nil case "rename.file.destination.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.BasenameStr"} } - e.Rename.New.BasenameStr = str + ev.Rename.New.BasenameStr = str return nil case "rename.file.destination.name.length": return &eval.ErrFieldReadOnly{Field: "rename.file.destination.name.length"} @@ -28715,7 +30846,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.PathnameStr"} } - e.Rename.New.PathnameStr = str + ev.Rename.New.PathnameStr = str return nil case "rename.file.destination.path.length": return &eval.ErrFieldReadOnly{Field: "rename.file.destination.path.length"} @@ -28724,46 +30855,46 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.Mode"} } - e.Rename.New.FileFields.Mode = uint16(v) + ev.Rename.New.FileFields.Mode = uint16(v) return nil case "rename.file.destination.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.UID"} } - e.Rename.New.FileFields.UID = uint32(v) + ev.Rename.New.FileFields.UID = uint32(v) return nil case "rename.file.destination.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.User"} } - e.Rename.New.FileFields.User = str + ev.Rename.New.FileFields.User = str return nil case "rename.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.Filesystem"} } - e.Rename.Old.Filesystem = str + ev.Rename.Old.Filesystem = str return nil case "rename.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.GID"} } - e.Rename.Old.FileFields.GID = uint32(v) + ev.Rename.Old.FileFields.GID = uint32(v) return nil case "rename.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.Group"} } - e.Rename.Old.FileFields.Group = str + ev.Rename.Old.FileFields.Group = str return nil case "rename.file.in_upper_layer": var ok bool - if e.Rename.Old.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Rename.Old.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.InUpperLayer"} } return nil @@ -28772,35 +30903,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.Inode"} } - e.Rename.Old.FileFields.Inode = uint64(v) + ev.Rename.Old.FileFields.Inode = uint64(v) return nil case "rename.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.Mode"} } - e.Rename.Old.FileFields.Mode = uint16(v) + ev.Rename.Old.FileFields.Mode = uint16(v) return nil case "rename.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.MTime"} } - e.Rename.Old.FileFields.MTime = uint64(v) + ev.Rename.Old.FileFields.MTime = uint64(v) return nil case "rename.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.MountID"} } - e.Rename.Old.FileFields.MountID = uint32(v) + ev.Rename.Old.FileFields.MountID = uint32(v) return nil case "rename.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.BasenameStr"} } - e.Rename.Old.BasenameStr = str + ev.Rename.Old.BasenameStr = str return nil case "rename.file.name.length": return &eval.ErrFieldReadOnly{Field: "rename.file.name.length"} @@ -28809,7 +30940,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.PathnameStr"} } - e.Rename.Old.PathnameStr = str + ev.Rename.Old.PathnameStr = str return nil case "rename.file.path.length": return &eval.ErrFieldReadOnly{Field: "rename.file.path.length"} @@ -28818,60 +30949,60 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.Mode"} } - e.Rename.Old.FileFields.Mode = uint16(v) + ev.Rename.Old.FileFields.Mode = uint16(v) return nil case "rename.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.UID"} } - e.Rename.Old.FileFields.UID = uint32(v) + ev.Rename.Old.FileFields.UID = uint32(v) return nil case "rename.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.User"} } - e.Rename.Old.FileFields.User = str + ev.Rename.Old.FileFields.User = str return nil case "rename.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.SyscallEvent.Retval"} } - e.Rename.SyscallEvent.Retval = int64(v) + ev.Rename.SyscallEvent.Retval = int64(v) return nil case "rmdir.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.CTime"} } - e.Rmdir.File.FileFields.CTime = uint64(v) + ev.Rmdir.File.FileFields.CTime = uint64(v) return nil case "rmdir.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.Filesystem"} } - e.Rmdir.File.Filesystem = str + ev.Rmdir.File.Filesystem = str return nil case "rmdir.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.GID"} } - e.Rmdir.File.FileFields.GID = uint32(v) + ev.Rmdir.File.FileFields.GID = uint32(v) return nil case "rmdir.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.Group"} } - e.Rmdir.File.FileFields.Group = str + ev.Rmdir.File.FileFields.Group = str return nil case "rmdir.file.in_upper_layer": var ok bool - if e.Rmdir.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Rmdir.File.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.InUpperLayer"} } return nil @@ -28880,35 +31011,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.Inode"} } - e.Rmdir.File.FileFields.Inode = uint64(v) + ev.Rmdir.File.FileFields.Inode = uint64(v) return nil case "rmdir.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.Mode"} } - e.Rmdir.File.FileFields.Mode = uint16(v) + ev.Rmdir.File.FileFields.Mode = uint16(v) return nil case "rmdir.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.MTime"} } - e.Rmdir.File.FileFields.MTime = uint64(v) + ev.Rmdir.File.FileFields.MTime = uint64(v) return nil case "rmdir.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.MountID"} } - e.Rmdir.File.FileFields.MountID = uint32(v) + ev.Rmdir.File.FileFields.MountID = uint32(v) return nil case "rmdir.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.BasenameStr"} } - e.Rmdir.File.BasenameStr = str + ev.Rmdir.File.BasenameStr = str return nil case "rmdir.file.name.length": return &eval.ErrFieldReadOnly{Field: "rmdir.file.name.length"} @@ -28917,7 +31048,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.PathnameStr"} } - e.Rmdir.File.PathnameStr = str + ev.Rmdir.File.PathnameStr = str return nil case "rmdir.file.path.length": return &eval.ErrFieldReadOnly{Field: "rmdir.file.path.length"} @@ -28926,46 +31057,46 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.Mode"} } - e.Rmdir.File.FileFields.Mode = uint16(v) + ev.Rmdir.File.FileFields.Mode = uint16(v) return nil case "rmdir.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.UID"} } - e.Rmdir.File.FileFields.UID = uint32(v) + ev.Rmdir.File.FileFields.UID = uint32(v) return nil case "rmdir.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.User"} } - e.Rmdir.File.FileFields.User = str + ev.Rmdir.File.FileFields.User = str return nil case "rmdir.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.SyscallEvent.Retval"} } - e.Rmdir.SyscallEvent.Retval = int64(v) + ev.Rmdir.SyscallEvent.Retval = int64(v) return nil case "selinux.bool.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SELinux.BoolName"} } - e.SELinux.BoolName = str + ev.SELinux.BoolName = str return nil case "selinux.bool.state": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SELinux.BoolChangeValue"} } - e.SELinux.BoolChangeValue = str + ev.SELinux.BoolChangeValue = str return nil case "selinux.bool_commit.state": var ok bool - if e.SELinux.BoolCommitValue, ok = value.(bool); !ok { + if ev.SELinux.BoolCommitValue, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "SELinux.BoolCommitValue"} } return nil @@ -28974,137 +31105,137 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "SELinux.EnforceStatus"} } - e.SELinux.EnforceStatus = str + ev.SELinux.EnforceStatus = str return nil case "setgid.egid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetGID.EGID"} } - e.SetGID.EGID = uint32(v) + ev.SetGID.EGID = uint32(v) return nil case "setgid.egroup": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetGID.EGroup"} } - e.SetGID.EGroup = str + ev.SetGID.EGroup = str return nil case "setgid.fsgid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetGID.FSGID"} } - e.SetGID.FSGID = uint32(v) + ev.SetGID.FSGID = uint32(v) return nil case "setgid.fsgroup": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetGID.FSGroup"} } - e.SetGID.FSGroup = str + ev.SetGID.FSGroup = str return nil case "setgid.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetGID.GID"} } - e.SetGID.GID = uint32(v) + ev.SetGID.GID = uint32(v) return nil case "setgid.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetGID.Group"} } - e.SetGID.Group = str + ev.SetGID.Group = str return nil case "setuid.euid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetUID.EUID"} } - e.SetUID.EUID = uint32(v) + ev.SetUID.EUID = uint32(v) return nil case "setuid.euser": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetUID.EUser"} } - e.SetUID.EUser = str + ev.SetUID.EUser = str return nil case "setuid.fsuid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetUID.FSUID"} } - e.SetUID.FSUID = uint32(v) + ev.SetUID.FSUID = uint32(v) return nil case "setuid.fsuser": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetUID.FSUser"} } - e.SetUID.FSUser = str + ev.SetUID.FSUser = str return nil case "setuid.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetUID.UID"} } - e.SetUID.UID = uint32(v) + ev.SetUID.UID = uint32(v) return nil case "setuid.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetUID.User"} } - e.SetUID.User = str + ev.SetUID.User = str return nil case "setxattr.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.CTime"} } - e.SetXAttr.File.FileFields.CTime = uint64(v) + ev.SetXAttr.File.FileFields.CTime = uint64(v) return nil case "setxattr.file.destination.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.Name"} } - e.SetXAttr.Name = str + ev.SetXAttr.Name = str return nil case "setxattr.file.destination.namespace": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.Namespace"} } - e.SetXAttr.Namespace = str + ev.SetXAttr.Namespace = str return nil case "setxattr.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.Filesystem"} } - e.SetXAttr.File.Filesystem = str + ev.SetXAttr.File.Filesystem = str return nil case "setxattr.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.GID"} } - e.SetXAttr.File.FileFields.GID = uint32(v) + ev.SetXAttr.File.FileFields.GID = uint32(v) return nil case "setxattr.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.Group"} } - e.SetXAttr.File.FileFields.Group = str + ev.SetXAttr.File.FileFields.Group = str return nil case "setxattr.file.in_upper_layer": var ok bool - if e.SetXAttr.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.SetXAttr.File.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.InUpperLayer"} } return nil @@ -29113,35 +31244,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.Inode"} } - e.SetXAttr.File.FileFields.Inode = uint64(v) + ev.SetXAttr.File.FileFields.Inode = uint64(v) return nil case "setxattr.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.Mode"} } - e.SetXAttr.File.FileFields.Mode = uint16(v) + ev.SetXAttr.File.FileFields.Mode = uint16(v) return nil case "setxattr.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.MTime"} } - e.SetXAttr.File.FileFields.MTime = uint64(v) + ev.SetXAttr.File.FileFields.MTime = uint64(v) return nil case "setxattr.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.MountID"} } - e.SetXAttr.File.FileFields.MountID = uint32(v) + ev.SetXAttr.File.FileFields.MountID = uint32(v) return nil case "setxattr.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.BasenameStr"} } - e.SetXAttr.File.BasenameStr = str + ev.SetXAttr.File.BasenameStr = str return nil case "setxattr.file.name.length": return &eval.ErrFieldReadOnly{Field: "setxattr.file.name.length"} @@ -29150,7 +31281,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.PathnameStr"} } - e.SetXAttr.File.PathnameStr = str + ev.SetXAttr.File.PathnameStr = str return nil case "setxattr.file.path.length": return &eval.ErrFieldReadOnly{Field: "setxattr.file.path.length"} @@ -29159,2343 +31290,2343 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.Mode"} } - e.SetXAttr.File.FileFields.Mode = uint16(v) + ev.SetXAttr.File.FileFields.Mode = uint16(v) return nil case "setxattr.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.UID"} } - e.SetXAttr.File.FileFields.UID = uint32(v) + ev.SetXAttr.File.FileFields.UID = uint32(v) return nil case "setxattr.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.User"} } - e.SetXAttr.File.FileFields.User = str + ev.SetXAttr.File.FileFields.User = str return nil case "setxattr.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.SyscallEvent.Retval"} } - e.SetXAttr.SyscallEvent.Retval = int64(v) + ev.SetXAttr.SyscallEvent.Retval = int64(v) return nil case "signal.pid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.PID"} } - e.Signal.PID = uint32(v) + ev.Signal.PID = uint32(v) return nil case "signal.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.SyscallEvent.Retval"} } - e.Signal.SyscallEvent.Retval = int64(v) + ev.Signal.SyscallEvent.Retval = int64(v) return nil case "signal.target.ancestors.args": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Args"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Args = str + ev.Signal.Target.Ancestor.ProcessContext.Process.Args = str return nil case "signal.target.ancestors.args_flags": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Argv"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(e.Signal.Target.Ancestor.ProcessContext.Process.Argv, str) + ev.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(ev.Signal.Target.Ancestor.ProcessContext.Process.Argv, str) return nil case "signal.target.ancestors.args_options": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Argv"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(e.Signal.Target.Ancestor.ProcessContext.Process.Argv, str) + ev.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(ev.Signal.Target.Ancestor.ProcessContext.Process.Argv, str) return nil case "signal.target.ancestors.args_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { + if ev.Signal.Target.Ancestor.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.ArgsTruncated"} } return nil case "signal.target.ancestors.argv": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Argv"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(e.Signal.Target.Ancestor.ProcessContext.Process.Argv, str) + ev.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(ev.Signal.Target.Ancestor.ProcessContext.Process.Argv, str) return nil case "signal.target.ancestors.argv0": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Argv0"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Argv0 = str + ev.Signal.Target.Ancestor.ProcessContext.Process.Argv0 = str return nil case "signal.target.ancestors.cap_effective": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapEffective"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapEffective = uint64(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapEffective = uint64(v) return nil case "signal.target.ancestors.cap_permitted": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapPermitted"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapPermitted = uint64(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapPermitted = uint64(v) return nil case "signal.target.ancestors.comm": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Comm"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Comm = str + ev.Signal.Target.Ancestor.ProcessContext.Process.Comm = str return nil case "signal.target.ancestors.container.id": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.ContainerID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.ContainerID = str + ev.Signal.Target.Ancestor.ProcessContext.Process.ContainerID = str return nil case "signal.target.ancestors.cookie": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Cookie"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Cookie = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.Cookie = uint32(v) return nil case "signal.target.ancestors.created_at": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.CreatedAt"} } - e.Signal.Target.Ancestor.ProcessContext.Process.CreatedAt = uint64(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.CreatedAt = uint64(v) return nil case "signal.target.ancestors.egid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGID = uint32(v) return nil case "signal.target.ancestors.egroup": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGroup"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGroup = str + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGroup = str return nil case "signal.target.ancestors.envp": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Envp"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Envp = append(e.Signal.Target.Ancestor.ProcessContext.Process.Envp, str) + ev.Signal.Target.Ancestor.ProcessContext.Process.Envp = append(ev.Signal.Target.Ancestor.ProcessContext.Process.Envp, str) return nil case "signal.target.ancestors.envs": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Envs"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Envs = append(e.Signal.Target.Ancestor.ProcessContext.Process.Envs, str) + ev.Signal.Target.Ancestor.ProcessContext.Process.Envs = append(ev.Signal.Target.Ancestor.ProcessContext.Process.Envs, str) return nil case "signal.target.ancestors.envs_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { + if ev.Signal.Target.Ancestor.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.EnvsTruncated"} } return nil case "signal.target.ancestors.euid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUID = uint32(v) return nil case "signal.target.ancestors.euser": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUser"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUser = str + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUser = str return nil case "signal.target.ancestors.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) return nil case "signal.target.ancestors.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.Filesystem"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.Filesystem = str + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.Filesystem = str return nil case "signal.target.ancestors.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) return nil case "signal.target.ancestors.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group = str + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group = str return nil case "signal.target.ancestors.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer"} } return nil case "signal.target.ancestors.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) return nil case "signal.target.ancestors.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "signal.target.ancestors.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) return nil case "signal.target.ancestors.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) return nil case "signal.target.ancestors.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.BasenameStr"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.BasenameStr = str + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.BasenameStr = str return nil case "signal.target.ancestors.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "signal.target.ancestors.file.name.length"} case "signal.target.ancestors.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.PathnameStr"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.PathnameStr = str + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.PathnameStr = str return nil case "signal.target.ancestors.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "signal.target.ancestors.file.path.length"} case "signal.target.ancestors.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "signal.target.ancestors.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) return nil case "signal.target.ancestors.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.User"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.User = str + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.User = str return nil case "signal.target.ancestors.fsgid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGID = uint32(v) return nil case "signal.target.ancestors.fsgroup": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGroup"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGroup = str + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGroup = str return nil case "signal.target.ancestors.fsuid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUID = uint32(v) return nil case "signal.target.ancestors.fsuser": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUser"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUser = str + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUser = str return nil case "signal.target.ancestors.gid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.GID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.GID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.GID = uint32(v) return nil case "signal.target.ancestors.group": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.Group"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.Group = str + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.Group = str return nil case "signal.target.ancestors.interpreter.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) return nil case "signal.target.ancestors.interpreter.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str return nil case "signal.target.ancestors.interpreter.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) return nil case "signal.target.ancestors.interpreter.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str return nil case "signal.target.ancestors.interpreter.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } return nil case "signal.target.ancestors.interpreter.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) return nil case "signal.target.ancestors.interpreter.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "signal.target.ancestors.interpreter.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) return nil case "signal.target.ancestors.interpreter.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) return nil case "signal.target.ancestors.interpreter.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str return nil case "signal.target.ancestors.interpreter.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "signal.target.ancestors.interpreter.file.name.length"} case "signal.target.ancestors.interpreter.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str return nil case "signal.target.ancestors.interpreter.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "signal.target.ancestors.interpreter.file.path.length"} case "signal.target.ancestors.interpreter.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "signal.target.ancestors.interpreter.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) return nil case "signal.target.ancestors.interpreter.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str return nil case "signal.target.ancestors.is_kworker": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { + if ev.Signal.Target.Ancestor.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.PIDContext.IsKworker"} } return nil case "signal.target.ancestors.is_thread": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.IsThread, ok = value.(bool); !ok { + if ev.Signal.Target.Ancestor.ProcessContext.Process.IsThread, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.IsThread"} } return nil case "signal.target.ancestors.pid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Pid"} } - e.Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Pid = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Pid = uint32(v) return nil case "signal.target.ancestors.ppid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.PPid"} } - e.Signal.Target.Ancestor.ProcessContext.Process.PPid = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.PPid = uint32(v) return nil case "signal.target.ancestors.tid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Tid"} } - e.Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Tid = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Tid = uint32(v) return nil case "signal.target.ancestors.tty_name": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.TTYName"} } - e.Signal.Target.Ancestor.ProcessContext.Process.TTYName = str + ev.Signal.Target.Ancestor.ProcessContext.Process.TTYName = str return nil case "signal.target.ancestors.uid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.UID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.UID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.UID = uint32(v) return nil case "signal.target.ancestors.user": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.User"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.User = str + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.User = str return nil case "signal.target.args": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Args"} } - e.Signal.Target.Process.Args = str + ev.Signal.Target.Process.Args = str return nil case "signal.target.args_flags": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Argv"} } - e.Signal.Target.Process.Argv = append(e.Signal.Target.Process.Argv, str) + ev.Signal.Target.Process.Argv = append(ev.Signal.Target.Process.Argv, str) return nil case "signal.target.args_options": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Argv"} } - e.Signal.Target.Process.Argv = append(e.Signal.Target.Process.Argv, str) + ev.Signal.Target.Process.Argv = append(ev.Signal.Target.Process.Argv, str) return nil case "signal.target.args_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } var ok bool - if e.Signal.Target.Process.ArgsTruncated, ok = value.(bool); !ok { + if ev.Signal.Target.Process.ArgsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.ArgsTruncated"} } return nil case "signal.target.argv": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Argv"} } - e.Signal.Target.Process.Argv = append(e.Signal.Target.Process.Argv, str) + ev.Signal.Target.Process.Argv = append(ev.Signal.Target.Process.Argv, str) return nil case "signal.target.argv0": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Argv0"} } - e.Signal.Target.Process.Argv0 = str + ev.Signal.Target.Process.Argv0 = str return nil case "signal.target.cap_effective": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.CapEffective"} } - e.Signal.Target.Process.Credentials.CapEffective = uint64(v) + ev.Signal.Target.Process.Credentials.CapEffective = uint64(v) return nil case "signal.target.cap_permitted": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.CapPermitted"} } - e.Signal.Target.Process.Credentials.CapPermitted = uint64(v) + ev.Signal.Target.Process.Credentials.CapPermitted = uint64(v) return nil case "signal.target.comm": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Comm"} } - e.Signal.Target.Process.Comm = str + ev.Signal.Target.Process.Comm = str return nil case "signal.target.container.id": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.ContainerID"} } - e.Signal.Target.Process.ContainerID = str + ev.Signal.Target.Process.ContainerID = str return nil case "signal.target.cookie": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Cookie"} } - e.Signal.Target.Process.Cookie = uint32(v) + ev.Signal.Target.Process.Cookie = uint32(v) return nil case "signal.target.created_at": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.CreatedAt"} } - e.Signal.Target.Process.CreatedAt = uint64(v) + ev.Signal.Target.Process.CreatedAt = uint64(v) return nil case "signal.target.egid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.EGID"} } - e.Signal.Target.Process.Credentials.EGID = uint32(v) + ev.Signal.Target.Process.Credentials.EGID = uint32(v) return nil case "signal.target.egroup": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.EGroup"} } - e.Signal.Target.Process.Credentials.EGroup = str + ev.Signal.Target.Process.Credentials.EGroup = str return nil case "signal.target.envp": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Envp"} } - e.Signal.Target.Process.Envp = append(e.Signal.Target.Process.Envp, str) + ev.Signal.Target.Process.Envp = append(ev.Signal.Target.Process.Envp, str) return nil case "signal.target.envs": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Envs"} } - e.Signal.Target.Process.Envs = append(e.Signal.Target.Process.Envs, str) + ev.Signal.Target.Process.Envs = append(ev.Signal.Target.Process.Envs, str) return nil case "signal.target.envs_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } var ok bool - if e.Signal.Target.Process.EnvsTruncated, ok = value.(bool); !ok { + if ev.Signal.Target.Process.EnvsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.EnvsTruncated"} } return nil case "signal.target.euid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.EUID"} } - e.Signal.Target.Process.Credentials.EUID = uint32(v) + ev.Signal.Target.Process.Credentials.EUID = uint32(v) return nil case "signal.target.euser": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.EUser"} } - e.Signal.Target.Process.Credentials.EUser = str + ev.Signal.Target.Process.Credentials.EUser = str return nil case "signal.target.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.CTime"} } - e.Signal.Target.Process.FileEvent.FileFields.CTime = uint64(v) + ev.Signal.Target.Process.FileEvent.FileFields.CTime = uint64(v) return nil case "signal.target.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.Filesystem"} } - e.Signal.Target.Process.FileEvent.Filesystem = str + ev.Signal.Target.Process.FileEvent.Filesystem = str return nil case "signal.target.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.GID"} } - e.Signal.Target.Process.FileEvent.FileFields.GID = uint32(v) + ev.Signal.Target.Process.FileEvent.FileFields.GID = uint32(v) return nil case "signal.target.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.Group"} } - e.Signal.Target.Process.FileEvent.FileFields.Group = str + ev.Signal.Target.Process.FileEvent.FileFields.Group = str return nil case "signal.target.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } var ok bool - if e.Signal.Target.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Signal.Target.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.InUpperLayer"} } return nil case "signal.target.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.Inode"} } - e.Signal.Target.Process.FileEvent.FileFields.Inode = uint64(v) + ev.Signal.Target.Process.FileEvent.FileFields.Inode = uint64(v) return nil case "signal.target.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.Mode"} } - e.Signal.Target.Process.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "signal.target.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.MTime"} } - e.Signal.Target.Process.FileEvent.FileFields.MTime = uint64(v) + ev.Signal.Target.Process.FileEvent.FileFields.MTime = uint64(v) return nil case "signal.target.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.MountID"} } - e.Signal.Target.Process.FileEvent.FileFields.MountID = uint32(v) + ev.Signal.Target.Process.FileEvent.FileFields.MountID = uint32(v) return nil case "signal.target.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.BasenameStr"} } - e.Signal.Target.Process.FileEvent.BasenameStr = str + ev.Signal.Target.Process.FileEvent.BasenameStr = str return nil case "signal.target.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "signal.target.file.name.length"} case "signal.target.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.PathnameStr"} } - e.Signal.Target.Process.FileEvent.PathnameStr = str + ev.Signal.Target.Process.FileEvent.PathnameStr = str return nil case "signal.target.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "signal.target.file.path.length"} case "signal.target.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.Mode"} } - e.Signal.Target.Process.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "signal.target.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.UID"} } - e.Signal.Target.Process.FileEvent.FileFields.UID = uint32(v) + ev.Signal.Target.Process.FileEvent.FileFields.UID = uint32(v) return nil case "signal.target.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.User"} } - e.Signal.Target.Process.FileEvent.FileFields.User = str + ev.Signal.Target.Process.FileEvent.FileFields.User = str return nil case "signal.target.fsgid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.FSGID"} } - e.Signal.Target.Process.Credentials.FSGID = uint32(v) + ev.Signal.Target.Process.Credentials.FSGID = uint32(v) return nil case "signal.target.fsgroup": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.FSGroup"} } - e.Signal.Target.Process.Credentials.FSGroup = str + ev.Signal.Target.Process.Credentials.FSGroup = str return nil case "signal.target.fsuid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.FSUID"} } - e.Signal.Target.Process.Credentials.FSUID = uint32(v) + ev.Signal.Target.Process.Credentials.FSUID = uint32(v) return nil case "signal.target.fsuser": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.FSUser"} } - e.Signal.Target.Process.Credentials.FSUser = str + ev.Signal.Target.Process.Credentials.FSUser = str return nil case "signal.target.gid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.GID"} } - e.Signal.Target.Process.Credentials.GID = uint32(v) + ev.Signal.Target.Process.Credentials.GID = uint32(v) return nil case "signal.target.group": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.Group"} } - e.Signal.Target.Process.Credentials.Group = str + ev.Signal.Target.Process.Credentials.Group = str return nil case "signal.target.interpreter.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) return nil case "signal.target.interpreter.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.Filesystem"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.Filesystem = str + ev.Signal.Target.Process.LinuxBinprm.FileEvent.Filesystem = str return nil case "signal.target.interpreter.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) return nil case "signal.target.interpreter.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Group"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Group = str + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Group = str return nil case "signal.target.interpreter.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } var ok bool - if e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } return nil case "signal.target.interpreter.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) return nil case "signal.target.interpreter.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "signal.target.interpreter.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) return nil case "signal.target.interpreter.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) return nil case "signal.target.interpreter.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.BasenameStr"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.BasenameStr = str + ev.Signal.Target.Process.LinuxBinprm.FileEvent.BasenameStr = str return nil case "signal.target.interpreter.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "signal.target.interpreter.file.name.length"} case "signal.target.interpreter.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.PathnameStr"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.PathnameStr = str + ev.Signal.Target.Process.LinuxBinprm.FileEvent.PathnameStr = str return nil case "signal.target.interpreter.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "signal.target.interpreter.file.path.length"} case "signal.target.interpreter.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "signal.target.interpreter.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) return nil case "signal.target.interpreter.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.User"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.User = str + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.User = str return nil case "signal.target.is_kworker": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } var ok bool - if e.Signal.Target.Process.PIDContext.IsKworker, ok = value.(bool); !ok { + if ev.Signal.Target.Process.PIDContext.IsKworker, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.PIDContext.IsKworker"} } return nil case "signal.target.is_thread": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } var ok bool - if e.Signal.Target.Process.IsThread, ok = value.(bool); !ok { + if ev.Signal.Target.Process.IsThread, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.IsThread"} } return nil case "signal.target.parent.args": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Args"} } - e.Signal.Target.Parent.Args = str + ev.Signal.Target.Parent.Args = str return nil case "signal.target.parent.args_flags": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Argv"} } - e.Signal.Target.Parent.Argv = append(e.Signal.Target.Parent.Argv, str) + ev.Signal.Target.Parent.Argv = append(ev.Signal.Target.Parent.Argv, str) return nil case "signal.target.parent.args_options": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Argv"} } - e.Signal.Target.Parent.Argv = append(e.Signal.Target.Parent.Argv, str) + ev.Signal.Target.Parent.Argv = append(ev.Signal.Target.Parent.Argv, str) return nil case "signal.target.parent.args_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } var ok bool - if e.Signal.Target.Parent.ArgsTruncated, ok = value.(bool); !ok { + if ev.Signal.Target.Parent.ArgsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.ArgsTruncated"} } return nil case "signal.target.parent.argv": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Argv"} } - e.Signal.Target.Parent.Argv = append(e.Signal.Target.Parent.Argv, str) + ev.Signal.Target.Parent.Argv = append(ev.Signal.Target.Parent.Argv, str) return nil case "signal.target.parent.argv0": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Argv0"} } - e.Signal.Target.Parent.Argv0 = str + ev.Signal.Target.Parent.Argv0 = str return nil case "signal.target.parent.cap_effective": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.CapEffective"} } - e.Signal.Target.Parent.Credentials.CapEffective = uint64(v) + ev.Signal.Target.Parent.Credentials.CapEffective = uint64(v) return nil case "signal.target.parent.cap_permitted": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.CapPermitted"} } - e.Signal.Target.Parent.Credentials.CapPermitted = uint64(v) + ev.Signal.Target.Parent.Credentials.CapPermitted = uint64(v) return nil case "signal.target.parent.comm": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Comm"} } - e.Signal.Target.Parent.Comm = str + ev.Signal.Target.Parent.Comm = str return nil case "signal.target.parent.container.id": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.ContainerID"} } - e.Signal.Target.Parent.ContainerID = str + ev.Signal.Target.Parent.ContainerID = str return nil case "signal.target.parent.cookie": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Cookie"} } - e.Signal.Target.Parent.Cookie = uint32(v) + ev.Signal.Target.Parent.Cookie = uint32(v) return nil case "signal.target.parent.created_at": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.CreatedAt"} } - e.Signal.Target.Parent.CreatedAt = uint64(v) + ev.Signal.Target.Parent.CreatedAt = uint64(v) return nil case "signal.target.parent.egid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.EGID"} } - e.Signal.Target.Parent.Credentials.EGID = uint32(v) + ev.Signal.Target.Parent.Credentials.EGID = uint32(v) return nil case "signal.target.parent.egroup": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.EGroup"} } - e.Signal.Target.Parent.Credentials.EGroup = str + ev.Signal.Target.Parent.Credentials.EGroup = str return nil case "signal.target.parent.envp": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Envp"} } - e.Signal.Target.Parent.Envp = append(e.Signal.Target.Parent.Envp, str) + ev.Signal.Target.Parent.Envp = append(ev.Signal.Target.Parent.Envp, str) return nil case "signal.target.parent.envs": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Envs"} } - e.Signal.Target.Parent.Envs = append(e.Signal.Target.Parent.Envs, str) + ev.Signal.Target.Parent.Envs = append(ev.Signal.Target.Parent.Envs, str) return nil case "signal.target.parent.envs_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } var ok bool - if e.Signal.Target.Parent.EnvsTruncated, ok = value.(bool); !ok { + if ev.Signal.Target.Parent.EnvsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.EnvsTruncated"} } return nil case "signal.target.parent.euid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.EUID"} } - e.Signal.Target.Parent.Credentials.EUID = uint32(v) + ev.Signal.Target.Parent.Credentials.EUID = uint32(v) return nil case "signal.target.parent.euser": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.EUser"} } - e.Signal.Target.Parent.Credentials.EUser = str + ev.Signal.Target.Parent.Credentials.EUser = str return nil case "signal.target.parent.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.CTime"} } - e.Signal.Target.Parent.FileEvent.FileFields.CTime = uint64(v) + ev.Signal.Target.Parent.FileEvent.FileFields.CTime = uint64(v) return nil case "signal.target.parent.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.Filesystem"} } - e.Signal.Target.Parent.FileEvent.Filesystem = str + ev.Signal.Target.Parent.FileEvent.Filesystem = str return nil case "signal.target.parent.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.GID"} } - e.Signal.Target.Parent.FileEvent.FileFields.GID = uint32(v) + ev.Signal.Target.Parent.FileEvent.FileFields.GID = uint32(v) return nil case "signal.target.parent.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.Group"} } - e.Signal.Target.Parent.FileEvent.FileFields.Group = str + ev.Signal.Target.Parent.FileEvent.FileFields.Group = str return nil case "signal.target.parent.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } var ok bool - if e.Signal.Target.Parent.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Signal.Target.Parent.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.InUpperLayer"} } return nil case "signal.target.parent.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.Inode"} } - e.Signal.Target.Parent.FileEvent.FileFields.Inode = uint64(v) + ev.Signal.Target.Parent.FileEvent.FileFields.Inode = uint64(v) return nil case "signal.target.parent.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.Mode"} } - e.Signal.Target.Parent.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Parent.FileEvent.FileFields.Mode = uint16(v) return nil case "signal.target.parent.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.MTime"} } - e.Signal.Target.Parent.FileEvent.FileFields.MTime = uint64(v) + ev.Signal.Target.Parent.FileEvent.FileFields.MTime = uint64(v) return nil case "signal.target.parent.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.MountID"} } - e.Signal.Target.Parent.FileEvent.FileFields.MountID = uint32(v) + ev.Signal.Target.Parent.FileEvent.FileFields.MountID = uint32(v) return nil case "signal.target.parent.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.BasenameStr"} } - e.Signal.Target.Parent.FileEvent.BasenameStr = str + ev.Signal.Target.Parent.FileEvent.BasenameStr = str return nil case "signal.target.parent.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "signal.target.parent.file.name.length"} case "signal.target.parent.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.PathnameStr"} } - e.Signal.Target.Parent.FileEvent.PathnameStr = str + ev.Signal.Target.Parent.FileEvent.PathnameStr = str return nil case "signal.target.parent.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "signal.target.parent.file.path.length"} case "signal.target.parent.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.Mode"} } - e.Signal.Target.Parent.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Parent.FileEvent.FileFields.Mode = uint16(v) return nil case "signal.target.parent.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.UID"} } - e.Signal.Target.Parent.FileEvent.FileFields.UID = uint32(v) + ev.Signal.Target.Parent.FileEvent.FileFields.UID = uint32(v) return nil case "signal.target.parent.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.User"} } - e.Signal.Target.Parent.FileEvent.FileFields.User = str + ev.Signal.Target.Parent.FileEvent.FileFields.User = str return nil case "signal.target.parent.fsgid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.FSGID"} } - e.Signal.Target.Parent.Credentials.FSGID = uint32(v) + ev.Signal.Target.Parent.Credentials.FSGID = uint32(v) return nil case "signal.target.parent.fsgroup": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.FSGroup"} } - e.Signal.Target.Parent.Credentials.FSGroup = str + ev.Signal.Target.Parent.Credentials.FSGroup = str return nil case "signal.target.parent.fsuid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.FSUID"} } - e.Signal.Target.Parent.Credentials.FSUID = uint32(v) + ev.Signal.Target.Parent.Credentials.FSUID = uint32(v) return nil case "signal.target.parent.fsuser": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.FSUser"} } - e.Signal.Target.Parent.Credentials.FSUser = str + ev.Signal.Target.Parent.Credentials.FSUser = str return nil case "signal.target.parent.gid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.GID"} } - e.Signal.Target.Parent.Credentials.GID = uint32(v) + ev.Signal.Target.Parent.Credentials.GID = uint32(v) return nil case "signal.target.parent.group": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.Group"} } - e.Signal.Target.Parent.Credentials.Group = str + ev.Signal.Target.Parent.Credentials.Group = str return nil case "signal.target.parent.interpreter.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) return nil case "signal.target.parent.interpreter.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.Filesystem"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.Filesystem = str + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.Filesystem = str return nil case "signal.target.parent.interpreter.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) return nil case "signal.target.parent.interpreter.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Group"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Group = str + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Group = str return nil case "signal.target.parent.interpreter.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } var ok bool - if e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } return nil case "signal.target.parent.interpreter.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) return nil case "signal.target.parent.interpreter.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "signal.target.parent.interpreter.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) return nil case "signal.target.parent.interpreter.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) return nil case "signal.target.parent.interpreter.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.BasenameStr"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.BasenameStr = str + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.BasenameStr = str return nil case "signal.target.parent.interpreter.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "signal.target.parent.interpreter.file.name.length"} case "signal.target.parent.interpreter.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.PathnameStr"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.PathnameStr = str + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.PathnameStr = str return nil case "signal.target.parent.interpreter.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "signal.target.parent.interpreter.file.path.length"} case "signal.target.parent.interpreter.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "signal.target.parent.interpreter.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) return nil case "signal.target.parent.interpreter.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.User"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.User = str + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.User = str return nil case "signal.target.parent.is_kworker": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } var ok bool - if e.Signal.Target.Parent.PIDContext.IsKworker, ok = value.(bool); !ok { + if ev.Signal.Target.Parent.PIDContext.IsKworker, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.PIDContext.IsKworker"} } return nil case "signal.target.parent.is_thread": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } var ok bool - if e.Signal.Target.Parent.IsThread, ok = value.(bool); !ok { + if ev.Signal.Target.Parent.IsThread, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.IsThread"} } return nil case "signal.target.parent.pid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.PIDContext.Pid"} } - e.Signal.Target.Parent.PIDContext.Pid = uint32(v) + ev.Signal.Target.Parent.PIDContext.Pid = uint32(v) return nil case "signal.target.parent.ppid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.PPid"} } - e.Signal.Target.Parent.PPid = uint32(v) + ev.Signal.Target.Parent.PPid = uint32(v) return nil case "signal.target.parent.tid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.PIDContext.Tid"} } - e.Signal.Target.Parent.PIDContext.Tid = uint32(v) + ev.Signal.Target.Parent.PIDContext.Tid = uint32(v) return nil case "signal.target.parent.tty_name": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.TTYName"} } - e.Signal.Target.Parent.TTYName = str + ev.Signal.Target.Parent.TTYName = str return nil case "signal.target.parent.uid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.UID"} } - e.Signal.Target.Parent.Credentials.UID = uint32(v) + ev.Signal.Target.Parent.Credentials.UID = uint32(v) return nil case "signal.target.parent.user": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.User"} } - e.Signal.Target.Parent.Credentials.User = str + ev.Signal.Target.Parent.Credentials.User = str return nil case "signal.target.pid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.PIDContext.Pid"} } - e.Signal.Target.Process.PIDContext.Pid = uint32(v) + ev.Signal.Target.Process.PIDContext.Pid = uint32(v) return nil case "signal.target.ppid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.PPid"} } - e.Signal.Target.Process.PPid = uint32(v) + ev.Signal.Target.Process.PPid = uint32(v) return nil case "signal.target.tid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.PIDContext.Tid"} } - e.Signal.Target.Process.PIDContext.Tid = uint32(v) + ev.Signal.Target.Process.PIDContext.Tid = uint32(v) return nil case "signal.target.tty_name": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.TTYName"} } - e.Signal.Target.Process.TTYName = str + ev.Signal.Target.Process.TTYName = str return nil case "signal.target.uid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.UID"} } - e.Signal.Target.Process.Credentials.UID = uint32(v) + ev.Signal.Target.Process.Credentials.UID = uint32(v) return nil case "signal.target.user": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.User"} } - e.Signal.Target.Process.Credentials.User = str + ev.Signal.Target.Process.Credentials.User = str return nil case "signal.type": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Type"} } - e.Signal.Type = uint32(v) + ev.Signal.Type = uint32(v) return nil case "splice.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.CTime"} } - e.Splice.File.FileFields.CTime = uint64(v) + ev.Splice.File.FileFields.CTime = uint64(v) return nil case "splice.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.Filesystem"} } - e.Splice.File.Filesystem = str + ev.Splice.File.Filesystem = str return nil case "splice.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.GID"} } - e.Splice.File.FileFields.GID = uint32(v) + ev.Splice.File.FileFields.GID = uint32(v) return nil case "splice.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.Group"} } - e.Splice.File.FileFields.Group = str + ev.Splice.File.FileFields.Group = str return nil case "splice.file.in_upper_layer": var ok bool - if e.Splice.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Splice.File.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.InUpperLayer"} } return nil @@ -31504,35 +33635,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.Inode"} } - e.Splice.File.FileFields.Inode = uint64(v) + ev.Splice.File.FileFields.Inode = uint64(v) return nil case "splice.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.Mode"} } - e.Splice.File.FileFields.Mode = uint16(v) + ev.Splice.File.FileFields.Mode = uint16(v) return nil case "splice.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.MTime"} } - e.Splice.File.FileFields.MTime = uint64(v) + ev.Splice.File.FileFields.MTime = uint64(v) return nil case "splice.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.MountID"} } - e.Splice.File.FileFields.MountID = uint32(v) + ev.Splice.File.FileFields.MountID = uint32(v) return nil case "splice.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.BasenameStr"} } - e.Splice.File.BasenameStr = str + ev.Splice.File.BasenameStr = str return nil case "splice.file.name.length": return &eval.ErrFieldReadOnly{Field: "splice.file.name.length"} @@ -31541,7 +33672,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.PathnameStr"} } - e.Splice.File.PathnameStr = str + ev.Splice.File.PathnameStr = str return nil case "splice.file.path.length": return &eval.ErrFieldReadOnly{Field: "splice.file.path.length"} @@ -31550,74 +33681,74 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.Mode"} } - e.Splice.File.FileFields.Mode = uint16(v) + ev.Splice.File.FileFields.Mode = uint16(v) return nil case "splice.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.UID"} } - e.Splice.File.FileFields.UID = uint32(v) + ev.Splice.File.FileFields.UID = uint32(v) return nil case "splice.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.User"} } - e.Splice.File.FileFields.User = str + ev.Splice.File.FileFields.User = str return nil case "splice.pipe_entry_flag": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.PipeEntryFlag"} } - e.Splice.PipeEntryFlag = uint32(v) + ev.Splice.PipeEntryFlag = uint32(v) return nil case "splice.pipe_exit_flag": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.PipeExitFlag"} } - e.Splice.PipeExitFlag = uint32(v) + ev.Splice.PipeExitFlag = uint32(v) return nil case "splice.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.SyscallEvent.Retval"} } - e.Splice.SyscallEvent.Retval = int64(v) + ev.Splice.SyscallEvent.Retval = int64(v) return nil case "unlink.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.CTime"} } - e.Unlink.File.FileFields.CTime = uint64(v) + ev.Unlink.File.FileFields.CTime = uint64(v) return nil case "unlink.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.Filesystem"} } - e.Unlink.File.Filesystem = str + ev.Unlink.File.Filesystem = str return nil case "unlink.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.GID"} } - e.Unlink.File.FileFields.GID = uint32(v) + ev.Unlink.File.FileFields.GID = uint32(v) return nil case "unlink.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.Group"} } - e.Unlink.File.FileFields.Group = str + ev.Unlink.File.FileFields.Group = str return nil case "unlink.file.in_upper_layer": var ok bool - if e.Unlink.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Unlink.File.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.InUpperLayer"} } return nil @@ -31626,35 +33757,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.Inode"} } - e.Unlink.File.FileFields.Inode = uint64(v) + ev.Unlink.File.FileFields.Inode = uint64(v) return nil case "unlink.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.Mode"} } - e.Unlink.File.FileFields.Mode = uint16(v) + ev.Unlink.File.FileFields.Mode = uint16(v) return nil case "unlink.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.MTime"} } - e.Unlink.File.FileFields.MTime = uint64(v) + ev.Unlink.File.FileFields.MTime = uint64(v) return nil case "unlink.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.MountID"} } - e.Unlink.File.FileFields.MountID = uint32(v) + ev.Unlink.File.FileFields.MountID = uint32(v) return nil case "unlink.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.BasenameStr"} } - e.Unlink.File.BasenameStr = str + ev.Unlink.File.BasenameStr = str return nil case "unlink.file.name.length": return &eval.ErrFieldReadOnly{Field: "unlink.file.name.length"} @@ -31663,7 +33794,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.PathnameStr"} } - e.Unlink.File.PathnameStr = str + ev.Unlink.File.PathnameStr = str return nil case "unlink.file.path.length": return &eval.ErrFieldReadOnly{Field: "unlink.file.path.length"} @@ -31672,81 +33803,81 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.Mode"} } - e.Unlink.File.FileFields.Mode = uint16(v) + ev.Unlink.File.FileFields.Mode = uint16(v) return nil case "unlink.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.UID"} } - e.Unlink.File.FileFields.UID = uint32(v) + ev.Unlink.File.FileFields.UID = uint32(v) return nil case "unlink.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.User"} } - e.Unlink.File.FileFields.User = str + ev.Unlink.File.FileFields.User = str return nil case "unlink.flags": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.Flags"} } - e.Unlink.Flags = uint32(v) + ev.Unlink.Flags = uint32(v) return nil case "unlink.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.SyscallEvent.Retval"} } - e.Unlink.SyscallEvent.Retval = int64(v) + ev.Unlink.SyscallEvent.Retval = int64(v) return nil case "unload_module.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "UnloadModule.Name"} } - e.UnloadModule.Name = str + ev.UnloadModule.Name = str return nil case "unload_module.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "UnloadModule.SyscallEvent.Retval"} } - e.UnloadModule.SyscallEvent.Retval = int64(v) + ev.UnloadModule.SyscallEvent.Retval = int64(v) return nil case "utimes.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.CTime"} } - e.Utimes.File.FileFields.CTime = uint64(v) + ev.Utimes.File.FileFields.CTime = uint64(v) return nil case "utimes.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.Filesystem"} } - e.Utimes.File.Filesystem = str + ev.Utimes.File.Filesystem = str return nil case "utimes.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.GID"} } - e.Utimes.File.FileFields.GID = uint32(v) + ev.Utimes.File.FileFields.GID = uint32(v) return nil case "utimes.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.Group"} } - e.Utimes.File.FileFields.Group = str + ev.Utimes.File.FileFields.Group = str return nil case "utimes.file.in_upper_layer": var ok bool - if e.Utimes.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Utimes.File.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.InUpperLayer"} } return nil @@ -31755,35 +33886,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.Inode"} } - e.Utimes.File.FileFields.Inode = uint64(v) + ev.Utimes.File.FileFields.Inode = uint64(v) return nil case "utimes.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.Mode"} } - e.Utimes.File.FileFields.Mode = uint16(v) + ev.Utimes.File.FileFields.Mode = uint16(v) return nil case "utimes.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.MTime"} } - e.Utimes.File.FileFields.MTime = uint64(v) + ev.Utimes.File.FileFields.MTime = uint64(v) return nil case "utimes.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.MountID"} } - e.Utimes.File.FileFields.MountID = uint32(v) + ev.Utimes.File.FileFields.MountID = uint32(v) return nil case "utimes.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.BasenameStr"} } - e.Utimes.File.BasenameStr = str + ev.Utimes.File.BasenameStr = str return nil case "utimes.file.name.length": return &eval.ErrFieldReadOnly{Field: "utimes.file.name.length"} @@ -31792,7 +33923,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.PathnameStr"} } - e.Utimes.File.PathnameStr = str + ev.Utimes.File.PathnameStr = str return nil case "utimes.file.path.length": return &eval.ErrFieldReadOnly{Field: "utimes.file.path.length"} @@ -31801,28 +33932,28 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.Mode"} } - e.Utimes.File.FileFields.Mode = uint16(v) + ev.Utimes.File.FileFields.Mode = uint16(v) return nil case "utimes.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.UID"} } - e.Utimes.File.FileFields.UID = uint32(v) + ev.Utimes.File.FileFields.UID = uint32(v) return nil case "utimes.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.User"} } - e.Utimes.File.FileFields.User = str + ev.Utimes.File.FileFields.User = str return nil case "utimes.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.SyscallEvent.Retval"} } - e.Utimes.SyscallEvent.Retval = int64(v) + ev.Utimes.SyscallEvent.Retval = int64(v) return nil } return &eval.ErrFieldNotFound{Field: field} diff --git a/pkg/security/secl/model/field_handlers.go b/pkg/security/secl/model/field_handlers.go new file mode 100644 index 00000000000000..a047e177f59bbf --- /dev/null +++ b/pkg/security/secl/model/field_handlers.go @@ -0,0 +1,673 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. +// Code generated - DO NOT EDIT. +package model + +// ResolveFields resolves all the fields associate to the event type. Context fields are automatically resolved. +func (ev *Event) ResolveFields(forADs bool) { + // resolve context fields that are not related to any event type + _ = ev.FieldHandlers.ResolveContainerID(ev, &ev.ContainerContext) + if !forADs { + _ = ev.FieldHandlers.ResolveContainerTags(ev, &ev.ContainerContext) + } + _ = ev.FieldHandlers.ResolveNetworkDeviceIfName(ev, &ev.NetworkContext.Device) + _ = ev.FieldHandlers.ResolveProcessArgs(ev, &ev.ProcessContext.Process) + _ = ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &ev.ProcessContext.Process) + _ = ev.FieldHandlers.ResolveProcessArgv(ev, &ev.ProcessContext.Process) + _ = ev.FieldHandlers.ResolveProcessArgv0(ev, &ev.ProcessContext.Process) + _ = ev.FieldHandlers.ResolveProcessCreatedAt(ev, &ev.ProcessContext.Process) + _ = ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.ProcessContext.Process) + _ = ev.FieldHandlers.ResolveProcessEnvs(ev, &ev.ProcessContext.Process) + _ = ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &ev.ProcessContext.Process) + if ev.ProcessContext.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Process.FileEvent) + } + if ev.ProcessContext.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Process.FileEvent.FileFields) + } + if ev.ProcessContext.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Process.FileEvent.FileFields) + } + if ev.ProcessContext.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.FileEvent) + } + if ev.ProcessContext.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.FileEvent) + } + if ev.ProcessContext.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Process.FileEvent.FileFields) + } + if ev.ProcessContext.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent) + } + if ev.ProcessContext.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.ProcessContext.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.ProcessContext.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent) + } + if ev.ProcessContext.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent) + } + if ev.ProcessContext.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.ProcessContext.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgs(ev, ev.ProcessContext.Parent) + } + if ev.ProcessContext.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.ProcessContext.Parent) + } + if ev.ProcessContext.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgv(ev, ev.ProcessContext.Parent) + } + if ev.ProcessContext.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgv0(ev, ev.ProcessContext.Parent) + } + if ev.ProcessContext.HasParent() { + _ = ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.ProcessContext.Parent) + } + if ev.ProcessContext.HasParent() { + _ = ev.FieldHandlers.ResolveProcessEnvp(ev, ev.ProcessContext.Parent) + } + if ev.ProcessContext.HasParent() { + _ = ev.FieldHandlers.ResolveProcessEnvs(ev, ev.ProcessContext.Parent) + } + if ev.ProcessContext.HasParent() { + _ = ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.ProcessContext.Parent) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Parent.FileEvent) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Parent.FileEvent.FileFields) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Parent.FileEvent.FileFields) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.FileEvent) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.FileEvent) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Parent.FileEvent.FileFields) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) + } + // resolve event specific fields + switch ev.GetEventType().String() { + case "bind": + case "bpf": + case "capset": + case "chmod": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Chmod.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Chmod.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Chmod.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Chmod.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chmod.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Chmod.File) + case "chown": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Chown.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Chown.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Chown.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Chown.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chown.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Chown.File) + _ = ev.FieldHandlers.ResolveChownUID(ev, &ev.Chown) + _ = ev.FieldHandlers.ResolveChownGID(ev, &ev.Chown) + case "dns": + case "exec": + if ev.Exec.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exec.Process.FileEvent.FileFields) + } + if ev.Exec.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exec.Process.FileEvent.FileFields) + } + if ev.Exec.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exec.Process.FileEvent.FileFields) + } + if ev.Exec.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.FileEvent) + } + if ev.Exec.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.FileEvent) + } + if ev.Exec.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exec.Process.FileEvent) + } + if ev.Exec.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.Exec.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.Exec.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.Exec.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.LinuxBinprm.FileEvent) + } + if ev.Exec.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.LinuxBinprm.FileEvent) + } + if ev.Exec.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exec.Process.LinuxBinprm.FileEvent) + } + _ = ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.Exec.Process) + _ = ev.FieldHandlers.ResolveProcessArgv0(ev, ev.Exec.Process) + _ = ev.FieldHandlers.ResolveProcessArgs(ev, ev.Exec.Process) + _ = ev.FieldHandlers.ResolveProcessArgv(ev, ev.Exec.Process) + _ = ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.Exec.Process) + _ = ev.FieldHandlers.ResolveProcessEnvs(ev, ev.Exec.Process) + _ = ev.FieldHandlers.ResolveProcessEnvp(ev, ev.Exec.Process) + _ = ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.Exec.Process) + case "exit": + if ev.Exit.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exit.Process.FileEvent.FileFields) + } + if ev.Exit.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exit.Process.FileEvent.FileFields) + } + if ev.Exit.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exit.Process.FileEvent.FileFields) + } + if ev.Exit.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.FileEvent) + } + if ev.Exit.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.FileEvent) + } + if ev.Exit.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exit.Process.FileEvent) + } + if ev.Exit.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.Exit.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.Exit.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.Exit.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.LinuxBinprm.FileEvent) + } + if ev.Exit.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.LinuxBinprm.FileEvent) + } + if ev.Exit.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exit.Process.LinuxBinprm.FileEvent) + } + _ = ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.Exit.Process) + _ = ev.FieldHandlers.ResolveProcessArgv0(ev, ev.Exit.Process) + _ = ev.FieldHandlers.ResolveProcessArgs(ev, ev.Exit.Process) + _ = ev.FieldHandlers.ResolveProcessArgv(ev, ev.Exit.Process) + _ = ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.Exit.Process) + _ = ev.FieldHandlers.ResolveProcessEnvs(ev, ev.Exit.Process) + _ = ev.FieldHandlers.ResolveProcessEnvp(ev, ev.Exit.Process) + _ = ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.Exit.Process) + case "link": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Link.Source.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Link.Source.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Link.Source.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Source) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Source) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Link.Source) + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Link.Target.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Link.Target.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Link.Target.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Target) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Target) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Link.Target) + case "load_module": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.LoadModule.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.LoadModule.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.LoadModule.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.LoadModule.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.LoadModule.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.LoadModule.File) + case "mkdir": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Mkdir.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Mkdir.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Mkdir.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Mkdir.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Mkdir.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Mkdir.File) + case "mmap": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.MMap.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.MMap.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.MMap.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.MMap.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.MMap.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.MMap.File) + case "mount": + _ = ev.FieldHandlers.ResolveMountPointPath(ev, &ev.Mount) + _ = ev.FieldHandlers.ResolveMountSourcePath(ev, &ev.Mount) + case "mprotect": + case "open": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Open.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Open.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Open.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Open.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Open.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Open.File) + case "ptrace": + if ev.PTrace.Tracee.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields) + } + if ev.PTrace.Tracee.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields) + } + if ev.PTrace.Tracee.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields) + } + if ev.PTrace.Tracee.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.FileEvent) + } + if ev.PTrace.Tracee.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.FileEvent) + } + if ev.PTrace.Tracee.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Process.FileEvent) + } + if ev.PTrace.Tracee.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.PTrace.Tracee.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.PTrace.Tracee.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.PTrace.Tracee.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent) + } + if ev.PTrace.Tracee.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent) + } + if ev.PTrace.Tracee.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent) + } + _ = ev.FieldHandlers.ResolveProcessCreatedAt(ev, &ev.PTrace.Tracee.Process) + _ = ev.FieldHandlers.ResolveProcessArgv0(ev, &ev.PTrace.Tracee.Process) + _ = ev.FieldHandlers.ResolveProcessArgs(ev, &ev.PTrace.Tracee.Process) + _ = ev.FieldHandlers.ResolveProcessArgv(ev, &ev.PTrace.Tracee.Process) + _ = ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &ev.PTrace.Tracee.Process) + _ = ev.FieldHandlers.ResolveProcessEnvs(ev, &ev.PTrace.Tracee.Process) + _ = ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.PTrace.Tracee.Process) + _ = ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &ev.PTrace.Tracee.Process) + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.FileEvent) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.FileEvent) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Parent.FileEvent) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent) + } + if ev.PTrace.Tracee.HasParent() { + _ = ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.PTrace.Tracee.Parent) + } + if ev.PTrace.Tracee.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgv0(ev, ev.PTrace.Tracee.Parent) + } + if ev.PTrace.Tracee.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgs(ev, ev.PTrace.Tracee.Parent) + } + if ev.PTrace.Tracee.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgv(ev, ev.PTrace.Tracee.Parent) + } + if ev.PTrace.Tracee.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.PTrace.Tracee.Parent) + } + if ev.PTrace.Tracee.HasParent() { + _ = ev.FieldHandlers.ResolveProcessEnvs(ev, ev.PTrace.Tracee.Parent) + } + if ev.PTrace.Tracee.HasParent() { + _ = ev.FieldHandlers.ResolveProcessEnvp(ev, ev.PTrace.Tracee.Parent) + } + if ev.PTrace.Tracee.HasParent() { + _ = ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.PTrace.Tracee.Parent) + } + case "removexattr": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.RemoveXAttr.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.RemoveXAttr.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.RemoveXAttr.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.RemoveXAttr.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.RemoveXAttr.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.RemoveXAttr.File) + _ = ev.FieldHandlers.ResolveXAttrNamespace(ev, &ev.RemoveXAttr) + _ = ev.FieldHandlers.ResolveXAttrName(ev, &ev.RemoveXAttr) + case "rename": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Rename.Old.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Rename.Old.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Rename.Old.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.Old) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.Old) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Rename.Old) + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Rename.New.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Rename.New.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Rename.New.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.New) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.New) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Rename.New) + case "rmdir": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Rmdir.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Rmdir.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Rmdir.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Rmdir.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rmdir.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Rmdir.File) + case "selinux": + _ = ev.FieldHandlers.ResolveSELinuxBoolName(ev, &ev.SELinux) + case "setgid": + _ = ev.FieldHandlers.ResolveSetgidGroup(ev, &ev.SetGID) + _ = ev.FieldHandlers.ResolveSetgidEGroup(ev, &ev.SetGID) + _ = ev.FieldHandlers.ResolveSetgidFSGroup(ev, &ev.SetGID) + case "setuid": + _ = ev.FieldHandlers.ResolveSetuidUser(ev, &ev.SetUID) + _ = ev.FieldHandlers.ResolveSetuidEUser(ev, &ev.SetUID) + _ = ev.FieldHandlers.ResolveSetuidFSUser(ev, &ev.SetUID) + case "setxattr": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.SetXAttr.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.SetXAttr.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.SetXAttr.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.SetXAttr.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.SetXAttr.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.SetXAttr.File) + _ = ev.FieldHandlers.ResolveXAttrNamespace(ev, &ev.SetXAttr) + _ = ev.FieldHandlers.ResolveXAttrName(ev, &ev.SetXAttr) + case "signal": + if ev.Signal.Target.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Process.FileEvent.FileFields) + } + if ev.Signal.Target.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Process.FileEvent.FileFields) + } + if ev.Signal.Target.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Process.FileEvent.FileFields) + } + if ev.Signal.Target.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.FileEvent) + } + if ev.Signal.Target.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.FileEvent) + } + if ev.Signal.Target.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Process.FileEvent) + } + if ev.Signal.Target.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.Signal.Target.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.Signal.Target.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.Signal.Target.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent) + } + if ev.Signal.Target.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent) + } + if ev.Signal.Target.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent) + } + _ = ev.FieldHandlers.ResolveProcessCreatedAt(ev, &ev.Signal.Target.Process) + _ = ev.FieldHandlers.ResolveProcessArgv0(ev, &ev.Signal.Target.Process) + _ = ev.FieldHandlers.ResolveProcessArgs(ev, &ev.Signal.Target.Process) + _ = ev.FieldHandlers.ResolveProcessArgv(ev, &ev.Signal.Target.Process) + _ = ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &ev.Signal.Target.Process) + _ = ev.FieldHandlers.ResolveProcessEnvs(ev, &ev.Signal.Target.Process) + _ = ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.Signal.Target.Process) + _ = ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &ev.Signal.Target.Process) + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Parent.FileEvent.FileFields) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Parent.FileEvent.FileFields) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Parent.FileEvent.FileFields) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.FileEvent) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.FileEvent) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Parent.FileEvent) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent) + } + if ev.Signal.Target.HasParent() { + _ = ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.Signal.Target.Parent) + } + if ev.Signal.Target.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgv0(ev, ev.Signal.Target.Parent) + } + if ev.Signal.Target.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgs(ev, ev.Signal.Target.Parent) + } + if ev.Signal.Target.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgv(ev, ev.Signal.Target.Parent) + } + if ev.Signal.Target.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.Signal.Target.Parent) + } + if ev.Signal.Target.HasParent() { + _ = ev.FieldHandlers.ResolveProcessEnvs(ev, ev.Signal.Target.Parent) + } + if ev.Signal.Target.HasParent() { + _ = ev.FieldHandlers.ResolveProcessEnvp(ev, ev.Signal.Target.Parent) + } + if ev.Signal.Target.HasParent() { + _ = ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.Signal.Target.Parent) + } + case "splice": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Splice.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Splice.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Splice.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Splice.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Splice.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Splice.File) + case "unlink": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Unlink.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Unlink.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Unlink.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Unlink.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Unlink.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Unlink.File) + case "unload_module": + case "utimes": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Utimes.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Utimes.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Utimes.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Utimes.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Utimes.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Utimes.File) + } +} + +type FieldHandlers interface { + ResolveChownGID(ev *Event, e *ChownEvent) string + ResolveChownUID(ev *Event, e *ChownEvent) string + ResolveContainerID(ev *Event, e *ContainerContext) string + ResolveContainerTags(ev *Event, e *ContainerContext) []string + ResolveFileBasename(ev *Event, e *FileEvent) string + ResolveFileFieldsGroup(ev *Event, e *FileFields) string + ResolveFileFieldsInUpperLayer(ev *Event, e *FileFields) bool + ResolveFileFieldsUser(ev *Event, e *FileFields) string + ResolveFileFilesystem(ev *Event, e *FileEvent) string + ResolveFilePath(ev *Event, e *FileEvent) string + ResolveMountPointPath(ev *Event, e *MountEvent) string + ResolveMountSourcePath(ev *Event, e *MountEvent) string + ResolveNetworkDeviceIfName(ev *Event, e *NetworkDeviceContext) string + ResolveProcessArgs(ev *Event, e *Process) string + ResolveProcessArgsFlags(ev *Event, e *Process) []string + ResolveProcessArgsOptions(ev *Event, e *Process) []string + ResolveProcessArgsTruncated(ev *Event, e *Process) bool + ResolveProcessArgv(ev *Event, e *Process) []string + ResolveProcessArgv0(ev *Event, e *Process) string + ResolveProcessCreatedAt(ev *Event, e *Process) int + ResolveProcessEnvp(ev *Event, e *Process) []string + ResolveProcessEnvs(ev *Event, e *Process) []string + ResolveProcessEnvsTruncated(ev *Event, e *Process) bool + ResolveRights(ev *Event, e *FileFields) int + ResolveSELinuxBoolName(ev *Event, e *SELinuxEvent) string + ResolveSetgidEGroup(ev *Event, e *SetgidEvent) string + ResolveSetgidFSGroup(ev *Event, e *SetgidEvent) string + ResolveSetgidGroup(ev *Event, e *SetgidEvent) string + ResolveSetuidEUser(ev *Event, e *SetuidEvent) string + ResolveSetuidFSUser(ev *Event, e *SetuidEvent) string + ResolveSetuidUser(ev *Event, e *SetuidEvent) string + ResolveXAttrName(ev *Event, e *SetXAttrEvent) string + ResolveXAttrNamespace(ev *Event, e *SetXAttrEvent) string + // custom handlers not tied to any fields + ExtraFieldHandlers +} +type DefaultFieldHandlers struct{} + +func (dfh *DefaultFieldHandlers) ResolveChownGID(ev *Event, e *ChownEvent) string { return e.Group } +func (dfh *DefaultFieldHandlers) ResolveChownUID(ev *Event, e *ChownEvent) string { return e.User } +func (dfh *DefaultFieldHandlers) ResolveContainerID(ev *Event, e *ContainerContext) string { + return e.ID +} +func (dfh *DefaultFieldHandlers) ResolveContainerTags(ev *Event, e *ContainerContext) []string { + return e.Tags +} +func (dfh *DefaultFieldHandlers) ResolveFileBasename(ev *Event, e *FileEvent) string { + return e.BasenameStr +} +func (dfh *DefaultFieldHandlers) ResolveFileFieldsGroup(ev *Event, e *FileFields) string { + return e.Group +} +func (dfh *DefaultFieldHandlers) ResolveFileFieldsInUpperLayer(ev *Event, e *FileFields) bool { + return e.InUpperLayer +} +func (dfh *DefaultFieldHandlers) ResolveFileFieldsUser(ev *Event, e *FileFields) string { + return e.User +} +func (dfh *DefaultFieldHandlers) ResolveFileFilesystem(ev *Event, e *FileEvent) string { + return e.Filesystem +} +func (dfh *DefaultFieldHandlers) ResolveFilePath(ev *Event, e *FileEvent) string { + return e.PathnameStr +} +func (dfh *DefaultFieldHandlers) ResolveMountPointPath(ev *Event, e *MountEvent) string { + return e.MountPointPath +} +func (dfh *DefaultFieldHandlers) ResolveMountSourcePath(ev *Event, e *MountEvent) string { + return e.MountSourcePath +} +func (dfh *DefaultFieldHandlers) ResolveNetworkDeviceIfName(ev *Event, e *NetworkDeviceContext) string { + return e.IfName +} +func (dfh *DefaultFieldHandlers) ResolveProcessArgs(ev *Event, e *Process) string { return e.Args } +func (dfh *DefaultFieldHandlers) ResolveProcessArgsFlags(ev *Event, e *Process) []string { + return e.Argv +} +func (dfh *DefaultFieldHandlers) ResolveProcessArgsOptions(ev *Event, e *Process) []string { + return e.Argv +} +func (dfh *DefaultFieldHandlers) ResolveProcessArgsTruncated(ev *Event, e *Process) bool { + return e.ArgsTruncated +} +func (dfh *DefaultFieldHandlers) ResolveProcessArgv(ev *Event, e *Process) []string { return e.Argv } +func (dfh *DefaultFieldHandlers) ResolveProcessArgv0(ev *Event, e *Process) string { return e.Argv0 } +func (dfh *DefaultFieldHandlers) ResolveProcessCreatedAt(ev *Event, e *Process) int { + return int(e.CreatedAt) +} +func (dfh *DefaultFieldHandlers) ResolveProcessEnvp(ev *Event, e *Process) []string { return e.Envp } +func (dfh *DefaultFieldHandlers) ResolveProcessEnvs(ev *Event, e *Process) []string { return e.Envs } +func (dfh *DefaultFieldHandlers) ResolveProcessEnvsTruncated(ev *Event, e *Process) bool { + return e.EnvsTruncated +} +func (dfh *DefaultFieldHandlers) ResolveRights(ev *Event, e *FileFields) int { return int(e.Mode) } +func (dfh *DefaultFieldHandlers) ResolveSELinuxBoolName(ev *Event, e *SELinuxEvent) string { + return e.BoolName +} +func (dfh *DefaultFieldHandlers) ResolveSetgidEGroup(ev *Event, e *SetgidEvent) string { + return e.EGroup +} +func (dfh *DefaultFieldHandlers) ResolveSetgidFSGroup(ev *Event, e *SetgidEvent) string { + return e.FSGroup +} +func (dfh *DefaultFieldHandlers) ResolveSetgidGroup(ev *Event, e *SetgidEvent) string { return e.Group } +func (dfh *DefaultFieldHandlers) ResolveSetuidEUser(ev *Event, e *SetuidEvent) string { return e.EUser } +func (dfh *DefaultFieldHandlers) ResolveSetuidFSUser(ev *Event, e *SetuidEvent) string { + return e.FSUser +} +func (dfh *DefaultFieldHandlers) ResolveSetuidUser(ev *Event, e *SetuidEvent) string { return e.User } +func (dfh *DefaultFieldHandlers) ResolveXAttrName(ev *Event, e *SetXAttrEvent) string { return e.Name } +func (dfh *DefaultFieldHandlers) ResolveXAttrNamespace(ev *Event, e *SetXAttrEvent) string { + return e.Namespace +} diff --git a/pkg/security/secl/model/model.go b/pkg/security/secl/model/model.go index 0986fec6727941..009d9529476668 100644 --- a/pkg/security/secl/model/model.go +++ b/pkg/security/secl/model/model.go @@ -3,8 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:generate go run github.com/DataDog/datadog-agent/pkg/security/secl/compiler/generators/accessors -mock -output accessors.go -//go:generate go run github.com/DataDog/datadog-agent/pkg/security/secl/compiler/generators/accessors -tags linux -output ../../probe/accessors.go -doc ../../../../docs/cloud-workload-security/secl.json -fields-resolver ../../probe/fields_resolver.go +//go:generate go run github.com/DataDog/datadog-agent/pkg/security/secl/compiler/generators/accessors -output accessors.go -field-handlers field_handlers.go -doc ../../../../docs/cloud-workload-security/secl.json package model @@ -29,17 +28,20 @@ const ( ) // Model describes the data model for the runtime security agent events -type Model struct{} +type Model struct { + ExtraValidateFieldFnc func(field eval.Field, fieldValue eval.FieldValue) error +} // NewEvent returns a new Event func (m *Model) NewEvent() eval.Event { return &Event{} } -// NewEventWithType returns a new Event for the given type -func (m *Model) NewEventWithType(kind EventType) eval.Event { +// NewDefaultEventWithType returns a new Event for the given type +func (m *Model) NewDefaultEventWithType(kind EventType) eval.Event { return &Event{ - Type: uint32(kind), + Type: uint32(kind), + FieldHandlers: &DefaultFieldHandlers{}, } } @@ -117,6 +119,10 @@ func (m *Model) ValidateField(field eval.Field, fieldValue eval.FieldValue) erro } } + if m.ExtraValidateFieldFnc != nil { + return m.ExtraValidateFieldFnc(field, fieldValue) + } + return nil } @@ -200,14 +206,18 @@ type Event struct { Bind BindEvent `field:"bind" event:"bind"` // [7.37] [Network] [Experimental] A bind was executed // internal usage - Umount UmountEvent `field:"-" json:"-"` - InvalidateDentry InvalidateDentryEvent `field:"-" json:"-"` - ArgsEnvs ArgsEnvsEvent `field:"-" json:"-"` - MountReleased MountReleasedEvent `field:"-" json:"-"` - CgroupTracing CgroupTracingEvent `field:"-" json:"-"` - NetDevice NetDeviceEvent `field:"-" json:"-"` - VethPair VethPairEvent `field:"-" json:"-"` - UnshareMountNS UnshareMountNSEvent `field:"-" json:"-"` + Umount UmountEvent `field:"-" json:"-"` + InvalidateDentry InvalidateDentryEvent `field:"-" json:"-"` + ArgsEnvs ArgsEnvsEvent `field:"-" json:"-"` + MountReleased MountReleasedEvent `field:"-" json:"-"` + CgroupTracing CgroupTracingEvent `field:"-" json:"-"` + NetDevice NetDeviceEvent `field:"-" json:"-"` + VethPair VethPairEvent `field:"-" json:"-"` + UnshareMountNS UnshareMountNSEvent `field:"-" json:"-"` + PathResolutionError error `field:"-" json:"-"` // hold one of the path resolution error + + // field resolution + FieldHandlers FieldHandlers `field:"-" json:"-"` } func initMember(member reflect.Value, deja map[string]bool) { @@ -240,6 +250,13 @@ func initMember(member reflect.Value, deja map[string]bool) { } } +// NewDefaultEvent returns a new event using the default field handlers +func NewDefaultEvent() eval.Event { + return &Event{ + FieldHandlers: &DefaultFieldHandlers{}, + } +} + // Init initialize the event func (e *Event) Init() { initMember(reflect.ValueOf(e).Elem(), map[string]bool{}) @@ -266,9 +283,51 @@ func (e *Event) GetTags() []string { return tags } -// GetPointer return an unsafe.Pointer of the Event -func (e *Event) GetPointer() unsafe.Pointer { - return unsafe.Pointer(e) +// Retain the event +func (ev *Event) Retain() Event { + if ev.ProcessCacheEntry != nil { + ev.ProcessCacheEntry.Retain() + } + return *ev +} + +// Release the event +func (ev *Event) Release() { + if ev.ProcessCacheEntry != nil { + ev.ProcessCacheEntry.Release() + } +} + +// NewEmptyProcessCacheEntry returns an empty process cache entry for kworker events +func (ev *Event) NewEmptyProcessCacheEntry() *ProcessCacheEntry { + return &ProcessCacheEntry{ + ProcessContext: ProcessContext{ + Process: Process{ + PIDContext: ev.PIDContext, + }, + }, + } +} + +// SetPathResolutionError sets the Event.pathResolutionError +func (ev *Event) SetPathResolutionError(fileFields *FileEvent, err error) { + fileFields.PathResolutionError = err + ev.PathResolutionError = err +} + +// ResolveProcessCacheEntry uses the field handler +func (ev *Event) ResolveProcessCacheEntry() (*ProcessCacheEntry, bool) { + return ev.FieldHandlers.ResolveProcessCacheEntry(ev) +} + +// ResolveEventTimestamp uses the field handler +func (ev *Event) ResolveEventTimestamp() time.Time { + return ev.FieldHandlers.ResolveEventTimestamp(ev) +} + +// GetProcessServiceTag uses the field handler +func (ev *Event) GetProcessServiceTag() string { + return ev.FieldHandlers.GetProcessServiceTag(ev) } // SetuidEvent represents a setuid event @@ -651,7 +710,7 @@ type ProcessAncestorsIterator struct { // Front returns the first element func (it *ProcessAncestorsIterator) Front(ctx *eval.Context) unsafe.Pointer { - if front := (*Event)(ctx.Object).ProcessContext.Ancestor; front != nil { + if front := ctx.Event.(*Event).ProcessContext.Ancestor; front != nil { it.prev = front return unsafe.Pointer(front) } @@ -688,6 +747,7 @@ type PIDContext struct { Tid uint32 `field:"tid"` // Thread ID of the thread NetNS uint32 `field:"-"` IsKworker bool `field:"is_kworker"` // Indicates whether the process is a kworker + Inode uint64 `field:"-"` // used to track exec and event loss } // RenameEvent represents a rename event @@ -757,12 +817,12 @@ type BPFMap struct { // BPFProgram represents a BPF program type BPFProgram struct { - ID uint32 `field:"-" json:"-"` // ID of the eBPF program - Type uint32 `field:"type" constants:"BPF program types"` // Type of the eBPF program - AttachType uint32 `field:"attach_type" constants:"BPF attach types"` // Attach type of the eBPF program - Helpers []uint32 `field:"helpers,handler:ResolveHelpers" constants:"BPF helper functions"` // eBPF helpers used by the eBPF program (added in 7.35) - Name string `field:"name"` // Name of the eBPF program (added in 7.35) - Tag string `field:"tag"` // Hash (sha1) of the eBPF program (added in 7.35) + ID uint32 `field:"-" json:"-"` // ID of the eBPF program + Type uint32 `field:"type" constants:"BPF program types"` // Type of the eBPF program + AttachType uint32 `field:"attach_type" constants:"BPF attach types"` // Attach type of the eBPF program + Helpers []uint32 `field:"helpers" constants:"BPF helper functions"` // eBPF helpers used by the eBPF program (added in 7.35) + Name string `field:"name"` // Name of the eBPF program (added in 7.35) + Tag string `field:"tag"` // Hash (sha1) of the eBPF program (added in 7.35) } // PTraceEvent represents a ptrace event @@ -930,3 +990,25 @@ type VethPairEvent struct { type SyscallsEvent struct { Syscalls []Syscall // 64 * 8 = 512 > 450, bytes should be enough to hold all 450 syscalls } + +// ExtraFieldHandlers handlers not hold by any field +type ExtraFieldHandlers interface { + ResolveProcessCacheEntry(ev *Event) (*ProcessCacheEntry, bool) + ResolveEventTimestamp(ev *Event) time.Time + GetProcessServiceTag(ev *Event) string +} + +// ResolveProcessCacheEntry stub implementation +func (dfh *DefaultFieldHandlers) ResolveProcessCacheEntry(ev *Event) (*ProcessCacheEntry, bool) { + return nil, false +} + +// ResolveEventTimestamp stub implementation +func (dfh *DefaultFieldHandlers) ResolveEventTimestamp(ev *Event) time.Time { + return ev.Timestamp +} + +// GetProcessServiceTag stub implementation +func (dfh *DefaultFieldHandlers) GetProcessServiceTag(ev *Event) string { + return "" +} diff --git a/pkg/security/secl/model/oo_symlink.go b/pkg/security/secl/model/oo_symlink.go index 403f8bd3e0d0b5..d8d940af8039aa 100644 --- a/pkg/security/secl/model/oo_symlink.go +++ b/pkg/security/secl/model/oo_symlink.go @@ -15,10 +15,10 @@ var ( return &eval.StringEvaluator{ Field: field, EvalFnc: func(ctx *eval.Context) string { - if path := (*Event)(ctx.Object).ProcessContext.SymlinkPathnameStr[0]; path != "" { + if path := ctx.Event.(*Event).ProcessContext.SymlinkPathnameStr[0]; path != "" { return path } - return (*Event)(ctx.Object).ProcessContext.FileEvent.PathnameStr + return ctx.Event.(*Event).ProcessContext.FileEvent.PathnameStr }, } }, @@ -26,10 +26,10 @@ var ( return &eval.StringEvaluator{ Field: field, EvalFnc: func(ctx *eval.Context) string { - if path := (*Event)(ctx.Object).ProcessContext.SymlinkPathnameStr[1]; path != "" { + if path := ctx.Event.(*Event).ProcessContext.SymlinkPathnameStr[1]; path != "" { return path } - return (*Event)(ctx.Object).ProcessContext.FileEvent.PathnameStr + return ctx.Event.(*Event).ProcessContext.FileEvent.PathnameStr }, } }, @@ -39,10 +39,10 @@ var ( return &eval.StringEvaluator{ Field: field, EvalFnc: func(ctx *eval.Context) string { - if name := (*Event)(ctx.Object).ProcessContext.SymlinkBasenameStr; name != "" { + if name := ctx.Event.(*Event).ProcessContext.SymlinkBasenameStr; name != "" { return name } - return (*Event)(ctx.Object).ProcessContext.FileEvent.BasenameStr + return ctx.Event.(*Event).ProcessContext.FileEvent.BasenameStr }, } } diff --git a/pkg/security/secl/model/process_cache_entry.go b/pkg/security/secl/model/process_cache_entry.go index a65494433dd9ed..9f5c788d6f4e77 100644 --- a/pkg/security/secl/model/process_cache_entry.go +++ b/pkg/security/secl/model/process_cache_entry.go @@ -373,21 +373,19 @@ func (p *EnvsEntry) FilterEnvs(envsWithValue map[string]bool) ([]string, bool) { return nil, p.truncated } - p.filteredEnvs = make([]string, len(values)) + p.filteredEnvs = make([]string, 0, len(values)) - var i int for _, value := range values { k, _, found := strings.Cut(value, "=") - if !found { - continue - } - - if envsWithValue[k] { - p.filteredEnvs[i] = value + if found { + if envsWithValue[k] { + p.filteredEnvs = append(p.filteredEnvs, value) + } else { + p.filteredEnvs = append(p.filteredEnvs, k) + } } else { - p.filteredEnvs[i] = k + p.filteredEnvs = append(p.filteredEnvs, value) } - i++ } return p.filteredEnvs, p.truncated diff --git a/pkg/security/secl/model/syscalls.go b/pkg/security/secl/model/syscalls.go index ca1bd51451a64f..59007c76292865 100644 --- a/pkg/security/secl/model/syscalls.go +++ b/pkg/security/secl/model/syscalls.go @@ -6,9 +6,6 @@ //go:build linux // +build linux -//go:generate go run github.com/DataDog/datadog-agent/pkg/security/secl/model/syscall_table_generator -table-url https://raw.githubusercontent.com/torvalds/linux/v5.19/arch/x86/entry/syscalls/syscall_64.tbl -output syscalls_linux_amd64.go -output-string syscalls_string_linux_amd64.go -abis common,64 -//go:generate go run github.com/DataDog/datadog-agent/pkg/security/secl/model/syscall_table_generator -table-url https://raw.githubusercontent.com/torvalds/linux/v5.19/include/uapi/asm-generic/unistd.h -output syscalls_linux_arm64.go -output-string syscalls_string_linux_arm64.go - package model import ( diff --git a/pkg/security/secl/model/syscalls_string_linux_amd64.go b/pkg/security/secl/model/syscalls_string_linux_amd64.go index 5b32b64f8a5682..39b70b17150cf0 100644 --- a/pkg/security/secl/model/syscalls_string_linux_amd64.go +++ b/pkg/security/secl/model/syscalls_string_linux_amd64.go @@ -1,4 +1,4 @@ -// Code generated by "stringer -type Syscall -output syscalls_string_linux_amd64.go syscalls_linux_amd64.go"; DO NOT EDIT. +// Code generated by "stringer -type Syscall -output pkg/security/secl/model/syscalls_string_linux_amd64.go pkg/security/secl/model/syscalls_linux_amd64.go"; DO NOT EDIT. package model diff --git a/pkg/security/secl/model/syscalls_string_linux_arm64.go b/pkg/security/secl/model/syscalls_string_linux_arm64.go index 54fa94f312bd97..1d2f5c941ecdaf 100644 --- a/pkg/security/secl/model/syscalls_string_linux_arm64.go +++ b/pkg/security/secl/model/syscalls_string_linux_arm64.go @@ -1,4 +1,4 @@ -// Code generated by "stringer -type Syscall -output syscalls_string_linux_arm64.go syscalls_linux_arm64.go"; DO NOT EDIT. +// Code generated by "stringer -type Syscall -output pkg/security/secl/model/syscalls_string_linux_arm64.go pkg/security/secl/model/syscalls_linux_arm64.go"; DO NOT EDIT. package model diff --git a/pkg/security/secl/model/unmarshallers.go b/pkg/security/secl/model/unmarshallers.go index e50528f52eddca..f160cf9a46cdfd 100644 --- a/pkg/security/secl/model/unmarshallers.go +++ b/pkg/security/secl/model/unmarshallers.go @@ -479,7 +479,7 @@ func (e *SELinuxEvent) UnmarshalBinary(data []byte) (int, error) { // UnmarshalBinary unmarshalls a binary representation of itself, process_context_t kernel side func (p *PIDContext) UnmarshalBinary(data []byte) (int, error) { - if len(data) < 16 { + if len(data) < 24 { return 0, ErrNotEnoughData } @@ -487,8 +487,9 @@ func (p *PIDContext) UnmarshalBinary(data []byte) (int, error) { p.Tid = ByteOrder.Uint32(data[4:8]) p.NetNS = ByteOrder.Uint32(data[8:12]) p.IsKworker = ByteOrder.Uint32(data[12:16]) > 0 + p.Inode = ByteOrder.Uint64(data[16:24]) - return 16, nil + return 24, nil } // UnmarshalBinary unmarshalls a binary representation of itself diff --git a/pkg/security/secl/model/variables.go b/pkg/security/secl/model/variables.go index b78e11ec0c243a..545d6308e69d7f 100644 --- a/pkg/security/secl/model/variables.go +++ b/pkg/security/secl/model/variables.go @@ -16,7 +16,7 @@ var ( // SECLVariables set of variables SECLVariables = map[string]eval.VariableValue{ "process.pid": eval.NewIntVariable(func(ctx *eval.Context) int { - pc := (*Event)(ctx.Object).ProcessContext + pc := ctx.Event.(*Event).ProcessContext if pc == nil { return 0 } diff --git a/pkg/security/secl/rules/approvers.go b/pkg/security/secl/rules/approvers.go index 6e07dfddd69aa8..cc4898300d0717 100644 --- a/pkg/security/secl/rules/approvers.go +++ b/pkg/security/secl/rules/approvers.go @@ -75,7 +75,7 @@ func bitmaskCombinations(bitmasks []int) []int { func GetApprovers(rules []*Rule, event eval.Event, fieldCaps FieldCapabilities) (Approvers, error) { approvers := make(Approvers) - ctx := eval.NewContext(event.GetPointer()) + ctx := eval.NewContext(event) // for each rule we should at least find one approver otherwise we will return no approver for the field for _, rule := range rules { diff --git a/pkg/security/secl/rules/model_test.go b/pkg/security/secl/rules/model_test.go index 955e38c1e98874..e922e0c9f8f7d8 100644 --- a/pkg/security/secl/rules/model_test.go +++ b/pkg/security/secl/rules/model_test.go @@ -86,35 +86,35 @@ func (m *testModel) GetEvaluator(key string, regID eval.RegisterID) (eval.Evalua case "process.name": return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { return (*testEvent)(ctx.Object).process.name }, + EvalFnc: func(ctx *eval.Context) string { return ctx.Event.(*testEvent).process.name }, Field: key, }, nil case "process.uid": return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { return (*testEvent)(ctx.Object).process.uid }, + EvalFnc: func(ctx *eval.Context) int { return ctx.Event.(*testEvent).process.uid }, Field: key, }, nil case "process.gid": return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { return (*testEvent)(ctx.Object).process.gid }, + EvalFnc: func(ctx *eval.Context) int { return ctx.Event.(*testEvent).process.gid }, Field: key, }, nil case "process.is_root": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*testEvent)(ctx.Object).process.isRoot }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*testEvent).process.isRoot }, Field: key, }, nil case "open.filename": return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { return (*testEvent)(ctx.Object).open.filename }, + EvalFnc: func(ctx *eval.Context) string { return ctx.Event.(*testEvent).open.filename }, Field: key, OpOverrides: eval.GlobCmp, }, nil @@ -122,28 +122,28 @@ func (m *testModel) GetEvaluator(key string, regID eval.RegisterID) (eval.Evalua case "open.flags": return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { return (*testEvent)(ctx.Object).open.flags }, + EvalFnc: func(ctx *eval.Context) int { return ctx.Event.(*testEvent).open.flags }, Field: key, }, nil case "open.mode": return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { return (*testEvent)(ctx.Object).open.mode }, + EvalFnc: func(ctx *eval.Context) int { return ctx.Event.(*testEvent).open.mode }, Field: key, }, nil case "mkdir.filename": return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { return (*testEvent)(ctx.Object).mkdir.filename }, + EvalFnc: func(ctx *eval.Context) string { return ctx.Event.(*testEvent).mkdir.filename }, Field: key, }, nil case "mkdir.mode": return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { return (*testEvent)(ctx.Object).mkdir.mode }, + EvalFnc: func(ctx *eval.Context) int { return ctx.Event.(*testEvent).mkdir.mode }, Field: key, }, nil diff --git a/pkg/security/secl/rules/policy_test.go b/pkg/security/secl/rules/policy_test.go index 53275de040bc74..fc54698cbe3861 100644 --- a/pkg/security/secl/rules/policy_test.go +++ b/pkg/security/secl/rules/policy_test.go @@ -31,14 +31,16 @@ func savePolicy(filename string, testPolicy *PolicyDef) error { func TestMacroMerge(t *testing.T) { var evalOpts eval.Opts - evalOpts.WithConstants(testConstants) + evalOpts. + WithConstants(testConstants). + WithMacroStore(&eval.MacroStore{}) var opts Opts opts. WithSupportedDiscarders(testSupportedDiscarders). WithEventTypeEnabled(map[eval.EventType]bool{"*": true}) - rs := NewRuleSet(&testModel{}, func() eval.Event { return &testEvent{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs := NewRuleSet(&testModel{}, func() eval.Event { return &testEvent{} }, &opts, &evalOpts) testPolicy := &PolicyDef{ Rules: []*RuleDefinition{{ ID: "test_rule", @@ -87,9 +89,9 @@ func TestMacroMerge(t *testing.T) { t.Error(err) } - macro := rs.macroStore.Macros["test_macro"] + macro := rs.evalOpts.MacroStore.Get("test_macro") if macro == nil { - t.Fatalf("failed to find test_macro in ruleset: %+v", rs.macroStore.Macros) + t.Fatalf("failed to find test_macro in ruleset: %+v", rs.evalOpts.MacroStore.List()) } testPolicy2.Macros[0].Combine = "" @@ -105,13 +107,15 @@ func TestMacroMerge(t *testing.T) { func TestRuleMerge(t *testing.T) { var evalOpts eval.Opts - evalOpts.WithConstants(testConstants) + evalOpts. + WithConstants(testConstants). + WithMacroStore(&eval.MacroStore{}) var opts Opts opts. WithSupportedDiscarders(testSupportedDiscarders). WithEventTypeEnabled(map[eval.EventType]bool{"*": true}) - rs := NewRuleSet(&testModel{}, func() eval.Event { return &testEvent{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs := NewRuleSet(&testModel{}, func() eval.Event { return &testEvent{} }, &opts, &evalOpts) testPolicy := &PolicyDef{ Rules: []*RuleDefinition{{ @@ -172,7 +176,7 @@ func (t *testVariableProvider) GetVariable(name string, value interface{}) (eval switch value.(type) { case []int: intVar := eval.NewIntArrayVariable(func(ctx *eval.Context) []int { - processName := (*testEvent)(ctx.Object).process.name + processName := ctx.Event.(*testEvent).process.name processVars, found := t.vars[processName] if !found { return nil @@ -186,7 +190,7 @@ func (t *testVariableProvider) GetVariable(name string, value interface{}) (eval i, _ := v.([]int) return i }, func(ctx *eval.Context, value interface{}) error { - processName := (*testEvent)(ctx.Object).process.name + processName := ctx.Event.(*testEvent).process.name if _, found := t.vars[processName]; !found { t.vars[processName] = map[string]interface{}{} } @@ -213,7 +217,8 @@ func TestActionSetVariable(t *testing.T) { var evalOpts eval.Opts evalOpts. WithConstants(testConstants). - WithVariables(make(map[string]eval.VariableValue)) + WithVariables(make(map[string]eval.VariableValue)). + WithMacroStore(&eval.MacroStore{}) var opts Opts opts. @@ -221,7 +226,7 @@ func TestActionSetVariable(t *testing.T) { WithEventTypeEnabled(enabled). WithStateScopes(stateScopes) - rs := NewRuleSet(&testModel{}, func() eval.Event { return &testEvent{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs := NewRuleSet(&testModel{}, func() eval.Event { return &testEvent{} }, &opts, &evalOpts) testPolicy := &PolicyDef{ Rules: []*RuleDefinition{{ @@ -364,14 +369,15 @@ func TestActionSetVariableConflict(t *testing.T) { var evalOpts eval.Opts evalOpts. WithConstants(testConstants). - WithVariables(make(map[string]eval.VariableValue)) + WithVariables(make(map[string]eval.VariableValue)). + WithMacroStore(&eval.MacroStore{}) var opts Opts opts. WithSupportedDiscarders(testSupportedDiscarders). WithEventTypeEnabled(enabled) - rs := NewRuleSet(&testModel{}, func() eval.Event { return &testEvent{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs := NewRuleSet(&testModel{}, func() eval.Event { return &testEvent{} }, &opts, &evalOpts) testPolicy := &PolicyDef{ Rules: []*RuleDefinition{{ @@ -418,14 +424,15 @@ func loadPolicy(t *testing.T, testPolicy *PolicyDef, policyOpts PolicyLoaderOpts var evalOpts eval.Opts evalOpts. WithConstants(testConstants). - WithVariables(make(map[string]eval.VariableValue)) + WithVariables(make(map[string]eval.VariableValue)). + WithMacroStore(&eval.MacroStore{}) var opts Opts opts. WithSupportedDiscarders(testSupportedDiscarders). WithEventTypeEnabled(enabled) - rs := NewRuleSet(&testModel{}, func() eval.Event { return &testEvent{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs := NewRuleSet(&testModel{}, func() eval.Event { return &testEvent{} }, &opts, &evalOpts) tmpDir := t.TempDir() diff --git a/pkg/security/secl/rules/rule_filters.go b/pkg/security/secl/rules/rule_filters.go index b48d8bc64830e6..b3ba04b7bff563 100644 --- a/pkg/security/secl/rules/rule_filters.go +++ b/pkg/security/secl/rules/rule_filters.go @@ -89,7 +89,7 @@ func NewSECLRuleFilter(model eval.Model) *SECLRuleFilter { return &SECLRuleFilter{ model: model, context: &eval.Context{ - Object: model.NewEvent().GetPointer(), + Event: model.NewEvent(), }, parsingContext: ast.NewParsingContext(), } @@ -121,10 +121,7 @@ func (r *SECLRuleFilter) IsRuleAccepted(rule *RuleDefinition) (bool, error) { evalOpts. WithConstants(model.SECLConstants) - evaluator, err := eval.NewRuleEvaluator(astRule, r.model, eval.ReplacementContext{ - Opts: evalOpts, - MacroStore: &eval.MacroStore{}, - }) + evaluator, err := eval.NewRuleEvaluator(astRule, r.model, evalOpts) if err != nil { return false, err } @@ -144,7 +141,7 @@ func (r *SECLRuleFilter) IsMacroAccepted(macro *MacroDefinition) (bool, error) { return false, err } - evaluator, err := eval.NewRuleEvaluator(astRule, r.model, eval.ReplacementContext{}) + evaluator, err := eval.NewRuleEvaluator(astRule, r.model, &eval.Opts{}) if err != nil { return false, err } diff --git a/pkg/security/secl/rules/ruleset.go b/pkg/security/secl/rules/ruleset.go index 233785403ea466..5668c4bb57943b 100644 --- a/pkg/security/secl/rules/ruleset.go +++ b/pkg/security/secl/rules/ruleset.go @@ -162,7 +162,6 @@ type RuleSetListener interface { type RuleSet struct { opts *Opts evalOpts *eval.Opts - macroStore *eval.MacroStore eventRuleBuckets map[eval.EventType]*RuleBucket rules map[eval.RuleID]*Rule policies []*Policy @@ -179,13 +178,6 @@ type RuleSet struct { pool *eval.ContextPool } -func (rs *RuleSet) replCtx() eval.ReplacementContext { - return eval.ReplacementContext{ - Opts: rs.evalOpts, - MacroStore: rs.macroStore, - } -} - // GetPolicies returns the policies func (rs *RuleSet) GetPolicies() []*Policy { return rs.policies @@ -208,8 +200,8 @@ func (rs *RuleSet) GetRules() map[eval.RuleID]*Rule { // ListMacroIDs returns the list of MacroIDs from the ruleset func (rs *RuleSet) ListMacroIDs() []MacroID { var ids []string - for macroID := range rs.macroStore.Macros { - ids = append(ids, macroID) + for _, macro := range rs.evalOpts.MacroStore.List() { + ids = append(ids, macro.ID) } return ids } @@ -232,7 +224,7 @@ func (rs *RuleSet) AddMacros(parsingContext *ast.ParsingContext, macros []*Macro func (rs *RuleSet) AddMacro(parsingContext *ast.ParsingContext, macroDef *MacroDefinition) (*eval.Macro, error) { var err error - if _, exists := rs.macroStore.Macros[macroDef.ID]; exists { + if macro := rs.evalOpts.MacroStore.Get(macroDef.ID); macro != nil { return nil, &ErrMacroLoad{Definition: macroDef, Err: errors.New("multiple definition with the same ID")} } @@ -242,16 +234,16 @@ func (rs *RuleSet) AddMacro(parsingContext *ast.ParsingContext, macroDef *MacroD case macroDef.Expression != "" && len(macroDef.Values) > 0: return nil, &ErrMacroLoad{Definition: macroDef, Err: errors.New("only one of 'expression' and 'values' can be defined")} case macroDef.Expression != "": - if macro.Macro, err = eval.NewMacro(macroDef.ID, macroDef.Expression, rs.model, parsingContext, rs.replCtx()); err != nil { + if macro.Macro, err = eval.NewMacro(macroDef.ID, macroDef.Expression, rs.model, parsingContext, rs.evalOpts); err != nil { return nil, &ErrMacroLoad{Definition: macroDef, Err: err} } default: - if macro.Macro, err = eval.NewStringValuesMacro(macroDef.ID, macroDef.Values, rs.macroStore); err != nil { + if macro.Macro, err = eval.NewStringValuesMacro(macroDef.ID, macroDef.Values, rs.evalOpts); err != nil { return nil, &ErrMacroLoad{Definition: macroDef, Err: err} } } - rs.macroStore.AddMacro(macro.Macro) + rs.evalOpts.MacroStore.Add(macro.Macro) return macro.Macro, nil } @@ -314,11 +306,7 @@ func (rs *RuleSet) AddRule(parsingContext *ast.ParsingContext, ruleDef *RuleDefi } rule := &Rule{ - Rule: &eval.Rule{ - ID: ruleDef.ID, - Expression: ruleDef.Expression, - Tags: tags, - }, + Rule: eval.NewRule(ruleDef.ID, ruleDef.Expression, rs.evalOpts, tags...), Definition: ruleDef, } @@ -326,7 +314,7 @@ func (rs *RuleSet) AddRule(parsingContext *ast.ParsingContext, ruleDef *RuleDefi return nil, &ErrRuleLoad{Definition: ruleDef, Err: &ErrRuleSyntax{Err: err}} } - if err := rule.GenEvaluator(rs.model, parsingContext, rs.replCtx()); err != nil { + if err := rule.GenEvaluator(rs.model, parsingContext); err != nil { return nil, &ErrRuleLoad{Definition: ruleDef, Err: err} } @@ -486,7 +474,7 @@ func (rs *RuleSet) IsDiscarder(event eval.Event, field eval.Field) (bool, error) return false, &ErrNoEventTypeBucket{EventType: eventType} } - ctx := rs.pool.Get(event.GetPointer()) + ctx := rs.pool.Get(event) defer rs.pool.Put(ctx) return IsDiscarder(ctx, field, bucket.rules) @@ -502,8 +490,8 @@ func (rs *RuleSet) runRuleActions(ctx *eval.Context, rule *Rule) error { } name += action.Set.Name - variable, found := rs.evalOpts.Variables[name] - if !found { + variable := rs.evalOpts.VariableStore.Get(name) + if variable == nil { return fmt.Errorf("unknown variable: %s", name) } @@ -533,7 +521,7 @@ func (rs *RuleSet) runRuleActions(ctx *eval.Context, rule *Rule) error { // Evaluate the specified event against the set of rules func (rs *RuleSet) Evaluate(event eval.Event) bool { - ctx := rs.pool.Get(event.GetPointer()) + ctx := rs.pool.Get(event) defer rs.pool.Put(ctx) eventType := event.GetType() @@ -684,7 +672,7 @@ func (rs *RuleSet) LoadPolicies(loader *PolicyLoader, opts PolicyLoaderOpts) *mu varName = string(action.Set.Scope) + "." + varName } - if _, err := rs.model.NewEvent().GetFieldValue(varName); err == nil { + if _, err := rs.eventCtor().GetFieldValue(varName); err == nil { errs = multierror.Append(errs, fmt.Errorf("variable '%s' conflicts with field", varName)) continue } @@ -765,12 +753,12 @@ func (rs *RuleSet) LoadPolicies(loader *PolicyLoader, opts PolicyLoaderOpts) *mu continue } - if existingVariable, found := rs.evalOpts.Variables[varName]; found && reflect.TypeOf(variable) != reflect.TypeOf(existingVariable) { + if existingVariable := rs.evalOpts.VariableStore.Get(varName); existingVariable != nil && reflect.TypeOf(variable) != reflect.TypeOf(existingVariable) { errs = multierror.Append(errs, fmt.Errorf("conflicting types for variable '%s'", varName)) continue } - rs.evalOpts.Variables[varName] = variable + rs.evalOpts.VariableStore.Add(varName, variable) } } } @@ -783,16 +771,28 @@ func (rs *RuleSet) LoadPolicies(loader *PolicyLoader, opts PolicyLoaderOpts) *mu return errs } +// NewEvent returns a new event using the embedded constructor +func (rs *RuleSet) NewEvent() eval.Event { + return rs.eventCtor() +} + // NewRuleSet returns a new ruleset for the specified data model -func NewRuleSet(model eval.Model, eventCtor func() eval.Event, opts *Opts, evalOpts *eval.Opts, macroStore *eval.MacroStore) *RuleSet { +func NewRuleSet(model eval.Model, eventCtor func() eval.Event, opts *Opts, evalOpts *eval.Opts) *RuleSet { logger := log.OrNullLogger(opts.Logger) + if evalOpts.MacroStore == nil { + evalOpts.WithMacroStore(&eval.MacroStore{}) + } + + if evalOpts.VariableStore == nil { + evalOpts.WithVariableStore(&eval.VariableStore{}) + } + return &RuleSet{ model: model, eventCtor: eventCtor, opts: opts, evalOpts: evalOpts, - macroStore: macroStore, eventRuleBuckets: make(map[eval.EventType]*RuleBucket), rules: make(map[eval.RuleID]*Rule), logger: logger, diff --git a/pkg/security/secl/rules/ruleset_test.go b/pkg/security/secl/rules/ruleset_test.go index d059fdd080c3a8..9d1d031c66e6ff 100644 --- a/pkg/security/secl/rules/ruleset_test.go +++ b/pkg/security/secl/rules/ruleset_test.go @@ -39,7 +39,7 @@ func (f *testHandler) EventDiscarderFound(rs *RuleSet, event eval.Event, field s } evaluator, _ := f.model.GetEvaluator(field, "") - ctx := eval.NewContext(event.GetPointer()) + ctx := eval.NewContext(event) value := evaluator.Eval(ctx) @@ -87,14 +87,7 @@ func newRuleSet() *RuleSet { WithSupportedDiscarders(testSupportedDiscarders). WithEventTypeEnabled(enabled) - return NewRuleSet(&testModel{}, func() eval.Event { return &testEvent{} }, &opts, &evalOpts, &eval.MacroStore{}) -} - -func emptyReplCtx() eval.ReplacementContext { - return eval.ReplacementContext{ - Opts: &eval.Opts{}, - MacroStore: &eval.MacroStore{}, - } + return NewRuleSet(&testModel{}, func() eval.Event { return &testEvent{} }, &opts, &evalOpts) } func TestRuleBuckets(t *testing.T) { @@ -572,12 +565,11 @@ func TestRuleSetApprovers14(t *testing.T) { } func TestGetRuleEventType(t *testing.T) { + rule := eval.NewRule("aaa", `open.filename == "test"`, &eval.Opts{}) + pc := ast.NewParsingContext() - rule := &eval.Rule{ - ID: "aaa", - Expression: `open.filename == "test"`, - } - if err := rule.GenEvaluator(&testModel{}, pc, emptyReplCtx()); err != nil { + + if err := rule.GenEvaluator(&testModel{}, pc); err != nil { t.Fatal(err) } diff --git a/pkg/security/tests/activity_dumps_test.go b/pkg/security/tests/activity_dumps_test.go index b8af68774c5056..9dcb69dd0424e7 100644 --- a/pkg/security/tests/activity_dumps_test.go +++ b/pkg/security/tests/activity_dumps_test.go @@ -66,6 +66,86 @@ func TestActivityDumps(t *testing.T) { t.Fatal(err) } + t.Run("activity-dump-cgroup-process", func(t *testing.T) { + dockerInstance, dump, err := test.StartADockerGetDump() + if err != nil { + t.Fatal(err) + } + defer dockerInstance.stop() + + cmd := dockerInstance.Command(syscallTester, []string{"sleep", "1"}, []string{}) + _, err = cmd.CombinedOutput() + if err != nil { + t.Fatal(err) + } + time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump + + err = test.StopActivityDump(dump.Name, "", "") + if err != nil { + t.Fatal(err) + } + // time.Sleep(time.Second * 60) + + validateActivityDumpOutputs(t, test, expectedFormats, dump.OutputFiles, func(ad *probe.ActivityDump) bool { + nodes := ad.FindMatchingNodes("syscall_tester") + if nodes == nil { + t.Fatalf("Node not found in activity dump: %+v", nodes) + } + if len(nodes) != 1 { + t.Fatalf("Found %d nodes, expected only one.", len(nodes)) + } + node := nodes[0] + + // ProcessActivityNode content1 + assert.Equal(t, probe.Runtime, node.GenerationType) + assert.Equal(t, 0, len(node.Children)) + assert.Equal(t, 0, len(node.Files)) + assert.Equal(t, 0, len(node.DNSNames)) + assert.Equal(t, 0, len(node.Sockets)) + + // Process content + assert.Equal(t, node.Process.Pid, node.Process.Tid) + assert.Equal(t, uint32(0), node.Process.UID) + assert.Equal(t, uint32(0), node.Process.GID) + assert.Equal(t, "root", node.Process.User) + assert.Equal(t, "root", node.Process.Group) + if node.Process.Pid < node.Process.PPid { + t.Errorf("PID < PPID") + } + assert.Equal(t, false, node.Process.IsThread) + assert.Equal(t, uint64(0), node.Process.SpanID) + assert.Equal(t, uint64(0), node.Process.TraceID) + assert.Equal(t, "", node.Process.TTYName) + assert.Equal(t, "syscall_tester", node.Process.Comm) + assert.Equal(t, false, node.Process.ArgsTruncated) + assert.Equal(t, 2, len(node.Process.Argv)) + if len(node.Process.Argv) >= 2 { + assert.Equal(t, "sleep", node.Process.Argv[0]) + assert.Equal(t, "1", node.Process.Argv[1]) + } + assert.Equal(t, syscallTester, node.Process.Argv0) + assert.Equal(t, false, node.Process.ArgsTruncated) + assert.Equal(t, false, node.Process.EnvsTruncated) + found := false + for _, env := range node.Process.Envs { + if strings.HasPrefix(env, "PATH=") { + found = true + break + } + } + if !found { + t.Errorf("PATH not present in envs") + } + + // Process.FileEvent content + if !strings.HasSuffix(node.Process.FileEvent.PathnameStr, "/syscall_tester") { + t.Errorf("PathnameStr did not ends with /syscall_tester: %s", node.Process.FileEvent.PathnameStr) + } + assert.Equal(t, "syscall_tester", node.Process.FileEvent.BasenameStr) + return true + }) + }) + t.Run("activity-dump-cgroup-bind", func(t *testing.T) { dockerInstance, dump, err := test.StartADockerGetDump() if err != nil { diff --git a/pkg/security/tests/bind_test.go b/pkg/security/tests/bind_test.go index 602fc67af93779..a52e10edac1600 100644 --- a/pkg/security/tests/bind_test.go +++ b/pkg/security/tests/bind_test.go @@ -17,7 +17,7 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -59,16 +59,14 @@ func TestBindEvent(t *testing.T) { } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "bind", event.GetType(), "wrong event type") assert.Equal(t, uint16(unix.AF_INET), event.Bind.AddrFamily, "wrong address family") assert.Equal(t, uint16(4242), event.Bind.Addr.Port, "wrong address port") assert.Equal(t, string("0.0.0.0/32"), event.Bind.Addr.IPNet.String(), "wrong address") assert.Equal(t, int64(0), event.Bind.Retval, "wrong retval") - if !validateBindSchema(t, event) { - t.Error(event.String()) - } + test.validateBindSchema(t, event) }) }) @@ -83,16 +81,14 @@ func TestBindEvent(t *testing.T) { } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "bind", event.GetType(), "wrong event type") assert.Equal(t, uint16(unix.AF_INET), event.Bind.AddrFamily, "wrong address family") assert.Equal(t, uint16(4242), event.Bind.Addr.Port, "wrong address port") assert.Equal(t, string("0.0.0.0/32"), event.Bind.Addr.IPNet.String(), "wrong address") assert.Equal(t, int64(0), event.Bind.Retval, "wrong retval") - if !validateBindSchema(t, event) { - t.Error(event.String()) - } + test.validateBindSchema(t, event) }) }) @@ -107,16 +103,14 @@ func TestBindEvent(t *testing.T) { } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "bind", event.GetType(), "wrong event type") assert.Equal(t, uint16(unix.AF_INET6), event.Bind.AddrFamily, "wrong address family") assert.Equal(t, uint16(4242), event.Bind.Addr.Port, "wrong address port") assert.Equal(t, string("::/128"), event.Bind.Addr.IPNet.String(), "wrong address") assert.Equal(t, int64(0), event.Bind.Retval, "wrong retval") - if !validateBindSchema(t, event) { - t.Error(event.String()) - } + test.validateBindSchema(t, event) }) }) @@ -131,7 +125,7 @@ func TestBindEvent(t *testing.T) { } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "bind", event.GetType(), "wrong event type") assert.Equal(t, uint16(unix.AF_UNIX), event.Bind.AddrFamily, "wrong address family") assert.Equal(t, uint16(0), event.Bind.Addr.Port, "wrong address port") @@ -139,9 +133,7 @@ func TestBindEvent(t *testing.T) { event.Bind.Addr.IPNet, "wrong address") assert.Equal(t, int64(0), event.Bind.Retval, "wrong retval") - if !validateBindSchema(t, event) { - t.Error(event.String()) - } + test.validateBindSchema(t, event) }) }) } diff --git a/pkg/security/tests/bpf_test.go b/pkg/security/tests/bpf_test.go index 0df5a8af9f6cd0..a4d7b8b2c132a3 100644 --- a/pkg/security/tests/bpf_test.go +++ b/pkg/security/tests/bpf_test.go @@ -14,7 +14,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -45,13 +44,11 @@ func TestBPFEventLoad(t *testing.T) { t.Run("prog_load", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "-load-bpf") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "bpf", event.GetType(), "wrong event type") assert.Equal(t, uint32(model.BpfProgTypeKprobe), event.BPF.Program.Type, "wrong program type") - if !validateBPFSchema(t, event) { - t.Error(event.String()) - } + test.validateBPFSchema(t, event) }) }) } @@ -82,13 +79,11 @@ func TestBPFEventMap(t *testing.T) { t.Run("map_lookup", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "-load-bpf", "-clone-bpf") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "bpf", event.GetType(), "wrong event type") assert.Equal(t, uint32(model.BpfMapTypeHash), event.BPF.Map.Type, "wrong map type") - if !validateBPFSchema(t, event) { - t.Error(event.String()) - } + test.validateBPFSchema(t, event) }) }) } diff --git a/pkg/security/tests/chmod_test.go b/pkg/security/tests/chmod_test.go index 0892a7472cce8a..60879777a78207 100644 --- a/pkg/security/tests/chmod_test.go +++ b/pkg/security/tests/chmod_test.go @@ -15,7 +15,7 @@ import ( "github.com/stretchr/testify/assert" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -54,7 +54,7 @@ func TestChmod(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chmod", event.GetType(), "wrong event type") assertRights(t, uint16(event.Chmod.Mode), 0o707) assert.Equal(t, getInode(t, testFile), event.Chmod.File.Inode, "wrong inode") @@ -63,9 +63,7 @@ func TestChmod(t *testing.T) { assertNearTime(t, event.Chmod.File.CTime) assert.Equal(t, event.Async, false) - if !validateChmodSchema(t, event) { - t.Error(event.String()) - } + test.validateChmodSchema(t, event) }) }) @@ -77,7 +75,7 @@ func TestChmod(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chmod", event.GetType(), "wrong event type") assertRights(t, uint16(event.Chmod.Mode), 0o757) assert.Equal(t, getInode(t, testFile), event.Chmod.File.Inode, "wrong inode") @@ -86,9 +84,7 @@ func TestChmod(t *testing.T) { assertNearTime(t, event.Chmod.File.CTime) assert.Equal(t, event.Async, false) - if !validateChmodSchema(t, event) { - t.Error(event.String()) - } + test.validateChmodSchema(t, event) }) }) @@ -98,7 +94,7 @@ func TestChmod(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chmod", event.GetType(), "wrong event type") assertRights(t, uint16(event.Chmod.Mode), 0o717, "wrong mode") assert.Equal(t, getInode(t, testFile), event.Chmod.File.Inode, "wrong inode") @@ -107,9 +103,7 @@ func TestChmod(t *testing.T) { assertNearTime(t, event.Chmod.File.CTime) assert.Equal(t, event.Async, false) - if !validateChmodSchema(t, event) { - t.Error(event.String()) - } + test.validateChmodSchema(t, event) }) })) } diff --git a/pkg/security/tests/chown32_test.go b/pkg/security/tests/chown32_test.go index c24db9f7caa141..bfd176607e3347 100644 --- a/pkg/security/tests/chown32_test.go +++ b/pkg/security/tests/chown32_test.go @@ -15,7 +15,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -64,7 +64,7 @@ func TestChown32(t *testing.T) { test.WaitSignal(t, func() error { // fchown syscall return runSyscallTesterFunc(t, syscallTester, "chown", testFile, "100", "200") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(100), event.Chown.UID, "wrong user") assert.Equal(t, int64(200), event.Chown.GID, "wrong user") @@ -76,9 +76,7 @@ func TestChown32(t *testing.T) { assertNearTime(t, event.Chown.File.CTime) assert.Equal(t, event.Async, false) - if !validateChownSchema(t, event) { - t.Error(event.String()) - } + test.validateChownSchema(t, event) }) }) @@ -91,7 +89,7 @@ func TestChown32(t *testing.T) { test.WaitSignal(t, func() error { // fchown syscall return runSyscallTesterFunc(t, syscallTester, "fchown", testFile, "101", "201") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(101), event.Chown.UID, "wrong user") assert.Equal(t, int64(201), event.Chown.GID, "wrong user") @@ -103,9 +101,7 @@ func TestChown32(t *testing.T) { assertNearTime(t, event.Chown.File.CTime) assert.Equal(t, event.Async, false) - if !validateChownSchema(t, event) { - t.Error(event.String()) - } + test.validateChownSchema(t, event) }) }) @@ -118,7 +114,7 @@ func TestChown32(t *testing.T) { test.WaitSignal(t, func() error { // fchown syscall return runSyscallTesterFunc(t, syscallTester, "fchownat", testFile, "102", "202") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(102), event.Chown.UID, "wrong user") assert.Equal(t, int64(202), event.Chown.GID, "wrong user") @@ -130,9 +126,7 @@ func TestChown32(t *testing.T) { assertNearTime(t, event.Chown.File.CTime) assert.Equal(t, event.Async, false) - if !validateChownSchema(t, event) { - t.Error(event.String()) - } + test.validateChownSchema(t, event) }) }) @@ -150,7 +144,7 @@ func TestChown32(t *testing.T) { test.WaitSignal(t, func() error { // fchown syscall return runSyscallTesterFunc(t, syscallTester, "lchown", testSymlink, "103", "203") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(103), event.Chown.UID, "wrong user") assert.Equal(t, int64(203), event.Chown.GID, "wrong user") @@ -162,9 +156,7 @@ func TestChown32(t *testing.T) { assertNearTime(t, event.Chown.File.CTime) assert.Equal(t, event.Async, false) - if !validateChownSchema(t, event) { - t.Error(event.String()) - } + test.validateChownSchema(t, event) }) }) @@ -182,7 +174,7 @@ func TestChown32(t *testing.T) { test.WaitSignal(t, func() error { // fchown syscall return runSyscallTesterFunc(t, syscallTester, "lchown32", testSymlink, "104", "204") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(104), event.Chown.UID, "wrong user") assert.Equal(t, int64(204), event.Chown.GID, "wrong user") @@ -194,9 +186,7 @@ func TestChown32(t *testing.T) { assertNearTime(t, event.Chown.File.CTime) assert.Equal(t, event.Async, false) - if !validateChownSchema(t, event) { - t.Error(event.String()) - } + test.validateChownSchema(t, event) }) }) @@ -210,7 +200,7 @@ func TestChown32(t *testing.T) { test.WaitSignal(t, func() error { // fchown syscall return runSyscallTesterFunc(t, syscallTester, "fchown32", testFile, "105", "205") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(105), event.Chown.UID, "wrong user") assert.Equal(t, int64(205), event.Chown.GID, "wrong user") @@ -222,9 +212,7 @@ func TestChown32(t *testing.T) { assertNearTime(t, event.Chown.File.CTime) assert.Equal(t, event.Async, false) - if !validateChownSchema(t, event) { - t.Error(event.String()) - } + test.validateChownSchema(t, event) }) }) @@ -237,7 +225,7 @@ func TestChown32(t *testing.T) { test.WaitSignal(t, func() error { // fchown syscall return runSyscallTesterFunc(t, syscallTester, "chown32", testFile, "106", "206") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(106), event.Chown.UID, "wrong user") assert.Equal(t, int64(206), event.Chown.GID, "wrong user") @@ -249,9 +237,7 @@ func TestChown32(t *testing.T) { assertNearTime(t, event.Chown.File.CTime) assert.Equal(t, event.Async, false) - if !validateChownSchema(t, event) { - t.Error(event.String()) - } + test.validateChownSchema(t, event) }) }) } diff --git a/pkg/security/tests/chown_test.go b/pkg/security/tests/chown_test.go index 714a34e2f3e69f..ad1a3314a14658 100644 --- a/pkg/security/tests/chown_test.go +++ b/pkg/security/tests/chown_test.go @@ -18,7 +18,7 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -78,7 +78,7 @@ func TestChown(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(100), event.Chown.UID, "wrong user") assert.Equal(t, int64(200), event.Chown.GID, "wrong user") @@ -90,9 +90,7 @@ func TestChown(t *testing.T) { assertNearTime(t, event.Chown.File.CTime) assert.Equal(t, event.Async, false) - if !validateChownSchema(t, event) { - t.Error(event.String()) - } + test.validateChownSchema(t, event) }) }) @@ -107,7 +105,7 @@ func TestChown(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(101), event.Chown.UID, "wrong user") assert.Equal(t, int64(201), event.Chown.GID, "wrong user") @@ -119,9 +117,7 @@ func TestChown(t *testing.T) { assertNearTime(t, event.Chown.File.CTime) assert.Equal(t, event.Async, false) - if !validateChownSchema(t, event) { - t.Error(event.String()) - } + test.validateChownSchema(t, event) }) }) @@ -145,7 +141,7 @@ func TestChown(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assertTriggeredRule(t, rule, "test_rule2") assert.Equal(t, int64(102), event.Chown.UID, "wrong user") @@ -158,9 +154,7 @@ func TestChown(t *testing.T) { assertNearTime(t, event.Chown.File.CTime) assert.Equal(t, event.Async, false) - if !validateChownSchema(t, event) { - t.Error(event.String()) - } + test.validateChownSchema(t, event) }) })) @@ -172,7 +166,7 @@ func TestChown(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(103), event.Chown.UID, "wrong user") assert.Equal(t, int64(203), event.Chown.GID, "wrong user") @@ -184,9 +178,7 @@ func TestChown(t *testing.T) { assertNearTime(t, event.Chown.File.CTime) assert.Equal(t, event.Async, false) - if !validateChownSchema(t, event) { - t.Error(event.String()) - } + test.validateChownSchema(t, event) }) })) @@ -199,16 +191,14 @@ func TestChown(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assertTriggeredRule(t, r, "test_rule3") assert.Equal(t, int64(104), event.Chown.UID, "wrong user") assert.Equal(t, int64(-1), event.Chown.GID, "wrong group") assert.Equal(t, event.Async, false) - if !validateChownSchema(t, event) { - t.Error(event.String()) - } + test.validateChownSchema(t, event) }) })) @@ -221,16 +211,14 @@ func TestChown(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assertTriggeredRule(t, r, "test_rule4") assert.Equal(t, int64(-1), event.Chown.UID, "wrong user") assert.Equal(t, int64(204), event.Chown.GID, "wrong group") assert.Equal(t, event.Async, false) - if !validateChownSchema(t, event) { - t.Error(event.String()) - } + test.validateChownSchema(t, event) }) })) @@ -246,7 +234,7 @@ func TestChown(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { t.Error("Event received") }) }) diff --git a/pkg/security/tests/dentry_test.go b/pkg/security/tests/dentry_test.go index 24b0baf018ab9f..1b07c0eb4dfedc 100644 --- a/pkg/security/tests/dentry_test.go +++ b/pkg/security/tests/dentry_test.go @@ -19,13 +19,12 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" "github.com/DataDog/datadog-agent/pkg/security/metrics" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/probe/resolvers" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) -func validateResolution(test *testModule, event *sprobe.Event, testFile string, pathFnc func(uint32, uint64, uint32, bool) (string, error), parentFnc func(uint32, uint64, uint32) (uint32, uint64, error), nameFnc func(uint32, uint64, uint32) (string, error)) { +func validateResolution(test *testModule, event *model.Event, testFile string, pathFnc func(uint32, uint64, uint32, bool) (string, error), parentFnc func(uint32, uint64, uint32) (uint32, uint64, error), nameFnc func(uint32, uint64, uint32) (string, error)) { basename := path.Base(testFile) // Force an eRPC resolution to refresh the entry with the last generation as lost events may have invalidated the entry @@ -103,7 +102,7 @@ func TestDentryResolutionERPC(t *testing.T) { test.WaitSignal(t, func() error { _, err = os.Create(testFile) return err - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_erpc_rule") test.module.SendStats() @@ -157,7 +156,7 @@ func TestDentryResolutionMap(t *testing.T) { return err } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_map_rule") test.module.SendStats() @@ -207,7 +206,7 @@ func BenchmarkERPCDentryResolutionSegment(b *testing.B) { return err } return syscall.Close(fd) - }, func(event *sprobe.Event, _ *rules.Rule) { + }, func(event *model.Event, _ *rules.Rule) { mountID = event.Open.File.MountID inode = event.Open.File.Inode pathID = event.Open.File.PathID @@ -276,7 +275,7 @@ func BenchmarkERPCDentryResolutionPath(b *testing.B) { return err } return syscall.Close(fd) - }, func(event *sprobe.Event, _ *rules.Rule) { + }, func(event *model.Event, _ *rules.Rule) { mountID = event.Open.File.MountID inode = event.Open.File.Inode pathID = event.Open.File.PathID @@ -345,7 +344,7 @@ func BenchmarkMapDentryResolutionSegment(b *testing.B) { return err } return syscall.Close(fd) - }, func(event *sprobe.Event, _ *rules.Rule) { + }, func(event *model.Event, _ *rules.Rule) { mountID = event.Open.File.MountID inode = event.Open.File.Inode pathID = event.Open.File.PathID @@ -414,7 +413,7 @@ func BenchmarkMapDentryResolutionPath(b *testing.B) { return err } return syscall.Close(fd) - }, func(event *sprobe.Event, _ *rules.Rule) { + }, func(event *model.Event, _ *rules.Rule) { mountID = event.Open.File.MountID inode = event.Open.File.Inode pathID = event.Open.File.PathID diff --git a/pkg/security/tests/dns_test.go b/pkg/security/tests/dns_test.go index bac933332426c7..cc8abb2c239d05 100644 --- a/pkg/security/tests/dns_test.go +++ b/pkg/security/tests/dns_test.go @@ -20,7 +20,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -65,13 +65,11 @@ func TestDNS(t *testing.T) { return err } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_dns") assert.Equal(t, "google.com", event.DNS.Name, "wrong domain name") - if !validateDNSSchema(t, event) { - t.Error(event.String()) - } + test.validateDNSSchema(t, event) }) }) @@ -82,13 +80,11 @@ func TestDNS(t *testing.T) { return err } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_dns") assert.Equal(t, "GOOGLE.COM", event.DNS.Name, "wrong domain name") - if !validateDNSSchema(t, event) { - t.Error(event.String()) - } + test.validateDNSSchema(t, event) }) }) @@ -97,14 +93,12 @@ func TestDNS(t *testing.T) { test.WaitSignal(t, func() error { net.LookupIP(longDomain) return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_long_query") assert.Equal(t, "dns", event.GetType(), "wrong event type") assert.Equal(t, longDomain, event.DNS.Name, "wrong domain name") - if !validateDNSSchema(t, event) { - t.Error(event.String()) - } + test.validateDNSSchema(t, event) }) }) } diff --git a/pkg/security/tests/event_monitoring_test.go b/pkg/security/tests/event_monitoring_test.go new file mode 100644 index 00000000000000..be1bacb85c2e3d --- /dev/null +++ b/pkg/security/tests/event_monitoring_test.go @@ -0,0 +1,108 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build functionaltests +// +build functionaltests + +package tests + +import ( + "os/exec" + "testing" + "time" + + pmodel "github.com/DataDog/datadog-agent/pkg/process/events/model" + "github.com/stretchr/testify/assert" +) + +func TestProcessMonitoringDisabled(t *testing.T) { + test, err := newTestModule(t, nil, nil, testOpts{}) + if err != nil { + t.Fatal(err) + } + defer test.Close() + + t.Run("no-event", func(t *testing.T) { + lsExecutable := which(t, "ls") + + err = test.GetProcessEvent(func() error { + cmd := exec.Command(lsExecutable) + return cmd.Run() + }, func(event *pmodel.ProcessEvent) bool { + t.Fatal("shouldn't get a process event") + return true + }, 3*time.Second, "") + if err == nil { + t.Fatal("shouldn't get a process event") + } else if otherErr, ok := err.(ErrTimeout); !ok { + t.Fatal(otherErr) + } + }) +} + +func TestProcessMonitoring(t *testing.T) { + test, err := newTestModule(t, nil, nil, testOpts{ + disableRuntimeSecurity: true, + enableEventMonitoring: true, + }) + if err != nil { + t.Fatal(err) + } + defer test.Close() + + syscallTester, err := loadSyscallTester(t, test, "syscall_tester") + if err != nil { + t.Fatal(err) + } + + t.Run("fork", func(t *testing.T) { + err = test.GetProcessEvent(func() error { + cmd := exec.Command(syscallTester, "fork") + return cmd.Run() + }, func(event *pmodel.ProcessEvent) bool { + return assert.Equal(t, pmodel.Fork.String(), event.EventType.String(), "wrong process event type") && + assert.Equal(t, syscallTester, event.Exe, "wrong executable path") && + assert.Equal(t, []string{syscallTester, "fork"}, event.Cmdline, "wrong command line") && + assertNearTimeObject(t, event.ForkTime) + }, getEventTimeout, syscallTester, pmodel.Fork) + if err != nil { + t.Fatal(err) + } + }) + + t.Run("exec", func(t *testing.T) { + lsExecutable := which(t, "ls") + err = test.GetProcessEvent(func() error { + cmd := exec.Command(lsExecutable, "-l") + return cmd.Run() + }, func(event *pmodel.ProcessEvent) bool { + return assert.Equal(t, pmodel.Exec.String(), event.EventType.String(), "wrong process event type") && + assert.Equal(t, lsExecutable, event.Exe, "wrong executable path") && + assert.Equal(t, []string{lsExecutable, "-l"}, event.Cmdline, "wrong command line") && + assertNearTimeObject(t, event.ExecTime) + }, getEventTimeout, lsExecutable, pmodel.Exec) + if err != nil { + t.Fatal(err) + } + }) + + t.Run("exit", func(t *testing.T) { + sleepExecutable := which(t, "sleep") + err = test.GetProcessEvent(func() error { + cmd := exec.Command(sleepExecutable) + _ = cmd.Run() + return nil + }, func(event *pmodel.ProcessEvent) bool { + return assert.Equal(t, pmodel.Exit.String(), event.EventType.String(), "wrong process event type") && + assert.Equal(t, sleepExecutable, event.Exe, "wrong executable path") && + assert.Equal(t, []string{sleepExecutable}, event.Cmdline, "wrong command line") && + assertNearTimeObject(t, event.ExitTime) && + assert.Equal(t, uint32(1), event.ExitCode, "wrong exit code") + }, getEventTimeout, sleepExecutable, pmodel.Exit) + if err != nil { + t.Fatal(err) + } + }) +} diff --git a/pkg/security/tests/fields_test.go b/pkg/security/tests/fields_test.go index d1c0bc531c220d..8cdb309e5846a0 100644 --- a/pkg/security/tests/fields_test.go +++ b/pkg/security/tests/fields_test.go @@ -12,7 +12,7 @@ import ( "os/exec" "testing" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -38,7 +38,7 @@ func TestFieldsResolver(t *testing.T) { test.WaitSignal(t, func() error { _, _, err = test.Create("test-fields") return err - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_fields_open") event.ResolveFields(false) @@ -54,7 +54,7 @@ func TestFieldsResolver(t *testing.T) { cmd := exec.Command(lsExecutable, "test-fields") _ = cmd.Run() return nil - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_fields_exec") event.ResolveFields(false) diff --git a/pkg/security/tests/filters_test.go b/pkg/security/tests/filters_test.go index 1a637d2258d916..b78c36f0a940e7 100644 --- a/pkg/security/tests/filters_test.go +++ b/pkg/security/tests/filters_test.go @@ -206,7 +206,7 @@ func TestFilterOpenLeafDiscarderActivityDump(t *testing.T) { } return syscall.Close(fd) }, func(event eval.Event, field eval.Field, eventType eval.EventType) bool { - e := event.(*probe.Event) + e := event.(*model.Event) if e == nil || (e != nil && e.GetEventType() != model.FileOpenEventType) { return false } @@ -226,7 +226,7 @@ func TestFilterOpenLeafDiscarderActivityDump(t *testing.T) { return err } return syscall.Close(fd) - }, func(event *probe.Event) bool { + }, func(event *model.Event) bool { return event.GetType() == "open" && event.SavedByActivityDumps && event.Open.File.Inode == getInode(t, testFile) @@ -340,7 +340,7 @@ func TestFilterDiscarderMask(t *testing.T) { testFile, testFilePtr, err = test.CreateWithOptions("test-mask", 98, 99, 0o447) return err - }, func(event *probe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_mask_open_rule") }) @@ -373,7 +373,7 @@ func TestFilterDiscarderMask(t *testing.T) { return err } return f.Close() - }, func(event *probe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_mask_open_rule") }) })) @@ -637,7 +637,7 @@ func TestFilterDiscarderRetention(t *testing.T) { } return syscall.Close(fd) }, func(event eval.Event, field eval.Field, eventType eval.EventType) bool { - e := event.(*probe.Event) + e := event.(*model.Event) if e == nil || (e != nil && e.GetEventType() != model.FileOpenEventType) { return false } diff --git a/pkg/security/tests/hardlink_test.go b/pkg/security/tests/hardlink_test.go index b727e4985358f2..8950c654cfe2a1 100644 --- a/pkg/security/tests/hardlink_test.go +++ b/pkg/security/tests/hardlink_test.go @@ -13,7 +13,7 @@ import ( "os/exec" "testing" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -52,7 +52,7 @@ func runHardlinkTests(t *testing.T, opts testOpts) { test.WaitSignal(t, func() error { cmd := exec.Command(testOrigExecutable, "/tmp/test1") return cmd.Run() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_orig") }) @@ -70,7 +70,7 @@ func runHardlinkTests(t *testing.T, opts testOpts) { test.WaitSignal(t, func() error { cmd := exec.Command(testNewExecutable, "/tmp/test2") return cmd.Run() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_link") }) }) @@ -90,14 +90,14 @@ func runHardlinkTests(t *testing.T, opts testOpts) { test.WaitSignal(t, func() error { cmd := exec.Command(testOrigExecutable, "/tmp/test1") return cmd.Run() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_orig") }) test.WaitSignal(t, func() error { cmd := exec.Command(testNewExecutable, "/tmp/test2") return cmd.Run() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_link") }) }) diff --git a/pkg/security/tests/kernel_module_test.go b/pkg/security/tests/kernel_module_test.go index 4c2712b5e52bbd..04700b97bd420e 100644 --- a/pkg/security/tests/kernel_module_test.go +++ b/pkg/security/tests/kernel_module_test.go @@ -20,7 +20,6 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -166,14 +165,14 @@ func TestLoadModule(t *testing.T) { } return unix.DeleteModule(testModuleName, unix.O_NONBLOCK) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "test_load_module_from_memory", r.ID, "invalid rule triggered") - assert.Equal(t, "", event.ResolveFilePath(&event.LoadModule.File), "shouldn't get a path") assert.Equal(t, event.Async, false) - if !validateLoadModuleNoFileSchema(t, event) { - t.Error(event.String()) - } + event.ResolveFields(false) + assert.Equal(t, "", event.LoadModule.File.PathnameStr, "shouldn't get a path") + + test.validateLoadModuleNoFileSchema(t, event) }) }) @@ -191,12 +190,10 @@ func TestLoadModule(t *testing.T) { } return unix.DeleteModule(testModuleName, unix.O_NONBLOCK) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "test_load_module", r.ID, "invalid rule triggered") - if !validateLoadModuleSchema(t, event) { - t.Error(event.String()) - } + test.validateLoadModuleSchema(t, event) }) }) @@ -223,7 +220,7 @@ func TestLoadModule(t *testing.T) { } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "test_load_module_kworker", r.ID, "invalid rule triggered") }) }) @@ -284,12 +281,10 @@ func TestUnloadModule(t *testing.T) { } return unix.DeleteModule(testModuleName, unix.O_NONBLOCK) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "test_unload_module", r.ID, "invalid rule triggered") - if !validateUnloadModuleSchema(t, event) { - t.Error(event.String()) - } + test.validateUnloadModuleSchema(t, event) }) }) } diff --git a/pkg/security/tests/link_test.go b/pkg/security/tests/link_test.go index 166a140a47fbc6..fd0ef1375a73fa 100644 --- a/pkg/security/tests/link_test.go +++ b/pkg/security/tests/link_test.go @@ -19,7 +19,7 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -54,7 +54,7 @@ func TestLink(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "link", event.GetType(), "wrong event type") assert.Equal(t, getInode(t, testNewFile), event.Link.Source.Inode, "wrong inode") assertRights(t, event.Link.Source.Mode, uint16(expectedMode)) @@ -65,9 +65,7 @@ func TestLink(t *testing.T) { assertNearTime(t, event.Link.Target.CTime) assert.Equal(t, event.Async, false) - if !validateLinkSchema(t, event) { - t.Error(event.String()) - } + test.validateLinkSchema(t, event) }) if err = os.Remove(testNewFile); err != nil { @@ -82,7 +80,7 @@ func TestLink(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "link", event.GetType(), "wrong event type") assert.Equal(t, getInode(t, testNewFile), event.Link.Source.Inode, "wrong inode") assertRights(t, event.Link.Source.Mode, uint16(expectedMode)) @@ -93,9 +91,7 @@ func TestLink(t *testing.T) { assertNearTime(t, event.Link.Target.CTime) assert.Equal(t, event.Async, false) - if !validateLinkSchema(t, event) { - t.Error(event.String()) - } + test.validateLinkSchema(t, event) }) if err = os.Remove(testNewFile); err != nil { @@ -138,7 +134,7 @@ func TestLink(t *testing.T) { return fmt.Errorf("failed to create a link with io_uring: %d", ret) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "link", event.GetType(), "wrong event type") assert.Equal(t, getInode(t, testNewFile), event.Link.Source.Inode, "wrong inode") assertRights(t, event.Link.Source.Mode, uint16(expectedMode)) diff --git a/pkg/security/tests/macros_test.go b/pkg/security/tests/macros_test.go index 97572454db7df4..312148c0999069 100644 --- a/pkg/security/tests/macros_test.go +++ b/pkg/security/tests/macros_test.go @@ -14,7 +14,7 @@ import ( "github.com/stretchr/testify/assert" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -53,7 +53,7 @@ func TestMacros(t *testing.T) { return err } return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "mkdir", event.GetType(), "wrong event type") }) } diff --git a/pkg/security/tests/mkdir_test.go b/pkg/security/tests/mkdir_test.go index e9ea4839cdbe65..f9c6de0486222a 100644 --- a/pkg/security/tests/mkdir_test.go +++ b/pkg/security/tests/mkdir_test.go @@ -19,7 +19,7 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -56,7 +56,7 @@ func TestMkdir(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_mkdir") assertRights(t, uint16(event.Mkdir.Mode), mkdirMode) assert.Equal(t, getInode(t, testFile), event.Mkdir.File.Inode, "wrong inode") @@ -79,7 +79,7 @@ func TestMkdir(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_mkdirat") assert.Equal(t, getInode(t, testatFile), event.Mkdir.File.Inode, "wrong inode") assertRights(t, uint16(event.Mkdir.Mode), 0777) @@ -132,7 +132,7 @@ func TestMkdir(t *testing.T) { return fmt.Errorf("failed to create directory with io_uring: %d", ret) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_mkdirat") assert.Equal(t, getInode(t, testatFile), event.Mkdir.File.Inode, "wrong inode") assertRights(t, uint16(event.Mkdir.Mode), 0777) @@ -182,7 +182,7 @@ func TestMkdirError(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "mkdirat-error", testatFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_mkdirat_error") assert.Equal(t, event.Mkdir.Retval, -int64(syscall.EACCES)) }) diff --git a/pkg/security/tests/mmap_test.go b/pkg/security/tests/mmap_test.go index 402e6244471350..d15d40891a045f 100644 --- a/pkg/security/tests/mmap_test.go +++ b/pkg/security/tests/mmap_test.go @@ -16,7 +16,6 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -46,7 +45,7 @@ func TestMMapEvent(t *testing.T) { return fmt.Errorf("couldn't unmap memory segment: %w", err) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "mmap", event.GetType(), "wrong event type") assert.Equal(t, unix.PROT_READ|unix.PROT_WRITE|unix.PROT_EXEC, event.MMap.Protection&(unix.PROT_READ|unix.PROT_WRITE|unix.PROT_EXEC), fmt.Sprintf("wrong protection: %s", model.Protection(event.MMap.Protection))) assert.Equal(t, event.Async, false) @@ -57,9 +56,7 @@ func TestMMapEvent(t *testing.T) { } assertFieldEqual(t, event, "process.file.path", executable) - if !validateMMapSchema(t, event) { - t.Error(event.String()) - } + test.validateMMapSchema(t, event) }) }) } diff --git a/pkg/security/tests/module_tester.go b/pkg/security/tests/module_tester.go index 4674ab95415fcc..eefed825334ec0 100644 --- a/pkg/security/tests/module_tester.go +++ b/pkg/security/tests/module_tester.go @@ -41,10 +41,12 @@ import ( "golang.org/x/sys/unix" sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" + pmodel "github.com/DataDog/datadog-agent/pkg/process/events/model" "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/security/api" "github.com/DataDog/datadog-agent/pkg/security/config" "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" + "github.com/DataDog/datadog-agent/pkg/security/events" "github.com/DataDog/datadog-agent/pkg/security/module" sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" @@ -76,8 +78,8 @@ system_probe_config: enable_runtime_compiler: true runtime_security_config: - enabled: true - fim_enabled: true + enabled: {{ .RuntimeSecurityEnabled }} + event_monitoring.enabled: {{ .EventMonitoringEnabled }} runtime_compilation: enabled: true remote_tagger: false @@ -196,6 +198,8 @@ type testOpts struct { disableMapDentryResolution bool envsWithValue []string disableAbnormalPathCheck bool + disableRuntimeSecurity bool + enableEventMonitoring bool } func (s *stringSlice) String() string { @@ -223,7 +227,10 @@ func (to testOpts) Equal(opts testOpts) bool { to.eventsCountThreshold == opts.eventsCountThreshold && to.disableERPCDentryResolution == opts.disableERPCDentryResolution && to.disableMapDentryResolution == opts.disableMapDentryResolution && - reflect.DeepEqual(to.envsWithValue, opts.envsWithValue) + reflect.DeepEqual(to.envsWithValue, opts.envsWithValue) && + to.disableAbnormalPathCheck == opts.disableAbnormalPathCheck && + to.disableRuntimeSecurity == opts.disableRuntimeSecurity && + to.enableEventMonitoring == opts.enableEventMonitoring } type testModule struct { @@ -242,17 +249,19 @@ type testModule struct { var testMod *testModule -type onRuleHandler func(*sprobe.Event, *rules.Rule) -type onProbeEventHandler func(*sprobe.Event) -type onCustomSendEventHandler func(*rules.Rule, *sprobe.CustomEvent) +type onRuleHandler func(*model.Event, *rules.Rule) +type onProbeEventHandler func(*model.Event) +type onCustomSendEventHandler func(*rules.Rule, *events.CustomEvent) type onDiscarderPushedHandler func(event eval.Event, field eval.Field, eventType eval.EventType) bool +type onProcessEventSendDataHandler func([]byte) type eventHandlers struct { sync.RWMutex - onRuleMatch onRuleHandler - onProbeEvent onProbeEventHandler - onCustomSendEvent onCustomSendEventHandler - onDiscarderPushed onDiscarderPushedHandler + onRuleMatch onRuleHandler + onProbeEvent onProbeEventHandler + onCustomSendEvent onCustomSendEventHandler + onDiscarderPushed onDiscarderPushedHandler + onProcessEventSendData onProcessEventSendDataHandler } //nolint:deadcode,unused @@ -323,16 +332,22 @@ func assertRights(tb testing.TB, actualMode, expectedMode uint16, msgAndArgs ... } //nolint:deadcode,unused -func assertNearTime(tb testing.TB, ns uint64) bool { +func assertNearTimeObject(tb testing.TB, eventTime time.Time) bool { tb.Helper() - now, event := time.Now(), time.Unix(0, int64(ns)) - if event.After(now) || event.Before(now.Add(-1*time.Hour)) { - tb.Errorf("expected time close to %s, got %s", now, event) + now := time.Now() + if eventTime.After(now) || eventTime.Before(now.Add(-1*time.Hour)) { + tb.Errorf("expected time close to %s, got %s", now, eventTime) return false } return true } +//nolint:deadcode,unused +func assertNearTime(tb testing.TB, ns uint64) bool { + tb.Helper() + return assertNearTimeObject(tb, time.Unix(0, int64(ns))) +} + //nolint:deadcode,unused func assertTriggeredRule(tb testing.TB, r *rules.Rule, id string) bool { tb.Helper() @@ -346,7 +361,7 @@ func assertReturnValue(tb testing.TB, retval, expected int64) bool { } //nolint:deadcode,unused -func assertFieldEqual(tb testing.TB, e *sprobe.Event, field string, value interface{}, msgAndArgs ...interface{}) bool { +func assertFieldEqual(tb testing.TB, e *model.Event, field string, value interface{}, msgAndArgs ...interface{}) bool { tb.Helper() fieldValue, err := e.GetFieldValue(field) if err != nil { @@ -357,7 +372,7 @@ func assertFieldEqual(tb testing.TB, e *sprobe.Event, field string, value interf } //nolint:deadcode,unused -func assertFieldNotEqual(tb testing.TB, e *sprobe.Event, field string, value interface{}, msgAndArgs ...interface{}) bool { +func assertFieldNotEqual(tb testing.TB, e *model.Event, field string, value interface{}, msgAndArgs ...interface{}) bool { tb.Helper() fieldValue, err := e.GetFieldValue(field) if err != nil { @@ -368,7 +383,7 @@ func assertFieldNotEqual(tb testing.TB, e *sprobe.Event, field string, value int } //nolint:deadcode,unused -func assertFieldNotEmpty(tb testing.TB, e *sprobe.Event, field string, msgAndArgs ...interface{}) bool { +func assertFieldNotEmpty(tb testing.TB, e *model.Event, field string, msgAndArgs ...interface{}) bool { tb.Helper() fieldValue, err := e.GetFieldValue(field) if err != nil { @@ -379,7 +394,7 @@ func assertFieldNotEmpty(tb testing.TB, e *sprobe.Event, field string, msgAndArg } //nolint:deadcode,unused -func assertFieldContains(tb testing.TB, e *sprobe.Event, field string, value interface{}, msgAndArgs ...interface{}) bool { +func assertFieldContains(tb testing.TB, e *model.Event, field string, value interface{}, msgAndArgs ...interface{}) bool { tb.Helper() fieldValue, err := e.GetFieldValue(field) if err != nil { @@ -390,7 +405,7 @@ func assertFieldContains(tb testing.TB, e *sprobe.Event, field string, value int } //nolint:deadcode,unused -func assertFieldIsOneOf(tb testing.TB, e *sprobe.Event, field string, possibleValues interface{}, msgAndArgs ...interface{}) bool { +func assertFieldIsOneOf(tb testing.TB, e *model.Event, field string, possibleValues interface{}, msgAndArgs ...interface{}) bool { tb.Helper() fieldValue, err := e.GetFieldValue(field) if err != nil { @@ -401,7 +416,7 @@ func assertFieldIsOneOf(tb testing.TB, e *sprobe.Event, field string, possibleVa } //nolint:deadcode,unused -func assertFieldStringArrayIndexedOneOf(tb *testing.T, e *sprobe.Event, field string, index int, values []string, msgAndArgs ...interface{}) bool { +func assertFieldStringArrayIndexedOneOf(tb *testing.T, e *model.Event, field string, index int, values []string, msgAndArgs ...interface{}) bool { tb.Helper() fieldValue, err := e.GetFieldValue(field) if err != nil { @@ -418,16 +433,25 @@ func assertFieldStringArrayIndexedOneOf(tb *testing.T, e *sprobe.Event, field st } //nolint:deadcode,unused -func validateProcessContextLineage(tb testing.TB, event *sprobe.Event) bool { +func validateProcessContextLineage(tb testing.TB, event *model.Event, probe *sprobe.Probe) { + eventJSON, err := sprobe.MarshalEvent(event, probe) + if err != nil { + tb.Errorf("failed to marshal event: %v", err) + return + } + var data interface{} - if err := json.Unmarshal([]byte(event.String()), &data); err != nil { + if err := json.Unmarshal(eventJSON, &data); err != nil { tb.Error(err) + tb.Error(eventJSON) + return } json, err := jsonpath.JsonPathLookup(data, "$.process.ancestors") if err != nil { tb.Errorf("should have a process context with ancestors, got %+v (%s)", json, spew.Sdump(data)) - return false + tb.Error(eventJSON) + return } var prevPID, prevPPID float64 @@ -436,19 +460,22 @@ func validateProcessContextLineage(tb testing.TB, event *sprobe.Event) bool { pce, ok := entry.(map[string]interface{}) if !ok { tb.Errorf("invalid process cache entry, %+v", entry) - return false + tb.Error(eventJSON) + return } pid, ok := pce["pid"].(float64) if !ok || pid == 0 { tb.Errorf("invalid pid, %+v", pce) - return false + tb.Error(eventJSON) + return } // check lineage, exec should have the exact same pid, fork pid/ppid relationship if prevPID != 0 && pid != prevPID && pid != prevPPID { tb.Errorf("invalid process tree, parent/child broken (%f -> %f/%f), %+v", pid, prevPID, prevPPID, json) - return false + tb.Error(eventJSON) + return } prevPID = pid @@ -456,7 +483,8 @@ func validateProcessContextLineage(tb testing.TB, event *sprobe.Event) bool { ppid, ok := pce["ppid"].(float64) if !ok { tb.Errorf("invalid pid, %+v", pce) - return false + tb.Error(eventJSON) + return } prevPPID = ppid @@ -465,13 +493,12 @@ func validateProcessContextLineage(tb testing.TB, event *sprobe.Event) bool { if prevPID != 1 { tb.Errorf("invalid process tree, last ancestor should be pid 1, %+v", json) + tb.Error(eventJSON) } - - return true } //nolint:deadcode,unused -func validateProcessContextSECL(tb testing.TB, event *sprobe.Event) bool { +func validateProcessContextSECL(tb testing.TB, event *model.Event, probe *sprobe.Probe) { // Process file name values cannot be blank nameFields := []string{ "process.file.name", @@ -493,10 +520,19 @@ func validateProcessContextSECL(tb testing.TB, event *sprobe.Event) bool { pathFieldValid, _ = checkProcessContextFieldsForBlankValues(tb, event, pathFields) } - return nameFieldValid && pathFieldValid + valid := nameFieldValid && pathFieldValid + + if !valid { + eventJSON, err := sprobe.MarshalEvent(event, probe) + if err != nil { + tb.Errorf("failed to marshal event: %v", err) + return + } + tb.Error(eventJSON) + } } -func checkProcessContextFieldsForBlankValues(tb testing.TB, event *sprobe.Event, fieldNamesToCheck []string) (bool, bool) { +func checkProcessContextFieldsForBlankValues(tb testing.TB, event *model.Event, fieldNamesToCheck []string) (bool, bool) { validField := true hasPath := true @@ -537,31 +573,26 @@ func checkProcessContextFieldsForBlankValues(tb testing.TB, event *sprobe.Event, } //nolint:deadcode,unused -func validateProcessContext(tb testing.TB, event *sprobe.Event) { +func validateProcessContext(tb testing.TB, event *model.Event, probe *sprobe.Probe) { if event.ProcessContext.IsKworker { return } - if !validateProcessContextLineage(tb, event) { - tb.Error(event.String()) - } - - if !validateProcessContextSECL(tb, event) { - tb.Error(event.String()) - } + validateProcessContextLineage(tb, event, probe) + validateProcessContextSECL(tb, event, probe) } //nolint:deadcode,unused -func validateEvent(tb testing.TB, validate func(event *sprobe.Event, rule *rules.Rule)) func(event *sprobe.Event, rule *rules.Rule) { - return func(event *sprobe.Event, rule *rules.Rule) { - validateProcessContext(tb, event) +func validateEvent(tb testing.TB, validate func(event *model.Event, rule *rules.Rule), probe *sprobe.Probe) func(event *model.Event, rule *rules.Rule) { + return func(event *model.Event, rule *rules.Rule) { + validateProcessContext(tb, event, probe) validate(event, rule) } } //nolint:deadcode,unused -func validateExecEvent(tb *testing.T, kind wrapperType, validate func(event *sprobe.Event, rule *rules.Rule)) func(event *sprobe.Event, rule *rules.Rule) { - return func(event *sprobe.Event, rule *rules.Rule) { +func (tm *testModule) validateExecEvent(tb *testing.T, kind wrapperType, validate func(event *model.Event, rule *rules.Rule)) func(event *model.Event, rule *rules.Rule) { + return func(event *model.Event, rule *rules.Rule) { validate(event, rule) if kind == dockerWrapperType { @@ -569,9 +600,7 @@ func validateExecEvent(tb *testing.T, kind wrapperType, validate func(event *spr assertFieldNotEmpty(tb, event, "process.container.id", "process container id not found") } - if !validateExecSchema(tb, event) { - tb.Error(event.String()) - } + tm.validateExecSchema(tb, event) } } @@ -651,6 +680,11 @@ func genTestConfig(dir string, opts testOpts) (*config.Config, error) { mapDentryResolutionEnabled = false } + runtimeSecurityEnabled := true + if opts.disableRuntimeSecurity { + runtimeSecurityEnabled = false + } + buffer := new(bytes.Buffer) if err := tmpl.Execute(buffer, map[string]interface{}{ "TestPoliciesDir": dir, @@ -669,6 +703,8 @@ func genTestConfig(dir string, opts testOpts) (*config.Config, error) { "LogPatterns": logPatterns, "LogTags": logTags, "EnvsWithValue": opts.envsWithValue, + "RuntimeSecurityEnabled": runtimeSecurityEnabled, + "EventMonitoringEnabled": opts.enableEventMonitoring, }); err != nil { return nil, err } @@ -830,7 +866,7 @@ func newTestModule(t testing.TB, macroDefs []*rules.MacroDefinition, ruleDefs [] return testMod, nil } -func (tm *testModule) HandleEvent(event *sprobe.Event) { +func (tm *testModule) HandleEvent(event *model.Event) { tm.eventHandlers.RLock() defer tm.eventHandlers.RUnlock() @@ -839,21 +875,30 @@ func (tm *testModule) HandleEvent(event *sprobe.Event) { } } -func (tm *testModule) HandleCustomEvent(rule *rules.Rule, event *sprobe.CustomEvent) {} +func (tm *testModule) HandleCustomEvent(rule *rules.Rule, event *events.CustomEvent) {} func (tm *testModule) SendEvent(rule *rules.Rule, event module.Event, extTagsCb func() []string, service string) { tm.eventHandlers.RLock() defer tm.eventHandlers.RUnlock() switch ev := event.(type) { - case *sprobe.Event: - case *sprobe.CustomEvent: + case *model.Event: + case *events.CustomEvent: if tm.eventHandlers.onCustomSendEvent != nil { tm.eventHandlers.onCustomSendEvent(rule, ev) } } } +func (tm *testModule) SendProcessEventData(data []byte) { + tm.eventHandlers.RLock() + defer tm.eventHandlers.RUnlock() + + if tm.eventHandlers.onProcessEventSendData != nil { + tm.eventHandlers.onProcessEventSendData(data) + } +} + func (tm *testModule) Run(t *testing.T, name string, fnc func(t *testing.T, kind wrapperType, cmd func(bin string, args []string, envs []string) *exec.Cmd)) { tm.cmdWrapper.Run(t, name, fnc) } @@ -884,7 +929,7 @@ func (tm *testModule) RuleMatch(rule *rules.Rule, event eval.Event) { tm.eventHandlers.RUnlock() if callback != nil { - callback(event.(*sprobe.Event), rule) + callback(event.(*model.Event), rule) } } @@ -897,7 +942,7 @@ func (tm *testModule) RegisterDiscarderPushedHandler(cb onDiscarderPushedHandler tm.eventHandlers.Unlock() } -func (tm *testModule) NotifyDiscarderPushedCallback(eventType string, event *sprobe.Event, field string) { +func (tm *testModule) NotifyDiscarderPushedCallback(eventType string, event *model.Event, field string) { tm.eventHandlers.RLock() callback := tm.eventHandlers.onDiscarderPushed tm.eventHandlers.RUnlock() @@ -954,6 +999,21 @@ func (tm *testModule) GetEventDiscarder(tb testing.TB, action func() error, cb o } } +//nolint:deadcode,unused +func (tm *testModule) marshalEvent(ev *model.Event) (string, error) { + b, err := sprobe.MarshalEvent(ev, tm.probe) + return string(b), err +} + +//nolint:deadcode,unused +func (tm *testModule) debugEvent(ev *model.Event) string { + b, err := tm.marshalEvent(ev) + if err != nil { + return err.Error() + } + return string(b) +} + // GetStatusMetrics returns a string representation of the perf buffer monitor metrics func GetStatusMetrics(probe *sprobe.Probe) string { if probe == nil { @@ -1023,7 +1083,7 @@ func (err ErrSkipTest) Error() string { func (tm *testModule) WaitSignal(tb testing.TB, action func() error, cb onRuleHandler) { tb.Helper() - if err := tm.GetSignal(tb, action, validateEvent(tb, cb)); err != nil { + if err := tm.GetSignal(tb, action, validateEvent(tb, cb, tm.probe)); err != nil { if _, ok := err.(ErrSkipTest); ok { tb.Skip(err) } else { @@ -1041,7 +1101,7 @@ func (tm *testModule) GetSignal(tb testing.TB, action func() error, cb onRuleHan message := make(chan ActionMessage, 1) failNow := make(chan bool, 1) - tm.RegisterRuleEventHandler(func(e *sprobe.Event, r *rules.Rule) { + tm.RegisterRuleEventHandler(func(e *model.Event, r *rules.Rule) { tb.Helper() select { case <-ctx.Done(): @@ -1086,14 +1146,14 @@ func (tm *testModule) RegisterRuleEventHandler(cb onRuleHandler) { tm.eventHandlers.Unlock() } -func (tm *testModule) GetCustomEventSent(tb testing.TB, action func() error, cb func(rule *rules.Rule, event *sprobe.CustomEvent) bool, timeout time.Duration, eventType ...model.EventType) error { +func (tm *testModule) GetCustomEventSent(tb testing.TB, action func() error, cb func(rule *rules.Rule, event *events.CustomEvent) bool, timeout time.Duration, eventType ...model.EventType) error { tb.Helper() ctx, cancel := context.WithCancel(context.Background()) defer cancel() message := make(chan ActionMessage, 1) - tm.RegisterCustomSendEventHandler(func(rule *rules.Rule, event *sprobe.CustomEvent) { + tm.RegisterCustomSendEventHandler(func(rule *rules.Rule, event *events.CustomEvent) { if len(eventType) > 0 { if event.GetEventType() != eventType[0] { return @@ -1144,13 +1204,19 @@ func (tm *testModule) RegisterCustomSendEventHandler(cb onCustomSendEventHandler tm.eventHandlers.Unlock() } -func (tm *testModule) GetProbeEvent(action func() error, cb func(event *sprobe.Event) bool, timeout time.Duration, eventTypes ...model.EventType) error { +func (tm *testModule) RegisterProcessEventSendDataHandler(cb onProcessEventSendDataHandler) { + tm.eventHandlers.Lock() + tm.eventHandlers.onProcessEventSendData = cb + tm.eventHandlers.Unlock() +} + +func (tm *testModule) GetProbeEvent(action func() error, cb func(event *model.Event) bool, timeout time.Duration, eventTypes ...model.EventType) error { ctx, cancel := context.WithCancel(context.Background()) defer cancel() message := make(chan ActionMessage, 1) - tm.RegisterProbeEventHandler(func(event *sprobe.Event) { + tm.RegisterProbeEventHandler(func(event *model.Event) { if len(eventTypes) > 0 { match := false for _, eventType := range eventTypes { @@ -1200,6 +1266,72 @@ func (tm *testModule) GetProbeEvent(action func() error, cb func(event *sprobe.E } } +func (tm *testModule) GetProcessEvent(action func() error, cb func(event *pmodel.ProcessEvent) bool, timeout time.Duration, executablePath string, eventTypes ...pmodel.EventType) error { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + message := make(chan ActionMessage, 1) + var event pmodel.ProcessEvent + + tm.RegisterProcessEventSendDataHandler(func(data []byte) { + if _, err := event.UnmarshalMsg(data); err != nil { + tm.t.Logf("failed to unmarshall process event: %v\n", err) + return + } + + if len(eventTypes) > 0 { + match := false + for _, eventType := range eventTypes { + if event.EventType == eventType { + match = true + break + } + } + if !match { + return + } + } + + if executablePath != "" && event.Exe != executablePath { + return + } + + select { + case <-ctx.Done(): + return + case msg := <-message: + switch msg { + case Continue: + if cb(&event) { + cancel() + } else { + message <- Continue + } + case Skip: + cancel() + } + } + }) + defer tm.RegisterProcessEventSendDataHandler(nil) + + if action == nil { + message <- Continue + } else { + if err := action(); err != nil { + message <- Skip + return err + } + message <- Continue + } + + select { + case <-time.After(timeout): + return NewTimeoutError(tm.probe) + case <-ctx.Done(): + return nil + } +} + func (tm *testModule) Path(filename ...string) (string, unsafe.Pointer, error) { return tm.st.Path(filename...) } @@ -1321,7 +1453,9 @@ func (tm *testModule) validateAbnormalPaths() { } func (tm *testModule) Close() { - tm.module.SendStats() + if tm.config.RuntimeEnabled { + tm.module.SendStats() + } if !tm.opts.disableAbnormalPathCheck { tm.validateAbnormalPaths() @@ -1484,7 +1618,7 @@ func ifSyscallSupported(syscall string, test func(t *testing.T, syscallNB uintpt // //nolint:deadcode,unused func waitForProbeEvent(test *testModule, action func() error, key string, value interface{}, eventType model.EventType) error { - return test.GetProbeEvent(action, func(event *sprobe.Event) bool { + return test.GetProbeEvent(action, func(event *model.Event) bool { if v, _ := event.GetFieldValue(key); v == value { return true } diff --git a/pkg/security/tests/mount_test.go b/pkg/security/tests/mount_test.go index b58735a0ae382c..4581ca1cf6a9cd 100644 --- a/pkg/security/tests/mount_test.go +++ b/pkg/security/tests/mount_test.go @@ -21,7 +21,6 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" "github.com/DataDog/datadog-agent/pkg/security/utils" @@ -67,7 +66,7 @@ func TestMount(t *testing.T) { return fmt.Errorf("could not create bind mount: %w", err) } return nil - }, func(event *sprobe.Event) bool { + }, func(event *model.Event) bool { mntID = event.Mount.MountID if !assert.Equal(t, "mount", event.GetType(), "wrong event type") { @@ -102,7 +101,7 @@ func TestMount(t *testing.T) { test.WaitSignal(t, func() error { return os.Chmod(file, 0707) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "chmod", event.GetType(), "wrong event type") assert.Equal(t, file, event.Chmod.File.PathnameStr, "wrong path") }) @@ -121,7 +120,7 @@ func TestMount(t *testing.T) { return fmt.Errorf("could not unmount test-mount: %w", err) } return nil - }, func(event *sprobe.Event) bool { + }, func(event *model.Event) bool { if !assert.Equal(t, "umount", event.GetType(), "wrong event type") { return true } @@ -141,7 +140,7 @@ func TestMount(t *testing.T) { t.Run("release-mount", func(t *testing.T) { test.WaitSignal(t, func() error { return syscall.Fchownat(int(releaseFile.Fd()), "", 123, 123, unix.AT_EMPTY_PATH) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assertTriggeredRule(t, rule, "test_rule_pending") }) @@ -225,7 +224,7 @@ func TestMountPropagated(t *testing.T) { t.Run("bind-mounted-chmod", func(t *testing.T) { test.WaitSignal(t, func() error { return os.Chmod(file, 0700) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { t.Log(event.Open.File.PathnameStr) assert.Equal(t, "chmod", event.GetType(), "wrong event type") assert.Equal(t, file, event.Chmod.File.PathnameStr, "wrong path") @@ -434,14 +433,13 @@ func TestMountEvent(t *testing.T) { return err } return tmpfsMount.unmount(syscall.MNT_FORCE) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_mount_tmpfs") assertFieldEqual(t, event, "mount.mountpoint.path", tmpfsMountPointPath) assertFieldEqual(t, event, "mount.fs_type", "tmpfs") assertFieldEqual(t, event, "process.file.path", executable) - if !validateMountSchema(t, event) { - t.Error(event.String()) - } + + test.validateMountSchema(t, event) }) }) @@ -457,15 +455,14 @@ func TestMountEvent(t *testing.T) { return err } return bindMount.unmount(syscall.MNT_FORCE) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_mount_bind") assertFieldEqual(t, event, "mount.mountpoint.path", bindMountPointPath) assertFieldEqual(t, event, "mount.source.path", bindMountSourcePath) assertFieldEqual(t, event, "mount.fs_type", testDrive.FSType()) assertFieldEqual(t, event, "process.file.path", executable) - if !validateMountSchema(t, event) { - t.Error(event.String()) - } + + test.validateMountSchema(t, event) }) }) @@ -485,15 +482,14 @@ func TestMountEvent(t *testing.T) { return err } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_mount_in_container_root") assertFieldEqual(t, event, "mount.mountpoint.path", "/host_root") assertFieldEqual(t, event, "mount.source.path", "/") assertFieldNotEqual(t, event, "mount.fs_type", "overlay") assertFieldNotEmpty(t, event, "container.id", "container id shouldn't be empty") - if !validateMountSchema(t, event) { - t.Error(event.String()) - } + + test.validateMountSchema(t, event) }) }) @@ -515,8 +511,8 @@ func TestMountEvent(t *testing.T) { return err } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { - t.Errorf("shouldn't get an event: event %s matched rule %s", event, rule.Expression) + }, func(event *model.Event, rule *rules.Rule) { + t.Errorf("shouldn't get an event: event %s matched rule %s", test.debugEvent(event), rule.Expression) }) if err == nil { t.Error("shouldn't get an event") diff --git a/pkg/security/tests/mprotect_test.go b/pkg/security/tests/mprotect_test.go index 8b3ba226edbff7..3c3edea595fb2d 100644 --- a/pkg/security/tests/mprotect_test.go +++ b/pkg/security/tests/mprotect_test.go @@ -16,7 +16,6 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -47,7 +46,7 @@ func TestMProtectEvent(t *testing.T) { return fmt.Errorf("couldn't mprotect segment: %w", err) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "mprotect", event.GetType(), "wrong event type") assert.Equal(t, unix.PROT_READ|unix.PROT_WRITE, event.MProtect.VMProtection&(unix.PROT_READ|unix.PROT_WRITE), fmt.Sprintf("wrong initial protection: %s", model.Protection(event.MProtect.VMProtection))) assert.Equal(t, unix.PROT_READ|unix.PROT_WRITE|unix.PROT_EXEC, event.MProtect.ReqProtection&(unix.PROT_READ|unix.PROT_WRITE|unix.PROT_EXEC), fmt.Sprintf("wrong requested protection: %s", model.Protection(event.MProtect.ReqProtection))) @@ -59,9 +58,7 @@ func TestMProtectEvent(t *testing.T) { } assertFieldEqual(t, event, "process.file.path", executable) - if !validateMProtectSchema(t, event) { - t.Error(event.String()) - } + test.validateMProtectSchema(t, event) }) }) } diff --git a/pkg/security/tests/network_device_test.go b/pkg/security/tests/network_device_test.go index ac55f2db93972f..531ea5d4f016d0 100644 --- a/pkg/security/tests/network_device_test.go +++ b/pkg/security/tests/network_device_test.go @@ -20,7 +20,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" "github.com/DataDog/datadog-agent/pkg/security/utils" @@ -78,7 +77,7 @@ func TestNetDevice(t *testing.T) { testNetns = uint32(stat.Ino) return nil - }, func(event *sprobe.Event) bool { + }, func(event *model.Event) bool { if !assert.Equal(t, "net_device", event.GetType(), "wrong event type") { return true } @@ -95,7 +94,7 @@ func TestNetDevice(t *testing.T) { err = test.GetProbeEvent(func() error { cmd := exec.Command(executable, "link", "add", "host-eth0", "type", "veth", "peer", "name", "ns-eth0", "netns", "test_netns") return cmd.Run() - }, func(event *sprobe.Event) bool { + }, func(event *model.Event) bool { if !assert.Equal(t, "veth_pair", event.GetType(), "wrong event type") { return true } @@ -119,7 +118,7 @@ func TestNetDevice(t *testing.T) { cmd = exec.Command(executable, "link", "set", "ns-eth1", "netns", "test_netns") return cmd.Run() - }, func(event *sprobe.Event) bool { + }, func(event *model.Event) bool { if !assert.Equal(t, "veth_pair", event.GetType(), "wrong event type") { return true } diff --git a/pkg/security/tests/network_test.go b/pkg/security/tests/network_test.go index df94a4ce3c1d78..37d76e75ffe170 100644 --- a/pkg/security/tests/network_test.go +++ b/pkg/security/tests/network_test.go @@ -19,7 +19,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -60,13 +60,11 @@ func TestNetworkCIDR(t *testing.T) { return err } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "dns", event.GetType(), "wrong event type") assert.Equal(t, "google.com", event.DNS.Name, "wrong domain name") - if !validateDNSSchema(t, event) { - t.Error(event.String()) - } + test.validateDNSSchema(t, event) }) }) } diff --git a/pkg/security/tests/open_test.go b/pkg/security/tests/open_test.go index 928a53a16d9202..65b77769ff90fb 100644 --- a/pkg/security/tests/open_test.go +++ b/pkg/security/tests/open_test.go @@ -25,7 +25,7 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -55,16 +55,14 @@ func TestOpen(t *testing.T) { return error(errno) } return syscall.Close(int(fd)) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") assert.Equal(t, syscall.O_CREAT, int(event.Open.Flags), "wrong flags") assertRights(t, uint16(event.Open.Mode), 0755) assert.Equal(t, getInode(t, testFile), event.Open.File.Inode, "wrong inode") assert.Equal(t, event.Async, false) - if !validateOpenSchema(t, event) { - t.Error(event.String()) - } + test.validateOpenSchema(t, event) }) })) @@ -77,7 +75,7 @@ func TestOpen(t *testing.T) { return error(errno) } return syscall.Close(int(fd)) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") assert.Equal(t, syscall.O_CREAT, int(event.Open.Flags), "wrong flags") assertRights(t, uint16(event.Open.Mode), 0711) @@ -103,7 +101,7 @@ func TestOpen(t *testing.T) { return error(errno) } return syscall.Close(int(fd)) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") assert.Equal(t, syscall.O_CREAT, int(event.Open.Flags), "wrong flags") assertRights(t, uint16(event.Open.Mode), 0711) @@ -121,7 +119,7 @@ func TestOpen(t *testing.T) { return error(errno) } return syscall.Close(int(fd)) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") assert.Equal(t, syscall.O_CREAT|syscall.O_WRONLY|syscall.O_TRUNC, int(event.Open.Flags), "wrong flags") assertRights(t, uint16(event.Open.Mode), 0711) @@ -145,7 +143,7 @@ func TestOpen(t *testing.T) { } return f.Close() - }, func(event *sprobe.Event, r *rules.Rule) {}) + }, func(event *model.Event, r *rules.Rule) {}) test.WaitSignal(t, func() error { // truncate @@ -154,7 +152,7 @@ func TestOpen(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") assert.Equal(t, syscall.O_CREAT|syscall.O_WRONLY|syscall.O_TRUNC, int(event.Open.Flags), "wrong flags") assert.Equal(t, getInode(t, testFile), event.Open.File.Inode, "wrong inode") @@ -172,7 +170,7 @@ func TestOpen(t *testing.T) { return err } return f.Close() - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") }) @@ -198,7 +196,7 @@ func TestOpen(t *testing.T) { return fmt.Errorf("OpenByHandleAt: %w", err) } return unix.Close(fdInt) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") assert.Equal(t, syscall.O_CREAT, int(event.Open.Flags), "wrong flags") assert.Equal(t, getInode(t, testFile), event.Open.File.Inode, "wrong inode") @@ -215,7 +213,7 @@ func TestOpen(t *testing.T) { return err } return f.Close() - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") }) if err != nil { @@ -258,7 +256,7 @@ func TestOpen(t *testing.T) { } return unix.Close(fd) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") // O_LARGEFILE is added by io_uring during __io_openat_prep assert.Equal(t, syscall.O_CREAT, int(event.Open.Flags&0xfff), "wrong flags") @@ -298,7 +296,7 @@ func TestOpen(t *testing.T) { } return unix.Close(fd) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") // O_LARGEFILE is added by io_uring during __io_openat_prep assert.Equal(t, syscall.O_CREAT, int(event.Open.Flags&0xfff), "wrong flags") @@ -347,7 +345,7 @@ func TestOpenMetadata(t *testing.T) { return err } return f.Close() - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") assertRights(t, event.Open.File.Mode, expectedMode) assert.Equal(t, getInode(t, testFile), event.Open.File.Inode, "wrong inode") diff --git a/pkg/security/tests/overlayfs_test.go b/pkg/security/tests/overlayfs_test.go index 7046a20a6851e2..3158e031fa430c 100644 --- a/pkg/security/tests/overlayfs_test.go +++ b/pkg/security/tests/overlayfs_test.go @@ -21,7 +21,7 @@ import ( "golang.org/x/sys/unix" "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -181,7 +181,7 @@ func TestOverlayFS(t *testing.T) { return err } return f.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testFile) inUpperLayer, _ := event.GetFieldValue("open.file.in_upper_layer") @@ -195,7 +195,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -217,7 +217,7 @@ func TestOverlayFS(t *testing.T) { return err } return f.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testFile) inUpperLayer, _ := event.GetFieldValue("open.file.in_upper_layer") @@ -231,7 +231,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -253,7 +253,7 @@ func TestOverlayFS(t *testing.T) { return err } return f.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testFile) inUpperLayer, _ := event.GetFieldValue("open.file.in_upper_layer") @@ -267,7 +267,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -290,7 +290,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Rename(oldFile, newFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { success := true if value, _ := event.GetFieldValue("rename.file.path"); value.(string) != oldFile { @@ -315,7 +315,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(newFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -341,7 +341,7 @@ func TestOverlayFS(t *testing.T) { return err } return f.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_parent") }) @@ -360,7 +360,7 @@ func TestOverlayFS(t *testing.T) { return err } return f.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_renamed_parent") }) }) @@ -375,7 +375,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testDir) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("rmdir.file.in_upper_layer") assert.Equal(t, inode, event.Rmdir.File.Inode, "wrong rmdir inode") @@ -393,7 +393,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Chmod(testFile, 0777) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testFile) inUpperLayer, _ := event.GetFieldValue("chmod.file.in_upper_layer") @@ -407,7 +407,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -425,7 +425,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return syscall.Mkdir(testFile, 0777) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testFile) inUpperLayer, _ := event.GetFieldValue("mkdir.file.in_upper_layer") @@ -439,7 +439,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("rmdir.file.in_upper_layer") assert.Equal(t, inode, event.Rmdir.File.Inode, "wrong rmdir inode") @@ -457,7 +457,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Chtimes(testFile, time.Now(), time.Now()) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testFile) inUpperLayer, _ := event.GetFieldValue("utimes.file.in_upper_layer") @@ -471,7 +471,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -489,7 +489,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Chown(testFile, os.Getuid(), os.Getgid()) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testFile) inUpperLayer, _ := event.GetFieldValue("chown.file.in_upper_layer") @@ -503,7 +503,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -532,7 +532,7 @@ func TestOverlayFS(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testFile) inUpperLayer, _ := event.GetFieldValue("setxattr.file.in_upper_layer") @@ -546,7 +546,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -564,7 +564,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Truncate(testFile, 0) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testFile) inUpperLayer, _ := event.GetFieldValue("open.file.in_upper_layer") @@ -578,7 +578,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -601,7 +601,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Link(testSrc, testTarget) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testSrc) success := assert.Equal(t, inode, event.Link.Source.Inode, "wrong link source inode") @@ -619,7 +619,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testSrc) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") success := assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -632,7 +632,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testTarget) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") diff --git a/pkg/security/tests/probe_monitor_test.go b/pkg/security/tests/probe_monitor_test.go index e26d520799f7fb..e67469a08c45ad 100644 --- a/pkg/security/tests/probe_monitor_test.go +++ b/pkg/security/tests/probe_monitor_test.go @@ -19,8 +19,8 @@ import ( "github.com/stretchr/testify/assert" + "github.com/DataDog/datadog-agent/pkg/security/events" "github.com/DataDog/datadog-agent/pkg/security/metrics" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -53,8 +53,8 @@ func TestRulesetLoaded(t *testing.T) { err = test.GetCustomEventSent(t, func() error { // force a reload return syscall.Kill(syscall.Getpid(), syscall.SIGHUP) - }, func(rule *rules.Rule, customEvent *sprobe.CustomEvent) bool { - assert.Equal(t, sprobe.RulesetLoadedRuleID, rule.ID, "wrong rule") + }, func(rule *rules.Rule, customEvent *events.CustomEvent) bool { + assert.Equal(t, events.RulesetLoadedRuleID, rule.ID, "wrong rule") test.module.SendStats() @@ -106,8 +106,8 @@ func truncatedParents(t *testing.T, opts testOpts) { return err } return f.Close() - }, func(rule *rules.Rule, customEvent *sprobe.CustomEvent) bool { - assert.Equal(t, sprobe.AbnormalPathRuleID, rule.ID, "wrong rule") + }, func(rule *rules.Rule, customEvent *events.CustomEvent) bool { + assert.Equal(t, events.AbnormalPathRuleID, rule.ID, "wrong rule") return true }, getEventTimeout, model.CustomTruncatedParentsEventType) if err != nil { @@ -120,7 +120,7 @@ func truncatedParents(t *testing.T, opts testOpts) { return err } return f.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { // check the length of the filepath that triggered the custom event filepath, err := event.GetFieldValue("open.file.path") if err == nil { @@ -187,8 +187,8 @@ func TestNoisyProcess(t *testing.T) { } } return nil - }, func(rule *rules.Rule, customEvent *sprobe.CustomEvent) bool { - assert.Equal(t, sprobe.NoisyProcessRuleID, rule.ID, "wrong rule") + }, func(rule *rules.Rule, customEvent *events.CustomEvent) bool { + assert.Equal(t, events.NoisyProcessRuleID, rule.ID, "wrong rule") return true }, getEventTimeout, model.CustomNoisyProcessEventType) if err != nil { diff --git a/pkg/security/tests/process_test.go b/pkg/security/tests/process_test.go index 88f42543a8e52d..a35b88db64f1b1 100644 --- a/pkg/security/tests/process_test.go +++ b/pkg/security/tests/process_test.go @@ -35,7 +35,6 @@ import ( "github.com/syndtr/gocapability/capability" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" @@ -64,7 +63,7 @@ func TestProcess(t *testing.T) { return err } return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule") }) } @@ -188,8 +187,8 @@ func TestProcessContext(t *testing.T) { os.Remove(testFile) return nil - }, func(event *sprobe.Event, rule *rules.Rule) { - t.Errorf("shouldn't get an event: got event: %s", event) + }, func(event *model.Event, rule *rules.Rule) { + t.Errorf("shouldn't get an event: got event: %s", test.debugEvent(event)) }) if err == nil { t.Fatal("shouldn't get an event") @@ -209,7 +208,7 @@ func TestProcessContext(t *testing.T) { os.Remove(testFile) return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_exec_time_2") }) }) @@ -232,7 +231,7 @@ func TestProcessContext(t *testing.T) { } return f.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertFieldEqual(t, event, "process.file.path", executable) entry, _ := event.ResolveProcessCacheEntry() @@ -249,7 +248,7 @@ func TestProcessContext(t *testing.T) { // we need to ignore the error because "--password" is not a valid option for ls _ = cmd.Run() return nil - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, kind, func(event *model.Event, rule *rules.Rule) { argv0, err := event.GetFieldValue("exec.argv0") if err != nil { t.Errorf("not able to get argv0") @@ -295,7 +294,10 @@ func TestProcessContext(t *testing.T) { } // trigger serialization to test scrubber - str := event.String() + str, err := test.marshalEvent(event) + if err != nil { + t.Error(err) + } if !strings.Contains(str, "password") || !strings.Contains(str, "custom") { t.Error("args not serialized") @@ -315,7 +317,7 @@ func TestProcessContext(t *testing.T) { cmd := cmdFunc("ls", args, envs) _ = cmd.Run() return nil - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, kind, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_envp", rule.ID, "wrong rule triggered") })) }) @@ -326,7 +328,7 @@ func TestProcessContext(t *testing.T) { test.WaitSignal(t, func() error { cmd := exec.Command(lsExecutable, "-ll") return cmd.Run() - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_argv") })) }) @@ -337,7 +339,7 @@ func TestProcessContext(t *testing.T) { test.WaitSignal(t, func() error { cmd := exec.Command(lsExecutable, "-ls", "--escape") return cmd.Run() - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_args_flags") })) }) @@ -348,7 +350,7 @@ func TestProcessContext(t *testing.T) { test.WaitSignal(t, func() error { cmd := exec.Command(lsExecutable, "--block-size", "123") return cmd.Run() - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_args_options") })) }) @@ -369,7 +371,7 @@ func TestProcessContext(t *testing.T) { // we need to ignore the error because the string of "a" generates a "File name too long" error _ = cmd.Run() return nil - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, kind, func(event *model.Event, rule *rules.Rule) { args, err := event.GetFieldValue("exec.args") if err != nil { t.Errorf("not able to get args") @@ -409,21 +411,21 @@ func TestProcessContext(t *testing.T) { args = append(args, eval.RandString(50)) } - test.WaitSignal(t, func() error { + test.GetSignal(t, func() error { cmd := cmdFunc("ls", args, envs) // we need to ignore the error because the string of "a" generates a "File name too long" error _ = cmd.Run() return nil - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { execArgs, err := event.GetFieldValue("exec.args") if err != nil { t.Errorf("not able to get args") } argv := strings.Split(execArgs.(string), " ") - assert.Equal(t, 132, len(argv), "incorrect number of args: %s", argv) + assert.Equal(t, 459, len(argv), "incorrect number of args: %s", argv) - for i := 0; i != 132; i++ { + for i := 0; i != 459; i++ { assert.Equal(t, args[i], argv[i], "expected arg not found") } @@ -435,7 +437,7 @@ func TestProcessContext(t *testing.T) { if !truncated.(bool) { t.Errorf("arg not truncated: %s", execArgs.(string)) } - })) + }) }) test.Run(t, "args-overflow-list-500", func(t *testing.T, kind wrapperType, cmdFunc func(cmd string, args []string, envs []string) *exec.Cmd) { @@ -450,21 +452,21 @@ func TestProcessContext(t *testing.T) { args = append(args, eval.RandString(500)) } - test.WaitSignal(t, func() error { + test.GetSignal(t, func() error { cmd := cmdFunc("ls", args, envs) // we need to ignore the error because the string of "a" generates a "File name too long" error _ = cmd.Run() return nil - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { execArgs, err := event.GetFieldValue("exec.args") if err != nil { t.Errorf("not able to get args") } argv := strings.Split(execArgs.(string), " ") - assert.Equal(t, 159, len(argv), "incorrect number of args: %s", argv) + assert.Equal(t, 474, len(argv), "incorrect number of args: %s", argv) - for i := 0; i != 159; i++ { + for i := 0; i != 474; i++ { expected := args[i] if len(expected) > model.MaxArgEnvSize { expected = args[i][:model.MaxArgEnvSize-4] + "..." // 4 is the size number of the string @@ -480,7 +482,7 @@ func TestProcessContext(t *testing.T) { if !truncated.(bool) { t.Errorf("arg not truncated: %s", execArgs.(string)) } - })) + }) }) test.Run(t, "envs-overflow-single", func(t *testing.T, kind wrapperType, cmdFunc func(cmd string, args []string, envs []string) *exec.Cmd) { @@ -506,7 +508,7 @@ func TestProcessContext(t *testing.T) { } cmd := cmdFunc(bin, args, envs) return cmd.Run() - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, kind, func(event *model.Event, rule *rules.Rule) { execEnvp, err := event.GetFieldValue("exec.envp") if err != nil { t.Errorf("not able to get exec.envp") @@ -550,23 +552,23 @@ func TestProcessContext(t *testing.T) { args = []string{"-u", "PATH", "-u", "HOSTNAME", "-u", "HOME", "ls", "-al"} } - test.WaitSignal(t, func() error { + test.GetSignal(t, func() error { bin := "ls" if kind == dockerWrapperType { bin = "env" } cmd := cmdFunc(bin, args, envs) return cmd.Run() - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { execEnvp, err := event.GetFieldValue("exec.envp") if err != nil { t.Errorf("not able to get exec.envp") } envp := (execEnvp.([]string)) - assert.Equal(t, 57, len(envp), "incorrect number of envs: %s", envp) + assert.Equal(t, 736, len(envp), "incorrect number of envs: %s", envp) - for i := 0; i != 57; i++ { + for i := 0; i != 736; i++ { assert.Equal(t, envs[i], envp[i], "expected env not found") } @@ -578,7 +580,7 @@ func TestProcessContext(t *testing.T) { if !truncated.(bool) { t.Errorf("envs not truncated: %s", execEnvp.([]string)) } - })) + }) }) test.Run(t, "envs-overflow-list-500", func(t *testing.T, kind wrapperType, cmdFunc func(cmd string, args []string, envs []string) *exec.Cmd) { @@ -601,23 +603,23 @@ func TestProcessContext(t *testing.T) { args = []string{"-u", "PATH", "-u", "HOSTNAME", "-u", "HOME", "ls", "-al"} } - test.WaitSignal(t, func() error { + test.GetSignal(t, func() error { bin := "ls" if kind == dockerWrapperType { bin = "env" } cmd := cmdFunc(bin, args, envs) return cmd.Run() - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { execEnvp, err := event.GetFieldValue("exec.envp") if err != nil { t.Errorf("not able to get exec.envp") } envp := (execEnvp.([]string)) - assert.Equal(t, 68, len(envp), "incorrect number of envs: %s", envp) + assert.Equal(t, 895, len(envp), "incorrect number of envs: %s", envp) - for i := 0; i != 68; i++ { + for i := 0; i != 895; i++ { expected := envs[i] if len(expected) > model.MaxArgEnvSize { expected = envs[i][:model.MaxArgEnvSize-4] + "..." // 4 is the size number of the string @@ -633,7 +635,7 @@ func TestProcessContext(t *testing.T) { if !truncated.(bool) { t.Errorf("envs not truncated: %s", execEnvp.([]string)) } - })) + }) }) t.Run("tty", func(t *testing.T) { @@ -684,7 +686,7 @@ func TestProcessContext(t *testing.T) { } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertFieldEqual(t, event, "process.file.path", executable) if name, _ := event.GetFieldValue("process.tty_name"); !strings.HasPrefix(name.(string), "pts") { @@ -697,7 +699,10 @@ func TestProcessContext(t *testing.T) { t.Errorf("expected inode %d, got %d => %+v", entry.FileEvent.Inode, inode, event) } - str := event.String() + str, err := test.marshalEvent(event) + if err != nil { + t.Error(err) + } if !strings.Contains(str, "pts") { t.Error("tty not serialized") @@ -723,7 +728,7 @@ func TestProcessContext(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_ancestors") assert.Equal(t, "sh", event.ProcessContext.Ancestor.Comm) }) @@ -747,7 +752,7 @@ func TestProcessContext(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_parent") assert.Equal(t, "sh", event.ProcessContext.Parent.Comm) assert.Equal(t, "sh", event.ProcessContext.Ancestor.Comm) @@ -772,7 +777,7 @@ func TestProcessContext(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_pid1", rule.ID, "wrong rule triggered") }) }) @@ -796,7 +801,7 @@ func TestProcessContext(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_inode", rule.ID, "wrong rule triggered") service := event.GetProcessServiceTag() @@ -819,7 +824,7 @@ func TestProcessContext(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_ancestors_args", rule.ID, "wrong rule triggered") }) }) @@ -831,11 +836,15 @@ func TestProcessContext(t *testing.T) { cmd := cmdFunc(shell, args, envs) _ = cmd.Run() return nil - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, kind, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_args_envs_dedup", rule.ID, "wrong rule triggered") var data interface{} - serialized := event.String() + serialized, err := test.marshalEvent(event) + if err != nil { + t.Error(err) + } + if err := json.Unmarshal([]byte(serialized), &data); err != nil { t.Error(err) } @@ -865,7 +874,7 @@ func TestProcessContext(t *testing.T) { cmd := exec.Command(lsExecutable, "glob") _ = cmd.Run() return nil - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_ancestors_glob") })) }) @@ -879,7 +888,7 @@ func TestProcessContext(t *testing.T) { _, _ = cmd.CombinedOutput() return nil - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, kind, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_self_exec") })) }) @@ -900,7 +909,7 @@ func TestProcessContext(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, kind, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_container", rule.ID, "wrong rule triggered") if kind == dockerWrapperType { @@ -925,7 +934,7 @@ func TestProcessContext(t *testing.T) { } f.Close() return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, ruleID, rule.ID, "wrong rule triggered") }) }) @@ -965,7 +974,7 @@ func TestProcessEnvsWithValue(t *testing.T) { cmd.Env = envp _ = cmd.Run() return nil - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_ldpreload_from_tmp_with_envs") assertFieldEqual(t, event, "exec.file.path", lsExec) assertFieldStringArrayIndexedOneOf(t, event, "exec.envs", 0, []string{"LD_PRELOAD=/tmp/dyn.so"}) @@ -996,7 +1005,7 @@ func TestProcessExecCTime(t *testing.T) { cmd := exec.Command(testFile, "/tmp/test") return cmd.Run() - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_exec_ctime", rule.ID, "wrong rule triggered") })) } @@ -1018,7 +1027,7 @@ func TestProcessPIDVariable(t *testing.T) { test.WaitSignal(t, func() error { cmd := exec.Command(executable, fmt.Sprintf("/proc/%d/maps", os.Getpid())) return cmd.Run() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_var", rule.ID, "wrong rule triggered") }) if err != nil { @@ -1104,7 +1113,7 @@ func TestProcessMutableVariable(t *testing.T) { test.WaitSignal(t, func() error { filename1, _, err = test.Create("test-open") return err - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_set_mutable_vars", rule.ID, "wrong rule triggered") }) if err != nil { @@ -1115,7 +1124,7 @@ func TestProcessMutableVariable(t *testing.T) { test.WaitSignal(t, func() error { filename2, _, err = test.Create("test-open-2") return err - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_modify_mutable_vars", rule.ID, "wrong rule triggered") }) if err != nil { @@ -1126,7 +1135,7 @@ func TestProcessMutableVariable(t *testing.T) { test.WaitSignal(t, func() error { filename3, _, err = test.Create("test-open-3") return err - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_test_mutable_vars", rule.ID, "wrong rule triggered") }) if err != nil { @@ -1158,7 +1167,7 @@ func TestProcessExec(t *testing.T) { test.WaitSignal(t, func() error { cmd := exec.Command("sh", "-c", executable+" /dev/null") return cmd.Run() - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assertFieldEqual(t, event, "exec.file.path", executable) assertFieldIsOneOf(t, event, "process.parent.file.name", []string{"sh", "bash", "dash"}, "wrong process parent file name") assertFieldStringArrayIndexedOneOf(t, event, "process.ancestors.file.name", 0, []string{"sh", "bash", "dash"}) @@ -1170,7 +1179,7 @@ func TestProcessExec(t *testing.T) { args := []string{"exec-in-pthread", executable, "/dev/null"} cmd := exec.Command(syscallTester, args...) return cmd.Run() - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assertFieldEqual(t, event, "exec.file.path", executable) assertFieldEqual(t, event, "process.parent.file.name", "syscall_tester", "wrong process parent file name") })) @@ -1216,7 +1225,7 @@ func TestProcessMetadata(t *testing.T) { test.WaitSignal(t, func() error { cmd := exec.Command(testFile) return cmd.Run() - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "exec", event.GetType(), "wrong event type") assertRights(t, event.Exec.FileEvent.Mode, fileMode) assertNearTime(t, event.Exec.FileEvent.MTime) @@ -1236,7 +1245,7 @@ func TestProcessMetadata(t *testing.T) { } _, err := syscall.ForkExec(testFile, []string{}, attr) return err - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "exec", event.GetType(), "wrong event type") assert.Equal(t, 1001, int(event.Exec.Credentials.UID), "wrong uid") assert.Equal(t, 1001, int(event.Exec.Credentials.EUID), "wrong euid") @@ -1267,7 +1276,7 @@ func TestProcessExecExit(t *testing.T) { err = test.GetProbeEvent(func() error { cmd := exec.Command(executable, "-t", "01010101", "/dev/null") return cmd.Run() - }, func(event *sprobe.Event) bool { + }, func(event *model.Event) bool { switch event.GetEventType() { case model.ExecEventType: if basename, err := event.GetFieldValue("exec.file.name"); err != nil || basename.(string) != "touch" { @@ -1278,14 +1287,9 @@ func TestProcessExecExit(t *testing.T) { return false } - validate := validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { - if !validateProcessContextLineage(t, event) { - t.Error(event.String()) - } - - if !validateProcessContextSECL(t, event) { - t.Error(event.String()) - } + validate := test.validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { + validateProcessContextLineage(t, event, test.probe) + validateProcessContextSECL(t, event, test.probe) assertFieldEqual(t, event, "exec.file.name", "touch") assertFieldContains(t, event, "exec.args", "01010101") @@ -1376,7 +1380,7 @@ func TestProcessCredentialsUpdate(t *testing.T) { t.Run("setuid", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "process-credentials", "setuid", "1001", "0") - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_setuid") assert.Equal(t, uint32(1001), event.SetUID.UID, "wrong uid") }) @@ -1385,7 +1389,7 @@ func TestProcessCredentialsUpdate(t *testing.T) { t.Run("setreuid", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "process-credentials", "setreuid", "1002", "1003") - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_setreuid") assert.Equal(t, uint32(1002), event.SetUID.UID, "wrong uid") assert.Equal(t, uint32(1003), event.SetUID.EUID, "wrong euid") @@ -1395,7 +1399,7 @@ func TestProcessCredentialsUpdate(t *testing.T) { t.Run("setresuid", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "process-credentials", "setresuid", "1002", "1003") - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_setreuid") assert.Equal(t, uint32(1002), event.SetUID.UID, "wrong uid") assert.Equal(t, uint32(1003), event.SetUID.EUID, "wrong euid") @@ -1405,7 +1409,7 @@ func TestProcessCredentialsUpdate(t *testing.T) { t.Run("setfsuid", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "process-credentials", "setfsuid", "1004", "0") - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_setfsuid") assert.Equal(t, uint32(1004), event.SetUID.FSUID, "wrong fsuid") }) @@ -1414,7 +1418,7 @@ func TestProcessCredentialsUpdate(t *testing.T) { t.Run("setgid", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "process-credentials", "setgid", "1005", "0") - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_setgid") assert.Equal(t, uint32(1005), event.SetGID.GID, "wrong gid") }) @@ -1423,7 +1427,7 @@ func TestProcessCredentialsUpdate(t *testing.T) { t.Run("setregid", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "process-credentials", "setregid", "1006", "1007") - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_setregid") assert.Equal(t, uint32(1006), event.SetGID.GID, "wrong gid") assert.Equal(t, uint32(1007), event.SetGID.EGID, "wrong egid") @@ -1433,7 +1437,7 @@ func TestProcessCredentialsUpdate(t *testing.T) { t.Run("setresgid", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "process-credentials", "setresgid", "1006", "1007") - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_setregid") assert.Equal(t, uint32(1006), event.SetGID.GID, "wrong gid") assert.Equal(t, uint32(1007), event.SetGID.EGID, "wrong egid") @@ -1443,7 +1447,7 @@ func TestProcessCredentialsUpdate(t *testing.T) { t.Run("setfsgid", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "process-credentials", "setfsgid", "1008", "0") - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_setfsgid") assert.Equal(t, uint32(1008), event.SetGID.FSGID, "wrong gid") }) @@ -1464,7 +1468,7 @@ func TestProcessCredentialsUpdate(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, goSyscallTester, "-process-credentials-capset") - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_capset") // transform the collected kernel capabilities into a usable capability set @@ -1529,7 +1533,7 @@ func TestProcessIsThread(t *testing.T) { cmd := exec.Command(syscallTester, args...) _ = cmd.Run() return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_process_fork_is_thread") assert.Equal(t, unix.PROT_READ|unix.PROT_WRITE, event.MMap.Protection&(unix.PROT_READ|unix.PROT_WRITE), "wrong mmap protection flags") assert.Equal(t, "syscall_tester", event.ProcessContext.FileEvent.BasenameStr, "wrong process file basename") @@ -1545,7 +1549,7 @@ func TestProcessIsThread(t *testing.T) { cmd := exec.Command(syscallTester, args...) _ = cmd.Run() return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_process_exec_is_not_thread") assert.Equal(t, unix.PROT_READ|unix.PROT_WRITE, event.MMap.Protection&(unix.PROT_READ|unix.PROT_WRITE), "wrong mmap protection flags") assert.Equal(t, "syscall_tester", event.ProcessContext.FileEvent.BasenameStr, "wrong process file basename") @@ -1582,11 +1586,11 @@ func TestProcessExit(t *testing.T) { }, { ID: "test_exit_time_1", - Expression: fmt.Sprintf(`exit.cause == EXITED && exit.code == 0 && process.created_at < 2s && process.file.path == "%s" && process.envp in ["%s"]`, sleepExec, envpExitSleepTime), + Expression: fmt.Sprintf(`exit.cause == EXITED && exit.code == 0 && process.created_at < 4s && process.file.path == "%s" && process.envp in ["%s"]`, sleepExec, envpExitSleepTime), }, { ID: "test_exit_time_2", - Expression: fmt.Sprintf(`exit.cause == EXITED && exit.code == 0 && process.created_at > 2s && process.file.path == "%s" && process.envp in ["%s"]`, sleepExec, envpExitSleepTime), + Expression: fmt.Sprintf(`exit.cause == EXITED && exit.code == 0 && process.created_at > 4s && process.file.path == "%s" && process.envp in ["%s"]`, sleepExec, envpExitSleepTime), }, } @@ -1604,10 +1608,8 @@ func TestProcessExit(t *testing.T) { cmd := exec.Command(sleepExec, args...) cmd.Env = envp return cmd.Run() - }, func(event *sprobe.Event, rule *rules.Rule) { - if !validateExitSchema(t, event) { - t.Error(event.String()) - } + }, func(event *model.Event, rule *rules.Rule) { + test.validateExitSchema(t, event) assertTriggeredRule(t, rule, "test_exit_ok") assertFieldEqual(t, event, "exit.file.path", sleepExec) assert.Equal(t, uint32(model.ExitExited), event.Exit.Cause, "wrong exit cause") @@ -1625,10 +1627,8 @@ func TestProcessExit(t *testing.T) { cmd.Env = envp _ = cmd.Run() return nil - }, func(event *sprobe.Event, rule *rules.Rule) { - if !validateExitSchema(t, event) { - t.Error(event.String()) - } + }, func(event *model.Event, rule *rules.Rule) { + test.validateExitSchema(t, event) assertTriggeredRule(t, rule, "test_exit_error") assertFieldEqual(t, event, "exit.file.path", sleepExec) assert.Equal(t, uint32(model.ExitExited), event.Exit.Cause, "wrong exit cause") @@ -1639,17 +1639,15 @@ func TestProcessExit(t *testing.T) { t.Run("exit-coredumped", func(t *testing.T) { test.WaitSignal(t, func() error { - args := []string{"--preserve-status", "--signal=SIGQUIT", "0.1", sleepExec, "1"} + args := []string{"--preserve-status", "--signal=SIGQUIT", "2", sleepExec, "9"} envp := []string{envpExitSleep} cmd := exec.Command(timeoutExec, args...) cmd.Env = envp _ = cmd.Run() return nil - }, func(event *sprobe.Event, rule *rules.Rule) { - if !validateExitSchema(t, event) { - t.Error(event.String()) - } + }, func(event *model.Event, rule *rules.Rule) { + test.validateExitSchema(t, event) assertTriggeredRule(t, rule, "test_exit_coredump") assertFieldEqual(t, event, "exit.file.path", sleepExec) assert.Equal(t, uint32(model.ExitCoreDumped), event.Exit.Cause, "wrong exit cause") @@ -1660,17 +1658,15 @@ func TestProcessExit(t *testing.T) { t.Run("exit-signaled", func(t *testing.T) { test.WaitSignal(t, func() error { - args := []string{"--preserve-status", "--signal=SIGKILL", "0.1", sleepExec, "1"} + args := []string{"--preserve-status", "--signal=SIGKILL", "2", sleepExec, "9"} envp := []string{envpExitSleep} cmd := exec.Command(timeoutExec, args...) cmd.Env = envp _ = cmd.Run() return nil - }, func(event *sprobe.Event, rule *rules.Rule) { - if !validateExitSchema(t, event) { - t.Error(event.String()) - } + }, func(event *model.Event, rule *rules.Rule) { + test.validateExitSchema(t, event) assertTriggeredRule(t, rule, "test_exit_signal") assertFieldEqual(t, event, "exit.file.path", sleepExec) assert.Equal(t, uint32(model.ExitSignaled), event.Exit.Cause, "wrong exit cause") @@ -1681,16 +1677,14 @@ func TestProcessExit(t *testing.T) { t.Run("exit-time-1", func(t *testing.T) { test.WaitSignal(t, func() error { - args := []string{"--preserve-status", "--signal=SIGKILL", "1", sleepExec, "0.1"} + args := []string{"--preserve-status", "--signal=SIGKILL", "9", sleepExec, "2"} envp := []string{envpExitSleepTime} cmd := exec.Command(timeoutExec, args...) cmd.Env = envp return cmd.Run() - }, func(event *sprobe.Event, rule *rules.Rule) { - if !validateExitSchema(t, event) { - t.Error(event.String()) - } + }, func(event *model.Event, rule *rules.Rule) { + test.validateExitSchema(t, event) assertTriggeredRule(t, rule, "test_exit_time_1") assertFieldEqual(t, event, "exit.file.path", sleepExec) assert.Equal(t, uint32(model.ExitExited), event.Exit.Cause, "wrong exit cause") @@ -1701,16 +1695,14 @@ func TestProcessExit(t *testing.T) { t.Run("exit-time-2", func(t *testing.T) { test.WaitSignal(t, func() error { - args := []string{"--preserve-status", "--signal=SIGKILL", "3", sleepExec, "2.1"} + args := []string{"--preserve-status", "--signal=SIGKILL", "9", sleepExec, "5"} envp := []string{envpExitSleepTime} cmd := exec.Command(timeoutExec, args...) cmd.Env = envp return cmd.Run() - }, func(event *sprobe.Event, rule *rules.Rule) { - if !validateExitSchema(t, event) { - t.Error(event.String()) - } + }, func(event *model.Event, rule *rules.Rule) { + test.validateExitSchema(t, event) assertTriggeredRule(t, rule, "test_exit_time_2") assertFieldEqual(t, event, "exit.file.path", sleepExec) assert.Equal(t, uint32(model.ExitExited), event.Exit.Cause, "wrong exit cause") @@ -1759,7 +1751,7 @@ func TestProcessBusybox(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_busybox_1", rule.ID, "wrong rule triggered") }) }) @@ -1771,7 +1763,7 @@ func TestProcessBusybox(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_busybox_2", rule.ID, "wrong rule triggered") }) }) @@ -1783,7 +1775,7 @@ func TestProcessBusybox(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_busybox_3", rule.ID, "wrong rule triggered") }) }) @@ -1795,7 +1787,7 @@ func TestProcessBusybox(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_busybox_4", rule.ID, "wrong rule triggered") }) }) @@ -1814,7 +1806,7 @@ func TestProcessIdentifyInterpreter(t *testing.T) { scriptName string executedScript string innerScriptName string - check func(event *sprobe.Event) + check func(event *model.Event) }{ { name: "regular exec", @@ -1833,7 +1825,7 @@ print('Executing print inside a python (%s) script inside a bash script') EOF echo "Back to bash"`, python, python), - check: func(event *sprobe.Event) { + check: func(event *model.Event) { assertFieldEqual(t, event, "exec.interpreter.file.name", "", "wrong interpreter file name") assertFieldEqual(t, event, "process.parent.file.name", "regularExec.sh", "wrong process parent file name") assertFieldStringArrayIndexedOneOf(t, event, "process.ancestors.file.name", 0, []string{"regularExec.sh"}, "ancestor file name not an option") @@ -1857,7 +1849,7 @@ print "Executing print inside a perl (%s) script inside a bash script\n"; __HERE__ echo "Back to bash"`, perl, perl, perl), - check: func(event *sprobe.Event) { + check: func(event *model.Event) { assertFieldEqual(t, event, "exec.interpreter.file.name", "", "wrong interpreter file name") assertFieldEqual(t, event, "process.parent.file.name", "regularExecWithInterpreterRule.sh", "wrong process parent file name") assertFieldStringArrayIndexedOneOf(t, event, "process.ancestors.file.name", 0, []string{"regularExecWithInterpreterRule.sh"}, "ancestor file name not an option") @@ -1886,7 +1878,7 @@ echo "Back to bash" chmod 755 pyscript.py ./pyscript.py`, python, python), - check: func(event *sprobe.Event) { + check: func(event *model.Event) { assertFieldEqual(t, event, "exec.interpreter.file.name", filepath.Base(python), "wrong interpreter file name") assertFieldEqual(t, event, "process.parent.file.name", "interpretedExec.sh", "wrong process parent file name") assertFieldStringArrayIndexedOneOf(t, event, "process.ancestors.file.name", 0, []string{"interpretedExec.sh"}, "ancestor file name not an option") @@ -1965,7 +1957,7 @@ chmod 755 pyscript.py t.Logf("%s: %+v\n", constantfetch.OffsetNameLinuxBinprmStructFile, offsets[constantfetch.OffsetNameLinuxBinprmStructFile]) return nil - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, testModule.validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, test.rule.ID) test.check(event) })) @@ -2024,7 +2016,7 @@ func TestProcessResolution(t *testing.T) { } return err - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_resolution", rule.ID, "wrong rule triggered") value, err := event.GetFieldValue("process.pid") @@ -2033,6 +2025,12 @@ func TestProcessResolution(t *testing.T) { } pid := uint32(value.(int)) + value, err = event.GetFieldValue("process.file.inode") + if err != nil { + t.Errorf("not able to get pid") + } + inode := uint64(value.(int)) + resolvers := test.probe.GetResolvers() // compare only few fields as the hierarchy fields(pointers, etc) are modified by the resolution function calls @@ -2046,7 +2044,7 @@ func TestProcessResolution(t *testing.T) { assert.Equal(t, entry1.ContainerID, entry2.ContainerID) } - cacheEntry := resolvers.ProcessResolver.ResolveFromCache(pid, pid) + cacheEntry := resolvers.ProcessResolver.ResolveFromCache(pid, pid, inode) if cacheEntry == nil { t.Errorf("not able to resolve the entry") } @@ -2088,14 +2086,14 @@ func TestProcessFilelessExecution(t *testing.T) { rule *rules.RuleDefinition syscallTesterToRun string syscallTesterScriptFilenameToRun string - check func(event *sprobe.Event, rule *rules.Rule) + check func(event *model.Event, rule *rules.Rule) }{ { name: "fileless", rule: filelessDetectionRule, syscallTesterToRun: "fileless", syscallTesterScriptFilenameToRun: "", - check: func(event *sprobe.Event, rule *rules.Rule) { + check: func(event *model.Event, rule *rules.Rule) { assertFieldEqual(t, event, "process.file.name", filelessExecutionFilenamePrefix, "process.file.name not matching") assertFieldStringArrayIndexedOneOf(t, event, "process.ancestors.file.name", 0, []string{"syscall_tester"}, "process.ancestors.file.name not matching") }, @@ -2105,7 +2103,7 @@ func TestProcessFilelessExecution(t *testing.T) { rule: filelessWithInterpreterDetectionRule, syscallTesterToRun: "fileless", syscallTesterScriptFilenameToRun: "script", - check: func(event *sprobe.Event, rule *rules.Rule) { + check: func(event *model.Event, rule *rules.Rule) { assertFieldEqual(t, event, "process.file.name", "memfd:script", "process.file.name not matching") }, }, @@ -2156,8 +2154,8 @@ func TestProcessFilelessExecution(t *testing.T) { cmd := exec.Command(testFile) return cmd.Run() - }, func(event *sprobe.Event, rule *rules.Rule) { - t.Errorf("shouldn't get an event: got event: %s", event) + }, func(event *model.Event, rule *rules.Rule) { + t.Errorf("shouldn't get an event: got event: %s", testModule.debugEvent(event)) }) if err == nil { t.Fatal("shouldn't get an event") @@ -2165,7 +2163,7 @@ func TestProcessFilelessExecution(t *testing.T) { } else { testModule.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, test.syscallTesterToRun, test.syscallTesterScriptFilenameToRun) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, test.rule.ID) test.check(event, rule) }) diff --git a/pkg/security/tests/ptrace_test.go b/pkg/security/tests/ptrace_test.go index a93d0e920d528b..8f041442312e03 100644 --- a/pkg/security/tests/ptrace_test.go +++ b/pkg/security/tests/ptrace_test.go @@ -15,7 +15,7 @@ import ( "github.com/stretchr/testify/assert" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -49,14 +49,12 @@ func TestPTraceEvent(t *testing.T) { } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "ptrace", event.GetType(), "wrong event type") assert.Equal(t, uint64(42), event.PTrace.Address, "wrong address") assert.Equal(t, event.Async, false) - if !validatePTraceSchema(t, event) { - t.Error(event.String()) - } + test.validatePTraceSchema(t, event) }) }) } diff --git a/pkg/security/tests/rename_test.go b/pkg/security/tests/rename_test.go index 6897f0d69b6fdf..7f0feeb1eee85e 100644 --- a/pkg/security/tests/rename_test.go +++ b/pkg/security/tests/rename_test.go @@ -21,7 +21,7 @@ import ( "golang.org/x/sys/unix" "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -62,7 +62,7 @@ func TestRename(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "rename", event.GetType(), "wrong event type") assert.Equal(t, getInode(t, testNewFile), event.Rename.New.Inode, "wrong inode") assertFieldEqual(t, event, "rename.file.destination.inode", int(getInode(t, testNewFile)), "wrong inode") @@ -74,9 +74,7 @@ func TestRename(t *testing.T) { assertNearTime(t, event.Rename.New.CTime) assert.Equal(t, event.Async, false) - if !validateRenameSchema(t, event) { - t.Error(event.String()) - } + test.validateRenameSchema(t, event) }) })) @@ -93,7 +91,7 @@ func TestRename(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "rename", event.GetType(), "wrong event type") assert.Equal(t, getInode(t, testNewFile), event.Rename.New.Inode, "wrong inode") assertFieldEqual(t, event, "rename.file.destination.inode", int(getInode(t, testNewFile)), "wrong inode") @@ -105,9 +103,7 @@ func TestRename(t *testing.T) { assertNearTime(t, event.Rename.New.CTime) assert.Equal(t, event.Async, false) - if !validateRenameSchema(t, event) { - t.Error(event.String()) - } + test.validateRenameSchema(t, event) }) }) @@ -125,7 +121,7 @@ func TestRename(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "rename", event.GetType(), "wrong event type") assert.Equal(t, getInode(t, testNewFile), event.Rename.New.Inode, "wrong inode") assertFieldEqual(t, event, "rename.file.destination.inode", int(getInode(t, testNewFile)), "wrong inode") @@ -137,9 +133,7 @@ func TestRename(t *testing.T) { assertNearTime(t, event.Rename.New.CTime) assert.Equal(t, event.Async, false) - if !validateRenameSchema(t, event) { - t.Error(event.String()) - } + test.validateRenameSchema(t, event) }) }) @@ -182,7 +176,7 @@ func TestRename(t *testing.T) { return fmt.Errorf("failed to rename file with io_uring: %d", ret) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "rename", event.GetType(), "wrong event type") assert.Equal(t, getInode(t, testNewFile), event.Rename.New.Inode, "wrong inode") assertFieldEqual(t, event, "rename.file.destination.inode", int(getInode(t, testNewFile)), "wrong inode") @@ -237,13 +231,11 @@ func TestRenameInvalidate(t *testing.T) { for i := 0; i != 5; i++ { test.WaitSignal(t, func() error { return os.Rename(testOldFile, testNewFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "rename", event.GetType(), "wrong event type") assertFieldEqual(t, event, "rename.file.destination.path", testNewFile) - if !validateRenameSchema(t, event) { - t.Error(event.String()) - } + test.validateRenameSchema(t, event) }) // swap @@ -308,7 +300,7 @@ func TestRenameReuseInode(t *testing.T) { } return f.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") }) @@ -335,14 +327,12 @@ func TestRenameReuseInode(t *testing.T) { return err } return f.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") assertFieldEqual(t, event, "open.file.inode", int(testNewFileInode)) assertFieldEqual(t, event, "open.file.path", testReuseInodeFile) - if !validateOpenSchema(t, event) { - t.Error(event.String()) - } + test.validateOpenSchema(t, event) }) } @@ -380,13 +370,11 @@ func TestRenameFolder(t *testing.T) { return err } return testFile.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") assertFieldEqual(t, event, "open.file.path", filename) - if !validateOpenSchema(t, event) { - t.Error(event.String()) - } + test.validateOpenSchema(t, event) // swap if err := os.Rename(testOldFolder, testNewFolder); err != nil { diff --git a/pkg/security/tests/rmdir_test.go b/pkg/security/tests/rmdir_test.go index 71b8487f75c6fc..2ad7105c43754d 100644 --- a/pkg/security/tests/rmdir_test.go +++ b/pkg/security/tests/rmdir_test.go @@ -19,7 +19,7 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -56,7 +56,7 @@ func TestRmdir(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "rmdir", event.GetType(), "wrong event type") assert.Equal(t, inode, event.Rmdir.File.Inode, "wrong inode") assertRights(t, event.Rmdir.File.Mode, expectedMode, "wrong initial mode") @@ -84,7 +84,7 @@ func TestRmdir(t *testing.T) { return error(err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "rmdir", event.GetType(), "wrong event type") assert.Equal(t, inode, event.Rmdir.File.Inode, "wrong inode") assertRights(t, event.Rmdir.File.Mode, expectedMode, "wrong initial mode") @@ -141,7 +141,7 @@ func TestRmdir(t *testing.T) { return fmt.Errorf("failed to unlink file with io_uring: %d", ret) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "rmdir", event.GetType(), "wrong event type") assert.Equal(t, inode, event.Rmdir.File.Inode, "wrong inode") assertRights(t, event.Rmdir.File.Mode, expectedMode, "wrong initial mode") @@ -182,7 +182,7 @@ func TestRmdirInvalidate(t *testing.T) { test.WaitSignal(t, func() error { return syscall.Rmdir(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "rmdir", event.GetType(), "wrong event type") assertFieldEqual(t, event, "rmdir.file.path", testFile) }) diff --git a/pkg/security/tests/schemas.go b/pkg/security/tests/schemas.go index c91b2ac565ac3e..33a2bd723f65ad 100644 --- a/pkg/security/tests/schemas.go +++ b/pkg/security/tests/schemas.go @@ -16,8 +16,10 @@ import ( "github.com/xeipuuv/gojsonschema" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/events" + "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/probe/resolvers" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" ) //nolint:deadcode,unused @@ -52,7 +54,7 @@ func (v ValidInodeFormatChecker) IsFormat(input interface{}) bool { } //nolint:deadcode,unused -func validateSchema(t *testing.T, json string, path string) bool { +func validateStringSchema(t *testing.T, json string, path string) bool { t.Helper() fs := http.FS(schemaAssetFS) @@ -71,6 +73,7 @@ func validateSchema(t *testing.T, json string, path string) bool { for _, desc := range result.Errors() { t.Errorf("%s", desc) } + t.Error(json) return false } @@ -78,141 +81,155 @@ func validateSchema(t *testing.T, json string, path string) bool { } //nolint:deadcode,unused -func validateEventSchema(t *testing.T, event *sprobe.Event, path string) bool { +func (tm *testModule) validateEventSchema(t *testing.T, event *model.Event, path string) bool { t.Helper() - return validateSchema(t, event.String(), path) + + eventJSON, err := tm.marshalEvent(event) + if err != nil { + t.Error(err) + return false + } + + return validateStringSchema(t, eventJSON, path) } //nolint:deadcode,unused -func validateStringSchema(t *testing.T, event string, path string) bool { +func (tm *testModule) validateExecSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateSchema(t, event, path) + return tm.validateEventSchema(t, event, "file:///schemas/exec.schema.json") } //nolint:deadcode,unused -func validateExecSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateExitSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/exec.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/exit.schema.json") } //nolint:deadcode,unused -func validateExitSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateOpenSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/exit.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/open.schema.json") } //nolint:deadcode,unused -func validateOpenSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateRenameSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/open.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/rename.schema.json") } //nolint:deadcode,unused -func validateRenameSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateChmodSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/rename.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/chmod.schema.json") } //nolint:deadcode,unused -func validateChmodSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateChownSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/chmod.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/chown.schema.json") } //nolint:deadcode,unused -func validateChownSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateSELinuxSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/chown.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/selinux.schema.json") } //nolint:deadcode,unused -func validateSELinuxSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateLinkSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/selinux.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/link.schema.json") } //nolint:deadcode,unused -func validateLinkSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateSpanSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/link.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/span.schema.json") } //nolint:deadcode,unused -func validateSpanSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateBPFSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/span.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/bpf.schema.json") } //nolint:deadcode,unused -func validateBPFSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateMMapSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/bpf.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/mmap.schema.json") } //nolint:deadcode,unused -func validateMMapSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateMProtectSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/mmap.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/mprotect.schema.json") } //nolint:deadcode,unused -func validateMProtectSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validatePTraceSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/mprotect.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/ptrace.schema.json") } //nolint:deadcode,unused -func validatePTraceSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateLoadModuleSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/ptrace.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/load_module.schema.json") } //nolint:deadcode,unused -func validateLoadModuleSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateLoadModuleNoFileSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/load_module.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/load_module_no_file.schema.json") } //nolint:deadcode,unused -func validateLoadModuleNoFileSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateUnloadModuleSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/load_module_no_file.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/unload_module.schema.json") } //nolint:deadcode,unused -func validateUnloadModuleSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateSignalSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/unload_module.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/signal.schema.json") } //nolint:deadcode,unused -func validateSignalSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateSpliceSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/signal.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/splice.schema.json") } //nolint:deadcode,unused -func validateSpliceSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateDNSSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/splice.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/dns.schema.json") } //nolint:deadcode,unused -func validateDNSSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateBindSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/dns.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/bind.schema.json") } //nolint:deadcode,unused -func validateBindSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateMountSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/bind.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/mount.schema.json") } //nolint:deadcode,unused -func validateMountSchema(t *testing.T, event *sprobe.Event) bool { +func validateRuleSetLoadedSchema(t *testing.T, event *events.CustomEvent) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/mount.schema.json") + + eventJSON, err := probe.MarshalCustomEvent(event) + if err != nil { + t.Error(err) + return false + } + + return validateStringSchema(t, string(eventJSON), "file:///schemas/ruleset_loaded.schema.json") } //nolint:deadcode,unused @@ -220,9 +237,3 @@ func validateActivityDumpProtoSchema(t *testing.T, ad string) bool { t.Helper() return validateStringSchema(t, ad, "file:///schemas/activity_dump_proto.schema.json") } - -//nolint:deadcode,unused -func validateRuleSetLoadedSchema(t *testing.T, event *sprobe.CustomEvent) bool { - t.Helper() - return validateStringSchema(t, event.String(), "file:///schemas/ruleset_loaded.schema.json") -} diff --git a/pkg/security/tests/selinux_test.go b/pkg/security/tests/selinux_test.go index f48f611310e9a0..05c1b244782980 100644 --- a/pkg/security/tests/selinux_test.go +++ b/pkg/security/tests/selinux_test.go @@ -19,7 +19,7 @@ import ( "github.com/stretchr/testify/assert" - "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -71,14 +71,12 @@ func TestSELinux(t *testing.T) { return fmt.Errorf("failed to run setenforce: %w", err) } return nil - }, func(event *probe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_selinux_enforce") assert.Equal(t, "selinux", event.GetType(), "wrong event type") assertFieldEqual(t, event, "selinux.enforce.status", "permissive", "wrong enforce value") - if !validateSELinuxSchema(t, event) { - t.Error(event.String()) - } + test.validateSELinuxSchema(t, event) }) }) @@ -88,13 +86,11 @@ func TestSELinux(t *testing.T) { return fmt.Errorf("failed to write to selinuxfs: %w", err) } return nil - }, func(event *probe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_selinux_enforce") assert.Equal(t, "selinux", event.GetType(), "wrong event type") - if !validateSELinuxSchema(t, event) { - t.Error(event.String()) - } + test.validateSELinuxSchema(t, event) }) }) @@ -104,15 +100,13 @@ func TestSELinux(t *testing.T) { return fmt.Errorf("failed to run setsebool: %w", err) } return nil - }, func(event *probe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_selinux_write_bool_true") assert.Equal(t, "selinux", event.GetType(), "wrong event type") assertFieldEqual(t, event, "selinux.bool.name", TestBoolName, "wrong bool name") assertFieldEqual(t, event, "selinux.bool.state", "on", "wrong bool value") - if !validateSELinuxSchema(t, event) { - t.Error(event.String()) - } + test.validateSELinuxSchema(t, event) }) }) @@ -122,15 +116,13 @@ func TestSELinux(t *testing.T) { return fmt.Errorf("failed to run setsebool: %w", err) } return nil - }, func(event *probe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_selinux_write_bool_false") assert.Equal(t, "selinux", event.GetType(), "wrong event type") assertFieldEqual(t, event, "selinux.bool.name", TestBoolName, "wrong bool name") assertFieldEqual(t, event, "selinux.bool.state", "off", "wrong bool value") - if !validateSELinuxSchema(t, event) { - t.Error(event.String()) - } + test.validateSELinuxSchema(t, event) }) }) @@ -140,8 +132,8 @@ func TestSELinux(t *testing.T) { return fmt.Errorf("failed to write to selinuxfs: %w", err) } return nil - }, func(event *probe.Event, rule *rules.Rule) { - t.Errorf("expected error and got an event: %s", event) + }, func(event *model.Event, rule *rules.Rule) { + t.Errorf("expected error and got an event: %s", test.debugEvent(event)) }) if err == nil { t.Fatal("expected error") @@ -182,14 +174,12 @@ func TestSELinuxCommitBools(t *testing.T) { return fmt.Errorf("failed to run setsebool: %w", err) } return nil - }, func(event *probe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_selinux_commit_bools") assert.Equal(t, "selinux", event.GetType(), "wrong event type") assertFieldEqual(t, event, "selinux.bool_commit.state", true, "wrong bool value") - if !validateSELinuxSchema(t, event) { - t.Error(event.String()) - } + test.validateSELinuxSchema(t, event) }) }) } diff --git a/pkg/security/tests/serializers_test.go b/pkg/security/tests/serializers_test.go index e411161f376f14..511ca2dafbb4aa 100644 --- a/pkg/security/tests/serializers_test.go +++ b/pkg/security/tests/serializers_test.go @@ -18,6 +18,7 @@ import ( "github.com/stretchr/testify/assert" sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -48,19 +49,19 @@ func fetchRealisticEventSerializerInner(tb testing.TB) *sprobe.EventSerializer { tb.Fatal(err) } - var workingEvent *sprobe.Event + var workingEvent *model.Event test.WaitSignal(tb, func() error { fd, _, errno := syscall.Syscall6(syscall.SYS_OPENAT, 0, uintptr(testFilePtr), syscall.O_CREAT, 0711, 0, 0) if errno != 0 { return error(errno) } return syscall.Close(int(fd)) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { workingEvent = event assert.Equal(tb, "open", event.GetType(), "wrong event type") }) - return sprobe.NewEventSerializer(workingEvent) + return sprobe.NewEventSerializer(workingEvent, test.probe) } func BenchmarkSerializersEasyJson(b *testing.B) { diff --git a/pkg/security/tests/signal_test.go b/pkg/security/tests/signal_test.go index 1f3731b0fddf3b..e4d208b56d7184 100644 --- a/pkg/security/tests/signal_test.go +++ b/pkg/security/tests/signal_test.go @@ -16,7 +16,7 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -54,15 +54,13 @@ func TestSignalEvent(t *testing.T) { } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "signal", event.GetType(), "wrong event type") assert.Equal(t, uint32(unix.SIGUSR1), event.Signal.Type, "wrong signal") assert.Equal(t, int64(0), event.Signal.Retval, "wrong retval") assert.Equal(t, event.Async, false) - if !validateSignalSchema(t, event) { - t.Error(event.String()) - } + test.validateSignalSchema(t, event) }) }) @@ -77,15 +75,13 @@ func TestSignalEvent(t *testing.T) { } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "signal", event.GetType(), "wrong event type") assert.Equal(t, uint32(unix.SIGKILL), event.Signal.Type, "wrong signal") assert.Equal(t, -int64(unix.EPERM), event.Signal.Retval, "wrong retval") assert.Equal(t, event.Async, false) - if !validateSignalSchema(t, event) { - t.Error(event.String()) - } + test.validateSignalSchema(t, event) }) }) } diff --git a/pkg/security/tests/span_test.go b/pkg/security/tests/span_test.go index 020c7928e1f2d4..bcd686fdd441f3 100644 --- a/pkg/security/tests/span_test.go +++ b/pkg/security/tests/span_test.go @@ -16,7 +16,7 @@ import ( "github.com/stretchr/testify/assert" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -64,12 +64,10 @@ func TestSpan(t *testing.T) { } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_span_rule_open") - if !validateSpanSchema(t, event) { - t.Error(event.String()) - } + test.validateSpanSchema(t, event) assert.Equal(t, uint64(204), event.SpanContext.SpanID) assert.Equal(t, uint64(104), event.SpanContext.TraceID) @@ -98,12 +96,10 @@ func TestSpan(t *testing.T) { } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_span_rule_exec") - if !validateSpanSchema(t, event) { - t.Error(event.String()) - } + test.validateSpanSchema(t, event) assert.Equal(t, uint64(204), event.SpanContext.SpanID) assert.Equal(t, uint64(104), event.SpanContext.TraceID) diff --git a/pkg/security/tests/splice_test.go b/pkg/security/tests/splice_test.go index cd14f6bcce01b6..0c48ab24b343cf 100644 --- a/pkg/security/tests/splice_test.go +++ b/pkg/security/tests/splice_test.go @@ -13,7 +13,7 @@ import ( "github.com/stretchr/testify/assert" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -39,15 +39,13 @@ func TestSpliceEvent(t *testing.T) { t.Run("test_splice", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "splice") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "splice", event.GetType(), "wrong event type") assert.Equal(t, uint32(0), event.Splice.PipeEntryFlag, "wrong pipe entry flag") assert.Equal(t, uint32(0), event.Splice.PipeExitFlag, "wrong pipe exit flag") assert.Equal(t, event.Async, false) - if !validateSpliceSchema(t, event) { - t.Error(event.String()) - } + test.validateSpliceSchema(t, event) }) }) } diff --git a/pkg/security/tests/stress_test.go b/pkg/security/tests/stress_test.go index 85e206f9fe3497..097163656f3fc3 100644 --- a/pkg/security/tests/stress_test.go +++ b/pkg/security/tests/stress_test.go @@ -17,7 +17,7 @@ import ( "testing" "time" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -82,7 +82,7 @@ func stressOpen(t *testing.T, rule *rules.RuleDefinition, pathname string, size } events := 0 - test.RegisterRuleEventHandler(func(_ *sprobe.Event, _ *rules.Rule) { + test.RegisterRuleEventHandler(func(_ *model.Event, _ *rules.Rule) { events++ }) defer test.RegisterRuleEventHandler(nil) @@ -214,13 +214,13 @@ func stressExec(t *testing.T, rule *rules.RuleDefinition, pathname string, execu } events := 0 - test.RegisterRuleEventHandler(func(_ *sprobe.Event, _ *rules.Rule) { + test.RegisterRuleEventHandler(func(_ *model.Event, _ *rules.Rule) { events++ }) defer test.RegisterRuleEventHandler(nil) kevents := 0 - test.RegisterProbeEventHandler(func(_ *sprobe.Event) { + test.RegisterProbeEventHandler(func(_ *model.Event) { kevents++ }) defer test.RegisterProbeEventHandler(nil) diff --git a/pkg/security/tests/syscall_tester/c/syscall_tester.c b/pkg/security/tests/syscall_tester/c/syscall_tester.c index fc29cce39e0e81..5f5488eec4abb8 100644 --- a/pkg/security/tests/syscall_tester/c/syscall_tester.c +++ b/pkg/security/tests/syscall_tester/c/syscall_tester.c @@ -159,18 +159,24 @@ int ptrace_traceme() { return EXIT_SUCCESS; } -int test_signal_sigusr(int child, int sig) { +void sig_handler(int signum){ + exit(0); +} + +int test_signal_sigusr(int sig) { + pid_t child = fork(); if (child == 0) { - child = fork(); - if (child == 0) { - sleep(5); - return EXIT_SUCCESS; - } + signal(sig, sig_handler); + sleep(60); + + return EXIT_SUCCESS; } int ret = kill(child, sig); - sleep(1); - return ret; + if (ret < 0) { + return ret; + } + return wait(NULL); } int test_signal_eperm(void) { @@ -196,19 +202,10 @@ int test_signal(int argc, char **argv) { return EXIT_FAILURE; } - int pid = 0; - if (argc >= 3) { - pid = atoi(argv[2]); - if (pid < 1) { - fprintf(stderr, "invalid pid: %s\n", argv[2]); - return EXIT_FAILURE; - } - } - if (!strcmp(argv[1], "sigusr")) - return test_signal_sigusr(pid, SIGUSR1); + return test_signal_sigusr(SIGUSR1); if (!strcmp(argv[1], "sigusr2")) - return test_signal_sigusr(pid, SIGUSR2); + return test_signal_sigusr(SIGUSR2); else if (!strcmp(argv[1], "eperm")) return test_signal_eperm(); fprintf(stderr, "%s: Unknown argument: %s.\n", __FUNCTION__, argv[1]); diff --git a/pkg/security/tests/unlink_test.go b/pkg/security/tests/unlink_test.go index c7add4606c9f14..401f6c59ce0501 100644 --- a/pkg/security/tests/unlink_test.go +++ b/pkg/security/tests/unlink_test.go @@ -19,7 +19,7 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -51,7 +51,7 @@ func TestUnlink(t *testing.T) { return error(err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "unlink", event.GetType(), "wrong event type") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong inode") assertRights(t, event.Unlink.File.Mode, expectedMode) @@ -75,7 +75,7 @@ func TestUnlink(t *testing.T) { return error(err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "unlink", event.GetType(), "wrong event type") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong inode") assertRights(t, event.Unlink.File.Mode, expectedMode) @@ -128,7 +128,7 @@ func TestUnlink(t *testing.T) { return fmt.Errorf("failed to unlink file with io_uring: %d", ret) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "unlink", event.GetType(), "wrong event type") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong inode") assertRights(t, event.Unlink.File.Mode, expectedMode) @@ -173,7 +173,7 @@ func TestUnlinkInvalidate(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "unlink", event.GetType(), "wrong event type") assertFieldEqual(t, event, "unlink.file.path", testFile) }) diff --git a/pkg/security/tests/utimes_test.go b/pkg/security/tests/utimes_test.go index 6c0ad70875071c..74b97c6bb18c58 100644 --- a/pkg/security/tests/utimes_test.go +++ b/pkg/security/tests/utimes_test.go @@ -17,7 +17,7 @@ import ( "github.com/stretchr/testify/assert" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -52,7 +52,7 @@ func TestUtimes(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "utimes", event.GetType(), "wrong event type") assert.Equal(t, int64(123), event.Utimes.Atime.Unix()) assert.Equal(t, int64(456), event.Utimes.Mtime.Unix()) @@ -89,7 +89,7 @@ func TestUtimes(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "utimes", event.GetType(), "wrong event type") assert.Equal(t, int64(111), event.Utimes.Atime.Unix()) assert.Equal(t, int64(222), event.Utimes.Atime.UnixNano()%int64(time.Second)/int64(time.Microsecond)) @@ -129,7 +129,7 @@ func TestUtimes(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "utimes", event.GetType(), "wrong event type") assert.Equal(t, int64(555), event.Utimes.Mtime.Unix()) assert.Equal(t, int64(666), event.Utimes.Mtime.UnixNano()%int64(time.Second)/int64(time.Nanosecond)) diff --git a/pkg/security/tests/xattr_test.go b/pkg/security/tests/xattr_test.go index 7013075547023b..da9f68b0410874 100644 --- a/pkg/security/tests/xattr_test.go +++ b/pkg/security/tests/xattr_test.go @@ -17,7 +17,7 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -62,7 +62,7 @@ func TestSetXAttr(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "setxattr", event.GetType(), "wrong event type") assert.Equal(t, "user.test_xattr", event.SetXAttr.Name) assert.Equal(t, "user", event.SetXAttr.Namespace) @@ -100,7 +100,7 @@ func TestSetXAttr(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "setxattr", event.GetType(), "wrong event type") assert.Equal(t, "user.test_xattr", event.SetXAttr.Name) assert.Equal(t, "user", event.SetXAttr.Namespace) @@ -131,7 +131,7 @@ func TestSetXAttr(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "setxattr", event.GetType(), "wrong event type") assert.Equal(t, "user.test_xattr", event.SetXAttr.Name) assert.Equal(t, "user", event.SetXAttr.Namespace) @@ -198,7 +198,7 @@ func TestRemoveXAttr(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "removexattr", event.GetType(), "wrong event type") assert.Equal(t, "user.test_xattr", event.RemoveXAttr.Name) assert.Equal(t, getInode(t, testFile), event.RemoveXAttr.File.Inode, "wrong inode") @@ -242,7 +242,7 @@ func TestRemoveXAttr(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "removexattr", event.GetType(), "wrong event type") assert.Equal(t, "user.test_xattr", event.RemoveXAttr.Name) assert.Equal(t, getInode(t, testFile), event.RemoveXAttr.File.Inode, "wrong inode") @@ -278,7 +278,7 @@ func TestRemoveXAttr(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { if event.GetType() != "removexattr" { t.Errorf("expected removexattr event, got %s", event.GetType()) } diff --git a/pkg/security/utils/proc.go b/pkg/security/utils/proc.go index e78d1976f4f211..5ca4bd8825469a 100644 --- a/pkg/security/utils/proc.go +++ b/pkg/security/utils/proc.go @@ -246,12 +246,12 @@ func GetFilledProcess(p *process.Process) *process.FilledProcess { } // EnvVars returns a array with the environment variables of the given pid -func EnvVars(pid int32) ([]string, bool, error) { +func EnvVars(pid int32) ([]string, error) { filename := filepath.Join(util.HostProc(), fmt.Sprintf("/%d/environ", pid)) f, err := os.Open(filename) if err != nil { - return nil, false, err + return nil, err } defer f.Close() @@ -271,17 +271,14 @@ func EnvVars(pid int32) ([]string, bool, error) { scanner.Split(zero) var envs []string - truncated := false for scanner.Scan() { text := scanner.Text() if len(text) > 0 { envs = append(envs, text) - } else { - truncated = true } } - return envs, truncated, nil + return envs, nil } // ProcFSModule is a representation of a line in /proc/modules diff --git a/pkg/serializer/internal/stream/compressor.go b/pkg/serializer/internal/stream/compressor.go index 87b20c693db4e2..6b18e5ed7c2bcc 100644 --- a/pkg/serializer/internal/stream/compressor.go +++ b/pkg/serializer/internal/stream/compressor.go @@ -76,7 +76,7 @@ type Compressor struct { separator []byte } -// NewCompressor TODO : IML-199 +// NewCompressor returns a new instance of a Compressor func NewCompressor(input, output *bytes.Buffer, maxPayloadSize, maxUncompressedSize int, header, footer []byte, separator []byte) (*Compressor, error) { c := &Compressor{ header: header, @@ -170,7 +170,7 @@ func (c *Compressor) AddItem(data []byte) error { return nil } -// Close TODO : IML-199 +// Close closes the Compressor, flushing any remaining uncompressed data func (c *Compressor) Close() ([]byte, error) { // Flush remaining uncompressed data if c.input.Len() > 0 { diff --git a/pkg/serializer/internal/stream/json_payload_builder.go b/pkg/serializer/internal/stream/json_payload_builder.go index 79eb80b85b23df..96986146c256ad 100644 --- a/pkg/serializer/internal/stream/json_payload_builder.go +++ b/pkg/serializer/internal/stream/json_payload_builder.go @@ -70,7 +70,7 @@ type JSONPayloadBuilder struct { mu sync.Mutex } -// NewJSONPayloadBuilder TODO : IML-199 +// NewJSONPayloadBuilder returns a new JSONPayloadBuilder func NewJSONPayloadBuilder(shareAndLockBuffers bool) *JSONPayloadBuilder { if shareAndLockBuffers { return &JSONPayloadBuilder{ diff --git a/pkg/serializer/serializer.go b/pkg/serializer/serializer.go index 0919ee345d499b..a2500a5fd578e8 100644 --- a/pkg/serializer/serializer.go +++ b/pkg/serializer/serializer.go @@ -27,6 +27,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/version" + "github.com/benbjohnson/clock" "github.com/gogo/protobuf/proto" ) @@ -100,13 +101,18 @@ type MetricSerializer interface { SendOrchestratorMetadata(msgs []ProcessMessageBody, hostName, clusterID string, payloadType int) error SendOrchestratorManifests(msgs []ProcessMessageBody, hostName, clusterID string) error SendContainerLifecycleEvent(msgs []ContainerLifecycleMessage, hostName string) error + SendContainerImage(msgs []ContainerImageMessage, hostname string) error + SendSBOM(msgs []SBOMMessage, hostname string) error } // Serializer serializes metrics to the correct format and routes the payloads to the correct endpoint in the Forwarder type Serializer struct { + clock clock.Clock Forwarder forwarder.Forwarder orchestratorForwarder forwarder.Forwarder contlcycleForwarder forwarder.Forwarder + contimageForwarder forwarder.Forwarder + sbomForwarder forwarder.Forwarder seriesJSONPayloadBuilder *stream.JSONPayloadBuilder @@ -128,11 +134,14 @@ type Serializer struct { } // NewSerializer returns a new Serializer initialized -func NewSerializer(forwarder forwarder.Forwarder, orchestratorForwarder, contlcycleForwarder forwarder.Forwarder) *Serializer { +func NewSerializer(forwarder forwarder.Forwarder, orchestratorForwarder, contlcycleForwarder, contimageForwarder, sbomForwarder forwarder.Forwarder) *Serializer { s := &Serializer{ + clock: clock.New(), Forwarder: forwarder, orchestratorForwarder: orchestratorForwarder, contlcycleForwarder: contlcycleForwarder, + contimageForwarder: contimageForwarder, + sbomForwarder: sbomForwarder, seriesJSONPayloadBuilder: stream.NewJSONPayloadBuilder(config.Datadog.GetBool("enable_json_stream_shared_compressor_buffers")), enableEvents: config.Datadog.GetBool("enable_payloads.events"), enableSeries: config.Datadog.GetBool("enable_payloads.series"), @@ -460,23 +469,105 @@ func (s *Serializer) SendContainerLifecycleEvent(msgs []ContainerLifecycleMessag return errors.New("container lifecycle forwarder is not setup") } + payloads := make([]*[]byte, 0, len(msgs)) + for _, msg := range msgs { - extraHeaders := make(http.Header) - extraHeaders.Set("Content-Type", protobufContentType) msg.Host = hostname encoded, err := proto.Marshal(&msg) if err != nil { return log.Errorf("Unable to encode message: %v", err) } - payloads := transaction.NewBytesPayloadsWithoutMetaData([]*[]byte{&encoded}) - if err := s.contlcycleForwarder.SubmitContainerLifecycleEvents(payloads, extraHeaders); err != nil { - return log.Errorf("Unable to submit container lifecycle payload: %v", err) + payloads = append(payloads, &encoded) + } + + bytePayloads := transaction.NewBytesPayloadsWithoutMetaData(payloads) + + extraHeaders := make(http.Header) + extraHeaders.Set(headers.TimestampHeader, strconv.Itoa(int(s.clock.Now().Unix()))) + extraHeaders.Set(headers.EVPOriginHeader, "agent") + extraHeaders.Set(headers.EVPOriginVersionHeader, version.AgentVersion) + extraHeaders.Set(headers.ContentTypeHeader, headers.ProtobufContentType) + extraHeaders.Set(payloadVersionHTTPHeader, AgentPayloadVersion) + + if err := s.contlcycleForwarder.SubmitContainerLifecycleEvents(bytePayloads, extraHeaders); err != nil { + return log.Errorf("Unable to submit container lifecycle payloads: %v", err) + } + + log.Tracef("Sent container lifecycle events %+v", msgs) + + return nil +} + +// SendContainerImage serializes & sends container image payloads +func (s *Serializer) SendContainerImage(msgs []ContainerImageMessage, hostname string) error { + if s.contimageForwarder == nil { + return errors.New("container image forwarder is not setup") + } + + payloads := make([]*[]byte, 0, len(msgs)) + + for i := range msgs { + msgs[i].Host = hostname + encoded, err := proto.Marshal(&msgs[i]) + if err != nil { + return log.Errorf("Unable to encode message: %+v", err) + } + + payloads = append(payloads, &encoded) + } + + bytesPayloads := transaction.NewBytesPayloadsWithoutMetaData(payloads) + + extraHeaders := make(http.Header) + extraHeaders.Set(headers.TimestampHeader, strconv.Itoa(int(s.clock.Now().Unix()))) + extraHeaders.Set(headers.EVPOriginHeader, "agent") + extraHeaders.Set(headers.EVPOriginVersionHeader, version.AgentVersion) + extraHeaders.Set(headers.ContentTypeHeader, headers.ProtobufContentType) + extraHeaders.Set(payloadVersionHTTPHeader, AgentPayloadVersion) + + if err := s.contimageForwarder.SubmitContainerImages(bytesPayloads, extraHeaders); err != nil { + return log.Errorf("Unable to submit container image payload: %v", err) + } + + log.Tracef("Send container images %+v", msgs) + + return nil +} + +// SendSBOM serializes & sends sbom payloads +func (s *Serializer) SendSBOM(msgs []SBOMMessage, hostname string) error { + if s.sbomForwarder == nil { + return errors.New("SBOM forwarder is not setup") + } + + payloads := make([]*[]byte, 0, len(msgs)) + + for i := range msgs { + msgs[i].Host = hostname + encoded, err := proto.Marshal(&msgs[i]) + if err != nil { + return log.Errorf("Unable to encode message: %+v", err) } - log.Tracef("Sent container lifecycle event %+v", msg) + payloads = append(payloads, &encoded) + } + + bytesPayloads := transaction.NewBytesPayloadsWithoutMetaData(payloads) + + extraHeaders := make(http.Header) + extraHeaders.Set(headers.TimestampHeader, strconv.Itoa(int(s.clock.Now().Unix()))) + extraHeaders.Set(headers.EVPOriginHeader, "agent") + extraHeaders.Set(headers.EVPOriginVersionHeader, version.AgentVersion) + extraHeaders.Set(headers.ContentTypeHeader, headers.ProtobufContentType) + extraHeaders.Set(payloadVersionHTTPHeader, AgentPayloadVersion) + + if err := s.sbomForwarder.SubmitSBOM(bytesPayloads, extraHeaders); err != nil { + return log.Errorf("Unable to submit SBOM payload: %v", err) } + log.Tracef("Send SBOM %+v", msgs) + return nil } diff --git a/pkg/serializer/serializer_test.go b/pkg/serializer/serializer_test.go index 3c97eb8afcf814..d68f9138ee4244 100644 --- a/pkg/serializer/serializer_test.go +++ b/pkg/serializer/serializer_test.go @@ -12,21 +12,28 @@ import ( "fmt" "net/http" "reflect" + "strconv" "strings" "testing" + "github.com/benbjohnson/clock" jsoniter "github.com/json-iterator/go" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" + "github.com/DataDog/agent-payload/v5/contimage" + "github.com/DataDog/agent-payload/v5/contlcycle" + "github.com/DataDog/agent-payload/v5/sbom" "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/forwarder" "github.com/DataDog/datadog-agent/pkg/forwarder/transaction" "github.com/DataDog/datadog-agent/pkg/metrics" + "github.com/DataDog/datadog-agent/pkg/process/util/api/headers" metricsserializer "github.com/DataDog/datadog-agent/pkg/serializer/internal/metrics" "github.com/DataDog/datadog-agent/pkg/serializer/marshaler" "github.com/DataDog/datadog-agent/pkg/util/compression" + "github.com/DataDog/datadog-agent/pkg/version" ) var initialContentEncoding = compression.ContentEncoding @@ -224,7 +231,7 @@ func TestSendV1Events(t *testing.T) { matcher := createJSONPayloadMatcher(`{"apiKey":"","events":{},"internalHostname"`) f.On("SubmitV1Intake", matcher, jsonExtraHeadersWithCompression).Return(nil).Times(1) - s := NewSerializer(f, nil, nil) + s := NewSerializer(f, nil, nil, nil, nil) err := s.SendEvents([]*metrics.Event{}) require.Nil(t, err) f.AssertExpectations(t) @@ -242,7 +249,7 @@ func TestSendV1EventsCreateMarshalersBySourceType(t *testing.T) { defer config.Datadog.Set("enable_events_stream_payload_serialization", nil) f := &forwarder.MockedForwarder{} - s := NewSerializer(f, nil, nil) + s := NewSerializer(f, nil, nil, nil, nil) events := metrics.Events{&metrics.Event{SourceTypeName: "source1"}, &metrics.Event{SourceTypeName: "source2"}, &metrics.Event{SourceTypeName: "source3"}} payloadsCountMatcher := func(payloadCount int) interface{} { @@ -272,7 +279,7 @@ func TestSendV1ServiceChecks(t *testing.T) { config.Datadog.Set("enable_service_checks_stream_payload_serialization", false) defer config.Datadog.Set("enable_service_checks_stream_payload_serialization", nil) - s := NewSerializer(f, nil, nil) + s := NewSerializer(f, nil, nil, nil, nil) err := s.SendServiceChecks(metrics.ServiceChecks{&metrics.ServiceCheck{}}) require.Nil(t, err) f.AssertExpectations(t) @@ -288,7 +295,7 @@ func TestSendV1Series(t *testing.T) { config.Datadog.Set("use_v2_api.series", false) defer config.Datadog.Set("use_v2_api.series", true) - s := NewSerializer(f, nil, nil) + s := NewSerializer(f, nil, nil, nil, nil) err := s.SendIterableSeries(metricsserializer.CreateSerieSource(metrics.Series{})) require.Nil(t, err) @@ -301,7 +308,7 @@ func TestSendSeries(t *testing.T) { f.On("SubmitSeries", matcher, protobufExtraHeadersWithCompression).Return(nil).Times(1) config.Datadog.Set("use_v2_api.series", true) // default value, but just to be sure - s := NewSerializer(f, nil, nil) + s := NewSerializer(f, nil, nil, nil, nil) err := s.SendIterableSeries(metricsserializer.CreateSerieSource(metrics.Series{&metrics.Serie{}})) require.Nil(t, err) @@ -314,7 +321,7 @@ func TestSendSketch(t *testing.T) { matcher := createProtoPayloadMatcher([]byte{18, 0}) f.On("SubmitSketchSeries", matcher, protobufExtraHeadersWithCompression).Return(nil).Times(1) - s := NewSerializer(f, nil, nil) + s := NewSerializer(f, nil, nil, nil, nil) err := s.SendSketch(metrics.NewSketchesSourceTest()) require.Nil(t, err) f.AssertExpectations(t) @@ -324,7 +331,7 @@ func TestSendMetadata(t *testing.T) { f := &forwarder.MockedForwarder{} f.On("SubmitMetadata", jsonPayloads, jsonExtraHeadersWithCompression).Return(nil).Times(1) - s := NewSerializer(f, nil, nil) + s := NewSerializer(f, nil, nil, nil, nil) payload := &testPayload{} err := s.SendMetadata(payload) @@ -347,7 +354,7 @@ func TestSendProcessesMetadata(t *testing.T) { payloads, _ := mkPayloads(payload, true) f.On("SubmitV1Intake", payloads, jsonExtraHeadersWithCompression).Return(nil).Times(1) - s := NewSerializer(f, nil, nil) + s := NewSerializer(f, nil, nil, nil, nil) err := s.SendProcessesMetadata("test") require.Nil(t, err) @@ -363,6 +370,105 @@ func TestSendProcessesMetadata(t *testing.T) { require.NotNil(t, err) } +func TestSendContainerLifecycleEvents(t *testing.T) { + clock := clock.NewMock() + f := &forwarder.MockedForwarder{} + payload := []byte("\x0a\x02v1\x12\x08hostname\x18\x01") + payloads, _ := mkPayloads(payload, false) + extraHeaders := protobufExtraHeaders.Clone() + extraHeaders.Set(headers.EVPOriginHeader, "agent") + extraHeaders.Set(headers.EVPOriginVersionHeader, version.AgentVersion) + extraHeaders.Set(headers.TimestampHeader, strconv.Itoa(int(clock.Now().Unix()))) + f.On("SubmitContainerLifecycleEvents", payloads, extraHeaders).Return(nil).Times(1) + + s := NewSerializer(nil, nil, f, nil, nil) + s.clock = clock + + msg := []ContainerLifecycleMessage{ + { + Version: "v1", + Host: "hostname", + ObjectKind: contlcycle.EventsPayload_Pod, + Events: []*contlcycle.Event{}, + }, + } + err := s.SendContainerLifecycleEvent(msg, "hostname") + require.Nil(t, err) + f.AssertExpectations(t) + + f.On("SubmitContainerLifecycleEvents", payloads, extraHeaders).Return(fmt.Errorf("some error")).Times(1) + err = s.SendContainerLifecycleEvent(msg, "hostname") + require.NotNil(t, err) + f.AssertExpectations(t) +} + +func TestSendContainerImage(t *testing.T) { + clock := clock.NewMock() + f := &forwarder.MockedForwarder{} + payload := []byte("\x0a\x02v1\x12\x08hostname") + payloads, _ := mkPayloads(payload, false) + extraHeaders := protobufExtraHeaders.Clone() + extraHeaders.Set(headers.EVPOriginHeader, "agent") + extraHeaders.Set(headers.EVPOriginVersionHeader, version.AgentVersion) + extraHeaders.Set(headers.TimestampHeader, strconv.Itoa(int(clock.Now().Unix()))) + f.On("SubmitContainerImages", payloads, extraHeaders).Return(nil).Times(1) + + s := NewSerializer(nil, nil, nil, f, nil) + s.clock = clock + + msg := []ContainerImageMessage{ + { + Version: "v1", + Host: "hostname", + Images: []*contimage.ContainerImage{}, + }, + } + err := s.SendContainerImage(msg, "hostname") + require.Nil(t, err) + f.AssertExpectations(t) + + f.On("SubmitContainerImages", payloads, extraHeaders).Return(fmt.Errorf("some error")).Times(1) + err = s.SendContainerImage(msg, "hostname") + require.NotNil(t, err) + f.AssertExpectations(t) +} + +func makePtr(val string) *string { + return &val +} + +func TestSendSBOM(t *testing.T) { + clock := clock.NewMock() + f := &forwarder.MockedForwarder{} + payload := []byte("\x08\x01\x12\x08hostname\x1a\x05agent") + payloads, _ := mkPayloads(payload, false) + extraHeaders := protobufExtraHeaders.Clone() + extraHeaders.Set(headers.EVPOriginHeader, "agent") + extraHeaders.Set(headers.EVPOriginVersionHeader, version.AgentVersion) + extraHeaders.Set(headers.TimestampHeader, strconv.Itoa(int(clock.Now().Unix()))) + f.On("SubmitSBOM", payloads, extraHeaders).Return(nil).Times(1) + + s := NewSerializer(nil, nil, nil, nil, f) + s.clock = clock + + msg := []SBOMMessage{ + { + Version: 1, + Host: "hostname", + Source: makePtr("agent"), + Entities: []*sbom.SBOMEntity{}, + }, + } + err := s.SendSBOM(msg, "hostname") + require.Nil(t, err) + f.AssertExpectations(t) + + f.On("SubmitSBOM", payloads, extraHeaders).Return(fmt.Errorf("some error")).Times(1) + err = s.SendSBOM(msg, "hostname") + require.NotNil(t, err) + f.AssertExpectations(t) +} + func TestSendWithDisabledKind(t *testing.T) { mockConfig := config.Mock(t) @@ -382,7 +488,7 @@ func TestSendWithDisabledKind(t *testing.T) { }() f := &forwarder.MockedForwarder{} - s := NewSerializer(f, nil, nil) + s := NewSerializer(f, nil, nil, nil, nil) payload := &testPayload{} diff --git a/pkg/serializer/test_common.go b/pkg/serializer/test_common.go index 587594f847ddca..3e4dd058d5e946 100644 --- a/pkg/serializer/test_common.go +++ b/pkg/serializer/test_common.go @@ -66,17 +66,27 @@ func (s *MockSerializer) SendProcessesMetadata(data interface{}) error { return s.Called(data).Error(0) } -// SendOrchestratorMetadata serializes & send orchestrator metadata payloads +// SendOrchestratorMetadata serializes & sends orchestrator metadata payloads func (s *MockSerializer) SendOrchestratorMetadata(msgs []ProcessMessageBody, hostName, clusterID string, payloadType int) error { return s.Called(msgs, hostName, clusterID, payloadType).Error(0) } -// SendContainerLifecycleEvent serializes & send container lifecycle event payloads +// SendContainerLifecycleEvent serializes & sends container lifecycle event payloads func (s *MockSerializer) SendContainerLifecycleEvent(msgs []ContainerLifecycleMessage, hostname string) error { return s.Called(msgs, hostname).Error(0) } -// SendOrchestratorManifests serializes & send orchestrator manifest payloads +// SendContainerImage serializes & sends container image payloads +func (s *MockSerializer) SendContainerImage(msgs []ContainerImageMessage, hostname string) error { + return s.Called(msgs, hostname).Error(0) +} + +// SendSBOM serializes & sends SBOM payloads +func (s *MockSerializer) SendSBOM(msgs []SBOMMessage, hostname string) error { + return s.Called(msgs, hostname).Error(0) +} + +// SendOrchestratorManifests serializes & sends orchestrator manifest payloads func (s *MockSerializer) SendOrchestratorManifests(msgs []ProcessMessageBody, hostName, clusterID string) error { return s.Called(msgs, hostName, clusterID).Error(0) } diff --git a/pkg/serializer/types_contimage.go b/pkg/serializer/types_contimage.go new file mode 100644 index 00000000000000..bd5ba52bfd8440 --- /dev/null +++ b/pkg/serializer/types_contimage.go @@ -0,0 +1,13 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package serializer + +import ( + "github.com/DataDog/agent-payload/v5/contimage" +) + +// ContainerImageMessage is a type alias for contimage proto payload +type ContainerImageMessage = contimage.ContainerImagePayload diff --git a/pkg/serializer/types_sbom.go b/pkg/serializer/types_sbom.go new file mode 100644 index 00000000000000..abda2692aed2b6 --- /dev/null +++ b/pkg/serializer/types_sbom.go @@ -0,0 +1,13 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package serializer + +import ( + "github.com/DataDog/agent-payload/v5/sbom" +) + +// SBOMMessage is a type alias for SBOM proto payload +type SBOMMessage = sbom.SBOMPayload diff --git a/pkg/serverless/daemon/daemon.go b/pkg/serverless/daemon/daemon.go index 5e623ae168b1c7..22d1c228da9f8b 100644 --- a/pkg/serverless/daemon/daemon.go +++ b/pkg/serverless/daemon/daemon.go @@ -40,6 +40,8 @@ type Daemon struct { TraceAgent *trace.ServerlessTraceAgent + ColdStartCreator *trace.ColdStartSpanCreator + // lastInvocations stores last invocation times to be able to compute the // interval of invocation of the function. lastInvocations []time.Time @@ -164,10 +166,10 @@ func (d *Daemon) GetFlushStrategy() string { } // SetupLogCollectionHandler configures the log collection route handler -func (d *Daemon) SetupLogCollectionHandler(route string, logsChan chan *logConfig.ChannelMessage, logsEnabled bool, enhancedMetricsEnabled bool) { +func (d *Daemon) SetupLogCollectionHandler(route string, logsChan chan *logConfig.ChannelMessage, logsEnabled bool, enhancedMetricsEnabled bool, initDurationChan chan<- float64) { d.logCollector = serverlessLog.NewLambdaLogCollector(logsChan, - d.MetricAgent.Demux, d.ExtraTags, logsEnabled, enhancedMetricsEnabled, d.ExecutionContext, d.HandleRuntimeDone) + d.MetricAgent.Demux, d.ExtraTags, logsEnabled, enhancedMetricsEnabled, d.ExecutionContext, d.HandleRuntimeDone, initDurationChan) server := serverlessLog.NewLambdaLogsAPIServer(d.logCollector.In) d.mux.Handle(route, &server) @@ -184,6 +186,10 @@ func (d *Daemon) SetTraceAgent(traceAgent *trace.ServerlessTraceAgent) { d.TraceAgent = traceAgent } +func (d *Daemon) SetColdStartSpanCreator(creator *trace.ColdStartSpanCreator) { + d.ColdStartCreator = creator +} + // SetFlushStrategy sets the flush strategy to use. func (d *Daemon) SetFlushStrategy(strategy flush.Strategy) { log.Debugf("Set flush strategy: %s (was: %s)", strategy.String(), d.GetFlushStrategy()) @@ -305,6 +311,10 @@ func (d *Daemon) Stop() { if d.MetricAgent != nil { d.MetricAgent.Stop() } + + if d.ColdStartCreator != nil { + d.ColdStartCreator.Stop() + } logs.Stop() log.Debug("Serverless agent shutdown complete") } diff --git a/pkg/serverless/daemon/daemon_test.go b/pkg/serverless/daemon/daemon_test.go index abe9e3aa59caf5..57b90701f4cc2a 100644 --- a/pkg/serverless/daemon/daemon_test.go +++ b/pkg/serverless/daemon/daemon_test.go @@ -16,7 +16,9 @@ import ( "github.com/stretchr/testify/assert" + "github.com/DataDog/datadog-agent/pkg/serverless/random" "github.com/DataDog/datadog-agent/pkg/serverless/trace" + "github.com/DataDog/datadog-agent/pkg/trace/pb" "github.com/DataDog/datadog-agent/pkg/trace/testutil" ) @@ -163,7 +165,7 @@ func TestSetTraceTagOk(t *testing.T) { } var agent = &trace.ServerlessTraceAgent{} t.Setenv("DD_API_KEY", "x") - agent.Start(true, &trace.LoadConfig{Path: "/does-not-exist.yml"}, nil) + agent.Start(true, &trace.LoadConfig{Path: "/does-not-exist.yml"}, make(chan *pb.Span), random.Random.Uint64()) defer agent.Stop() d := Daemon{ TraceAgent: agent, diff --git a/pkg/serverless/daemon/routes.go b/pkg/serverless/daemon/routes.go index 5404bc87c387c8..b2459ce26e2dba 100644 --- a/pkg/serverless/daemon/routes.go +++ b/pkg/serverless/daemon/routes.go @@ -103,7 +103,6 @@ func (e *EndInvocation) ServeHTTP(w http.ResponseWriter, r *http.Request) { IsError: r.Header.Get(invocationlifecycle.InvocationErrorHeader) == "true", RequestID: ecs.LastRequestID, ResponseRawPayload: responseBody, - ColdStartDuration: ecs.ColdstartDuration, } executionContext := e.daemon.InvocationProcessor.GetExecutionInfo() if executionContext.TraceID == 0 { diff --git a/pkg/serverless/executioncontext/executioncontext.go b/pkg/serverless/executioncontext/executioncontext.go index 5669bc8a221338..83140922dd41a3 100644 --- a/pkg/serverless/executioncontext/executioncontext.go +++ b/pkg/serverless/executioncontext/executioncontext.go @@ -23,7 +23,6 @@ type ExecutionContext struct { coldstartRequestID string lastLogRequestID string coldstart bool - coldstartDuration float64 startTime time.Time endTime time.Time } @@ -35,7 +34,6 @@ type State struct { ColdstartRequestID string LastLogRequestID string Coldstart bool - ColdstartDuration float64 StartTime time.Time EndTime time.Time } @@ -50,18 +48,11 @@ func (ec *ExecutionContext) GetCurrentState() State { ColdstartRequestID: ec.coldstartRequestID, LastLogRequestID: ec.lastLogRequestID, Coldstart: ec.coldstart, - ColdstartDuration: ec.coldstartDuration, StartTime: ec.startTime, EndTime: ec.endTime, } } -func (ec *ExecutionContext) SetColdStartDuration(duration float64) { - ec.m.Lock() - defer ec.m.Unlock() - ec.coldstartDuration = duration -} - // SetFromInvocation sets the execution context based on an invocation func (ec *ExecutionContext) SetFromInvocation(arn string, requestID string) { ec.m.Lock() diff --git a/pkg/serverless/invocationlifecycle/invocation_details.go b/pkg/serverless/invocationlifecycle/invocation_details.go index 94fad5bd70d01c..7dcc6d8f92bfb4 100644 --- a/pkg/serverless/invocationlifecycle/invocation_details.go +++ b/pkg/serverless/invocationlifecycle/invocation_details.go @@ -37,5 +37,4 @@ type InvocationEndDetails struct { IsError bool RequestID string ResponseRawPayload []byte - ColdStartDuration float64 } diff --git a/pkg/serverless/invocationlifecycle/lifecycle_test.go b/pkg/serverless/invocationlifecycle/lifecycle_test.go index 59b316007dfb31..872c0ad18dba71 100644 --- a/pkg/serverless/invocationlifecycle/lifecycle_test.go +++ b/pkg/serverless/invocationlifecycle/lifecycle_test.go @@ -735,7 +735,7 @@ func TestTriggerTypesLifecycleEventForKinesis(t *testing.T) { RequestID: "test-request-id", }) assert.Equal(t, map[string]string{ - "function_trigger.event_source_arn": "arn:aws:kinesis:sa-east-1:601427279990:stream/kinesisStream", + "function_trigger.event_source_arn": "arn:aws:kinesis:sa-east-1:425362996713:stream/kinesisStream", "request_id": "test-request-id", "function_trigger.event_source": "kinesis", }, testProcessor.GetTags()) @@ -779,7 +779,7 @@ func TestTriggerTypesLifecycleEventForSNS(t *testing.T) { RequestID: "test-request-id", }) assert.Equal(t, map[string]string{ - "function_trigger.event_source_arn": "arn:aws:sns:sa-east-1:601427279990:serverlessTracingTopicPy", + "function_trigger.event_source_arn": "arn:aws:sns:sa-east-1:425362996713:serverlessTracingTopicPy", "request_id": "test-request-id", "function_trigger.event_source": "sns", }, testProcessor.GetTags()) @@ -801,7 +801,7 @@ func TestTriggerTypesLifecycleEventForSQS(t *testing.T) { RequestID: "test-request-id", }) assert.Equal(t, map[string]string{ - "function_trigger.event_source_arn": "arn:aws:sqs:sa-east-1:601427279990:InferredSpansQueueNode", + "function_trigger.event_source_arn": "arn:aws:sqs:sa-east-1:425362996713:InferredSpansQueueNode", "request_id": "test-request-id", "function_trigger.event_source": "sqs", }, testProcessor.GetTags()) diff --git a/pkg/serverless/logs/logs_collector.go b/pkg/serverless/logs/logs_collector.go index 3e7668999fe941..69112847c2bf0e 100644 --- a/pkg/serverless/logs/logs_collector.go +++ b/pkg/serverless/logs/logs_collector.go @@ -46,6 +46,7 @@ type LambdaLogsCollector struct { invocationEndTime time.Time process_once *sync.Once executionContext *executioncontext.ExecutionContext + initDurationChan chan<- float64 arn string @@ -53,7 +54,7 @@ type LambdaLogsCollector struct { handleRuntimeDone func() } -func NewLambdaLogCollector(out chan<- *logConfig.ChannelMessage, demux aggregator.Demultiplexer, extraTags *Tags, logsEnabled bool, enhancedMetricsEnabled bool, executionContext *executioncontext.ExecutionContext, handleRuntimeDone func()) *LambdaLogsCollector { +func NewLambdaLogCollector(out chan<- *logConfig.ChannelMessage, demux aggregator.Demultiplexer, extraTags *Tags, logsEnabled bool, enhancedMetricsEnabled bool, executionContext *executioncontext.ExecutionContext, handleRuntimeDone func(), initDurationChan chan<- float64) *LambdaLogsCollector { return &LambdaLogsCollector{ In: make(chan []LambdaLogAPIMessage, maxBufferedLogs), // Buffered, so we can hold start-up logs before first invocation without blocking @@ -65,6 +66,7 @@ func NewLambdaLogCollector(out chan<- *logConfig.ChannelMessage, demux aggregato executionContext: executionContext, handleRuntimeDone: handleRuntimeDone, process_once: &sync.Once{}, + initDurationChan: initDurationChan, } } @@ -170,7 +172,7 @@ func (lc *LambdaLogsCollector) processMessage( return } if message.logType == logTypePlatformInitReport { - lc.executionContext.SetColdStartDuration(message.objectRecord.reportLogItem.initDurationTelemetry) + lc.initDurationChan <- message.objectRecord.reportLogItem.initDurationTelemetry } if message.logType == logTypePlatformStart { diff --git a/pkg/serverless/logs/logs_test.go b/pkg/serverless/logs/logs_test.go index 088c552ce15fcb..0b6668bbb55ead 100644 --- a/pkg/serverless/logs/logs_test.go +++ b/pkg/serverless/logs/logs_test.go @@ -211,7 +211,7 @@ func TestProcessMessageValid(t *testing.T) { tags := Tags{ Tags: metricTags, } - lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, func() {}) + lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, func() {}, make(chan<- float64)) lc.processMessage(&message) @@ -255,7 +255,7 @@ func TestProcessMessageStartValid(t *testing.T) { tags := Tags{ Tags: metricTags, } - lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, mockRuntimeDone) + lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, mockRuntimeDone, make(chan<- float64)) lc.lastRequestID = lastRequestID lc.processMessage(message) assert.Equal(t, runtimeDoneCallbackWasCalled, false) @@ -287,7 +287,7 @@ func TestProcessMessagePlatformRuntimeDoneValid(t *testing.T) { mockRuntimeDone := func() { runtimeDoneCallbackWasCalled = true } - lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, mockRuntimeDone) + lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, mockRuntimeDone, make(chan<- float64)) lc.lastRequestID = lastRequestID lc.processMessage(&message) ecs := mockExecutionContext.GetCurrentState() @@ -323,7 +323,7 @@ func TestProcessMessagePlatformRuntimeDonePreviousInvocation(t *testing.T) { mockRuntimeDone := func() { runtimeDoneCallbackWasCalled = true } - lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, mockRuntimeDone) + lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, mockRuntimeDone, make(chan<- float64)) lc.processMessage(message) // Runtime done callback should NOT be called if the log message was for a previous invocation @@ -355,7 +355,7 @@ func TestProcessMessageShouldNotProcessArnNotSet(t *testing.T) { mockExecutionContext := &executioncontext.ExecutionContext{} computeEnhancedMetrics := true - lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, func() {}) + lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, func() {}, make(chan<- float64)) go lc.processMessage(message) @@ -383,7 +383,7 @@ func TestProcessMessageShouldNotProcessLogsDropped(t *testing.T) { mockExecutionContext := &executioncontext.ExecutionContext{} mockExecutionContext.SetFromInvocation(arn, lastRequestID) - lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, func() {}) + lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, func() {}, make(chan<- float64)) go lc.processMessage(message) @@ -412,7 +412,7 @@ func TestProcessMessageShouldProcessLogTypeFunction(t *testing.T) { mockExecutionContext := &executioncontext.ExecutionContext{} mockExecutionContext.SetFromInvocation(arn, lastRequestID) - lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, func() {}) + lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, func() {}, make(chan<- float64)) go lc.processMessage(message) @@ -860,7 +860,7 @@ func TestRuntimeMetricsMatchLogs(t *testing.T) { }, }, } - lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, func() {}) + lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, func() {}, make(chan<- float64)) lc.invocationStartTime = startTime lc.processMessage(doneMessage) diff --git a/pkg/serverless/logs/parse.go b/pkg/serverless/logs/parse.go index 2f0f7c877a6066..ed2433f6478132 100644 --- a/pkg/serverless/logs/parse.go +++ b/pkg/serverless/logs/parse.go @@ -196,7 +196,8 @@ func (l *LambdaLogAPIMessage) handlePlatformRuntimeDone(objectRecord map[string] func (l *LambdaLogAPIMessage) handlePlatformRuntimeDoneSpans(objectRecord map[string]interface{}) { spans, ok := objectRecord["spans"].([]interface{}) if !ok { - log.Error("LogMessage.UnmarshalJSON: can't read the spans object") + // no spans if the function errored and did not return a response + log.Debug("LogMessage.UnmarshalJSON: no spans object received") return } for _, span := range spans { diff --git a/pkg/serverless/registration/telemetry_api_test.go b/pkg/serverless/registration/telemetry_api_test.go index ace4719041a6ca..e519bb2101ac98 100644 --- a/pkg/serverless/registration/telemetry_api_test.go +++ b/pkg/serverless/registration/telemetry_api_test.go @@ -86,13 +86,18 @@ func TestSubscribeLogsSuccess(t *testing.T) { func TestSubscribeLogsTimeout(t *testing.T) { payload := buildLogRegistrationPayload("myUri", "platform function", 10, 100, 1000) + done := make(chan struct{}) //fake the register route ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // timeout - time.Sleep(registerLogsTimeout + 100*time.Millisecond) + select { + case <-time.After(registerLogsTimeout + 5*time.Second): + case <-done: + } w.WriteHeader(200) })) defer ts.Close() + defer close(done) err := subscribeTelemetry("myId", ts.URL, registerLogsTimeout, payload) assert.NotNil(t, err) diff --git a/pkg/serverless/serverless.go b/pkg/serverless/serverless.go index 56c2af29f94fc4..5a44b6c2d02475 100644 --- a/pkg/serverless/serverless.go +++ b/pkg/serverless/serverless.go @@ -211,7 +211,7 @@ func callInvocationHandler(daemon *daemon.Daemon, arn string, deadlineMs int64, func handleInvocation(doneChannel chan bool, daemon *daemon.Daemon, arn string, requestID string) { log.Debug("Received invocation event...") daemon.ExecutionContext.SetFromInvocation(arn, requestID) - daemon.ComputeGlobalTags(config.GetConfiguredTags(true)) + daemon.ComputeGlobalTags(config.GetGlobalConfiguredTags(true)) daemon.StartLogCollection() ecs := daemon.ExecutionContext.GetCurrentState() diff --git a/pkg/serverless/serverless_test.go b/pkg/serverless/serverless_test.go index 2dc6e88ed5a234..9250a6b84afaca 100644 --- a/pkg/serverless/serverless_test.go +++ b/pkg/serverless/serverless_test.go @@ -16,6 +16,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/DataDog/datadog-agent/pkg/serverless/daemon" + "github.com/DataDog/datadog-agent/pkg/serverless/flush" "github.com/DataDog/datadog-agent/pkg/serverless/tags" ) @@ -30,14 +31,14 @@ func TestHandleInvocationShouldSetExtraTags(t *testing.T) { d := daemon.StartDaemon("http://localhost:8124") defer d.Stop() - d.WaitForDaemon() + // force daemon not to wait for flush at end of handleInvocation + d.SetFlushStrategy(flush.NewPeriodically(time.Second)) + d.UseAdaptiveFlush(false) - d.TellDaemonRuntimeStarted() + // deadline = current time + 5s + deadlineMs := (time.Now().UnixNano())/1000000 + 5000 - //deadline = current time + 20 ms - deadlineMs := (time.Now().UnixNano())/1000000 + 20 - - //setting DD_TAGS and DD_EXTRA_TAGS + // setting DD_TAGS and DD_EXTRA_TAGS t.Setenv("DD_TAGS", "a1:valueA1,a2:valueA2,A_MAJ:valueAMaj") t.Setenv("DD_EXTRA_TAGS", "a3:valueA3 a4:valueA4") @@ -101,14 +102,14 @@ func TestComputeTimeout(t *testing.T) { } func TestRemoveQualifierFromArnWithAlias(t *testing.T) { - invokedFunctionArn := "arn:aws:lambda:eu-south-1:601427279990:function:inferred-spans-function-urls-dev-harv-function-urls:$latest" + invokedFunctionArn := "arn:aws:lambda:eu-south-1:425362996713:function:inferred-spans-function-urls-dev-harv-function-urls:$latest" functionArn := removeQualifierFromArn(invokedFunctionArn) - expectedArn := "arn:aws:lambda:eu-south-1:601427279990:function:inferred-spans-function-urls-dev-harv-function-urls" + expectedArn := "arn:aws:lambda:eu-south-1:425362996713:function:inferred-spans-function-urls-dev-harv-function-urls" assert.Equal(t, functionArn, expectedArn) } func TestRemoveQualifierFromArnWithoutAlias(t *testing.T) { - invokedFunctionArn := "arn:aws:lambda:eu-south-1:601427279990:function:inferred-spans-function-urls-dev-harv-function-urls" + invokedFunctionArn := "arn:aws:lambda:eu-south-1:425362996713:function:inferred-spans-function-urls-dev-harv-function-urls" functionArn := removeQualifierFromArn(invokedFunctionArn) assert.Equal(t, functionArn, invokedFunctionArn) } diff --git a/pkg/serverless/trace/cold_start_span_creator.go b/pkg/serverless/trace/cold_start_span_creator.go index ef21eef9c777cc..f4a5fa8e24d9f5 100644 --- a/pkg/serverless/trace/cold_start_span_creator.go +++ b/pkg/serverless/trace/cold_start_span_creator.go @@ -9,8 +9,6 @@ import ( "os" "sync" - "github.com/DataDog/datadog-agent/pkg/serverless/executioncontext" - "github.com/DataDog/datadog-agent/pkg/serverless/trace/inferredspan" "github.com/DataDog/datadog-agent/pkg/trace/api" "github.com/DataDog/datadog-agent/pkg/trace/info" "github.com/DataDog/datadog-agent/pkg/trace/pb" @@ -35,45 +33,99 @@ const ( var functionName = os.Getenv(functionNameEnvVar) type ColdStartSpanCreator struct { - executionContext *executioncontext.ExecutionContext - traceAgent *ServerlessTraceAgent - createSpan *sync.Once + TraceAgent *ServerlessTraceAgent + createSpan sync.Once + LambdaSpanChan <-chan *pb.Span + InitDurationChan <-chan float64 + syncSpanDurationMutex sync.Mutex + ColdStartSpanId uint64 + lambdaSpan *pb.Span + initDuration float64 + StopChan chan struct{} } -func (c *ColdStartSpanCreator) create(lambdaSpan *pb.Span) { - // Prevent infinite loop from SpanModifier call - if lambdaSpan.Name == "aws.lambda.cold_start" { +func (c *ColdStartSpanCreator) Run() { + go func() { + for { + select { + case traceAgentSpan := <-c.LambdaSpanChan: + c.handleLambdaSpan(traceAgentSpan) + + case initDuration := <-c.InitDurationChan: + c.handleInitDuration(initDuration) + + case <-c.StopChan: + log.Debugf("[ColdStartCreator] - shutting down") + return + } + } + }() +} + +func (c *ColdStartSpanCreator) Stop() { + log.Debugf("[ColdStartCreator] - sending shutdown msg") + c.StopChan <- struct{}{} +} + +func (c *ColdStartSpanCreator) handleLambdaSpan(traceAgentSpan *pb.Span) { + if traceAgentSpan.Name == spanName { return } - ecs := c.executionContext.GetCurrentState() - if !ecs.Coldstart || ecs.ColdstartDuration == 0 { + c.syncSpanDurationMutex.Lock() + defer c.syncSpanDurationMutex.Unlock() + + c.lambdaSpan = traceAgentSpan + c.createIfReady() +} + +func (c *ColdStartSpanCreator) handleInitDuration(initDuration float64) { + c.syncSpanDurationMutex.Lock() + defer c.syncSpanDurationMutex.Unlock() + c.initDuration = initDuration + c.createIfReady() +} - log.Debugf("[ColdStartSpanCreator] Skipping span creation - no duration received") +func (c *ColdStartSpanCreator) createIfReady() { + + if c.initDuration == 0 { + log.Debug("[ColdStartCreator] No init duration, passing") + return + } + if c.lambdaSpan == nil { + log.Debug("[ColdStartCreator] No lambda span, passing") + return + } + c.create() +} + +func (c *ColdStartSpanCreator) create() { + // Prevent infinite loop from SpanModifier call + if c.lambdaSpan.Name == spanName { return } // ColdStartDuration is given in milliseconds // APM spans are in nanoseconds // millis = nanos * 1e6 - durationNs := ecs.ColdstartDuration * 1e6 + durationNs := c.initDuration * 1e6 coldStartSpan := &pb.Span{ Service: service, Name: spanName, Resource: functionName, - SpanID: inferredspan.GenerateSpanId(), - TraceID: lambdaSpan.TraceID, - ParentID: lambdaSpan.ParentID, - Start: lambdaSpan.Start - int64(durationNs), + SpanID: c.ColdStartSpanId, + TraceID: c.lambdaSpan.TraceID, + ParentID: c.lambdaSpan.ParentID, + Start: c.lambdaSpan.Start - int64(durationNs), Duration: int64(durationNs), + Type: "serverless", } - log.Debugf("[ColdStartSpanCreator] Lambda span %v", lambdaSpan) c.createSpan.Do(func() { c.processSpan(coldStartSpan) }) } func (c *ColdStartSpanCreator) processSpan(coldStartSpan *pb.Span) { - log.Debugf("[ColdStartSpanCreator] Creating cold start span %v", coldStartSpan) + log.Debugf("[ColdStartCreator] Creating cold start span %v", coldStartSpan) traceChunk := &pb.TraceChunk{ Origin: "lambda", @@ -85,7 +137,7 @@ func (c *ColdStartSpanCreator) processSpan(coldStartSpan *pb.Span) { Chunks: []*pb.TraceChunk{traceChunk}, } - c.traceAgent.ta.Process(&api.Payload{ + c.TraceAgent.ta.Process(&api.Payload{ Source: info.NewReceiverStats().GetTagStats(info.Tags{}), TracerPayload: tracerPayload, }) diff --git a/pkg/serverless/trace/cold_start_span_creator_test.go b/pkg/serverless/trace/cold_start_span_creator_test.go index beccba3f7d3470..b220b1306b2fd6 100644 --- a/pkg/serverless/trace/cold_start_span_creator_test.go +++ b/pkg/serverless/trace/cold_start_span_creator_test.go @@ -7,13 +7,11 @@ package trace import ( "context" - "sync" "testing" "time" "github.com/stretchr/testify/assert" - "github.com/DataDog/datadog-agent/pkg/serverless/executioncontext" "github.com/DataDog/datadog-agent/pkg/serverless/random" "github.com/DataDog/datadog-agent/pkg/trace/agent" @@ -31,19 +29,24 @@ func TestColdStartSpanCreatorCreateValid(t *testing.T) { traceAgent := &ServerlessTraceAgent{ ta: agnt, } - testArn := "arn:aws:lambda:us-east-1:123456789012:function:MY-SUPER-function" - testColdStartID := "8286a188-ba32-4475-8077-530cd35c09a9" + coldStartDuration := 50.0 // Given in millis - ec := &executioncontext.ExecutionContext{} - ec.SetColdStartDuration(coldStartDuration) - ec.SetFromInvocation(testArn, testColdStartID) + lambdaSpanChan := make(chan *pb.Span) + initDurationChan := make(chan float64) + stopChan := make(chan struct{}) + coldStartSpanId := random.Random.Uint64() coldStartSpanCreator := &ColdStartSpanCreator{ - executionContext: ec, - traceAgent: traceAgent, - createSpan: &sync.Once{}, + TraceAgent: traceAgent, + LambdaSpanChan: lambdaSpanChan, + InitDurationChan: initDurationChan, + ColdStartSpanId: coldStartSpanId, + StopChan: stopChan, } + coldStartSpanCreator.Run() + defer coldStartSpanCreator.Stop() + now := time.Now().UnixNano() lambdaSpan := &pb.Span{ Service: "aws.lambda", @@ -54,8 +57,10 @@ func TestColdStartSpanCreatorCreateValid(t *testing.T) { ParentID: random.Random.Uint64(), Duration: 500000000, } - coldStartSpanCreator.create(lambdaSpan) - timeout := time.After(2 * time.Second) + lambdaSpanChan <- lambdaSpan + initDurationChan <- coldStartDuration + + timeout := time.After(2 * time.Millisecond) var span *pb.Span select { case ss := <-traceAgent.ta.TraceWriter.In: @@ -80,18 +85,22 @@ func TestColdStartSpanCreatorCreateDuplicate(t *testing.T) { traceAgent := &ServerlessTraceAgent{ ta: agnt, } - testArn := "arn:aws:lambda:us-east-1:123456789012:function:MY-SUPER-function" - testColdStartID := "8286a188-ba32-4475-8077-530cd35c09a9" - ec := &executioncontext.ExecutionContext{} - ec.SetColdStartDuration(50) - ec.SetFromInvocation(testArn, testColdStartID) - + coldStartDuration := 50.0 // Given in millis + lambdaSpanChan := make(chan *pb.Span) + initDurationChan := make(chan float64) + stopChan := make(chan struct{}) + coldStartSpanId := random.Random.Uint64() coldStartSpanCreator := &ColdStartSpanCreator{ - executionContext: ec, - traceAgent: traceAgent, - createSpan: &sync.Once{}, + TraceAgent: traceAgent, + LambdaSpanChan: lambdaSpanChan, + InitDurationChan: initDurationChan, + ColdStartSpanId: coldStartSpanId, + StopChan: stopChan, } + coldStartSpanCreator.Run() + defer coldStartSpanCreator.Stop() + lambdaSpan := &pb.Span{ Service: "aws.lambda", Name: "aws.lambda.cold_start", @@ -101,8 +110,9 @@ func TestColdStartSpanCreatorCreateDuplicate(t *testing.T) { ParentID: random.Random.Uint64(), Duration: 500, } - coldStartSpanCreator.create(lambdaSpan) - timeout := time.After(time.Second) + lambdaSpanChan <- lambdaSpan + initDurationChan <- coldStartDuration + timeout := time.After(time.Millisecond) timedOut := false select { case ss := <-traceAgent.ta.TraceWriter.In: @@ -123,25 +133,34 @@ func TestColdStartSpanCreatorNotColdStart(t *testing.T) { traceAgent := &ServerlessTraceAgent{ ta: agnt, } - ec := &executioncontext.ExecutionContext{} - + lambdaSpanChan := make(chan *pb.Span) + initDurationChan := make(chan float64) + stopChan := make(chan struct{}) + coldStartSpanId := random.Random.Uint64() coldStartSpanCreator := &ColdStartSpanCreator{ - executionContext: ec, - traceAgent: traceAgent, - createSpan: &sync.Once{}, + TraceAgent: traceAgent, + LambdaSpanChan: lambdaSpanChan, + InitDurationChan: initDurationChan, + ColdStartSpanId: coldStartSpanId, + StopChan: stopChan, } + coldStartSpanCreator.Run() + defer coldStartSpanCreator.Stop() + lambdaSpan := &pb.Span{ Service: "aws.lambda", - Name: "aws.lambda.cold_start", + Name: "aws.lambda.my-function", Start: time.Now().Unix(), TraceID: random.Random.Uint64(), SpanID: random.Random.Uint64(), ParentID: random.Random.Uint64(), Duration: 500, } - coldStartSpanCreator.create(lambdaSpan) - timeout := time.After(time.Second) + lambdaSpanChan <- lambdaSpan + // Don't write to initDurationChan, as this is not a cold start + + timeout := time.After(time.Millisecond) timedOut := false select { case ss := <-traceAgent.ta.TraceWriter.In: diff --git a/pkg/serverless/trace/inferredspan/inferred_span.go b/pkg/serverless/trace/inferredspan/inferred_span.go index ac2f62d0c5c819..1e2008909bb97b 100644 --- a/pkg/serverless/trace/inferredspan/inferred_span.go +++ b/pkg/serverless/trace/inferredspan/inferred_span.go @@ -78,7 +78,7 @@ func FilterFunctionTags(input map[string]string) map[string]string { } // filter out DD_TAGS & DD_EXTRA_TAGS - ddTags := config.GetConfiguredTags(false) + ddTags := config.GetGlobalConfiguredTags(false) for _, tag := range ddTags { tagParts := strings.SplitN(tag, ":", 2) if len(tagParts) != 2 { diff --git a/pkg/serverless/trace/inferredspan/span_enrichment_test.go b/pkg/serverless/trace/inferredspan/span_enrichment_test.go index 1cf1c1219f3067..6e19ebebc64899 100644 --- a/pkg/serverless/trace/inferredspan/span_enrichment_test.go +++ b/pkg/serverless/trace/inferredspan/span_enrichment_test.go @@ -197,7 +197,7 @@ func TestEnrichInferredSpanWithSNSEvent(t *testing.T) { assert.Equal(t, "aws.sns", span.Meta[operationName]) assert.Equal(t, "serverlessTracingTopicPy", span.Meta[resourceNames]) assert.Equal(t, "Hello", span.Meta[subject]) - assert.Equal(t, "arn:aws:sns:sa-east-1:601427279990:serverlessTracingTopicPy", span.Meta[topicARN]) + assert.Equal(t, "arn:aws:sns:sa-east-1:425362996713:serverlessTracingTopicPy", span.Meta[topicARN]) assert.Equal(t, "serverlessTracingTopicPy", span.Meta[topicName]) assert.Equal(t, "Notification", span.Meta[metadataType]) assert.True(t, inferredSpan.IsAsync) @@ -261,7 +261,7 @@ func TestEnrichInferredSpanWithSQSEvent(t *testing.T) { assert.Equal(t, "aws.sqs", span.Meta[operationName]) assert.Equal(t, "InferredSpansQueueNode", span.Meta[resourceNames]) assert.Equal(t, "InferredSpansQueueNode", span.Meta[queueName]) - assert.Equal(t, "arn:aws:sqs:sa-east-1:601427279990:InferredSpansQueueNode", span.Meta[eventSourceArn]) + assert.Equal(t, "arn:aws:sqs:sa-east-1:425362996713:InferredSpansQueueNode", span.Meta[eventSourceArn]) assert.Equal(t, "AQEBnxFcyzQZhkrLV/TrSpn0VBszuq4a5/u66uyGRdUKuvXMurd6RRV952L+arORbE4MlGqWLUxurzYH9mKvc/A3MYjmGwQvvhp6uK5c7gXxg6tvHVAlsEFmTB0p35dxfGCmtrJbzdPjVtmcucPEpRx7z51tQokgGWuJbqx3Z9MVRD+6dyO3o6Zu6G3oWUgiUZ0dxhNoIIeT6xr/tEsoWhGK9ZUPRJ7e0BM/UZKfkecX1CVgVZ8J/t8fHRklJd34S6pN99SPNBKx+1lOZCelm2MihbQR6zax8bkhwL3glxYP83MxexvfOELA3G/6jx96oQ4mQdJASsKFUzvcs2NUxX+0bBVX9toS7MW/Udv+3CiQwSjjkc18A385QHtNrJDRbH33OUxFCqN5CcUMiGvEFed5EQ==", span.Meta[receiptHandle]) assert.Equal(t, "AROAYYB64AB3LSVUYFP5T:harv-inferred-spans-dev-initSender", span.Meta[senderID]) assert.True(t, inferredSpan.IsAsync) @@ -284,7 +284,7 @@ func TestEnrichInferredSpanWithKinesisEvent(t *testing.T) { assert.Equal(t, "stream/kinesisStream", span.Meta[resourceNames]) assert.Equal(t, "stream/kinesisStream", span.Meta[streamName]) assert.Equal(t, "shardId-000000000002", span.Meta[shardID]) - assert.Equal(t, "arn:aws:kinesis:sa-east-1:601427279990:stream/kinesisStream", span.Meta[eventSourceArn]) + assert.Equal(t, "arn:aws:kinesis:sa-east-1:425362996713:stream/kinesisStream", span.Meta[eventSourceArn]) assert.Equal(t, "shardId-000000000002:49624230154685806402418173680709770494154422022871973922", span.Meta[eventID]) assert.Equal(t, "aws:kinesis:record", span.Meta[eventName]) assert.Equal(t, "1.0", span.Meta[eventVersion]) diff --git a/pkg/serverless/trace/span_modifier.go b/pkg/serverless/trace/span_modifier.go index ba52baa853e149..c94d2f916efbd2 100644 --- a/pkg/serverless/trace/span_modifier.go +++ b/pkg/serverless/trace/span_modifier.go @@ -16,8 +16,9 @@ const ( ) type spanModifier struct { - tags map[string]string - coldStartSpanCreator *ColdStartSpanCreator + tags map[string]string + lambdaSpanChan chan<- *pb.Span + coldStartSpanId uint64 } // Process applies extra logic to the given span @@ -27,10 +28,15 @@ func (s *spanModifier) ModifySpan(span *pb.Span) { if s.tags["service"] != "" { span.Service = s.tags["service"] } - if s.coldStartSpanCreator != nil { - s.coldStartSpanCreator.create(span) + if s.lambdaSpanChan != nil && span.Name != "aws.lambda.cold_start" { + s.lambdaSpanChan <- span } } + + if span.Name == "aws.lambda.load" { + span.ParentID = s.coldStartSpanId + } + if inferredspan.CheckIsInferredSpan(span) { log.Debug("Detected a managed service span, filtering out function tags") diff --git a/pkg/serverless/trace/testdata/event_samples/api-gateway-non-proxy-async.json b/pkg/serverless/trace/testdata/event_samples/api-gateway-non-proxy-async.json index 46ca9d9a686c93..27873d0926528c 100644 --- a/pkg/serverless/trace/testdata/event_samples/api-gateway-non-proxy-async.json +++ b/pkg/serverless/trace/testdata/event_samples/api-gateway-non-proxy-async.json @@ -81,7 +81,7 @@ "extendedRequestId": "FaERiG1RGjQFb6g=", "requestTime": "09/Sep/2021:18:08:35 +0000", "path": "/dev/http/get", - "accountId": "601427279990", + "accountId": "425362996713", "protocol": "HTTP/1.1", "stage": "dev", "domainPrefix": "lgxbo6a518", diff --git a/pkg/serverless/trace/testdata/event_samples/api-gateway-non-proxy.json b/pkg/serverless/trace/testdata/event_samples/api-gateway-non-proxy.json index 500351a179c972..e829a373214f58 100644 --- a/pkg/serverless/trace/testdata/event_samples/api-gateway-non-proxy.json +++ b/pkg/serverless/trace/testdata/event_samples/api-gateway-non-proxy.json @@ -80,7 +80,7 @@ "extendedRequestId": "FaERiG1RGjQFb6g=", "requestTime": "09/Sep/2021:18:08:35 +0000", "path": "/dev/http/get", - "accountId": "601427279990", + "accountId": "425362996713", "protocol": "HTTP/1.1", "stage": "dev", "domainPrefix": "lgxbo6a518", diff --git a/pkg/serverless/trace/testdata/event_samples/eventbridge-custom.json b/pkg/serverless/trace/testdata/event_samples/eventbridge-custom.json index 456980f849878f..96c11000600ae6 100644 --- a/pkg/serverless/trace/testdata/event_samples/eventbridge-custom.json +++ b/pkg/serverless/trace/testdata/event_samples/eventbridge-custom.json @@ -3,7 +3,7 @@ "id": "fd03f394-e769-eff5-08a8-53c228933591", "detail-type": "testdetail", "source": "eventbridge.custom.event.sender", - "account": "601427279990", + "account": "425362996713", "time": "2021-11-04T01:37:45Z", "region": "sa-east-1", "resources": [], diff --git a/pkg/serverless/trace/testdata/event_samples/http-api.json b/pkg/serverless/trace/testdata/event_samples/http-api.json index 602e795bb3a24c..061a02522d0089 100644 --- a/pkg/serverless/trace/testdata/event_samples/http-api.json +++ b/pkg/serverless/trace/testdata/event_samples/http-api.json @@ -17,7 +17,7 @@ "x-datadog-sampling-priority": "2" }, "requestContext": { - "accountId": "601427279990", + "accountId": "425362996713", "apiId": "x02yirxc7a", "domainName": "x02yirxc7a.execute-api.sa-east-1.amazonaws.com", "domainPrefix": "x02yirxc7a", diff --git a/pkg/serverless/trace/testdata/event_samples/kinesis-batch.json b/pkg/serverless/trace/testdata/event_samples/kinesis-batch.json index e1d0833a9761db..0575cbf3873b3e 100644 --- a/pkg/serverless/trace/testdata/event_samples/kinesis-batch.json +++ b/pkg/serverless/trace/testdata/event_samples/kinesis-batch.json @@ -12,9 +12,9 @@ "eventVersion": "1.0", "eventID": "shardId-000000000002:49624230154685806402418173680709770494154422022871973922", "eventName": "aws:kinesis:record", - "invokeIdentityArn": "arn:aws:iam::601427279990:role/inferred-spans-python-dev-sa-east-1-lambdaRole", + "invokeIdentityArn": "arn:aws:iam::425362996713:role/inferred-spans-python-dev-sa-east-1-lambdaRole", "awsRegion": "sa-east-1", - "eventSourceARN": "arn:aws:kinesis:sa-east-1:601427279990:stream/kinesisStream" + "eventSourceARN": "arn:aws:kinesis:sa-east-1:425362996713:stream/kinesisStream" }, { "kinesis": { @@ -28,9 +28,9 @@ "eventVersion": "1.0", "eventID": "shardId-000000000002:49624230154685806402418173680709770494154422022871973922", "eventName": "aws:kinesis:record", - "invokeIdentityArn": "arn:aws:iam::601427279990:role/inferred-spans-python-dev-sa-east-1-lambdaRole", + "invokeIdentityArn": "arn:aws:iam::425362996713:role/inferred-spans-python-dev-sa-east-1-lambdaRole", "awsRegion": "sa-east-1", - "eventSourceARN": "arn:aws:kinesis:sa-east-1:601427279990:stream/kinesisStream" + "eventSourceARN": "arn:aws:kinesis:sa-east-1:425362996713:stream/kinesisStream" } ] } diff --git a/pkg/serverless/trace/testdata/event_samples/kinesis.json b/pkg/serverless/trace/testdata/event_samples/kinesis.json index 7b9f444fb26855..b934ef90e22d88 100644 --- a/pkg/serverless/trace/testdata/event_samples/kinesis.json +++ b/pkg/serverless/trace/testdata/event_samples/kinesis.json @@ -12,9 +12,9 @@ "eventVersion": "1.0", "eventID": "shardId-000000000002:49624230154685806402418173680709770494154422022871973922", "eventName": "aws:kinesis:record", - "invokeIdentityArn": "arn:aws:iam::601427279990:role/inferred-spans-python-dev-sa-east-1-lambdaRole", + "invokeIdentityArn": "arn:aws:iam::425362996713:role/inferred-spans-python-dev-sa-east-1-lambdaRole", "awsRegion": "sa-east-1", - "eventSourceARN": "arn:aws:kinesis:sa-east-1:601427279990:stream/kinesisStream" + "eventSourceARN": "arn:aws:kinesis:sa-east-1:425362996713:stream/kinesisStream" } ] } diff --git a/pkg/serverless/trace/testdata/event_samples/sns-batch.json b/pkg/serverless/trace/testdata/event_samples/sns-batch.json index c84da297765709..6e5d93e788e9a7 100644 --- a/pkg/serverless/trace/testdata/event_samples/sns-batch.json +++ b/pkg/serverless/trace/testdata/event_samples/sns-batch.json @@ -3,18 +3,18 @@ { "EventSource": "aws:sns", "EventVersion": "1.0", - "EventSubscriptionArn": "arn:aws:sns:sa-east-1:601427279990:serverlessTracingTopicPy:224b60ba-befc-4830-ad96-f1f0ac94eb04", + "EventSubscriptionArn": "arn:aws:sns:sa-east-1:425362996713:serverlessTracingTopicPy:224b60ba-befc-4830-ad96-f1f0ac94eb04", "Sns": { "Type": "Notification", "MessageId": "87056a47-f506-5d77-908b-303605d3b197", - "TopicArn": "arn:aws:sns:sa-east-1:601427279990:serverlessTracingTopicPy", + "TopicArn": "arn:aws:sns:sa-east-1:425362996713:serverlessTracingTopicPy", "Subject": null, "Message": "Asynchronously invoking a Lambda function with SNS.", "Timestamp": "2022-01-31T14:13:41.637Z", "SignatureVersion": "1", "Signature": "BmwnJb0Ku2KgQef9QOgaSSTwLyUsbkRq90lzD5Vn4mAcRUOq2ForfMOYbxMB6idljWIWy9t/jK4AIMxPGk/eOGiRcENx3BvAcGcoDayBRFY13+xUGaPn5Lfoht/ZJ7/hmCgFWKRa8ooATZL+AwGAw6Id8qzf0R3M3k2asy5Vxa4ODKiFW9OzWY/zFgsYJhddR3JrQl9YOMRyIobNNHT96o1TwjGsSUTEemrxA6jQtb3QbardEKO+2SuataLEZki7gE2D2sA300WqZecumI339q7la+OIj6VDGDwFoppE2sh8hzJYXAH7oo11giwltE0V3/eLFCVhsE8Y1KD/yDPPsA==", "SigningCertUrl": "https://sns.sa-east-1.amazonaws.com/SimpleNotificationService-7ff5318490ec183fbaddaa2a969abfda.pem", - "UnsubscribeUrl": "https://sns.sa-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:sa-east-1:601427279990:serverlessTracingTopicPy:224b60ba-befc-4830-ad96-f1f0ac94eb04", + "UnsubscribeUrl": "https://sns.sa-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:sa-east-1:425362996713:serverlessTracingTopicPy:224b60ba-befc-4830-ad96-f1f0ac94eb04", "MessageAttributes": { "_datadog": { "Type": "String", @@ -26,18 +26,18 @@ { "EventSource": "aws:sns", "EventVersion": "1.0", - "EventSubscriptionArn": "arn:aws:sns:sa-east-1:601427279990:serverlessTracingTopicPy:224b60ba-befc-4830-ad96-f1f0ac94eb04", + "EventSubscriptionArn": "arn:aws:sns:sa-east-1:425362996713:serverlessTracingTopicPy:224b60ba-befc-4830-ad96-f1f0ac94eb04", "Sns": { "Type": "Notification", "MessageId": "87056a47-f506-5d77-908b-303605d3b197", - "TopicArn": "arn:aws:sns:sa-east-1:601427279990:serverlessTracingTopicPy", + "TopicArn": "arn:aws:sns:sa-east-1:425362996713:serverlessTracingTopicPy", "Subject": null, "Message": "Asynchronously invoking a Lambda function with SNS.", "Timestamp": "2022-01-31T14:13:41.637Z", "SignatureVersion": "1", "Signature": "BmwnJb0Ku2KgQef9QOgaSSTwLyUsbkRq90lzD5Vn4mAcRUOq2ForfMOYbxMB6idljWIWy9t/jK4AIMxPGk/eOGiRcENx3BvAcGcoDayBRFY13+xUGaPn5Lfoht/ZJ7/hmCgFWKRa8ooATZL+AwGAw6Id8qzf0R3M3k2asy5Vxa4ODKiFW9OzWY/zFgsYJhddR3JrQl9YOMRyIobNNHT96o1TwjGsSUTEemrxA6jQtb3QbardEKO+2SuataLEZki7gE2D2sA300WqZecumI339q7la+OIj6VDGDwFoppE2sh8hzJYXAH7oo11giwltE0V3/eLFCVhsE8Y1KD/yDPPsA==", "SigningCertUrl": "https://sns.sa-east-1.amazonaws.com/SimpleNotificationService-7ff5318490ec183fbaddaa2a969abfda.pem", - "UnsubscribeUrl": "https://sns.sa-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:sa-east-1:601427279990:serverlessTracingTopicPy:224b60ba-befc-4830-ad96-f1f0ac94eb04", + "UnsubscribeUrl": "https://sns.sa-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:sa-east-1:425362996713:serverlessTracingTopicPy:224b60ba-befc-4830-ad96-f1f0ac94eb04", "MessageAttributes": { "_datadog": { "Type": "String", diff --git a/pkg/serverless/trace/testdata/event_samples/sns.json b/pkg/serverless/trace/testdata/event_samples/sns.json index b58f6a1ca57e19..87888ca909435a 100644 --- a/pkg/serverless/trace/testdata/event_samples/sns.json +++ b/pkg/serverless/trace/testdata/event_samples/sns.json @@ -3,18 +3,18 @@ { "EventSource": "aws:sns", "EventVersion": "1.0", - "EventSubscriptionArn": "arn:aws:sns:sa-east-1:601427279990:serverlessTracingTopicPy:224b60ba-befc-4830-ad96-f1f0ac94eb04", + "EventSubscriptionArn": "arn:aws:sns:sa-east-1:425362996713:serverlessTracingTopicPy:224b60ba-befc-4830-ad96-f1f0ac94eb04", "Sns": { "Type": "Notification", "MessageId": "87056a47-f506-5d77-908b-303605d3b197", - "TopicArn": "arn:aws:sns:sa-east-1:601427279990:serverlessTracingTopicPy", + "TopicArn": "arn:aws:sns:sa-east-1:425362996713:serverlessTracingTopicPy", "Subject": "Hello", "Message": "Asynchronously invoking a Lambda function with SNS.", "Timestamp": "2022-01-31T14:13:41.637Z", "SignatureVersion": "1", "Signature": "BmwnJb0Ku2KgQef9QOgaSSTwLyUsbkRq90lzD5Vn4mAcRUOq2ForfMOYbxMB6idljWIWy9t/jK4AIMxPGk/eOGiRcENx3BvAcGcoDayBRFY13+xUGaPn5Lfoht/ZJ7/hmCgFWKRa8ooATZL+AwGAw6Id8qzf0R3M3k2asy5Vxa4ODKiFW9OzWY/zFgsYJhddR3JrQl9YOMRyIobNNHT96o1TwjGsSUTEemrxA6jQtb3QbardEKO+2SuataLEZki7gE2D2sA300WqZecumI339q7la+OIj6VDGDwFoppE2sh8hzJYXAH7oo11giwltE0V3/eLFCVhsE8Y1KD/yDPPsA==", "SigningCertUrl": "https://sns.sa-east-1.amazonaws.com/SimpleNotificationService-7ff5318490ec183fbaddaa2a969abfda.pem", - "UnsubscribeUrl": "https://sns.sa-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:sa-east-1:601427279990:serverlessTracingTopicPy:224b60ba-befc-4830-ad96-f1f0ac94eb04", + "UnsubscribeUrl": "https://sns.sa-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:sa-east-1:425362996713:serverlessTracingTopicPy:224b60ba-befc-4830-ad96-f1f0ac94eb04", "MessageAttributes": { "_datadog": { "Type": "String", diff --git a/pkg/serverless/trace/testdata/event_samples/snssqs.json b/pkg/serverless/trace/testdata/event_samples/snssqs.json index 1fd0f1592c3537..1e2f645a35e317 100644 --- a/pkg/serverless/trace/testdata/event_samples/snssqs.json +++ b/pkg/serverless/trace/testdata/event_samples/snssqs.json @@ -3,7 +3,7 @@ { "messageId": "64812b68-4d9b-4dca-b3fb-9b18f255ee51", "receiptHandle": "AQEBER6aRkfG8092GvkL7FRwCwbQ7LLDW9Tlk/CembqHe+suS2kfFxXiukomvaIN61QoyQMoRgWuV52SDkiQno2u+5hP64BDbmw+e/KR9ayvIfHJ3M6RfyQLaWNWm3hDFBCKTnBMVIxtdx0N9epZZewyokjKcrNYtmCghFgTCvZzsQkowi5rnoHAVHJ3je1c3bDnQ1KLrZFgajDnootYXDwEPuMq5FIxrf4EzTe0S7S+rnRm+GaQfeBLBVAY6dASL9usV3/AFRqDtaI7GKI+0F2NCgLlqj49VlPRz4ldhkGknYlKTZTluAqALWLJS62/J1GQo53Cs3nneJcmu5ajB2zzmhhRXoXINEkLhCD5ujZfcsw9H4xqW69Or4ECvlqx14bUU2rtMIW0QM2p7pEeXnyocymQv6m1te113eYWTVmaJ4I=", - "body": "{\n \"Type\" : \"Notification\",\n \"MessageId\" : \"0a0ab23e-4861-5447-82b7-e8094ff3e332\",\n \"TopicArn\" : \"arn:aws:sns:sa-east-1:601427279990:js-library-test-dev-demoTopic-15WGUVRCBMPAA\",\n \"Message\" : \"{\\\"hello\\\":\\\"harv\\\",\\\"nice of you to join us\\\":\\\"david\\\",\\\"anotherThing\\\":{\\\"foo\\\":\\\"bar\\\",\\\"blah\\\":null,\\\"harv\\\":123},\\\"vals\\\":[{\\\"thingOne\\\":1},{\\\"thingTwo\\\":2}],\\\"ajTimestamp\\\":1639777617957}\",\n \"Timestamp\" : \"2021-12-17T21:46:58.040Z\",\n \"SignatureVersion\" : \"1\",\n \"Signature\" : \"FR35/7E8C3LHEVk/rC4XxXlXwV/5mNkFNPgDhHSnJ2I6hIoSrTROAm7h5xm1PuBkAeFDvq0zofw91ouk9zZyvhdrMLFIIgrjEyNayRmEffmoEAkzLFUsgtQX7MmTl644r4NuWiM0Oiz7jueRvIcKXcZr7Nc6GJcWV1ymec8oOmuHNMisnPMxI07LIQVYSyAfv6P9r2jEWMVIukRoCzwTnRk4bUUYhPSGHI7OC3AsxxXBbv8snqTrLM/4z2rXCf6jHCKNxWeLlm9/45PphCkEyx5BWS4/71KaoMWUWy8+6CCsy+uF3XTCVmvSEYLyEwTSzOY+vCUjazrRW93498i70g==\",\n \"SigningCertURL\" : \"https://sns.sa-east-1.amazonaws.com/SimpleNotificationService-7ff5318490ec183fbaddaa2a969abfda.pem\",\n \"UnsubscribeURL\" : \"https://sns.sa-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:sa-east-1:601427279990:js-library-test-dev-demoTopic-15WGUVRCBMPAA:1290f550-9a8a-4e8f-a900-8f5f96dcddda\",\n \"MessageAttributes\" : {\n \"_datadog\" : {\"Type\":\"String\",\"Value\":\"{\\\"x-datadog-trace-id\\\":\\\"2776434475358637757\\\",\\\"x-datadog-parent-id\\\":\\\"4493917105238181843\\\",\\\"x-datadog-sampled\\\":\\\"1\\\",\\\"x-datadog-sampling-priority\\\":\\\"1\\\"}\"}\n }\n}", + "body": "{\n \"Type\" : \"Notification\",\n \"MessageId\" : \"0a0ab23e-4861-5447-82b7-e8094ff3e332\",\n \"TopicArn\" : \"arn:aws:sns:sa-east-1:425362996713:js-library-test-dev-demoTopic-15WGUVRCBMPAA\",\n \"Message\" : \"{\\\"hello\\\":\\\"harv\\\",\\\"nice of you to join us\\\":\\\"david\\\",\\\"anotherThing\\\":{\\\"foo\\\":\\\"bar\\\",\\\"blah\\\":null,\\\"harv\\\":123},\\\"vals\\\":[{\\\"thingOne\\\":1},{\\\"thingTwo\\\":2}],\\\"ajTimestamp\\\":1639777617957}\",\n \"Timestamp\" : \"2021-12-17T21:46:58.040Z\",\n \"SignatureVersion\" : \"1\",\n \"Signature\" : \"FR35/7E8C3LHEVk/rC4XxXlXwV/5mNkFNPgDhHSnJ2I6hIoSrTROAm7h5xm1PuBkAeFDvq0zofw91ouk9zZyvhdrMLFIIgrjEyNayRmEffmoEAkzLFUsgtQX7MmTl644r4NuWiM0Oiz7jueRvIcKXcZr7Nc6GJcWV1ymec8oOmuHNMisnPMxI07LIQVYSyAfv6P9r2jEWMVIukRoCzwTnRk4bUUYhPSGHI7OC3AsxxXBbv8snqTrLM/4z2rXCf6jHCKNxWeLlm9/45PphCkEyx5BWS4/71KaoMWUWy8+6CCsy+uF3XTCVmvSEYLyEwTSzOY+vCUjazrRW93498i70g==\",\n \"SigningCertURL\" : \"https://sns.sa-east-1.amazonaws.com/SimpleNotificationService-7ff5318490ec183fbaddaa2a969abfda.pem\",\n \"UnsubscribeURL\" : \"https://sns.sa-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:sa-east-1:425362996713:js-library-test-dev-demoTopic-15WGUVRCBMPAA:1290f550-9a8a-4e8f-a900-8f5f96dcddda\",\n \"MessageAttributes\" : {\n \"_datadog\" : {\"Type\":\"String\",\"Value\":\"{\\\"x-datadog-trace-id\\\":\\\"2776434475358637757\\\",\\\"x-datadog-parent-id\\\":\\\"4493917105238181843\\\",\\\"x-datadog-sampled\\\":\\\"1\\\",\\\"x-datadog-sampling-priority\\\":\\\"1\\\"}\"}\n }\n}", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1639777618130", @@ -13,7 +13,7 @@ "messageAttributes": {}, "md5OfBody": "ee19d8b1377919239ad3fd5dabc33739", "eventSource": "aws:sqs", - "eventSourceARN": "arn:aws:sqs:sa-east-1:601427279990:aj-js-library-test-dev-demo-queue", + "eventSourceARN": "arn:aws:sqs:sa-east-1:425362996713:aj-js-library-test-dev-demo-queue", "awsRegion": "sa-east-1" } ] diff --git a/pkg/serverless/trace/testdata/event_samples/sqs-batch.json b/pkg/serverless/trace/testdata/event_samples/sqs-batch.json index d3687dcfdb3cf2..032bae3ee65acf 100644 --- a/pkg/serverless/trace/testdata/event_samples/sqs-batch.json +++ b/pkg/serverless/trace/testdata/event_samples/sqs-batch.json @@ -21,7 +21,7 @@ "md5OfMessageAttributes": "14b3b4a81d5ddeb96af62963d703c528", "md5OfBody": "24933a8beabe72088d7576cab1a59142", "eventSource": "aws:sqs", - "eventSourceARN": "arn:aws:sqs:sa-east-1:601427279990:InferredSpansQueueNode", + "eventSourceARN": "arn:aws:sqs:sa-east-1:425362996713:InferredSpansQueueNode", "awsRegion": "sa-east-1" }, { @@ -45,7 +45,7 @@ "md5OfMessageAttributes": "14b3b4a81d5ddeb96af62963d703c528", "md5OfBody": "24933a8beabe72088d7576cab1a59142", "eventSource": "aws:sqs", - "eventSourceARN": "arn:aws:sqs:sa-east-1:601427279990:InferredSpansQueueNode", + "eventSourceARN": "arn:aws:sqs:sa-east-1:425362996713:InferredSpansQueueNode", "awsRegion": "sa-east-1" } ] diff --git a/pkg/serverless/trace/testdata/event_samples/sqs.json b/pkg/serverless/trace/testdata/event_samples/sqs.json index c182704be8e072..fa7fbc86dc0012 100644 --- a/pkg/serverless/trace/testdata/event_samples/sqs.json +++ b/pkg/serverless/trace/testdata/event_samples/sqs.json @@ -21,7 +21,7 @@ "md5OfMessageAttributes": "14b3b4a81d5ddeb96af62963d703c528", "md5OfBody": "24933a8beabe72088d7576cab1a59142", "eventSource": "aws:sqs", - "eventSourceARN": "arn:aws:sqs:sa-east-1:601427279990:InferredSpansQueueNode", + "eventSourceARN": "arn:aws:sqs:sa-east-1:425362996713:InferredSpansQueueNode", "awsRegion": "sa-east-1" } ] diff --git a/pkg/serverless/trace/trace.go b/pkg/serverless/trace/trace.go index 83564eb9feb1c7..036397aa8863ea 100644 --- a/pkg/serverless/trace/trace.go +++ b/pkg/serverless/trace/trace.go @@ -8,11 +8,9 @@ package trace import ( "context" "strings" - "sync" tracecmdconfig "github.com/DataDog/datadog-agent/cmd/trace-agent/config" ddConfig "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/serverless/executioncontext" "github.com/DataDog/datadog-agent/pkg/trace/agent" "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/pb" @@ -56,7 +54,7 @@ func (l *LoadConfig) Load() (*config.AgentConfig, error) { } // Start starts the agent -func (s *ServerlessTraceAgent) Start(enabled bool, loadConfig Load, executionContext *executioncontext.ExecutionContext) { +func (s *ServerlessTraceAgent) Start(enabled bool, loadConfig Load, lambdaSpanChan chan<- *pb.Span, coldStartSpanId uint64) { if enabled { // Set the serverless config option which will be used to determine if // hostname should be resolved. Skipping hostname resolution saves >1s @@ -71,13 +69,9 @@ func (s *ServerlessTraceAgent) Start(enabled bool, loadConfig Load, executionCon tc.Hostname = "" tc.SynchronousFlushing = true s.ta = agent.NewAgent(context, tc) - s.spanModifier = &spanModifier{} - if executionContext != nil { - s.spanModifier.coldStartSpanCreator = &ColdStartSpanCreator{ - executionContext: executionContext, - traceAgent: s, - createSpan: &sync.Once{}, - } + s.spanModifier = &spanModifier{ + coldStartSpanId: coldStartSpanId, + lambdaSpanChan: lambdaSpanChan, } s.ta.ModifySpan = s.spanModifier.ModifySpan diff --git a/pkg/serverless/trace/trace_test.go b/pkg/serverless/trace/trace_test.go index f64bbe7bcfdd34..6d0ea8ac50b35d 100644 --- a/pkg/serverless/trace/trace_test.go +++ b/pkg/serverless/trace/trace_test.go @@ -15,13 +15,15 @@ import ( "github.com/stretchr/testify/assert" + "github.com/DataDog/datadog-agent/pkg/serverless/random" "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/pb" ) func TestStartEnabledFalse(t *testing.T) { + lambdaSpanChan := make(chan *pb.Span) var agent = &ServerlessTraceAgent{} - agent.Start(false, nil, nil) + agent.Start(false, nil, lambdaSpanChan, random.Random.Uint64()) defer agent.Stop() assert.Nil(t, agent.ta) assert.Nil(t, agent.Get()) @@ -38,7 +40,8 @@ func (l *LoadConfigMocked) Load() (*config.AgentConfig, error) { func TestStartEnabledTrueInvalidConfig(t *testing.T) { var agent = &ServerlessTraceAgent{} - agent.Start(true, &LoadConfigMocked{}, nil) + lambdaSpanChan := make(chan *pb.Span) + agent.Start(true, &LoadConfigMocked{}, lambdaSpanChan, random.Random.Uint64()) defer agent.Stop() assert.Nil(t, agent.ta) assert.Nil(t, agent.Get()) @@ -47,9 +50,10 @@ func TestStartEnabledTrueInvalidConfig(t *testing.T) { func TestStartEnabledTrueValidConfigUnvalidPath(t *testing.T) { var agent = &ServerlessTraceAgent{} + lambdaSpanChan := make(chan *pb.Span) t.Setenv("DD_API_KEY", "x") - agent.Start(true, &LoadConfig{Path: "invalid.yml"}, nil) + agent.Start(true, &LoadConfig{Path: "invalid.yml"}, lambdaSpanChan, random.Random.Uint64()) defer agent.Stop() assert.NotNil(t, agent.ta) assert.NotNil(t, agent.Get()) @@ -58,8 +62,9 @@ func TestStartEnabledTrueValidConfigUnvalidPath(t *testing.T) { func TestStartEnabledTrueValidConfigValidPath(t *testing.T) { var agent = &ServerlessTraceAgent{} + lambdaSpanChan := make(chan *pb.Span) - agent.Start(true, &LoadConfig{Path: "./testdata/valid.yml"}, nil) + agent.Start(true, &LoadConfig{Path: "./testdata/valid.yml"}, lambdaSpanChan, random.Random.Uint64()) defer agent.Stop() assert.NotNil(t, agent.ta) assert.NotNil(t, agent.Get()) @@ -68,8 +73,10 @@ func TestStartEnabledTrueValidConfigValidPath(t *testing.T) { func TestLoadConfigShouldBeFast(t *testing.T) { startTime := time.Now() + lambdaSpanChan := make(chan *pb.Span) + agent := &ServerlessTraceAgent{} - agent.Start(true, &LoadConfig{Path: "./testdata/valid.yml"}, nil) + agent.Start(true, &LoadConfig{Path: "./testdata/valid.yml"}, lambdaSpanChan, random.Random.Uint64()) defer agent.Stop() assert.True(t, time.Since(startTime) < time.Second) } diff --git a/pkg/serverless/trigger/testData/eventbridge-custom.json b/pkg/serverless/trigger/testData/eventbridge-custom.json index 456980f849878f..96c11000600ae6 100644 --- a/pkg/serverless/trigger/testData/eventbridge-custom.json +++ b/pkg/serverless/trigger/testData/eventbridge-custom.json @@ -3,7 +3,7 @@ "id": "fd03f394-e769-eff5-08a8-53c228933591", "detail-type": "testdetail", "source": "eventbridge.custom.event.sender", - "account": "601427279990", + "account": "425362996713", "time": "2021-11-04T01:37:45Z", "region": "sa-east-1", "resources": [], diff --git a/pkg/status/templates/process-agent.tmpl b/pkg/status/templates/process-agent.tmpl index e6f47e522f6979..735a62c2e62382 100644 --- a/pkg/status/templates/process-agent.tmpl +++ b/pkg/status/templates/process-agent.tmpl @@ -20,6 +20,11 @@ Process Agent Enabled Checks: {{ .expvars.enabled_checks }} Allocated Memory: {{ humanize .expvars.memstats.alloc }} bytes Hostname: {{ .core.metadata.meta.hostname }} + {{- if .expvars.system_probe_process_module_enabled }} + System Probe Process Module Status: Running + {{- else}} + System Probe Process Module Status: Not running + {{- end}} ================= Process Endpoints diff --git a/pkg/tagger/remote/tagger.go b/pkg/tagger/remote/tagger.go index d4dc4760a3f063..e50859916a30e6 100644 --- a/pkg/tagger/remote/tagger.go +++ b/pkg/tagger/remote/tagger.go @@ -63,6 +63,7 @@ type Tagger struct { type Options struct { Target string TokenFetcher func() (string, error) + Disabled bool } func NodeAgentOptions() (Options, error) { @@ -73,19 +74,22 @@ func NodeAgentOptions() (Options, error) { } func CLCRunnerOptions() (Options, error) { - target, err := clusteragent.GetClusterAgentEndpoint() - if err != nil { - return Options{}, fmt.Errorf("unable to get cluster agent endpoint: %w", err) + opts := Options{ + Disabled: !config.Datadog.GetBool("clc_runner_remote_tagger_enabled"), } - // gRPC targets do not have a protocol. the DCA endpoint is always HTTPS, - // so a simple `TrimPrefix` is enough. - target = strings.TrimPrefix(target, "https://") + if !opts.Disabled { + target, err := clusteragent.GetClusterAgentEndpoint() + if err != nil { + return opts, fmt.Errorf("unable to get cluster agent endpoint: %w", err) + } + // gRPC targets do not have a protocol. the DCA endpoint is always HTTPS, + // so a simple `TrimPrefix` is enough. + opts.Target = strings.TrimPrefix(target, "https://") + opts.TokenFetcher = security.GetClusterAgentAuthToken - return Options{ - Target: target, - TokenFetcher: security.GetClusterAgentAuthToken, - }, nil + } + return opts, nil } // NewTagger returns an allocated tagger. You still have to run Init() diff --git a/pkg/trace/api/api.go b/pkg/trace/api/api.go index 9a9937582fddba..4bd7f6cf3b6964 100644 --- a/pkg/trace/api/api.go +++ b/pkg/trace/api/api.go @@ -30,6 +30,7 @@ import ( "go.uber.org/atomic" "github.com/DataDog/datadog-agent/pkg/trace/api/apiutil" + "github.com/DataDog/datadog-agent/pkg/trace/api/internal/header" "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/config/features" "github.com/DataDog/datadog-agent/pkg/trace/info" @@ -98,7 +99,7 @@ func NewHTTPReceiver(conf *config.AgentConfig, dynConf *sampler.DynamicConfig, o statsProcessor: statsProcessor, conf: conf, dynConf: dynConf, - containerIDProvider: NewIDProvider("/proc"), + containerIDProvider: NewIDProvider(conf.ContainerProcRoot), rateLimiterResponse: rateLimiterResponse, @@ -311,6 +312,11 @@ func (r *HTTPReceiver) handleWithVersion(v Version, f func(Version, http.Respons return } + if req.Header.Get("Sec-Fetch-Site") == "cross-site" { + http.Error(w, "cross-site request rejected", http.StatusForbidden) + return + } + // TODO(x): replace with http.MaxBytesReader? req.Body = apiutil.NewLimitedReader(req.Body, r.conf.MaxRequestBytes) @@ -318,12 +324,12 @@ func (r *HTTPReceiver) handleWithVersion(v Version, f func(Version, http.Respons } } -var errInvalidHeaderTraceCountValue = fmt.Errorf("%q header value is not a number", headerTraceCount) +var errInvalidHeaderTraceCountValue = fmt.Errorf("%q header value is not a number", header.TraceCount) func traceCount(req *http.Request) (int64, error) { - str := req.Header.Get(headerTraceCount) + str := req.Header.Get(header.TraceCount) if str == "" { - return 0, fmt.Errorf("HTTP header %q not found", headerTraceCount) + return 0, fmt.Errorf("HTTP header %q not found", header.TraceCount) } n, err := strconv.Atoi(str) if err != nil { @@ -333,54 +339,6 @@ func traceCount(req *http.Request) (int64, error) { } const ( - // headerTraceCount is the header client implementation should fill - // with the number of traces contained in the payload. - headerTraceCount = "X-Datadog-Trace-Count" - - // headerContainerID specifies the name of the header which contains the ID of the - // container where the request originated. - headerContainerID = "Datadog-Container-ID" - - // headerLang specifies the name of the header which contains the language from - // which the traces originate. - headerLang = "Datadog-Meta-Lang" - - // headerLangVersion specifies the name of the header which contains the origin - // language's version. - headerLangVersion = "Datadog-Meta-Lang-Version" - - // headerLangInterpreter specifies the name of the HTTP header containing information - // about the language interpreter, where applicable. - headerLangInterpreter = "Datadog-Meta-Lang-Interpreter" - - // headerLangInterpreterVendor specifies the name of the HTTP header containing information - // about the language interpreter vendor, where applicable. - headerLangInterpreterVendor = "Datadog-Meta-Lang-Interpreter-Vendor" - - // headerTracerVersion specifies the name of the header which contains the version - // of the tracer sending the payload. - headerTracerVersion = "Datadog-Meta-Tracer-Version" - - // headerComputedTopLevel specifies that the client has marked top-level spans, when set. - // Any non-empty value will mean 'yes'. - headerComputedTopLevel = "Datadog-Client-Computed-Top-Level" - - // headerComputedStats specifies whether the client has computed stats so that the agent - // doesn't have to. - headerComputedStats = "Datadog-Client-Computed-Stats" - - // headderDroppedP0Traces contains the number of P0 trace chunks dropped by the client. - // This value is used to adjust priority rates computed by the agent. - headerDroppedP0Traces = "Datadog-Client-Dropped-P0-Traces" - - // headderDroppedP0Spans contains the number of P0 spans dropped by the client. - // This value is used for metrics and could be used in the future to adjust priority rates. - headerDroppedP0Spans = "Datadog-Client-Dropped-P0-Spans" - - // headerRatesPayloadVersion contains the version of sampling rates. - // If both agent and client have the same version, the agent won't return rates in API response. - headerRatesPayloadVersion = "Datadog-Rates-Payload-Version" - // tagContainersTags specifies the name of the tag which holds key/value // pairs representing information about the container (Docker, EC2, etc). tagContainersTags = "_dd.tags.container" @@ -392,13 +350,13 @@ func (r *HTTPReceiver) TagStats(v Version, header http.Header) *info.TagStats { return r.tagStats(v, header) } -func (r *HTTPReceiver) tagStats(v Version, header http.Header) *info.TagStats { +func (r *HTTPReceiver) tagStats(v Version, httpHeader http.Header) *info.TagStats { return r.Stats.GetTagStats(info.Tags{ - Lang: header.Get(headerLang), - LangVersion: header.Get(headerLangVersion), - Interpreter: header.Get(headerLangInterpreter), - LangVendor: header.Get(headerLangInterpreterVendor), - TracerVersion: header.Get(headerTracerVersion), + Lang: httpHeader.Get(header.Lang), + LangVersion: httpHeader.Get(header.LangVersion), + Interpreter: httpHeader.Get(header.LangInterpreter), + LangVendor: httpHeader.Get(header.LangInterpreterVendor), + TracerVersion: httpHeader.Get(header.TracerVersion), EndpointVersion: string(v), }) } @@ -468,7 +426,7 @@ func (r *HTTPReceiver) replyOK(req *http.Request, v Version, w http.ResponseWrit case v01, v02, v03: return httpOK(w) default: - ratesVersion := req.Header.Get(headerRatesPayloadVersion) + ratesVersion := req.Header.Get(header.RatesPayloadVersion) return httpRateByService(ratesVersion, w, r.dynConf) } } @@ -510,7 +468,7 @@ func (r *HTTPReceiver) handleStats(w http.ResponseWriter, req *http.Request) { metrics.Count("datadog.trace_agent.receiver.stats_bytes", rd.Count, ts.AsTags(), 1) metrics.Count("datadog.trace_agent.receiver.stats_buckets", int64(len(in.Stats)), ts.AsTags(), 1) - r.statsProcessor.ProcessStats(in, req.Header.Get(headerLang), req.Header.Get(headerTracerVersion)) + r.statsProcessor.ProcessStats(in, req.Header.Get(header.Lang), req.Header.Get(header.TracerVersion)) } // handleTraces knows how to handle a bunch of traces @@ -581,8 +539,8 @@ func (r *HTTPReceiver) handleTraces(v Version, w http.ResponseWriter, req *http. payload := &Payload{ Source: ts, TracerPayload: tp, - ClientComputedTopLevel: req.Header.Get(headerComputedTopLevel) != "", - ClientComputedStats: req.Header.Get(headerComputedStats) != "", + ClientComputedTopLevel: req.Header.Get(header.ComputedTopLevel) != "", + ClientComputedStats: req.Header.Get(header.ComputedStats) != "", ClientDroppedP0s: droppedTracesFromHeader(req.Header, ts), } @@ -627,14 +585,14 @@ func runMetaHook(chunks []*pb.TraceChunk) { func droppedTracesFromHeader(h http.Header, ts *info.TagStats) int64 { var dropped int64 - if v := h.Get(headerDroppedP0Traces); v != "" { + if v := h.Get(header.DroppedP0Traces); v != "" { count, err := strconv.ParseInt(v, 10, 64) if err == nil { dropped = count ts.ClientDroppedP0Traces.Add(count) } } - if v := h.Get(headerDroppedP0Spans); v != "" { + if v := h.Get(header.DroppedP0Spans); v != "" { count, err := strconv.ParseInt(v, 10, 64) if err == nil { ts.ClientDroppedP0Spans.Add(count) diff --git a/pkg/trace/api/api_test.go b/pkg/trace/api/api_test.go index cc8c9668243aaa..26f69b758f42a0 100644 --- a/pkg/trace/api/api_test.go +++ b/pkg/trace/api/api_test.go @@ -19,6 +19,7 @@ import ( "testing" "time" + "github.com/DataDog/datadog-agent/pkg/trace/api/internal/header" "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/info" "github.com/DataDog/datadog-agent/pkg/trace/pb" @@ -140,6 +141,19 @@ func TestListenTCP(t *testing.T) { }) } +func TestTracesDecodeMakingHugeAllocation(t *testing.T) { + r := newTestReceiverFromConfig(config.New()) + r.Start() + defer r.Stop() + data := []byte{0x96, 0x97, 0xa4, 0x30, 0x30, 0x30, 0x30, 0xa6, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xa6, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xa6, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xa6, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xa6, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xa6, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x96, 0x94, 0x9c, 0x00, 0x00, 0x00, 0x30, 0x30, 0xd1, 0x30, 0x30, 0x30, 0x30, 0x30, 0xdf, 0x30, 0x30, 0x30, 0x30} + + path := fmt.Sprintf("http://%s:%d/v0.5/traces", r.conf.ReceiverHost, r.conf.ReceiverPort) + resp, err := http.Post(path, "application/msgpack", bytes.NewReader(data)) + require.NoError(t, err) + defer resp.Body.Close() + assert.Equal(t, http.StatusBadRequest, resp.StatusCode) +} + func TestStateHeaders(t *testing.T) { assert := assert.New(t) cfg := config.New() @@ -422,7 +436,7 @@ func TestReceiverDecodingError(t *testing.T) { req, err := http.NewRequest("POST", server.URL, bytes.NewBuffer(data)) assert.NoError(err) traceCount := 10 - req.Header.Set(headerTraceCount, strconv.Itoa(traceCount)) + req.Header.Set(header.TraceCount, strconv.Itoa(traceCount)) req.Header.Set("Content-Type", "application/json") resp, err := client.Do(req) @@ -433,6 +447,24 @@ func TestReceiverDecodingError(t *testing.T) { }) } +func TestHandleWithVersionRejectCrossSite(t *testing.T) { + assert := assert.New(t) + conf := newTestReceiverConfig() + r := newTestReceiverFromConfig(conf) + server := httptest.NewServer(r.handleWithVersion(v04, r.handleTraces)) + + var client http.Client + req, err := http.NewRequest("POST", server.URL, nil) + assert.NoError(err) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Sec-Fetch-Site", "cross-site") + + resp, err := client.Do(req) + assert.NoError(err) + resp.Body.Close() + assert.Equal(http.StatusForbidden, resp.StatusCode) +} + func TestReceiverUnexpectedEOF(t *testing.T) { assert := assert.New(t) conf := newTestReceiverConfig() @@ -453,7 +485,7 @@ func TestReceiverUnexpectedEOF(t *testing.T) { assert.NoError(err) req.Header.Set("Content-Type", "application/msgpack") req.Header.Set("Content-Length", "270") - req.Header.Set(headerTraceCount, strconv.Itoa(traceCount)) + req.Header.Set(header.TraceCount, strconv.Itoa(traceCount)) resp, err := client.Do(req) assert.NoError(err) @@ -472,23 +504,23 @@ func TestTraceCount(t *testing.T) { delete(req.Header, k) } _, err := traceCount(req) - assert.EqualError(t, err, fmt.Sprintf("HTTP header %q not found", headerTraceCount)) + assert.EqualError(t, err, fmt.Sprintf("HTTP header %q not found", header.TraceCount)) }) t.Run("value-empty", func(t *testing.T) { - req.Header.Set(headerTraceCount, "") + req.Header.Set(header.TraceCount, "") _, err := traceCount(req) - assert.EqualError(t, err, fmt.Sprintf("HTTP header %q not found", headerTraceCount)) + assert.EqualError(t, err, fmt.Sprintf("HTTP header %q not found", header.TraceCount)) }) t.Run("value-bad", func(t *testing.T) { - req.Header.Set(headerTraceCount, "qwe") + req.Header.Set(header.TraceCount, "qwe") _, err := traceCount(req) assert.Equal(t, err, errInvalidHeaderTraceCountValue) }) t.Run("ok", func(t *testing.T) { - req.Header.Set(headerTraceCount, "123") + req.Header.Set(header.TraceCount, "123") count, err := traceCount(req) assert.NoError(t, err) assert.Equal(t, count, int64(123)) @@ -525,7 +557,7 @@ func TestDecodeV05(t *testing.T) { assert.NoError(err) req, err := http.NewRequest("POST", "/v0.5/traces", bytes.NewReader(b)) assert.NoError(err) - req.Header.Set(headerContainerID, "abcdef123789456") + req.Header.Set(header.ContainerID, "abcdef123789456") tp, _, err := decodeTracerPayload(v05, req, &info.TagStats{ Tags: info.Tags{ Lang: "python", @@ -628,8 +660,8 @@ func TestHandleStats(t *testing.T) { } req, _ := http.NewRequest("POST", server.URL+"/v0.6/stats", &buf) req.Header.Set("Content-Type", "application/msgpack") - req.Header.Set(headerLang, "lang1") - req.Header.Set(headerTracerVersion, "0.1.0") + req.Header.Set(header.Lang, "lang1") + req.Header.Set(header.TracerVersion, "0.1.0") resp, err := http.DefaultClient.Do(req) if err != nil { t.Fatal(err) @@ -661,9 +693,9 @@ func TestClientComputedStatsHeader(t *testing.T) { req, _ := http.NewRequest("POST", server.URL+"/v0.4/traces", bytes.NewReader(bts)) req.Header.Set("Content-Type", "application/msgpack") - req.Header.Set(headerLang, "lang1") + req.Header.Set(header.Lang, "lang1") if on { - req.Header.Set(headerComputedStats, "yes") + req.Header.Set(header.ComputedStats, "yes") } var wg sync.WaitGroup wg.Add(1) @@ -774,9 +806,9 @@ func TestClientComputedTopLevel(t *testing.T) { req, _ := http.NewRequest("POST", server.URL+"/v0.4/traces", bytes.NewReader(bts)) req.Header.Set("Content-Type", "application/msgpack") - req.Header.Set(headerLang, "lang1") + req.Header.Set(header.Lang, "lang1") if on { - req.Header.Set(headerComputedTopLevel, "yes") + req.Header.Set(header.ComputedTopLevel, "yes") } var wg sync.WaitGroup wg.Add(1) @@ -822,9 +854,9 @@ func TestClientDropP0s(t *testing.T) { req, _ := http.NewRequest("POST", server.URL+"/v0.4/traces", bytes.NewReader(bts)) req.Header.Set("Content-Type", "application/msgpack") - req.Header.Set(headerLang, "lang1") - req.Header.Set(headerDroppedP0Traces, "153") - req.Header.Set(headerDroppedP0Spans, "2331") + req.Header.Set(header.Lang, "lang1") + req.Header.Set(header.DroppedP0Traces, "153") + req.Header.Set(header.DroppedP0Spans, "2331") resp, err := http.DefaultClient.Do(req) if err != nil { t.Fatal(err) @@ -866,7 +898,7 @@ func TestReceiverRateLimiterCancel(t *testing.T) { reader := &chunkedReader{reader: bytes.NewReader(bts)} req, err := http.NewRequest("POST", url, reader) req.Header.Set("Content-Type", "application/msgpack") - req.Header.Set(headerTraceCount, strconv.Itoa(n)) + req.Header.Set(header.TraceCount, strconv.Itoa(n)) assert.Nil(err) resp, err := client.Do(req) @@ -1109,7 +1141,7 @@ func TestWatchdog(t *testing.T) { t.Fatal(err) } req.Header.Set("Content-Type", "application/msgpack") - req.Header.Set(headerTraceCount, "3") + req.Header.Set(header.TraceCount, "3") resp, err = http.DefaultClient.Do(req) if err != nil { t.Fatal(err) diff --git a/pkg/trace/api/container.go b/pkg/trace/api/container.go index db97a9146100d1..c9623053999109 100644 --- a/pkg/trace/api/container.go +++ b/pkg/trace/api/container.go @@ -12,6 +12,8 @@ import ( "context" "net" "net/http" + + "github.com/DataDog/datadog-agent/pkg/trace/api/internal/header" ) // connContext is unimplemented for non-linux builds. @@ -32,5 +34,5 @@ func NewIDProvider(_ string) IDProvider { } func (_ *idProvider) GetContainerID(_ context.Context, h http.Header) string { - return h.Get(headerContainerID) + return h.Get(header.ContainerID) } diff --git a/pkg/trace/api/container_linux.go b/pkg/trace/api/container_linux.go index c3a68492448d01..446d075432f35d 100644 --- a/pkg/trace/api/container_linux.go +++ b/pkg/trace/api/container_linux.go @@ -14,6 +14,7 @@ import ( "syscall" "time" + "github.com/DataDog/datadog-agent/pkg/trace/api/internal/header" "github.com/DataDog/datadog-agent/pkg/util/cgroups" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -60,7 +61,7 @@ type IDProvider interface { type noCgroupsProvider struct{} func (i *noCgroupsProvider) GetContainerID(_ context.Context, h http.Header) string { - return h.Get(headerContainerID) + return h.Get(header.ContainerID) } // NewIDProvider initializes an IDProvider instance using the provided procRoot to perform cgroups lookups in linux environments. @@ -91,7 +92,7 @@ type cgroupIDProvider struct { // GetContainerID returns the container ID in the http.Header, // otherwise looks for a PID in the ctx which is used to search cgroups for a container ID. func (c *cgroupIDProvider) GetContainerID(ctx context.Context, h http.Header) string { - if id := h.Get(headerContainerID); id != "" { + if id := h.Get(header.ContainerID); id != "" { return id } ucred, ok := ctx.Value(ucredKey{}).(*syscall.Ucred) diff --git a/pkg/trace/api/container_linux_test.go b/pkg/trace/api/container_linux_test.go index 5a770dd0af2792..df265d54afaa7d 100644 --- a/pkg/trace/api/container_linux_test.go +++ b/pkg/trace/api/container_linux_test.go @@ -17,6 +17,7 @@ import ( "testing" "time" + "github.com/DataDog/datadog-agent/pkg/trace/api/internal/header" "github.com/DataDog/datadog-agent/pkg/trace/pb" "github.com/DataDog/datadog-agent/pkg/trace/testutil" "github.com/stretchr/testify/assert" @@ -92,7 +93,7 @@ func TestGetContainerID(t *testing.T) { if !assert.NoError(t, err) { t.Fail() } - req.Header.Add(headerContainerID, containerID) + req.Header.Add(header.ContainerID, containerID) assert.Equal(t, containerID, provider.GetContainerID(req.Context(), req.Header)) }) @@ -102,7 +103,7 @@ func TestGetContainerID(t *testing.T) { if !assert.NoError(t, err) { t.Fail() } - req.Header.Add(headerContainerID, containerID) + req.Header.Add(header.ContainerID, containerID) assert.Equal(t, containerID, provider.GetContainerID(req.Context(), req.Header)) }) diff --git a/pkg/trace/api/debugger.go b/pkg/trace/api/debugger.go index 0c1d6beb76caa1..4bad71c197614e 100644 --- a/pkg/trace/api/debugger.go +++ b/pkg/trace/api/debugger.go @@ -62,7 +62,7 @@ func debuggerErrorHandler(err error) http.Handler { // newDebuggerProxy returns a new httputil.ReverseProxy proxying and augmenting requests with headers containing the tags. func newDebuggerProxy(conf *config.AgentConfig, target *url.URL, key string, tags string) *httputil.ReverseProxy { logger := log.NewThrottled(5, 10*time.Second) // limit to 5 messages every 10 seconds - cidProvider := NewIDProvider("/proc") + cidProvider := NewIDProvider(conf.ContainerProcRoot) director := func(req *http.Request) { ddtags := tags containerID := cidProvider.GetContainerID(req.Context(), req.Header) diff --git a/pkg/trace/api/evp_proxy.go b/pkg/trace/api/evp_proxy.go index ff375689128126..5d5f309309b0eb 100644 --- a/pkg/trace/api/evp_proxy.go +++ b/pkg/trace/api/evp_proxy.go @@ -16,6 +16,7 @@ import ( "time" "github.com/DataDog/datadog-agent/pkg/trace/api/apiutil" + "github.com/DataDog/datadog-agent/pkg/trace/api/internal/header" "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/log" "github.com/DataDog/datadog-agent/pkg/trace/metrics" @@ -158,14 +159,14 @@ func (t *evpProxyTransport) RoundTrip(req *http.Request) (rresp *http.Response, // Set Datadog headers, except API key which is set per-endpoint if containerID != "" { - req.Header.Set(headerContainerID, containerID) + req.Header.Set(header.ContainerID, containerID) if ctags := getContainerTags(t.conf.ContainerTags, containerID); ctags != "" { req.Header.Set("X-Datadog-Container-Tags", ctags) } } req.Header.Set("X-Datadog-Hostname", t.conf.Hostname) req.Header.Set("X-Datadog-AgentDefaultEnv", t.conf.DefaultEnv) - req.Header.Set(headerContainerID, containerID) + req.Header.Set(header.ContainerID, containerID) if needsAppKey { req.Header.Set("DD-APPLICATION-KEY", t.conf.EVPProxy.ApplicationKey) } diff --git a/pkg/trace/api/evp_proxy_test.go b/pkg/trace/api/evp_proxy_test.go index fd2909d41c512b..a0e3c376816768 100644 --- a/pkg/trace/api/evp_proxy_test.go +++ b/pkg/trace/api/evp_proxy_test.go @@ -19,6 +19,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/DataDog/datadog-agent/pkg/trace/api/internal/header" "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/teststatsd" "github.com/DataDog/datadog-agent/pkg/trace/testutil" @@ -94,7 +95,7 @@ func TestEVPProxyForwarder(t *testing.T) { assert.Equal(t, "test_user_agent", proxyreq.Header.Get("User-Agent")) assert.Equal(t, "text/json", proxyreq.Header.Get("Content-Type")) assert.NotContains(t, proxyreq.Header, "X-Datadog-Container-Tags") - assert.NotContains(t, proxyreq.Header, headerContainerID) + assert.NotContains(t, proxyreq.Header, header.ContainerID) assert.Equal(t, "", logs) // check metrics @@ -127,14 +128,14 @@ func TestEVPProxyForwarder(t *testing.T) { req := httptest.NewRequest("POST", "/mypath/mysubpath?arg=test", bytes.NewReader(randBodyBuf)) req.Header.Set("X-Datadog-EVP-Subdomain", "my.subdomain") - req.Header.Set(headerContainerID, "myid") + req.Header.Set(header.ContainerID, "myid") proxyreqs, resp, logs := sendRequestThroughForwarder(conf, req) resp.Body.Close() require.Equal(t, http.StatusOK, resp.StatusCode, "Got: ", fmt.Sprint(resp.StatusCode)) require.Len(t, proxyreqs, 1) assert.Equal(t, "container:myid", proxyreqs[0].Header.Get("X-Datadog-Container-Tags")) - assert.Equal(t, "myid", proxyreqs[0].Header.Get(headerContainerID)) + assert.Equal(t, "myid", proxyreqs[0].Header.Get(header.ContainerID)) assert.Equal(t, "", logs) }) diff --git a/pkg/trace/api/fuzz_test.go b/pkg/trace/api/fuzz_test.go index e1c3fd6f1b1ea5..c630e5278d8994 100644 --- a/pkg/trace/api/fuzz_test.go +++ b/pkg/trace/api/fuzz_test.go @@ -17,6 +17,7 @@ import ( "testing" "github.com/DataDog/datadog-agent/pkg/trace/api/apiutil" + "github.com/DataDog/datadog-agent/pkg/trace/api/internal/header" "github.com/DataDog/datadog-agent/pkg/trace/pb" "github.com/DataDog/datadog-agent/pkg/trace/testutil" @@ -183,8 +184,8 @@ func FuzzHandleStats(f *testing.F) { t.Fatalf("Couldn't create http request: %v", err) } req.Header.Set("Content-Type", "application/msgpack") - req.Header.Set(headerLang, "lang") - req.Header.Set(headerTracerVersion, "0.0.1") + req.Header.Set(header.Lang, "lang") + req.Header.Set(header.TracerVersion, "0.0.1") var client http.Client resp, err := client.Do(req) if err != nil { diff --git a/pkg/trace/api/internal/header/headers.go b/pkg/trace/api/internal/header/headers.go new file mode 100644 index 00000000000000..f6f8f2f4bb332f --- /dev/null +++ b/pkg/trace/api/internal/header/headers.go @@ -0,0 +1,57 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +// package header defines HTTP headers known convention used by the Trace Agent and Datadog's APM intake. +package header + +const ( + // TraceCount is the header client implementation should fill + // with the number of traces contained in the payload. + TraceCount = "X-Datadog-Trace-Count" + + // ContainerID specifies the name of the header which contains the ID of the + // container where the request originated. + ContainerID = "Datadog-Container-ID" + + // Lang specifies the name of the header which contains the language from + // which the traces originate. + Lang = "Datadog-Meta-Lang" + + // LangVersion specifies the name of the header which contains the origin + // language's version. + LangVersion = "Datadog-Meta-Lang-Version" + + // LangInterpreter specifies the name of the HTTP header containing information + // about the language interpreter, where applicable. + LangInterpreter = "Datadog-Meta-Lang-Interpreter" + + // LangInterpreterVendor specifies the name of the HTTP header containing information + // about the language interpreter vendor, where applicable. + LangInterpreterVendor = "Datadog-Meta-Lang-Interpreter-Vendor" + + // TracerVersion specifies the name of the header which contains the version + // of the tracer sending the payload. + TracerVersion = "Datadog-Meta-Tracer-Version" + + // ComputedTopLevel specifies that the client has marked top-level spans, when set. + // Any non-empty value will mean 'yes'. + ComputedTopLevel = "Datadog-Client-Computed-Top-Level" + + // ComputedStats specifies whether the client has computed stats so that the agent + // doesn't have to. + ComputedStats = "Datadog-Client-Computed-Stats" + + // DroppedP0Traces contains the number of P0 trace chunks dropped by the client. + // This value is used to adjust priority rates computed by the agent. + DroppedP0Traces = "Datadog-Client-Dropped-P0-Traces" + + // DroppedP0Spans contains the number of P0 spans dropped by the client. + // This value is used for metrics and could be used in the future to adjust priority rates. + DroppedP0Spans = "Datadog-Client-Dropped-P0-Spans" + + // RatesPayloadVersion contains the version of sampling rates. + // If both agent and client have the same version, the agent won't return rates in API response. + RatesPayloadVersion = "Datadog-Rates-Payload-Version" +) diff --git a/pkg/trace/api/otlp.go b/pkg/trace/api/otlp.go index f3ded1c4424dc3..d2f6a551f809ea 100644 --- a/pkg/trace/api/otlp.go +++ b/pkg/trace/api/otlp.go @@ -6,12 +6,10 @@ package api import ( - "compress/gzip" "context" "encoding/binary" "encoding/hex" "fmt" - "io" "net" "net/http" "strconv" @@ -21,7 +19,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/otlp/model/attributes" "github.com/DataDog/datadog-agent/pkg/otlp/model/source" - "github.com/DataDog/datadog-agent/pkg/trace/api/apiutil" + "github.com/DataDog/datadog-agent/pkg/trace/api/internal/header" "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/info" "github.com/DataDog/datadog-agent/pkg/trace/log" @@ -43,18 +41,10 @@ import ( // computed for the resource spans. const keyStatsComputed = "_dd.stats_computed" -const ( - // otlpProtocolHTTP specifies that the incoming connection was made over plain HTTP. - otlpProtocolHTTP = "http" - // otlpProtocolGRPC specifies that the incoming connection was made over gRPC. - otlpProtocolGRPC = "grpc" -) - // OTLPReceiver implements an OpenTelemetry Collector receiver which accepts incoming // data on two ports for both plain HTTP and gRPC. type OTLPReceiver struct { wg sync.WaitGroup // waits for a graceful shutdown - httpsrv *http.Server // the running HTTP server on a started receiver, if enabled grpcsrv *grpc.Server // the running GRPC server on a started receiver, if enabled out chan<- *Payload // the outgoing payload channel conf *config.AgentConfig // receiver config @@ -63,29 +53,12 @@ type OTLPReceiver struct { // NewOTLPReceiver returns a new OTLPReceiver which sends any incoming traces down the out channel. func NewOTLPReceiver(out chan<- *Payload, cfg *config.AgentConfig) *OTLPReceiver { - return &OTLPReceiver{out: out, conf: cfg, cidProvider: NewIDProvider("/proc")} + return &OTLPReceiver{out: out, conf: cfg, cidProvider: NewIDProvider(cfg.ContainerProcRoot)} } // Start starts the OTLPReceiver, if any of the servers were configured as active. func (o *OTLPReceiver) Start() { cfg := o.conf.OTLPReceiver - if cfg.HTTPPort != 0 { - o.httpsrv = &http.Server{ - Addr: net.JoinHostPort(cfg.BindHost, strconv.Itoa(cfg.HTTPPort)), - Handler: o, - ConnContext: connContext, - } - o.wg.Add(1) - go func() { - defer o.wg.Done() - if err := o.httpsrv.ListenAndServe(); err != nil { - if err != http.ErrServerClosed { - log.Criticalf("Error starting OpenTelemetry HTTP server: %v", err) - } - } - }() - log.Debugf("Listening to core Agent for OTLP traces on internal HTTP port (http://%s:%d, internal use only). Check core Agent logs for information on the OTLP ingest status.", cfg.BindHost, cfg.HTTPPort) - } if cfg.GRPCPort != 0 { ln, err := net.Listen("tcp", fmt.Sprintf("%s:%d", cfg.BindHost, cfg.GRPCPort)) if err != nil { @@ -107,15 +80,6 @@ func (o *OTLPReceiver) Start() { // Stop stops any running server. func (o *OTLPReceiver) Stop() { - if o.httpsrv != nil { - timeout, cancel := context.WithTimeout(context.Background(), 2*time.Second) - go func() { - if err := o.httpsrv.Shutdown(timeout); err != nil { - log.Errorf("Error shutting down OTLP HTTP server: %v", err) - } - cancel() - }() - } if o.grpcsrv != nil { go o.grpcsrv.Stop() } @@ -126,67 +90,23 @@ func (o *OTLPReceiver) Stop() { func (o *OTLPReceiver) Export(ctx context.Context, in ptraceotlp.ExportRequest) (ptraceotlp.ExportResponse, error) { defer timing.Since("datadog.trace_agent.otlp.process_grpc_request_ms", time.Now()) md, _ := metadata.FromIncomingContext(ctx) - metrics.Count("datadog.trace_agent.otlp.payload", 1, tagsFromHeaders(http.Header(md), otlpProtocolGRPC), 1) - o.processRequest(ctx, otlpProtocolGRPC, http.Header(md), in) + metrics.Count("datadog.trace_agent.otlp.payload", 1, tagsFromHeaders(http.Header(md)), 1) + o.processRequest(ctx, http.Header(md), in) return ptraceotlp.NewExportResponse(), nil } -// ServeHTTP implements http.Handler -func (o *OTLPReceiver) ServeHTTP(w http.ResponseWriter, req *http.Request) { - defer timing.Since("datadog.trace_agent.otlp.process_http_request_ms", time.Now()) - mtags := tagsFromHeaders(req.Header, otlpProtocolHTTP) - metrics.Count("datadog.trace_agent.otlp.payload", 1, mtags, 1) - - r := req.Body - if req.Header.Get("Content-Encoding") == "gzip" { - gzipr, err := gzip.NewReader(r) - if err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) - metrics.Count("datadog.trace_agent.otlp.error", 1, append(mtags, "reason:corrupt_gzip"), 1) - return - } - r = gzipr - } - rd := apiutil.NewLimitedReader(r, o.conf.OTLPReceiver.MaxRequestBytes) - slurp, err := io.ReadAll(rd) - if err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) - metrics.Count("datadog.trace_agent.otlp.error", 1, append(mtags, "reason:read_body"), 1) - return - } - metrics.Count("datadog.trace_agent.otlp.bytes", int64(len(slurp)), mtags, 1) - in := ptraceotlp.NewExportRequest() - switch getMediaType(req) { - case "application/x-protobuf": - if err := in.UnmarshalProto(slurp); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) - metrics.Count("datadog.trace_agent.otlp.error", 1, append(mtags, "reason:decode_proto"), 1) - return - } - case "application/json": - fallthrough - default: - if err := in.UnmarshalJSON(slurp); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) - metrics.Count("datadog.trace_agent.otlp.error", 1, append(mtags, "reason:decode_json"), 1) - return - } - } - o.processRequest(req.Context(), otlpProtocolHTTP, req.Header, in) -} - -func tagsFromHeaders(h http.Header, protocol string) []string { - tags := []string{"endpoint_version:opentelemetry_" + protocol + "_v1"} - if v := fastHeaderGet(h, headerLang); v != "" { +func tagsFromHeaders(h http.Header) []string { + tags := []string{"endpoint_version:opentelemetry_grpc_v1"} + if v := fastHeaderGet(h, header.Lang); v != "" { tags = append(tags, "lang:"+v) } - if v := fastHeaderGet(h, headerLangVersion); v != "" { + if v := fastHeaderGet(h, header.LangVersion); v != "" { tags = append(tags, "lang_version:"+v) } - if v := fastHeaderGet(h, headerLangInterpreter); v != "" { + if v := fastHeaderGet(h, header.LangInterpreter); v != "" { tags = append(tags, "interpreter:"+v) } - if v := fastHeaderGet(h, headerLangInterpreterVendor); v != "" { + if v := fastHeaderGet(h, header.LangInterpreterVendor); v != "" { tags = append(tags, "lang_vendor:"+v) } return tags @@ -205,17 +125,16 @@ func fastHeaderGet(h http.Header, canonicalKey string) string { return v[0] } -// processRequest processes the incoming request in. It marks it as received by the given protocol -// using the given headers. -func (o *OTLPReceiver) processRequest(ctx context.Context, protocol string, header http.Header, in ptraceotlp.ExportRequest) { +// processRequest processes the incoming request in. +func (o *OTLPReceiver) processRequest(ctx context.Context, header http.Header, in ptraceotlp.ExportRequest) { for i := 0; i < in.Traces().ResourceSpans().Len(); i++ { rspans := in.Traces().ResourceSpans().At(i) - o.ReceiveResourceSpans(ctx, rspans, header, protocol) + o.ReceiveResourceSpans(ctx, rspans, header) } } // ReceiveResourceSpans processes the given rspans and returns the source that it identified from processing them. -func (o *OTLPReceiver) ReceiveResourceSpans(ctx context.Context, rspans ptrace.ResourceSpans, header http.Header, protocol string) source.Source { +func (o *OTLPReceiver) ReceiveResourceSpans(ctx context.Context, rspans ptrace.ResourceSpans, httpHeader http.Header) source.Source { // each rspans is coming from a different resource and should be considered // a separate payload; typically there is only one item in this slice attr := rspans.Resource().Attributes() @@ -238,23 +157,23 @@ func (o *OTLPReceiver) ReceiveResourceSpans(ctx context.Context, rspans ptrace.R env := rattr[string(semconv.AttributeDeploymentEnvironment)] lang := rattr[string(semconv.AttributeTelemetrySDKLanguage)] if lang == "" { - lang = fastHeaderGet(header, headerLang) + lang = fastHeaderGet(httpHeader, header.Lang) } containerID := rattr[string(semconv.AttributeContainerID)] if containerID == "" { containerID = rattr[string(semconv.AttributeK8SPodUID)] } if containerID == "" { - containerID = o.cidProvider.GetContainerID(ctx, header) + containerID = o.cidProvider.GetContainerID(ctx, httpHeader) } tagstats := &info.TagStats{ Tags: info.Tags{ Lang: lang, - LangVersion: fastHeaderGet(header, headerLangVersion), - Interpreter: fastHeaderGet(header, headerLangInterpreter), - LangVendor: fastHeaderGet(header, headerLangInterpreterVendor), + LangVersion: fastHeaderGet(httpHeader, header.LangVersion), + Interpreter: fastHeaderGet(httpHeader, header.LangInterpreter), + LangVendor: fastHeaderGet(httpHeader, header.LangInterpreterVendor), TracerVersion: fmt.Sprintf("otlp-%s", rattr[string(semconv.AttributeTelemetrySDKVersion)]), - EndpointVersion: fmt.Sprintf("opentelemetry_%s_v1", protocol), + EndpointVersion: "opentelemetry_grpc_v1", }, Stats: info.NewStats(), } diff --git a/pkg/trace/api/otlp_test.go b/pkg/trace/api/otlp_test.go index ecb1b832de0037..ce1206915b232f 100644 --- a/pkg/trace/api/otlp_test.go +++ b/pkg/trace/api/otlp_test.go @@ -17,6 +17,7 @@ import ( "unicode" "github.com/DataDog/datadog-agent/pkg/otlp/model/source" + "github.com/DataDog/datadog-agent/pkg/trace/api/internal/header" "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/pb" "github.com/DataDog/datadog-agent/pkg/trace/sampler" @@ -117,15 +118,15 @@ func TestOTLPMetrics(t *testing.T) { }, }).Traces().ResourceSpans() - rcv.ReceiveResourceSpans(context.Background(), rspans.At(0), http.Header{}, "") - rcv.ReceiveResourceSpans(context.Background(), rspans.At(1), http.Header{}, "") + rcv.ReceiveResourceSpans(context.Background(), rspans.At(0), http.Header{}) + rcv.ReceiveResourceSpans(context.Background(), rspans.At(1), http.Header{}) calls := stats.CountCalls assert.Equal(4, len(calls)) - assert.Contains(calls, teststatsd.MetricsArgs{Name: "datadog.trace_agent.otlp.spans", Value: 3, Tags: []string{"tracer_version:otlp-", "endpoint_version:opentelemetry__v1"}, Rate: 1}) - assert.Contains(calls, teststatsd.MetricsArgs{Name: "datadog.trace_agent.otlp.spans", Value: 2, Tags: []string{"tracer_version:otlp-", "endpoint_version:opentelemetry__v1"}, Rate: 1}) - assert.Contains(calls, teststatsd.MetricsArgs{Name: "datadog.trace_agent.otlp.traces", Value: 1, Tags: []string{"tracer_version:otlp-", "endpoint_version:opentelemetry__v1"}, Rate: 1}) - assert.Contains(calls, teststatsd.MetricsArgs{Name: "datadog.trace_agent.otlp.traces", Value: 2, Tags: []string{"tracer_version:otlp-", "endpoint_version:opentelemetry__v1"}, Rate: 1}) + assert.Contains(calls, teststatsd.MetricsArgs{Name: "datadog.trace_agent.otlp.spans", Value: 3, Tags: []string{"tracer_version:otlp-", "endpoint_version:opentelemetry_grpc_v1"}, Rate: 1}) + assert.Contains(calls, teststatsd.MetricsArgs{Name: "datadog.trace_agent.otlp.spans", Value: 2, Tags: []string{"tracer_version:otlp-", "endpoint_version:opentelemetry_grpc_v1"}, Rate: 1}) + assert.Contains(calls, teststatsd.MetricsArgs{Name: "datadog.trace_agent.otlp.traces", Value: 1, Tags: []string{"tracer_version:otlp-", "endpoint_version:opentelemetry_grpc_v1"}, Rate: 1}) + assert.Contains(calls, teststatsd.MetricsArgs{Name: "datadog.trace_agent.otlp.traces", Value: 2, Tags: []string{"tracer_version:otlp-", "endpoint_version:opentelemetry_grpc_v1"}, Rate: 1}) } func TestOTLPNameRemapping(t *testing.T) { @@ -142,7 +143,7 @@ func TestOTLPNameRemapping(t *testing.T) { {Name: "asd"}, }, }, - }).Traces().ResourceSpans().At(0), http.Header{}, "") + }).Traces().ResourceSpans().At(0), http.Header{}) timeout := time.After(500 * time.Millisecond) select { case <-timeout: @@ -341,7 +342,7 @@ func TestOTLPReceiveResourceSpans(t *testing.T) { } { t.Run("", func(t *testing.T) { rspans := testutil.NewOTLPTracesRequest(tt.in).Traces().ResourceSpans().At(0) - rcv.ReceiveResourceSpans(context.Background(), rspans, http.Header{}, "agent_tests") + rcv.ReceiveResourceSpans(context.Background(), rspans, http.Header{}) timeout := time.After(500 * time.Millisecond) select { case <-timeout: @@ -363,7 +364,7 @@ func TestOTLPReceiveResourceSpans(t *testing.T) { }, }, }).Traces().ResourceSpans().At(0) - rcv.ReceiveResourceSpans(context.Background(), rspans, http.Header{}, "agent_tests") + rcv.ReceiveResourceSpans(context.Background(), rspans, http.Header{}) timeout := time.After(500 * time.Millisecond) select { case <-timeout: @@ -452,7 +453,7 @@ func TestOTLPHostname(t *testing.T) { Attributes: rattr, Spans: []*testutil.OTLPSpan{{Attributes: sattr}}, }, - }).Traces().ResourceSpans().At(0), http.Header{}, "") + }).Traces().ResourceSpans().At(0), http.Header{}) assert.Equal(t, src.Kind, source.HostnameKind) assert.Equal(t, src.Identifier, tt.out) timeout := time.After(500 * time.Millisecond) @@ -475,25 +476,9 @@ func TestOTLPReceiver(t *testing.T) { o := NewOTLPReceiver(nil, config.New()) o.Start() defer o.Stop() - assert.Nil(t, o.httpsrv) assert.Nil(t, o.grpcsrv) }) - t.Run("Start/http", func(t *testing.T) { - port := testutil.FreeTCPPort(t) - cfg := config.New() - cfg.OTLPReceiver = &config.OTLP{ - BindHost: "localhost", - HTTPPort: port, - } - o := NewOTLPReceiver(nil, cfg) - o.Start() - defer o.Stop() - assert.Nil(t, o.grpcsrv) - assert.NotNil(t, o.httpsrv) - assert.Equal(t, fmt.Sprintf("localhost:%d", port), o.httpsrv.Addr) - }) - t.Run("Start/grpc", func(t *testing.T) { port := testutil.FreeTCPPort(t) cfg := config.New() @@ -505,7 +490,6 @@ func TestOTLPReceiver(t *testing.T) { o.Start() defer o.Stop() assert := assert.New(t) - assert.Nil(o.httpsrv) assert.NotNil(o.grpcsrv) svc, ok := o.grpcsrv.GetServiceInfo()["opentelemetry.proto.collector.trace.v1.TraceService"] assert.True(ok) @@ -513,27 +497,12 @@ func TestOTLPReceiver(t *testing.T) { assert.Equal("Export", svc.Methods[0].Name) }) - t.Run("Start/http+grpc", func(t *testing.T) { - port1, port2 := testutil.FreeTCPPort(t), testutil.FreeTCPPort(t) - cfg := config.New() - cfg.OTLPReceiver = &config.OTLP{ - BindHost: "localhost", - HTTPPort: port1, - GRPCPort: port2, - } - o := NewOTLPReceiver(nil, cfg) - o.Start() - defer o.Stop() - assert.NotNil(t, o.grpcsrv) - assert.NotNil(t, o.httpsrv) - }) - t.Run("processRequest", func(t *testing.T) { out := make(chan *Payload, 5) o := NewOTLPReceiver(out, config.New()) - o.processRequest(context.Background(), otlpProtocolGRPC, http.Header(map[string][]string{ - headerLang: {"go"}, - headerContainerID: {"containerdID"}, + o.processRequest(context.Background(), http.Header(map[string][]string{ + header.Lang: {"go"}, + header.ContainerID: {"containerdID"}, }), otlpTestTracesRequest) ps := make([]*Payload, 2) timeout := time.After(time.Second / 2) @@ -764,11 +733,11 @@ func TestOTLPHelpers(t *testing.T) { t.Run("tagsFromHeaders", func(t *testing.T) { out := tagsFromHeaders(http.Header(map[string][]string{ - headerLang: {"go"}, - headerLangVersion: {"1.14"}, - headerLangInterpreter: {"x"}, - headerLangInterpreterVendor: {"y"}, - }), otlpProtocolGRPC) + header.Lang: {"go"}, + header.LangVersion: {"1.14"}, + header.LangInterpreter: {"x"}, + header.LangInterpreterVendor: {"y"}, + })) assert.Equal(t, []string{"endpoint_version:opentelemetry_grpc_v1", "lang:go", "lang_version:1.14", "interpreter:x", "lang_vendor:y"}, out) }) } @@ -1266,8 +1235,8 @@ func trimSpaces(str string) string { func BenchmarkProcessRequest(b *testing.B) { metadata := http.Header(map[string][]string{ - headerLang: {"go"}, - headerContainerID: {"containerdID"}, + header.Lang: {"go"}, + header.ContainerID: {"containerdID"}, }) out := make(chan *Payload, 100) end := make(chan struct{}) @@ -1287,7 +1256,7 @@ func BenchmarkProcessRequest(b *testing.B) { b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - r.processRequest(context.Background(), otlpProtocolHTTP, metadata, otlpTestTracesRequest) + r.processRequest(context.Background(), metadata, otlpTestTracesRequest) } b.StopTimer() end <- struct{}{} diff --git a/pkg/trace/api/pipeline_stats.go b/pkg/trace/api/pipeline_stats.go index 288ae62bc94194..25f233fad42235 100644 --- a/pkg/trace/api/pipeline_stats.go +++ b/pkg/trace/api/pipeline_stats.go @@ -62,7 +62,7 @@ func pipelineStatsErrorHandler(err error) http.Handler { // newPipelineStatsProxy creates an http.ReverseProxy which forwards requests to the pipeline stats intake. // The tags will be added as a header to all proxied requests. func newPipelineStatsProxy(conf *config.AgentConfig, target *url.URL, key string, tags string) *httputil.ReverseProxy { - cidProvider := NewIDProvider("/proc") + cidProvider := NewIDProvider(conf.ContainerProcRoot) director := func(req *http.Request) { req.Header.Set("Via", fmt.Sprintf("trace-agent %s", conf.AgentVersion)) if _, ok := req.Header["User-Agent"]; !ok { diff --git a/pkg/trace/api/profiles.go b/pkg/trace/api/profiles.go index 967f1c7a9de13d..2ddf0967d50ab8 100644 --- a/pkg/trace/api/profiles.go +++ b/pkg/trace/api/profiles.go @@ -100,7 +100,7 @@ func errorHandler(err error) http.Handler { // The tags will be added as a header to all proxied requests. // For more details please see multiTransport. func newProfileProxy(conf *config.AgentConfig, targets []*url.URL, keys []string, tags string) *httputil.ReverseProxy { - cidProvider := NewIDProvider("/proc") + cidProvider := NewIDProvider(conf.ContainerProcRoot) director := func(req *http.Request) { req.Header.Set("Via", fmt.Sprintf("trace-agent %s", conf.AgentVersion)) if _, ok := req.Header["User-Agent"]; !ok { diff --git a/pkg/trace/api/responses.go b/pkg/trace/api/responses.go index 08b70d8d933a3e..7465fd19f5c519 100644 --- a/pkg/trace/api/responses.go +++ b/pkg/trace/api/responses.go @@ -15,6 +15,7 @@ import ( "go.uber.org/atomic" "github.com/DataDog/datadog-agent/pkg/trace/api/apiutil" + "github.com/DataDog/datadog-agent/pkg/trace/api/internal/header" "github.com/DataDog/datadog-agent/pkg/trace/log" "github.com/DataDog/datadog-agent/pkg/trace/metrics" "github.com/DataDog/datadog-agent/pkg/trace/sampler" @@ -111,7 +112,7 @@ func httpRateByService(ratesVersion string, w http.ResponseWriter, dynConf *samp Rates: currentState.Rates, } if ratesVersion != "" { - w.Header().Set(headerRatesPayloadVersion, currentState.Version) + w.Header().Set(header.RatesPayloadVersion, currentState.Version) if ratesVersion == currentState.Version { _, err = wc.Write([]byte("{}")) return diff --git a/pkg/trace/api/telemetry.go b/pkg/trace/api/telemetry.go index cdbfae5592a712..8b89afa04442c3 100644 --- a/pkg/trace/api/telemetry.go +++ b/pkg/trace/api/telemetry.go @@ -15,6 +15,7 @@ import ( "net/url" "time" + "github.com/DataDog/datadog-agent/pkg/trace/api/internal/header" "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/log" "github.com/DataDog/datadog-agent/pkg/trace/metrics" @@ -84,7 +85,7 @@ func (r *HTTPReceiver) telemetryProxyHandler() http.Handler { } if cid := r.containerIDProvider.GetContainerID(req.Context(), req.Header); cid != "" { - req.Header.Set(headerContainerID, cid) + req.Header.Set(header.ContainerID, cid) } else { metrics.Count("datadog.trace_agent.telemetry_proxy.no_container_id_found", 1, []string{}, 1) } diff --git a/pkg/trace/api/version.go b/pkg/trace/api/version.go index cb3268c8dd8426..7e5c41558de752 100644 --- a/pkg/trace/api/version.go +++ b/pkg/trace/api/version.go @@ -20,16 +20,51 @@ const ( v03 Version = "v0.3" // v04 - // Traces: msgpack/JSON (Content-Type) slice of traces + returns service sampling ratios + // + // Request: Trace chunks. + // Content-Type: application/msgpack + // Payload: An array of arrays of Span (pkg/trace/pb/span.proto) + // + // Response: Service sampling rates. + // Content-Type: application/json + // Payload: Object mapping span pattern to sample rate. + // + // The response payload is an object whose keys are of the form + // "service:my-service,env:my-env", where "my-service" is the name of the + // affected service, and "my-env" is the name of the relevant deployment + // environment. The value at each key is the sample rate to apply to traces + // beginning with a span that matches the key. + // + // { + // "service:foosvc,env:prod": 0.223443, + // "service:barsvc,env:staging": 0.011249 + // } + // + // There is a special key, "service:,env:", that denotes the sample rate for + // traces that do not match any other key. + // + // { + // "service:foosvc,env:prod": 0.223443, + // "service:barsvc,env:staging": 0.011249, + // "service:,env:": 0.5 + // } + // + // Neither the "service:,env:" key nor any other need be present in the + // response. + // + // {} + // v04 Version = "v0.4" // v05 // - // Content-Type: application/msgpack - // Payload: Traces with strings de-duplicated into a dictionary. - // Response: Service sampling rates. + // Request: Trace chunks with a shared dictionary of strings. + // Content-Type: application/msgpack + // Payload: Traces with strings de-duplicated into a dictionary (see below). // - // The payload is an array containing exactly 2 elements: + // Response: Service sampling rates (see description in v04). + // + // The request payload is an array containing exactly 2 elements: // // 1. An array of all unique strings present in the payload (a dictionary referred to by index). // 2. An array of traces, where each trace is an array of spans. A span is encoded as an array having @@ -76,9 +111,11 @@ const ( // V07 API // - // Content-Type: application/msgpack - // Payload: TracerPayload (pkg/trace/pb/tracer_payload.proto) - // Response: Service sampling rates. + // Request: Tracer Payload. + // Content-Type: application/msgpack + // Payload: TracerPayload (pkg/trace/pb/tracer_payload.proto) + // + // Response: Service sampling rates (see description in v04). // V07 Version = "v0.7" ) diff --git a/pkg/trace/config/config.go b/pkg/trace/config/config.go index f2501172054e3a..2dd7e2b867769b 100644 --- a/pkg/trace/config/config.go +++ b/pkg/trace/config/config.go @@ -46,10 +46,6 @@ type OTLP struct { // BindHost specifies the host to bind the receiver to. BindHost string `mapstructure:"-"` - // HTTPPort specifies the port to use for the plain HTTP receiver. - // If unset (or 0), the receiver will be off. - HTTPPort int `mapstructure:"http_port"` - // GRPCPort specifies the port to use for the plain HTTP receiver. // If unset (or 0), the receiver will be off. GRPCPort int `mapstructure:"grpc_port"` @@ -414,7 +410,7 @@ type AgentConfig struct { MaxCatalogEntries int // RemoteSamplingClient retrieves sampling updates from the remote config backend - RemoteSamplingClient RemoteClient + RemoteSamplingClient RemoteClient `json:"-"` // ContainerTags ... ContainerTags func(cid string) ([]string, error) `json:"-"` @@ -464,7 +460,7 @@ func New() *AgentConfig { ReceiverHost: "localhost", ReceiverPort: 8126, - MaxRequestBytes: 50 * 1024 * 1024, // 50MB + MaxRequestBytes: 25 * 1024 * 1024, // 25MB PipeBufferSize: 1_000_000, PipeSecurityDescriptor: "D:AI(A;;GA;;;WD)", GUIPort: "5002", diff --git a/pkg/trace/go.mod b/pkg/trace/go.mod index b29a11366786e9..47208f7cadc2a9 100644 --- a/pkg/trace/go.mod +++ b/pkg/trace/go.mod @@ -28,10 +28,10 @@ require ( github.com/stretchr/testify v1.8.1 github.com/tinylib/msgp v1.1.6 github.com/vmihailenco/msgpack/v4 v4.3.12 - go.opentelemetry.io/collector/pdata v0.66.0 - go.opentelemetry.io/collector/semconv v0.66.0 + go.opentelemetry.io/collector/pdata v1.0.0-rc2 + go.opentelemetry.io/collector/semconv v0.68.0 go.uber.org/atomic v1.10.0 - golang.org/x/sys v0.2.0 + golang.org/x/sys v0.3.0 golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba google.golang.org/grpc v1.51.0 k8s.io/apimachinery v0.23.8 @@ -44,7 +44,6 @@ require ( github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/containerd/cgroups v1.0.4 // indirect github.com/coreos/go-systemd/v22 v22.3.2 // indirect - github.com/dgraph-io/ristretto v0.1.0 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect github.com/docker/go-units v0.4.0 // indirect github.com/dustin/go-humanize v1.0.0 // indirect @@ -58,6 +57,7 @@ require ( github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 // indirect + github.com/outcaste-io/ristretto v0.2.0 // indirect github.com/philhofer/fwd v1.1.1 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect @@ -67,7 +67,7 @@ require ( github.com/tklauser/numcpus v0.5.0 // indirect github.com/vmihailenco/tagparser v0.1.2 // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect - go.uber.org/multierr v1.8.0 // indirect + go.uber.org/multierr v1.9.0 // indirect golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect golang.org/x/text v0.4.0 // indirect diff --git a/pkg/trace/go.sum b/pkg/trace/go.sum index 0ac75b7b1d26f2..c069327ca54bd4 100644 --- a/pkg/trace/go.sum +++ b/pkg/trace/go.sum @@ -41,8 +41,6 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= -github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= @@ -175,6 +173,8 @@ github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAl github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 h1:3snG66yBm59tKhhSPQrQ/0bCrv1LQbKt40LnUPiUxdc= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/outcaste-io/ristretto v0.2.0 h1:47w059XTZWFt01OucwjcBt8mEa3VUUhntUWEfmgVBFc= +github.com/outcaste-io/ristretto v0.2.0/go.mod h1:iBZA7RCt6jaOr0z6hiBQ6t662/oZ6Gx/yauuPvIWHAI= github.com/philhofer/fwd v1.1.1 h1:GdGcTjf5RNAxwS4QLsiMzJYj5KEvPJD3Abr261yRQXQ= github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -229,16 +229,15 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -go.opentelemetry.io/collector/pdata v0.66.0 h1:UdE5U6MsDNzuiWaXdjGx2lC3ElVqWmN/hiUE8vyvSuM= -go.opentelemetry.io/collector/pdata v0.66.0/go.mod h1:pqyaznLzk21m+1KL6fwOsRryRELL+zNM0qiVSn0MbVc= -go.opentelemetry.io/collector/semconv v0.66.0 h1:gz4fYzOVOt1EQCcOL6pbSmTRj93pZErjHD+H100pH+4= -go.opentelemetry.io/collector/semconv v0.66.0/go.mod h1:5o9yhOa+ABt7g2E5JABDxGZ1PQPbtfxrKNbYn+LOTXU= +go.opentelemetry.io/collector/pdata v1.0.0-rc2 h1:sNWuA5wlrT578sv+DhADQ3DCRFG+5+H0D2xCHtQmnis= +go.opentelemetry.io/collector/pdata v1.0.0-rc2/go.mod h1:3gknzI1BqPVbEprOIbtaPQgPAYvjRf8kdkpGMJjv14E= +go.opentelemetry.io/collector/semconv v0.68.0 h1:DUDowH6l4OFlecQg8zyffTmUrhu3N9qwr3wtS9Oy6pE= +go.opentelemetry.io/collector/semconv v0.68.0/go.mod h1:5o9yhOa+ABt7g2E5JABDxGZ1PQPbtfxrKNbYn+LOTXU= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -312,8 +311,8 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/pkg/trace/pb/decoder_v05.go b/pkg/trace/pb/decoder_v05.go index dfdeec54377f60..01ffae1bdc4a38 100644 --- a/pkg/trace/pb/decoder_v05.go +++ b/pkg/trace/pb/decoder_v05.go @@ -42,6 +42,9 @@ func (t *Traces) UnmarshalMsgDictionary(bts []byte) error { if sz, bts, err = msgp.ReadArrayHeaderBytes(bts); err != nil { return err } + if sz > 25*1e6 { // Dictionary can't be larger than 25 MB + return errors.New("too long payload") + } dict := make([]string, sz) for i := range dict { var str string @@ -152,6 +155,9 @@ func (z *Span) UnmarshalMsgDictionary(bts []byte, dict []string) ([]byte, error) if err != nil { return bts, err } + if sz > 25*1e6 { // Dictionary can't be larger than 25 MB + return bts, errors.New("too long payload") + } if z.Meta == nil && sz > 0 { z.Meta = make(map[string]string, sz) } else if len(z.Meta) > 0 { diff --git a/pkg/trace/pb/decoder_v05_test.go b/pkg/trace/pb/decoder_v05_test.go index aa895a4582ef15..c94fd5aafd2b67 100644 --- a/pkg/trace/pb/decoder_v05_test.go +++ b/pkg/trace/pb/decoder_v05_test.go @@ -80,6 +80,20 @@ func TestUnmarshalMsgDictionary(t *testing.T) { }) } +func TestUnmarshalMsgDictionaryLimitsSize(t *testing.T) { + ps := [][]byte{ + []byte("\x9e\xdd\xff\xff\xff\xff"), + []byte("\x96\x97\xa40000\xa6000000\xa6000000\xa6000000\xa6000000\xa6000000\xa6000000\x96\x94\x9c\x00\x00\x0000\xd100000\xdf0000"), + } + for _, p := range ps { + t.Run("", func(t *testing.T) { + var traces Traces + err := traces.UnmarshalMsgDictionary(p) + assert.EqualError(t, err, "too long payload") + }) + } +} + var benchOut Traces func BenchmarkUnmarshalMsgDictionary(b *testing.B) { diff --git a/pkg/trace/remoteconfighandler/mock_remote_client.go b/pkg/trace/remoteconfighandler/mock_remote_client.go index 77ac2f5c7e27c0..0e2cc56754bbaf 100644 --- a/pkg/trace/remoteconfighandler/mock_remote_client.go +++ b/pkg/trace/remoteconfighandler/mock_remote_client.go @@ -4,67 +4,67 @@ package remoteconfighandler import ( - reflect "reflect" + reflect "reflect" - state "github.com/DataDog/datadog-agent/pkg/remoteconfig/state" - gomock "github.com/golang/mock/gomock" + state "github.com/DataDog/datadog-agent/pkg/remoteconfig/state" + gomock "github.com/golang/mock/gomock" ) // MockRemoteClient is a mock of RemoteClient interface. type MockRemoteClient struct { - ctrl *gomock.Controller - recorder *MockRemoteClientMockRecorder + ctrl *gomock.Controller + recorder *MockRemoteClientMockRecorder } // MockRemoteClientMockRecorder is the mock recorder for MockRemoteClient. type MockRemoteClientMockRecorder struct { - mock *MockRemoteClient + mock *MockRemoteClient } // NewMockRemoteClient creates a new mock instance. func NewMockRemoteClient(ctrl *gomock.Controller) *MockRemoteClient { - mock := &MockRemoteClient{ctrl: ctrl} - mock.recorder = &MockRemoteClientMockRecorder{mock} - return mock + mock := &MockRemoteClient{ctrl: ctrl} + mock.recorder = &MockRemoteClientMockRecorder{mock} + return mock } // EXPECT returns an object that allows the caller to indicate expected use. func (m *MockRemoteClient) EXPECT() *MockRemoteClientMockRecorder { - return m.recorder + return m.recorder } // Close mocks base method. func (m *MockRemoteClient) Close() { - m.ctrl.T.Helper() - m.ctrl.Call(m, "Close") + m.ctrl.T.Helper() + m.ctrl.Call(m, "Close") } // Close indicates an expected call of Close. func (mr *MockRemoteClientMockRecorder) Close() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Close", reflect.TypeOf((*MockRemoteClient)(nil).Close)) + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Close", reflect.TypeOf((*MockRemoteClient)(nil).Close)) } // RegisterAPMUpdate mocks base method. func (m *MockRemoteClient) RegisterAPMUpdate(arg0 func(map[string]state.APMSamplingConfig)) { - m.ctrl.T.Helper() - m.ctrl.Call(m, "RegisterAPMUpdate", arg0) + m.ctrl.T.Helper() + m.ctrl.Call(m, "RegisterAPMUpdate", arg0) } // RegisterAPMUpdate indicates an expected call of RegisterAPMUpdate. func (mr *MockRemoteClientMockRecorder) RegisterAPMUpdate(arg0 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegisterAPMUpdate", reflect.TypeOf((*MockRemoteClient)(nil).RegisterAPMUpdate), arg0) + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegisterAPMUpdate", reflect.TypeOf((*MockRemoteClient)(nil).RegisterAPMUpdate), arg0) } // Start mocks base method. func (m *MockRemoteClient) Start() { - m.ctrl.T.Helper() - m.ctrl.Call(m, "Start") + m.ctrl.T.Helper() + m.ctrl.Call(m, "Start") } // Start indicates an expected call of Start. func (mr *MockRemoteClientMockRecorder) Start() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Start", reflect.TypeOf((*MockRemoteClient)(nil).Start)) -} \ No newline at end of file + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Start", reflect.TypeOf((*MockRemoteClient)(nil).Start)) +} diff --git a/pkg/trace/traceutil/normalize.go b/pkg/trace/traceutil/normalize.go index 2742cc0edab0ef..7859d4f6df1ef0 100644 --- a/pkg/trace/traceutil/normalize.go +++ b/pkg/trace/traceutil/normalize.go @@ -97,6 +97,11 @@ const maxTagLength = 200 // NormalizeTag applies some normalization to ensure the tags match the backend requirements. func NormalizeTag(v string) string { + // Fast path: Check if the tag is valid and only contains ASCII characters, + // if yes return it as-is right away. For most use-cases this reduces CPU usage. + if isNormalizedASCIITag(v) { + return v + } // the algorithm works by creating a set of cuts marking start and end offsets in v // that have to be replaced with underscore (_) if len(v) == 0 { @@ -273,3 +278,40 @@ func normMetricNameParse(name string) (string, bool) { return string(res), true } + +func isNormalizedASCIITag(tag string) bool { + if len(tag) == 0 { + return true + } + if len(tag) > maxTagLength { + return false + } + if !isValidASCIIStartChar(tag[0]) { + return false + } + for i := 1; i < len(tag); i++ { + b := tag[i] + // TODO: Attempt to optimize this check using SIMD/vectorization. + if isValidASCIITagChar(b) { + continue + } + if b == '_' { + // an underscore is only okay if followed by a valid non-underscore character + i++ + if i == len(tag) || !isValidASCIITagChar(tag[i]) { + return false + } + } else { + return false + } + } + return true +} + +func isValidASCIIStartChar(c byte) bool { + return ('a' <= c && c <= 'z') || c == ':' +} + +func isValidASCIITagChar(c byte) bool { + return isValidASCIIStartChar(c) || ('0' <= c && c <= '9') || c == '.' || c == '/' || c == '-' +} diff --git a/pkg/util/aggregatingqueue/queue.go b/pkg/util/aggregatingqueue/queue.go new file mode 100644 index 00000000000000..84407ff2150e00 --- /dev/null +++ b/pkg/util/aggregatingqueue/queue.go @@ -0,0 +1,78 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package queue + +import ( + "github.com/benbjohnson/clock" +) + +type queue[T any] struct { + clock clock.Clock + maxNbItem int + maxRetentionTime clock.Duration + flushCB func([]T) + enqueueCh chan T + data []T + timer *clock.Timer +} + +// NewQueue returns a chan to enqueue elements +// The flushCB function will be called with a slice of elements as soon as +// * either maxNbItem elements have been enqueued since the last flush +// * or maxRetentionTime has elapsed since the first element has been enqueued after the last flush. +func NewQueue[T any](maxNbItem int, maxRetentionTime clock.Duration, flushCB func([]T)) chan T { + return newQueue(maxNbItem, maxRetentionTime, flushCB, clock.New()) +} + +func newQueue[T any](maxNbItem int, maxRetentionTime clock.Duration, flushCB func([]T), cl clock.Clock) chan T { + q := queue[T]{ + clock: cl, + maxNbItem: maxNbItem, + maxRetentionTime: maxRetentionTime, + flushCB: flushCB, + enqueueCh: make(chan T), + data: make([]T, 0, maxNbItem), + timer: cl.Timer(maxRetentionTime), + } + + if !q.timer.Stop() { + <-q.timer.C + } + + go func() { + for { + select { + case <-q.timer.C: + q.flush() + case elem, more := <-q.enqueueCh: + if !more { + return + } + q.enqueue(elem) + } + } + }() + + return q.enqueueCh +} + +func (q *queue[T]) enqueue(elem T) { + if len(q.data) == 0 { + q.timer.Reset(q.maxRetentionTime) + } + + q.data = append(q.data, elem) + + if len(q.data) == q.maxNbItem { + q.flush() + } +} + +func (q *queue[T]) flush() { + q.timer.Stop() + q.flushCB(q.data) + q.data = make([]T, 0, q.maxNbItem) +} diff --git a/pkg/util/aggregatingqueue/queue_test.go b/pkg/util/aggregatingqueue/queue_test.go new file mode 100644 index 00000000000000..eeb058375a0646 --- /dev/null +++ b/pkg/util/aggregatingqueue/queue_test.go @@ -0,0 +1,69 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package queue + +import ( + "sync" + "testing" + "time" + + "github.com/benbjohnson/clock" + "github.com/stretchr/testify/assert" +) + +func newMockFlush[T any]() (callback func([]T), getAccumulator func() [][]T) { + accumulator := [][]T{} + var mutex sync.RWMutex + + callback = func(elems []T) { + mutex.Lock() + defer mutex.Unlock() + accumulator = append(accumulator, elems) + } + + getAccumulator = func() [][]T { + mutex.RLock() + defer mutex.RUnlock() + return accumulator + } + + return +} + +func TestQueue(t *testing.T) { + callback, accumulator := newMockFlush[int]() + cl := clock.NewMock() + queue := newQueue(3, 1*time.Minute, callback, cl) + + for i := 0; i <= 10; i++ { + queue <- i + } + + assert.Equal( + t, + accumulator(), + [][]int{ + {0, 1, 2}, + {3, 4, 5}, + {6, 7, 8}, + }, + ) + + cl.Add(2 * time.Minute) + + assert.Equal( + t, + accumulator(), + [][]int{ + {0, 1, 2}, + {3, 4, 5}, + {6, 7, 8}, + {9, 10}, + }, + ) + + close(queue) +} diff --git a/pkg/util/containerd/containerd_util.go b/pkg/util/containerd/containerd_util.go index 2c0058e9ac5e88..d9e9e4ecb89465 100644 --- a/pkg/util/containerd/containerd_util.go +++ b/pkg/util/containerd/containerd_util.go @@ -46,7 +46,8 @@ type ContainerdItf interface { Labels(namespace string, ctn containerd.Container) (map[string]string, error) LabelsWithContext(ctx context.Context, namespace string, ctn containerd.Container) (map[string]string, error) ListImages(namespace string) ([]containerd.Image, error) - Image(namespace string, ctn containerd.Container) (containerd.Image, error) + Image(namespace string, name string) (containerd.Image, error) + ImageOfContainer(namespace string, ctn containerd.Container) (containerd.Image, error) ImageSize(namespace string, ctn containerd.Container) (int64, error) Spec(namespace string, ctn containerd.Container) (*oci.Spec, error) SpecWithContext(ctx context.Context, namespace string, ctn containerd.Container) (*oci.Spec, error) @@ -231,7 +232,16 @@ func (c *ContainerdUtil) ListImages(namespace string) ([]containerd.Image, error } // Image interfaces with the containerd api to get an image -func (c *ContainerdUtil) Image(namespace string, ctn containerd.Container) (containerd.Image, error) { +func (c *ContainerdUtil) Image(namespace string, name string) (containerd.Image, error) { + ctx, cancel := context.WithTimeout(context.Background(), c.queryTimeout) + defer cancel() + ctxNamespace := namespaces.WithNamespace(ctx, namespace) + + return c.cl.GetImage(ctxNamespace, name) +} + +// ImageOfContainer interfaces with the containerd api to get an image +func (c *ContainerdUtil) ImageOfContainer(namespace string, ctn containerd.Container) (containerd.Image, error) { ctx, cancel := context.WithTimeout(context.Background(), c.queryTimeout) defer cancel() ctxNamespace := namespaces.WithNamespace(ctx, namespace) diff --git a/pkg/util/containerd/containerd_util_test.go b/pkg/util/containerd/containerd_util_test.go index 59dead49ecbca1..215157621fa78e 100644 --- a/pkg/util/containerd/containerd_util_test.go +++ b/pkg/util/containerd/containerd_util_test.go @@ -147,7 +147,7 @@ func TestInfo(t *testing.T) { require.Equal(t, "foo", c.Image) } -func TestImage(t *testing.T) { +func TestImageOfContainer(t *testing.T) { mockUtil := ContainerdUtil{} image := &mockImage{ @@ -160,7 +160,7 @@ func TestImage(t *testing.T) { }, } - resultImage, err := mockUtil.Image(TestNamespace, container) + resultImage, err := mockUtil.ImageOfContainer(TestNamespace, container) require.NoError(t, err) require.Equal(t, resultImage, image) } diff --git a/pkg/util/containerd/fake/containerd_util.go b/pkg/util/containerd/fake/containerd_util.go index a9e0bdc6ee4c08..dad1e76151b668 100644 --- a/pkg/util/containerd/fake/containerd_util.go +++ b/pkg/util/containerd/fake/containerd_util.go @@ -31,7 +31,8 @@ type MockedContainerdClient struct { MockEnvVars func(namespace string, ctn containerd.Container) (map[string]string, error) MockMetadata func() (containerd.Version, error) MockListImages func(namespace string) ([]containerd.Image, error) - MockImage func(namespace string, ctn containerd.Container) (containerd.Image, error) + MockImage func(namespace string, name string) (containerd.Image, error) + MockImageOfContainer func(namespace string, ctn containerd.Container) (containerd.Image, error) MockImageSize func(namespace string, ctn containerd.Container) (int64, error) MockTaskMetrics func(namespace string, ctn containerd.Container) (*types.Metric, error) MockTaskPids func(namespace string, ctn containerd.Container) ([]containerd.ProcessInfo, error) @@ -63,8 +64,13 @@ func (client *MockedContainerdClient) ListImages(namespace string) ([]containerd } // Image is a mock method -func (client *MockedContainerdClient) Image(namespace string, ctn containerd.Container) (containerd.Image, error) { - return client.MockImage(namespace, ctn) +func (client *MockedContainerdClient) Image(namespace string, name string) (containerd.Image, error) { + return client.MockImage(namespace, name) +} + +// ImageOfContainer is a mock method +func (client *MockedContainerdClient) ImageOfContainer(namespace string, ctn containerd.Container) (containerd.Image, error) { + return client.MockImageOfContainer(namespace, ctn) } // ImageSize is a mock method diff --git a/pkg/util/containers/image.go b/pkg/util/containers/image.go index 1959ef95720b30..8075accfe56701 100644 --- a/pkg/util/containers/image.go +++ b/pkg/util/containers/image.go @@ -19,16 +19,17 @@ var ( // SplitImageName splits a valid image name (from ResolveImageName) and returns: // - the "long image name" with registry and prefix, without tag +// - the registry // - the "short image name", without registry, prefix nor tag // - the image tag if present // - an error if parsing failed -func SplitImageName(image string) (string, string, string, error) { +func SplitImageName(image string) (string, string, string, string, error) { // See TestSplitImageName for supported formats (number 6 will surprise you!) if image == "" { - return "", "", "", ErrEmptyImage + return "", "", "", "", ErrEmptyImage } if strings.HasPrefix(image, "sha256:") { - return "", "", "", ErrImageIsSha256 + return "", "", "", "", ErrImageIsSha256 } long := image if pos := strings.LastIndex(long, "@sha"); pos > 0 { @@ -36,9 +37,10 @@ func SplitImageName(image string) (string, string, string, error) { long = long[0:pos] } - var short, tag string + var registry, short, tag string lastColon := strings.LastIndex(long, ":") lastSlash := strings.LastIndex(long, "/") + firstSlash := strings.Index(long, "/") if lastColon > -1 && lastColon > lastSlash { // We have a tag @@ -51,5 +53,9 @@ func SplitImageName(image string) (string, string, string, error) { } else { short = long } - return long, short, tag, nil + if firstSlash > -1 && firstSlash != lastSlash { + // we have a registry + registry = long[:firstSlash] + } + return long, registry, short, tag, nil } diff --git a/pkg/util/containers/image_test.go b/pkg/util/containers/image_test.go index c2c541bb4b94ef..7574af49675f02 100644 --- a/pkg/util/containers/image_test.go +++ b/pkg/util/containers/image_test.go @@ -16,43 +16,45 @@ func TestSplitImageName(t *testing.T) { for nb, tc := range []struct { source string longName string + registry string shortName string tag string err error }{ // Empty - {"", "", "", "", fmt.Errorf("empty image name")}, + {"", "", "", "", "", fmt.Errorf("empty image name")}, // A sha256 string - {"sha256:5bef08742407efd622d243692b79ba0055383bbce12900324f75e56f589aedb0", "", "", "", fmt.Errorf("invalid image name (is a sha256)")}, + {"sha256:5bef08742407efd622d243692b79ba0055383bbce12900324f75e56f589aedb0", "", "", "", "", fmt.Errorf("invalid image name (is a sha256)")}, // Shortest possibility - {"alpine", "alpine", "alpine", "", nil}, + {"alpine", "alpine", "", "alpine", "", nil}, // Historical docker format - {"nginx:latest", "nginx", "nginx", "latest", nil}, + {"nginx:latest", "nginx", "", "nginx", "latest", nil}, // Org prefix to be removed for short name {"datadog/docker-dd-agent:latest-jmx", - "datadog/docker-dd-agent", "docker-dd-agent", "latest-jmx", nil}, + "datadog/docker-dd-agent", "", "docker-dd-agent", "latest-jmx", nil}, // Sha-pinning used by many orchestrators -> empty tag // We should not have this string here as ResolveImageName should // have handled that before, but let's keep it just in case {"redis@sha256:5bef08742407efd622d243692b79ba0055383bbce12900324f75e56f589aedb0", - "redis", "redis", "", nil}, + "redis", "", "redis", "", nil}, // Quirky pinning used by swarm {"org/redis:latest@sha256:5bef08742407efd622d243692b79ba0055383bbce12900324f75e56f589aedb0", - "org/redis", "redis", "latest", nil}, + "org/redis", "", "redis", "latest", nil}, // Custom registry, simple form {"myregistry.local:5000/testing/test-image:version", - "myregistry.local:5000/testing/test-image", "test-image", "version", nil}, + "myregistry.local:5000/testing/test-image", "myregistry.local:5000", "test-image", "version", nil}, // Custom registry, most insane form possible {"myregistry.local:5000/testing/test-image:version@sha256:5bef08742407efd622d243692b79ba0055383bbce12900324f75e56f589aedb0", - "myregistry.local:5000/testing/test-image", "test-image", "version", nil}, + "myregistry.local:5000/testing/test-image", "myregistry.local:5000", "test-image", "version", nil}, // Test swarm image {"dockercloud/haproxy:1.6.7@sha256:8c4ed4049f55de49cbc8d03d057a5a7e8d609c264bb75b59a04470db1d1c5121", - "dockercloud/haproxy", "haproxy", "1.6.7", nil}, + "dockercloud/haproxy", "", "haproxy", "1.6.7", nil}, } { t.Run(fmt.Sprintf("case %d: %s", nb, tc.source), func(t *testing.T) { assert := assert.New(t) - long, short, tag, err := SplitImageName(tc.source) + long, registry, short, tag, err := SplitImageName(tc.source) assert.Equal(tc.longName, long) + assert.Equal(tc.registry, registry) assert.Equal(tc.shortName, short) assert.Equal(tc.tag, tag) diff --git a/pkg/util/dmi/dmi_mock.go b/pkg/util/dmi/dmi_mock.go new file mode 100644 index 00000000000000..932b3979826a53 --- /dev/null +++ b/pkg/util/dmi/dmi_mock.go @@ -0,0 +1,38 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows +// +build !windows + +package dmi + +import ( + "os" + "path/filepath" + "testing" +) + +func resetSysPath() { + hypervisorUUIDPath = "/sys/hypervisor/uuid" + dmiProductUUIDPath = "/sys/devices/virtual/dmi/id/product_uuid" + dmiBoardAssetTagPath = "/sys/devices/virtual/dmi/id/board_asset_tag" + dmiBoardVendorPath = "/sys/devices/virtual/dmi/id/board_vendor" +} + +func SetupMock(t *testing.T, hypervisorUUID, productUUID, boardAssetTag, boardVendor string) { + tempDir := t.TempDir() + t.Cleanup(resetSysPath) + + setTestFile := func(data string, name string) string { + tempPath := filepath.Join(tempDir, name) + _ = os.WriteFile(tempPath, []byte(data), os.ModePerm) + return tempPath + } + + hypervisorUUIDPath = setTestFile(hypervisorUUID, "hypervisor_uuid") + dmiProductUUIDPath = setTestFile(productUUID, "product_uuid") + dmiBoardAssetTagPath = setTestFile(boardAssetTag, "board_asset_tag") + dmiBoardVendorPath = setTestFile(boardVendor, "board_vendor") +} diff --git a/pkg/metadata/inventories/host_metadata_nix.go b/pkg/util/dmi/dmi_nix.go similarity index 59% rename from pkg/metadata/inventories/host_metadata_nix.go rename to pkg/util/dmi/dmi_nix.go index f2961ca3bda397..f90ef1484df796 100644 --- a/pkg/metadata/inventories/host_metadata_nix.go +++ b/pkg/util/dmi/dmi_nix.go @@ -6,7 +6,7 @@ //go:build !windows // +build !windows -package inventories +package dmi import ( "os" @@ -28,9 +28,22 @@ func readFile(path string) string { return strings.TrimSuffix(string(data), "\n") } -func getSystemSpecificHosttMetadata(metadata *HostMetadata) { - metadata.HypervisorGuestUUID = readFile(hypervisorUUIDPath) - metadata.DmiProductUUID = readFile(dmiProductUUIDPath) - metadata.DmiBoardAssetTag = readFile(dmiBoardAssetTagPath) - metadata.DmiBoardVendor = readFile(dmiBoardVendorPath) +// GetBoardAssetTag returns the board asset tag from DMI +func GetBoardAssetTag() string { + return readFile(dmiBoardAssetTagPath) +} + +// GetBoardVendor returns the board vendor +func GetBoardVendor() string { + return readFile(dmiBoardVendorPath) +} + +// GetProductUUID returns the product UUID +func GetProductUUID() string { + return readFile(dmiProductUUIDPath) +} + +// GetHypervisorUUID returns the hypervisor UUID +func GetHypervisorUUID() string { + return readFile(hypervisorUUIDPath) } diff --git a/pkg/util/dmi/dmi_nix_test.go b/pkg/util/dmi/dmi_nix_test.go new file mode 100644 index 00000000000000..ab0c4b5eb77555 --- /dev/null +++ b/pkg/util/dmi/dmi_nix_test.go @@ -0,0 +1,39 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows +// +build !windows + +package dmi + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestGetSystemSpecificHosttMetadata(t *testing.T) { + SetupMock(t, + "UUID1\n", + "UUID2\n", + "i-test\n", + "test vendor\n", + ) + + assert.Equal(t, "UUID1", GetHypervisorUUID()) + assert.Equal(t, "UUID2", GetProductUUID()) + assert.Equal(t, "i-test", GetBoardAssetTag()) + assert.Equal(t, "test vendor", GetBoardVendor()) + + hypervisorUUIDPath = "does not exist" + dmiProductUUIDPath = "does not exist" + dmiBoardAssetTagPath = "does not exist" + dmiBoardVendorPath = "does not exist" + + assert.Equal(t, "", GetHypervisorUUID()) + assert.Equal(t, "", GetProductUUID()) + assert.Equal(t, "", GetBoardAssetTag()) + assert.Equal(t, "", GetBoardVendor()) +} diff --git a/pkg/util/dmi/dmi_windows.go b/pkg/util/dmi/dmi_windows.go new file mode 100644 index 00000000000000..38788f96517ad0 --- /dev/null +++ b/pkg/util/dmi/dmi_windows.go @@ -0,0 +1,37 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build windows +// +build windows + +package dmi + +// Used by the mock +var ( + boardAssetTag = "" + boardVendor = "" + productUUID = "" + hypervisorUUID = "" +) + +// GetBoardAssetTag returns an empty string on Windows +func GetBoardAssetTag() string { + return boardAssetTag +} + +// GetBoardVendor returns an empty string on Windows +func GetBoardVendor() string { + return boardVendor +} + +// GetProductUUID returns an empty string on Windows +func GetProductUUID() string { + return productUUID +} + +// GetHypervisorUUID returns an empty string on Windows +func GetHypervisorUUID() string { + return hypervisorUUID +} diff --git a/pkg/util/dmi/dmi_windows_mock.go b/pkg/util/dmi/dmi_windows_mock.go new file mode 100644 index 00000000000000..b89d643d351e05 --- /dev/null +++ b/pkg/util/dmi/dmi_windows_mock.go @@ -0,0 +1,27 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build windows +// +build windows + +package dmi + +import ( + "testing" +) + +func SetupMock(t *testing.T, testHypervisorUUID, testProductUUID, testBoardAssetTag, testBoardVendor string) { + t.Cleanup(func() { + boardAssetTag = "" + boardVendor = "" + productUUID = "" + hypervisorUUID = "" + }) + + boardAssetTag = testBoardAssetTag + boardVendor = testBoardVendor + productUUID = testProductUUID + hypervisorUUID = testHypervisorUUID +} diff --git a/pkg/util/ec2/ec2.go b/pkg/util/ec2/ec2.go index 7755a54c807bb8..18bc90d1c6845b 100644 --- a/pkg/util/ec2/ec2.go +++ b/pkg/util/ec2/ec2.go @@ -16,6 +16,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/util/cachedfetch" "github.com/DataDog/datadog-agent/pkg/util/common" + "github.com/DataDog/datadog-agent/pkg/util/dmi" httputils "github.com/DataDog/datadog-agent/pkg/util/http" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -32,6 +33,8 @@ var ( // CloudProviderName contains the inventory name of for EC2 CloudProviderName = "AWS" + // DMIBoardVendor contains the DMI board vendor for EC2 + DMIBoardVendor = "Amazon EC2" ) func init() { @@ -59,6 +62,38 @@ func getToken(ctx context.Context) (string, time.Time, error) { return res, expirationDate, nil } +func isBoardVendorEc2() bool { + if !config.Datadog.GetBool("ec2_use_dmi") { + return false + } + + vendor := dmi.GetBoardVendor() + if vendor == DMIBoardVendor { + return true + } + return false +} + +// getInstanceIDFromDMI fetches the instance id for current host from DMI +// +// On AWS Nitro instances dmi information contains the instanceID for the host. We check that the board vendor is +// EC2 and that the board_asset_tag match an instanceID format before using it +func getInstanceIDFromDMI() (string, error) { + if !config.Datadog.GetBool("ec2_use_dmi") { + return "", fmt.Errorf("'ec2_use_dmi' is disabled") + } + + if !isBoardVendorEc2() { + return "", fmt.Errorf("board vendor is not AWS") + } + + boardAssetTag := dmi.GetBoardAssetTag() + if boardAssetTag == "" || !strings.HasPrefix(boardAssetTag, "i-") { + return "", fmt.Errorf("invalid board_asset_tag: '%s'", boardAssetTag) + } + return boardAssetTag, nil +} + var instanceIDFetcher = cachedfetch.Fetcher{ Name: "EC2 InstanceID", Attempt: func(ctx context.Context) (interface{}, error) { @@ -108,7 +143,7 @@ func IsRunningOn(ctx context.Context) bool { if _, err := GetHostname(ctx); err == nil { return true } - return false + return isBoardVendorEc2() } // GetHostAliases returns the host aliases from the EC2 metadata API. @@ -118,8 +153,14 @@ func GetHostAliases(ctx context.Context) ([]string, error) { if err == nil { return []string{instanceID}, nil } + log.Debugf("failed to get instance ID from metadata API for Host Alias: %s", err) - log.Debugf("failed to get instance ID to use as Host Alias: %s", err) + // we fallback on DMI + instanceID, err = getInstanceIDFromDMI() + if err == nil { + return []string{instanceID}, nil + } + log.Debugf("failed to get instance ID from DMI for Host Alias: %s", err) return []string{}, nil } diff --git a/pkg/util/ec2/ec2_test.go b/pkg/util/ec2/ec2_test.go index 9e86d4f3589f49..f6b4d812601c5b 100644 --- a/pkg/util/ec2/ec2_test.go +++ b/pkg/util/ec2/ec2_test.go @@ -19,6 +19,7 @@ import ( "github.com/stretchr/testify/require" "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/util/dmi" httputils "github.com/DataDog/datadog-agent/pkg/util/http" ) @@ -41,6 +42,14 @@ func resetPackageVars() { networkIDFetcher.Reset() } +func setupDMIForEC2(t *testing.T) { + dmi.SetupMock(t, "ec2something", "ec2something2", "i-myinstance", DMIBoardVendor) +} + +func setupDMIForNotEC2(t *testing.T) { + dmi.SetupMock(t, "", "", "", "") +} + func TestIsDefaultHostname(t *testing.T) { const key = "ec2_use_windows_prefix_detection" prefixDetection := config.Datadog.GetBool(key) @@ -114,25 +123,63 @@ func TestGetInstanceID(t *testing.T) { assert.Equal(t, lastRequest.URL.Path, "/instance-id") } +func TestGetInstanceIDFromDMI(t *testing.T) { + setupDMIForNotEC2(t) + instanceID, err := getInstanceIDFromDMI() + assert.Error(t, err) + assert.Equal(t, "", instanceID) + + setupDMIForEC2(t) + instanceID, err = getInstanceIDFromDMI() + assert.NoError(t, err) + assert.Equal(t, "i-myinstance", instanceID) +} + func TestGetHostAliases(t *testing.T) { tests := []struct { name string instanceID string expectedHosts []string + setupDMI bool + disableDMI bool }{ { name: "Instance ID found", instanceID: "i-0b22a22eec53b9321", expectedHosts: []string{"i-0b22a22eec53b9321"}, + setupDMI: false, }, { name: "No Instance ID found", expectedHosts: []string{}, + setupDMI: false, + }, + { + name: "Instance ID found with DMI", + expectedHosts: []string{"i-myinstance"}, + setupDMI: true, + }, + { + name: "Instance ID found with DMI", + expectedHosts: []string{}, + setupDMI: true, + disableDMI: true, }, } for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { + if tc.setupDMI { + setupDMIForEC2(t) + } else { + setupDMIForNotEC2(t) + } + + config.Mock(t) + if tc.disableDMI { + config.Datadog.Set("ec2_use_dmi", false) + } + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/plain") var responseCode int @@ -536,6 +583,7 @@ func TestGetNTPHosts(t *testing.T) { io.WriteString(w, "test") })) defer ts.Close() + defer resetPackageVars() metadataURL = ts.URL config.Datadog.Set("cloud_provider_metadata", []string{"aws"}) @@ -543,3 +591,32 @@ func TestGetNTPHosts(t *testing.T) { assert.Equal(t, expectedHosts, actualHosts) } + +func TestGetNTPHostsDMI(t *testing.T) { + config.Mock(t) + config.Datadog.Set("cloud_provider_metadata", []string{"aws"}) + + ctx := context.Background() + expectedHosts := []string{"169.254.169.123"} + + setupDMIForEC2(t) + defer resetPackageVars() + metadataURL = "" + + actualHosts := GetNTPHosts(ctx) + + assert.Equal(t, expectedHosts, actualHosts) +} + +func TestGetNTPHostsDisabledDMI(t *testing.T) { + config.Mock(t) + config.Datadog.Set("ec2_use_dmi", false) + config.Datadog.Set("cloud_provider_metadata", []string{"aws"}) + + setupDMIForEC2(t) + defer resetPackageVars() + metadataURL = "" + + actualHosts := GetNTPHosts(context.Background()) + assert.Equal(t, []string(nil), actualHosts) +} diff --git a/pkg/util/fargate/detection.go b/pkg/util/fargate/detection.go index 0c3f2dcb3c1fcb..3c9de1b4b56182 100644 --- a/pkg/util/fargate/detection.go +++ b/pkg/util/fargate/detection.go @@ -6,34 +6,27 @@ package fargate import ( - "context" "errors" "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/util/ecs" ) // IsFargateInstance returns whether the Agent is running in Fargate. -func IsFargateInstance(ctx context.Context) bool { - return ecs.IsFargateInstance(ctx) || IsEKSFargateInstance() +func IsFargateInstance() bool { + return config.IsFeaturePresent(config.ECSFargate) || config.IsFeaturePresent(config.EKSFargate) } // GetOrchestrator returns whether the Agent is running on ECS or EKS. -func GetOrchestrator(ctx context.Context) OrchestratorName { - if IsEKSFargateInstance() { +func GetOrchestrator() OrchestratorName { + if config.IsFeaturePresent(config.EKSFargate) { return EKS } - if ecs.IsFargateInstance(ctx) { + if config.IsFeaturePresent(config.ECSFargate) { return ECS } return Unknown } -// IsEKSFargateInstance returns whether the Agent is running in EKS Fargate. -func IsEKSFargateInstance() bool { - return config.Datadog.GetBool("eks_fargate") -} - // GetEKSFargateNodename returns the node name in EKS Fargate func GetEKSFargateNodename() (string, error) { if nodename := config.Datadog.GetString("kubernetes_kubelet_nodename"); nodename != "" { diff --git a/pkg/util/fargate/hostname_process.go b/pkg/util/fargate/hostname_process.go index 96bd24cfbf636a..8644257cf4aa05 100644 --- a/pkg/util/fargate/hostname_process.go +++ b/pkg/util/fargate/hostname_process.go @@ -22,7 +22,7 @@ import ( // - ECS: fargate_task: // - EKS: value of kubernetes_kubelet_nodename func GetFargateHost(ctx context.Context) (string, error) { - return getFargateHost(ctx, GetOrchestrator(ctx), getECSHost, getEKSHost) + return getFargateHost(ctx, GetOrchestrator(), getECSHost, getEKSHost) } // getFargateHost is separated from GetFargateHost for testing purpose diff --git a/pkg/util/filesystem/permission_nowindows.go b/pkg/util/filesystem/permission_nowindows.go index fc900c6b50a04c..8af90c5445278f 100644 --- a/pkg/util/filesystem/permission_nowindows.go +++ b/pkg/util/filesystem/permission_nowindows.go @@ -2,6 +2,7 @@ // under the Apache License Version 2.0. // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. + //go:build !windows // +build !windows @@ -26,7 +27,8 @@ func NewPermission() (*Permission, error) { return &Permission{}, nil } -// RestrictAccessToUser restricts the access to a file to the current user and its group +// RestrictAccessToUser sets the file user and group to the same as 'dd-agent' user. If the function fails to lookup +// "dd-agent" user it return nil immediately. func (p *Permission) RestrictAccessToUser(path string) error { usr, err := user.Lookup("dd-agent") if err != nil { @@ -54,3 +56,18 @@ func (p *Permission) RestrictAccessToUser(path string) error { return nil } + +// RemoveAccessToOtherUsers on Unix this calls RestrictAccessToUser and then removes all access to the file for 'group' +// and 'other' +func (p *Permission) RemoveAccessToOtherUsers(path string) error { + // We first try to set other and group to "dd-agent" when possible + _ = p.RestrictAccessToUser(path) + + fperm, err := os.Stat(path) + if err != nil { + return err + } + // We keep the original 'user' rights but set 'group' and 'other' to zero. + newPerm := fperm.Mode().Perm() & 0700 + return os.Chmod(path, fs.FileMode(newPerm)) +} diff --git a/pkg/util/filesystem/permission_nowindows_test.go b/pkg/util/filesystem/permission_nowindows_test.go new file mode 100644 index 00000000000000..d5ac928c208583 --- /dev/null +++ b/pkg/util/filesystem/permission_nowindows_test.go @@ -0,0 +1,45 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows +// +build !windows + +package filesystem + +import ( + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/require" + "gotest.tools/assert" +) + +func TestRemoveAccessToOtherUsers(t *testing.T) { + p, err := NewPermission() + require.NoError(t, err) + + root := t.TempDir() + + testFile := filepath.Join(root, "file") + testDir := filepath.Join(root, "dir") + + err = os.WriteFile(testFile, []byte("test"), 0777) + require.NoError(t, err) + err = os.Mkdir(testDir, 0777) + require.NoError(t, err) + + err = p.RemoveAccessToOtherUsers(testFile) + require.NoError(t, err) + stat, err := os.Stat(testFile) + require.NoError(t, err) + assert.Equal(t, int(stat.Mode().Perm()), 0700) + + err = p.RemoveAccessToOtherUsers(testDir) + require.NoError(t, err) + stat, err = os.Stat(testDir) + require.NoError(t, err) + assert.Equal(t, int(stat.Mode().Perm()), 0700) +} diff --git a/pkg/util/filesystem/permission_windows.go b/pkg/util/filesystem/permission_windows.go index edf35038760226..11d5eb2f78e900 100644 --- a/pkg/util/filesystem/permission_windows.go +++ b/pkg/util/filesystem/permission_windows.go @@ -71,3 +71,8 @@ func (p *Permission) RestrictAccessToUser(path string) error { acl.GrantSid(windows.GENERIC_ALL, p.systemSid), acl.GrantSid(windows.GENERIC_ALL, p.currentUserSid)) } + +// RemoveAccessToOtherUsers on Windows this function calls RestrictAccessToUser +func (p *Permission) RemoveAccessToOtherUsers(path string) error { + return p.RestrictAccessToUser(path) +} diff --git a/pkg/util/hostname/common.go b/pkg/util/hostname/common.go index 81f466be66cc75..b9f785fe99b414 100644 --- a/pkg/util/hostname/common.go +++ b/pkg/util/hostname/common.go @@ -71,9 +71,9 @@ func fromHostnameFile(ctx context.Context, _ string) (string, error) { return hostname, nil } -func fromFargate(ctx context.Context, _ string) (string, error) { +func fromFargate(_ context.Context, _ string) (string, error) { // If we're running on fargate we strip the hostname - if isFargateInstance(ctx) { + if isFargateInstance() { return "", nil } return "", fmt.Errorf("agent is not runnning on Fargate") diff --git a/pkg/util/hostname/common_test.go b/pkg/util/hostname/common_test.go index 496bd835b3f764..0df1dfa175131a 100644 --- a/pkg/util/hostname/common_test.go +++ b/pkg/util/hostname/common_test.go @@ -90,12 +90,12 @@ func TestFromHostnameFileInvalid(t *testing.T) { func TestFromFargate(t *testing.T) { defer func() { isFargateInstance = fargate.IsFargateInstance }() - isFargateInstance = func(context.Context) bool { return true } + isFargateInstance = func() bool { return true } hostname, err := fromFargate(context.TODO(), "") require.NoError(t, err) assert.Equal(t, "", hostname) - isFargateInstance = func(context.Context) bool { return false } + isFargateInstance = func() bool { return false } _, err = fromFargate(context.TODO(), "") assert.Error(t, err) } diff --git a/pkg/util/hostname/providers_test.go b/pkg/util/hostname/providers_test.go index 15aaa4300346ae..74e44716d3019d 100644 --- a/pkg/util/hostname/providers_test.go +++ b/pkg/util/hostname/providers_test.go @@ -71,9 +71,9 @@ func setupHostnameTest(t *testing.T, tc testCase) { setupHostnameFile(t, "hostname-from-file") } if tc.fargate { - isFargateInstance = func(context.Context) bool { return true } + isFargateInstance = func() bool { return true } } else { - isFargateInstance = func(context.Context) bool { return false } + isFargateInstance = func() bool { return false } } if tc.GCE { diff --git a/pkg/util/hostname/validate/normalize.go b/pkg/util/hostname/validate/normalize.go index ee9d9b6e86f340..5ed6240ea76596 100644 --- a/pkg/util/hostname/validate/normalize.go +++ b/pkg/util/hostname/validate/normalize.go @@ -8,6 +8,17 @@ package validate import ( "bytes" "fmt" + "regexp" +) + +var ( + // Filter to clean the directory name from invalid file name characters + directoryNameFilter = regexp.MustCompile(`[^a-zA-Z0-9_-]+`) +) + +const ( + // Maximum size for a directory name + directoryToHostnameMaxSize = 32 ) // NormalizeHost applies a liberal policy on host names. @@ -37,3 +48,12 @@ func NormalizeHost(host string) (string, error) { return buf.String(), nil } + +// CleanHostnameDir returns a hostname normalized to be uses as a directory name. +func CleanHostnameDir(hostname string) string { + hostname = directoryNameFilter.ReplaceAllString(hostname, "_") + if len(hostname) > directoryToHostnameMaxSize { + return hostname[:directoryToHostnameMaxSize] + } + return hostname +} diff --git a/pkg/util/jsonquery/yaml.go b/pkg/util/jsonquery/yaml.go index 58cfba9742efe2..a980b6a59f8c1f 100644 --- a/pkg/util/jsonquery/yaml.go +++ b/pkg/util/jsonquery/yaml.go @@ -8,6 +8,8 @@ package jsonquery import ( "fmt" "time" + + "gopkg.in/yaml.v3" ) // Copy from https://github.com/itchyny/gojq/blob/main/cli/yaml.go @@ -46,3 +48,18 @@ func NormalizeYAMLForGoJQ(v interface{}) interface{} { return v } } + +// YAMLCheckExist check a property/value from a YAML exist (jq style syntax) +func YAMLCheckExist(yamlData []byte, query string) (bool, error) { + var yamlContent interface{} + if err := yaml.Unmarshal(yamlData, &yamlContent); err != nil { + return false, err + } + yamlContent = NormalizeYAMLForGoJQ(yamlContent) + output, _, err := RunSingleOutput(query, yamlContent) + var exist bool + if err := yaml.Unmarshal([]byte(output), &exist); err != nil { + return false, fmt.Errorf("filter query must return a boolean: %s", err) + } + return exist, err +} diff --git a/pkg/util/jsonquery/yaml_test.go b/pkg/util/jsonquery/yaml_test.go new file mode 100644 index 00000000000000..231141e78d6be2 --- /dev/null +++ b/pkg/util/jsonquery/yaml_test.go @@ -0,0 +1,32 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2023-present Datadog, Inc. + +package jsonquery + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" +) + +func TestYAMLExistQuery(t *testing.T) { + exist, err := YAMLCheckExist(integration.Data("{\"ip_address\": \"127.0.0.50\"}"), ".ip_address == \"127.0.0.50\"") + assert.NoError(t, err) + assert.True(t, exist) + + exist, err = YAMLCheckExist(integration.Data("{\"ip_address\": \"127.0.0.50\"}"), ".ip_address == \"127.0.0.99\"") + assert.NoError(t, err) + assert.False(t, exist) + + exist, err = YAMLCheckExist(integration.Data("{\"ip_address\": \"127.0.0.50\"}"), ".ip_address") + assert.EqualError(t, err, "filter query must return a boolean: yaml: unmarshal errors:\n line 1: cannot unmarshal !!str `127.0.0.50` into bool") + assert.False(t, exist) + + exist, err = YAMLCheckExist(integration.Data("{}"), ".ip_address == \"127.0.0.99\"") + assert.NoError(t, err) + assert.False(t, exist) +} diff --git a/pkg/util/kernel/arch.go b/pkg/util/kernel/arch.go index bc08992136b27a..bc479eea59f56d 100644 --- a/pkg/util/kernel/arch.go +++ b/pkg/util/kernel/arch.go @@ -26,6 +26,6 @@ func Arch() string { case "s390x": return "s390" default: - return "" + return runtime.GOARCH } } diff --git a/pkg/util/kernel/find_headers.go b/pkg/util/kernel/find_headers.go index e5d6232035711d..24d9017497b002 100644 --- a/pkg/util/kernel/find_headers.go +++ b/pkg/util/kernel/find_headers.go @@ -31,7 +31,6 @@ import ( "github.com/DataDog/datadog-go/v5/statsd" "github.com/DataDog/nikos/types" - "github.com/DataDog/datadog-agent/pkg/ebpf" "github.com/DataDog/datadog-agent/pkg/metadata/host" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/version" @@ -82,16 +81,26 @@ type headerProvider struct { kernelHeaders []string } -func initProvider(config *ebpf.Config) { +type KernelHeaderOptions struct { + DownloadEnabled bool + Dirs []string + DownloadDir string + + AptConfigDir string + YumReposDir string + ZypperReposDir string +} + +func initProvider(opts KernelHeaderOptions) { HeaderProvider = &headerProvider{ - downloadEnabled: config.EnableKernelHeaderDownload, - headerDirs: config.KernelHeadersDirs, - headerDownloadDir: config.KernelHeadersDownloadDir, + downloadEnabled: opts.DownloadEnabled, + headerDirs: opts.Dirs, + headerDownloadDir: opts.DownloadDir, downloader: headerDownloader{ - aptConfigDir: config.AptConfigDir, - yumReposDir: config.YumReposDir, - zypperReposDir: config.ZypperReposDir, + aptConfigDir: opts.AptConfigDir, + yumReposDir: opts.YumReposDir, + zypperReposDir: opts.ZypperReposDir, }, result: notAttempted, @@ -107,12 +116,12 @@ func initProvider(config *ebpf.Config) { // Any subsequent calls to GetKernelHeaders will return the result of the first call. This is because // kernel header downloading can be a resource intensive process, so we don't want to retry it an unlimited // number of times. -func GetKernelHeaders(config *ebpf.Config, client statsd.ClientInterface) []string { +func GetKernelHeaders(opts KernelHeaderOptions, client statsd.ClientInterface) []string { providerMu.Lock() defer providerMu.Unlock() if HeaderProvider == nil { - initProvider(config) + initProvider(opts) } if HeaderProvider.result != notAttempted { diff --git a/pkg/util/kernel/find_headers_test.go b/pkg/util/kernel/find_headers_test.go index 3a43aa8aa4674f..61444c46710ec7 100644 --- a/pkg/util/kernel/find_headers_test.go +++ b/pkg/util/kernel/find_headers_test.go @@ -14,8 +14,6 @@ import ( "testing" "github.com/stretchr/testify/assert" - - "github.com/DataDog/datadog-agent/pkg/ebpf" ) func TestGetKernelHeaders(t *testing.T) { @@ -23,8 +21,8 @@ func TestGetKernelHeaders(t *testing.T) { t.Skip("set INTEGRATION environment variable to run") } - cfg := testConfig() - dirs := GetKernelHeaders(cfg, nil) + opts := KernelHeaderOptions{} + dirs := GetKernelHeaders(opts, nil) assert.NotZero(t, len(dirs), "expected to find header directories") t.Log(dirs) @@ -56,14 +54,3 @@ func TestParseHeaderVersion(t *testing.T) { } } } - -func testConfig() *ebpf.Config { - return &ebpf.Config{ - EnableKernelHeaderDownload: false, - KernelHeadersDirs: nil, - KernelHeadersDownloadDir: "", - AptConfigDir: "", - YumReposDir: "", - ZypperReposDir: "", - } -} diff --git a/pkg/util/kernel/fs.go b/pkg/util/kernel/fs.go index 03a777cf8ff2de..8106a4dad7a464 100644 --- a/pkg/util/kernel/fs.go +++ b/pkg/util/kernel/fs.go @@ -9,7 +9,6 @@ package kernel import ( - "context" "fmt" "os" "path/filepath" @@ -88,7 +87,7 @@ func IsDebugFSMounted() (bool, error) { } // on fargate, kprobe_events is mounted as ro - if !fargate.IsFargateInstance(context.Background()) { + if !fargate.IsFargateInstance() { options := strings.Split(mi.Options, ",") for _, option := range options { if option == "ro" { diff --git a/pkg/util/kubernetes/apiserver/apiserver.go b/pkg/util/kubernetes/apiserver/apiserver.go index 20f8541640a573..9c04d452611cf1 100644 --- a/pkg/util/kubernetes/apiserver/apiserver.go +++ b/pkg/util/kubernetes/apiserver/apiserver.go @@ -22,6 +22,7 @@ import ( "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/runtime" vpa "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/clientset/versioned" + vpai "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions" "k8s.io/client-go/discovery" "k8s.io/client-go/dynamic" "k8s.io/client-go/dynamic/dynamicinformer" @@ -100,6 +101,9 @@ type APIClient struct { // VPAClient holds kubernetes VerticalPodAutoscalers client VPAClient vpa.Interface + // VPAInformerFactory + VPAInformerFactory vpai.SharedInformerFactory + // timeoutSeconds defines the kubernetes client timeout timeoutSeconds int64 } @@ -239,6 +243,13 @@ func getKubeVPAClient(timeout time.Duration) (vpa.Interface, error) { return vpa.NewForConfig(clientConfig) } +// VPAInformerFactory vpai.SharedInformerFactory +func getVPAInformerFactory(client vpa.Interface) (vpai.SharedInformerFactory, error) { + // default to 300s + resyncPeriodSeconds := time.Duration(config.Datadog.GetInt64("kubernetes_informers_resync_period")) + return vpai.NewSharedInformerFactory(client, resyncPeriodSeconds*time.Second), nil +} + func getWPAInformerFactory() (dynamicinformer.DynamicSharedInformerFactory, error) { // default to 300s resyncPeriodSeconds := time.Duration(config.Datadog.GetInt64("kubernetes_informers_resync_period")) @@ -356,6 +367,13 @@ func (c *APIClient) connect() error { _ = log.Errorf("Error getting datadoghq informer Client: %s", err.Error()) return err } + + c.VPAInformerFactory, err = getVPAInformerFactory(c.VPAClient) + if err != nil { + log.Infof("Could not get a vpa informer factory: %v", err) + return err + } + } if config.Datadog.GetBool("admission_controller.enabled") { diff --git a/pkg/util/kubernetes/apiserver/apiserver_kubelet.go b/pkg/util/kubernetes/apiserver/apiserver_kubelet.go index 714562873df32c..5ac14579c6af58 100644 --- a/pkg/util/kubernetes/apiserver/apiserver_kubelet.go +++ b/pkg/util/kubernetes/apiserver/apiserver_kubelet.go @@ -23,7 +23,7 @@ import ( // node to the cache // Only called when the node agent computes the metadata mapper locally and does not rely on the DCA. func (c *APIClient) NodeMetadataMapping(nodeName string, pods []*kubelet.Pod) error { - endpointList, err := c.Cl.CoreV1().Endpoints("").List(context.TODO(), metav1.ListOptions{TimeoutSeconds: &c.timeoutSeconds}) + endpointList, err := c.Cl.CoreV1().Endpoints("").List(context.TODO(), metav1.ListOptions{TimeoutSeconds: &c.timeoutSeconds, ResourceVersion: "0"}) if err != nil { log.Errorf("Could not collect endpoints from the API Server: %q", err.Error()) return err diff --git a/pkg/util/pointer/pointer.go b/pkg/util/pointer/pointer.go index ee1f86d2efbe5f..9abdff5278750b 100644 --- a/pkg/util/pointer/pointer.go +++ b/pkg/util/pointer/pointer.go @@ -10,6 +10,11 @@ func Int64Ptr(v int64) *int64 { return &v } +// Int32Ptr returns a pointer from a value. It will allocate a new heap object for it. +func Int32Ptr(v int32) *int32 { + return &v +} + // UInt16Ptr returns a pointer from a value. It will allocate a new heap object for it. func UInt16Ptr(v uint16) *uint16 { return &v diff --git a/pkg/util/profiling/profiling.go b/pkg/util/profiling/profiling.go index a5fa0617755c39..95e9920c83cf61 100644 --- a/pkg/util/profiling/profiling.go +++ b/pkg/util/profiling/profiling.go @@ -48,6 +48,7 @@ func Start(settings Settings) error { profiler.WithPeriod(settings.Period), profiler.WithProfileTypes(types...), profiler.CPUDuration(settings.CPUDuration), + profiler.WithDeltaProfiles(settings.WithDeltaProfiles), profiler.WithTags(settings.Tags...), } diff --git a/pkg/util/profiling/profiling_test.go b/pkg/util/profiling/profiling_test.go index 5d26236bf55990..1e552f5e5fa4c5 100644 --- a/pkg/util/profiling/profiling_test.go +++ b/pkg/util/profiling/profiling_test.go @@ -22,6 +22,7 @@ func TestProfiling(t *testing.T) { MutexProfileFraction: 0, BlockProfileRate: 0, WithGoroutineProfile: false, + WithDeltaProfiles: false, Tags: []string{"1.0.0"}, } err := Start(settings) diff --git a/pkg/util/profiling/settings.go b/pkg/util/profiling/settings.go index 806fcff8dfe5e9..679e3eff9580dd 100644 --- a/pkg/util/profiling/settings.go +++ b/pkg/util/profiling/settings.go @@ -33,12 +33,14 @@ type Settings struct { BlockProfileRate int // WithGoroutineProfile additionally reports stack traces of all current goroutines WithGoroutineProfile bool + // WithDeltaProfiles specifies if delta profiles are enabled + WithDeltaProfiles bool // Tags are the additional tags to attach to profiles. Tags []string } func (settings *Settings) String() string { - return fmt.Sprintf("[Target:%q][Env:%q][Period:%s][CPU:%s][Mutex:%d][Block:%d][Routines:%v]", + return fmt.Sprintf("[Target:%q][Env:%q][Period:%s][CPU:%s][Mutex:%d][Block:%d][Routines:%v][DeltaProfiles:%v]", settings.ProfilingURL, settings.Env, settings.Period, @@ -46,6 +48,7 @@ func (settings *Settings) String() string { settings.MutexProfileFraction, settings.BlockProfileRate, settings.WithGoroutineProfile, + settings.WithDeltaProfiles, ) } diff --git a/pkg/util/static_tags.go b/pkg/util/static_tags.go index a88e8296ea810a..4612ad64df23d9 100644 --- a/pkg/util/static_tags.go +++ b/pkg/util/static_tags.go @@ -24,17 +24,17 @@ func GetStaticTagsSlice(ctx context.Context) []string { // fargate (ECS or EKS) does not have host tags, so we need to // add static tags to each container manually - if !fargate.IsFargateInstance(ctx) { + if !fargate.IsFargateInstance() { return nil } tags := []string{} // DD_TAGS / DD_EXTRA_TAGS - tags = append(tags, config.GetConfiguredTags(false)...) + tags = append(tags, config.GetGlobalConfiguredTags(false)...) // EKS Fargate specific tags - if fargate.IsEKSFargateInstance() { + if config.IsFeaturePresent(config.EKSFargate) { // eks_fargate_node node, err := fargate.GetEKSFargateNodename() if err != nil { diff --git a/pkg/util/static_tags_test.go b/pkg/util/static_tags_test.go index a460ea64997b3d..030270c2347e73 100644 --- a/pkg/util/static_tags_test.go +++ b/pkg/util/static_tags_test.go @@ -16,11 +16,12 @@ import ( func TestStaticTags(t *testing.T) { mockConfig := config.Mock(t) - mockConfig.Set("eks_fargate", true) // pretend this is a hostless environment mockConfig.Set("kubernetes_kubelet_nodename", "eksnode") - defer mockConfig.Set("eks_fargate", false) defer mockConfig.Set("kubernetes_kubelet_nodename", "") + config.SetDetectedFeatures(config.FeatureMap{config.EKSFargate: struct{}{}}) + defer config.SetDetectedFeatures(nil) + t.Run("just tags", func(t *testing.T) { mockConfig.Set("tags", []string{"some:tag", "another:tag", "nocolon"}) defer mockConfig.Set("tags", []string{}) @@ -58,11 +59,12 @@ func TestStaticTags(t *testing.T) { func TestStaticTagsSlice(t *testing.T) { mockConfig := config.Mock(t) - mockConfig.Set("eks_fargate", true) // pretend this is a hostless environment mockConfig.Set("kubernetes_kubelet_nodename", "eksnode") - defer mockConfig.Set("eks_fargate", false) defer mockConfig.Set("kubernetes_kubelet_nodename", "") + config.SetDetectedFeatures(config.FeatureMap{config.EKSFargate: struct{}{}}) + defer config.SetDetectedFeatures(nil) + t.Run("just tags", func(t *testing.T) { mockConfig.Set("tags", []string{"some:tag", "another:tag", "nocolon"}) defer mockConfig.Set("tags", []string{}) diff --git a/pkg/util/use_bare_configs.go b/pkg/util/use_bare_configs.go deleted file mode 100644 index 86dfc4341fe0ab..00000000000000 --- a/pkg/util/use_bare_configs.go +++ /dev/null @@ -1,15 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package util - -import "github.com/DataDog/datadog-agent/pkg/config" - -// CcaInAD returns the value of the logs_config.cca_in_ad -// feature flag. This is temporary, as this functionality will eventually be -// the only option. -func CcaInAD() bool { - return config.Datadog.GetBool("logs_config.cca_in_ad") -} diff --git a/pkg/util/winutil/process.go b/pkg/util/winutil/process.go index e6601d2264365b..af4b5f445eb587 100644 --- a/pkg/util/winutil/process.go +++ b/pkg/util/winutil/process.go @@ -363,3 +363,40 @@ func GetImagePathForProcess(h windows.Handle) (string, error) { } return "", lastErr } + +const ( + processQueryLimitedInformation = windows.PROCESS_QUERY_LIMITED_INFORMATION + + stillActive = windows.STATUS_PENDING +) + +// IsProcess checks to see if a given pid is currently valid in the process table +func IsProcess(pid int) bool { + h, err := windows.OpenProcess(processQueryLimitedInformation, false, uint32(pid)) + if err != nil { + return false + } + var c windows.NTStatus + err = windows.GetExitCodeProcess(h, (*uint32)(&c)) + windows.Close(h) + if err == nil { + return c == stillActive + } + return false +} + +func getProcessStartTimeAsNs(pid uint64) (uint64, error) { + h, err := windows.OpenProcess(processQueryLimitedInformation, false, uint32(pid)) + if err != nil { + return 0, fmt.Errorf("Error opening process %v", err) + } + var creation windows.Filetime + var exit windows.Filetime + var krn windows.Filetime + var user windows.Filetime + err = windows.GetProcessTimes(h, &creation, &exit, &krn, &user) + if err != nil { + return 0, err + } + return uint64(creation.Nanoseconds()), nil +} diff --git a/pkg/util/winutil/scmmonitor.go b/pkg/util/winutil/scmmonitor.go new file mode 100644 index 00000000000000..1afa4badceb181 --- /dev/null +++ b/pkg/util/winutil/scmmonitor.go @@ -0,0 +1,203 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. +//go:build windows +// +build windows + +package winutil + +import ( + "fmt" + "sync" + "unsafe" + + "golang.org/x/sys/windows" + "golang.org/x/sys/windows/svc/mgr" + + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +type ServiceInfo struct { + ServiceName []string + DisplayName []string +} + +// ServiceList is the return value from a query by pid. +type ServiceList struct { + essp []*windows.ENUM_SERVICE_STATUS_PROCESS + startTime uint64 +} + +// SCMMonitor is an object that allows the caller to monitor Windows services. +// The object will maintain a table of active services indexed by PID +type SCMMonitor struct { + mux sync.Mutex + pidToService map[uint64]*ServiceList + nonServicePid map[uint64]uint64 // start time of this pid + lastMapTime uint64 // ns since jan1 1970 + serviceRefreshes uint64 +} + +// GetServiceMonitor returns a service monitor object +func GetServiceMonitor() *SCMMonitor { + return &SCMMonitor{ + pidToService: make(map[uint64]*ServiceList), + nonServicePid: make(map[uint64]uint64), + } +} + +type StartTimeFunc func(uint64) (uint64, error) + +var pGetProcessStartTimeAsNs = StartTimeFunc(getProcessStartTimeAsNs) + +// GetRefreshCount returns the number of times we've actually queried +// the SCM database. used for logging stats. +func (scm *SCMMonitor) GetRefreshCount() uint64 { + return scm.serviceRefreshes +} +func (scm *SCMMonitor) refreshCache() error { + + // EnumServiceStatusEx requires only SC_MANAGER_ENUM_SERVICE. Switch to + // new library to use least privilege + h, err := windows.OpenSCManager(nil, nil, windows.SC_MANAGER_ENUMERATE_SERVICE) + if err != nil { + log.Warnf("Failed to connect to scm %v", err) + return fmt.Errorf("Failed to open SCM %v", err) + } + m := &mgr.Mgr{Handle: h} + defer m.Disconnect() + + var bytesNeeded, servicesReturned uint32 + var buf []byte + for { + var p *byte + if len(buf) > 0 { + p = &buf[0] + } + err = windows.EnumServicesStatusEx(m.Handle, windows.SC_ENUM_PROCESS_INFO, + windows.SERVICE_WIN32, windows.SERVICE_STATE_ALL, + p, uint32(len(buf)), &bytesNeeded, &servicesReturned, nil, nil) + if err == nil { + break + } + if err != windows.ERROR_MORE_DATA { + return fmt.Errorf("Failed to enum services %v", err) + } + if bytesNeeded <= uint32(len(buf)) { + return err + } + buf = make([]byte, bytesNeeded) + } + if servicesReturned == 0 { + return nil + } + + services := unsafe.Slice((*windows.ENUM_SERVICE_STATUS_PROCESS)(unsafe.Pointer(&buf[0])), servicesReturned) + + newmap := make(map[uint64]*ServiceList) + for idx, svc := range services { + var thissvc *ServiceList + var ok bool + if thissvc, ok = newmap[uint64(svc.ServiceStatusProcess.ProcessId)]; !ok { + thissvc = &ServiceList{} + newmap[uint64(svc.ServiceStatusProcess.ProcessId)] = thissvc + } + thissvc.essp = append(thissvc.essp, &services[idx]) + } + var current windows.Filetime + windows.GetSystemTimeAsFileTime(¤t) + scm.lastMapTime = uint64(current.Nanoseconds()) + scm.pidToService = newmap + scm.serviceRefreshes++ + return nil +} + +func (s *ServiceList) toServiceInfo() *ServiceInfo { + var si ServiceInfo + for _, inf := range s.essp { + si.DisplayName = append(si.DisplayName, windows.UTF16PtrToString(inf.DisplayName)) + si.ServiceName = append(si.ServiceName, windows.UTF16PtrToString(inf.ServiceName)) + } + return &si + +} + +func (scm *SCMMonitor) getServiceFromCache(pid, pidstart uint64) (*ServiceInfo, error) { + var err error + if val, ok := scm.pidToService[pid]; ok { + // it was in there. see if it's the right one + if val.startTime == 0 { + // we don't prepopulate the cache with pid start times + val.startTime, err = pGetProcessStartTimeAsNs(pid) + if err != nil { + return nil, err + } + } + if val.startTime == pidstart { + // it's the same one. + return val.toServiceInfo(), nil + } + } + return nil, nil +} + +// GetServiceInfo gets the service name and display name if the process identified +// by the pid is in the SCM. A process which is not an SCM controlled service will +// return nil with no error +func (scm *SCMMonitor) GetServiceInfo(pid uint64) (*ServiceInfo, error) { + // get the process start time of the pid being checked + pidstart, err := pGetProcessStartTimeAsNs(pid) + if err != nil { + return nil, err + } + scm.mux.Lock() + defer scm.mux.Unlock() + // check to see if the pid is in the cache of known, not service pids + if val, ok := scm.nonServicePid[pid]; ok { + // it's a known non service pid. Make sure it's not recycled. + if val == pidstart { + // it's the same process. We know this isn't a service + return nil, nil + } else { + // it was in there but the times didn't match, which means + // it's a different process. Clean it out. + delete(scm.nonServicePid, pid) + } + } + // if we get here it either wasn't in the map, or it was but the + // start time didn't match + + if pidstart <= scm.lastMapTime { + // so it's been around longer than our last check of the service + // table. so if it's in there it's probably good. + si, err := scm.getServiceFromCache(pid, pidstart) + if err != nil { + return nil, err + } + if si != nil { + return si, nil + } + // else + scm.nonServicePid[pid] = pidstart + return nil, nil + + } + + // if we get here, the process + // is newer than the service map. + if err = scm.refreshCache(); err != nil { + return nil, err + } + // now check the service map + si, err := scm.getServiceFromCache(pid, pidstart) + if err != nil { + return nil, err + } + if si != nil { + return si, nil + } + // otherwise put this pid as a known, non service + scm.nonServicePid[pid] = pidstart + return nil, nil +} diff --git a/pkg/util/winutil/scmmonitor_test.go b/pkg/util/winutil/scmmonitor_test.go new file mode 100644 index 00000000000000..96b499a6c29e42 --- /dev/null +++ b/pkg/util/winutil/scmmonitor_test.go @@ -0,0 +1,88 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. +//go:build windows +// +build windows + +package winutil + +import ( + "os" + "os/exec" + "strconv" + "strings" + "sync" + "testing" + + "github.com/stretchr/testify/assert" + "golang.org/x/sys/windows" +) + +type saveOutput struct { + savedOutput []byte +} + +func (so *saveOutput) Write(p []byte) (n int, err error) { + so.savedOutput = append(so.savedOutput, p...) + return os.Stdout.Write(p) +} + +var startTime windows.Filetime + +func testGetProcessStartTimeAsNs(pid uint64) (uint64, error) { + var once sync.Once + + once.Do(func() { + windows.GetSystemTimeAsFileTime(&startTime) + // move the start a bit earlier to make sure it's always + // before current + startTime.LowDateTime -= 1000000 + }) + return uint64(startTime.Nanoseconds()), nil + +} +func TestServices(t *testing.T) { + var output saveOutput + cmd := exec.Command("tasklist", "/svc", "/fo", "csv") + cmd.Stdin = os.Stdin + cmd.Stdout = &output + cmd.Stderr = os.Stderr + _ = cmd.Run() + + pGetProcessStartTimeAsNs = testGetProcessStartTimeAsNs + scm := GetServiceMonitor() + + for _, line := range strings.Split(strings.TrimRight(string(output.savedOutput), "\r\n"), "\r\n")[1:] { + + entries := strings.Split(line, ",") + for i, s := range entries { + entries[i] = strings.Replace(s, "\"", "", -1) + } + pid, _ := strconv.ParseInt(entries[1], 10, 64) + if pid == 0 { + continue + } + if pid == int64(windows.GetCurrentProcessId()) { + continue + } + if pid == int64(cmd.Process.Pid) { + continue + } + si, err := scm.GetServiceInfo(uint64(pid)) + assert.Nil(t, err, "Error on pid %v", pid) + if entries[2] != "N/A" { + assert.NotNil(t, si) + for _, name := range entries[2:] { + assert.Contains(t, si.ServiceName, name) + } + } else { + // the "N/A" processes are not services, so should not get + // an entry back + assert.Nil(t, si) + } + } + count := scm.GetRefreshCount() + assert.EqualValues(t, 1, count) + +} diff --git a/pkg/util/winutil/users.go b/pkg/util/winutil/users.go index 51a89437cf6ffe..b04fe6908f269a 100644 --- a/pkg/util/winutil/users.go +++ b/pkg/util/winutil/users.go @@ -8,6 +8,7 @@ package winutil import ( + "fmt" "syscall" "golang.org/x/sys/windows" @@ -40,3 +41,22 @@ func GetSidFromUser() (*windows.SID, error) { return windows.StringToSid(sidString) } + +// Returns true is a user is a member of the Administrator's group +// TODO: Microsoft does not recommend using this function, instead CheckTokenMembership should be used. +// https://learn.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-isuseranadmin +func IsUserAnAdmin() (bool, error) { + shell32 := windows.NewLazySystemDLL("Shell32.dll") + defer windows.FreeLibrary(windows.Handle(shell32.Handle())) + + isUserAnAdminProc := shell32.NewProc("IsUserAnAdmin") + ret, _, winError := isUserAnAdminProc.Call() + + if winError != windows.NTE_OP_OK { + return false, fmt.Errorf("IsUserAnAdmin returns error code %d", winError) + } + if ret == 0 { + return false, nil + } + return true, nil +} diff --git a/pkg/workloadmeta/collectors/internal/containerd/containerd.go b/pkg/workloadmeta/collectors/internal/containerd/containerd.go index 58a472f1dbda06..55481db4d08fc9 100644 --- a/pkg/workloadmeta/collectors/internal/containerd/containerd.go +++ b/pkg/workloadmeta/collectors/internal/containerd/containerd.go @@ -34,6 +34,10 @@ const ( containerUpdateTopic = "/containers/update" containerDeletionTopic = "/containers/delete" + imageCreationTopic = "/images/create" + imageUpdateTopic = "/images/update" + imageDeletionTopic = "/images/delete" + // These are not all the task-related topics, but enough to detect changes // in the state of the container (only need to know if it's running or not). @@ -56,6 +60,9 @@ var containerdTopics = []string{ containerCreationTopic, containerUpdateTopic, containerDeletionTopic, + imageCreationTopic, + imageUpdateTopic, + imageDeletionTopic, TaskStartTopic, TaskOOMTopic, TaskExitTopic, @@ -79,12 +86,19 @@ type collector struct { // Container exit info (mainly exit code and exit timestamp) are attached to the corresponding task events. // contToExitInfo caches the exit info of a task to enrich the container deletion event when it's received later. contToExitInfo map[string]*exitInfo + + knownImages *knownImages + + // Map of image ID => array of repo tags + repoTags map[string][]string } func init() { workloadmeta.RegisterCollector(collectorID, func() workloadmeta.Collector { return &collector{ contToExitInfo: make(map[string]*exitInfo), + knownImages: newKnownImages(), + repoTags: make(map[string][]string), } }) } @@ -110,7 +124,7 @@ func (c *collector) Start(ctx context.Context, store workloadmeta.Store) error { eventsCtx, cancelEvents := context.WithCancel(ctx) c.eventsChan, c.errorsChan = c.containerdClient.GetEvents().Subscribe(eventsCtx, subscribeFilters()...) - err = c.generateEventsFromContainerList(ctx) + err = c.notifyInitialEvents(ctx) if err != nil { cancelEvents() return err @@ -165,8 +179,8 @@ func (c *collector) stream(ctx context.Context) { } } -func (c *collector) generateEventsFromContainerList(ctx context.Context) error { - var events []workloadmeta.CollectorEvent +func (c *collector) notifyInitialEvents(ctx context.Context) error { + var containerEvents []workloadmeta.CollectorEvent namespaces, err := cutil.NamespacesToWatch(ctx, c.containerdClient) if err != nil { @@ -174,22 +188,27 @@ func (c *collector) generateEventsFromContainerList(ctx context.Context) error { } for _, namespace := range namespaces { - nsEvents, err := c.generateInitialEvents(namespace) + nsContainerEvents, err := c.generateInitialContainerEvents(namespace) if err != nil { return err } + containerEvents = append(containerEvents, nsContainerEvents...) - events = append(events, nsEvents...) + if config.Datadog.GetBool("workloadmeta.image_metadata_collection.enabled") { + if err := c.notifyInitialImageEvents(ctx, namespace); err != nil { + return err + } + } } - if len(events) > 0 { - c.store.Notify(events) + if len(containerEvents) > 0 { + c.store.Notify(containerEvents) } return nil } -func (c *collector) generateInitialEvents(namespace string) ([]workloadmeta.CollectorEvent, error) { +func (c *collector) generateInitialContainerEvents(namespace string) ([]workloadmeta.CollectorEvent, error) { var events []workloadmeta.CollectorEvent existingContainers, err := c.containerdClient.Containers(namespace) @@ -221,7 +240,30 @@ func (c *collector) generateInitialEvents(namespace string) ([]workloadmeta.Coll return events, nil } +func (c *collector) notifyInitialImageEvents(ctx context.Context, namespace string) error { + existingImages, err := c.containerdClient.ListImages(namespace) + if err != nil { + return err + } + + for _, image := range existingImages { + if err := c.notifyEventForImage(ctx, namespace, image); err != nil { + return err + } + } + + return nil +} + func (c *collector) handleEvent(ctx context.Context, containerdEvent *containerdevents.Envelope) error { + if isImageTopic(containerdEvent.Topic) { + return c.handleImageEvent(ctx, containerdEvent) + } + + return c.handleContainerEvent(ctx, containerdEvent) +} + +func (c *collector) handleContainerEvent(ctx context.Context, containerdEvent *containerdevents.Envelope) error { containerID, container, err := c.extractContainerFromEvent(ctx, containerdEvent) if err != nil { return fmt.Errorf("cannot extract container from event: %w", err) @@ -313,6 +355,10 @@ func subscribeFilters() []string { var filters []string for _, topic := range containerdTopics { + if isImageTopic(topic) && !config.Datadog.GetBool("workloadmeta.image_metadata_collection.enabled") { + continue + } + filters = append(filters, fmt.Sprintf(`topic==%q`, topic)) } diff --git a/pkg/workloadmeta/collectors/internal/containerd/event_builder_test.go b/pkg/workloadmeta/collectors/internal/containerd/event_builder_test.go index 0bbc8bacec064a..0d6d24c57f20cc 100644 --- a/pkg/workloadmeta/collectors/internal/containerd/event_builder_test.go +++ b/pkg/workloadmeta/collectors/internal/containerd/event_builder_test.go @@ -290,7 +290,7 @@ func containerdClient(container containerd.Container) fake.MockedContainerdClien MockLabels: func(namespace string, ctn containerd.Container) (map[string]string, error) { return labels, nil }, - MockImage: func(namespace string, ctn containerd.Container) (containerd.Image, error) { + MockImageOfContainer: func(namespace string, ctn containerd.Container) (containerd.Image, error) { return &mockedImage{ mockName: func() string { return imgName diff --git a/pkg/workloadmeta/collectors/internal/containerd/image.go b/pkg/workloadmeta/collectors/internal/containerd/image.go new file mode 100644 index 00000000000000..5971f86c8b9999 --- /dev/null +++ b/pkg/workloadmeta/collectors/internal/containerd/image.go @@ -0,0 +1,361 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build containerd +// +build containerd + +package containerd + +import ( + "context" + "encoding/json" + "fmt" + "strings" + + "github.com/containerd/containerd" + "github.com/containerd/containerd/api/events" + "github.com/containerd/containerd/content" + containerdevents "github.com/containerd/containerd/events" + "github.com/containerd/containerd/images" + "github.com/containerd/containerd/namespaces" + "github.com/gogo/protobuf/proto" + ocispec "github.com/opencontainers/image-spec/specs-go/v1" + + "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/workloadmeta" +) + +const imageTopicPrefix = "/images/" + +// Events from containerd contain an image name, but not IDs. When a delete +// event arrives it'll contain a name, but we won't be able to access the ID +// because the image is already gone, that's why we need to keep the IDs => +// names relationships. +type knownImages struct { + // Store IDs and names in both directions for efficient access + idsByName map[string]string // map name => ID + namesByID map[string]map[string]struct{} // map ID => set of names +} + +func newKnownImages() *knownImages { + return &knownImages{ + idsByName: make(map[string]string), + namesByID: make(map[string]map[string]struct{}), + } +} + +func (images *knownImages) addAssociation(imageName string, imageID string) { + images.idsByName[imageName] = imageID + + if images.namesByID[imageID] == nil { + images.namesByID[imageID] = make(map[string]struct{}) + } + images.namesByID[imageID][imageName] = struct{}{} +} + +func (images *knownImages) deleteAssociation(imageName string, imageID string) { + delete(images.idsByName, imageName) + + if images.namesByID[imageID] == nil { + return + } + + delete(images.namesByID[imageID], imageName) + if len(images.namesByID[imageID]) == 0 { + delete(images.namesByID, imageID) + } +} + +func (images *knownImages) getImageID(imageName string) (string, bool) { + id, found := images.idsByName[imageName] + return id, found +} + +func (images *knownImages) isReferenced(imageID string) bool { + return len(images.namesByID[imageID]) > 0 +} + +func isImageTopic(topic string) bool { + return strings.HasPrefix(topic, imageTopicPrefix) +} + +func (c *collector) handleImageEvent(ctx context.Context, containerdEvent *containerdevents.Envelope) error { + switch containerdEvent.Topic { + case imageCreationTopic: + event := &events.ImageCreate{} + if err := proto.Unmarshal(containerdEvent.Event.Value, event); err != nil { + return fmt.Errorf("error unmarshaling containerd event: %w", err) + } + + return c.handleImageCreateOrUpdate(ctx, containerdEvent.Namespace, event.Name) + + case imageUpdateTopic: + event := &events.ImageUpdate{} + if err := proto.Unmarshal(containerdEvent.Event.Value, event); err != nil { + return fmt.Errorf("error unmarshaling containerd event: %w", err) + } + + return c.handleImageCreateOrUpdate(ctx, containerdEvent.Namespace, event.Name) + + case imageDeletionTopic: + event := &events.ImageDelete{} + if err := proto.Unmarshal(containerdEvent.Event.Value, event); err != nil { + return fmt.Errorf("error unmarshaling containerd event: %w", err) + } + + imageID, found := c.knownImages.getImageID(event.Name) + if !found { + return nil + } + + c.knownImages.deleteAssociation(event.Name, imageID) + + if c.knownImages.isReferenced(imageID) { + // Image is still referenced by a different name. Don't delete the + // image, but update its repo tags. + return c.deleteRepoTagOfImage(ctx, containerdEvent.Namespace, imageID, event.Name) + } + + c.store.Notify([]workloadmeta.CollectorEvent{ + { + Type: workloadmeta.EventTypeUnset, + Source: workloadmeta.SourceRuntime, + Entity: &workloadmeta.ContainerImageMetadata{ + EntityID: workloadmeta.EntityID{ + Kind: workloadmeta.KindContainerImageMetadata, + ID: imageID, + }, + }, + }, + }) + + return nil + default: + return fmt.Errorf("unknown containerd image event topic %s, ignoring", containerdEvent.Topic) + } +} + +func (c *collector) handleImageCreateOrUpdate(ctx context.Context, namespace string, imageName string) error { + img, err := c.containerdClient.Image(namespace, imageName) + if err != nil { + return fmt.Errorf("error getting image: %w", err) + } + + return c.notifyEventForImage(ctx, namespace, img) +} + +func (c *collector) notifyEventForImage(ctx context.Context, namespace string, img containerd.Image) error { + ctxWithNamespace := namespaces.WithNamespace(ctx, namespace) + + manifest, err := images.Manifest(ctxWithNamespace, img.ContentStore(), img.Target(), img.Platform()) + if err != nil { + return fmt.Errorf("error getting image manifest: %w", err) + } + + layers, err := getLayersWithHistory(ctxWithNamespace, img.ContentStore(), manifest) + if err != nil { + log.Warnf("error while getting layers with history: %s", err) + + // Not sure if the layers and history are always available. Instead of + // returning an error, collect the image without this information. + } + + platforms, err := images.Platforms(ctxWithNamespace, img.ContentStore(), manifest.Config) + if err != nil { + return fmt.Errorf("error getting image platforms: %w", err) + } + + imageName := img.Name() + registry := "" + shortName := "" + parsedImg, err := workloadmeta.NewContainerImage(imageName) + if err == nil { + // Don't set a short name. We know that some images handled here contain + // "sha256" in the name, and those don't have a short name. + } else { + registry = parsedImg.Registry + shortName = parsedImg.ShortName + } + + imageID := manifest.Config.Digest.String() + + // We can get "create" events for images that already exist. That happens + // when the same image is referenced with different names. For example, + // datadog/agent:latest and datadog/agent:7 might refer to the same image. + // Also, in some environments (at least with Kind), pulling an image like + // datadog/agent:latest creates several events: in one of them the image + // name is a digest, in other is something with the same format as + // datadog/agent:7, and sometimes there's a temporary name prefixed with + // "import-". + // When that happens, give precedence to the name with repo and tag instead + // of the name that includes a digest. This is just to show names that are + // more user-friendly (the digests are already present in other attributes + // like ID, and repo digest). + existingImg, err := c.store.GetImage(imageID) + if err == nil { + if strings.Contains(imageName, "sha256:") && !strings.Contains(existingImg.Name, "sha256:") { + imageName = existingImg.Name + shortName = existingImg.ShortName + } + } + + var repoDigests []string + if strings.Contains(imageName, "@sha256:") { + repoDigests = append(repoDigests, imageName) + } else { + repoDigests = append(repoDigests, imageName+"@"+img.Target().Digest.String()) + + repoTagAlreadyPresent := false + for _, repoTag := range c.repoTags[imageID] { + if repoTag == imageName { + repoTagAlreadyPresent = true + break + } + } + + if !repoTagAlreadyPresent { + c.repoTags[imageID] = append(c.repoTags[imageID], imageName) + } + } + + var totalSizeBytes int64 = 0 + for _, layer := range manifest.Layers { + totalSizeBytes += layer.Size + } + + var os, osVersion, architecture, variant string + // If there are multiple platforms, return the info about the first one + if len(platforms) >= 1 { + os = platforms[0].OS + osVersion = platforms[0].OSVersion + architecture = platforms[0].Architecture + variant = platforms[0].Variant + } + + workloadmetaImg := workloadmeta.ContainerImageMetadata{ + EntityID: workloadmeta.EntityID{ + Kind: workloadmeta.KindContainerImageMetadata, + ID: imageID, + }, + EntityMeta: workloadmeta.EntityMeta{ + Name: imageName, + Namespace: namespace, + Labels: img.Labels(), + }, + Registry: registry, + ShortName: shortName, + RepoTags: c.repoTags[imageID], + RepoDigests: repoDigests, + MediaType: manifest.MediaType, + SizeBytes: totalSizeBytes, + OS: os, + OSVersion: osVersion, + Architecture: architecture, + Variant: variant, + Layers: layers, + } + + c.store.Notify([]workloadmeta.CollectorEvent{ + { + Type: workloadmeta.EventTypeSet, + Source: workloadmeta.SourceRuntime, + Entity: &workloadmetaImg, + }, + }) + + return c.updateKnownImages(ctx, namespace, imageName, imageID) +} + +// Updates the map with the image name => image ID relationships and also the repo tags +func (c *collector) updateKnownImages(ctx context.Context, namespace string, imageName string, newImageID string) error { + oldImageID, found := c.knownImages.getImageID(imageName) + c.knownImages.addAssociation(imageName, newImageID) + + // If the image name is already pointing to an ID, we need to delete the name from + // the repo tags of the image with that ID. + if found && newImageID != oldImageID { + c.knownImages.deleteAssociation(imageName, oldImageID) + return c.deleteRepoTagOfImage(ctx, namespace, oldImageID, imageName) + } + + return nil +} + +func (c *collector) deleteRepoTagOfImage(ctx context.Context, namespace string, imageID string, repoTagToDelete string) error { + repoTagDeleted := false + + for i, repoTag := range c.repoTags[imageID] { + if repoTag == repoTagToDelete { + c.repoTags[imageID] = append(c.repoTags[imageID][:i], c.repoTags[imageID][i+1:]...) + repoTagDeleted = true + break + } + } + + if repoTagDeleted && len(c.repoTags[imageID]) > 0 { + // We need to notify to workloadmeta that the image has changed. + // Updating workloadmeta entities directly is not thread-safe, that's + // why we generate an update event here instead. + if err := c.handleImageCreateOrUpdate(ctx, namespace, c.repoTags[imageID][len(c.repoTags[imageID])-1]); err != nil { + return err + } + } + + return nil +} + +func getLayersWithHistory(ctx context.Context, store content.Store, manifest ocispec.Manifest) ([]workloadmeta.ContainerImageLayer, error) { + blob, err := content.ReadBlob(ctx, store, manifest.Config) + if err != nil { + return nil, fmt.Errorf("error while getting image contents: %w", err) + } + + var ocispecImage ocispec.Image + if err = json.Unmarshal(blob, &ocispecImage); err != nil { + return nil, fmt.Errorf("error while unmarshaling image: %w", err) + } + + var layers []workloadmeta.ContainerImageLayer + + // The layers in the manifest don't include the history, and the only way to + // match the history with each layer is to rely on the order and take into + // account that some history objects don't have an associated layer + // (emptyLayer = true). + + history := ocispecImage.History + manifestLayersIdx := 0 + + for _, historyPoint := range history { + layer := workloadmeta.ContainerImageLayer{ + History: historyPoint, + } + + if !historyPoint.EmptyLayer { + if manifestLayersIdx >= len(manifest.Layers) { + // This should never happen. len(manifest.Layers) should equal + // len(history) minus the number of history points with + // emptyLayer = false. + return nil, fmt.Errorf("error while extracting image layer history") + } + + manifestLayer := manifest.Layers[manifestLayersIdx] + manifestLayersIdx += 1 + + layer.MediaType = manifestLayer.MediaType + layer.Digest = manifestLayer.Digest.String() + layer.SizeBytes = manifestLayer.Size + layer.URLs = manifestLayer.URLs + } + + layers = append(layers, layer) + } + + if manifestLayersIdx != len(manifest.Layers) { + // This should never happen. Same case as above. + return nil, fmt.Errorf("error while extracting image layer history") + } + + return layers, nil +} diff --git a/pkg/workloadmeta/collectors/internal/containerd/image_test.go b/pkg/workloadmeta/collectors/internal/containerd/image_test.go new file mode 100644 index 00000000000000..93964538637d98 --- /dev/null +++ b/pkg/workloadmeta/collectors/internal/containerd/image_test.go @@ -0,0 +1,45 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build containerd +// +build containerd + +package containerd + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestKnownImages(t *testing.T) { + images := newKnownImages() + + // Add a first image name that refers to the "123" ID + images.addAssociation("agent:7", "123") + imageID, found := images.getImageID("agent:7") + assert.True(t, found) + assert.Equal(t, "123", imageID) + assert.True(t, images.isReferenced("123")) + + // Add a second image that refers to the "123" ID + images.addAssociation("agent:latest", "123") + imageID, found = images.getImageID("agent:latest") + assert.True(t, found) + assert.Equal(t, "123", imageID) + assert.True(t, images.isReferenced("123")) + + // Delete one of the associations + images.deleteAssociation("agent:latest", "123") + _, found = images.getImageID("agent:latest") + assert.False(t, found) + assert.True(t, images.isReferenced("123")) // Still referenced by the other + + // Delete the other association + images.deleteAssociation("agent:7", "123") + _, found = images.getImageID("agent:7") + assert.False(t, found) + assert.False(t, images.isReferenced("123")) +} diff --git a/pkg/workloadmeta/collectors/internal/docker/docker.go b/pkg/workloadmeta/collectors/internal/docker/docker.go index d2ff5092e6754f..8f734c1a2e32bf 100644 --- a/pkg/workloadmeta/collectors/internal/docker/docker.go +++ b/pkg/workloadmeta/collectors/internal/docker/docker.go @@ -278,13 +278,14 @@ func extractImage(ctx context.Context, container types.ContainerJSON, resolve re var ( name string + registry string shortName string tag string err error ) if strings.Contains(imageSpec, "@sha256") { - name, shortName, tag, err = containers.SplitImageName(imageSpec) + name, registry, shortName, tag, err = containers.SplitImageName(imageSpec) if err != nil { log.Debugf("cannot split image name %q for container %q: %s", imageSpec, container.ID, err) } @@ -297,13 +298,13 @@ func extractImage(ctx context.Context, container types.ContainerJSON, resolve re return image } - name, shortName, tag, err = containers.SplitImageName(resolvedImageSpec) + name, registry, shortName, tag, err = containers.SplitImageName(resolvedImageSpec) if err != nil { log.Debugf("cannot split image name %q for container %q: %s", resolvedImageSpec, container.ID, err) // fallback and try to parse the original imageSpec anyway if err == containers.ErrImageIsSha256 { - name, shortName, tag, err = containers.SplitImageName(imageSpec) + name, registry, shortName, tag, err = containers.SplitImageName(imageSpec) if err != nil { log.Debugf("cannot split image name %q for container %q: %s", imageSpec, container.ID, err) return image @@ -315,6 +316,7 @@ func extractImage(ctx context.Context, container types.ContainerJSON, resolve re } image.Name = name + image.Registry = registry image.ShortName = shortName image.Tag = tag diff --git a/pkg/workloadmeta/collectors/internal/kubelet/kubelet.go b/pkg/workloadmeta/collectors/internal/kubelet/kubelet.go index fe973d658da79a..9ee7089353c9b1 100644 --- a/pkg/workloadmeta/collectors/internal/kubelet/kubelet.go +++ b/pkg/workloadmeta/collectors/internal/kubelet/kubelet.go @@ -176,7 +176,16 @@ func (c *collector) parsePodContainers( image, err := workloadmeta.NewContainerImage(container.Image) if err != nil { - log.Debugf("cannot split image name %q: %s", container.Image, err) + if err == containers.ErrImageIsSha256 { + // try the resolved image ID if the image name in the container + // status is a SHA256. this seems to happen sometimes when + // pinning the image to a SHA256 + image, err = workloadmeta.NewContainerImage(container.ImageID) + } + + if err != nil { + log.Debugf("cannot split image name %q nor %q: %s", container.Image, container.ImageID, err) + } } image.ID = container.ImageID diff --git a/pkg/workloadmeta/collectors/internal/podman/podman_test.go b/pkg/workloadmeta/collectors/internal/podman/podman_test.go index 22b3256485a880..c0253533af0df4 100644 --- a/pkg/workloadmeta/collectors/internal/podman/podman_test.go +++ b/pkg/workloadmeta/collectors/internal/podman/podman_test.go @@ -173,6 +173,7 @@ func TestPull(t *testing.T) { Image: workloadmeta.ContainerImage{ RawName: "docker.io/datadog/agent:latest", Name: "docker.io/datadog/agent", + Registry: "docker.io", ShortName: "agent", Tag: "latest", }, @@ -222,6 +223,7 @@ func TestPull(t *testing.T) { Image: workloadmeta.ContainerImage{ RawName: "docker.io/datadog/agent-dev:latest", Name: "docker.io/datadog/agent-dev", + Registry: "docker.io", ShortName: "agent-dev", Tag: "latest", }, diff --git a/pkg/workloadmeta/store.go b/pkg/workloadmeta/store.go index 813af569706a3d..a01b57f7cbc5cd 100644 --- a/pkg/workloadmeta/store.go +++ b/pkg/workloadmeta/store.go @@ -323,6 +323,16 @@ func (s *store) ListImages() []*ContainerImageMetadata { return images } +// GetImage implements Store#GetImage +func (s *store) GetImage(id string) (*ContainerImageMetadata, error) { + entity, err := s.getEntityByKind(KindContainerImageMetadata, id) + if err != nil { + return nil, err + } + + return entity.(*ContainerImageMetadata), nil +} + // Notify implements Store#Notify func (s *store) Notify(events []CollectorEvent) { if len(events) > 0 { diff --git a/pkg/workloadmeta/store_test.go b/pkg/workloadmeta/store_test.go index 35b06cd6fcfb51..a1b7ac1f44e5e7 100644 --- a/pkg/workloadmeta/store_test.go +++ b/pkg/workloadmeta/store_test.go @@ -724,6 +724,58 @@ func TestListImages(t *testing.T) { } } +func TestGetImage(t *testing.T) { + image := &ContainerImageMetadata{ + EntityID: EntityID{ + Kind: KindContainerImageMetadata, + ID: "abc", + }, + } + + tests := []struct { + name string + imageID string + preEvents []CollectorEvent + expectedImage *ContainerImageMetadata + expectsError bool + }{ + { + name: "image exists", + imageID: image.ID, + preEvents: []CollectorEvent{ + { + Type: EventTypeSet, + Source: fooSource, + Entity: image, + }, + }, + expectedImage: image, + }, + { + name: "image does not exist", + imageID: "non_existing_ID", + preEvents: nil, + expectsError: true, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + testStore := newTestStore() + testStore.handleEvents(test.preEvents) + + actualImage, err := testStore.GetImage(test.imageID) + + if test.expectsError { + assert.Error(t, err, errors.NewNotFound(string(KindContainerImageMetadata)).Error()) + } else { + assert.NilError(t, err) + assert.DeepEqual(t, test.expectedImage, actualImage) + } + }) + } +} + func TestReset(t *testing.T) { fooContainer := &Container{ EntityID: EntityID{ diff --git a/pkg/workloadmeta/testing/store.go b/pkg/workloadmeta/testing/store.go index f5e63a45056793..da5d734129795c 100644 --- a/pkg/workloadmeta/testing/store.go +++ b/pkg/workloadmeta/testing/store.go @@ -117,6 +117,16 @@ func (s *Store) ListImages() []*workloadmeta.ContainerImageMetadata { return images } +// GetImage implements Store#GetImage +func (s *Store) GetImage(id string) (*workloadmeta.ContainerImageMetadata, error) { + entity, err := s.getEntityByKind(workloadmeta.KindContainerImageMetadata, id) + if err != nil { + return nil, err + } + + return entity.(*workloadmeta.ContainerImageMetadata), nil +} + // Set sets an entity in the store. func (s *Store) Set(entity workloadmeta.Entity) { s.mu.Lock() diff --git a/pkg/workloadmeta/types.go b/pkg/workloadmeta/types.go index 060cb99f1b85a4..0b526736f6a52a 100644 --- a/pkg/workloadmeta/types.go +++ b/pkg/workloadmeta/types.go @@ -11,8 +11,9 @@ import ( "strings" "time" + "github.com/CycloneDX/cyclonedx-go" "github.com/mohae/deepcopy" - "github.com/opencontainers/image-spec/specs-go/v1" + v1 "github.com/opencontainers/image-spec/specs-go/v1" "github.com/DataDog/datadog-agent/pkg/util/containers" ) @@ -78,6 +79,10 @@ type Store interface { // entities with kind KindContainerImageMetadata. ListImages() []*ContainerImageMetadata + // GetImage returns metadata about a container image. It fetches the entity + // with kind KindContainerImageMetadata and the given ID. + GetImage(id string) (*ContainerImageMetadata, error) + // Notify notifies the store with a slice of events. It should only be // used by workloadmeta collectors. Notify(events []CollectorEvent) @@ -266,6 +271,7 @@ type ContainerImage struct { ID string RawName string Name string + Registry string ShortName string Tag string } @@ -277,7 +283,7 @@ func NewContainerImage(imageName string) (ContainerImage, error) { Name: imageName, } - name, shortName, tag, err := containers.SplitImageName(imageName) + name, registry, shortName, tag, err := containers.SplitImageName(imageName) if err != nil { return image, err } @@ -287,6 +293,7 @@ func NewContainerImage(imageName string) (ContainerImage, error) { } image.Name = name + image.Registry = registry image.ShortName = shortName image.Tag = tag @@ -619,6 +626,7 @@ var _ Entity = &ECSTask{} type ContainerImageMetadata struct { EntityID EntityMeta + Registry string ShortName string RepoTags []string RepoDigests []string @@ -629,6 +637,7 @@ type ContainerImageMetadata struct { Architecture string Variant string Layers []ContainerImageLayer + CycloneDXBOM *cyclonedx.BOM } // ContainerImageLayer represents a layer of a container image diff --git a/release.json b/release.json index c3e79a0a68d4aa..60d4996e7b11a6 100644 --- a/release.json +++ b/release.json @@ -34,7 +34,7 @@ "OMNIBUS_RUBY_VERSION": "7.42.0-rc.1", "JMXFETCH_VERSION": "0.47.2", "JMXFETCH_HASH": "92f9c744fe00c13c6401829b9eb50f44c5843ae9d1a14f7618531bdf0187e44f", - "SECURITY_AGENT_POLICIES_VERSION": "v0.42.0", + "SECURITY_AGENT_POLICIES_VERSION": "v0.42.1", "MACOS_BUILD_VERSION": "6.42.0-rc.1", "WINDOWS_DDNPM_DRIVER": "release-signed", "WINDOWS_DDNPM_VERSION": "2.1.1", @@ -46,7 +46,7 @@ "OMNIBUS_RUBY_VERSION": "7.42.0-rc.1", "JMXFETCH_VERSION": "0.47.2", "JMXFETCH_HASH": "92f9c744fe00c13c6401829b9eb50f44c5843ae9d1a14f7618531bdf0187e44f", - "SECURITY_AGENT_POLICIES_VERSION": "v0.42.0", + "SECURITY_AGENT_POLICIES_VERSION": "v0.42.1", "MACOS_BUILD_VERSION": "7.42.0-rc.1", "WINDOWS_DDNPM_DRIVER": "release-signed", "WINDOWS_DDNPM_VERSION": "2.1.1", diff --git a/releasenotes-dca/notes/VerticalPodAutoscaler-fb7eec91762e05a4.yaml b/releasenotes-dca/notes/VerticalPodAutoscaler-fb7eec91762e05a4.yaml new file mode 100644 index 00000000000000..ba16ebefb4f3f5 --- /dev/null +++ b/releasenotes-dca/notes/VerticalPodAutoscaler-fb7eec91762e05a4.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +features: + - | + Starts the collecting of Vertical Pod Autoscalers within Kubernetes clusters. diff --git a/releasenotes/notes/Escape-path-in-get-acl-command-b4c123c26759a1e1.yaml b/releasenotes/notes/Escape-path-in-get-acl-command-b4c123c26759a1e1.yaml new file mode 100644 index 00000000000000..33631849893698 --- /dev/null +++ b/releasenotes/notes/Escape-path-in-get-acl-command-b4c123c26759a1e1.yaml @@ -0,0 +1,3 @@ +--- +fixes: + - The secret command now correctly displays the ACL on a path with spaces. diff --git a/releasenotes/notes/LowerTraceLimit-839236eacc69d87a.yaml b/releasenotes/notes/LowerTraceLimit-839236eacc69d87a.yaml new file mode 100644 index 00000000000000..da6924056e3861 --- /dev/null +++ b/releasenotes/notes/LowerTraceLimit-839236eacc69d87a.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +fixes: + - | + APM: Lower default incoming trace payload limit to 25MB. This more closely aligns with the backend limit. Some users may see traces rejected by the Agent that the Agent would have previously accepted, but would have subsequently been rejected by the trace intake. The Agent limit can still be configured via `apm_config.max_payload_size`. diff --git a/releasenotes/notes/NDM---Add-snmp.device_up-metric-65a7855a959af675.yaml b/releasenotes/notes/NDM---Add-snmp.device_up-metric-65a7855a959af675.yaml new file mode 100644 index 00000000000000..ec47c24240f6f5 --- /dev/null +++ b/releasenotes/notes/NDM---Add-snmp.device_up-metric-65a7855a959af675.yaml @@ -0,0 +1,10 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +features: + - NDM: Add snmp.device.reachable/unreachable metrics to all monitored devices. diff --git a/releasenotes/notes/NDM---Add-snmp.interface_status-metric-13fb0f54fd11f197.yaml b/releasenotes/notes/NDM---Add-snmp.interface_status-metric-13fb0f54fd11f197.yaml new file mode 100644 index 00000000000000..bf856328fa706d --- /dev/null +++ b/releasenotes/notes/NDM---Add-snmp.interface_status-metric-13fb0f54fd11f197.yaml @@ -0,0 +1,10 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - Adds a new snmp.interface_status metric reflecting the same status as within NDM. diff --git a/releasenotes/notes/PortNormalizedTagImprovements-374203de9f436f90.yaml b/releasenotes/notes/PortNormalizedTagImprovements-374203de9f436f90.yaml new file mode 100644 index 00000000000000..186a42088a4124 --- /dev/null +++ b/releasenotes/notes/PortNormalizedTagImprovements-374203de9f436f90.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - | + APM: Ported a faster implementation of NormalizeTag with a fast-path for already normalized ASCII tags. Should marginally improve CPU usage of the trace-agent. diff --git a/releasenotes/notes/add_instance_filter_to_agent_check_command-c166bec4ff8ebf96.yaml b/releasenotes/notes/add_instance_filter_to_agent_check_command-c166bec4ff8ebf96.yaml new file mode 100644 index 00000000000000..7d25f7775d6a55 --- /dev/null +++ b/releasenotes/notes/add_instance_filter_to_agent_check_command-c166bec4ff8ebf96.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - | + Add an ``--instance-filter`` option to the Agent check command. diff --git a/releasenotes/notes/apm-fix-info-0ac3d9106e780798.yaml b/releasenotes/notes/apm-fix-info-0ac3d9106e780798.yaml new file mode 100644 index 00000000000000..735c245d5abdd7 --- /dev/null +++ b/releasenotes/notes/apm-fix-info-0ac3d9106e780798.yaml @@ -0,0 +1,3 @@ +fixes: + - | + APM: Fix the `trace-agent -info` command when remote configuration is enabled. diff --git a/releasenotes/notes/apm-fix-parsing-sqlserver-identifiers-square-brackets-a2ee7a4f029694e1.yaml b/releasenotes/notes/apm-fix-parsing-sqlserver-identifiers-square-brackets-a2ee7a4f029694e1.yaml new file mode 100644 index 00000000000000..b125e9cf6d8d1a --- /dev/null +++ b/releasenotes/notes/apm-fix-parsing-sqlserver-identifiers-square-brackets-a2ee7a4f029694e1.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - | + APM: Fix parsing of SQL Server identifiers enclosed in square brackets. diff --git a/releasenotes/notes/apm-max-cpu-mem-feb99ac256073f7c.yaml b/releasenotes/notes/apm-max-cpu-mem-feb99ac256073f7c.yaml new file mode 100644 index 00000000000000..6b8e11fb8c445b --- /dev/null +++ b/releasenotes/notes/apm-max-cpu-mem-feb99ac256073f7c.yaml @@ -0,0 +1,6 @@ +--- +enhancements: + - | + APM: Disable ``max_memory`` and ``max_cpu_percent`` by default in containerized environments (Docker-only, ECS and CI). + Users rely on the orchestrator / container runtime to set resource limits. + Note: ``max_memory`` and ``max_cpu_percent`` have been disabled by default in Kubernetes environments since Agent ``7.18.0``. diff --git a/releasenotes/notes/break-ddtray-cmdline-args-compat-05fc525c6f6dea01.yaml b/releasenotes/notes/break-ddtray-cmdline-args-compat-05fc525c6f6dea01.yaml new file mode 100644 index 00000000000000..befe9e7b413f72 --- /dev/null +++ b/releasenotes/notes/break-ddtray-cmdline-args-compat-05fc525c6f6dea01.yaml @@ -0,0 +1,13 @@ +--- +upgrade: + - | + The command line arguments to the Datadog Agent Manager for Windows ``ddtray.exe`` + have changed from single-dash arguments to double-dash arguments. + For example, ``-launch-gui`` must now be provided as ``--launch-gui``. + The start menu shortcut created by the installer will be automatically updated. + Any custom scripts or shortcuts that launch ``ddtray.exe`` with arguments must be updated manually. +deprecations: + - | + The command line arguments to the Datadog Agent Manager for Windows ``ddtray.exe`` + have changed from single-dash arguments to double-dash arguments. + For example, ``-launch-gui`` must now be provided as ``--launch-gui``. diff --git a/releasenotes/notes/bump-wheel-218fcf0e14839ed5.yaml b/releasenotes/notes/bump-wheel-218fcf0e14839ed5.yaml new file mode 100644 index 00000000000000..ebf3a1624f6c43 --- /dev/null +++ b/releasenotes/notes/bump-wheel-218fcf0e14839ed5.yaml @@ -0,0 +1,4 @@ +--- +security: + - Upgrade the wheel package to ``0.37.1`` for Python 2. + - Upgrade the wheel package to ``0.38.4`` for Python 3. diff --git a/releasenotes/notes/container_image-22cddfd6c194def9.yaml b/releasenotes/notes/container_image-22cddfd6c194def9.yaml new file mode 100644 index 00000000000000..4eb38aeb49d2c9 --- /dev/null +++ b/releasenotes/notes/container_image-22cddfd6c194def9.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +features: + - | + Add a new ``container_image`` long running check to collect information about container images. diff --git a/releasenotes/notes/fix-obfuscator-logger-8c6a4debbf3a0bf6.yaml b/releasenotes/notes/fix-obfuscator-logger-8c6a4debbf3a0bf6.yaml new file mode 100644 index 00000000000000..1474d0e7194a60 --- /dev/null +++ b/releasenotes/notes/fix-obfuscator-logger-8c6a4debbf3a0bf6.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - | + Fix panic due to uninitialized Obfuscator logger diff --git a/releasenotes/notes/fixwinhttploopback-cec77f41a8feff7f.yaml b/releasenotes/notes/fixwinhttploopback-cec77f41a8feff7f.yaml new file mode 100644 index 00000000000000..30cd39c6bed7a3 --- /dev/null +++ b/releasenotes/notes/fixwinhttploopback-cec77f41a8feff7f.yaml @@ -0,0 +1,12 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +fixes: + - | + On Windows, fixes bug in which HTTP connections were not properly accounted + for when the client and server were the same host (loopback). diff --git a/releasenotes/notes/ignore-prometheus-headless-services-6733bb93198c76f4.yaml b/releasenotes/notes/ignore-prometheus-headless-services-6733bb93198c76f4.yaml new file mode 100644 index 00000000000000..9851bd5f015342 --- /dev/null +++ b/releasenotes/notes/ignore-prometheus-headless-services-6733bb93198c76f4.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +fixes: + - | + The Openmetrics check is no longer scheduled for Kubernetes headless services. diff --git a/releasenotes/notes/improve-ecs-fargate-hostname-detection-0a468e1c3a53b3df.yaml b/releasenotes/notes/improve-ecs-fargate-hostname-detection-0a468e1c3a53b3df.yaml new file mode 100644 index 00000000000000..0343ca27ecd72a --- /dev/null +++ b/releasenotes/notes/improve-ecs-fargate-hostname-detection-0a468e1c3a53b3df.yaml @@ -0,0 +1,12 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +fixes: + - | + The agent no longer wrongly resolves its hostname on ECS Fargate when + requests to the Fargate API timeout. diff --git a/releasenotes/notes/process-agent-dynamic-profiling-0aece4cec9ca7526.yaml b/releasenotes/notes/process-agent-dynamic-profiling-0aece4cec9ca7526.yaml new file mode 100644 index 00000000000000..3742c7bd5f7602 --- /dev/null +++ b/releasenotes/notes/process-agent-dynamic-profiling-0aece4cec9ca7526.yaml @@ -0,0 +1,3 @@ +--- +enhancements: + - Allows profiling for the Process Agent to be dynamically enabled from the CLI with `process-agent config set internal_profiling`. Optionally, once profiling is enabled, block, mutex, and goroutine profiling can also be enabled with `process-agent config set runtime_block_profile_rate`, `process-agent config set runtime_mutex_profile_fraction`, and `process-agent config set internal_profiling_goroutines`. diff --git a/releasenotes/notes/pymem-telemetry-0f62acb520d80a1f.yaml b/releasenotes/notes/pymem-telemetry-0f62acb520d80a1f.yaml new file mode 100644 index 00000000000000..7f7b1792f24c5e --- /dev/null +++ b/releasenotes/notes/pymem-telemetry-0f62acb520d80a1f.yaml @@ -0,0 +1,2 @@ +enhancements: + - Added new telemetry metrics (``pymem.*``) to track Python heap usage. diff --git a/releasenotes/notes/remove-cca-in-ad-config-4a8bd6e0816b8656.yaml b/releasenotes/notes/remove-cca-in-ad-config-4a8bd6e0816b8656.yaml new file mode 100644 index 00000000000000..80d983ee8cd5bd --- /dev/null +++ b/releasenotes/notes/remove-cca-in-ad-config-4a8bd6e0816b8656.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +other: + - | + The ``logs_config.cca_in_ad`` has been removed. diff --git a/releasenotes/notes/remove-sending-API-keys-as-params-1cec05cf38b99b71.yaml b/releasenotes/notes/remove-sending-API-keys-as-params-1cec05cf38b99b71.yaml new file mode 100644 index 00000000000000..ebfef971f22934 --- /dev/null +++ b/releasenotes/notes/remove-sending-API-keys-as-params-1cec05cf38b99b71.yaml @@ -0,0 +1,8 @@ +--- +security: + - | + Some HTTP requests sent by the Datadog Agent to Datadog endpoints were including the Datadog API key in the query parameters (in the URL). + This meant that the keys could potentially have been logged in various locations, for example, in a forward or a reverse proxy server logs the Agent connected to. + We have updated all requests to not send the API key as a query parameter. + Anyone who uses a proxy to connect the Agent to Datadog endpoints should make sure their proxy forwards all Datadog headers (patricularly ``DD-Api-Key``). + Failure to not send all Datadog headers could cause payloads to be rejected by our endpoints. diff --git a/releasenotes/notes/require-admin-for-ddtray-5a087c08fc8d2f4c.yaml b/releasenotes/notes/require-admin-for-ddtray-5a087c08fc8d2f4c.yaml new file mode 100644 index 00000000000000..45f7e02f548340 --- /dev/null +++ b/releasenotes/notes/require-admin-for-ddtray-5a087c08fc8d2f4c.yaml @@ -0,0 +1,4 @@ +--- +other: + - | + The Datadog Agent Manager ``ddtray.exe`` now requires admin to launch. diff --git a/releasenotes/notes/sbom-01e923031b7d118b.yaml b/releasenotes/notes/sbom-01e923031b7d118b.yaml new file mode 100644 index 00000000000000..6b5be8a38e6373 --- /dev/null +++ b/releasenotes/notes/sbom-01e923031b7d118b.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +features: + - | + Add a new ``sbom`` core check to collect the software bill of materials of containers. diff --git a/releasenotes/notes/snmp_add_ip_addresses_to_ndm_metadata_interfaces-ff310a683f997bc1.yaml b/releasenotes/notes/snmp_add_ip_addresses_to_ndm_metadata_interfaces-ff310a683f997bc1.yaml new file mode 100644 index 00000000000000..a3e704b96c39d5 --- /dev/null +++ b/releasenotes/notes/snmp_add_ip_addresses_to_ndm_metadata_interfaces-ff310a683f997bc1.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - | + [corechecks/snmp] Add IP Addresses to NDM Metadata interfaces diff --git a/releasenotes/notes/snmp_lldp_remote_device_ip-07aedf702830c8a5.yaml b/releasenotes/notes/snmp_lldp_remote_device_ip-07aedf702830c8a5.yaml new file mode 100644 index 00000000000000..cb633b75473bfa --- /dev/null +++ b/releasenotes/notes/snmp_lldp_remote_device_ip-07aedf702830c8a5.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - | + [corechecks/snmp] Add LLDP remote device IP address. diff --git a/releasenotes/notes/tag_by_endpoint-support-in-prometheusScrape-47d13a051221057d.yaml b/releasenotes/notes/tag_by_endpoint-support-in-prometheusScrape-47d13a051221057d.yaml new file mode 100644 index 00000000000000..5553afadfe532f --- /dev/null +++ b/releasenotes/notes/tag_by_endpoint-support-in-prometheusScrape-47d13a051221057d.yaml @@ -0,0 +1,3 @@ +enhancements: + - | + prometheus_scrape: Adds support for `tag_by_endpoint` and `collect_counters_with_distributions` in the `prometheus_scrape.checks[].configurations[]` items. diff --git a/releasenotes/notes/update-python-3-8-16-63368caf05939bfa.yaml b/releasenotes/notes/update-python-3-8-16-63368caf05939bfa.yaml new file mode 100644 index 00000000000000..1cea9b499f3e29 --- /dev/null +++ b/releasenotes/notes/update-python-3-8-16-63368caf05939bfa.yaml @@ -0,0 +1,4 @@ +--- +other: + - | + Bump embedded Python3 to `3.8.16`. diff --git a/releasenotes/notes/update-sql-obfuscator-d34b610e911bbc0f.yaml b/releasenotes/notes/update-sql-obfuscator-d34b610e911bbc0f.yaml deleted file mode 100644 index 4f67d611869cde..00000000000000 --- a/releasenotes/notes/update-sql-obfuscator-d34b610e911bbc0f.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# Each section from every release note are combined when the -# CHANGELOG.rst is rendered. So the text needs to be worded so that -# it does not depend on any information only available in another -# section. This may mean repeating some details, but each section -# must be readable independently of the other. -# -# Each section note must be formatted as reStructuredText. ---- -enhancements: - - | - APM: Major update to the SQL obfuscator. SQL queries should now be - much more representative of the original query that they came from. - The two major changes are: - - The SQL obfuscator now preserves certain whitespace around - identifiers. For example, what was previously - 'select [ user ] . [ name ] from [ users ] ;' - is now - 'select [user].[name] from [users];' - - The SQL obfuscator now preserves quotes around identifiers. For - example, - 'select `user` where id = 42;' - used to be obfuscated as - 'select user where id = ?;' - The output is now - 'select `user` where id = ?;'. - - Users may need to update any monitoring or metrics queries based on - specific SQL queries, as they may be affected by this change. - Specifically, monitors or metrics based on the resource name of a SQL - span may need to be updated for the new query. diff --git a/releasenotes/notes/use-dmi-for-ec2-instance-id-47eb7188442b3cf1.yaml b/releasenotes/notes/use-dmi-for-ec2-instance-id-47eb7188442b3cf1.yaml new file mode 100644 index 00000000000000..73781f1ae60324 --- /dev/null +++ b/releasenotes/notes/use-dmi-for-ec2-instance-id-47eb7188442b3cf1.yaml @@ -0,0 +1,5 @@ +features: + - | + The Agent now leverages DMI information on Unix to get the instance ID on AWS EC2 when the metadata endpoint fails or + is not accessible. The instance ID is exposed throught DMI only on AWS Nitro instances. + This will not change the hostname of the Agent upon upgrading, but will add to the list of host aliases. diff --git a/releasenotes/notes/v0.68.0-otel-f1571b993848d654.yaml b/releasenotes/notes/v0.68.0-otel-f1571b993848d654.yaml new file mode 100644 index 00000000000000..17a3c743d25884 --- /dev/null +++ b/releasenotes/notes/v0.68.0-otel-f1571b993848d654.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - | + The OTLP ingest endpoint now supports the same settings and protocols as the OpenTelemetry Collector OTLP receiver v0.68.0. diff --git a/rtloader/include/datadog_agent_rtloader.h b/rtloader/include/datadog_agent_rtloader.h index 35957ca2801bbb..dc3da630e38cb0 100644 --- a/rtloader/include/datadog_agent_rtloader.h +++ b/rtloader/include/datadog_agent_rtloader.h @@ -621,6 +621,19 @@ DATADOG_AGENT_RTLOADER_API void set_obfuscate_sql_exec_plan_cb(rtloader_t *, cb_ */ DATADOG_AGENT_RTLOADER_API void set_get_process_start_time_cb(rtloader_t *, cb_get_process_start_time_t); +/*! \fn void init_pymem_stats(rtloader_t *) + \brief Install python allocator hooks. + \param rtloader A pointer to the RtLoader instance. +*/ +DATADOG_AGENT_RTLOADER_API void init_pymem_stats(rtloader_t *); + +/*! \fn void get_pymem_stats(rtloader_t *, pymem_stats_t *) + \brief Retrieve a snapshot of python allocated memory statistics. + \param rtloader A pointer to the RtLoader instance. + \param stats A pointer to pymem_stats_t structure that will be updated with the new values. +*/ +DATADOG_AGENT_RTLOADER_API void get_pymem_stats(rtloader_t *, pymem_stats_t *); + #ifdef __cplusplus } #endif diff --git a/rtloader/include/rtloader.h b/rtloader/include/rtloader.h index d146a3b87b4d32..2e478408ec3100 100644 --- a/rtloader/include/rtloader.h +++ b/rtloader/include/rtloader.h @@ -6,7 +6,6 @@ #ifndef DATADOG_AGENT_RTLOADER_RTLOADER_H #define DATADOG_AGENT_RTLOADER_RTLOADER_H -#include "rtloader_mem.h" #include "rtloader_types.h" #include @@ -33,12 +32,7 @@ class RtLoader { public: //! Constructor. - RtLoader(cb_memory_tracker_t memtrack_cb) - : _error() - , _errorFlag(false) - { - _set_memory_tracker_cb(memtrack_cb); - }; + RtLoader(cb_memory_tracker_t memtrack_cb); //! Destructor. virtual ~RtLoader(){}; @@ -450,6 +444,24 @@ class RtLoader */ virtual void setGetProcessStartTimeCb(cb_get_process_start_time_t) = 0; + //! initPymemStats member. + /*! + Install python allocator hooks. + */ + virtual void initPymemStats() + { + } + + //! getPymemStats member. + /*! + \param stats Stats snapshot output. + + Retrieve a snapshot python allocator statistics. + */ + virtual void getPymemStats(pymem_stats_t &stats) + { + } + private: mutable std::string _error; /*!< string containing a RtLoader error */ mutable bool _errorFlag; /*!< boolean indicating whether an error was set on RtLoader */ diff --git a/rtloader/include/rtloader_types.h b/rtloader/include/rtloader_types.h index e2c75679f19f80..681afbba54840f 100644 --- a/rtloader/include/rtloader_types.h +++ b/rtloader/include/rtloader_types.h @@ -86,6 +86,10 @@ typedef enum { DATADOG_AGENT_CRITICAL = 50 } log_level_t; +typedef struct pymem_stats_s { + size_t inuse, alloc; +} pymem_stats_t; + /* * custom builtins */ diff --git a/rtloader/rtloader/api.cpp b/rtloader/rtloader/api.cpp index 04de8542760305..af5fe74b5972b9 100644 --- a/rtloader/rtloader/api.cpp +++ b/rtloader/rtloader/api.cpp @@ -600,3 +600,19 @@ void set_is_excluded_cb(rtloader_t *rtloader, cb_is_excluded_t cb) { AS_TYPE(RtLoader, rtloader)->setIsExcludedCb(cb); } + +/* + * python allocator stats API + */ +void init_pymem_stats(rtloader_t *rtloader) +{ + AS_TYPE(RtLoader, rtloader)->initPymemStats(); +} + +void get_pymem_stats(rtloader_t *rtloader, pymem_stats_t *stats) +{ + if (stats == NULL) { + return; + } + AS_TYPE(RtLoader, rtloader)->getPymemStats(*stats); +} diff --git a/rtloader/rtloader/rtloader.cpp b/rtloader/rtloader/rtloader.cpp index 6b5b5f448ce41f..e0d083abb14031 100644 --- a/rtloader/rtloader/rtloader.cpp +++ b/rtloader/rtloader/rtloader.cpp @@ -7,6 +7,13 @@ #include "rtloader.h" #include "rtloader_mem.h" +RtLoader::RtLoader(cb_memory_tracker_t memtrack_cb) + : _error() + , _errorFlag(false) +{ + _set_memory_tracker_cb(memtrack_cb); +}; + void RtLoader::setError(const std::string &msg) const { _errorFlag = true; diff --git a/rtloader/three/CMakeLists.txt b/rtloader/three/CMakeLists.txt index 1a26bd29f5beb3..93822e6904b42a 100644 --- a/rtloader/three/CMakeLists.txt +++ b/rtloader/three/CMakeLists.txt @@ -36,6 +36,7 @@ configure_file(constants.h.in constants.h) include_directories(${CMAKE_CURRENT_BINARY_DIR}) add_library(datadog-agent-three SHARED three.cpp + three_mem.cpp ../common/cgo_free.c ../common/stringutils.c ../common/log.c diff --git a/rtloader/three/three.cpp b/rtloader/three/three.cpp index 0e98281a5e4c8a..463a28e13aa5af 100644 --- a/rtloader/three/three.cpp +++ b/rtloader/three/three.cpp @@ -38,6 +38,9 @@ Three::Three(const char *python_home, const char *python_exe, cb_memory_tracker_ , _pythonExe(NULL) , _baseClass(NULL) , _pythonPaths() + , _pymallocPrev{ 0 } + , _pymemInuse(0) + , _pymemAlloc(0) { initPythonHome(python_home); diff --git a/rtloader/three/three.h b/rtloader/three/three.h index e36648b09a02e7..ee30868afa2379 100644 --- a/rtloader/three/three.h +++ b/rtloader/three/three.h @@ -13,6 +13,7 @@ # error "DATADOG_AGENT_TWO and DATADOG_AGENT_THREE are mutually exclusive - define only one of the two." #endif +#include #include #include #include @@ -110,6 +111,9 @@ class Three : public RtLoader void setObfuscateSqlExecPlanCb(cb_obfuscate_sql_exec_plan_t); void setGetProcessStartTimeCb(cb_get_process_start_time_t); + void initPymemStats(); + void getPymemStats(pymem_stats_t &); + // _util API virtual void setSubprocessOutputCb(cb_get_subprocess_output_t); @@ -185,6 +189,98 @@ class Three : public RtLoader PyObject *_baseClass; /*!< PyObject * pointer to the base Agent check class */ PyPaths _pythonPaths; /*!< string vector containing paths in the PYTHONPATH */ PyThreadState *_threadState; /*!< PyThreadState * pointer to the saved Python interpreter thread state */ + + //! pymallocAlloc member. + /*! + \return Pointer value returned by _pymallocPrev.alloc. + + This member function calls _pymallocPrev.alloc and updates allocation statistics if the + allocation was successful. + */ + void *pymallocAlloc(size_t size); + + //! pymallocFree member. + /*! + \brief This member function calls _pymallocPrev.free and updates allocation statistics. + */ + void pymallocFree(void *ptr, size_t size); + + //! pymallocAllocCb static member. + /*! + \brief Static trampoline function for pymallocAlloc to comply with the PyObjectArenaAllocator API. + */ + static void *pymallocAllocCb(void *ctx, size_t size); + + //! pymallocFreeCb static member. + /*! + \brief Static trampoline function for pymallocFree to comply with the PyObjectArenaAllocator API. + */ + static void pymallocFreeCb(void *ctx, void *ptr, size_t size); + + //! pyrawTrackAlloc member. + /*! + \brief Update allocation stats after a call to pyraw alloc functions. + \param ptr Pointer to the allocation. May be null. + */ + void pyrawTrackAlloc(void *ptr); + + //! pyrawTrackFree member. + /*! + \brief Update allocation stats after a call to pyrawFree. + \param ptr Pointer to the allocation. May be null. + */ + void pyrawTrackFree(void *ptr); + + //! pyrawMalloc member. + /*! + \brief Implements PyMemAllocatorEx.malloc. + */ + void *pyrawMalloc(size_t size); + + //! pyrawCalloc member. + /*! + \brief Implements PyMemAllocatorEx.calloc. + */ + void *pyrawCalloc(size_t nelem, size_t elsize); + + //! pyrawRealloc member. + /*! + \brief Implements PyMemAllocatorEx.realloc. + */ + void *pyrawRealloc(void *ptr, size_t new_size); + //! pyrawFree member. + /*! + \brief Implements PyMemAllocatorEx.free. + */ + void pyrawFree(void *ptr); + + //! pyrawMallocCb static member. + /*! + \brief Trampoline function for pyrawMalloc to comply with the PyMemAllocatorEx API. + */ + static void *pyrawMallocCb(void *ctx, size_t size); + + //! pyrawCallocCb static member. + /*! + \brief Trampoline function for pyrawCalloc to comply with the PyMemAllocatorEx API. + */ + static void *pyrawCallocCb(void *ctx, size_t nelem, size_t elsize); + + //! pyrawReallocCb static member. + /*! + \brief Trampoline function for pyrawRealloc to comply with the PyMemAllocatorEx API. + */ + static void *pyrawReallocCb(void *ctx, void *ptr, size_t new_size); + + //! pyrawFreeCb static member. + /*! + \brief Trampoline function for pyrawFree to comply with the PyMemAllocatorEx API. + */ + static void pyrawFreeCb(void *ctx, void *ptr); + + PyObjectArenaAllocator _pymallocPrev; //!< Previous value of the global python arena allocator backend. + std::atomic_size_t _pymemInuse; //!< Number of bytes currently allocated. + std::atomic_size_t _pymemAlloc; //!< Total number of bytes allocated since the start of the process. }; #endif diff --git a/rtloader/three/three_mem.cpp b/rtloader/three/three_mem.cpp new file mode 100644 index 00000000000000..53245f5cb24fe9 --- /dev/null +++ b/rtloader/three/three_mem.cpp @@ -0,0 +1,185 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog +// (https://www.datadoghq.com/). +// Copyright 2019-present Datadog, Inc. + +// Tracking allocations in Python interpreter. +// +// See https://docs.python.org/3/c-api/memory.html#customize-memory-allocators [1] +// +// Python allocates memory using two mechanisms: pymalloc for small, +// short lived allocations, which constitute the bulk of memory usage, +// and RAW allocator for larger chunks of memory. We don't track two +// types of allocations separately, as the distinction exists largely +// inside Python implementation, out of reach for both users and +// module authors. + +#include "three.h" + +#if __linux__ || _WIN32 +# include +#elif __APPLE__ || __FreeBSD__ +# include +#endif + +void Three::initPymemStats() +{ + PyObject_GetArenaAllocator(&_pymallocPrev); + PyObjectArenaAllocator alloc{ + .ctx = static_cast(this), + .alloc = Three::pymallocAllocCb, + .free = Three::pymallocFreeCb, + }; + PyObject_SetArenaAllocator(&alloc); + + PyMemAllocatorEx alloc_raw{ + .ctx = static_cast(this), + .malloc = Three::pyrawMallocCb, + .calloc = Three::pyrawCallocCb, + .realloc = Three::pyrawReallocCb, + .free = Three::pyrawFreeCb, + }; + PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &alloc_raw); +} + +void Three::getPymemStats(pymem_stats_t &s) +{ + s.inuse = _pymemInuse; + s.alloc = _pymemAlloc; +} + +// Tracking allocations by Pymalloc. Pymalloc is the optimized +// allocator used for small-sized allocations in OBJ and MEM +// domains. These functions track the amount of memory requested by the +// allocator from the OS, not how much is actually used by currently +// reachable python objects (IOW, pymalloc keeps some unused memory +// around internally to speed up allocations). +void *Three::pymallocAlloc(size_t size) +{ + void *ptr = _pymallocPrev.alloc(_pymallocPrev.ctx, size); + if (ptr != NULL) { + _pymemInuse += size; + _pymemAlloc += size; + } + return ptr; +} + +void Three::pymallocFree(void *ptr, size_t size) +{ + _pymallocPrev.free(_pymallocPrev.ctx, ptr, size); + _pymemInuse -= size; +} + +void *Three::pymallocAllocCb(void *ctx, size_t size) +{ + return static_cast(ctx)->pymallocAlloc(size); +} + +void Three::pymallocFreeCb(void *ctx, void *ptr, size_t size) +{ + static_cast(ctx)->pymallocFree(ptr, size); +} + +// Tracking allocations in RAW python domain. This avoids the need to +// track individual pointers by using non-standard functions present +// on all supported platforms that return allocation size for a given +// pointer (see pyrawAllocSize). +// +// This explicitly calls the C allocator instead of adding layer on +// top of the built-in python allocator, to be sure that our pointers +// come from malloc and not some other kind of allocator, and are +// compatible with malloc_usable_size. + +static size_t pyrawAllocSize(void *ptr) +{ +#if __linux__ + return ::malloc_usable_size(ptr); +#elif _WIN32 + return ::_msize(ptr); +#elif __APPLE__ || __FreeBSD__ + return ::malloc_size(ptr); +#else + return 0; +#endif +} + +void Three::pyrawTrackAlloc(void *ptr) +{ + if (ptr == NULL) { + return; + } + size_t size = pyrawAllocSize(ptr); + _pymemInuse += size; + _pymemAlloc += size; +} + +void Three::pyrawTrackFree(void *ptr) +{ + if (ptr == NULL) { + return; + } + size_t size = pyrawAllocSize(ptr); + _pymemInuse -= size; +} + +void *Three::pyrawMalloc(size_t size) +{ + // Required by Python, see [1] + if (size == 0) { + size = 1; + } + void *ptr = ::malloc(size); + pyrawTrackAlloc(ptr); + return ptr; +} + +void *Three::pyrawCalloc(size_t nelem, size_t elsize) +{ + // Required by Python, see [1] + if (nelem == 0 || elsize == 0) { + nelem = 1; + elsize = 1; + } + void *ptr = ::calloc(nelem, elsize); + pyrawTrackAlloc(ptr); + return ptr; +} + +void *Three::pyrawRealloc(void *ptr, size_t size) +{ + // Required by Python, see [1] + if (size == 0) { + size = 1; + } + pyrawTrackFree(ptr); + ptr = ::realloc(ptr, size); + pyrawTrackAlloc(ptr); + return ptr; +} + +void Three::pyrawFree(void *ptr) +{ + pyrawTrackFree(ptr); + ::free(ptr); +} + +void *Three::pyrawMallocCb(void *ctx, size_t size) +{ + return static_cast(ctx)->pyrawMalloc(size); +} + +void *Three::pyrawCallocCb(void *ctx, size_t nelem, size_t elsize) +{ + return static_cast(ctx)->pyrawCalloc(nelem, elsize); +} + +void *Three::pyrawReallocCb(void *ctx, void *ptr, size_t new_size) +{ + return static_cast(ctx)->pyrawRealloc(ptr, new_size); +} + +void Three::pyrawFreeCb(void *ctx, void *ptr) +{ + static_cast(ctx)->pyrawFree(ptr); +} diff --git a/tasks/__init__.py b/tasks/__init__.py index ba5525c8946247..ebf7c716fe56d1 100644 --- a/tasks/__init__.py +++ b/tasks/__init__.py @@ -49,6 +49,7 @@ install_shellcheck, install_tools, integration_tests, + junit_macos_repack, junit_upload, lint_copyrights, lint_filenames, @@ -92,6 +93,7 @@ ns.add_task(check_go_version) ns.add_task(generate_config) ns.add_task(junit_upload) +ns.add_task(junit_macos_repack) ns.add_task(fuzz) # add namespaced tasks to the root diff --git a/tasks/agent.py b/tasks/agent.py index d899c62b69eed1..5d15428dd18a55 100644 --- a/tasks/agent.py +++ b/tasks/agent.py @@ -365,6 +365,7 @@ def get_omnibus_env( nikos_path=None, go_mod_cache=None, flavor=AgentFlavor.base, + pip_config_file="pip.conf", ): env = load_release_versions(ctx, release_version) @@ -401,6 +402,11 @@ def get_omnibus_env( ) env['MAJOR_VERSION'] = major_version env['PY_RUNTIMES'] = python_runtimes + + # Since omnibus and the invoke task won't run in the same folder + # we need to input the absolute path of the pip config file + env['PIP_CONFIG_FILE'] = os.path.abspath(pip_config_file) + if system_probe_bin: env['SYSTEM_PROBE_BIN'] = system_probe_bin if nikos_path: @@ -480,6 +486,8 @@ def omnibus_build( system_probe_bin=None, nikos_path=None, go_mod_cache=None, + python_mirror=None, + pip_config_file="pip.conf", ): """ Build the Agent packages with Omnibus Installer. @@ -513,6 +521,7 @@ def omnibus_build( nikos_path=nikos_path, go_mod_cache=go_mod_cache, flavor=flavor, + pip_config_file=pip_config_file, ) target_project = "agent" @@ -521,6 +530,16 @@ def omnibus_build( elif agent_binaries: target_project = "agent-binaries" + # Get the python_mirror from the PIP_INDEX_URL environment variable if it is not passed in the args + python_mirror = python_mirror or os.environ.get("PIP_INDEX_URL") + + # If a python_mirror is set then use it for pip by adding it in the pip.conf file + pip_index_url = f"[global]\nindex-url = {python_mirror}" if python_mirror else "" + + # We're passing the --index-url arg through a pip.conf file so that omnibus doesn't leak the token + with open(pip_config_file, 'w') as f: + f.write(pip_index_url) + bundle_start = datetime.datetime.now() bundle_install_omnibus(ctx, gem_path, env) bundle_done = datetime.datetime.now() @@ -539,6 +558,9 @@ def omnibus_build( omnibus_done = datetime.datetime.now() omnibus_elapsed = omnibus_done - omnibus_start + # Delete the temporary pip.conf file once the build is done + os.remove(pip_config_file) + print("Build component timing:") if not skip_deps: print(f"Deps: {deps_elapsed}") diff --git a/tasks/build_tags.py b/tasks/build_tags.py index 0a892e6934f674..599f0b19f1c225 100644 --- a/tasks/build_tags.py +++ b/tasks/build_tags.py @@ -41,6 +41,7 @@ "systemd", "zk", "zlib", + "test", # used for unit-tests } ### Tag inclusion lists @@ -136,6 +137,9 @@ # List of tags to always remove when building on Windows 32-bits WINDOWS_32BIT_EXCLUDE_TAGS = {"docker", "kubeapiserver", "kubelet", "orchestrator"} +# Unit test build tags +UNIT_TEST_TAGS = {"test"} + # Build type: maps flavor to build tags map build_tags = { AgentFlavor.base: { @@ -150,22 +154,26 @@ "trace-agent": TRACE_AGENT_TAGS, # Test setups "test": AGENT_TEST_TAGS, - "unit-tests": AGENT_TEST_TAGS.union(PROCESS_AGENT_TAGS), + "lint": AGENT_TEST_TAGS.union(PROCESS_AGENT_TAGS), + "unit-tests": AGENT_TEST_TAGS.union(PROCESS_AGENT_TAGS).union(UNIT_TEST_TAGS), }, AgentFlavor.heroku: { "agent": AGENT_HEROKU_TAGS, "process-agent": PROCESS_AGENT_HEROKU_TAGS, "trace-agent": TRACE_AGENT_HEROKU_TAGS, - "unit-tests": AGENT_HEROKU_TAGS, + "lint": AGENT_HEROKU_TAGS, + "unit-tests": AGENT_HEROKU_TAGS.union(UNIT_TEST_TAGS), }, AgentFlavor.iot: { "agent": IOT_AGENT_TAGS, - "unit-tests": IOT_AGENT_TAGS, + "lint": IOT_AGENT_TAGS, + "unit-tests": IOT_AGENT_TAGS.union(UNIT_TEST_TAGS), }, AgentFlavor.dogstatsd: { "dogstatsd": DOGSTATSD_TAGS, "system-tests": AGENT_TAGS, - "unit-tests": DOGSTATSD_TAGS, + "lint": DOGSTATSD_TAGS, + "unit-tests": DOGSTATSD_TAGS.union(UNIT_TEST_TAGS), }, } diff --git a/tasks/libs/junit_upload.py b/tasks/libs/junit_upload.py index ac913bf22140d1..70afb897007057 100644 --- a/tasks/libs/junit_upload.py +++ b/tasks/libs/junit_upload.py @@ -182,3 +182,22 @@ def produce_junit_tar(files, result_path): job_url_info.size = job_url_file.getbuffer().nbytes job_url_file.seek(0) tgz.addfile(job_url_info, job_url_file) + + +def repack_macos_junit_tar(infile, outfile): + with tarfile.open(infile) as infp, tarfile.open(outfile, "w:gz") as outfp, tempfile.TemporaryDirectory() as tempd: + infp.extractall(tempd) + + # write the proper job url and job name + with open(os.path.join(tempd, JOB_URL_FILE_NAME), "w") as fp: + fp.write(os.environ.get("CI_JOB_URL", "")) + with open(os.path.join(tempd, TAGS_FILE_NAME)) as fp: + tags = fp.read() + job_name = os.environ.get("CI_JOB_NAME", "") + tags = tags.replace("ci.job.name:", f"ci.job.name:{job_name}") + with open(os.path.join(tempd, TAGS_FILE_NAME), "w") as fp: + fp.write(tags) + + # pack all files to a new tarball + for f in os.listdir(tempd): + outfp.add(os.path.join(tempd, f), arcname=f) diff --git a/tasks/libs/pipeline_data.py b/tasks/libs/pipeline_data.py index 8e74ae930d9c77..d691d547a46cce 100644 --- a/tasks/libs/pipeline_data.py +++ b/tasks/libs/pipeline_data.py @@ -67,7 +67,7 @@ def get_failed_jobs(project_name, pipeline_id): FailedJobReason.RUNNER, ), ( - re.compile(r'WARNING: Failed to pull image with policy "always":.*:.*\(.*\)'), + re.compile(r'WARNING: Failed to pull image with policy "always":.*\(.*\)'), FailedJobReason.RUNNER, ), # k8s Gitlab runner init failures diff --git a/tasks/libs/pipeline_notifications.py b/tasks/libs/pipeline_notifications.py index c5b4f5a2c57251..1fe005fc0e022b 100644 --- a/tasks/libs/pipeline_notifications.py +++ b/tasks/libs/pipeline_notifications.py @@ -25,7 +25,7 @@ "@DataDog/remote-config": "#remote-config-monitoring", "@DataDog/agent-all": "#datadog-agent-pipelines", "@DataDog/ebpf-platform": "#ebpf-platform", - "@DataDog/Networks": "#networks", + "@DataDog/Networks": "#network-performance-monitoring", "@DataDog/universal-service-monitoring": "#universal-service-monitoring", "@DataDog/windows-kernel-integrations": "#windows-kernel-integrations", "@DataDog/opentelemetry": "#opentelemetry-ops", diff --git a/tasks/modules.py b/tasks/modules.py index 13a86da4351554..53b6af962a36df 100644 --- a/tasks/modules.py +++ b/tasks/modules.py @@ -125,6 +125,7 @@ def dependency_path(self, agent_version): "test/e2e/containers/otlp_sender": GoModule( "test/e2e/containers/otlp_sender", condition=lambda: False, should_tag=False ), + "test/new-e2e": GoModule("test/new-e2e", condition=lambda: False, should_tag=False), "pkg/quantile": GoModule("pkg/quantile", independent=True), "pkg/obfuscate": GoModule("pkg/obfuscate", independent=True), "pkg/trace": GoModule("pkg/trace", independent=True), diff --git a/tasks/process_agent.py b/tasks/process_agent.py index d7d3f6eb93c619..0b8e107e0455d1 100644 --- a/tasks/process_agent.py +++ b/tasks/process_agent.py @@ -154,6 +154,7 @@ def gen_mocks(ctx): """ interfaces = { + "./cmd/process-agent": ["Submitter"], "./pkg/process/checks": ["Check", "CheckWithRealTime"], "./pkg/process/net": ["SysProbeUtil"], "./pkg/process/procutil": ["Probe"], diff --git a/tasks/security_agent.py b/tasks/security_agent.py index f7383ccfd896cf..39f9c04eed544a 100644 --- a/tasks/security_agent.py +++ b/tasks/security_agent.py @@ -18,7 +18,6 @@ CURRENT_ARCH, build_cws_object_files, check_for_ninja, - generate_runtime_files, ninja_define_ebpf_compiler, ninja_define_exe_compiler, ) @@ -33,7 +32,6 @@ get_go_version, get_gopath, get_version, - get_version_numeric_only, ) BIN_DIR = os.path.join(".", "bin") @@ -58,23 +56,6 @@ def build( """ ldflags, gcflags, env = get_build_flags(ctx, major_version=major_version, python_runtimes='3', static=static) - # generate windows resources - if sys.platform == 'win32': - windres_target = "pe-x86-64" - if arch == "x86": - env["GOARCH"] = "386" - windres_target = "pe-i386" - - ver = get_version_numeric_only(ctx, major_version=major_version) - maj_ver, min_ver, patch_ver = ver.split(".") - - ctx.run( - f"windmc --target {windres_target} -r cmd/security-agent/windows_resources cmd/security-agent/windows_resources/security-agent-msg.mc" - ) - ctx.run( - f"windres --define MAJ_VER={maj_ver} --define MIN_VER={min_ver} --define PATCH_VER={patch_ver} -i cmd/security-agent/windows_resources/security-agent.rc --target {windres_target} -O coff -o cmd/security-agent/rsrc.syso" - ) - # TODO use pkg/version for this main = "main." ld_vars = { @@ -174,7 +155,7 @@ def ninja_ebpf_probe_syscall_tester(nw, build_dir): rule="ebpfclang", variables={ "target": "-target bpf", - "flags": [f"-D__{uname_m}__", f"-isystem/usr/include/{uname_m}-linux-gnu"], + "flags": [f"-D__{uname_m}__", f"-isystem/usr/include/{uname_m}-linux-gnu", "-DBPF_NO_GLOBAL_DATA"], }, ) @@ -586,6 +567,31 @@ def cws_go_generate(ctx): ctx.run("go generate ./pkg/security/...") +@task +def generate_syscall_table(ctx): + def single_run(ctx, table_url, output_file, output_string_file, abis=None): + if abis: + abis = f"-abis {abis}" + ctx.run( + f"go run github.com/DataDog/datadog-agent/pkg/security/secl/model/syscall_table_generator -table-url {table_url} -output {output_file} -output-string {output_string_file} {abis}" + ) + + linux_version = "v6.1" + single_run( + ctx, + f"https://raw.githubusercontent.com/torvalds/linux/{linux_version}/arch/x86/entry/syscalls/syscall_64.tbl", + "pkg/security/secl/model/syscalls_linux_amd64.go", + "pkg/security/secl/model/syscalls_string_linux_amd64.go", + abis="common,64", + ) + single_run( + ctx, + f"https://raw.githubusercontent.com/torvalds/linux/{linux_version}/include/uapi/asm-generic/unistd.h", + "pkg/security/secl/model/syscalls_linux_arm64.go", + "pkg/security/secl/model/syscalls_string_linux_arm64.go", + ) + + @task def generate_btfhub_constants(ctx, archive_path, force_refresh=False): output_path = "./pkg/security/probe/constantfetch/btfhub/constants.json" @@ -674,7 +680,6 @@ def go_generate_check(ctx): [cws_go_generate], [generate_cws_documentation], [gen_mocks], - [generate_runtime_files], ] failing_tasks = [] @@ -727,3 +732,24 @@ def kitchen_prepare(ctx): ctx.run(f"mkdir -p {ebpf_runtime_dir}") ctx.run(f"cp {bytecode_build_dir}/runtime-security* {ebpf_bytecode_dir}") ctx.run(f"cp {bytecode_build_dir}/runtime/runtime-security* {ebpf_runtime_dir}") + + +@task +def run_ebpf_unit_tests(ctx, verbose=False, trace=False): + build_cws_object_files( + ctx, + major_version='7', + arch=CURRENT_ARCH, + kernel_release=None, + with_unit_test=True, + ) + + flags = '-tags ebpf_bindata' + if verbose: + flags += " -test.v" + + args = '-args' + if trace: + args += " -trace" + + ctx.run(f"go test {flags} ./pkg/security/ebpf/tests/... {args}") diff --git a/tasks/system_probe.py b/tasks/system_probe.py index 787c4f427fc27e..a6ac508d850951 100644 --- a/tasks/system_probe.py +++ b/tasks/system_probe.py @@ -5,6 +5,7 @@ import platform import re import shutil +import string import sys import tarfile import tempfile @@ -65,9 +66,9 @@ def ninja_define_windows_resources(ctx, nw, major_version): ) -def ninja_define_ebpf_compiler(nw, strip_object_files=False, kernel_release=None): +def ninja_define_ebpf_compiler(nw, strip_object_files=False, kernel_release=None, with_unit_test=False): nw.variable("target", "-emit-llvm") - nw.variable("ebpfflags", get_ebpf_build_flags()) + nw.variable("ebpfflags", get_ebpf_build_flags(with_unit_test)) nw.variable("kheaders", get_kernel_headers_flags(kernel_release)) nw.rule( @@ -211,7 +212,7 @@ def ninja_network_ebpf_programs(nw, build_dir, co_re_build_dir): network_flags = "-Ipkg/network/ebpf/c -g" network_co_re_flags = f"-I{network_co_re_dir}" - network_programs = ["dns", "offset-guess", "tracer", "http"] + network_programs = ["dns", "offset-guess", "tracer", "http", "usm_events_test"] network_co_re_programs = [] for prog in network_programs: @@ -228,7 +229,7 @@ def ninja_network_ebpf_programs(nw, build_dir, co_re_build_dir): def ninja_container_integrations_ebpf_programs(nw, co_re_build_dir): container_integrations_co_re_dir = os.path.join("pkg", "collector", "corechecks", "ebpf", "c", "runtime") container_integrations_co_re_flags = f"-I{container_integrations_co_re_dir}" - container_integrations_co_re_programs = ["oom-kill"] + container_integrations_co_re_programs = ["oom-kill", "tcp-queue-length"] for prog in container_integrations_co_re_programs: infile = os.path.join(container_integrations_co_re_dir, f"{prog}-kern.c") @@ -263,7 +264,6 @@ def ninja_runtime_compilation_files(nw): rule="headerincl", ) rc_outputs.extend([c_file, hash_file]) - nw.build(rule="phony", inputs=rc_outputs, outputs=["runtime-compilation"]) def ninja_cgo_type_files(nw, windows): @@ -296,7 +296,6 @@ def ninja_cgo_type_files(nw, windows): "pkg/network/ebpf/tuple_types.go": ["pkg/network/ebpf/c/tracer.h"], "pkg/network/ebpf/kprobe_types.go": [ "pkg/network/ebpf/c/tracer.h", - "pkg/network/ebpf/c/protocols/http2-defs.h", "pkg/network/ebpf/c/tcp_states.h", "pkg/network/ebpf/c/prebuilt/offset-guess.h", ], @@ -308,10 +307,14 @@ def ninja_cgo_type_files(nw, windows): "pkg/network/ebpf/c/protocols/tags-types.h", "pkg/network/ebpf/c/protocols/http-types.h", "pkg/network/ebpf/c/protocols/protocol-classification-defs.h", + "pkg/network/ebpf/c/protocols/http2-decoding-defs.h", ], "pkg/network/telemetry/telemetry_types.go": [ "pkg/ebpf/c/telemetry_types.h", ], + "pkg/network/protocols/events/types.go": [ + "pkg/network/ebpf/c/protocols/events-types.h", + ], } nw.rule( name="godefs", @@ -351,6 +354,7 @@ def ninja_generate( debug=False, strip_object_files=False, kernel_release=None, + with_unit_test=False, ): build_dir = os.path.join("pkg", "ebpf", "bytecode", "build") co_re_build_dir = os.path.join(build_dir, "co-re") @@ -369,7 +373,7 @@ def ninja_generate( nw.build(inputs=[in_path], outputs=[rcout], rule="windmc", variables={"rcdir": in_dir}) nw.build(inputs=[rcout], outputs=["cmd/system-probe/rsrc.syso"], rule="windres") else: - ninja_define_ebpf_compiler(nw, strip_object_files, kernel_release) + ninja_define_ebpf_compiler(nw, strip_object_files, kernel_release, with_unit_test) ninja_define_co_re_compiler(nw) ninja_network_ebpf_programs(nw, build_dir, co_re_build_dir) ninja_security_ebpf_programs(nw, build_dir, debug, kernel_release) @@ -395,6 +399,7 @@ def build( debug=False, strip_object_files=False, strip_binary=False, + with_unit_test=False, ): """ Build the system-probe @@ -407,6 +412,7 @@ def build( kernel_release=kernel_release, debug=debug, strip_object_files=strip_object_files, + with_unit_test=with_unit_test, ) build_sysprobe_binary( @@ -570,7 +576,7 @@ def chdir(dirname=None): @task -def kitchen_prepare(ctx, windows=is_windows, kernel_release=None): +def kitchen_prepare(ctx, windows=is_windows, kernel_release=None, ci=False): """ Compile test suite for kitchen """ @@ -645,6 +651,9 @@ def kitchen_prepare(ctx, windows=is_windows, kernel_release=None): if os.path.exists(cf): shutil.copy(cf, files_dir) + if not ci: + kitchen_prepare_btfs(ctx, files_dir) + ctx.run(f"go build -o {files_dir}/test2json -ldflags=\"-s -w\" cmd/test2json", env={"CGO_ENABLED": "0"}) @@ -888,7 +897,7 @@ def get_linux_header_dirs(kernel_release=None, minimal_kernel_release=None): return dirs -def get_ebpf_build_flags(): +def get_ebpf_build_flags(unit_test=False): flags = [] flags.extend( [ @@ -899,6 +908,8 @@ def get_ebpf_build_flags(): '-DCOMPILE_PREBUILT', ] ) + if unit_test: + flags.extend(['-D__BALOUM__']) flags.extend( [ '-Wno-unused-value', @@ -977,10 +988,13 @@ def run_ninja( kernel_release=None, debug=False, strip_object_files=False, + with_unit_test=False, ): check_for_ninja(ctx) nf_path = os.path.join(ctx.cwd, 'system-probe.ninja') - ninja_generate(ctx, nf_path, windows, major_version, arch, debug, strip_object_files, kernel_release) + ninja_generate( + ctx, nf_path, windows, major_version, arch, debug, strip_object_files, kernel_release, with_unit_test + ) explain_opt = "-d explain" if explain else "" if task: ctx.run(f"ninja {explain_opt} -f {nf_path} -t {task}") @@ -1037,6 +1051,7 @@ def build_object_files( kernel_release=None, debug=False, strip_object_files=False, + with_unit_test=False, ): build_dir = os.path.join("pkg", "ebpf", "bytecode", "build") @@ -1052,8 +1067,8 @@ def build_object_files( ctx.run("which llvm-strip") check_for_inline(ctx) - ctx.run(f"mkdir -p {build_dir}/runtime") - ctx.run(f"mkdir -p {build_dir}/co-re") + ctx.run(f"mkdir -p -m 0755 {build_dir}/runtime") + ctx.run(f"mkdir -p -m 0755 {build_dir}/co-re") run_ninja( ctx, @@ -1064,6 +1079,7 @@ def build_object_files( kernel_release=kernel_release, debug=debug, strip_object_files=strip_object_files, + with_unit_test=with_unit_test, ) if not windows: @@ -1071,10 +1087,17 @@ def build_object_files( ctx.run(f"{sudo} mkdir -p {EMBEDDED_SHARE_DIR}") ctx.run(f"{sudo} cp -R {build_dir}/* {EMBEDDED_SHARE_DIR}") ctx.run(f"{sudo} chown root:root -R {EMBEDDED_SHARE_DIR}") + ctx.run(f"{sudo} find {EMBEDDED_SHARE_DIR} ! -type d | {sudo} xargs chmod 0644") def build_cws_object_files( - ctx, major_version='7', arch=CURRENT_ARCH, kernel_release=None, debug=False, strip_object_files=False + ctx, + major_version='7', + arch=CURRENT_ARCH, + kernel_release=None, + debug=False, + strip_object_files=False, + with_unit_test=False, ): run_ninja( ctx, @@ -1084,12 +1107,13 @@ def build_cws_object_files( debug=debug, strip_object_files=strip_object_files, kernel_release=kernel_release, + with_unit_test=with_unit_test, ) @task -def object_files(ctx, kernel_release=None): - build_object_files(ctx, kernel_release=kernel_release) +def object_files(ctx, kernel_release=None, with_unit_test=False): + build_object_files(ctx, kernel_release=kernel_release, with_unit_test=with_unit_test) def clean_object_files( @@ -1107,11 +1131,6 @@ def clean_object_files( ) -# deprecated: this function is only kept to prevent breaking security-agent.go-generate-check -def generate_runtime_files(ctx): - run_ninja(ctx, explain=True, target="runtime-compilation") - - @task def generate_lookup_tables(ctx, windows=is_windows): if windows: @@ -1136,6 +1155,14 @@ def check_for_ninja(ctx): ctx.run("which ninja") +def is_bpftool_compatible(ctx): + try: + ctx.run("bpftool gen min_core_btf 2>&1 | grep -q \"'min_core_btf' needs at least 3 arguments, 0 found\"") + return True + except Exception: + return False + + @contextlib.contextmanager def tempdir(): """ @@ -1148,6 +1175,51 @@ def tempdir(): shutil.rmtree(dirpath) +def kitchen_prepare_btfs(ctx, files_dir, arch=CURRENT_ARCH): + btf_dir = "/opt/datadog-agent/embedded/share/system-probe/ebpf/co-re/btf" + + if arch == "x64": + arch = "x86_64" + elif arch == "arm64": + arch = "aarch64" + + if not os.path.exists(f"{btf_dir}/kitchen-btfs-{arch}.tar.xz"): + exit("BTFs for kitchen test environments not found. Please update & re-provision your dev VM.") + + sudo = "sudo" if not is_root() else "" + ctx.run(f"{sudo} chmod -R 0777 {btf_dir}") + + if not os.path.exists(f"{btf_dir}/kitchen-btfs-{arch}"): + ctx.run( + f"mkdir {btf_dir}/kitchen-btfs-{arch} && " + + f"tar xf {btf_dir}/kitchen-btfs-{arch}.tar.xz -C {btf_dir}/kitchen-btfs-{arch}" + ) + + can_minimize = True + if not is_bpftool_compatible(ctx): + print( + "Cannot minimize BTFs: bpftool version 6 or higher is required: preparing kitchen environment with full sized BTFs instead." + ) + can_minimize = False + + if can_minimize: + co_re_programs = " ".join(glob.glob("/opt/datadog-agent/embedded/share/system-probe/ebpf/co-re/*.o")) + generate_minimized_btfs( + ctx, + source_dir=f"{btf_dir}/kitchen-btfs-{arch}", + output_dir=f"{btf_dir}/minimized-btfs", + input_bpf_programs=co_re_programs, + ) + + ctx.run( + f"cd {btf_dir}/minimized-btfs && " + + "tar -cJf minimized-btfs.tar.xz * && " + + f"mv minimized-btfs.tar.xz {files_dir}" + ) + else: + ctx.run(f"cp {btf_dir}/kitchen-btfs-{arch}.tar.xz {files_dir}/minimized-btfs.tar.xz") + + @task def generate_minimized_btfs( ctx, @@ -1168,28 +1240,60 @@ def generate_minimized_btfs( return ctx.run(f"mkdir -p {output_dir}") - for root, dirs, files in os.walk(source_dir): - path_from_root = os.path.relpath(root, source_dir) - for dir in dirs: - output_subdir = os.path.join(output_dir, path_from_root, dir) - ctx.run(f"mkdir -p {output_subdir}") - - for file in files: - if not file.endswith(".tar.xz"): - continue - - btf_filename = file[: -len(".tar.xz")] - compressed_source_btf_path = os.path.join(root, file) - output_btf_path = os.path.join(output_dir, path_from_root, btf_filename) - compressed_output_btf_path = output_btf_path + ".tar.xz" - - ctx.run(f"tar -xf {compressed_source_btf_path}") - ctx.run(f"bpftool gen min_core_btf {btf_filename} {output_btf_path} {input_bpf_programs}") + check_for_ninja(ctx) - tar_working_directory = os.path.join(output_dir, path_from_root) - ctx.run(f"tar -C {tar_working_directory} -cJf {compressed_output_btf_path} {btf_filename}") - ctx.run(f"rm {output_btf_path}") + ninja_file_path = os.path.join(ctx.cwd, 'generate-minimized-btfs.ninja') + with open(ninja_file_path, 'w') as ninja_file: + nw = NinjaWriter(ninja_file, width=180) + + nw.rule(name="decompress_btf", command="tar -xf $in -C $target_directory") + nw.rule(name="minimize_btf", command="bpftool gen min_core_btf $in $out $input_bpf_programs") + nw.rule(name="compress_minimized_btf", command="tar -cJf $out -C $tar_working_directory $rel_in && rm $in") + + for root, dirs, files in os.walk(source_dir): + path_from_root = os.path.relpath(root, source_dir) + + for d in dirs: + output_subdir = os.path.join(output_dir, path_from_root, d) + ctx.run(f"mkdir -p {output_subdir}") + + for file in files: + if not file.endswith(".tar.xz"): + continue + + btf_filename = file[: -len(".tar.xz")] + minimized_btf_path = os.path.join(output_dir, path_from_root, btf_filename) + + nw.build( + rule="decompress_btf", + inputs=[os.path.join(root, file)], + outputs=[os.path.join(root, btf_filename)], + variables={ + "target_directory": root, + }, + ) + + nw.build( + rule="minimize_btf", + inputs=[os.path.join(root, btf_filename)], + outputs=[minimized_btf_path], + variables={ + "input_bpf_programs": input_bpf_programs, + }, + ) + + nw.build( + rule="compress_minimized_btf", + inputs=[minimized_btf_path], + outputs=[f"{minimized_btf_path}.tar.xz"], + variables={ + "tar_working_directory": os.path.join(output_dir, path_from_root), + "rel_in": btf_filename, + }, + ) + + ctx.run(f"ninja -f {ninja_file_path}") @task @@ -1218,3 +1322,28 @@ def print_failed_tests(_, output_dir): if fail_count > 0: raise Exit(code=1) + + +@task +def save_test_dockers(ctx, output_dir, arch, windows=is_windows): + import yaml + + if windows: + return + + docker_compose_paths = glob.glob("./pkg/network/protocols/*/testdata/docker-compose.yml") + # Add relative docker-compose paths + # For example: + # docker_compose_paths.append("./pkg/network/protocols/dockers/testdata/docker-compose.yml") + + images = set() + for docker_compose_path in docker_compose_paths: + with open(docker_compose_path, "r") as f: + docker_compose = yaml.safe_load(f.read()) + for component in docker_compose["services"]: + images.add(docker_compose["services"][component]["image"]) + + for image in images: + output_path = image.translate(str.maketrans('', '', string.punctuation)) + ctx.run(f"docker pull --platform linux/{arch} {image}") + ctx.run(f"docker save {image} > {os.path.join(output_dir, output_path)}.tar") diff --git a/tasks/systray.py b/tasks/systray.py index d1bd2bf57a5ee1..98c1d898014b72 100644 --- a/tasks/systray.py +++ b/tasks/systray.py @@ -16,7 +16,7 @@ @task -def build(ctx, rebuild=False, race=False, major_version='7', arch="x64", go_mod="mod"): +def build(ctx, debug=False, console=False, rebuild=False, race=False, major_version='7', arch="x64", go_mod="mod"): """ Build the agent. If the bits to include in the build are not specified, the values from `invoke.yaml` will be used. @@ -44,7 +44,14 @@ def build(ctx, rebuild=False, race=False, major_version='7', arch="x64", go_mod= command += "-i cmd/systray/systray.rc -O coff -o cmd/systray/rsrc.syso" ctx.run(command) ldflags = get_version_ldflags(ctx, major_version=major_version) - ldflags += "-s -w -linkmode external -extldflags '-Wl,--subsystem,windows' " + if not debug: + ldflags += "-s -w " + if console: + subsystem = 'console' + else: + subsystem = 'windows' + ldflags += f"-X {REPO_PATH}/cmd/systray/command/command.subsystem={subsystem} " + ldflags += f"-linkmode external -extldflags '-Wl,--subsystem,{subsystem}' " cmd = "go build -mod={go_mod} {race_opt} {build_type} -o {agent_bin} -ldflags=\"{ldflags}\" {REPO_PATH}/cmd/systray" args = { "go_mod": go_mod, @@ -68,7 +75,7 @@ def run(ctx, rebuild=False, race=False, skip_build=False): if not skip_build: build(ctx, rebuild, race) - ctx.run(os.path.join(BIN_PATH, bin_name("ddtray.exe"))) + ctx.run(os.path.join(BIN_PATH, bin_name("ddtray"))) @task @@ -82,4 +89,7 @@ def clean(ctx): # remove the bin/agent folder print("Remove systray executable") - ctx.run("rm -rf ./bin/agent/ddtray.exe") + try: + os.remove(os.path.join(BIN_PATH, bin_name("ddtray"))) + except Exception as e: + print(e) diff --git a/tasks/test.py b/tasks/test.py index 07ec92942cdbcb..25b448498b76d7 100644 --- a/tasks/test.py +++ b/tasks/test.py @@ -5,11 +5,13 @@ # Recent versions of Python should be able to use dict and list directly in type hints, # so we only need to check that we don't run this code with old Python versions. +import json import operator import os import platform import re import sys +from collections import defaultdict from contextlib import contextmanager from typing import Dict, List @@ -22,14 +24,15 @@ from .dogstatsd import integration_tests as dsd_integration_tests from .flavor import AgentFlavor from .go import golangci_lint +from .libs.common.color import color_message from .libs.copyright import CopyrightLinter -from .libs.junit_upload import add_flavor_to_junitxml, junit_upload_from_tgz, produce_junit_tar +from .libs.junit_upload import add_flavor_to_junitxml, junit_upload_from_tgz, produce_junit_tar, repack_macos_junit_tar from .modules import DEFAULT_MODULES, GoModule from .trace_agent import integration_tests as trace_integration_tests from .utils import DEFAULT_BRANCH, get_build_flags PROFILE_COV = "profile.cov" -GO_TEST_RESULT_TMP_JSON = 'tmp.json' +GO_TEST_RESULT_TMP_JSON = 'module_test_output.json' class TestProfiler: @@ -141,6 +144,18 @@ def lint_flavor( golangci_lint(ctx, targets=module.targets, rtloader_root=rtloader_root, build_tags=build_tags, arch=arch) +class ModuleTestResult: + def __init__(self, path): + # The full path of the module + self.path = path + # Whether the gotestsum command failed for that module + self.failed = False + # Path to the result.json file output by gotestsum (should always be present) + self.result_json_path = None + # Path to the junit file output by gotestsum (only present if specified in inv test) + self.junit_file_path = None + + def test_flavor( ctx, flavor: AgentFlavor, @@ -158,10 +173,9 @@ def test_flavor( """ print(f"--- Flavor {flavor.name}: unit tests") - failed_modules = [] - junit_files = [] + modules_test_results = [] - args["go_build_tags"] = " ".join(build_tags + ["test"]) + args["go_build_tags"] = " ".join(build_tags) junit_file_flag = "" junit_file = f"junit-out-{flavor.name}.xml" @@ -170,6 +184,8 @@ def test_flavor( args["junit_file_flag"] = junit_file_flag for module in modules: + module_test_result = ModuleTestResult(path=module.full_path()) + print(f"----- Module '{module.full_path()}'") if not module.condition(): print("----- Skipped") @@ -185,21 +201,24 @@ def test_flavor( warn=True, ) + module_test_result.result_json_path = os.path.join(module.full_path(), GO_TEST_RESULT_TMP_JSON) + if res.exited is None or res.exited > 0: - failed_modules.append(module.full_path()) + module_test_result.failed = True if save_result_json: with open(save_result_json, 'ab') as json_file, open( - os.path.join(module.full_path(), GO_TEST_RESULT_TMP_JSON), 'rb' + module_test_result.result_json_path, 'rb' ) as module_file: json_file.write(module_file.read()) if junit_tar: - junit_file_path = os.path.join(module.full_path(), junit_file) - add_flavor_to_junitxml(junit_file_path, flavor) - junit_files.append(junit_file_path) + module_test_result.junit_file_path = os.path.join(module.full_path(), junit_file) + add_flavor_to_junitxml(module_test_result.junit_file_path, flavor) + + modules_test_results.append(module_test_result) - return junit_files, failed_modules + return modules_test_results def coverage_flavor( @@ -327,7 +346,13 @@ def test( modules, flavors = process_input_args(module, targets, flavors) - flavors_build_tags = { + linter_tags = { + f: compute_build_tags_for_flavor( + flavor=f, build="lint", arch=arch, build_include=build_include, build_exclude=build_exclude + ) + for f in flavors + } + unit_tests_tags = { f: compute_build_tags_for_flavor( flavor=f, build="unit-tests", arch=arch, build_include=build_include, build_exclude=build_exclude ) @@ -341,7 +366,7 @@ def test( if skip_linters: print("--- [skipping Go linters]") else: - for flavor, build_tags in flavors_build_tags.items(): + for flavor, build_tags in linter_tags.items(): lint_flavor( ctx, modules=modules, flavor=flavor, build_tags=build_tags, arch=arch, rtloader_root=rtloader_root ) @@ -414,16 +439,15 @@ def test( "timeout": timeout, "verbose": '-v' if verbose else '', "nocache": nocache, - "json_flag": f'--jsonfile "{GO_TEST_RESULT_TMP_JSON}" ' if save_result_json else "", + # Used to print failed tests at the end of the go test command + "json_flag": f'--jsonfile "{GO_TEST_RESULT_TMP_JSON}" ', "rerun_fails": f"--rerun-fails={rerun_fails}" if rerun_fails else "", } # Test - - failed_modules = {} - junit_files = [] - for flavor, build_tags in flavors_build_tags.items(): - junit_files_for_flavor, failed_modules_for_flavor = test_flavor( + modules_test_results_per_flavor = {} + for flavor, build_tags in unit_tests_tags.items(): + modules_test_results_per_flavor[flavor] = test_flavor( ctx, flavor=flavor, build_tags=build_tags, @@ -436,33 +460,87 @@ def test( test_profiler=test_profiler, ) - if failed_modules_for_flavor: - failed_modules[flavor] = failed_modules_for_flavor - if junit_files_for_flavor: - junit_files.extend(junit_files_for_flavor) - # Output - if junit_tar: + junit_files = [] + for flavor in flavors: + for module_test_result in modules_test_results_per_flavor[flavor]: + if module_test_result.junit_file_path: + junit_files.append(module_test_result.junit_file_path) + produce_junit_tar(junit_files, junit_tar) if coverage and print_coverage: for flavor in flavors: coverage_flavor(ctx, flavor, modules) + # FIXME(AP-1958): this prints nothing in CI. Commenting out the print line + # in the meantime to avoid confusion if profile: - print("\n--- Top 15 packages sorted by run time:") + # print("\n--- Top 15 packages sorted by run time:") test_profiler.print_sorted(15) - if failed_modules: - failure_string = '\n'.join( - [ - f"{', '.join(failed_modules_for_flavor)} ({flavor.name} flavor)" - for flavor, failed_modules_for_flavor in failed_modules.items() - ] - ) + should_fail = False + for flavor in flavors: + for module_test_result in modules_test_results_per_flavor[flavor]: + if module_test_result.failed: + should_fail = True + failure_string = color_message( + f"Module {module_test_result.path} failed ({flavor.name} flavor)\n", "red" + ) + failed_packages = set() + failed_tests = defaultdict(set) + + # TODO(AP-1959): this logic is now repreated, with some variations, in three places: + # here, in system-probe.py, and in libs/pipeline_notifications.py + # We should have some common result.json parsing lib. + with open(module_test_result.result_json_path) as tf: + for line in tf: + json_test = json.loads(line.strip()) + # This logic assumes that the lines in result.json are "in order", i.e. that retries + # are logged after the initial test run. + + # The line is a "Package" line, but not a "Test" line. + # We take these into account, because in some cases (panics, race conditions), + # individual test failures are not reported, only a package-level failure is. + if 'Package' in json_test and 'Test' not in json_test: + package = json_test['Package'] + action = json_test["Action"] + + if action == "fail": + failed_packages.add(package) + elif action == "pass" and package in failed_tests.keys(): + # The package was retried and fully succeeded, removing from the list of packages to report + failed_packages.remove(package) + + # The line is a "Test" line. + elif 'Package' in json_test and 'Test' in json_test: + name = json_test['Test'] + package = json_test['Package'] + action = json_test["Action"] + if action == "fail": + failed_tests[package].add(name) + elif action == "pass" and name in failed_tests.get(package, set()): + # The test was retried and succeeded, removing from the list of tests to report + failed_tests[package].remove(name) + + if failed_packages: + failure_string += "Failed tests:\n" + for package in sorted(failed_packages): + tests = failed_tests.get(package, set()) + if not tests: + failure_string += f"- {package} package failed due to panic / race condition\n" + else: + for name in sorted(tests): + failure_string += f"- {package} {name}\n" + else: + failure_string += "The test command failed, but no test failures detected in the result json." + + print(failure_string) + + if should_fail: # Exit if any of the modules failed - raise Exit(code=1, message=f"Unit tests failed in the following modules:\n{failure_string}") + raise Exit(code=1) @task(iterable=['flavors']) @@ -731,3 +809,12 @@ def junit_upload(_, tgz_path): """ junit_upload_from_tgz(tgz_path) + + +@task +def junit_macos_repack(_, infile, outfile): + """ + Repacks JUnit tgz file from macOS Github Action run, so it would + containt correct job name and job URL. + """ + repack_macos_junit_tar(infile, outfile) diff --git a/tasks/vscode.py b/tasks/vscode.py index 6b17dbbda68012..e98676cf896b4b 100644 --- a/tasks/vscode.py +++ b/tasks/vscode.py @@ -14,6 +14,8 @@ VSCODE_DIR = ".vscode" VSCODE_FILE = "settings.json" +VSCODE_DEVCONTAINER_DIR = ".devcontainer" +VSCODE_DEVCONTAINER_FILE = "devcontainer.json" @task @@ -56,3 +58,73 @@ def set_buildtags( with open(fullpath, "w") as sf: json.dump(settings, sf, indent=4, sort_keys=False, separators=(',', ': ')) + + +@task +def setup_devcontainer( + _, + target="agent", + build_include=None, + build_exclude=None, + flavor=AgentFlavor.base.name, + arch='x64', + image='', +): + """ + Generate or Modify devcontainer settings file for this project. + """ + flavor = AgentFlavor[flavor] + if target not in build_tags[flavor].keys(): + print("Must choose a valid target. Valid targets are: \n") + print(f'{", ".join(build_tags[flavor].keys())} \n') + return + + build_include = ( + get_default_build_tags(build=target, arch=arch, flavor=flavor) + if build_include is None + else filter_incompatible_tags(build_include.split(","), arch=arch) + ) + build_exclude = [] if build_exclude is None else build_exclude.split(",") + use_tags = get_build_tags(build_include, build_exclude) + + if not os.path.exists(VSCODE_DEVCONTAINER_DIR): + os.makedirs(VSCODE_DEVCONTAINER_DIR) + + devcontainer = {} + fullpath = os.path.join(VSCODE_DEVCONTAINER_DIR, VSCODE_DEVCONTAINER_FILE) + if os.path.exists(fullpath): + with open(fullpath, "r") as sf: + devcontainer = json.load(sf, object_pairs_hook=OrderedDict) + + local_build_tags = ",".join(use_tags) + + devcontainer["name"] = "Datadog-Agent-DevEnv" + if image: + devcontainer["image"] = image + if devcontainer.get("build"): + del devcontainer["build"] + else: + devcontainer["build"] = { + "dockerfile": "Dockerfile", + "args": {}, + } + if devcontainer.get("image"): + del devcontainer["image"] + devcontainer["runArgs"] = ["--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined"] + devcontainer["remoteUser"] = "datadog" + devcontainer["customizations"] = { + "vscode": { + "settings": { + "go.toolsManagement.checkForUpdates": "local", + "go.useLanguageServer": True, + "go.gopath": "/home/datadog/go", + "go.goroot": "/usr/local/go", + "go.buildTags": local_build_tags, + "go.testTags": local_build_tags, + }, + "extensions": ["golang.Go"], + } + } + + with open(fullpath, "w") as sf: + json.dump(devcontainer, sf, indent=4, sort_keys=False, separators=(',', ': ')) diff --git a/tasks/winbuildscripts/Generate-Chocolatey-Package.ps1 b/tasks/winbuildscripts/Generate-Chocolatey-Package.ps1 index 58734ef89b971a..d8129b5dee969c 100644 --- a/tasks/winbuildscripts/Generate-Chocolatey-Package.ps1 +++ b/tasks/winbuildscripts/Generate-Chocolatey-Package.ps1 @@ -61,6 +61,10 @@ Invoke-WebRequest -Uri "https://raw.githubusercontent.com/DataDog/datadog-agent/ Write-Host "Generating Chocolatey $installMethod package version $agentVersion in $outputDirectory" +if ([System.Net.WebRequest]::Create($url).GetResponse().StatusCode -ne 200) { + Write-Error "Package $($url) doesn't exists, cannot continue publishing process." +} + if (!(Test-Path $outputDirectory)) { New-Item -ItemType Directory -Path $outputDirectory } @@ -71,3 +75,6 @@ if ($installMethod -eq "online") { } choco pack --out=$outputDirectory $nuspecFile package_version=$agentVersion release_notes=$releaseNotes copyright=$copyright + +# restore installScript (useful for local testing/deployment) +git checkout $installScript diff --git a/tasks/winbuildscripts/sysprobe.ps1 b/tasks/winbuildscripts/sysprobe.ps1 index 48859600d3f03d..b4cb461b228436 100644 --- a/tasks/winbuildscripts/sysprobe.ps1 +++ b/tasks/winbuildscripts/sysprobe.ps1 @@ -37,7 +37,7 @@ if ($err -ne 0) { [Environment]::Exit($err) } -& inv -e system-probe.kitchen-prepare +& inv -e system-probe.kitchen-prepare --ci $err = $LASTEXITCODE Write-Host Test result is $err diff --git a/test/benchmarks/apm_scripts/analyze-results.sh b/test/benchmarks/apm_scripts/analyze-results.sh new file mode 100755 index 00000000000000..d01799d7b017ed --- /dev/null +++ b/test/benchmarks/apm_scripts/analyze-results.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +ARTIFACTS_DIR="/artifacts/${CI_JOB_ID}" +REPORTS_DIR="$(pwd)/reports/" +mkdir "${REPORTS_DIR}" || : + +source /benchmark-analyzer/.venv/bin/activate +cd /benchmark-analyzer + +./benchmark_analyzer convert \ + --framework=GoBench \ + --outpath="pr.json" \ + --extra-params="{\"trace_agent\":\"${CI_COMMIT_REF_NAME}\"}" \ + "${ARTIFACTS_DIR}/pr_bench.txt" + +./benchmark_analyzer convert \ + --framework=GoBench \ + --outpath="main.json" \ + --extra-params="{\"trace_agent\":\"main\"}" \ + "${ARTIFACTS_DIR}/main_bench.txt" + +./benchmark_analyzer compare pairwise --outpath ${REPORTS_DIR}/report.md --format md-nodejs main.json pr.json +./benchmark_analyzer compare pairwise --outpath ${REPORTS_DIR}/report_full.html --format html main.json pr.json + diff --git a/test/benchmarks/apm_scripts/capture-hardware-software-info.sh b/test/benchmarks/apm_scripts/capture-hardware-software-info.sh new file mode 100755 index 00000000000000..b7db7081b4c13b --- /dev/null +++ b/test/benchmarks/apm_scripts/capture-hardware-software-info.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +REPORTS_DIR="$(pwd)/reports/" +mkdir "${REPORTS_DIR}" || : + +ARTIFACTS_DIR="/artifacts/${CI_JOB_ID}" +mkdir -p "${ARTIFACTS_DIR}" && cd "${ARTIFACTS_DIR}" + +# Collect software information + +(which top && top -b -n 1 > top.txt) || : +(which uname && uname -a > uname.txt) || : +(which ldconfig && ldconfig -v > ldconfig.txt) || : +(which sysctl && sysctl -a > sysctl.txt) || : + +# Collect hardware information + +(which lscpu && lscpu -e > lscpu-e.txt) || : +(which lscpu && lscpu > lscpu.txt) || : +(which hwinfo && hwinfo --short > hwinfo-short.txt) || : +(which hwinfo && hwinfo > hwinfo-full.txt) || : +#cpupower frequency-info > cpupower-frequency-info.txt +#turbostat -n 1 > turbostat.txt + +# Save all collected information to Gitlab reports as well + +cp * "${REPORTS_DIR}" diff --git a/test/benchmarks/apm_scripts/post-pr-comment.sh b/test/benchmarks/apm_scripts/post-pr-comment.sh new file mode 100755 index 00000000000000..07aeccdaa0c21b --- /dev/null +++ b/test/benchmarks/apm_scripts/post-pr-comment.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +REPORTS_DIR="$(pwd)/reports/" + +cat ${REPORTS_DIR}/report.md | /usr/local/bin/pr-commenter --for-repo="$CI_PROJECT_NAME" --for-pr="$CI_COMMIT_REF_NAME" --header="Benchmarks" diff --git a/test/benchmarks/apm_scripts/run-benchmarks.sh b/test/benchmarks/apm_scripts/run-benchmarks.sh new file mode 100755 index 00000000000000..66b8b9707d8aaf --- /dev/null +++ b/test/benchmarks/apm_scripts/run-benchmarks.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +ARTIFACTS_DIR="/artifacts/${CI_JOB_ID}" +mkdir -p "${ARTIFACTS_DIR}" + +inv trace-agent.benchmarks --output="${ARTIFACTS_DIR}/pr_bench.txt" --bench="BenchmarkAgentTraceProcessing$" + +git checkout main +inv trace-agent.benchmarks --output="${ARTIFACTS_DIR}/main_bench.txt" --bench="BenchmarkAgentTraceProcessing$" + +git checkout "${CI_COMMIT_REF_NAME}" # (Only needed while these changes aren't merged to main) diff --git a/test/benchmarks/apm_scripts/upload-results-to-s3.sh b/test/benchmarks/apm_scripts/upload-results-to-s3.sh new file mode 100755 index 00000000000000..e39eaa4ebc5677 --- /dev/null +++ b/test/benchmarks/apm_scripts/upload-results-to-s3.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +PROJECT="${CI_PROJECT_NAME:-$CI_PROJECT_NAME}" +BRANCH="${CI_COMMIT_REF_NAME:-$CI_COMMIT_REF_NAME}" + +S3_URL=s3://relenv-benchmarking-data/${PROJECT}/${BRANCH}/${CI_JOB_ID}/ + +aws s3 cp --recursive --acl bucket-owner-full-control /artifacts/${CI_JOB_ID}/ $S3_URL diff --git a/test/e2e/containers/fake_datadog/README.md b/test/e2e/containers/fake_datadog/README.md index 7efa619808784f..c04b70617966bb 100644 --- a/test/e2e/containers/fake_datadog/README.md +++ b/test/e2e/containers/fake_datadog/README.md @@ -178,6 +178,7 @@ db.series.aggregate([ This tool can be used as a debug proxy to inspect agent payloads. Here is how to do it for Kubernetes. +##### K8S - run the following from within this folder: ```console @@ -198,3 +199,42 @@ kubectl apply -f fake-datadog.yaml # if you deployed the service & deployment in a separate namespace, add `..svc.cluster.local value: "http://fake-datadog" ``` + +##### Docker + +1. Create a `agent-docker-compose-extra.yaml` file to override url and V2 series environment variables + +```yaml +services: + agent: # use your agent service name here + environment: + DD_DD_URL: "http://fake-datadog" + DD_USE_V2_API_SERIES: false +``` + +- `agent` is the docker service name used for Datadog Agent. Rename it if you are using another service id. +- `DD_DD_URL` overrides the URL for metric submission +- `DD_USE_V2_API_SERIES` force using v1 APIs + +1. Run `docker compose up` passing datadog agent compose, agent extra compose and fake datadog compose + +```bash +docker compose up -f "${PATH_TO_AGENT_COMPOSE}.yaml" -f "fake-datadog.yaml" -f "agent-docker-compose-extra.yaml" +``` + +1. Query `datadog` on `mongo` service, reachable from host at `localhost:27017` and from another container at `mongo:27017` + +##### VM + +1. Create `fake-datadog` compose + +```bash +docker compose up -f "fake-datadog.yaml" +``` + +1. Configure the agent to send requests to `fake-datadog` using `V1` endpoint passing following environment variables + +```txt +DD_DD_URL="http://fake-datadog" +DD_USE_V2_API_SERIES=false +``` diff --git a/test/e2e/containers/fake_datadog/docker-compose.yaml b/test/e2e/containers/fake_datadog/docker-compose.yaml new file mode 100644 index 00000000000000..eb4ff70532c8de --- /dev/null +++ b/test/e2e/containers/fake_datadog/docker-compose.yaml @@ -0,0 +1,13 @@ +version: "3.9" +services: + fake-datadog: + image: "datadog/fake-datadog:20220621" + ports: + - "8080:80" + - "27017:27017" + container_name: fake-datadog + mongo: + image: "mongo:5.0" + container_name: mongo + network_mode: "service:fake-datadog" + diff --git a/test/e2e/cws-tests/requirements.txt b/test/e2e/cws-tests/requirements.txt index 128f2fe21cf8b5..1e6cb0efb4a0c3 100644 --- a/test/e2e/cws-tests/requirements.txt +++ b/test/e2e/cws-tests/requirements.txt @@ -1,5 +1,5 @@ kubernetes==25.3.0 -datadog-api-client==2.6.0 +datadog-api-client==2.7.0 pyaml==21.10.1 docker==6.0.1 retry==0.9.2 diff --git a/test/integration/serverless/log_normalize.py b/test/integration/serverless/log_normalize.py new file mode 100644 index 00000000000000..953f5d2a5dde29 --- /dev/null +++ b/test/integration/serverless/log_normalize.py @@ -0,0 +1,219 @@ +import argparse +import json +import re + + +def normalize_metrics(stage): + def clear_dogsketches(log): + log["dogsketches"] = [] + + def sort_tags(log): + log["tags"].sort() + + def metric_sort_key(log): + return (log["metric"], "cold_start:true" in log["tags"]) + + return [ + replace(r'raise Exception', r'\n'), + require(r'BEGINMETRIC.*ENDMETRIC'), + exclude(r'BEGINMETRIC'), + exclude(r'ENDMETRIC'), + replace(r'(datadog-nodev)[0-9]+\.[0-9]+\.[0-9]+', r'\1X.X.X'), + replace(r'(datadog_lambda:v)[0-9]+\.[0-9]+\.[0-9]+', r'\1X.X.X'), + replace(r'dd_lambda_layer:datadog-go[0-9.]{1,}', r'dd_lambda_layer:datadog-gox.x.x'), + replace(r'(dd_lambda_layer:datadog-python)[0-9_]+\.[0-9]+\.[0-9]+', r'\1X.X.X'), + replace(r'(serverless.lambda-extension.integration-test.count)[0-9\.]+', r'\1'), + replace(r'(architecture:)(x86_64|arm64)', r'\1XXX'), + replace(stage, 'XXXXXX'), + exclude(r'[ ]$'), + foreach(clear_dogsketches), + foreach(sort_tags), + sort_by(metric_sort_key), + ] + + +def normalize_logs(stage): + rmvs = ( + "DATADOG TRACER CONFIGURATION", + # TODO: these messages may be an indication of a real problem and + # should be investigated + "TIMESTAMP UTC | DD_EXTENSION | ERROR | could not forward the request context canceled", + "TIMESTAMP http: proxy error: context canceled", + ) + + def rm_extra_items_key(log): + return any(rmv in log["message"]["message"] for rmv in rmvs) + + def sort_tags(log): + tags = log["ddtags"].split(',') + tags.sort() + log["ddtags"] = ','.join(tags) + + def log_sort_key(log): + return log["message"]["message"] + + return [ + require(r'BEGINLOG.*ENDLOG'), + exclude(r'BEGINLOG'), + exclude(r'ENDLOG'), + replace(r'("timestamp":\s*?)\d{13}', r'\1"XXX"'), + replace(r'\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}:\d{3}', 'TIMESTAMP'), + replace(r'\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z', 'TIMESTAMP'), + replace(r'\d{4}\/\d{2}\/\d{2}\s\d{2}:\d{2}:\d{2}', 'TIMESTAMP'), + replace(r'\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}', 'TIMESTAMP'), + replace(r'([a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12})', r'XXX'), + replace(r'"REPORT RequestId:.*?"', '"REPORT"'), + replace(stage, 'XXXXXX'), + replace(r'(architecture:)(x86_64|arm64)', r'\1XXX'), + rm_item(rm_extra_items_key), + foreach(sort_tags), + sort_by(log_sort_key), + ] + + +def normalize_traces(stage): + return [ + require(r'BEGINTRACE.*ENDTRACE'), + exclude(r'BEGINTRACE'), + exclude(r'ENDTRACE'), + replace(r'(ts":)[0-9]{10}', r'\1XXX'), + replace(r'((startTime|endTime|traceID|trace_id|span_id|parent_id|start|system.pid)":)[0-9]+', r'\1null'), + replace(r'((tracer_version|language_version)":)["a-zA-Z0-9~\-\.\_]+', r'\1null'), + replace(r'(duration":)[0-9]+', r'\1null'), + replace(r'((datadog_lambda|dd_trace)":")[0-9]+\.[0-9]+\.[0-9]+', r'\1X.X.X'), + replace(r'(,"request_id":")[a-zA-Z0-9\-,]+"', r'\1null"'), + replace(r'(,"runtime-id":")[a-zA-Z0-9\-,]+"', r'\1null"'), + replace(r'(,"system.pid":")[a-zA-Z0-9\-,]+"', r'\1null"'), + replace(r'("_dd.no_p_sr":)[0-9\.]+', r'\1null'), + replace(r'("architecture":)"(x86_64|arm64)"', r'\1"XXX"'), + replace(r'("process_id":)[0-9]+', r'\1null'), + replace(stage, 'XXXXXX'), + exclude(r'[ ]$'), + ] + + +##################### +# BEGIN NORMALIZERS # +##################### + + +def replace(pattern, repl): + """ + Replace all substrings matching regex pattern with given replacement string + """ + comp = re.compile(pattern, flags=re.DOTALL) + + def _replace(log): + return comp.sub(repl, log) + + return _replace + + +def exclude(pattern): + """ + Remove all substrings matching regex pattern + """ + return replace(pattern, '') + + +def require(pattern): + """ + Remove all substrings that don't match the given regex pattern + """ + comp = re.compile(pattern, flags=re.DOTALL) + + def _require(log): + match = comp.search(log) + if not match: + return '' + return match.group(0) + + return _require + + +def foreach(fn): + """ + Execute fn with each element of the list in order + """ + + def _foreach(log): + logs = json.loads(log, strict=False) + for log_item in logs: + fn(log_item) + return json.dumps(logs) + + return _foreach + + +def sort_by(key): + """ + Sort the json entries using the given key function, requires the log string + to be proper json and to be a list + """ + + def _sort(log): + log_json = json.loads(log, strict=False) + log_sorted = sorted(log_json, key=key) + return json.dumps(log_sorted) + + return _sort + + +def rm_item(key): + """ + Delete json entries from the log string using the given key function, key + takes an item from the json list and must return boolean which is True when + the item is to be removed and False if it is to be kept + """ + + def _rm_item(log): + log_json = json.loads(log, strict=False) + new_logs = [i for i in log_json if not key(i)] + return json.dumps(new_logs) + + return _rm_item + + +################### +# END NORMALIZERS # +################### + + +def normalize(log, typ, stage): + for normalizer in get_normalizers(typ, stage): + log = normalizer(log) + return format_json(log) + + +def get_normalizers(typ, stage): + if typ == 'metrics': + return normalize_metrics(stage) + elif typ == 'logs': + return normalize_logs(stage) + elif typ == 'traces': + return normalize_traces(stage) + else: + raise ValueError(f'invalid type "{typ}"') + + +def format_json(log): + return json.dumps(json.loads(log, strict=False), indent=2) + + +def parse_args(): + parser = argparse.ArgumentParser() + parser.add_argument('--type', required=True) + parser.add_argument('--logs', required=True) + parser.add_argument('--stage', required=True) + return parser.parse_args() + + +if __name__ == '__main__': + try: + args = parse_args() + print(normalize(args.logs, args.type, args.stage)) + except Exception: + err = {"error": "normalization raised exception"} + err_json = json.dumps(err, indent=2) + print(err_json) + exit(1) diff --git a/test/integration/serverless/parse-json.js b/test/integration/serverless/parse-json.js deleted file mode 100644 index 8f7651144e1dda..00000000000000 --- a/test/integration/serverless/parse-json.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict' - -var readline = require('readline'); -var rl = readline.createInterface({ - input: process.stdin, - output: process.stdout, - terminal: false -}); - -rl.on('line', function(line){ - try { - const obj = JSON.parse(line) - console.log(JSON.stringify(obj, null, 2)) - } catch (e) { - console.log(line) - } -}) \ No newline at end of file diff --git a/test/integration/serverless/recorder-extension/main.go b/test/integration/serverless/recorder-extension/main.go index 3a8376230077b1..be30f7f9f6ff17 100644 --- a/test/integration/serverless/recorder-extension/main.go +++ b/test/integration/serverless/recorder-extension/main.go @@ -17,7 +17,6 @@ import ( "net/http" "os" "os/signal" - "sort" "strings" "syscall" "time" @@ -207,17 +206,10 @@ func startHTTPServer(port string) { return } - for _, sketch := range pl.Sketches { - sort.Strings(sketch.Tags) - sketch.Dogsketches = make([]gogen.SketchPayload_Sketch_Dogsketch, 0) - outputSketches = append(outputSketches, sketch) - } + outputSketches = append(outputSketches, pl.Sketches...) if nbHitMetrics == 3 { // two calls + shutdown - sort.SliceStable(outputSketches, func(i, j int) bool { - return outputSketches[i].Metric < outputSketches[j].Metric - }) jsonSketch, err := json.Marshal(outputSketches) if err != nil { fmt.Printf("Error while JSON encoding the sketch") @@ -241,19 +233,14 @@ func startHTTPServer(port string) { } for _, log := range messages { - if !strings.Contains(log.Message.Message, "BEGINLOG") && !strings.Contains(log.Message.Message, "BEGINTRACE") { - if strings.HasPrefix(log.Message.Message, "REPORT RequestId:") { - log.Message.Message = "REPORT" // avoid dealing with stripping out init duration, duration, memory used etc. - nbReport++ - } - sortedTags := strings.Split(log.Tags, ",") - sort.Strings(sortedTags) - log.Tags = strings.Join(sortedTags, ",") - if !strings.Contains(log.Message.Message, "DATADOG TRACER CONFIGURATION") { - // skip dd-trace-go tracer configuration output - outputLogs = append(outputLogs, log) - } + msg := log.Message.Message + if strings.Contains(msg, "BEGINMETRIC") || strings.Contains(msg, "BEGINLOG") || strings.Contains(msg, "BEGINTRACE") { + continue + } + if strings.HasPrefix(msg, "REPORT RequestId:") { + nbReport++ } + outputLogs = append(outputLogs, log) } if nbReport == 2 && !hasBeenOutput { diff --git a/test/integration/serverless/run.sh b/test/integration/serverless/run.sh index e420136d275348..051b0b6c81814a 100755 --- a/test/integration/serverless/run.sh +++ b/test/integration/serverless/run.sh @@ -154,20 +154,7 @@ all_functions=("${metric_functions[@]}" "${log_functions[@]}" "${trace_functions # Add a function to this list to skip checking its results # This should only be used temporarily while we investigate and fix the test -functions_to_skip=( - # Tagging behavior after a timeout is currently known to be flaky - "timeout-node" - "timeout-python" - "timeout-java" - "timeout-go" - "timeout-csharp" - "timeout-proxy" - "trace-csharp" # Will be reactivated when the new dotnet layer will be released - "trace-proxy" # Will be reactivated when sampling with proxy will be implemented - "error-proxy" - "log-proxy" - "metric-proxy" -) +functions_to_skip=() echo "Invoking functions for the first time..." set +e # Don't exit this script if an invocation fails or there's a diff @@ -196,6 +183,9 @@ sleep "$LOGS_WAIT_MINUTES"m failed_functions=() +RAWLOGS_DIR=$(mktemp -d) +echo "Raw logs will be written to ${RAWLOGS_DIR}" + for function_name in "${all_functions[@]}"; do echo "Fetching logs for ${function_name}..." retry_counter=1 @@ -213,97 +203,26 @@ for function_name in "${all_functions[@]}"; do done printf "\e[A\e[K" # erase previous log line + echo $raw_logs > $RAWLOGS_DIR/$function_name + # Replace invocation-specific data like timestamps and IDs with XXX to normalize across executions if [[ " ${metric_functions[*]} " =~ " ${function_name} " ]]; then - # Normalize metrics - logs=$( - echo "$raw_logs" | - perl -p -e "s/raise Exception/\n/g" | - grep -v "BEGINLOG.*" | - grep -v "BEGINTRACE.*" | - grep "BEGINMETRIC.*" | - perl -p -e "s/BEGINMETRIC/\1/g" | - perl -p -e "s/ENDMETRIC/\1/g" | - perl -p -e "s/(ts\":)[0-9]{10}/\1XXX/g" | - perl -p -e "s/(min\":)[0-9\.e\-]{1,30}/\1XXX/g" | - perl -p -e "s/(max\":)[0-9\.e\-]{1,30}/\1XXX/g" | - perl -p -e "s/(cnt\":)[0-9\.e\-]{1,30}/\1XXX/g" | - perl -p -e "s/(avg\":)[0-9\.e\-]{1,30}/\1XXX/g" | - perl -p -e "s/(sum\":)[0-9\.e\-]{1,30}/\1XXX/g" | - perl -p -e "s/(k\":\[)[0-9\.e\-]{1,30}/\1XXX/g" | - perl -p -e "s/(datadog-nodev)[0-9]+\.[0-9]+\.[0-9]+/\1X\.X\.X/g" | - perl -p -e "s/(datadog_lambda:v)[0-9]+\.[0-9]+\.[0-9]+/\1X\.X\.X/g" | - perl -p -e "s/dd_lambda_layer:datadog-go[0-9.]{1,}/dd_lambda_layer:datadog-gox.x.x/g" | - perl -p -e "s/(dd_lambda_layer:datadog-python)[0-9_]+\.[0-9]+\.[0-9]+/\1X\.X\.X/g" | - perl -p -e "s/(serverless.lambda-extension.integration-test.count)[0-9\.]+/\1/g" | - perl -p -e "s/(architecture:)(x86_64|arm64)/\1XXX/g" | - perl -p -e "s/$stage/XXXXXX/g" | - perl -p -e "s/[ ]$//g" | - node parse-json.js - ) + norm_type=metrics elif [[ " ${log_functions[*]} " =~ " ${function_name} " ]]; then - # Normalize logs - logs=$( - echo "$raw_logs" | - grep "BEGINLOG" | - grep -v "BEGINMETRIC.*" | - grep -v "BEGINTRACE.*" | - perl -p -e "s/BEGINLOG/\1/g" | - perl -p -e "s/ENDLOG/\1/g" | - perl -p -e "s/(\"timestamp\": )\d{13}/\1\"XXX\"/g" | - perl -p -e "s/(\"timestamp\": )\d{13}/\1\"XXX\"/g" | - perl -p -e "s/\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}:\d{3}/TIMESTAMP/g" | - perl -p -e "s/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z/TIMESTAMP/g" | - perl -p -e "s/\d{4}\/\d{2}\/\d{2}\s\d{2}:\d{2}:\d{2}/TIMESTAMP/g" | - perl -p -e "s/\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}/TIMESTAMP/g" | - perl -p -e "s/\"timestamp\":\d{13},/\1/g" | - perl -p -e "s/([a-zA-Z0-9]{8}\-[a-zA-Z0-9]{4}\-[a-zA-Z0-9]{4}\-[a-zA-Z0-9]{4}\-[a-zA-Z0-9]{12})/\0\XXX/g" | - perl -p -e "s/$stage/STAGE/g" | - perl -p -e "s/(architecture:)(x86_64|arm64)/\1XXX/g" | - # ignore a Lambda error that occurs sporadically for log-csharp - # see here for more info: https://repost.aws/questions/QUq2OfIFUNTCyCKsChfJLr5w/lambda-function-working-locally-but-crashing-on-aws - perl -n -e "print unless /LAMBDA_RUNTIME Failed to get next invocation. No Response from endpoint/ or \ - /An error occurred while attempting to execute your code.: LambdaException/ or \ - /terminate called after throwing an instance of 'std::logic_error'/ or \ - /basic_string::_M_construct null not valid/" | - node parse-json.js - ) + norm_type=logs else - # Normalize traces - logs=$( - echo "$raw_logs" | - grep "BEGINTRACE" | - grep -v "BEGINMETRIC.*" | - grep -v "BEGINLOG.*" | - perl -p -e "s/BEGINTRACE/\1/g" | - perl -p -e "s/ENDTRACE/\1/g" | - perl -p -e "s/(ts\":)[0-9]{10}/\1XXX/g" | - perl -p -e "s/((startTime|endTime|traceID|trace_id|span_id|parent_id|start|system.pid)\":)[0-9]+/\1null/g" | - perl -p -e "s/((tracer_version|language_version)\":)[\"a-zA-Z0-9~\-\.\_]+/\1null/g" | - perl -p -e "s/(duration\":)[0-9]+/\1null/g" | - perl -p -e "s/((datadog_lambda|dd_trace)\":\")[0-9]+\.[0-9]+\.[0-9]+/\1X\.X\.X/g" | - perl -p -e "s/(,\"request_id\":\")[a-zA-Z0-9\-,]+\"/\1null\"/g" | - perl -p -e "s/(,\"runtime-id\":\")[a-zA-Z0-9\-,]+\"/\1null\"/g" | - perl -p -e "s/(,\"system.pid\":\")[a-zA-Z0-9\-,]+\"/\1null\"/g" | - perl -p -e "s/(\"_dd.no_p_sr\":)[0-9\.]+/\1null/g" | - perl -p -e "s/(\"architecture\":)\"(x86_64|arm64)\"/\1\"XXX\"/g" | - perl -p -e "s/(\"process_id\":)[0-9]+/\1null/g" | - perl -p -e "s/$stage/XXXXXX/g" | - perl -p -e "s/[ ]$//g" | - node parse-json.js - ) + norm_type=traces fi + logs=$(python3 log_normalize.py --type $norm_type --logs "$raw_logs" --stage $stage) function_snapshot_path="./snapshots/${function_name}" - jsonLogs="$(echo $logs | node parse-json.js)" - if [ ! -f "$function_snapshot_path" ]; then printf "${MAGENTA} CREATE ${END_COLOR} $function_name\n" - echo "$jsonLogs" >"$function_snapshot_path" + echo "$logs" >"$function_snapshot_path" elif [ "$UPDATE_SNAPSHOTS" == "true" ]; then printf "${MAGENTA} UPDATE ${END_COLOR} $function_name\n" - echo "$jsonLogs" > "$function_snapshot_path" + echo "$logs" > "$function_snapshot_path" else if [[ " ${functions_to_skip[*]} " =~ " ${function_name} " ]]; then printf "${YELLOW} SKIP ${END_COLOR} $function_name\n" @@ -314,7 +233,7 @@ for function_name in "${all_functions[@]}"; do printf "${YELLOW} SKIP ${END_COLOR} $function_name, no .NET support on arm64\n" continue fi - diff_output=$(echo "$jsonLogs" | diff - "$function_snapshot_path") + diff_output=$(echo "$logs" | diff - "$function_snapshot_path") if [ $? -eq 1 ]; then failed_functions+=("$function_name") diff --git a/test/integration/serverless/serverless.yml b/test/integration/serverless/serverless.yml index 407353b9537f8d..073566b8a097f4 100644 --- a/test/integration/serverless/serverless.yml +++ b/test/integration/serverless/serverless.yml @@ -28,10 +28,10 @@ provider: DD_CAPTURE_LAMBDA_PAYLOAD: true timeout: 15 deploymentBucket: - name: integration-tests-deployment-bucket-lambda-extension + name: integration-tests-serververless-deployment-bucket iam: # IAM permissions require that all functions are deployed with this role - role: "arn:aws:iam::601427279990:role/serverless-integration-test-lambda-role" + role: "arn:aws:iam::425362996713:role/serverless-integration-test-lambda-role" architecture: ${self:custom.altArchitectureNames.${env:ARCHITECTURE}} package: diff --git a/test/integration/serverless/snapshots/appsec-csharp b/test/integration/serverless/snapshots/appsec-csharp index d219b5d19c214e..23ac018c743a92 100644 --- a/test/integration/serverless/snapshots/appsec-csharp +++ b/test/integration/serverless/snapshots/appsec-csharp @@ -22,13 +22,13 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "component": "WebRequest", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-appsec-csharp", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-appsec-csharp", "functionname": "integration-tests-extension-XXXXXX-appsec-csharp", "http.method": "GET", "http.status_code": "200", @@ -88,13 +88,13 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "component": "WebRequest", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-appsec-csharp", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-appsec-csharp", "functionname": "integration-tests-extension-XXXXXX-appsec-csharp", "http.method": "GET", "http.status_code": "200", diff --git a/test/integration/serverless/snapshots/appsec-java b/test/integration/serverless/snapshots/appsec-java index cf9d0846236ff4..940c6dab1602e6 100644 --- a/test/integration/serverless/snapshots/appsec-java +++ b/test/integration/serverless/snapshots/appsec-java @@ -22,12 +22,12 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-appsec-java", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-appsec-java", "functionname": "integration-tests-extension-XXXXXX-appsec-java", "memorysize": "1024", "region": "eu-west-1", @@ -78,14 +78,14 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "cold_start": "true", "datadog_lambda": "X.X.X", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-appsec-java", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-appsec-java", "function_version": "$LATEST", "functionname": "integration-tests-extension-XXXXXX-appsec-java", "language": "jvm", @@ -147,14 +147,14 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "cold_start": "false", "datadog_lambda": "X.X.X", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-appsec-java", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-appsec-java", "function_version": "$LATEST", "functionname": "integration-tests-extension-XXXXXX-appsec-java", "language": "jvm", diff --git a/test/integration/serverless/snapshots/error-csharp b/test/integration/serverless/snapshots/error-csharp index 42abc8e2022c21..c44db211768b3b 100644 --- a/test/integration/serverless/snapshots/error-csharp +++ b/test/integration/serverless/snapshots/error-csharp @@ -3,13 +3,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -28,13 +28,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -53,13 +53,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -78,13 +78,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -103,12 +103,12 @@ "metric": "aws.lambda.enhanced.errors", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -127,12 +127,12 @@ "metric": "aws.lambda.enhanced.errors", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -151,13 +151,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -176,13 +176,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -201,13 +201,13 @@ "metric": "aws.lambda.enhanced.init_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -226,13 +226,13 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "init_type:on-demand", "memorysize:1024", @@ -252,13 +252,13 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "init_type:on-demand", "memorysize:1024", @@ -278,13 +278,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -303,13 +303,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -328,13 +328,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -353,13 +353,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -378,13 +378,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -403,13 +403,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -428,13 +428,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -453,13 +453,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -478,13 +478,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -503,13 +503,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -528,13 +528,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -553,13 +553,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -578,13 +578,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -603,13 +603,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", diff --git a/test/integration/serverless/snapshots/error-java b/test/integration/serverless/snapshots/error-java index d06b2e1fef7354..e39cc94b005920 100644 --- a/test/integration/serverless/snapshots/error-java +++ b/test/integration/serverless/snapshots/error-java @@ -3,13 +3,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -28,13 +28,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -53,13 +53,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -78,13 +78,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -103,13 +103,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -128,13 +128,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -153,13 +153,13 @@ "metric": "aws.lambda.enhanced.init_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -178,13 +178,13 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "init_type:on-demand", "memorysize:1024", @@ -204,13 +204,13 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "init_type:on-demand", "memorysize:1024", @@ -230,13 +230,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -255,13 +255,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -280,13 +280,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -305,13 +305,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -330,13 +330,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -355,13 +355,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -380,13 +380,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -405,13 +405,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -430,13 +430,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -455,13 +455,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -480,13 +480,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -505,13 +505,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -530,13 +530,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -555,13 +555,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", diff --git a/test/integration/serverless/snapshots/error-node b/test/integration/serverless/snapshots/error-node index 856b87613ef075..da0688d846148a 100644 --- a/test/integration/serverless/snapshots/error-node +++ b/test/integration/serverless/snapshots/error-node @@ -3,13 +3,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -28,13 +28,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -53,13 +53,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -78,13 +78,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -103,14 +103,14 @@ "metric": "aws.lambda.enhanced.errors", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "datadog_lambda:vX.X.X", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -129,14 +129,14 @@ "metric": "aws.lambda.enhanced.errors", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "datadog_lambda:vX.X.X", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -155,13 +155,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -180,13 +180,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -205,13 +205,13 @@ "metric": "aws.lambda.enhanced.init_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -230,13 +230,13 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "init_type:on-demand", "memorysize:1024", @@ -256,13 +256,13 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "init_type:on-demand", "memorysize:1024", @@ -282,13 +282,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -307,13 +307,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -332,13 +332,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -357,13 +357,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -382,13 +382,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -407,13 +407,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -432,13 +432,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -457,13 +457,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -482,13 +482,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -507,13 +507,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -532,13 +532,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -557,13 +557,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -582,13 +582,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -607,13 +607,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", diff --git a/test/integration/serverless/snapshots/error-proxy b/test/integration/serverless/snapshots/error-proxy index 2c7c202437e1b0..cf390fa818377a 100644 --- a/test/integration/serverless/snapshots/error-proxy +++ b/test/integration/serverless/snapshots/error-proxy @@ -3,13 +3,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -28,13 +28,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -53,13 +53,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -78,13 +78,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -103,12 +103,12 @@ "metric": "aws.lambda.enhanced.errors", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -127,12 +127,12 @@ "metric": "aws.lambda.enhanced.errors", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -151,13 +151,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -176,13 +176,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -201,13 +201,13 @@ "metric": "aws.lambda.enhanced.init_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -226,13 +226,13 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "init_type:on-demand", "memorysize:1024", @@ -252,13 +252,13 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "init_type:on-demand", "memorysize:1024", @@ -278,13 +278,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -303,13 +303,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -328,13 +328,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -353,13 +353,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -378,13 +378,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -403,13 +403,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -428,13 +428,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -453,13 +453,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -478,13 +478,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -503,13 +503,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -528,13 +528,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -553,13 +553,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -578,13 +578,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -603,13 +603,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", diff --git a/test/integration/serverless/snapshots/error-python b/test/integration/serverless/snapshots/error-python index b4edbd4e36326c..f1dea142bdb9a8 100644 --- a/test/integration/serverless/snapshots/error-python +++ b/test/integration/serverless/snapshots/error-python @@ -3,13 +3,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -28,13 +28,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -53,13 +53,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -78,13 +78,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -103,15 +103,15 @@ "metric": "aws.lambda.enhanced.errors", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "datadog_lambda:vX.X.X", "dd_extension_version:123", "dd_lambda_layer:datadog-pythonX.X.X", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -130,15 +130,15 @@ "metric": "aws.lambda.enhanced.errors", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "datadog_lambda:vX.X.X", "dd_extension_version:123", "dd_lambda_layer:datadog-pythonX.X.X", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -157,13 +157,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -182,13 +182,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -207,13 +207,13 @@ "metric": "aws.lambda.enhanced.init_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -232,13 +232,13 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "init_type:on-demand", "memorysize:1024", @@ -258,13 +258,13 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "init_type:on-demand", "memorysize:1024", @@ -284,13 +284,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -309,13 +309,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -334,13 +334,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -359,13 +359,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -384,13 +384,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -409,13 +409,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -434,13 +434,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -459,13 +459,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -484,13 +484,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -509,13 +509,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -534,13 +534,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -559,13 +559,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -584,13 +584,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -609,13 +609,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", diff --git a/test/integration/serverless/snapshots/log-csharp b/test/integration/serverless/snapshots/log-csharp index 82c50357e2f0bb..54beeeb0339201 100644 --- a/test/integration/serverless/snapshots/log-csharp +++ b/test/integration/serverless/snapshots/log-csharp @@ -1,170 +1,182 @@ [ { "message": { - "message": "START RequestId: XXX Version: $LATEST", + "message": "END RequestId: XXX", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp,functionname:integration-tests-extension-STAGE-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp,functionname:integration-tests-extension-XXXXXX-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP\tXXX\tinfo\tXXX Log 0 XXX\n", + "message": "END RequestId: XXX", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp,functionname:integration-tests-extension-STAGE-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp,functionname:integration-tests-extension-XXXXXX-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP\tXXX\tinfo\tXXX Log 1 XXX\n", + "message": "REPORT", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp,functionname:integration-tests-extension-STAGE-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp,functionname:integration-tests-extension-XXXXXX-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP\tXXX\tinfo\tXXX Log 2 XXX\n", + "message": "REPORT", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp,functionname:integration-tests-extension-STAGE-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp,functionname:integration-tests-extension-XXXXXX-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "END RequestId: XXX", + "message": "START RequestId: XXX Version: $LATEST", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp,functionname:integration-tests-extension-STAGE-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp,functionname:integration-tests-extension-XXXXXX-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "REPORT", + "message": "START RequestId: XXX Version: $LATEST", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp,functionname:integration-tests-extension-STAGE-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp,functionname:integration-tests-extension-XXXXXX-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "START RequestId: XXX Version: $LATEST", + "message": "TIMESTAMP\tXXX\tinfo\tXXX Log 0 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp,functionname:integration-tests-extension-STAGE-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp,functionname:integration-tests-extension-XXXXXX-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { "message": "TIMESTAMP\tXXX\tinfo\tXXX Log 0 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp,functionname:integration-tests-extension-STAGE-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp,functionname:integration-tests-extension-XXXXXX-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { "message": "TIMESTAMP\tXXX\tinfo\tXXX Log 1 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp,functionname:integration-tests-extension-STAGE-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp,functionname:integration-tests-extension-XXXXXX-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP\tXXX\tinfo\tXXX Log 2 XXX\n", + "message": "TIMESTAMP\tXXX\tinfo\tXXX Log 1 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp,functionname:integration-tests-extension-STAGE-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp,functionname:integration-tests-extension-XXXXXX-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "END RequestId: XXX", + "message": "TIMESTAMP\tXXX\tinfo\tXXX Log 2 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp,functionname:integration-tests-extension-STAGE-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp,functionname:integration-tests-extension-XXXXXX-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "REPORT", + "message": "TIMESTAMP\tXXX\tinfo\tXXX Log 2 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp,functionname:integration-tests-extension-STAGE-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp,functionname:integration-tests-extension-XXXXXX-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" } ] diff --git a/test/integration/serverless/snapshots/log-go b/test/integration/serverless/snapshots/log-go index 6856ee8e63c153..e1bada356cfd57 100644 --- a/test/integration/serverless/snapshots/log-go +++ b/test/integration/serverless/snapshots/log-go @@ -1,170 +1,182 @@ [ { "message": { - "message": "START RequestId: XXX Version: $LATEST", + "message": "END RequestId: XXX", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go,functionname:integration-tests-extension-STAGE-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go,functionname:integration-tests-extension-XXXXXX-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "XXX LOG 0 XXX\n", + "message": "END RequestId: XXX", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go,functionname:integration-tests-extension-STAGE-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go,functionname:integration-tests-extension-XXXXXX-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "XXX LOG 1 XXX\n", + "message": "REPORT", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go,functionname:integration-tests-extension-STAGE-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go,functionname:integration-tests-extension-XXXXXX-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "XXX LOG 2 XXX\n", + "message": "REPORT", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go,functionname:integration-tests-extension-STAGE-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go,functionname:integration-tests-extension-XXXXXX-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "END RequestId: XXX", + "message": "START RequestId: XXX Version: $LATEST", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go,functionname:integration-tests-extension-STAGE-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go,functionname:integration-tests-extension-XXXXXX-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "REPORT", + "message": "START RequestId: XXX Version: $LATEST", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go,functionname:integration-tests-extension-STAGE-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go,functionname:integration-tests-extension-XXXXXX-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "START RequestId: XXX Version: $LATEST", + "message": "XXX LOG 0 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go,functionname:integration-tests-extension-STAGE-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go,functionname:integration-tests-extension-XXXXXX-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { "message": "XXX LOG 0 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go,functionname:integration-tests-extension-STAGE-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go,functionname:integration-tests-extension-XXXXXX-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { "message": "XXX LOG 1 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go,functionname:integration-tests-extension-STAGE-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go,functionname:integration-tests-extension-XXXXXX-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "XXX LOG 2 XXX\n", + "message": "XXX LOG 1 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go,functionname:integration-tests-extension-STAGE-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go,functionname:integration-tests-extension-XXXXXX-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "END RequestId: XXX", + "message": "XXX LOG 2 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go,functionname:integration-tests-extension-STAGE-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go,functionname:integration-tests-extension-XXXXXX-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "REPORT", + "message": "XXX LOG 2 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go,functionname:integration-tests-extension-STAGE-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go,functionname:integration-tests-extension-XXXXXX-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" } ] diff --git a/test/integration/serverless/snapshots/log-java b/test/integration/serverless/snapshots/log-java index e7b6a7cfca0f33..3d4b9a038af536 100644 --- a/test/integration/serverless/snapshots/log-java +++ b/test/integration/serverless/snapshots/log-java @@ -1,198 +1,212 @@ [ { "message": { - "message": "Picked up JAVA_TOOL_OPTIONS: -javaagent:\"/opt/java/lib/dd-java-agent.jar\" -XX:+TieredCompilation -XX:TieredStopAtLevel=1\n", + "message": "END RequestId: XXX", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "[dd.trace TIMESTAMP +0000] [main] INFO datadog.trace.agent.common.writer.WriterFactory - Detected serverless environment. Serverless extension has been detected, using DDAgentWriter\n", + "message": "END RequestId: XXX", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "START RequestId: XXX Version: $LATEST", + "message": "Picked up JAVA_TOOL_OPTIONS: -javaagent:\"/opt/java/lib/dd-java-agent.jar\" -XX:+TieredCompilation -XX:TieredStopAtLevel=1\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "XXX Log 0 XXX\n", + "message": "REPORT", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "XXX Log 1 XXX\n", + "message": "REPORT", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "XXX Log 2 XXX\n", + "message": "START RequestId: XXX Version: $LATEST", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "END RequestId: XXX", + "message": "START RequestId: XXX Version: $LATEST", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "REPORT", + "message": "XXX Log 0 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "START RequestId: XXX Version: $LATEST", + "message": "XXX Log 0 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "XXX Log 0 XXX\n", + "message": "XXX Log 1 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { "message": "XXX Log 1 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { "message": "XXX Log 2 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "END RequestId: XXX", + "message": "XXX Log 2 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "REPORT", + "message": "[dd.trace TIMESTAMP +0000] [main] INFO datadog.trace.agent.common.writer.WriterFactory - Detected serverless environment. Serverless extension has been detected, using DDAgentWriter\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" } ] diff --git a/test/integration/serverless/snapshots/log-node b/test/integration/serverless/snapshots/log-node index 5577b08a290b9d..114d007abacd42 100644 --- a/test/integration/serverless/snapshots/log-node +++ b/test/integration/serverless/snapshots/log-node @@ -1,198 +1,212 @@ [ { "message": { - "message": "START RequestId: XXX Version: $LATEST", + "message": "END RequestId: XXX", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 0 XXX\n", + "message": "END RequestId: XXX", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 1 XXX\n", + "message": "REPORT", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 2 XXX\n", + "message": "REPORT", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG masked XXX\n", + "message": "START RequestId: XXX Version: $LATEST", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "END RequestId: XXX", + "message": "START RequestId: XXX Version: $LATEST", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "REPORT", + "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 0 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "START RequestId: XXX Version: $LATEST", + "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 0 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 0 XXX\n", + "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 1 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 1 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 2 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG masked XXX\n", + "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 2 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "END RequestId: XXX", + "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG masked XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "REPORT", + "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG masked XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" } ] diff --git a/test/integration/serverless/snapshots/log-proxy b/test/integration/serverless/snapshots/log-proxy index cef6ff6e4bdde3..283aa1a2633c48 100644 --- a/test/integration/serverless/snapshots/log-proxy +++ b/test/integration/serverless/snapshots/log-proxy @@ -1,198 +1,182 @@ [ { "message": { - "message": "START RequestId: XXX Version: $LATEST", - "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", - "request_id": "XXX" - } - }, - "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", - "service": "integration-tests-service", - "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" - }, - { - "message": { - "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 0 XXX\n", - "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", - "request_id": "XXX" - } - }, - "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", - "service": "integration-tests-service", - "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" - }, - { - "message": { - "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 1 XXX\n", + "message": "END RequestId: XXX", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy,functionname:integration-tests-extension-XXXXXX-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 2 XXX\n", + "message": "END RequestId: XXX", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy,functionname:integration-tests-extension-XXXXXX-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "END RequestId: XXX", + "message": "REPORT", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy,functionname:integration-tests-extension-XXXXXX-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { "message": "REPORT", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy,functionname:integration-tests-extension-XXXXXX-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { "message": "START RequestId: XXX Version: $LATEST", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy,functionname:integration-tests-extension-XXXXXX-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 0 XXX\n", + "message": "START RequestId: XXX Version: $LATEST", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy,functionname:integration-tests-extension-XXXXXX-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 1 XXX\n", + "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 0 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy,functionname:integration-tests-extension-XXXXXX-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 2 XXX\n", + "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 0 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy,functionname:integration-tests-extension-XXXXXX-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "END RequestId: XXX", + "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 1 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy,functionname:integration-tests-extension-XXXXXX-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "REPORT", + "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 1 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy,functionname:integration-tests-extension-XXXXXX-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP http: proxy error: context canceled\n", + "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 2 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy,functionname:integration-tests-extension-XXXXXX-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP UTC | DD_EXTENSION | ERROR | could not forward the request context canceled\n", + "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 2 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy,functionname:integration-tests-extension-XXXXXX-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" } ] diff --git a/test/integration/serverless/snapshots/log-python b/test/integration/serverless/snapshots/log-python index 537a75857add36..fb4a414c6b42cd 100644 --- a/test/integration/serverless/snapshots/log-python +++ b/test/integration/serverless/snapshots/log-python @@ -1,170 +1,182 @@ [ { "message": { - "message": "START RequestId: XXX Version: $LATEST", + "message": "END RequestId: XXX", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python,functionname:integration-tests-extension-STAGE-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python,functionname:integration-tests-extension-XXXXXX-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "[ERROR]\tTIMESTAMP\tXXX\tXXX LOG 0 XXX\n", + "message": "END RequestId: XXX", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python,functionname:integration-tests-extension-STAGE-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python,functionname:integration-tests-extension-XXXXXX-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "[ERROR]\tTIMESTAMP\tXXX\tXXX LOG 1 XXX\n", + "message": "REPORT", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python,functionname:integration-tests-extension-STAGE-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python,functionname:integration-tests-extension-XXXXXX-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "[ERROR]\tTIMESTAMP\tXXX\tXXX LOG 2 XXX\n", + "message": "REPORT", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python,functionname:integration-tests-extension-STAGE-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python,functionname:integration-tests-extension-XXXXXX-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "END RequestId: XXX", + "message": "START RequestId: XXX Version: $LATEST", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python,functionname:integration-tests-extension-STAGE-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python,functionname:integration-tests-extension-XXXXXX-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "REPORT", + "message": "START RequestId: XXX Version: $LATEST", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python,functionname:integration-tests-extension-STAGE-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python,functionname:integration-tests-extension-XXXXXX-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "START RequestId: XXX Version: $LATEST", + "message": "[ERROR]\tTIMESTAMP\tXXX\tXXX LOG 0 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python,functionname:integration-tests-extension-STAGE-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python,functionname:integration-tests-extension-XXXXXX-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { "message": "[ERROR]\tTIMESTAMP\tXXX\tXXX LOG 0 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python,functionname:integration-tests-extension-STAGE-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python,functionname:integration-tests-extension-XXXXXX-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { "message": "[ERROR]\tTIMESTAMP\tXXX\tXXX LOG 1 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python,functionname:integration-tests-extension-STAGE-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python,functionname:integration-tests-extension-XXXXXX-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "[ERROR]\tTIMESTAMP\tXXX\tXXX LOG 2 XXX\n", + "message": "[ERROR]\tTIMESTAMP\tXXX\tXXX LOG 1 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python,functionname:integration-tests-extension-STAGE-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python,functionname:integration-tests-extension-XXXXXX-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "END RequestId: XXX", + "message": "[ERROR]\tTIMESTAMP\tXXX\tXXX LOG 2 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python,functionname:integration-tests-extension-STAGE-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python,functionname:integration-tests-extension-XXXXXX-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "REPORT", + "message": "[ERROR]\tTIMESTAMP\tXXX\tXXX LOG 2 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python,functionname:integration-tests-extension-STAGE-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python,functionname:integration-tests-extension-XXXXXX-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" } ] diff --git a/test/integration/serverless/snapshots/metric-csharp b/test/integration/serverless/snapshots/metric-csharp index a1bd1d6e488e7b..09b0ae76a108cd 100644 --- a/test/integration/serverless/snapshots/metric-csharp +++ b/test/integration/serverless/snapshots/metric-csharp @@ -3,13 +3,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -28,13 +28,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -53,13 +53,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -78,13 +78,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -103,13 +103,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -128,13 +128,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -153,13 +153,13 @@ "metric": "aws.lambda.enhanced.init_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -178,13 +178,13 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "init_type:on-demand", "memorysize:1024", @@ -204,13 +204,13 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "init_type:on-demand", "memorysize:1024", @@ -230,13 +230,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -255,13 +255,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -280,13 +280,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -305,13 +305,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -330,13 +330,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -355,13 +355,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -380,13 +380,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -405,13 +405,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -430,13 +430,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -455,13 +455,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -480,13 +480,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -505,13 +505,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -530,13 +530,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -555,13 +555,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", diff --git a/test/integration/serverless/snapshots/metric-go b/test/integration/serverless/snapshots/metric-go index d55d03899f9cce..fe42f8a7a6a27f 100644 --- a/test/integration/serverless/snapshots/metric-go +++ b/test/integration/serverless/snapshots/metric-go @@ -3,13 +3,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -28,13 +28,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -53,13 +53,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -78,13 +78,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -103,13 +103,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -128,13 +128,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -153,13 +153,13 @@ "metric": "aws.lambda.enhanced.init_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -178,13 +178,13 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "init_type:on-demand", "memorysize:1024", @@ -204,13 +204,13 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "init_type:on-demand", "memorysize:1024", @@ -230,13 +230,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -255,13 +255,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -280,13 +280,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -305,13 +305,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -330,13 +330,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -355,13 +355,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -380,13 +380,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -405,13 +405,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -430,13 +430,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -455,13 +455,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -480,13 +480,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -505,13 +505,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -530,13 +530,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -555,13 +555,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -580,13 +580,13 @@ "metric": "serverless.lambda-extension.integration-test.count", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "dd_extension_version:123", "dd_lambda_layer:datadog-gox.x.x", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -605,13 +605,13 @@ "metric": "serverless.lambda-extension.integration-test.count", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "dd_extension_version:123", "dd_lambda_layer:datadog-gox.x.x", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", diff --git a/test/integration/serverless/snapshots/metric-java b/test/integration/serverless/snapshots/metric-java index 96e8d1648ed463..882ddcd6cb40a5 100644 --- a/test/integration/serverless/snapshots/metric-java +++ b/test/integration/serverless/snapshots/metric-java @@ -3,13 +3,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -28,13 +28,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -53,13 +53,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -78,13 +78,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -103,13 +103,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -128,13 +128,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -153,13 +153,13 @@ "metric": "aws.lambda.enhanced.init_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -178,13 +178,13 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "init_type:on-demand", "memorysize:1024", @@ -204,13 +204,13 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "init_type:on-demand", "memorysize:1024", @@ -230,13 +230,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -255,13 +255,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -280,13 +280,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -305,13 +305,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -330,13 +330,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -355,13 +355,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -380,13 +380,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -405,13 +405,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -430,13 +430,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -455,13 +455,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -480,13 +480,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -505,13 +505,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -530,13 +530,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -555,13 +555,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", diff --git a/test/integration/serverless/snapshots/metric-node b/test/integration/serverless/snapshots/metric-node index 2d834d84505903..f6d8e2802366a5 100644 --- a/test/integration/serverless/snapshots/metric-node +++ b/test/integration/serverless/snapshots/metric-node @@ -3,13 +3,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -28,13 +28,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -53,13 +53,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -78,13 +78,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -103,13 +103,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -128,13 +128,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -153,13 +153,13 @@ "metric": "aws.lambda.enhanced.init_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -178,13 +178,13 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "init_type:on-demand", "memorysize:1024", @@ -204,13 +204,13 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "init_type:on-demand", "memorysize:1024", @@ -230,13 +230,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -255,13 +255,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -280,13 +280,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -305,13 +305,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -330,13 +330,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -355,13 +355,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -380,13 +380,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -405,13 +405,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -430,13 +430,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -455,13 +455,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -480,13 +480,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -505,13 +505,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -530,13 +530,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -555,13 +555,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -580,13 +580,13 @@ "metric": "serverless.lambda-extension.integration-test.count", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "dd_extension_version:123", "dd_lambda_layer:datadog-nodevX.X.X", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", diff --git a/test/integration/serverless/snapshots/metric-proxy b/test/integration/serverless/snapshots/metric-proxy index aa14b046683df1..0e2bb6a2b6f9b1 100644 --- a/test/integration/serverless/snapshots/metric-proxy +++ b/test/integration/serverless/snapshots/metric-proxy @@ -3,13 +3,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -28,13 +28,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -53,13 +53,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -78,13 +78,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -103,13 +103,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -128,13 +128,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -153,13 +153,13 @@ "metric": "aws.lambda.enhanced.init_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -178,13 +178,13 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "init_type:on-demand", "memorysize:1024", @@ -204,13 +204,13 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "init_type:on-demand", "memorysize:1024", @@ -230,13 +230,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -255,13 +255,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -280,13 +280,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -305,13 +305,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -330,13 +330,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -355,13 +355,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -380,13 +380,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -405,13 +405,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -430,13 +430,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -455,13 +455,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -480,13 +480,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -505,13 +505,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -530,13 +530,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -555,13 +555,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", diff --git a/test/integration/serverless/snapshots/metric-python b/test/integration/serverless/snapshots/metric-python index 1e2d1449493727..e9ad1f0dc60ebb 100644 --- a/test/integration/serverless/snapshots/metric-python +++ b/test/integration/serverless/snapshots/metric-python @@ -3,13 +3,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -28,13 +28,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -53,13 +53,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -78,13 +78,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -103,13 +103,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -128,13 +128,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -153,13 +153,13 @@ "metric": "aws.lambda.enhanced.init_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -178,13 +178,13 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "init_type:on-demand", "memorysize:1024", @@ -204,13 +204,13 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "init_type:on-demand", "memorysize:1024", @@ -230,13 +230,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -255,13 +255,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -280,13 +280,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -305,13 +305,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -330,13 +330,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -355,13 +355,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -380,13 +380,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -405,13 +405,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -430,13 +430,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -455,13 +455,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -480,13 +480,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -505,13 +505,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -530,13 +530,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -555,13 +555,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -580,13 +580,13 @@ "metric": "serverless.lambda-extension.integration-test.count", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "dd_extension_version:123", "dd_lambda_layer:datadog-pythonX.X.X", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", diff --git a/test/integration/serverless/snapshots/timeout-csharp b/test/integration/serverless/snapshots/timeout-csharp index 8b137891791fe9..059f4251737b11 100644 --- a/test/integration/serverless/snapshots/timeout-csharp +++ b/test/integration/serverless/snapshots/timeout-csharp @@ -1 +1,3 @@ - +{ + "error": "normalization raised exception" +} diff --git a/test/integration/serverless/snapshots/timeout-go b/test/integration/serverless/snapshots/timeout-go index 8b137891791fe9..059f4251737b11 100644 --- a/test/integration/serverless/snapshots/timeout-go +++ b/test/integration/serverless/snapshots/timeout-go @@ -1 +1,3 @@ - +{ + "error": "normalization raised exception" +} diff --git a/test/integration/serverless/snapshots/timeout-java b/test/integration/serverless/snapshots/timeout-java index 8b137891791fe9..059f4251737b11 100644 --- a/test/integration/serverless/snapshots/timeout-java +++ b/test/integration/serverless/snapshots/timeout-java @@ -1 +1,3 @@ - +{ + "error": "normalization raised exception" +} diff --git a/test/integration/serverless/snapshots/timeout-node b/test/integration/serverless/snapshots/timeout-node index 8b137891791fe9..059f4251737b11 100644 --- a/test/integration/serverless/snapshots/timeout-node +++ b/test/integration/serverless/snapshots/timeout-node @@ -1 +1,3 @@ - +{ + "error": "normalization raised exception" +} diff --git a/test/integration/serverless/snapshots/timeout-proxy b/test/integration/serverless/snapshots/timeout-proxy index 8b137891791fe9..059f4251737b11 100644 --- a/test/integration/serverless/snapshots/timeout-proxy +++ b/test/integration/serverless/snapshots/timeout-proxy @@ -1 +1,3 @@ - +{ + "error": "normalization raised exception" +} diff --git a/test/integration/serverless/snapshots/timeout-python b/test/integration/serverless/snapshots/timeout-python index 8b137891791fe9..059f4251737b11 100644 --- a/test/integration/serverless/snapshots/timeout-python +++ b/test/integration/serverless/snapshots/timeout-python @@ -1 +1,3 @@ - +{ + "error": "normalization raised exception" +} diff --git a/test/integration/serverless/snapshots/trace-csharp b/test/integration/serverless/snapshots/trace-csharp index 2d6df8278c36de..63126c73288b3a 100644 --- a/test/integration/serverless/snapshots/trace-csharp +++ b/test/integration/serverless/snapshots/trace-csharp @@ -22,13 +22,13 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "component": "WebRequest", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-csharp", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-csharp", "functionname": "integration-tests-extension-XXXXXX-trace-csharp", "http.method": "GET", "http.status_code": "200", @@ -48,6 +48,7 @@ "metrics": { "_dd.top_level": 1, "_dd.tracer_kr": 0, + "_sampling_priority_rate_v1": 1, "_sampling_priority_v1": 1, "_top_level": 1, "process_id": null @@ -87,13 +88,13 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "component": "WebRequest", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-csharp", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-csharp", "functionname": "integration-tests-extension-XXXXXX-trace-csharp", "http.method": "GET", "http.status_code": "200", @@ -113,6 +114,7 @@ "metrics": { "_dd.top_level": 1, "_dd.tracer_kr": 1, + "_sampling_priority_rate_v1": 1, "_sampling_priority_v1": 1, "_top_level": 1, "process_id": null diff --git a/test/integration/serverless/snapshots/trace-go b/test/integration/serverless/snapshots/trace-go index e1747ab1fbe51f..23b01771d794ed 100644 --- a/test/integration/serverless/snapshots/trace-go +++ b/test/integration/serverless/snapshots/trace-go @@ -22,12 +22,12 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-go", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-go", "functionname": "integration-tests-extension-XXXXXX-trace-go", "memorysize": "1024", "region": "eu-west-1", @@ -40,9 +40,10 @@ "version": "integration-tests-version" }, "metrics": { + "_sampling_priority_rate_v1": 1, "_top_level": 1 }, - "type": "" + "type": "serverless" } ], "tags": null, @@ -79,15 +80,15 @@ "_dd.compute_stats": "1", "_dd.origin": "lambda", "_dd.p.upstream_services": "YXdzLmxhbWJkYQ|1|1|1.0000", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "cold_start": "true", "datadog_lambda": "X.X.X", "dd_extension_version": "123", "dd_trace": "X.X.X", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-go", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-go", "function_version": "$LATEST", "functionname": "integration-tests-extension-XXXXXX-trace-go", "memorysize": "1024", @@ -127,12 +128,12 @@ "meta": { "_dd.compute_stats": "1", "_dd.origin": "lambda", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-go", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-go", "functionname": "integration-tests-extension-XXXXXX-trace-go", "http.method": "GET", "http.status_code": "200", @@ -168,12 +169,12 @@ "meta": { "_dd.compute_stats": "1", "_dd.origin": "lambda", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-go", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-go", "functionname": "integration-tests-extension-XXXXXX-trace-go", "memorysize": "1024", "region": "eu-west-1", @@ -228,15 +229,15 @@ "_dd.compute_stats": "1", "_dd.origin": "lambda", "_dd.p.upstream_services": "YXdzLmxhbWJkYQ|1|1|1.0000", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "cold_start": "false", "datadog_lambda": "X.X.X", "dd_extension_version": "123", "dd_trace": "X.X.X", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-go", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-go", "function_version": "$LATEST", "functionname": "integration-tests-extension-XXXXXX-trace-go", "memorysize": "1024", @@ -276,12 +277,12 @@ "meta": { "_dd.compute_stats": "1", "_dd.origin": "lambda", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-go", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-go", "functionname": "integration-tests-extension-XXXXXX-trace-go", "http.method": "GET", "http.status_code": "200", @@ -317,12 +318,12 @@ "meta": { "_dd.compute_stats": "1", "_dd.origin": "lambda", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-go", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-go", "functionname": "integration-tests-extension-XXXXXX-trace-go", "memorysize": "1024", "region": "eu-west-1", diff --git a/test/integration/serverless/snapshots/trace-java b/test/integration/serverless/snapshots/trace-java index bcfd53b4bb9da1..40a7dd423a0455 100644 --- a/test/integration/serverless/snapshots/trace-java +++ b/test/integration/serverless/snapshots/trace-java @@ -1,7 +1,7 @@ [ { "container_id": "", - "language_name": "", + "language_name": "java", "language_version": null, "tracer_version": null, "runtime_id": "", @@ -12,7 +12,7 @@ "spans": [ { "service": "integration-tests-service", - "name": "aws.lambda.cold_start", + "name": "aws.lambda", "resource": "integration-tests-extension-XXXXXX-trace-java", "trace_id": null, "span_id": null, @@ -22,25 +22,39 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", + "cold_start": "true", + "datadog_lambda": "X.X.X", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-java", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-java", + "function_version": "$LATEST", "functionname": "integration-tests-extension-XXXXXX-trace-java", + "language": "jvm", "memorysize": "1024", "region": "eu-west-1", + "request_id": "null", + "resource_names": "integration-tests-extension-XXXXXX-trace-java", "runtime": "java8.al2", + "runtime-id": "null", "service": "integration-tests-service", + "tagA": "valueA", + "tagB": "valueB", "taga": "valuea", "tagb": "valueb", "tagc": "valuec", "tagd": "valued", + "thread.name": "main", "version": "integration-tests-version" }, "metrics": { - "_top_level": 1 + "_dd.agent_psr": 1, + "_dd.top_level": 1, + "_sampling_priority_v1": 1, + "_top_level": 1, + "thread.id": 1 }, "type": "" } @@ -56,7 +70,7 @@ }, { "container_id": "", - "language_name": "java", + "language_name": "", "language_version": null, "tracer_version": null, "runtime_id": "", @@ -67,7 +81,7 @@ "spans": [ { "service": "integration-tests-service", - "name": "aws.lambda", + "name": "aws.lambda.cold_start", "resource": "integration-tests-extension-XXXXXX-trace-java", "trace_id": null, "span_id": null, @@ -77,41 +91,28 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", - "cold_start": "true", - "datadog_lambda": "X.X.X", + "aws_account": "425362996713", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-java", - "function_version": "$LATEST", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-java", "functionname": "integration-tests-extension-XXXXXX-trace-java", - "language": "jvm", "memorysize": "1024", "region": "eu-west-1", - "request_id": "null", - "resource_names": "integration-tests-extension-XXXXXX-trace-java", "runtime": "java8.al2", - "runtime-id": "null", "service": "integration-tests-service", - "tagA": "valueA", - "tagB": "valueB", "taga": "valuea", "tagb": "valueb", "tagc": "valuec", "tagd": "valued", - "thread.name": "main", "version": "integration-tests-version" }, "metrics": { - "_dd.agent_psr": 1, - "_dd.top_level": 1, - "_sampling_priority_v1": 1, - "_top_level": 1, - "thread.id": 1 + "_sampling_priority_rate_v1": 1, + "_top_level": 1 }, - "type": "" + "type": "serverless" } ], "tags": null, @@ -146,14 +147,14 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "cold_start": "false", "datadog_lambda": "X.X.X", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-java", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-java", "function_version": "$LATEST", "functionname": "integration-tests-extension-XXXXXX-trace-java", "language": "jvm", diff --git a/test/integration/serverless/snapshots/trace-node b/test/integration/serverless/snapshots/trace-node index f48a632647f405..14604c1acd8c2a 100644 --- a/test/integration/serverless/snapshots/trace-node +++ b/test/integration/serverless/snapshots/trace-node @@ -1,7 +1,7 @@ [ { "container_id": "", - "language_name": "", + "language_name": "nodejs", "language_version": null, "tracer_version": null, "runtime_id": "", @@ -12,8 +12,8 @@ "spans": [ { "service": "integration-tests-service", - "name": "aws.lambda.cold_start", - "resource": "integration-tests-extension-XXXXXX-trace-node", + "name": "integration_test", + "resource": "integration-test", "trace_id": null, "span_id": null, "parent_id": null, @@ -22,17 +22,20 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "account_id": "601427279990", + "_dd.origin": "lambda", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-node", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-node", "functionname": "integration-tests-extension-XXXXXX-trace-node", + "language": "javascript", "memorysize": "1024", "region": "eu-west-1", "runtime": "nodejs14.x", "service": "integration-tests-service", + "tagA": "valueA tagB:valueB", "taga": "valuea", "tagb": "valueb", "tagc": "valuec", @@ -40,35 +43,16 @@ "version": "integration-tests-version" }, "metrics": { - "_top_level": 1 + "_dd.measured": 1, + "_sample_rate": 1, + "_sampling_priority_v1": 1 }, "type": "" - } - ], - "tags": null, - "dropped_trace": false - } - ], - "tags": null, - "env": "integration-tests-env", - "hostname": "", - "app_version": "integration-tests-version" - }, - { - "container_id": "", - "language_name": "nodejs", - "language_version": null, - "tracer_version": null, - "runtime_id": "", - "chunks": [ - { - "priority": 1, - "origin": "lambda", - "spans": [ + }, { "service": "integration-tests-service", - "name": "integration_test", - "resource": "integration-test", + "name": "aws.lambda", + "resource": "integration-tests-extension-XXXXXX-trace-node", "trace_id": null, "span_id": null, "parent_id": null, @@ -78,16 +62,22 @@ "meta": { "_dd.compute_stats": "1", "_dd.origin": "lambda", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", + "cold_start": "true", + "datadog_lambda": "X.X.X", "dd_extension_version": "123", + "dd_trace": "X.X.X", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-node", + "function.response.body": "ok", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-node", + "function_version": "$LATEST", "functionname": "integration-tests-extension-XXXXXX-trace-node", - "language": "javascript", "memorysize": "1024", "region": "eu-west-1", + "request_id": "null", + "resource_names": "integration-tests-extension-XXXXXX-trace-node", "runtime": "nodejs14.x", "service": "integration-tests-service", "tagA": "valueA tagB:valueB", @@ -98,15 +88,39 @@ "version": "integration-tests-version" }, "metrics": { + "_dd.agent_psr": 1, "_dd.measured": 1, "_sample_rate": 1, - "_sampling_priority_v1": 1 + "_sampling_priority_v1": 1, + "_top_level": 1, + "function.response.statusCode": 200 }, - "type": "" - }, + "type": "serverless" + } + ], + "tags": null, + "dropped_trace": false + } + ], + "tags": null, + "env": "integration-tests-env", + "hostname": "", + "app_version": "integration-tests-version" + }, + { + "container_id": "", + "language_name": "", + "language_version": null, + "tracer_version": null, + "runtime_id": "", + "chunks": [ + { + "priority": 1, + "origin": "lambda", + "spans": [ { "service": "integration-tests-service", - "name": "aws.lambda", + "name": "aws.lambda.cold_start", "resource": "integration-tests-extension-XXXXXX-trace-node", "trace_id": null, "span_id": null, @@ -116,26 +130,17 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "_dd.origin": "lambda", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", - "cold_start": "true", - "datadog_lambda": "X.X.X", + "aws_account": "425362996713", "dd_extension_version": "123", - "dd_trace": "X.X.X", "env": "integration-tests-env", - "function.response.body": "ok", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-node", - "function_version": "$LATEST", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-node", "functionname": "integration-tests-extension-XXXXXX-trace-node", "memorysize": "1024", "region": "eu-west-1", - "request_id": "null", - "resource_names": "integration-tests-extension-XXXXXX-trace-node", "runtime": "nodejs14.x", "service": "integration-tests-service", - "tagA": "valueA tagB:valueB", "taga": "valuea", "tagb": "valueb", "tagc": "valuec", @@ -143,12 +148,8 @@ "version": "integration-tests-version" }, "metrics": { - "_dd.agent_psr": 1, - "_dd.measured": 1, - "_sample_rate": 1, - "_sampling_priority_v1": 1, - "_top_level": 1, - "function.response.statusCode": 200 + "_sampling_priority_rate_v1": 1, + "_top_level": 1 }, "type": "serverless" } @@ -186,12 +187,12 @@ "meta": { "_dd.compute_stats": "1", "_dd.origin": "lambda", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-node", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-node", "functionname": "integration-tests-extension-XXXXXX-trace-node", "language": "javascript", "memorysize": "1024", @@ -225,9 +226,9 @@ "meta": { "_dd.compute_stats": "1", "_dd.origin": "lambda", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "cold_start": "false", "datadog_lambda": "X.X.X", "dd_extension_version": "123", @@ -235,7 +236,7 @@ "env": "integration-tests-env", "function.request.body": "testing request payload", "function.response.body": "ok", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-node", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-node", "function_version": "$LATEST", "functionname": "integration-tests-extension-XXXXXX-trace-node", "memorysize": "1024", diff --git a/test/integration/serverless/snapshots/trace-proxy b/test/integration/serverless/snapshots/trace-proxy index 8b137891791fe9..059f4251737b11 100644 --- a/test/integration/serverless/snapshots/trace-proxy +++ b/test/integration/serverless/snapshots/trace-proxy @@ -1 +1,3 @@ - +{ + "error": "normalization raised exception" +} diff --git a/test/integration/serverless/snapshots/trace-python b/test/integration/serverless/snapshots/trace-python index b8821ad44ff2a9..dc673bda42c5aa 100644 --- a/test/integration/serverless/snapshots/trace-python +++ b/test/integration/serverless/snapshots/trace-python @@ -22,12 +22,12 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-python", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-python", "functionname": "integration-tests-extension-XXXXXX-trace-python", "memorysize": "1024", "region": "eu-west-1", @@ -40,9 +40,10 @@ "version": "integration-tests-version" }, "metrics": { + "_sampling_priority_rate_v1": 1, "_top_level": 1 }, - "type": "" + "type": "serverless" } ], "tags": null, @@ -78,16 +79,16 @@ "meta": { "_dd.compute_stats": "1", "_dd.origin": "lambda", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "cold_start": "true", "datadog_lambda": "X.X.X", "dd_extension_version": "123", "dd_trace": "X.X.X", "env": "integration-tests-env", "function.response.body": "ok", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-python", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-python", "function_version": "$LATEST", "functionname": "integration-tests-extension-XXXXXX-trace-python", "memorysize": "1024", @@ -128,12 +129,12 @@ "meta": { "_dd.compute_stats": "1", "_dd.origin": "lambda", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-python", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-python", "functionname": "integration-tests-extension-XXXXXX-trace-python", "memorysize": "1024", "region": "eu-west-1", @@ -184,9 +185,9 @@ "meta": { "_dd.compute_stats": "1", "_dd.origin": "lambda", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "cold_start": "false", "datadog_lambda": "X.X.X", "dd_extension_version": "123", @@ -194,7 +195,7 @@ "env": "integration-tests-env", "function.request.body": "testing request payload", "function.response.body": "ok", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-python", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-python", "function_version": "$LATEST", "functionname": "integration-tests-extension-XXXXXX-trace-python", "memorysize": "1024", @@ -235,12 +236,12 @@ "meta": { "_dd.compute_stats": "1", "_dd.origin": "lambda", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-python", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-python", "functionname": "integration-tests-extension-XXXXXX-trace-python", "memorysize": "1024", "region": "eu-west-1", diff --git a/test/kitchen/drivers/azure-driver.yml b/test/kitchen/drivers/azure-driver.yml index 9d351ca859aa53..95671206cbdeda 100644 --- a/test/kitchen/drivers/azure-driver.yml +++ b/test/kitchen/drivers/azure-driver.yml @@ -1,12 +1,21 @@ <% ENV['AZURE_LOCATION'] ||= "North Central US" location = ENV['AZURE_LOCATION'] + + change_mount_dir = ENV['AZURE_KITCHEN_MOUNT_DIR'] + ENV['AZURE_KITCHEN_MOUNT_DIR'] ||= "/mnt/kitchen" + mount_dir = ENV['AZURE_KITCHEN_MOUNT_DIR'] + + change_target_mount_dir = ENV['AZURE_KITCHEN_TARGET_MOUNT_DIR'] + ENV['AZURE_KITCHEN_TARGET_MOUNT_DIR'] ||= "/tmp/kitchen" + target_mount_dir = ENV['AZURE_KITCHEN_TARGET_MOUNT_DIR'] %> <% vm_tags = { 'dd_agent_testing': 'dd_agent_testing' } + vm_username = ENV['VM_USERNAME'] ? ENV['VM_USERNAME'] : "datadog" if ENV['DD_PIPELINE_ID'] vm_tags['pipeline_id'] = ENV['DD_PIPELINE_ID'] else @@ -16,6 +25,9 @@ provisioner: name: chef_solo + <% if change_target_mount_dir %> + root_path: <%= ENV['AZURE_KITCHEN_TARGET_MOUNT_DIR'] %>/kitchen + <% end %> product_name: chef # There is no arm64 distribution of Chef 14 for Debian. Use the Ubuntu package instead <% if ENV['KITCHEN_PLATFORM'] == "debian" && ENV['KITCHEN_ARCH'] == "arm64" %> @@ -46,9 +58,13 @@ driver_config: custom_data: | #cloud-config runcmd: - - mkdir /mnt/kitchen - - chmod a+rwx /mnt/kitchen - - ln -s /mnt/kitchen /tmp/kitchen + - mkdir <%= mount_dir %> + - chmod -R a+rwx <%= mount_dir %> + - ln -s <%= mount_dir %> <%= target_mount_dir %> + <% if change_mount_dir %> + - mkdir <%= mount_dir %>/kitchen + - chown -R <%= vm_username %>:<%= vm_username %> <%= target_mount_dir %>/kitchen + <% end %> platforms: # Loop through two lists and output a total matrix of all possible platform + chef versions, @@ -120,7 +136,6 @@ platforms: ed25519_platforms = [] use_ed25519 = ed25519_platforms.any? { |p| platform_name.include?(p) } - vm_username = ENV['VM_USERNAME'] ? ENV['VM_USERNAME'] : "datadog" vm_password = ENV['SERVER_PASSWORD'] %> @@ -160,6 +175,17 @@ platforms: username: <%= vm_username %> password: <%= vm_password %> + lifecycle: + # HACK: this is needed to install rexml for system-probe tests without using bundler, which cannot be used for now + # (see the explanation in tasks/run-test-kitchen.sh). + pre_verify: + - local: echo 'Installing rexml gem for the system-probe-test suite' + <% if windows %> + - remote: C:/opscode/chef/embedded/bin/gem.bat install rexml --install-dir C:/Users/<%= vm_username %>/AppData/Local/Temp/verifier/gems + <% else %> + - remote: /opt/chef/embedded/bin/gem install rexml --install-dir /tmp/verifier/gems + <% end %> + transport: <% if windows %> name: winrm diff --git a/test/kitchen/drivers/ec2-driver.yml b/test/kitchen/drivers/ec2-driver.yml index ed03091976dec5..8e56b68b0bf110 100644 --- a/test/kitchen/drivers/ec2-driver.yml +++ b/test/kitchen/drivers/ec2-driver.yml @@ -102,13 +102,13 @@ platforms: image_id: <%= platform[1] %> block_device_mappings: <% if ENV['KITCHEN_ARCH'] == "arm64" %> - - device_name: /dev/sda1 + - device_name: <%= ENV['KITCHEN_EC2_DEVICE_NAME'] || "/dev/sda1" %> <% else %> - - device_name: /dev/xvda + - device_name: <%= ENV['KITCHEN_EC2_DEVICE_NAME'] || "/dev/xvda" %> <% end %> ebs: volume_type: gp2 - volume_size: 40 + volume_size: 45 delete_on_termination: true <% if allow_rsa_key || al2022 %> user_data: | @@ -143,6 +143,15 @@ platforms: let i+=${wait}; done; <% end %> + # HACK: this is needed to install rexml for system-probe tests without using bundler, which cannot be used for now + # (see the explanation in tasks/run-test-kitchen.sh). + pre_verify: + - local: echo 'Installing rexml gem for the system-probe-test suite' + <% if windows %> + - remote: C:/opscode/chef/embedded/bin/gem.bat install rexml --install-dir C:/Users/ec2-user/AppData/Local/Temp/verifier/gems + <% else %> + - remote: /opt/chef/embedded/bin/gem install rexml --install-dir /tmp/verifier/gems + <% end %> verifier: downloads: "/tmp/junit.tar.gz": kitchen-junit-<%= platform_name %>.tar.gz diff --git a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_stop_windows_agent.rb b/test/kitchen/site-cookbooks/dd-agent-install/recipes/_stop_windows_agent.rb index c837b124d44e2b..9da062811c1035 100644 --- a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_stop_windows_agent.rb +++ b/test/kitchen/site-cookbooks/dd-agent-install/recipes/_stop_windows_agent.rb @@ -6,6 +6,17 @@ powershell_script 'stop-datadog-agent' do code <<-EOH - Stop-Service -Force -Name "#{node['dd-agent-install']['agent_name']}" + $serviceName = "#{node['dd-agent-install']['agent_name']}" + sc.exe query $serviceName; + $agentService = Get-Service -Name $serviceName; + if ($agentService.Status -eq "running") + { + foreach($dependentService in $agentService.DependentServices | Where-Object { $_.status -eq 'running' }) + { + Write-Host "Stopping " + $dependentService.name; + sc.exe stop $dependentService.name + } + sc.exe stop $serviceName + } EOH end diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/.gitignore b/test/kitchen/site-cookbooks/dd-system-probe-check/.gitignore index 52bab439b7c42c..bae3233263f539 100644 --- a/test/kitchen/site-cookbooks/dd-system-probe-check/.gitignore +++ b/test/kitchen/site-cookbooks/dd-system-probe-check/.gitignore @@ -4,3 +4,4 @@ files/default/clang-bpf files/default/llc-bpf files/default/gotestsum files/default/test2json +files/default/minimized-btfs.tar.xz diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/metadata.rb b/test/kitchen/site-cookbooks/dd-system-probe-check/metadata.rb index eea1c137097904..c3ce3f2c0bc8d7 100644 --- a/test/kitchen/site-cookbooks/dd-system-probe-check/metadata.rb +++ b/test/kitchen/site-cookbooks/dd-system-probe-check/metadata.rb @@ -4,3 +4,4 @@ long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) version "0.1.0" depends "yum-centos", "~> 5.0.0" +depends 'docker' diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/recipes/docker_installation.rb b/test/kitchen/site-cookbooks/dd-system-probe-check/recipes/docker_installation.rb new file mode 100644 index 00000000000000..a82779a257564c --- /dev/null +++ b/test/kitchen/site-cookbooks/dd-system-probe-check/recipes/docker_installation.rb @@ -0,0 +1,56 @@ +case node[:platform] +when 'ubuntu', 'debian' + package 'gnupg' + + package 'unattended-upgrades' do + action :remove + end + + package 'xfsprogs' +when 'centos' + package 'xfsprogs' +when 'redhat' + execute 'install docker-compose' do + command <<-EOF + dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo + dnf install -y docker-ce-19.03.13 + EOF + user "root" + live_stream true + end +end + +case node[:platform] +when 'amazon' + docker_installation_package 'default' do + action :create + package_name 'docker' + package_options %q|-y| + end + + service 'docker' do + action [ :enable, :start ] + end +when 'ubuntu' + docker_installation_package 'default' do + action :create + package_name 'docker.io' + end +when 'redhat' + docker_service 'default' do + action [:start] + end +else + docker_service 'default' do + action [:create, :start] + end +end + +execute 'install docker-compose' do + command <<-EOF + curl -SL https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-$(uname -s | awk '{print tolower($0)}')-$(uname -m) -o /usr/bin/docker-compose + chmod 0755 /usr/bin/docker-compose + EOF + user "root" + live_stream true +end diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/recipes/linux.rb b/test/kitchen/site-cookbooks/dd-system-probe-check/recipes/linux.rb index 6c54c23c181f15..9ac45b8ddbb319 100644 --- a/test/kitchen/site-cookbooks/dd-system-probe-check/recipes/linux.rb +++ b/test/kitchen/site-cookbooks/dd-system-probe-check/recipes/linux.rb @@ -80,6 +80,28 @@ action :run end +if Chef::SystemProbeHelpers::arm?(node) and node[:platform] == 'centos' + package 'cloud-utils-growpart' + package 'gdisk' + + execute 'increase space' do + command <<-EOF + df -h /tmp + + dev_name=$(df -h / | tail -n1 | awk '{print $1}') + dev_name=$(python3 -c "print(' '.join('$dev_name'.rsplit('p', 1)))") + dev_name_array=($dev_name) + + growpart ${dev_name_array[0]} ${dev_name_array[1]} + xfs_growfs -d / + df -h /tmp + EOF + user "root" + live_stream true + ignore_failure true + end +end + execute 'disable firewalld on redhat' do command "systemctl disable --now firewalld" user "root" @@ -162,3 +184,29 @@ directory "/tmp/pkgjson" do recursive true end + +# Install relevant packages for docker +include_recipe "::docker_installation" + +remote_directory "/tmp/kitchen-dockers" do + source 'dockers' + files_owner 'root' + files_group 'root' + files_mode '0750' + action :create + recursive true +end + +# Load docker images +execute 'install docker-compose' do + cwd '/tmp/kitchen-dockers' + command <<-EOF + for docker_file in $(ls); do + echo docker load -i $docker_file + docker load -i $docker_file + rm -rf $docker_file + done + EOF + user "root" + live_stream true +end diff --git a/test/kitchen/tasks/run-test-kitchen.sh b/test/kitchen/tasks/run-test-kitchen.sh index b9caaa8a0cbfbe..5028eb84e1af2e 100755 --- a/test/kitchen/tasks/run-test-kitchen.sh +++ b/test/kitchen/tasks/run-test-kitchen.sh @@ -149,8 +149,24 @@ set +o pipefail test_suites=".*" # This for loop retries kitchen tests failing because of infrastructure/networking issues for attempt in $(seq 0 "${KITCHEN_INFRASTRUCTURE_FLAKES_RETRY:-2}"); do - bundle exec kitchen verify "$test_suites" -c -d always 2>&1 | tee "/tmp/runlog${attempt}" - result=${PIPESTATUS[0]} + bundle exec kitchen converge "$test_suites" -c -d always 2>&1 | tee "/tmp/runlog${attempt}" + converge_result=${PIPESTATUS[0]} + + # HACK: Since December 24, 2022, the first verify attempt always fails, due to a bundler <-> ruby + # version issue at the start of the verifier. + # The kitchen verifier uses the latest version of busser (0.8.0). busser detects that we have rspec tests, + # and therefore installs the latest version of the busser-rspec gem (0.7.6). + # The busser-rspec gem has a postinstall hook that installs the latest versions of the rspec and bundler gems. + # The rspec install goes fine, but the bundler install fails since December 24, 2022, when 2.4.0 of bundler + # was released, which drops support for ruby < 2.6. + # Running kitchen verify another time does work, because the postinstall hook isn't run again, + # and we don't actually need bundler in the test suites (for suites that do have depedencies, we install them + # manually with lifecycle hooks in the platform definitions). + bundle exec kitchen verify "$test_suites" --no-log-overwrite -c -d always 2>&1 || true + + bundle exec kitchen verify "$test_suites" --no-log-overwrite -c -d always 2>&1 | tee -a "/tmp/runlog${attempt}" + verify_result=${PIPESTATUS[0]} + # Before destroying the kitchen machines, get the list of failed suites, # as their status will be reset to non-failing once they're destroyed. # failing_test_suites is a newline-separated list of the failing test suite names. @@ -170,7 +186,7 @@ for attempt in $(seq 0 "${KITCHEN_INFRASTRUCTURE_FLAKES_RETRY:-2}"); do break fi - if [ "$result" -eq 0 ]; then + if [ "$converge_result" -eq 0 ] && [ "$verify_result" -eq 0 ]; then # if kitchen test succeeded, exit with 0 exit 0 else diff --git a/test/kitchen/test/integration/common/rspec/spec_helper.rb b/test/kitchen/test/integration/common/rspec/spec_helper.rb index becbfc52e698e1..a4a940814fa391 100644 --- a/test/kitchen/test/integration/common/rspec/spec_helper.rb +++ b/test/kitchen/test/integration/common/rspec/spec_helper.rb @@ -550,11 +550,24 @@ def is_dpkg_package_installed(package) end shared_examples_for "a running Agent with APM" do + if os == :windows + it 'has the apm agent running' do + expect(is_process_running?("trace-agent.exe")).to be_truthy + expect(is_service_running?("datadog-trace-agent")).to be_truthy + end + end it 'is bound to the port that receives traces by default' do expect(is_port_bound(8126)).to be_truthy end end +shared_examples_for "a running Agent with process enabled" do + it 'has the process agent running' do + expect(is_process_running?("process-agent.exe")).to be_truthy + expect(is_service_running?("datadog-process-agent")).to be_truthy + end +end + shared_examples_for "a running Agent with APM manually disabled" do it 'is not bound to the port that receives traces when apm_enabled is set to false' do conf_path = "" @@ -845,11 +858,6 @@ def is_dpkg_package_installed(package) expect(confYaml).to have_key("apm_config") expect(confYaml["apm_config"]).to have_key("enabled") expect(confYaml["apm_config"]["enabled"]).to be_truthy - expect(is_port_bound(8126)).to be_truthy - end - it 'has the apm agent running' do - expect(is_process_running?("trace-agent.exe")).to be_truthy - expect(is_service_running?("datadog-trace-agent")).to be_truthy end end @@ -870,10 +878,6 @@ def is_dpkg_package_installed(package) expect(confYaml["process_config"]["process_collection"]).to have_key("enabled") expect(confYaml["process_config"]["process_collection"]["enabled"]).to be_truthy end - it 'has the process agent running' do - expect(is_process_running?("process-agent.exe")).to be_truthy - expect(is_service_running?("datadog-process-agent")).to be_truthy - end end shared_examples_for 'an upgraded Agent with the expected version' do diff --git a/test/kitchen/test/integration/system-probe-test/rspec/Gemfile b/test/kitchen/test/integration/system-probe-test/rspec/Gemfile deleted file mode 100644 index e4324aac6dbce3..00000000000000 --- a/test/kitchen/test/integration/system-probe-test/rspec/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem 'rspec' -gem 'rexml' diff --git a/test/kitchen/test/integration/win-all-subservices/rspec/win-all-subservices_spec.rb b/test/kitchen/test/integration/win-all-subservices/rspec/win-all-subservices_spec.rb index 0cf8e828f27f8b..8ce9dc96f6656f 100644 --- a/test/kitchen/test/integration/win-all-subservices/rspec/win-all-subservices_spec.rb +++ b/test/kitchen/test/integration/win-all-subservices/rspec/win-all-subservices_spec.rb @@ -4,9 +4,11 @@ describe 'win-all-subservices' do it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' it_behaves_like 'an Agent with APM enabled' it_behaves_like 'an Agent with logs enabled' it_behaves_like 'an Agent with process enabled' + it_behaves_like 'a running Agent with no errors' + it_behaves_like 'a running Agent with APM' + it_behaves_like 'a running Agent with process enabled' end \ No newline at end of file diff --git a/test/kitchen/test/integration/win-user/rspec/win-user_spec.rb b/test/kitchen/test/integration/win-user/rspec/win-user_spec.rb index ec3e2a583c61de..d915f0c7d9a437 100644 --- a/test/kitchen/test/integration/win-user/rspec/win-user_spec.rb +++ b/test/kitchen/test/integration/win-user/rspec/win-user_spec.rb @@ -148,9 +148,11 @@ end describe 'dd-agent-win-user' do # it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' it_behaves_like 'an Agent with APM enabled' it_behaves_like 'an Agent with process enabled' it_behaves_like 'an Agent with valid permissions' + it_behaves_like 'a running Agent with no errors' + it_behaves_like 'a running Agent with APM' + it_behaves_like 'a running Agent with process enabled' end \ No newline at end of file diff --git a/test/new-e2e/containers/ecs_test.go b/test/new-e2e/containers/ecs_test.go new file mode 100644 index 00000000000000..82b4aea9a8cb7b --- /dev/null +++ b/test/new-e2e/containers/ecs_test.go @@ -0,0 +1,79 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package containers + +import ( + "context" + "errors" + "fmt" + "testing" + "time" + + "github.com/DataDog/test-infra-definitions/aws/ecs/ecs" + "github.com/cenkalti/backoff" + + "github.com/DataDog/datadog-agent/test/new-e2e/utils/credentials" + "github.com/DataDog/datadog-agent/test/new-e2e/utils/infra" + + "github.com/pulumi/pulumi/sdk/v3/go/auto" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" + "github.com/stretchr/testify/require" + + datadog "gopkg.in/zorkian/go-datadog-api.v2" +) + +func TestAgentOnECS(t *testing.T) { + // Fetching credentials + credentialsManager := credentials.NewManager() + apiKey, err := credentialsManager.GetCredential(credentials.AWSSSMStore, "agent.ci.dev.apikey") + require.NoError(t, err) + appKey, err := credentialsManager.GetCredential(credentials.AWSSSMStore, "agent.ci.dev.appkey") + require.NoError(t, err) + + // Creating the stack + parameters := auto.ConfigMap{ + "ddinfra:aws/ecs/linuxECSOptimizedNodeGroup": auto.ConfigValue{Value: "false"}, + "ddinfra:aws/ecs/linuxBottlerocketNodeGroup": auto.ConfigValue{Value: "false"}, + "ddinfra:aws/ecs/windowsLTSCNodeGroup": auto.ConfigValue{Value: "false"}, + "ddagent:apiKey": auto.ConfigValue{Value: apiKey, Secret: true}, + } + stackOutput, err := infra.GetStackManager().GetStack(context.Background(), "aws/sandbox", "ecs-cluster", parameters, func(ctx *pulumi.Context) error { + return ecs.Run(ctx) + }) + require.NoError(t, err) + + ecsClusterName := stackOutput.Outputs["ecs-cluster-name"].Value.(string) + ecsTaskFamily := stackOutput.Outputs["ecs-task-family"].Value.(string) + ecsTaskVersion := stackOutput.Outputs["ecs-task-version"].Value.(float64) + + // Check content in Datadog + datadogClient := datadog.NewClient(apiKey, appKey) + query := fmt.Sprintf("avg:ecs.fargate.cpu.user{ecs_cluster_name:%s,ecs_task_family:%s,ecs_task_version:%.0f} by {ecs_container_name}", ecsClusterName, ecsTaskFamily, ecsTaskVersion) + t.Log(query) + + err = backoff.Retry(func() error { + currentTime := time.Now().Unix() + series, err := datadogClient.QueryMetrics(currentTime-120, currentTime, query) + if err != nil { + return err + } + + if len(series) == 0 { + return errors.New("No data yet") + } + + if len(series) != 3 { + return errors.New("Not all containers") + } + + if series[0].Points[0][1] == nil || *series[0].Points[0][1] == 0 { + return errors.New("0-value") + } + + return nil + }, backoff.WithMaxRetries(backoff.NewConstantBackOff(20*time.Second), 20)) + require.NoError(t, err) +} diff --git a/test/new-e2e/containers/main_test.go b/test/new-e2e/containers/main_test.go new file mode 100644 index 00000000000000..566066c129fc40 --- /dev/null +++ b/test/new-e2e/containers/main_test.go @@ -0,0 +1,25 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package containers + +import ( + "context" + "fmt" + "os" + "testing" + + "github.com/DataDog/datadog-agent/test/new-e2e/utils/infra" +) + +func TestMain(m *testing.M) { + code := m.Run() + fmt.Fprintf(os.Stderr, "Cleaning up stacks") + errs := infra.GetStackManager().Cleanup(context.Background()) + for _, err := range errs { + fmt.Fprint(os.Stderr, err.Error()) + } + os.Exit(code) +} diff --git a/test/new-e2e/go.mod b/test/new-e2e/go.mod new file mode 100644 index 00000000000000..6155e04bbd60ec --- /dev/null +++ b/test/new-e2e/go.mod @@ -0,0 +1,104 @@ +module github.com/DataDog/datadog-agent/test/new-e2e + +go 1.18 + +require ( + github.com/DataDog/test-infra-definitions v0.0.0-20221213160310-a4b5a27ec1dd + github.com/aws/aws-sdk-go-v2 v1.17.2 + github.com/aws/aws-sdk-go-v2/config v1.18.4 + github.com/aws/aws-sdk-go-v2/service/ssm v1.33.2 + github.com/cenkalti/backoff v2.2.1+incompatible + github.com/pulumi/pulumi/sdk/v3 v3.49.0 + github.com/stretchr/testify v1.8.1 + golang.org/x/crypto v0.4.0 + gopkg.in/zorkian/go-datadog-api.v2 v2.30.0 +) + +require ( + github.com/HdrHistogram/hdrhistogram-go v1.1.2 // indirect + github.com/Masterminds/semver v1.5.0 // indirect + github.com/Microsoft/go-winio v0.6.0 // indirect + github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 // indirect + github.com/acomagu/bufpipe v1.0.3 // indirect + github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.13.4 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.20 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.26 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.20 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.3.27 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.20 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.11.26 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.9 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.17.6 // indirect + github.com/aws/smithy-go v1.13.5 // indirect + github.com/blang/semver v3.5.1+incompatible // indirect + github.com/cheggaaa/pb v1.0.29 // indirect + github.com/cloudflare/circl v1.3.0 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/djherbis/times v1.5.0 // indirect + github.com/emirpasic/gods v1.18.1 // indirect + github.com/fatih/color v1.13.0 // indirect + github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/go-git/gcfg v1.5.0 // indirect + github.com/go-git/go-billy/v5 v5.3.1 // indirect + github.com/go-git/go-git/v5 v5.5.1 // indirect + github.com/gofrs/uuid v4.3.1+incompatible // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/glog v1.0.0 // indirect + github.com/golang/protobuf v1.5.2 // indirect + github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/imdario/mergo v0.3.13 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/kevinburke/ssh_config v1.2.0 // indirect + github.com/mattn/go-colorable v0.1.12 // indirect + github.com/mattn/go-isatty v0.0.16 // indirect + github.com/mattn/go-runewidth v0.0.14 // indirect + github.com/mitchellh/go-ps v1.0.0 // indirect + github.com/nxadm/tail v1.4.8 // indirect + github.com/opentracing/basictracer-go v1.1.0 // indirect + github.com/opentracing/opentracing-go v1.2.0 // indirect + github.com/pjbgf/sha1cd v0.2.3 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pkg/term v1.1.0 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/pulumi/pulumi-aws/sdk/v5 v5.23.0 // indirect + github.com/pulumi/pulumi-awsx/sdk v1.0.0 // indirect + github.com/pulumi/pulumi-command/sdk v0.7.0 // indirect + github.com/pulumi/pulumi-docker/sdk/v3 v3.6.1 // indirect + github.com/pulumi/pulumi-kubernetes/sdk/v3 v3.22.2 // indirect + github.com/rivo/uniseg v0.4.3 // indirect + github.com/rogpeppe/go-internal v1.9.0 // indirect + github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 // indirect + github.com/santhosh-tekuri/jsonschema/v5 v5.1.1 // indirect + github.com/sergi/go-diff v1.2.0 // indirect + github.com/skeema/knownhosts v1.1.0 // indirect + github.com/spf13/cast v1.5.0 // indirect + github.com/spf13/cobra v1.6.1 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/texttheater/golang-levenshtein v1.0.1 // indirect + github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7 // indirect + github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect + github.com/uber/jaeger-lib v2.4.1+incompatible // indirect + github.com/xanzy/ssh-agent v0.3.3 // indirect + github.com/zorkian/go-datadog-api v2.30.0+incompatible // indirect + go.uber.org/atomic v1.10.0 // indirect + golang.org/x/mod v0.7.0 // indirect + golang.org/x/net v0.4.0 // indirect + golang.org/x/sys v0.3.0 // indirect + golang.org/x/term v0.3.0 // indirect + golang.org/x/text v0.5.0 // indirect + golang.org/x/tools v0.4.0 // indirect + google.golang.org/genproto v0.0.0-20221207170731-23e4bf6bdc37 // indirect + google.golang.org/grpc v1.51.0 // indirect + google.golang.org/protobuf v1.28.1 // indirect + gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect + gopkg.in/warnings.v0 v0.1.2 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + lukechampine.com/frand v1.4.2 // indirect + sourcegraph.com/sourcegraph/appdash v0.0.0-20211028080628-e2786a622600 // indirect +) diff --git a/test/new-e2e/go.sum b/test/new-e2e/go.sum new file mode 100644 index 00000000000000..ac7f6586fbae0c --- /dev/null +++ b/test/new-e2e/go.sum @@ -0,0 +1,503 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/DataDog/test-infra-definitions v0.0.0-20221213160310-a4b5a27ec1dd h1:NoPGW4gyLfOMlr10Eya/vv4vfw1nuaSxgqWhv4bNpuQ= +github.com/DataDog/test-infra-definitions v0.0.0-20221213160310-a4b5a27ec1dd/go.mod h1:weTpRyRbOZYDpYk06wIROZysIkYP3o0+QYErkcSJV8U= +github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= +github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= +github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= +github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= +github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= +github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= +github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 h1:ra2OtmuW0AE5csawV4YXMNGNQQXvLRps3z2Z59OPO+I= +github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= +github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= +github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= +github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY= +github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da/go.mod h1:eHEWzANqSiWQsof+nXEI9bUVUyV6F53Fp89EuCh2EAA= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/aws/aws-sdk-go-v2 v1.17.2 h1:r0yRZInwiPBNpQ4aDy/Ssh3ROWsGtKDwar2JS8Lm+N8= +github.com/aws/aws-sdk-go-v2 v1.17.2/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= +github.com/aws/aws-sdk-go-v2/config v1.18.4 h1:VZKhr3uAADXHStS/Gf9xSYVmmaluTUfkc0dcbPiDsKE= +github.com/aws/aws-sdk-go-v2/config v1.18.4/go.mod h1:EZxMPLSdGAZ3eAmkqXfYbRppZJTzFTkv8VyEzJhKko4= +github.com/aws/aws-sdk-go-v2/credentials v1.13.4 h1:nEbHIyJy7mCvQ/kzGG7VWHSBpRB4H6sJy3bWierWUtg= +github.com/aws/aws-sdk-go-v2/credentials v1.13.4/go.mod h1:/Cj5w9LRsNTLSwexsohwDME32OzJ6U81Zs33zr2ZWOM= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.20 h1:tpNOglTZ8kg9T38NpcGBxudqfUAwUzyUnLQ4XSd0CHE= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.20/go.mod h1:d9xFpWd3qYwdIXM0fvu7deD08vvdRXyc/ueV+0SqaWE= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.26 h1:5WU31cY7m0tG+AiaXuXGoMzo2GBQ1IixtWa8Yywsgco= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.26/go.mod h1:2E0LdbJW6lbeU4uxjum99GZzI0ZjDpAb0CoSCM0oeEY= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.20 h1:WW0qSzDWoiWU2FS5DbKpxGilFVlCEJPwx4YtjdfI0Jw= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.20/go.mod h1:/+6lSiby8TBFpTVXZgKiN/rCfkYXEGvhlM4zCgPpt7w= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.27 h1:N2eKFw2S+JWRCtTt0IhIX7uoGGQciD4p6ba+SJv4WEU= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.27/go.mod h1:RdwFVc7PBYWY33fa2+8T1mSqQ7ZEK4ILpM0wfioDC3w= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.20 h1:jlgyHbkZQAgAc7VIxJDmtouH8eNjOk2REVAQfVhdaiQ= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.20/go.mod h1:Xs52xaLBqDEKRcAfX/hgjmD3YQ7c/W+BEyfamlO/W2E= +github.com/aws/aws-sdk-go-v2/service/ssm v1.33.2 h1:NXq6I98AZ3rrnykgTp93ik4RykmYEInnGDc4I/mYQNk= +github.com/aws/aws-sdk-go-v2/service/ssm v1.33.2/go.mod h1:bUqD3OXwwp4e+IPXVPfp6g/7OyiSesUjqHwOcwtfZBM= +github.com/aws/aws-sdk-go-v2/service/sso v1.11.26 h1:ActQgdTNQej/RuUJjB9uxYVLDOvRGtUreXF8L3c8wyg= +github.com/aws/aws-sdk-go-v2/service/sso v1.11.26/go.mod h1:uB9tV79ULEZUXc6Ob18A46KSQ0JDlrplPni9XW6Ot60= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.9 h1:wihKuqYUlA2T/Rx+yu2s6NDAns8B9DgnRooB1PVhY+Q= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.9/go.mod h1:2E/3D/mB8/r2J7nK42daoKP/ooCwbf0q1PznNc+DZTU= +github.com/aws/aws-sdk-go-v2/service/sts v1.17.6 h1:VQFOLQVL3BrKM/NLO/7FiS4vcp5bqK0mGMyk09xLoAY= +github.com/aws/aws-sdk-go-v2/service/sts v1.17.6/go.mod h1:Az3OXXYGyfNwQNsK/31L4R75qFYnO641RZGAoV3uH1c= +github.com/aws/smithy-go v1.13.5 h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8= +github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= +github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= +github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cheggaaa/pb v1.0.18/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= +github.com/cheggaaa/pb v1.0.29 h1:FckUN5ngEk2LpvuG0fw1GEFx6LtyY2pWI/Z2QgCnEYo= +github.com/cheggaaa/pb v1.0.29/go.mod h1:W40334L7FMC5JKWldsTWbdGjLo0RxUKK73K+TuPxX30= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= +github.com/cloudflare/circl v1.3.0 h1:Anq00jxDtoyX3+aCaYUZ0vXC5r4k4epberfWGDXV1zE= +github.com/cloudflare/circl v1.3.0/go.mod h1:+CauBF6R70Jqcyl8N2hC8pAXYbWkGIezuSbuGLtRhnw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/djherbis/times v1.2.0/go.mod h1:CGMZlo255K5r4Yw0b9RRfFQpM2y7uOmxg4jm9HsaVf8= +github.com/djherbis/times v1.5.0 h1:79myA211VwPhFTqUk8xehWrsEO+zcIZj0zT8mXPVARU= +github.com/djherbis/times v1.5.0/go.mod h1:5q7FDLvbNg1L/KaBmPcWlVR9NmoKo3+ucqUA3ijQhA0= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= +github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= +github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= +github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= +github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= +github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-billy/v5 v5.3.1 h1:CPiOUAzKtMRvolEKw+bG1PLRpT7D3LIs3/3ey4Aiu34= +github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0= +github.com/go-git/go-git-fixtures/v4 v4.3.1 h1:y5z6dd3qi8Hl+stezc8p3JxDkoTRqMAlKnXHuzrfjTQ= +github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= +github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc= +github.com/go-git/go-git/v5 v5.5.1 h1:5vtv2TB5PM/gPM+EvsHJ16hJh4uAkdGcKilcwY7FYwo= +github.com/go-git/go-git/v5 v5.5.1/go.mod h1:uz5PQ3d0gz7mSgzZhSJToM6ALPaKCdSnl58/Xb5hzr8= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gofrs/uuid v4.3.1+incompatible h1:0/KbAdpx3UXAx1kEOWHJeOkpbgRFGHVgv+CFIY7dBJI= +github.com/gofrs/uuid v4.3.1+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-version v1.4.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= +github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= +github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= +github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.8/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= +github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= +github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= +github.com/opentracing/basictracer-go v1.1.0 h1:Oa1fTSBvAl8pa3U+IJYqrKm0NALwH9OsgwOqDv4xJW0= +github.com/opentracing/basictracer-go v1.1.0/go.mod h1:V2HZueSJEp879yv285Aap1BS69fQMD+MNP1mRs6mBQc= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/pjbgf/sha1cd v0.2.3 h1:uKQP/7QOzNtKYH7UTohZLcjF5/55EnTw0jO/Ru4jZwI= +github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/term v1.1.0 h1:xIAAdCMh3QIAy+5FrE8Ad8XoDhEU4ufwbaSozViP9kk= +github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/pulumi/pulumi-aws/sdk/v5 v5.23.0 h1:QTfjGgR0m8EonOJV+RNBG8r2Y1pgjqmxf3n4uYTq60g= +github.com/pulumi/pulumi-aws/sdk/v5 v5.23.0/go.mod h1:Ro2eNbpP/uGWMMvtBDrVph+jdL/G6+IiGB6kj+kDRYM= +github.com/pulumi/pulumi-awsx/sdk v1.0.0 h1:QIoPaK/ZYMduigfSrNHmA57n48lg0mG6cE663TKGXTs= +github.com/pulumi/pulumi-awsx/sdk v1.0.0/go.mod h1:sf1iASa+6i6APeHKigYeyoHl6hbNIOOdQL9awmMNWqo= +github.com/pulumi/pulumi-command/sdk v0.7.0 h1:gBxTtg6lY29wbu/XZHsLo6Syoc2yieDmTrSAuxLBRb4= +github.com/pulumi/pulumi-command/sdk v0.7.0/go.mod h1:YX0Ri1ezMr4mk8j4S/S1gjJpidt63mMG2C+VXDoTlpU= +github.com/pulumi/pulumi-docker/sdk/v3 v3.6.1 h1:plWLn9O6u80Vr37LoCsckyobBfcrdTU9cERor72QjqA= +github.com/pulumi/pulumi-docker/sdk/v3 v3.6.1/go.mod h1:N4Yu4c49QErfucPt9Y/fGmpTryRqc0VfhyKHsGR9/g8= +github.com/pulumi/pulumi-kubernetes/sdk/v3 v3.22.2 h1:MuiXmsQfXzlJosSH5CWqPlGMgxg4xnKMu5UwJBCzn2w= +github.com/pulumi/pulumi-kubernetes/sdk/v3 v3.22.2/go.mod h1:fv2nZ3nS1jNk6+EMOmO2MaS5Oyj2rOXT9ZIP/7q5YGI= +github.com/pulumi/pulumi/sdk/v3 v3.48.0/go.mod h1:n5EPRVFDh+EFwYZ+oaZmEtwgVN1A6NnI82B7ks/bmTU= +github.com/pulumi/pulumi/sdk/v3 v3.49.0 h1:DSIeLJVPj7H+9fWjx/LguqDclzhiz90uhxERbMiHM+A= +github.com/pulumi/pulumi/sdk/v3 v3.49.0/go.mod h1:58NOiU6vEdA0S8KFiFt4/eqH7vKtWhDFsEGCUFRBovw= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= +github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sabhiram/go-gitignore v0.0.0-20180611051255-d3107576ba94/go.mod h1:b18R55ulyQ/h3RaWyloPyER7fWQVZvimKKhnI5OfrJQ= +github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 h1:OkMGxebDjyw0ULyrTYWeN0UNCCkmCWfjPnIA2W6oviI= +github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06/go.mod h1:+ePHsJ1keEjQtpvf9HHw0f4ZeJ0TLRsxhunSI2hYJSs= +github.com/santhosh-tekuri/jsonschema/v5 v5.0.0/go.mod h1:FKdcjfQW6rpZSnxxUvEA5H/cDPdvJ/SZJQLWWXWGrZ0= +github.com/santhosh-tekuri/jsonschema/v5 v5.1.1 h1:lEOLY2vyGIqKWUI9nzsOJRV3mb3WC9dXYORsLEUcoeY= +github.com/santhosh-tekuri/jsonschema/v5 v5.1.1/go.mod h1:FKdcjfQW6rpZSnxxUvEA5H/cDPdvJ/SZJQLWWXWGrZ0= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= +github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/skeema/knownhosts v1.1.0 h1:Wvr9V0MxhjRbl3f9nMnKnFfiWTJmtECJ9Njkea3ysW0= +github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= +github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= +github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= +github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= +github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/texttheater/golang-levenshtein v0.0.0-20191208221605-eb6844b05fc6/go.mod h1:XDKHRm5ThF8YJjx001LtgelzsoaEcvnA7lVWz9EeX3g= +github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqajr6t1lOv8GyGE2U= +github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8= +github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7 h1:X9dsIWPuuEJlPX//UmRKophhOKCGXc46RVIGuttks68= +github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7/go.mod h1:UxoP3EypF8JfGEjAII8jx1q8rQyDnX8qdTCs/UQBVIE= +github.com/uber/jaeger-client-go v2.22.1+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o= +github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg= +github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= +github.com/xanzy/ssh-agent v0.3.2/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= +github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= +github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/zorkian/go-datadog-api v2.30.0+incompatible h1:R4ryGocppDqZZbnNc5EDR8xGWF/z/MxzWnqTUijDQes= +github.com/zorkian/go-datadog-api v2.30.0+incompatible/go.mod h1:PkXwHX9CUQa/FpB9ZwAD45N1uhCW4MT/Wj7m36PbKss= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220824171710-5757bc0c5503/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.4.0 h1:UVQgzMY87xqpKNgb+kDsll2Igd33HszWHFLmpaRMq/8= +golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA= +golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU= +golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220823224334-20c2bfdbfe24/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.3.0 h1:qoo4akIqOcDME5bhc/NgxUdovd6BSS2uMsVjB56q1xI= +golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.4.0 h1:7mTAgkunk3fr4GAloyyCasadO6h9zSsQZbwvcaIciV4= +golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20221207170731-23e4bf6bdc37 h1:jmIfw8+gSvXcZSgaFAGyInDXeWzUhvYH57G/5GKMn70= +google.golang.org/genproto v0.0.0-20221207170731-23e4bf6bdc37/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/zorkian/go-datadog-api.v2 v2.30.0 h1:umQdVO0Ytx+kYadhuJNjFtDgIsIEBnKrOTvNuu8ClKI= +gopkg.in/zorkian/go-datadog-api.v2 v2.30.0/go.mod h1:kx0CSMRpzEZfx/nFH62GLU4stZjparh/BRpM89t4XCQ= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +lukechampine.com/frand v1.4.2 h1:RzFIpOvkMXuPMBb9maa4ND4wjBn71E1Jpf8BzJHMaVw= +lukechampine.com/frand v1.4.2/go.mod h1:4S/TM2ZgrKejMcKMbeLjISpJMO+/eZ1zu3vYX9dtj3s= +pgregory.net/rapid v0.4.7 h1:MTNRktPuv5FNqOO151TM9mDTa+XHcX6ypYeISDVD14g= +pgregory.net/rapid v0.4.7/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= +sourcegraph.com/sourcegraph/appdash v0.0.0-20211028080628-e2786a622600 h1:hfyJ5ku9yFtLVOiSxa3IN+dx5eBQT9mPmKFypAmg8XM= +sourcegraph.com/sourcegraph/appdash v0.0.0-20211028080628-e2786a622600/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/test/new-e2e/ndm/snmp/compose/data/apc_ups.snmprec b/test/new-e2e/ndm/snmp/compose/data/apc_ups.snmprec new file mode 100644 index 00000000000000..51caca45cf3b6f --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/apc_ups.snmprec @@ -0,0 +1,613 @@ +1.3.6.1.2.1.1.1.0|4|APC Web/SNMP Management Card (MB:v3.9.2 PF:v3.9.2 PN:apc_hw02_aos_392.bin AF1:v3.7.2 AN1:apc_hw02_sumx_372.bin MN:AP9619 HR:A10 SN: 5A1827E00000 MD:12/04/2007) (Embedded PowerNet SNMP Agent SW v2.2 compatible) +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.318.1.1.1 +1.3.6.1.4.1.318.1.1.1.1.1.1.0|4|APC Smart-UPS 600 +1.3.6.1.4.1.318.1.1.1.1.1.2.0|4|testIdentName +1.3.6.1.4.1.318.1.1.1.1.2.1.0|4|2.0.3-test +1.3.6.1.4.1.318.1.1.1.1.2.2.0|4x|666f7277617264206163746564207468656972204a6164656420717561696e746c79207a6f6d6269657320717561696e746c7920666f7277617264204a61646564 +1.3.6.1.4.1.318.1.1.1.1.2.3.0|4|test_serial +1.3.6.1.4.1.318.1.1.1.1.2.4.0|4x|64726976696e67206b657074207a6f6d62696573204a61646564204a61646564206b657074 +1.3.6.1.4.1.318.1.1.1.1.2.5.0|4x|4a61646564206163746564206b657074 +1.3.6.1.4.1.318.1.1.1.2.1.1.0|2|1 +1.3.6.1.4.1.318.1.1.1.2.1.2.0|67|2281169700 +1.3.6.1.4.1.318.1.1.1.2.1.3.0|4x|666f7277617264206f78656e20627574 +1.3.6.1.4.1.318.1.1.1.2.2.1.0|66|1560689601 +1.3.6.1.4.1.318.1.1.1.2.2.2.0|66|1179156899 +1.3.6.1.4.1.318.1.1.1.2.2.3.0|67|1472879197 +1.3.6.1.4.1.318.1.1.1.2.2.4.0|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.5.0|2|17 +1.3.6.1.4.1.318.1.1.1.2.2.6.0|2|31 +1.3.6.1.4.1.318.1.1.1.2.2.7.0|2|16 +1.3.6.1.4.1.318.1.1.1.2.2.8.0|2|11 +1.3.6.1.4.1.318.1.1.1.2.2.9.0|2|12 +1.3.6.1.4.1.318.1.1.1.2.2.10.0|2|10 +1.3.6.1.4.1.318.1.1.1.2.2.11.0|2|17 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.1.0|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.1.1|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.1.5|2|5 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.1.7|2|7 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.1.10|2|10 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.1.14|2|14 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.1.18|2|18 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.1.22|2|22 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.1.25|2|25 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.2.0|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.2.1|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.2.5|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.2.7|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.2.10|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.2.14|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.2.18|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.2.22|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.2.25|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.3.0|2|7 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.3.1|2|5 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.3.5|2|7 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.3.7|2|4 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.3.10|2|8 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.3.14|2|22 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.3.18|2|7 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.3.22|2|26 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.3.25|2|7 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.0|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.1|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.3|2|3 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.8|2|8 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.9|2|9 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.12|2|12 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.21|2|21 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.22|2|22 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.23|2|23 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.24|2|24 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.0|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.1|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.3|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.8|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.9|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.12|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.21|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.22|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.23|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.24|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.0|2|21 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.1|2|10 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.3|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.8|2|4 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.9|2|20 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.12|2|17 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.21|2|23 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.22|2|13 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.23|2|5 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.24|2|16 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.1.2.26|2|2 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.1.7.29|2|7 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.1.8.0|2|8 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.1.13.22|2|13 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.1.17.19|2|17 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.1.25.29|2|25 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.1.27.21|2|27 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.1.29.12|2|29 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.1.30.3|2|30 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.2.2.26|2|26 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.2.7.29|2|29 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.2.8.0|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.2.13.22|2|22 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.2.17.19|2|19 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.2.25.29|2|29 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.2.27.21|2|21 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.2.29.12|2|12 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.2.30.3|2|3 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.3.2.26|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.3.7.29|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.3.8.0|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.3.13.22|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.3.17.19|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.3.25.29|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.3.27.21|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.3.29.12|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.3.30.3|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.4.2.26|2|5 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.4.7.29|2|14 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.4.8.0|2|27 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.4.13.22|2|21 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.4.17.19|2|7 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.4.25.29|2|11 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.4.27.21|2|8 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.4.29.12|2|27 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.4.30.3|2|11 +1.3.6.1.4.1.318.1.1.1.2.2.15.0|67|3648468618 +1.3.6.1.4.1.318.1.1.1.2.2.16.0|2|30 +1.3.6.1.4.1.318.1.1.1.2.2.17.0|2|2 +1.3.6.1.4.1.318.1.1.1.2.2.19.0|4x|4a61646564206b657074 +1.3.6.1.4.1.318.1.1.1.2.2.20.0|4x|6b657074206163746564 +1.3.6.1.4.1.318.1.1.1.2.2.21.0|4x|64726976696e67206f78656e207a6f6d6269657320717561696e746c7920717561696e746c79 +1.3.6.1.4.1.318.1.1.1.2.3.1.0|66|38240162 +1.3.6.1.4.1.318.1.1.1.2.3.2.0|66|2948084659 +1.3.6.1.4.1.318.1.1.1.2.3.3.0|2|25 +1.3.6.1.4.1.318.1.1.1.2.3.4.0|2|30 +1.3.6.1.4.1.318.1.1.1.2.3.5.0|2|30 +1.3.6.1.4.1.318.1.1.1.2.3.6.0|2|2 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.1.2|2|2 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.1.7|2|7 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.1.9|2|9 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.1.15|2|15 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.1.18|2|18 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.1.21|2|21 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.1.23|2|23 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.1.24|2|24 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.2.2|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.2.7|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.2.9|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.2.15|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.2.18|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.2.21|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.2.23|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.2.24|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.3.2|2|5 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.3.7|2|18 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.3.9|2|29 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.3.15|2|17 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.3.18|2|15 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.3.21|2|14 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.3.23|2|20 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.3.24|2|2 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.0|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.1|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.5|2|5 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.6|2|6 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.10|2|10 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.11|2|11 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.15|2|15 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.22|2|22 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.23|2|23 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.25|2|25 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.0|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.1|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.5|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.6|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.10|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.11|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.15|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.22|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.23|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.25|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.0|2|25 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.1|2|6 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.5|2|28 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.6|2|27 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.10|2|27 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.11|2|9 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.15|2|21 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.22|2|23 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.23|2|9 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.25|2|19 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.0.17|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.0.25|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.4.31|2|4 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.6.12|2|6 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.10.7|2|10 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.14.27|2|14 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.18.24|2|18 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.21.17|2|21 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.22.26|2|22 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.25.17|2|25 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.0.17|2|17 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.0.25|2|25 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.4.31|2|31 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.6.12|2|12 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.10.7|2|7 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.14.27|2|27 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.18.24|2|24 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.21.17|2|17 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.22.26|2|26 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.25.17|2|17 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.0.17|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.0.25|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.4.31|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.6.12|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.10.7|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.14.27|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.18.24|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.21.17|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.22.26|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.25.17|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.0.17|2|9 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.0.25|2|4 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.4.31|2|2 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.6.12|2|29 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.10.7|2|13 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.14.27|2|22 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.18.24|2|22 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.21.17|2|30 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.22.26|2|4 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.25.17|2|25 +1.3.6.1.4.1.318.1.1.1.2.3.10.1.0|2|10 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.2.26|2|2 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.3.27|2|3 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.19.24|2|19 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.22.12|2|22 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.23.7|2|23 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.23.9|2|23 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.26.7|2|26 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.26.22|2|26 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.27.5|2|27 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.30.29|2|30 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.2.26|2|26 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.3.27|2|27 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.19.24|2|24 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.22.12|2|12 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.23.7|2|7 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.23.9|2|9 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.26.7|2|7 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.26.22|2|22 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.27.5|2|5 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.30.29|2|29 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.2.26|4x|7a6f6d6269657320666f727761726420666f7277617264 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.3.27|4x|64726976696e67207a6f6d62696573207a6f6d6269657320666f727761726420666f7277617264206f78656e206b6570742064726976696e67204a61646564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.19.24|4x|6b657074204a61646564207468656972207468656972 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.22.12|4x|6f78656e204a6164656420666f7277617264207a6f6d62696573206b657074207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.23.7|4x|64726976696e6720666f7277617264 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.23.9|4x|7468656972206b65707420616374656420627574 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.26.7|4x|7a6f6d6269657320627574206f78656e20627574 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.26.22|4x|616374656420746865697220717561696e746c7920717561696e746c79 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.27.5|4x|62757420666f7277617264204a6164656420666f7277617264207a6f6d62696573206f78656e20627574204a61646564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.30.29|4x|7a6f6d62696573206f78656e20666f7277617264206b657074207468656972204a61646564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.2.26|4x|666f727761726420717561696e746c7920666f7277617264204a61646564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.3.27|4x|7a6f6d62696573207a6f6d62696573206f78656e206b657074 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.19.24|4x|6f78656e20717561696e746c7920616374656420627574204a61646564207468656972 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.22.12|4x|6b6570742064726976696e67204a61646564207a6f6d6269657320666f7277617264206b657074204a6164656420666f7277617264207468656972 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.23.7|4x|717561696e746c79206b657074 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.23.9|4|kept +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.26.7|4x|64726976696e67206163746564206163746564206b657074 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.26.22|4x|4a616465642064726976696e672064726976696e67207a6f6d62696573206f78656e20666f727761726420666f727761726420666f727761726420666f7277617264 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.27.5|4|oxen +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.30.29|4x|7a6f6d62696573206f78656e204a61646564204a6164656420717561696e746c79206163746564206b657074 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.2.26|2|23 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.3.27|2|28 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.19.24|2|25 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.22.12|2|25 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.23.7|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.23.9|2|14 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.26.7|2|24 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.26.22|2|18 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.27.5|2|31 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.30.29|2|4 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.2.26|4|their +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.3.27|4x|6b657074207a6f6d62696573206b657074206163746564206b657074206f78656e206b657074 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.19.24|4x|64726976696e6720717561696e746c792062757420717561696e746c79 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.22.12|4x|717561696e746c79206163746564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.23.7|4|forward +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.23.9|4x|6f78656e2064726976696e6720717561696e746c7920666f7277617264204a61646564206f78656e204a6164656420666f7277617264 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.26.7|4x|7a6f6d6269657320746865697220627574207a6f6d62696573 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.26.22|4x|4a616465642074686569722064726976696e67207468656972204a61646564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.27.5|4x|7468656972206163746564206275742064726976696e67204a61646564207a6f6d626965732064726976696e67 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.30.29|4x|717561696e746c792064726976696e67 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.2.26|4x|7a6f6d6269657320746865697220666f7277617264207468656972206163746564207a6f6d62696573207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.3.27|4|oxen +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.19.24|4x|6b65707420666f7277617264206f78656e207468656972206b657074207468656972 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.22.12|4x|6163746564206b657074206f78656e206b65707420666f727761726420666f7277617264206b657074 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.23.7|4|Jaded +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.23.9|4x|666f7277617264206f78656e206f78656e207a6f6d6269657320666f7277617264204a61646564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.26.7|4x|616374656420717561696e746c79207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.26.22|4x|627574206b657074206b657074206b657074207468656972 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.27.5|4x|6163746564207a6f6d62696573204a61646564206b65707420666f727761726420717561696e746c79206163746564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.30.29|4x|7a6f6d62696573207468656972204a61646564207468656972204a61646564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.2.26|4x|64726976696e67207468656972 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.3.27|4x|6163746564207a6f6d6269657320616374656420717561696e746c792062757420717561696e746c7920627574 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.19.24|4x|6163746564207a6f6d62696573204a616465642062757420616374656420616374656420746865697220666f7277617264 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.22.12|4x|6163746564204a61646564204a616465642064726976696e67 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.23.7|4x|64726976696e67204a61646564206163746564207a6f6d62696573 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.23.9|4x|61637465642064726976696e672064726976696e672064726976696e67207a6f6d6269657320666f7277617264206b657074206b657074206163746564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.26.7|4x|6f78656e207a6f6d62696573 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.26.22|4x|717561696e746c792074686569722064726976696e6720666f72776172642062757420666f727761726420627574204a61646564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.27.5|4x|6275742061637465642064726976696e67 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.30.29|4|acted +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.2.26|4x|6163746564206b657074207468656972207a6f6d62696573206163746564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.3.27|4x|6b657074206163746564206b657074206f78656e20717561696e746c79 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.19.24|4x|717561696e746c7920717561696e746c79206163746564207a6f6d62696573204a61646564206b657074 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.22.12|4|their +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.23.7|4x|6b65707420616374656420627574 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.23.9|4|acted +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.26.7|4x|717561696e746c79204a61646564207a6f6d6269657320746865697220627574206163746564207468656972 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.26.22|4x|666f7277617264207a6f6d6269657320627574207468656972204a6164656420746865697220666f727761726420666f7277617264206b657074 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.27.5|4x|7a6f6d6269657320666f7277617264 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.30.29|4|their +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.2.26|4x|666f727761726420616374656420627574207a6f6d6269657320717561696e746c7920746865697220666f7277617264 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.3.27|4x|6b657074206b65707420627574207468656972207a6f6d62696573206163746564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.19.24|4x|6b6570742061637465642064726976696e6720666f7277617264 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.22.12|4x|64726976696e67207468656972207a6f6d6269657320666f72776172642062757420717561696e746c79 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.23.7|4x|627574207468656972207468656972206163746564207a6f6d62696573204a61646564207a6f6d62696573 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.23.9|4x|6163746564206b657074206f78656e207a6f6d62696573206f78656e +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.26.7|4x|7a6f6d626965732064726976696e67204a61646564206f78656e207a6f6d6269657320666f727761726420666f7277617264206f78656e207468656972 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.26.22|4x|6f78656e2064726976696e67 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.27.5|4x|7a6f6d6269657320717561696e746c79206163746564207a6f6d62696573 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.30.29|4x|616374656420666f727761726420666f727761726420627574206b65707420717561696e746c7920627574 +1.3.6.1.4.1.318.1.1.1.3.1.1.0|2|5 +1.3.6.1.4.1.318.1.1.1.3.2.1.0|66|4072212830 +1.3.6.1.4.1.318.1.1.1.3.2.2.0|66|1535446494 +1.3.6.1.4.1.318.1.1.1.3.2.3.0|66|3248693327 +1.3.6.1.4.1.318.1.1.1.3.2.4.0|66|3401339341 +1.3.6.1.4.1.318.1.1.1.3.2.5.0|2|6 +1.3.6.1.4.1.318.1.1.1.3.2.6.0|2|4 +1.3.6.1.4.1.318.1.1.1.3.2.7.0|2|27 +1.3.6.1.4.1.318.1.1.1.3.2.8.0|2|25 +1.3.6.1.4.1.318.1.1.1.3.2.9.0|2|16 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.1.2|2|2 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.1.6|2|6 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.1.8|2|8 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.1.10|2|10 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.1.15|2|15 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.1.16|2|16 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.1.17|2|17 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.1.20|2|20 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.1.26|2|26 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.2.2|2|30 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.2.6|2|11 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.2.8|2|26 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.2.10|2|7 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.2.15|2|4 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.2.16|2|5 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.2.17|2|15 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.2.20|2|16 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.2.26|2|28 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.3.2|2|21 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.3.6|2|9 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.3.8|2|19 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.3.10|2|2 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.3.15|2|2 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.3.16|2|4 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.3.17|2|19 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.3.20|2|22 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.3.26|2|23 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.4.2|2|25 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.4.6|2|1 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.4.8|2|28 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.4.10|2|15 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.4.15|2|11 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.4.16|2|12 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.4.17|2|24 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.4.20|2|9 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.4.26|2|3 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.5.2|2|13 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.5.6|2|31 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.5.8|2|2 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.5.10|2|7 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.5.15|2|1 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.5.16|2|22 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.5.17|2|11 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.5.20|2|21 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.5.26|2|13 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.6.2|2|5 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.6.6|2|1 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.6.8|2|29 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.6.10|2|31 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.6.15|2|16 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.6.16|2|20 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.6.17|2|17 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.6.20|2|3 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.6.26|2|14 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.7.2|2|3 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.7.6|2|28 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.7.8|2|12 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.7.10|2|26 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.7.15|2|27 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.7.16|2|5 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.7.17|2|0 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.7.20|2|30 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.7.26|2|28 +1.3.6.1.4.1.318.1.1.1.3.2.11.0|2|11 +1.3.6.1.4.1.318.1.1.1.3.2.12.0|2|14 +1.3.6.1.4.1.318.1.1.1.3.2.13.0|2|24 +1.3.6.1.4.1.318.1.1.1.3.2.14.0|2|26 +1.3.6.1.4.1.318.1.1.1.3.3.1.0|66|637077047 +1.3.6.1.4.1.318.1.1.1.3.3.2.0|66|3527777113 +1.3.6.1.4.1.318.1.1.1.3.3.3.0|66|3018338698 +1.3.6.1.4.1.318.1.1.1.3.3.4.0|66|1506429297 +1.3.6.1.4.1.318.1.1.1.3.3.5.0|66|50912 +1.3.6.1.4.1.318.1.1.1.3.3.6.0|66|5699 +1.3.6.1.4.1.318.1.1.1.3.3.7.0|66|33661 +1.3.6.1.4.1.318.1.1.1.4.1.1.0|2|10 +1.3.6.1.4.1.318.1.1.1.4.1.2.0|2|5 +1.3.6.1.4.1.318.1.1.1.4.1.3.0|2|3 +1.3.6.1.4.1.318.1.1.1.4.1.4.0|2|6 +1.3.6.1.4.1.318.1.1.1.4.1.5.0|2|3 +1.3.6.1.4.1.318.1.1.1.4.1.6.0|2|2 +1.3.6.1.4.1.318.1.1.1.4.1.7.0|2|3 +1.3.6.1.4.1.318.1.1.1.4.2.1.0|66|4185594960 +1.3.6.1.4.1.318.1.1.1.4.2.2.0|66|1756892535 +1.3.6.1.4.1.318.1.1.1.4.2.3.0|66|3155186359 +1.3.6.1.4.1.318.1.1.1.4.2.4.0|66|913553071 +1.3.6.1.4.1.318.1.1.1.4.2.5.0|66|178941591 +1.3.6.1.4.1.318.1.1.1.4.2.6.0|2|25 +1.3.6.1.4.1.318.1.1.1.4.2.7.0|2|29 +1.3.6.1.4.1.318.1.1.1.4.2.8.0|2|1 +1.3.6.1.4.1.318.1.1.1.4.2.9.0|2|7 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.1.0|2|0 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.1.3|2|3 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.1.10|2|10 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.1.24|2|24 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.1.25|2|25 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.1.27|2|27 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.1.28|2|28 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.1.29|2|29 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.1.31|2|31 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.2.0|2|19 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.2.3|2|7 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.2.10|2|0 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.2.24|2|4 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.2.25|2|19 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.2.27|2|17 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.2.28|2|28 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.2.29|2|4 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.2.31|2|7 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.3.0|2|8 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.3.3|2|10 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.3.10|2|26 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.3.24|2|30 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.3.25|2|26 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.3.27|2|28 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.3.28|2|21 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.3.29|2|5 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.3.31|2|23 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.4.0|2|5 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.4.3|2|14 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.4.10|2|19 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.4.24|2|13 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.4.25|2|17 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.4.27|2|21 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.4.28|2|7 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.4.29|2|0 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.4.31|2|19 +1.3.6.1.4.1.318.1.1.1.4.2.11.0|2|19 +1.3.6.1.4.1.318.1.1.1.4.2.12.0|2|20 +1.3.6.1.4.1.318.1.1.1.4.3.1.0|66|3489953300 +1.3.6.1.4.1.318.1.1.1.4.3.2.0|66|3300892168 +1.3.6.1.4.1.318.1.1.1.4.3.3.0|66|1698328203 +1.3.6.1.4.1.318.1.1.1.4.3.4.0|66|4279608909 +1.3.6.1.4.1.318.1.1.1.4.3.5.0|2|31 +1.3.6.1.4.1.318.1.1.1.4.3.6.0|66|51951 +1.3.6.1.4.1.318.1.1.1.5.1.1.0|2|22 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.1.2|2|2 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.1.4|2|4 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.1.9|2|9 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.1.13|2|13 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.1.18|2|18 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.1.19|2|19 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.1.23|2|23 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.1.26|2|26 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.1.27|2|27 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.2.2|4x|717561696e746c79206f78656e +1.3.6.1.4.1.318.1.1.1.5.1.2.1.2.4|4x|616374656420666f7277617264206275742062757420717561696e746c79207a6f6d62696573207a6f6d62696573206163746564204a61646564 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.2.9|4x|4a61646564204a61646564207a6f6d6269657320666f727761726420717561696e746c79207468656972204a61646564207468656972206163746564 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.2.13|4x|627574204a61646564207468656972204a61646564206163746564 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.2.18|4x|4a61646564204a61646564207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.2.19|4x|64726976696e6720746865697220717561696e746c79206b657074204a6164656420717561696e746c792064726976696e67207468656972 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.2.23|4x|6163746564204a61646564207a6f6d62696573207a6f6d62696573204a616465642064726976696e67 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.2.26|4x|746865697220627574206f78656e206f78656e206b657074204a61646564206f78656e +1.3.6.1.4.1.318.1.1.1.5.1.2.1.2.27|4x|4a616465642062757420717561696e746c79 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.3.2|2|31 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.3.4|2|26 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.3.9|2|9 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.3.13|2|26 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.3.18|2|3 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.3.19|2|7 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.3.23|2|21 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.3.26|2|13 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.3.27|2|7 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.4.2|2|2 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.4.4|2|2 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.4.9|2|1 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.4.13|2|1 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.4.18|2|1 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.4.19|2|2 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.4.23|2|2 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.4.26|2|2 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.4.27|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.1.0|2|24 +1.3.6.1.4.1.318.1.1.1.5.2.2.0|2|9 +1.3.6.1.4.1.318.1.1.1.5.2.3.0|2|20 +1.3.6.1.4.1.318.1.1.1.5.2.4.0|2|3 +1.3.6.1.4.1.318.1.1.1.5.2.5.0|67|2150908910 +1.3.6.1.4.1.318.1.1.1.5.2.6.0|2|5 +1.3.6.1.4.1.318.1.1.1.5.2.7.0|2|3 +1.3.6.1.4.1.318.1.1.1.5.2.8.0|67|385065057 +1.3.6.1.4.1.318.1.1.1.5.2.9.0|67|4287371001 +1.3.6.1.4.1.318.1.1.1.5.2.10.0|67|4128486802 +1.3.6.1.4.1.318.1.1.1.5.2.11.0|67|2140484210 +1.3.6.1.4.1.318.1.1.1.5.2.12.0|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.1.0|2|0 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.1.12|2|12 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.1.14|2|14 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.1.15|2|15 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.1.16|2|16 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.1.17|2|17 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.1.21|2|21 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.1.24|2|24 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.1.25|2|25 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.2.0|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.2.12|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.2.14|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.2.15|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.2.16|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.2.17|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.2.21|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.2.24|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.2.25|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.14.0|67|3090446300 +1.3.6.1.4.1.318.1.1.1.5.2.15.0|4x|61637465642064726976696e67206163746564 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.1.0|2|0 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.1.4|2|4 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.1.11|2|11 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.1.12|2|12 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.1.13|2|13 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.1.16|2|16 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.1.17|2|17 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.1.20|2|20 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.1.28|2|28 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.2.0|6|1.3.6.1.3.200.114.30.67.215.95.144.202.103 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.2.4|6|1.3.6.1.3.32.206.164.137.235.155.190 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.2.11|6|1.3.6.1.3.65.22.136 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.2.12|6|1.3.6.1.3.63.95.196.158 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.2.13|6|1.3.6.1.3.178.61.99.254.79.132.9.151.230 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.2.16|6|1.3.6.1.3.183.246.117.161.146.61 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.2.17|6|1.3.6.1.3.147.70.179 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.2.20|6|1.3.6.1.3 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.2.28|6|1.3.6.1.3.61.19.76.34.168.37 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.3.0|4x|616374656420616374656420717561696e746c7920717561696e746c79206b6570742074686569722064726976696e67 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.3.4|4x|666f7277617264207a6f6d6269657320627574204a61646564206f78656e207a6f6d62696573 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.3.11|4x|6f78656e207468656972206b657074207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.3.12|4x|64726976696e67206275742062757420666f7277617264 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.3.13|4x|6f78656e206b6570742064726976696e67206b657074207468656972 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.3.16|4x|666f7277617264204a6164656420746865697220627574207a6f6d62696573206b657074206163746564 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.3.17|4x|64726976696e67204a6164656420666f72776172642062757420746865697220666f727761726420717561696e746c79 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.3.20|4x|627574204a61646564206f78656e206f78656e +1.3.6.1.4.1.318.1.1.1.5.2.16.1.3.28|4x|616374656420616374656420666f727761726420666f72776172642064726976696e6720717561696e746c79 +1.3.6.1.4.1.318.1.1.1.5.2.17.0|2|7 +1.3.6.1.4.1.318.1.1.1.5.2.18.0|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.19.0|2|10 +1.3.6.1.4.1.318.1.1.1.5.2.20.0|2|3 +1.3.6.1.4.1.318.1.1.1.5.2.21.0|2|27 +1.3.6.1.4.1.318.1.1.1.5.2.22.0|2|10 +1.3.6.1.4.1.318.1.1.1.5.2.23.0|2|28 +1.3.6.1.4.1.318.1.1.1.5.2.24.0|2|3 +1.3.6.1.4.1.318.1.1.1.5.2.25.0|2|29 +1.3.6.1.4.1.318.1.1.1.5.2.26.0|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.27.0|2|0 +1.3.6.1.4.1.318.1.1.1.5.2.28.0|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.29.0|67|4010835390 +1.3.6.1.4.1.318.1.1.1.5.2.30.0|67|1782930428 +1.3.6.1.4.1.318.1.1.1.5.2.31.0|2|3 +1.3.6.1.4.1.318.1.1.1.5.2.32.0|2|6 +1.3.6.1.4.1.318.1.1.1.5.2.33.0|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.34.0|2|3 +1.3.6.1.4.1.318.1.1.1.5.2.35.0|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.36.0|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.37.0|2|13 +1.3.6.1.4.1.318.1.1.1.5.2.38.0|2|4 +1.3.6.1.4.1.318.1.1.1.5.2.39.0|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.40.0|2|3 +1.3.6.1.4.1.318.1.1.1.5.2.41.0|2|6 +1.3.6.1.4.1.318.1.1.1.5.2.43.0|2|6 +1.3.6.1.4.1.318.1.1.1.5.2.44.0|2|11 +1.3.6.1.4.1.318.1.1.1.5.2.45.0|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.46.0|2|3 +1.3.6.1.4.1.318.1.1.1.5.2.47.0|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.48.0|2|25 +1.3.6.1.4.1.318.1.1.1.5.2.49.0|2|1 +1.3.6.1.4.1.318.1.1.1.6.1.1.0|2|1 +1.3.6.1.4.1.318.1.1.1.6.2.1.0|2|5 +1.3.6.1.4.1.318.1.1.1.6.2.2.0|2|3 +1.3.6.1.4.1.318.1.1.1.6.2.3.0|2|4 +1.3.6.1.4.1.318.1.1.1.6.2.4.0|2|1 +1.3.6.1.4.1.318.1.1.1.6.2.5.0|2|3 +1.3.6.1.4.1.318.1.1.1.6.2.6.0|2|2 +1.3.6.1.4.1.318.1.1.1.6.2.7.0|2|2 +1.3.6.1.4.1.318.1.1.1.6.2.8.0|2|2 +1.3.6.1.4.1.318.1.1.1.6.2.9.0|2|4 +1.3.6.1.4.1.318.1.1.1.7.2.1.0|2|7 +1.3.6.1.4.1.318.1.1.1.7.2.2.0|2|1 +1.3.6.1.4.1.318.1.1.1.7.2.3.0|2|4 +1.3.6.1.4.1.318.1.1.1.11.1.1.0|4|0000100100100000001000000000010010000000000000000000000000000000 +1.3.6.1.4.1.318.1.1.1.12.1.2.1.1.15|2|15 +1.3.6.1.4.1.318.1.1.1.12.1.2.1.2.15|4|test_outlet +1.3.6.1.4.1.318.1.1.1.12.1.2.1.3.15|2|3 +1.3.6.1.4.1.318.1.1.25.1.2.1.6.0|2|25 diff --git a/test/new-e2e/ndm/snmp/compose/data/args_list.txt b/test/new-e2e/ndm/snmp/compose/data/args_list.txt new file mode 100644 index 00000000000000..39ba2fea1e52cf --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/args_list.txt @@ -0,0 +1,14 @@ +--v3-user=datadogNoAuthNoPriv +--v3-user=datadogMD5NoPriv --v3-auth-key=doggiepass --v3-auth-proto=MD5 +--v3-user=datadogMD5DES --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=MD5 --v3-priv-proto=DES +--v3-user=datadogMD5AES --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=MD5 --v3-priv-proto=AES +--v3-user=datadogSHADES --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=SHA --v3-priv-proto=DES +--v3-user=datadogSHAAES --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=SHA --v3-priv-proto=AES +--v3-user=datadogSHAAES192 --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=SHA --v3-priv-proto=AES192 +--v3-user=datadogSHAAES192BLMT --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=SHA --v3-priv-proto=AES192BLMT +--v3-user=datadogSHAAES256 --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=SHA --v3-priv-proto=AES256 +--v3-user=datadogSHAAES256BLMT --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=SHA --v3-priv-proto=AES256BLMT +--v3-user=datadogMD5AES192 --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=MD5 --v3-priv-proto=AES192 +--v3-user=datadogMD5AES192BLMT --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=MD5 --v3-priv-proto=AES192BLMT +--v3-user=datadogMD5AES256 --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=MD5 --v3-priv-proto=AES256 +--v3-user=datadogMD5AES256BLMT --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=MD5 --v3-priv-proto=AES256BLMT diff --git a/test/new-e2e/ndm/snmp/compose/data/arista.snmprec b/test/new-e2e/ndm/snmp/compose/data/arista.snmprec new file mode 100644 index 00000000000000..6d77a50af40ec5 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/arista.snmprec @@ -0,0 +1,75 @@ +1.3.6.1.2.1.1.1.0|4|Arista Networks EOS version 4.20.11.1M running on an Arista Networks DCS-7504 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.30065.1.3011.7504 +1.3.6.1.2.1.1.3.0|67|1972242781 +1.3.6.1.2.1.1.4.0|4| +1.3.6.1.2.1.1.5.0|4|DCS-7504-name +1.3.6.1.2.1.1.6.0|4| +1.3.6.1.2.1.1.7.0|2|14 +1.3.6.1.2.1.47.1.1.1.1.2.1|4|DCS-7504 Chassis +1.3.6.1.2.1.47.1.1.1.1.3.1|6|0.0 +1.3.6.1.2.1.47.1.1.1.1.4.1|2|0 +1.3.6.1.2.1.47.1.1.1.1.5.1|2|3 +1.3.6.1.2.1.47.1.1.1.1.6.1|2|0 +1.3.6.1.2.1.47.1.1.1.1.7.1|4| +1.3.6.1.2.1.47.1.1.1.1.8.1|4|12.00 +1.3.6.1.2.1.47.1.1.1.1.9.1|4| +1.3.6.1.2.1.47.1.1.1.1.10.1|4| +1.3.6.1.2.1.47.1.1.1.1.11.1|4|HSH16195058 +1.3.6.1.2.1.47.1.1.1.1.12.1|4|Arista Networks +1.3.6.1.2.1.47.1.1.1.1.13.1|4|DCS-7504 +1.3.6.1.2.1.47.1.1.1.1.14.1|4| +1.3.6.1.2.1.47.1.1.1.1.15.1|4| +1.3.6.1.2.1.47.1.1.1.1.16.1|2|2 +1.3.6.1.2.1.47.1.1.1.1.17.1|4x|0000000000000000000000 +1.3.6.1.2.1.47.1.1.1.1.18.1|4| +1.3.6.1.2.1.99.1.1.1.1.1|2|11 +1.3.6.1.2.1.99.1.1.1.1.7|2|8 +1.3.6.1.2.1.99.1.1.1.2.1|2|12 +1.3.6.1.2.1.99.1.1.1.2.7|2|6 +1.3.6.1.2.1.99.1.1.1.3.1|2|4 +1.3.6.1.2.1.99.1.1.1.3.7|2|3 +1.3.6.1.2.1.99.1.1.1.4.1|2|18 +1.3.6.1.2.1.99.1.1.1.4.7|2|3 +1.3.6.1.2.1.99.1.1.1.5.1|2|3 +1.3.6.1.2.1.99.1.1.1.5.7|2|2 +1.3.6.1.2.1.99.1.1.1.6.1|4x|6f78656e2062757420666f72776172642062757420746865697220666f7277617264 +1.3.6.1.2.1.99.1.1.1.6.7|4x|666f7277617264207a6f6d626965732062757420666f7277617264204a61646564204a6164656420666f727761726420746865697220627574 +1.3.6.1.2.1.99.1.1.1.7.1|67|2933286610 +1.3.6.1.2.1.99.1.1.1.7.7|67|2903823879 +1.3.6.1.2.1.99.1.1.1.8.1|66|35020 +1.3.6.1.2.1.99.1.1.1.8.7|66|63942 +1.3.6.1.4.1.30065.3.6.1.1.1.1.7.25|2|7 +1.3.6.1.4.1.30065.3.6.1.1.1.1.8.24|2|8 +1.3.6.1.4.1.30065.3.6.1.1.1.2.7.25|2|25 +1.3.6.1.4.1.30065.3.6.1.1.1.2.8.24|2|24 +1.3.6.1.4.1.30065.3.6.1.1.1.3.7.25|70|9199876016787426485 +1.3.6.1.4.1.30065.3.6.1.1.1.3.8.24|70|3479424230406894790 +1.3.6.1.4.1.30065.3.6.1.1.1.4.7.25|70|633664576576632894 +1.3.6.1.4.1.30065.3.6.1.1.1.4.8.24|70|4510009279710477789 +1.3.6.1.4.1.30065.3.6.1.2.1.1.13.10.1|2|13 +1.3.6.1.4.1.30065.3.6.1.2.1.1.28.22.1|2|28 +1.3.6.1.4.1.30065.3.6.1.2.1.2.13.10.1|2|10 +1.3.6.1.4.1.30065.3.6.1.2.1.2.28.22.1|2|22 +1.3.6.1.4.1.30065.3.6.1.2.1.3.13.10.1|2|1 +1.3.6.1.4.1.30065.3.6.1.2.1.3.28.22.1|2|1 +1.3.6.1.4.1.30065.3.6.1.2.1.4.13.10.1|70|6316718526186328558 +1.3.6.1.4.1.30065.3.6.1.2.1.4.28.22.1|70|15636900873813563248 +1.3.6.1.4.1.30065.3.6.1.2.1.5.13.10.1|70|17029503172072197473 +1.3.6.1.4.1.30065.3.6.1.2.1.5.28.22.1|70|1568364382245390281 +1.3.6.1.4.1.30065.3.6.1.2.1.6.13.10.1|70|10749715859223173370 +1.3.6.1.4.1.30065.3.6.1.2.1.6.28.22.1|70|1286713412761199793 +1.3.6.1.4.1.30065.3.6.1.2.1.7.13.10.1|70|9062851505176451588 +1.3.6.1.4.1.30065.3.6.1.2.1.7.28.22.1|70|934740462710221661 +1.3.6.1.4.1.30065.3.6.1.2.1.8.13.10.1|70|7596654376884963276 +1.3.6.1.4.1.30065.3.6.1.2.1.8.28.22.1|70|2792974981000623152 +1.3.6.1.4.1.30065.3.6.1.2.1.9.13.10.1|70|9366008999217936642 +1.3.6.1.4.1.30065.3.6.1.2.1.9.28.22.1|70|8656516912515957367 +1.3.6.1.4.1.30065.3.6.1.2.1.10.13.10.1|2|0 +1.3.6.1.4.1.30065.3.6.1.2.1.10.28.22.1|2|0 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.23 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.67 +1.3.6.1.6.3.1.1.6.1.0|2|17 +1.3.6.1.6.3.10.2.1.1.0|4x|64726976696e6720627574204a61646564207468656972207a6f6d62696573 +1.3.6.1.6.3.10.2.1.2.0|2|19 +1.3.6.1.6.3.10.2.1.3.0|2|18 +1.3.6.1.6.3.10.2.1.4.0|2|485 diff --git a/test/new-e2e/ndm/snmp/compose/data/aruba-access-point.snmprec b/test/new-e2e/ndm/snmp/compose/data/aruba-access-point.snmprec new file mode 100644 index 00000000000000..d033b29cd69d38 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/aruba-access-point.snmprec @@ -0,0 +1,7 @@ +1.3.6.1.2.1.1.1.0|4|ArubaOS (MODEL: 335), Version 6.5.4.3-6.5.4.3 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.14823.1.2.80 +1.3.6.1.2.1.1.3.0|67|1469348797 +1.3.6.1.2.1.1.4.0|4| +1.3.6.1.2.1.1.5.0|4|aruba-335-name +1.3.6.1.2.1.1.6.0|4| +1.3.6.1.2.1.1.7.0|2|72 diff --git a/test/new-e2e/ndm/snmp/compose/data/aruba-switch.snmprec b/test/new-e2e/ndm/snmp/compose/data/aruba-switch.snmprec new file mode 100644 index 00000000000000..fd5da4f30cae0d --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/aruba-switch.snmprec @@ -0,0 +1,21 @@ +1.3.6.1.2.1.1.1.0|4|ArubaOS (MODEL: Aruba7210), Version 8.6.0.4 (74969) +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.14823.1.1.32 +1.3.6.1.2.1.1.3.0|67|300689100 +1.3.6.1.2.1.1.4.0|4| +1.3.6.1.2.1.1.5.0|4|aruba-device-name +1.3.6.1.2.1.1.6.0|4| +1.3.6.1.4.1.14823.2.2.1.1.1.1.0|4|aruba-device-name +1.3.6.1.4.1.14823.2.2.1.1.1.2.0|4|A7210 +1.3.6.1.4.1.14823.2.2.1.1.1.3.0|64x|ac174404 +1.3.6.1.4.1.14823.2.2.1.1.1.4.0|2|1 +1.3.6.1.4.1.14823.2.2.1.1.1.5.0|64x|ac174403 +1.3.6.1.4.1.14823.2.2.1.1.1.7.0|2|6 +1.3.6.1.4.1.14823.2.2.1.2.1.13.1.1.4|2|4 +1.3.6.1.4.1.14823.2.2.1.2.1.13.1.2.4|2|4 +1.3.6.1.4.1.14823.2.2.1.2.1.13.1.3.4|66|29 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.1.4|2|4 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.2.4|66|16777216 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.3.4|66|8388608 +1.3.6.1.4.1.14823.2.2.1.2.1.27.0|4|A1.0 +1.3.6.1.4.1.14823.2.2.1.2.1.28.0|4|8.6.0.4 +1.3.6.1.4.1.14823.2.2.1.2.1.29.0|4|CV0009200 diff --git a/test/new-e2e/ndm/snmp/compose/data/aruba.snmprec b/test/new-e2e/ndm/snmp/compose/data/aruba.snmprec new file mode 100644 index 00000000000000..e022e8cbb3602b --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/aruba.snmprec @@ -0,0 +1,272 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.14823.1.1.32 +1.3.6.1.2.1.14.7.1.1.18.2.8.29.22|64x|1202081d +1.3.6.1.2.1.14.7.1.1.58.115.169.188.27|64x|3a73a9bc +1.3.6.1.2.1.14.7.1.2.18.2.8.29.22|2|22 +1.3.6.1.2.1.14.7.1.2.58.115.169.188.27|2|27 +1.3.6.1.2.1.14.7.1.3.18.2.8.29.22|64x|359f7a8e +1.3.6.1.2.1.14.7.1.3.58.115.169.188.27|64x|08516ac7 +1.3.6.1.2.1.14.7.1.4.18.2.8.29.22|2|3 +1.3.6.1.2.1.14.7.1.4.58.115.169.188.27|2|1 +1.3.6.1.2.1.14.7.1.5.18.2.8.29.22|2|1 +1.3.6.1.2.1.14.7.1.5.58.115.169.188.27|2|2 +1.3.6.1.2.1.14.7.1.6.18.2.8.29.22|2|0 +1.3.6.1.2.1.14.7.1.6.58.115.169.188.27|2|2 +1.3.6.1.2.1.14.7.1.7.18.2.8.29.22|2|14 +1.3.6.1.2.1.14.7.1.7.58.115.169.188.27|2|28 +1.3.6.1.2.1.14.7.1.8.18.2.8.29.22|2|10 +1.3.6.1.2.1.14.7.1.8.58.115.169.188.27|2|7 +1.3.6.1.2.1.14.7.1.9.18.2.8.29.22|2|17 +1.3.6.1.2.1.14.7.1.9.58.115.169.188.27|2|7 +1.3.6.1.2.1.14.7.1.10.18.2.8.29.22|2|31 +1.3.6.1.2.1.14.7.1.10.58.115.169.188.27|2|8 +1.3.6.1.2.1.14.7.1.11.18.2.8.29.22|2|28 +1.3.6.1.2.1.14.7.1.11.58.115.169.188.27|2|5 +1.3.6.1.2.1.14.7.1.12.18.2.8.29.22|2|4 +1.3.6.1.2.1.14.7.1.12.58.115.169.188.27|2|2 +1.3.6.1.2.1.14.7.1.13.18.2.8.29.22|64x|fe8a6a46 +1.3.6.1.2.1.14.7.1.13.58.115.169.188.27|64x|448b4dc9 +1.3.6.1.2.1.14.7.1.14.18.2.8.29.22|64x|179dc85b +1.3.6.1.2.1.14.7.1.14.58.115.169.188.27|64x|a06c639c +1.3.6.1.2.1.14.7.1.15.18.2.8.29.22|65|337210857 +1.3.6.1.2.1.14.7.1.15.58.115.169.188.27|65|62176372 +1.3.6.1.2.1.14.7.1.16.18.2.8.29.22|4x|6163746564207a6f6d626965732064726976696e672062757420717561696e746c79 +1.3.6.1.2.1.14.7.1.16.58.115.169.188.27|4x|717561696e746c7920627574207a6f6d62696573207a6f6d62696573206f78656e206163746564 +1.3.6.1.2.1.14.7.1.17.18.2.8.29.22|2|0 +1.3.6.1.2.1.14.7.1.17.58.115.169.188.27|2|1 +1.3.6.1.2.1.14.7.1.18.18.2.8.29.22|2|1 +1.3.6.1.2.1.14.7.1.18.58.115.169.188.27|2|3 +1.3.6.1.2.1.14.7.1.19.18.2.8.29.22|2|1 +1.3.6.1.2.1.14.7.1.19.58.115.169.188.27|2|2 +1.3.6.1.2.1.14.7.1.20.18.2.8.29.22|2|0 +1.3.6.1.2.1.14.7.1.20.58.115.169.188.27|2|1 +1.3.6.1.2.1.14.7.1.21.18.2.8.29.22|66|1626568828 +1.3.6.1.2.1.14.7.1.21.58.115.169.188.27|66|4122238079 +1.3.6.1.2.1.14.7.1.22.18.2.8.29.22|66|37664 +1.3.6.1.2.1.14.7.1.22.58.115.169.188.27|66|13819 +1.3.6.1.2.1.14.7.1.23.18.2.8.29.22|64x|57a70c12 +1.3.6.1.2.1.14.7.1.23.58.115.169.188.27|64x|1ca52e0e +1.3.6.1.2.1.14.7.1.24.18.2.8.29.22|64x|4976f89f +1.3.6.1.2.1.14.7.1.24.58.115.169.188.27|64x|df0366aa +1.3.6.1.2.1.14.8.1.1.18.46.198.118.28.25|64x|122ec676 +1.3.6.1.2.1.14.8.1.1.74.178.23.226.10.22|64x|4ab217e2 +1.3.6.1.2.1.14.8.1.1.79.250.196.166.7.21|64x|4ffac4a6 +1.3.6.1.2.1.14.8.1.1.88.90.97.4.9.20|64x|585a6104 +1.3.6.1.2.1.14.8.1.1.130.45.3.9.19.12|64x|822d0309 +1.3.6.1.2.1.14.8.1.1.152.55.172.234.10.10|64x|9837acea +1.3.6.1.2.1.14.8.1.1.217.138.168.52.5.29|64x|d98aa834 +1.3.6.1.2.1.14.8.1.1.218.218.58.35.6.10|64x|dada3a23 +1.3.6.1.2.1.14.8.1.1.223.7.108.14.5.22|64x|df076c0e +1.3.6.1.2.1.14.8.1.1.238.30.92.198.23.10|64x|ee1e5cc6 +1.3.6.1.2.1.14.8.1.2.18.46.198.118.28.25|2|28 +1.3.6.1.2.1.14.8.1.2.74.178.23.226.10.22|2|10 +1.3.6.1.2.1.14.8.1.2.79.250.196.166.7.21|2|7 +1.3.6.1.2.1.14.8.1.2.88.90.97.4.9.20|2|9 +1.3.6.1.2.1.14.8.1.2.130.45.3.9.19.12|2|19 +1.3.6.1.2.1.14.8.1.2.152.55.172.234.10.10|2|10 +1.3.6.1.2.1.14.8.1.2.217.138.168.52.5.29|2|5 +1.3.6.1.2.1.14.8.1.2.218.218.58.35.6.10|2|6 +1.3.6.1.2.1.14.8.1.2.223.7.108.14.5.22|2|5 +1.3.6.1.2.1.14.8.1.2.238.30.92.198.23.10|2|23 +1.3.6.1.2.1.14.8.1.3.18.46.198.118.28.25|2|25 +1.3.6.1.2.1.14.8.1.3.74.178.23.226.10.22|2|22 +1.3.6.1.2.1.14.8.1.3.79.250.196.166.7.21|2|21 +1.3.6.1.2.1.14.8.1.3.88.90.97.4.9.20|2|20 +1.3.6.1.2.1.14.8.1.3.130.45.3.9.19.12|2|12 +1.3.6.1.2.1.14.8.1.3.152.55.172.234.10.10|2|10 +1.3.6.1.2.1.14.8.1.3.217.138.168.52.5.29|2|29 +1.3.6.1.2.1.14.8.1.3.218.218.58.35.6.10|2|10 +1.3.6.1.2.1.14.8.1.3.223.7.108.14.5.22|2|22 +1.3.6.1.2.1.14.8.1.3.238.30.92.198.23.10|2|10 +1.3.6.1.2.1.14.8.1.4.18.46.198.118.28.25|2|29 +1.3.6.1.2.1.14.8.1.4.74.178.23.226.10.22|2|11 +1.3.6.1.2.1.14.8.1.4.79.250.196.166.7.21|2|5 +1.3.6.1.2.1.14.8.1.4.88.90.97.4.9.20|2|10 +1.3.6.1.2.1.14.8.1.4.130.45.3.9.19.12|2|21 +1.3.6.1.2.1.14.8.1.4.152.55.172.234.10.10|2|21 +1.3.6.1.2.1.14.8.1.4.217.138.168.52.5.29|2|18 +1.3.6.1.2.1.14.8.1.4.218.218.58.35.6.10|2|3 +1.3.6.1.2.1.14.8.1.4.223.7.108.14.5.22|2|19 +1.3.6.1.2.1.14.8.1.4.238.30.92.198.23.10|2|8 +1.3.6.1.2.1.14.8.1.5.18.46.198.118.28.25|2|6 +1.3.6.1.2.1.14.8.1.5.74.178.23.226.10.22|2|6 +1.3.6.1.2.1.14.8.1.5.79.250.196.166.7.21|2|0 +1.3.6.1.2.1.14.8.1.5.88.90.97.4.9.20|2|1 +1.3.6.1.2.1.14.8.1.5.130.45.3.9.19.12|2|0 +1.3.6.1.2.1.14.8.1.5.152.55.172.234.10.10|2|4 +1.3.6.1.2.1.14.8.1.5.217.138.168.52.5.29|2|3 +1.3.6.1.2.1.14.8.1.5.218.218.58.35.6.10|2|4 +1.3.6.1.2.1.14.8.1.5.223.7.108.14.5.22|2|2 +1.3.6.1.2.1.14.8.1.5.238.30.92.198.23.10|2|2 +1.3.6.1.2.1.14.9.1.1.14.154.6.3.194.154.66.112|64x|0e9a0603 +1.3.6.1.2.1.14.9.1.1.69.248.159.239.184.201.101.140|64x|45f89fef +1.3.6.1.2.1.14.9.1.2.14.154.6.3.194.154.66.112|64x|c29a4270 +1.3.6.1.2.1.14.9.1.2.69.248.159.239.184.201.101.140|64x|b8c9658c +1.3.6.1.2.1.14.9.1.3.14.154.6.3.194.154.66.112|2|7 +1.3.6.1.2.1.14.9.1.3.69.248.159.239.184.201.101.140|2|2 +1.3.6.1.2.1.14.9.1.4.14.154.6.3.194.154.66.112|2|9 +1.3.6.1.2.1.14.9.1.4.69.248.159.239.184.201.101.140|2|7 +1.3.6.1.2.1.14.9.1.5.14.154.6.3.194.154.66.112|2|4 +1.3.6.1.2.1.14.9.1.5.69.248.159.239.184.201.101.140|2|31 +1.3.6.1.2.1.14.9.1.6.14.154.6.3.194.154.66.112|2|28 +1.3.6.1.2.1.14.9.1.6.69.248.159.239.184.201.101.140|2|6 +1.3.6.1.2.1.14.9.1.7.14.154.6.3.194.154.66.112|2|4 +1.3.6.1.2.1.14.9.1.7.69.248.159.239.184.201.101.140|2|1 +1.3.6.1.2.1.14.9.1.8.14.154.6.3.194.154.66.112|65|3840304252 +1.3.6.1.2.1.14.9.1.8.69.248.159.239.184.201.101.140|65|3388558016 +1.3.6.1.2.1.14.9.1.9.14.154.6.3.194.154.66.112|4x|62757420666f727761726420627574206f78656e20717561696e746c79204a6164656420666f7277617264206f78656e20717561696e746c79 +1.3.6.1.2.1.14.9.1.9.69.248.159.239.184.201.101.140|4x|7a6f6d626965732064726976696e67 +1.3.6.1.2.1.14.9.1.10.14.154.6.3.194.154.66.112|2|0 +1.3.6.1.2.1.14.9.1.10.69.248.159.239.184.201.101.140|2|3 +1.3.6.1.2.1.14.9.1.11.14.154.6.3.194.154.66.112|2|1 +1.3.6.1.2.1.14.9.1.11.69.248.159.239.184.201.101.140|2|0 +1.3.6.1.2.1.14.9.1.12.14.154.6.3.194.154.66.112|66|3883744561 +1.3.6.1.2.1.14.9.1.12.69.248.159.239.184.201.101.140|66|4042815112 +1.3.6.1.2.1.14.9.1.13.14.154.6.3.194.154.66.112|66|57727 +1.3.6.1.2.1.14.9.1.13.69.248.159.239.184.201.101.140|66|37473 +1.3.6.1.2.1.14.10.1.1.18.2.8.29.22|64x|486fb31d +1.3.6.1.2.1.14.10.1.1.58.115.169.188.27|64x|c01d741a +1.3.6.1.2.1.14.10.1.2.18.2.8.29.22|2|9 +1.3.6.1.2.1.14.10.1.2.58.115.169.188.27|2|0 +1.3.6.1.2.1.14.10.1.3.18.2.8.29.22|64x|76f6c1f7 +1.3.6.1.2.1.14.10.1.3.58.115.169.188.27|64x|c01d424f +1.3.6.1.2.1.14.10.1.4.58.115.169.188.27|2|8 +1.3.6.1.2.1.14.10.1.5.58.115.169.188.27|2|1 +1.3.6.1.2.1.14.10.1.6.58.115.169.188.27|2|8 +1.3.6.1.2.1.14.10.1.7.58.115.169.188.27|65|6 +1.3.6.1.2.1.14.10.1.8.58.115.169.188.27|66|0 +1.3.6.1.2.1.14.10.1.9.58.115.169.188.27|2|1 +1.3.6.1.2.1.14.10.1.10.58.115.169.188.27|2|1 +1.3.6.1.2.1.14.10.1.11.58.115.169.188.27|2|2 +1.3.6.1.2.1.14.11.1.1.14.154.6.3.194.154.66.112|64x|0e9a0603 +1.3.6.1.2.1.14.11.1.1.69.248.159.239.184.201.101.140|64x|45f89fef +1.3.6.1.2.1.14.11.1.2.14.154.6.3.194.154.66.112|64x|c29a4270 +1.3.6.1.2.1.14.11.1.2.69.248.159.239.184.201.101.140|64x|b8c9658c +1.3.6.1.2.1.14.11.1.3.14.154.6.3.194.154.66.112|64x|4ad25201 +1.3.6.1.2.1.14.11.1.3.69.248.159.239.184.201.101.140|64x|7ae25601 +1.3.6.1.2.1.14.11.1.4.14.154.6.3.194.154.66.112|2|16 +1.3.6.1.2.1.14.11.1.4.69.248.159.239.184.201.101.140|2|16 +1.3.6.1.2.1.14.11.1.5.14.154.6.3.194.154.66.112|2|6 +1.3.6.1.2.1.14.11.1.5.69.248.159.239.184.201.101.140|2|6 +1.3.6.1.2.1.14.11.1.6.14.154.6.3.194.154.66.112|65|3881559280 +1.3.6.1.2.1.14.11.1.6.69.248.159.239.184.201.101.140|65|3881559280 +1.3.6.1.2.1.14.11.1.7.14.154.6.3.194.154.66.112|66|1152724473 +1.3.6.1.2.1.14.11.1.7.69.248.159.239.184.201.101.140|66|1152724473 +1.3.6.1.4.1.14823.2.2.1.2.1.1.0|64x|a59795d0 +1.3.6.1.4.1.14823.2.2.1.2.1.2.0|4|but +1.3.6.1.4.1.14823.2.2.1.2.1.3.0|4|Jaded +1.3.6.1.4.1.14823.2.2.1.2.1.4.0|2|3 +1.3.6.1.4.1.14823.2.2.1.2.1.5.0|64x|d7fe1618 +1.3.6.1.4.1.14823.2.2.1.2.1.6.0|4x|7468656972204a6164656420616374656420627574206b657074207468656972 +1.3.6.1.4.1.14823.2.2.1.2.1.7.0|4x|00249b3503f6 +1.3.6.1.4.1.14823.2.2.1.2.1.8.0|4x|7a6f6d62696573204a6164656420717561696e746c79206163746564204a6164656420717561696e746c7920627574 +1.3.6.1.4.1.14823.2.2.1.2.1.9.0|4x|627574207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.14823.2.2.1.2.1.10.0|4x|6f78656e207a6f6d6269657320627574 +1.3.6.1.4.1.14823.2.2.1.2.1.11.0|4x|62757420627574 +1.3.6.1.4.1.14823.2.2.1.2.1.12.0|2|22 +1.3.6.1.4.1.14823.2.2.1.2.1.13.1.1.11|2|11 +1.3.6.1.4.1.14823.2.2.1.2.1.13.1.1.26|2|26 +1.3.6.1.4.1.14823.2.2.1.2.1.13.1.2.11|4|zombies +1.3.6.1.4.1.14823.2.2.1.2.1.13.1.2.26|4x|62757420666f7277617264204a6164656420627574207a6f6d62696573 +1.3.6.1.4.1.14823.2.2.1.2.1.13.1.3.11|2|2 +1.3.6.1.4.1.14823.2.2.1.2.1.13.1.3.26|2|10 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.1.3|2|3 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.1.15|2|15 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.2.3|2|2 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.2.15|2|2 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.3.3|2|17 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.3.15|2|24 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.4.3|2|12 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.4.15|2|20 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.5.3|4x|61637465642064726976696e67207a6f6d62696573207a6f6d62696573206f78656e206b657074207468656972206f78656e20627574 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.5.15|4x|4a61646564204a61646564206275742064726976696e6720627574207468656972 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.1.3|2|3 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.1.20|2|20 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.2.3|2|22 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.2.20|2|21 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.3.3|2|27 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.3.20|2|6 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.4.3|2|8 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.4.20|2|16 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.1.0|2|0 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.1.25|2|25 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.2.0|2|22 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.2.25|2|15 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.3.0|2|27 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.3.25|2|20 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.4.0|2|22 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.4.25|2|8 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.5.0|2|9 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.5.25|2|3 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.6.0|4x|7468656972204a61646564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.6.25|4x|6f78656e20746865697220666f7277617264206163746564206f78656e206b65707420717561696e746c79 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.7.0|4x|7a6f6d62696573204a61646564206b657074 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.7.25|4x|717561696e746c7920616374656420666f72776172642064726976696e6720666f7277617264206f78656e20627574206163746564 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.8.0|4x|4a61646564206163746564204a61646564 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.8.25|4x|6163746564206163746564204a61646564207a6f6d6269657320666f7277617264204a61646564204a6164656420746865697220627574 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.9.0|4x|4a61646564206f78656e2074686569722064726976696e67 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.9.25|4x|7468656972206f78656e206f78656e207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.10.0|4x|616374656420627574206f78656e2062757420717561696e746c792062757420717561696e746c79207468656972 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.10.25|4|quaintly +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.11.0|4|zombies +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.11.25|4x|6f78656e2062757420666f7277617264 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.12.0|2|2 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.12.25|2|1 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.13.0|2|23 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.13.25|2|7 +1.3.6.1.4.1.14823.2.2.1.2.1.17.1.1.18|2|18 +1.3.6.1.4.1.14823.2.2.1.2.1.17.1.1.28|2|28 +1.3.6.1.4.1.14823.2.2.1.2.1.17.1.2.18|2|2 +1.3.6.1.4.1.14823.2.2.1.2.1.17.1.2.28|2|1 +1.3.6.1.4.1.14823.2.2.1.2.1.18.1.1.1|2|1 +1.3.6.1.4.1.14823.2.2.1.2.1.18.1.1.17|2|17 +1.3.6.1.4.1.14823.2.2.1.2.1.18.1.2.1|2|1 +1.3.6.1.4.1.14823.2.2.1.2.1.18.1.2.17|2|1 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.1.2.122.127.215|64x|027a7fd7 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.1.224.210.187.247|64x|e0d2bbf7 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.2.2.122.127.215|2|2 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.2.224.210.187.247|2|3 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.3.2.122.127.215|4x|7468656972207a6f6d6269657320717561696e746c79206f78656e206275742064726976696e672064726976696e6720717561696e746c79206163746564 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.3.224.210.187.247|4x|6163746564207a6f6d62696573 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.4.2.122.127.215|4x|717561696e746c7920717561696e746c79207a6f6d6269657320616374656420666f72776172642061637465642064726976696e672064726976696e67 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.4.224.210.187.247|4|kept +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.5.2.122.127.215|2|1 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.5.224.210.187.247|2|1 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.6.2.122.127.215|4|acted +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.6.224.210.187.247|4x|4a6164656420717561696e746c7920627574207a6f6d62696573 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.7.2.122.127.215|4x|717561696e746c7920717561696e746c79 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.7.224.210.187.247|4|zombies +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.1.8|2|8 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.1.19|2|19 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.2.8|4x|7a6f6d6269657320616374656420616374656420717561696e746c79206b657074207a6f6d62696573206b65707420627574206163746564 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.2.19|4x|6f78656e20666f7277617264204a61646564206163746564204a616465642064726976696e672064726976696e67 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.3.8|4x|62757420627574 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.3.19|4x|74686569722064726976696e672064726976696e67206b65707420627574 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.4.8|4x|717561696e746c79207a6f6d62696573206b65707420627574206b6570742064726976696e672062757420746865697220666f7277617264 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.4.19|4x|7a6f6d62696573204a61646564206b657074206b657074207a6f6d626965732064726976696e67206f78656e204a61646564204a61646564 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.5.8|4x|6f78656e206b657074207468656972204a61646564204a6164656420616374656420627574 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.5.19|4x|717561696e746c79204a616465642064726976696e672064726976696e67206163746564206f78656e204a6164656420717561696e746c79207468656972 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.6.8|4x|717561696e746c7920627574 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.6.19|4x|4a616465642064726976696e672064726976696e67207a6f6d626965732064726976696e67 +1.3.6.1.4.1.14823.2.2.1.2.1.21.0|2|30 +1.3.6.1.4.1.14823.2.2.1.2.1.22.0|2|18 +1.3.6.1.4.1.14823.2.2.1.2.1.23.0|2|14 +1.3.6.1.4.1.14823.2.2.1.2.1.24.0|2|1 +1.3.6.1.4.1.14823.2.2.1.2.1.25.0|4x|7468656972206f78656e207a6f6d62696573 +1.3.6.1.4.1.14823.2.2.1.2.1.26.0|67|2557480613 +1.3.6.1.4.1.14823.2.2.1.2.1.27.0|4x|7a6f6d6269657320627574206f78656e204a61646564207468656972206b657074 +1.3.6.1.4.1.14823.2.2.1.2.1.28.0|4|acted +1.3.6.1.4.1.14823.2.2.1.2.1.29.0|4x|6b657074207468656972207468656972 +1.3.6.1.4.1.14823.2.2.1.2.1.30.0|66|28799076 +1.3.6.1.4.1.14823.2.2.1.2.1.31.0|66|2990519834 +1.3.6.1.4.1.14823.2.2.1.2.1.32.0|2|31 +1.3.6.1.4.1.14823.2.2.1.2.2.1.0|2|20 +1.3.6.1.4.1.14823.2.2.1.2.2.2.0|2|3 +1.3.6.1.4.1.14823.2.2.1.2.2.3.0|2|27 +1.3.6.1.4.1.14823.2.2.1.2.2.4.0|2|18 +1.3.6.1.4.1.14823.2.2.1.2.2.5.0|2|13 +1.3.6.1.4.1.14823.2.2.1.2.2.6.0|2|22 +1.3.6.1.4.1.14823.2.2.1.2.2.7.0|2|13 +1.3.6.1.4.1.14823.2.2.1.2.2.8.0|2|3 +1.3.6.1.4.1.14823.2.2.1.2.2.9.0|2|0 +1.3.6.1.4.1.14823.2.2.1.2.2.10.0|2|16 +1.3.6.1.4.1.14823.2.2.1.2.2.11.0|2|30 diff --git a/test/new-e2e/ndm/snmp/compose/data/chatsworth_pdu.snmprec b/test/new-e2e/ndm/snmp/compose/data/chatsworth_pdu.snmprec new file mode 100644 index 00000000000000..b60c737fdb2351 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/chatsworth_pdu.snmprec @@ -0,0 +1,1026 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.30932.1.2 +1.3.6.1.4.1.30932.1.1.1.1.0|4|1.2.3 +1.3.6.1.4.1.30932.1.1.1.2.0|4x|5031302d313233342d414243 +1.3.6.1.4.1.30932.1.1.1.3.0|4x|30303a30453a44333a41413a43433a4545 +1.3.6.1.4.1.30932.1.1.2.1.0|2|21 +1.3.6.1.4.1.30932.1.1.2.2.0|2|4 +1.3.6.1.4.1.30932.1.1.2.3.0|2|16 +1.3.6.1.4.1.30932.1.1.2.4.0|64x|0c3155c8 +1.3.6.1.4.1.30932.1.1.2.5.1.0|2|0 +1.3.6.1.4.1.30932.1.1.2.5.2.0|2|1 +1.3.6.1.4.1.30932.1.1.2.5.3.0|2|0 +1.3.6.1.4.1.30932.1.1.2.5.4.0|2|0 +1.3.6.1.4.1.30932.1.1.2.5.5.0|2|0 +1.3.6.1.4.1.30932.1.1.2.5.6.0|2|1 +1.3.6.1.4.1.30932.1.1.2.5.7.0|2|1 +1.3.6.1.4.1.30932.1.1.2.5.8.0|2|1 +1.3.6.1.4.1.30932.1.1.2.6.0|64x|2401ee4a +1.3.6.1.4.1.30932.1.1.2.7.0|64x|70cf48d6 +1.3.6.1.4.1.30932.1.1.2.8.1.0|64x|6e6f304c +1.3.6.1.4.1.30932.1.1.2.8.2.0|64x|1ee3f1c3 +1.3.6.1.4.1.30932.1.1.2.8.3.0|64x|15e17b6d +1.3.6.1.4.1.30932.1.1.2.9.1.0|64x|72d3ac5c +1.3.6.1.4.1.30932.1.1.2.9.2.0|64x|728b5572 +1.3.6.1.4.1.30932.1.1.2.9.3.0|64x|ead5687d +1.3.6.1.4.1.30932.1.1.2.10.0|4x|7a6f6d626965732064726976696e67204a61646564 +1.3.6.1.4.1.30932.1.1.2.11.1.0|2|0 +1.3.6.1.4.1.30932.1.1.2.11.2.0|2|1 +1.3.6.1.4.1.30932.1.1.2.11.3.0|2|1 +1.3.6.1.4.1.30932.1.1.2.11.4.0|2|1 +1.3.6.1.4.1.30932.1.1.2.11.5.0|2|1 +1.3.6.1.4.1.30932.1.1.2.12.0|2|28 +1.3.6.1.4.1.30932.1.1.2.13.0|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.14.1.0|4x|61637465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.14.2.0|4x|7a6f6d6269657320666f7277617264204a61646564204a61646564207a6f6d62696573207a6f6d62696573206163746564206163746564206b657074 +1.3.6.1.4.1.30932.1.1.2.14.3.0|4x|7a6f6d62696573206f78656e204a61646564206b657074204a6164656420616374656420717561696e746c79206f78656e +1.3.6.1.4.1.30932.1.1.2.15.1.0|4x|6b657074204a6164656420627574206f78656e207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.15.2.0|4x|717561696e746c79206b657074204a61646564 +1.3.6.1.4.1.30932.1.1.2.15.3.0|4x|6b657074204a61646564206b6570742064726976696e67207a6f6d62696573204a61646564207468656972 +1.3.6.1.4.1.30932.1.1.2.16.1.0|2|0 +1.3.6.1.4.1.30932.1.1.2.16.2.0|2|0 +1.3.6.1.4.1.30932.1.1.2.16.3.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.4.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.5.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.6.0|2|0 +1.3.6.1.4.1.30932.1.1.2.16.7.0|2|0 +1.3.6.1.4.1.30932.1.1.2.16.8.0|2|0 +1.3.6.1.4.1.30932.1.1.2.16.9.0|2|0 +1.3.6.1.4.1.30932.1.1.2.16.10.0|2|0 +1.3.6.1.4.1.30932.1.1.2.16.11.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.12.0|2|0 +1.3.6.1.4.1.30932.1.1.2.16.13.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.14.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.15.0|2|0 +1.3.6.1.4.1.30932.1.1.2.16.16.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.17.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.18.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.19.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.20.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.21.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.22.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.23.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.24.0|2|0 +1.3.6.1.4.1.30932.1.1.2.17.1.0|2|26 +1.3.6.1.4.1.30932.1.1.2.17.2.0|2|7 +1.3.6.1.4.1.30932.1.1.2.17.3.0|2|11 +1.3.6.1.4.1.30932.1.1.2.17.4.0|2|2 +1.3.6.1.4.1.30932.1.1.2.17.5.0|2|15 +1.3.6.1.4.1.30932.1.1.2.17.6.0|2|4 +1.3.6.1.4.1.30932.1.1.2.17.7.0|2|9 +1.3.6.1.4.1.30932.1.1.2.17.8.0|2|21 +1.3.6.1.4.1.30932.1.1.2.17.9.0|2|14 +1.3.6.1.4.1.30932.1.1.2.17.10.0|2|8 +1.3.6.1.4.1.30932.1.1.2.17.11.0|2|31 +1.3.6.1.4.1.30932.1.1.2.17.12.0|2|7 +1.3.6.1.4.1.30932.1.1.2.17.13.0|2|1 +1.3.6.1.4.1.30932.1.1.2.17.14.0|2|18 +1.3.6.1.4.1.30932.1.1.2.17.15.0|2|16 +1.3.6.1.4.1.30932.1.1.2.17.16.0|2|1 +1.3.6.1.4.1.30932.1.1.2.17.17.0|2|22 +1.3.6.1.4.1.30932.1.1.2.17.18.0|2|22 +1.3.6.1.4.1.30932.1.1.2.17.19.0|2|7 +1.3.6.1.4.1.30932.1.1.2.17.20.0|2|9 +1.3.6.1.4.1.30932.1.1.2.17.21.0|2|1 +1.3.6.1.4.1.30932.1.1.2.17.22.0|2|7 +1.3.6.1.4.1.30932.1.1.2.17.23.0|2|22 +1.3.6.1.4.1.30932.1.1.2.17.24.0|2|4 +1.3.6.1.4.1.30932.1.1.2.18.1.0|2|28 +1.3.6.1.4.1.30932.1.1.2.18.2.0|2|23 +1.3.6.1.4.1.30932.1.1.2.18.3.0|2|9 +1.3.6.1.4.1.30932.1.1.2.18.4.0|2|26 +1.3.6.1.4.1.30932.1.1.2.18.5.0|2|14 +1.3.6.1.4.1.30932.1.1.2.18.6.0|2|20 +1.3.6.1.4.1.30932.1.1.2.18.7.0|2|23 +1.3.6.1.4.1.30932.1.1.2.18.8.0|2|15 +1.3.6.1.4.1.30932.1.1.2.18.9.0|2|15 +1.3.6.1.4.1.30932.1.1.2.18.10.0|2|28 +1.3.6.1.4.1.30932.1.1.2.18.11.0|2|11 +1.3.6.1.4.1.30932.1.1.2.18.12.0|2|11 +1.3.6.1.4.1.30932.1.1.2.18.13.0|2|4 +1.3.6.1.4.1.30932.1.1.2.18.14.0|2|15 +1.3.6.1.4.1.30932.1.1.2.18.15.0|2|25 +1.3.6.1.4.1.30932.1.1.2.18.16.0|2|31 +1.3.6.1.4.1.30932.1.1.2.18.17.0|2|28 +1.3.6.1.4.1.30932.1.1.2.18.18.0|2|27 +1.3.6.1.4.1.30932.1.1.2.18.19.0|2|16 +1.3.6.1.4.1.30932.1.1.2.18.20.0|2|6 +1.3.6.1.4.1.30932.1.1.2.18.21.0|2|9 +1.3.6.1.4.1.30932.1.1.2.18.22.0|2|16 +1.3.6.1.4.1.30932.1.1.2.18.23.0|2|23 +1.3.6.1.4.1.30932.1.1.2.18.24.0|2|27 +1.3.6.1.4.1.30932.1.1.2.19.1.0|2|8 +1.3.6.1.4.1.30932.1.1.2.19.2.0|2|21 +1.3.6.1.4.1.30932.1.1.2.19.3.0|2|8 +1.3.6.1.4.1.30932.1.1.2.19.4.0|2|8 +1.3.6.1.4.1.30932.1.1.2.19.5.0|2|26 +1.3.6.1.4.1.30932.1.1.2.19.6.0|2|1 +1.3.6.1.4.1.30932.1.1.2.20.1.0|2|5 +1.3.6.1.4.1.30932.1.1.2.20.2.0|2|7 +1.3.6.1.4.1.30932.1.1.2.20.3.0|2|15 +1.3.6.1.4.1.30932.1.1.2.20.4.0|2|12 +1.3.6.1.4.1.30932.1.1.2.20.5.0|2|30 +1.3.6.1.4.1.30932.1.1.2.20.6.0|2|0 +1.3.6.1.4.1.30932.1.1.2.21.1.0|2|19 +1.3.6.1.4.1.30932.1.1.2.21.2.0|2|22 +1.3.6.1.4.1.30932.1.1.2.21.3.0|2|21 +1.3.6.1.4.1.30932.1.1.2.21.4.0|2|0 +1.3.6.1.4.1.30932.1.1.2.21.5.0|2|11 +1.3.6.1.4.1.30932.1.1.2.21.6.0|2|6 +1.3.6.1.4.1.30932.1.1.2.22.1.0|2|6 +1.3.6.1.4.1.30932.1.1.2.22.2.0|2|27 +1.3.6.1.4.1.30932.1.1.2.22.3.0|2|17 +1.3.6.1.4.1.30932.1.1.2.22.4.0|2|21 +1.3.6.1.4.1.30932.1.1.2.22.5.0|2|0 +1.3.6.1.4.1.30932.1.1.2.22.6.0|2|13 +1.3.6.1.4.1.30932.1.1.2.24.1.0|2|17 +1.3.6.1.4.1.30932.1.1.2.24.2.0|2|4 +1.3.6.1.4.1.30932.1.1.2.24.3.0|2|26 +1.3.6.1.4.1.30932.1.1.2.24.4.0|2|29 +1.3.6.1.4.1.30932.1.1.2.24.5.0|2|21 +1.3.6.1.4.1.30932.1.1.2.24.6.0|2|26 +1.3.6.1.4.1.30932.1.1.2.25.1.0|2|13 +1.3.6.1.4.1.30932.1.1.2.25.2.0|2|28 +1.3.6.1.4.1.30932.1.1.2.25.3.0|2|21 +1.3.6.1.4.1.30932.1.1.2.25.4.0|2|24 +1.3.6.1.4.1.30932.1.1.2.25.5.0|2|30 +1.3.6.1.4.1.30932.1.1.2.25.6.0|2|2 +1.3.6.1.4.1.30932.1.1.2.26.1.0|2|26 +1.3.6.1.4.1.30932.1.1.2.26.2.0|2|28 +1.3.6.1.4.1.30932.1.1.2.26.3.0|2|0 +1.3.6.1.4.1.30932.1.1.2.26.4.0|2|17 +1.3.6.1.4.1.30932.1.1.2.26.5.0|2|21 +1.3.6.1.4.1.30932.1.1.2.26.6.0|2|11 +1.3.6.1.4.1.30932.1.1.2.27.1.0|2|27 +1.3.6.1.4.1.30932.1.1.2.27.2.0|2|7 +1.3.6.1.4.1.30932.1.1.2.27.3.0|2|18 +1.3.6.1.4.1.30932.1.1.2.27.4.0|2|15 +1.3.6.1.4.1.30932.1.1.2.27.5.0|2|20 +1.3.6.1.4.1.30932.1.1.2.27.6.0|2|31 +1.3.6.1.4.1.30932.1.1.2.28.1.0|2|25 +1.3.6.1.4.1.30932.1.1.2.28.2.0|2|0 +1.3.6.1.4.1.30932.1.1.2.28.3.0|2|28 +1.3.6.1.4.1.30932.1.1.2.28.4.0|2|14 +1.3.6.1.4.1.30932.1.1.2.28.5.0|2|27 +1.3.6.1.4.1.30932.1.1.2.28.6.0|2|10 +1.3.6.1.4.1.30932.1.1.2.28.7.0|2|0 +1.3.6.1.4.1.30932.1.1.2.28.8.0|2|20 +1.3.6.1.4.1.30932.1.1.2.28.9.0|2|9 +1.3.6.1.4.1.30932.1.1.2.28.10.0|2|4 +1.3.6.1.4.1.30932.1.1.2.28.11.0|2|16 +1.3.6.1.4.1.30932.1.1.2.28.12.0|2|19 +1.3.6.1.4.1.30932.1.1.2.28.13.0|2|29 +1.3.6.1.4.1.30932.1.1.2.28.14.0|2|2 +1.3.6.1.4.1.30932.1.1.2.28.15.0|2|16 +1.3.6.1.4.1.30932.1.1.2.28.16.0|2|3 +1.3.6.1.4.1.30932.1.1.2.28.17.0|2|17 +1.3.6.1.4.1.30932.1.1.2.28.18.0|2|17 +1.3.6.1.4.1.30932.1.1.2.28.19.0|2|23 +1.3.6.1.4.1.30932.1.1.2.28.20.0|2|24 +1.3.6.1.4.1.30932.1.1.2.28.21.0|2|12 +1.3.6.1.4.1.30932.1.1.2.28.22.0|2|24 +1.3.6.1.4.1.30932.1.1.2.28.23.0|2|16 +1.3.6.1.4.1.30932.1.1.2.28.24.0|2|0 +1.3.6.1.4.1.30932.1.1.2.29.1.0|2|13 +1.3.6.1.4.1.30932.1.1.2.29.2.0|2|13 +1.3.6.1.4.1.30932.1.1.2.29.3.0|2|19 +1.3.6.1.4.1.30932.1.1.2.29.4.0|2|17 +1.3.6.1.4.1.30932.1.1.2.29.5.0|2|15 +1.3.6.1.4.1.30932.1.1.2.29.6.0|2|26 +1.3.6.1.4.1.30932.1.1.2.29.7.0|2|24 +1.3.6.1.4.1.30932.1.1.2.29.8.0|2|17 +1.3.6.1.4.1.30932.1.1.2.29.9.0|2|17 +1.3.6.1.4.1.30932.1.1.2.29.10.0|2|3 +1.3.6.1.4.1.30932.1.1.2.29.11.0|2|3 +1.3.6.1.4.1.30932.1.1.2.29.12.0|2|16 +1.3.6.1.4.1.30932.1.1.2.29.13.0|2|18 +1.3.6.1.4.1.30932.1.1.2.29.14.0|2|25 +1.3.6.1.4.1.30932.1.1.2.29.15.0|2|10 +1.3.6.1.4.1.30932.1.1.2.29.16.0|2|22 +1.3.6.1.4.1.30932.1.1.2.29.17.0|2|0 +1.3.6.1.4.1.30932.1.1.2.29.18.0|2|9 +1.3.6.1.4.1.30932.1.1.2.29.19.0|2|27 +1.3.6.1.4.1.30932.1.1.2.29.20.0|2|9 +1.3.6.1.4.1.30932.1.1.2.29.21.0|2|12 +1.3.6.1.4.1.30932.1.1.2.29.22.0|2|6 +1.3.6.1.4.1.30932.1.1.2.29.23.0|2|27 +1.3.6.1.4.1.30932.1.1.2.29.24.0|2|26 +1.3.6.1.4.1.30932.1.1.2.30.1.0|2|18 +1.3.6.1.4.1.30932.1.1.2.30.2.0|2|2 +1.3.6.1.4.1.30932.1.1.2.30.3.0|2|25 +1.3.6.1.4.1.30932.1.1.2.30.4.0|2|11 +1.3.6.1.4.1.30932.1.1.2.30.5.0|2|24 +1.3.6.1.4.1.30932.1.1.2.30.6.0|2|21 +1.3.6.1.4.1.30932.1.1.2.30.7.0|2|25 +1.3.6.1.4.1.30932.1.1.2.30.8.0|2|7 +1.3.6.1.4.1.30932.1.1.2.30.9.0|2|5 +1.3.6.1.4.1.30932.1.1.2.30.10.0|2|30 +1.3.6.1.4.1.30932.1.1.2.30.11.0|2|19 +1.3.6.1.4.1.30932.1.1.2.30.12.0|2|21 +1.3.6.1.4.1.30932.1.1.2.30.13.0|2|13 +1.3.6.1.4.1.30932.1.1.2.30.14.0|2|25 +1.3.6.1.4.1.30932.1.1.2.30.15.0|2|10 +1.3.6.1.4.1.30932.1.1.2.30.16.0|2|17 +1.3.6.1.4.1.30932.1.1.2.30.17.0|2|20 +1.3.6.1.4.1.30932.1.1.2.30.18.0|2|5 +1.3.6.1.4.1.30932.1.1.2.30.19.0|2|9 +1.3.6.1.4.1.30932.1.1.2.30.20.0|2|8 +1.3.6.1.4.1.30932.1.1.2.30.21.0|2|2 +1.3.6.1.4.1.30932.1.1.2.30.22.0|2|28 +1.3.6.1.4.1.30932.1.1.2.30.23.0|2|24 +1.3.6.1.4.1.30932.1.1.2.30.24.0|2|5 +1.3.6.1.4.1.30932.1.1.2.31.1.0|2|11 +1.3.6.1.4.1.30932.1.1.2.31.2.0|2|2 +1.3.6.1.4.1.30932.1.1.2.31.3.0|2|26 +1.3.6.1.4.1.30932.1.1.2.31.4.0|2|4 +1.3.6.1.4.1.30932.1.1.2.31.5.0|2|3 +1.3.6.1.4.1.30932.1.1.2.31.6.0|2|3 +1.3.6.1.4.1.30932.1.1.2.31.7.0|2|10 +1.3.6.1.4.1.30932.1.1.2.31.8.0|2|27 +1.3.6.1.4.1.30932.1.1.2.31.9.0|2|19 +1.3.6.1.4.1.30932.1.1.2.31.10.0|2|7 +1.3.6.1.4.1.30932.1.1.2.31.11.0|2|15 +1.3.6.1.4.1.30932.1.1.2.31.12.0|2|24 +1.3.6.1.4.1.30932.1.1.2.31.13.0|2|9 +1.3.6.1.4.1.30932.1.1.2.31.14.0|2|14 +1.3.6.1.4.1.30932.1.1.2.31.15.0|2|4 +1.3.6.1.4.1.30932.1.1.2.31.16.0|2|1 +1.3.6.1.4.1.30932.1.1.2.31.17.0|2|24 +1.3.6.1.4.1.30932.1.1.2.31.18.0|2|0 +1.3.6.1.4.1.30932.1.1.2.31.19.0|2|21 +1.3.6.1.4.1.30932.1.1.2.31.20.0|2|14 +1.3.6.1.4.1.30932.1.1.2.31.21.0|2|1 +1.3.6.1.4.1.30932.1.1.2.31.22.0|2|31 +1.3.6.1.4.1.30932.1.1.2.31.23.0|2|15 +1.3.6.1.4.1.30932.1.1.2.31.24.0|2|3 +1.3.6.1.4.1.30932.1.1.2.32.1.0|2|10 +1.3.6.1.4.1.30932.1.1.2.32.2.0|2|11 +1.3.6.1.4.1.30932.1.1.2.33.1.0|2|2 +1.3.6.1.4.1.30932.1.1.2.33.2.0|2|22 +1.3.6.1.4.1.30932.1.1.2.34.1.0|2|3 +1.3.6.1.4.1.30932.1.1.2.34.2.0|2|10 +1.3.6.1.4.1.30932.1.1.2.35.1.0|2|3 +1.3.6.1.4.1.30932.1.1.2.35.2.0|2|23 +1.3.6.1.4.1.30932.1.1.2.36.1.0|2|17 +1.3.6.1.4.1.30932.1.1.2.36.2.0|2|7 +1.3.6.1.4.1.30932.1.1.2.37.1.0|2|19 +1.3.6.1.4.1.30932.1.1.2.37.2.0|2|26 +1.3.6.1.4.1.30932.1.1.2.38.1.0|2|7 +1.3.6.1.4.1.30932.1.1.2.38.2.0|2|18 +1.3.6.1.4.1.30932.1.1.2.39.1.0|2|7 +1.3.6.1.4.1.30932.1.1.2.39.2.0|2|21 +1.3.6.1.4.1.30932.1.1.2.40.0|4x|6c65676163792d6e616d6531 +1.3.6.1.4.1.30932.1.1.2.41.0|4x|7a6f6d626965732064726976696e6720746865697220666f7277617264204a61646564 +1.3.6.1.4.1.30932.1.1.2.42.1.0|4x|6b657074207468656972204a61646564206f78656e207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.42.2.0|4x|7a6f6d6269657320666f72776172642062757420717561696e746c79206163746564 +1.3.6.1.4.1.30932.1.1.2.42.3.0|4|their +1.3.6.1.4.1.30932.1.1.2.42.4.0|4x|62757420666f7277617264207a6f6d62696573207468656972206b657074204a61646564207468656972206b657074 +1.3.6.1.4.1.30932.1.1.2.42.5.0|4x|64726976696e67207a6f6d62696573206f78656e20627574206f78656e2064726976696e67 +1.3.6.1.4.1.30932.1.1.2.42.6.0|4x|64726976696e672074686569722064726976696e67206b6570742064726976696e6720717561696e746c792064726976696e6720666f7277617264 +1.3.6.1.4.1.30932.1.1.2.42.7.0|4x|7a6f6d6269657320627574206275742064726976696e67206b65707420746865697220627574206b657074206f78656e +1.3.6.1.4.1.30932.1.1.2.42.8.0|4x|4a61646564204a6164656420717561696e746c79206f78656e +1.3.6.1.4.1.30932.1.1.2.42.9.0|4x|64726976696e672064726976696e6720666f727761726420666f7277617264206163746564207a6f6d6269657320627574 +1.3.6.1.4.1.30932.1.1.2.42.10.0|4x|64726976696e67206163746564206163746564204a6164656420717561696e746c7920717561696e746c792074686569722064726976696e67206163746564 +1.3.6.1.4.1.30932.1.1.2.42.11.0|4x|64726976696e6720717561696e746c79207468656972207a6f6d6269657320666f727761726420666f727761726420627574206b657074 +1.3.6.1.4.1.30932.1.1.2.42.12.0|4x|746865697220717561696e746c79207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.42.13.0|4x|6f78656e20627574206f78656e20666f727761726420627574206b65707420666f72776172642064726976696e6720717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.42.14.0|4x|7468656972206f78656e207a6f6d62696573206f78656e +1.3.6.1.4.1.30932.1.1.2.42.15.0|4x|6b657074206b65707420666f72776172642062757420666f7277617264204a6164656420717561696e746c79206f78656e +1.3.6.1.4.1.30932.1.1.2.42.16.0|4x|6b657074206163746564 +1.3.6.1.4.1.30932.1.1.2.42.17.0|4x|7a6f6d626965732064726976696e67 +1.3.6.1.4.1.30932.1.1.2.42.18.0|4x|717561696e746c79204a6164656420746865697220627574204a6164656420627574204a61646564 +1.3.6.1.4.1.30932.1.1.2.42.19.0|4|kept +1.3.6.1.4.1.30932.1.1.2.42.20.0|4x|7a6f6d626965732064726976696e67204a61646564206163746564206b65707420666f727761726420616374656420627574 +1.3.6.1.4.1.30932.1.1.2.42.21.0|4x|717561696e746c79206275742062757420717561696e746c7920666f727761726420666f7277617264 +1.3.6.1.4.1.30932.1.1.2.42.22.0|4x|616374656420666f7277617264204a61646564207468656972 +1.3.6.1.4.1.30932.1.1.2.42.23.0|4x|627574207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.30932.1.1.2.42.24.0|4|driving +1.3.6.1.4.1.30932.1.1.2.43.1.0|4x|6b657074204a616465642062757420616374656420717561696e746c79206f78656e20616374656420666f7277617264 +1.3.6.1.4.1.30932.1.1.2.43.2.0|4x|6b65707420627574 +1.3.6.1.4.1.30932.1.1.2.43.3.0|4|their +1.3.6.1.4.1.30932.1.1.2.43.4.0|4|oxen +1.3.6.1.4.1.30932.1.1.2.43.5.0|4x|7468656972207a6f6d62696573206f78656e207a6f6d62696573207468656972206b657074207468656972 +1.3.6.1.4.1.30932.1.1.2.43.6.0|4x|6275742064726976696e67206163746564204a61646564 +1.3.6.1.4.1.30932.1.1.2.43.7.0|4x|6f78656e2064726976696e67206163746564206f78656e206163746564 +1.3.6.1.4.1.30932.1.1.2.43.8.0|4|but +1.3.6.1.4.1.30932.1.1.2.43.9.0|4x|666f727761726420666f7277617264207468656972207468656972 +1.3.6.1.4.1.30932.1.1.2.43.10.0|4x|6b657074206f78656e +1.3.6.1.4.1.30932.1.1.2.43.11.0|4x|4a6164656420666f727761726420666f7277617264207a6f6d626965732062757420746865697220717561696e746c79207468656972 +1.3.6.1.4.1.30932.1.1.2.43.12.0|4x|4a61646564206b65707420627574206b657074207468656972204a61646564207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.43.13.0|4|oxen +1.3.6.1.4.1.30932.1.1.2.43.14.0|4x|717561696e746c7920627574206163746564207a6f6d62696573206b657074207a6f6d626965732064726976696e67 +1.3.6.1.4.1.30932.1.1.2.43.15.0|4|Jaded +1.3.6.1.4.1.30932.1.1.2.43.16.0|4x|4a616465642064726976696e67207a6f6d62696573204a61646564204a6164656420616374656420717561696e746c79206163746564206b657074 +1.3.6.1.4.1.30932.1.1.2.43.17.0|4x|627574204a61646564207a6f6d6269657320616374656420666f727761726420717561696e746c79207468656972204a61646564 +1.3.6.1.4.1.30932.1.1.2.43.18.0|4x|7468656972207a6f6d6269657320627574204a616465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.43.19.0|4x|616374656420666f7277617264204a61646564206163746564204a6164656420666f727761726420746865697220616374656420717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.43.20.0|4x|7468656972204a61646564206b65707420746865697220627574207468656972206f78656e204a61646564 +1.3.6.1.4.1.30932.1.1.2.43.21.0|4x|61637465642062757420717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.43.22.0|4x|74686569722064726976696e672064726976696e6720717561696e746c792061637465642064726976696e67206f78656e20627574 +1.3.6.1.4.1.30932.1.1.2.43.23.0|4x|717561696e746c79206f78656e206b657074207a6f6d6269657320666f727761726420616374656420666f7277617264206163746564 +1.3.6.1.4.1.30932.1.1.2.43.24.0|4x|627574207468656972207468656972206163746564207468656972206f78656e +1.3.6.1.4.1.30932.1.1.2.50.1.0|4x|64726976696e67204a61646564206163746564 +1.3.6.1.4.1.30932.1.1.2.50.2.0|4x|717561696e746c79206b657074 +1.3.6.1.4.1.30932.1.1.2.50.3.0|4x|4a61646564204a61646564 +1.3.6.1.4.1.30932.1.1.2.50.4.0|4x|6b6570742064726976696e67204a61646564206b657074206163746564206b6570742064726976696e6720717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.50.5.0|4x|7a6f6d62696573206b657074206f78656e206f78656e20666f7277617264206b657074207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.50.6.0|4x|7a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.50.7.0|4x|666f727761726420717561696e746c79207a6f6d626965732064726976696e6720666f727761726420717561696e746c79207468656972207468656972 +1.3.6.1.4.1.30932.1.1.2.50.8.0|4x|717561696e746c7920627574 +1.3.6.1.4.1.30932.1.1.2.50.9.0|4x|6b6570742074686569722064726976696e672062757420666f72776172642064726976696e67207468656972207a6f6d626965732064726976696e67 +1.3.6.1.4.1.30932.1.1.2.50.10.0|4x|666f7277617264204a6164656420666f7277617264206b657074207a6f6d62696573206163746564 +1.3.6.1.4.1.30932.1.1.2.50.11.0|4x|4a61646564206f78656e20666f727761726420717561696e746c79206b657074 +1.3.6.1.4.1.30932.1.1.2.50.12.0|4x|62757420627574204a6164656420746865697220717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.50.13.0|4x|62757420666f7277617264206f78656e20746865697220666f727761726420627574207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.50.14.0|4x|7a6f6d62696573206b657074207a6f6d6269657320666f727761726420627574206f78656e20666f727761726420627574207468656972 +1.3.6.1.4.1.30932.1.1.2.50.15.0|4x|64726976696e67206f78656e206b657074206163746564206b6570742064726976696e67 +1.3.6.1.4.1.30932.1.1.2.50.16.0|4|Jaded +1.3.6.1.4.1.30932.1.1.2.51.1.0|4x|64726976696e67207a6f6d6269657320666f7277617264204a6164656420627574207a6f6d62696573207a6f6d626965732064726976696e67207468656972 +1.3.6.1.4.1.30932.1.1.2.51.2.0|4x|746865697220616374656420717561696e746c792064726976696e67206163746564206b657074207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.51.3.0|4x|717561696e746c79204a6164656420717561696e746c7920666f7277617264204a61646564 +1.3.6.1.4.1.30932.1.1.2.51.4.0|4|quaintly +1.3.6.1.4.1.30932.1.1.2.51.5.0|4|but +1.3.6.1.4.1.30932.1.1.2.51.6.0|4|kept +1.3.6.1.4.1.30932.1.1.2.51.7.0|4|kept +1.3.6.1.4.1.30932.1.1.2.51.8.0|4x|7468656972207468656972204a61646564206f78656e206163746564 +1.3.6.1.4.1.30932.1.1.2.51.9.0|4x|6b65707420717561696e746c7920627574206f78656e207a6f6d6269657320746865697220717561696e746c79206163746564 +1.3.6.1.4.1.30932.1.1.2.51.10.0|4x|6f78656e204a61646564204a61646564206f78656e206f78656e204a6164656420717561696e746c7920717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.51.11.0|4x|6b65707420627574207a6f6d6269657320627574207a6f6d6269657320616374656420746865697220627574204a61646564 +1.3.6.1.4.1.30932.1.1.2.51.12.0|4|quaintly +1.3.6.1.4.1.30932.1.1.2.51.13.0|4x|4a6164656420746865697220717561696e746c79207468656972207a6f6d626965732064726976696e672062757420666f727761726420666f7277617264 +1.3.6.1.4.1.30932.1.1.2.51.14.0|4x|6f78656e2074686569722064726976696e67206f78656e207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.51.15.0|4x|717561696e746c79204a6164656420627574206163746564 +1.3.6.1.4.1.30932.1.1.2.51.16.0|4x|717561696e746c7920616374656420717561696e746c79206b657074 +1.3.6.1.4.1.30932.1.1.2.55.0|2|24 +1.3.6.1.4.1.30932.1.1.2.56.0|2|5 +1.3.6.1.4.1.30932.1.1.2.57.0|2|5 +1.3.6.1.4.1.30932.1.1.2.58.1.0|2|1 +1.3.6.1.4.1.30932.1.1.2.58.2.0|2|1 +1.3.6.1.4.1.30932.1.1.2.58.3.0|2|1 +1.3.6.1.4.1.30932.1.1.2.58.4.0|2|0 +1.3.6.1.4.1.30932.1.1.2.58.5.0|2|0 +1.3.6.1.4.1.30932.1.1.2.58.6.0|2|1 +1.3.6.1.4.1.30932.1.1.2.58.7.0|2|1 +1.3.6.1.4.1.30932.1.1.2.58.8.0|2|1 +1.3.6.1.4.1.30932.1.1.2.58.9.0|2|1 +1.3.6.1.4.1.30932.1.1.2.58.10.0|2|0 +1.3.6.1.4.1.30932.1.1.2.58.11.0|2|0 +1.3.6.1.4.1.30932.1.1.2.58.12.0|2|1 +1.3.6.1.4.1.30932.1.1.2.58.13.0|2|0 +1.3.6.1.4.1.30932.1.1.2.58.14.0|2|0 +1.3.6.1.4.1.30932.1.1.2.58.15.0|2|1 +1.3.6.1.4.1.30932.1.1.2.59.1.0|2|3 +1.3.6.1.4.1.30932.1.1.2.59.2.0|2|25 +1.3.6.1.4.1.30932.1.1.2.60.1.0|2|28 +1.3.6.1.4.1.30932.1.1.2.60.2.0|2|8 +1.3.6.1.4.1.30932.1.1.2.61.1.0|2|26 +1.3.6.1.4.1.30932.1.1.2.61.2.0|2|17 +1.3.6.1.4.1.30932.1.1.2.62.1.0|2|25 +1.3.6.1.4.1.30932.1.1.2.62.2.0|2|12 +1.3.6.1.4.1.30932.1.1.2.63.0|4x|6b657074206f78656e +1.3.6.1.4.1.30932.1.1.2.64.0|4|but +1.3.6.1.4.1.30932.1.1.2.65.0|4x|746865697220717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.66.0|4x|6275742064726976696e6720746865697220666f7277617264207a6f6d6269657320666f7277617264206b65707420717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.67.0|4x|4a61646564206f78656e206b65707420717561696e746c79207a6f6d62696573207468656972 +1.3.6.1.4.1.30932.1.1.2.68.0|4|oxen +1.3.6.1.4.1.30932.1.1.2.69.1.0|2|3 +1.3.6.1.4.1.30932.1.1.2.69.2.0|2|0 +1.3.6.1.4.1.30932.1.1.2.69.3.0|2|1 +1.3.6.1.4.1.30932.1.1.2.70.0|4x|4a61646564206f78656e207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.71.0|4x|616374656420666f7277617264207a6f6d62696573206b657074207a6f6d62696573206b6570742061637465642064726976696e67207468656972 +1.3.6.1.4.1.30932.1.1.2.72.0|4x|666f727761726420717561696e746c79206f78656e +1.3.6.1.4.1.30932.1.1.2.73.0|4|acted +1.3.6.1.4.1.30932.1.1.2.74.0|4|forward +1.3.6.1.4.1.30932.1.1.2.75.0|4x|717561696e746c792064726976696e672064726976696e6720616374656420627574204a616465642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.76.0|4x|616374656420717561696e746c792064726976696e6720717561696e746c79206b657074206f78656e2064726976696e67206163746564204a61646564 +1.3.6.1.4.1.30932.1.1.2.77.0|4x|627574204a6164656420717561696e746c792064726976696e6720717561696e746c7920717561696e746c7920666f7277617264206163746564 +1.3.6.1.4.1.30932.1.1.2.78.0|4x|4a6164656420717561696e746c79206275742064726976696e67206f78656e20627574206163746564204a61646564 +1.3.6.1.4.1.30932.1.1.2.79.1.0|4x|6b65707420717561696e746c792064726976696e672064726976696e67206f78656e20627574 +1.3.6.1.4.1.30932.1.1.2.79.2.0|4x|7a6f6d62696573206f78656e206f78656e2064726976696e6720746865697220666f7277617264206f78656e207468656972207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.79.3.0|4x|6f78656e207468656972206f78656e207a6f6d62696573204a61646564204a61646564 +1.3.6.1.4.1.30932.1.1.2.80.0|2|2 +1.3.6.1.4.1.30932.1.1.2.81.0|4x|717561696e746c79207a6f6d62696573206b657074207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.82.0|4|forward +1.3.6.1.4.1.30932.1.1.2.83.0|4|oxen +1.3.6.1.4.1.30932.1.1.2.84.1.0|2|31 +1.3.6.1.4.1.30932.1.1.2.84.2.0|2|25 +1.3.6.1.4.1.30932.1.1.2.85.0|4x|64726976696e67206f78656e20616374656420717561696e746c7920717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.86.0|4x|6163746564204a61646564207a6f6d6269657320717561696e746c79207468656972204a616465642064726976696e67 +1.3.6.1.4.1.30932.1.1.2.87.1.0|2|22 +1.3.6.1.4.1.30932.1.1.2.87.2.0|2|15 +1.3.6.1.4.1.30932.1.1.2.88.1.0|4|kept +1.3.6.1.4.1.30932.1.1.2.88.2.0|4x|7a6f6d62696573206b657074204a616465642074686569722061637465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.89.1.0|2|1 +1.3.6.1.4.1.30932.1.1.2.89.2.0|2|1 +1.3.6.1.4.1.30932.1.1.2.89.3.0|2|0 +1.3.6.1.4.1.30932.1.1.2.89.4.0|2|1 +1.3.6.1.4.1.30932.1.1.2.89.5.0|2|0 +1.3.6.1.4.1.30932.1.1.2.89.6.0|2|0 +1.3.6.1.4.1.30932.1.1.2.89.7.0|2|0 +1.3.6.1.4.1.30932.1.1.2.89.8.0|2|1 +1.3.6.1.4.1.30932.1.1.2.89.9.0|2|0 +1.3.6.1.4.1.30932.1.1.2.89.10.0|2|1 +1.3.6.1.4.1.30932.1.1.2.89.11.0|2|0 +1.3.6.1.4.1.30932.1.1.2.89.12.0|2|1 +1.3.6.1.4.1.30932.1.1.2.90.0|2|14 +1.3.6.1.4.1.30932.1.1.2.91.0|2|70 +1.3.6.1.4.1.30932.1.1.2.92.0|4x|616374656420627574 +1.3.6.1.4.1.30932.1.1.2.93.0|2|3 +1.3.6.1.4.1.30932.1.1.2.94.0|4x|627574204a61646564206b65707420746865697220717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.95.0|4x|666f727761726420746865697220666f7277617264206f78656e20717561696e746c79206f78656e +1.3.6.1.4.1.30932.1.1.2.96.0|4x|666f7277617264204a6164656420717561696e746c7920666f727761726420666f727761726420666f7277617264 +1.3.6.1.4.1.30932.1.1.2.97.0|4x|4a6164656420666f7277617264 +1.3.6.1.4.1.30932.1.1.2.98.1.0|64x|c4fac691 +1.3.6.1.4.1.30932.1.1.2.98.2.0|64x|31fde63e +1.3.6.1.4.1.30932.1.1.2.98.3.0|64x|276b1d6f +1.3.6.1.4.1.30932.1.1.2.99.1.0|4|but +1.3.6.1.4.1.30932.1.1.2.99.2.0|4x|6b657074206f78656e206f78656e206163746564206b657074 +1.3.6.1.4.1.30932.1.1.2.99.3.0|4x|7a6f6d62696573206f78656e206163746564206163746564207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.100.0|2|17 +1.3.6.1.4.1.30932.1.1.3.1.1.0|2|11 +1.3.6.1.4.1.30932.1.1.3.1.2.0|2|0 +1.3.6.1.4.1.30932.1.1.3.1.3.0|2|7 +1.3.6.1.4.1.30932.1.1.3.1.4.0|2|15 +1.3.6.1.4.1.30932.1.1.3.1.5.0|2|9 +1.3.6.1.4.1.30932.1.1.3.1.6.0|2|24 +1.3.6.1.4.1.30932.1.1.3.2.1.0|2|26 +1.3.6.1.4.1.30932.1.1.3.2.2.0|2|17 +1.3.6.1.4.1.30932.1.1.3.2.3.0|2|22 +1.3.6.1.4.1.30932.1.1.3.2.4.0|2|30 +1.3.6.1.4.1.30932.1.1.3.2.5.0|2|7 +1.3.6.1.4.1.30932.1.1.3.2.6.0|2|26 +1.3.6.1.4.1.30932.1.1.3.3.1.0|2|3 +1.3.6.1.4.1.30932.1.1.3.3.2.0|2|8 +1.3.6.1.4.1.30932.1.1.3.3.3.0|2|10 +1.3.6.1.4.1.30932.1.1.3.3.4.0|2|11 +1.3.6.1.4.1.30932.1.1.3.3.5.0|2|17 +1.3.6.1.4.1.30932.1.1.3.3.6.0|2|31 +1.3.6.1.4.1.30932.1.1.3.4.1.0|2|2 +1.3.6.1.4.1.30932.1.1.3.4.2.0|2|15 +1.3.6.1.4.1.30932.1.1.3.4.3.0|2|21 +1.3.6.1.4.1.30932.1.1.3.4.4.0|2|22 +1.3.6.1.4.1.30932.1.1.3.4.5.0|2|17 +1.3.6.1.4.1.30932.1.1.3.4.6.0|2|18 +1.3.6.1.4.1.30932.1.1.3.5.1.0|2|3 +1.3.6.1.4.1.30932.1.1.3.5.2.0|2|8 +1.3.6.1.4.1.30932.1.1.3.5.3.0|2|23 +1.3.6.1.4.1.30932.1.1.3.5.4.0|2|17 +1.3.6.1.4.1.30932.1.1.3.5.5.0|2|20 +1.3.6.1.4.1.30932.1.1.3.5.6.0|2|30 +1.3.6.1.4.1.30932.1.1.3.5.7.0|2|19 +1.3.6.1.4.1.30932.1.1.3.5.8.0|2|12 +1.3.6.1.4.1.30932.1.1.3.5.9.0|2|5 +1.3.6.1.4.1.30932.1.1.3.5.10.0|2|23 +1.3.6.1.4.1.30932.1.1.3.5.11.0|2|28 +1.3.6.1.4.1.30932.1.1.3.5.12.0|2|14 +1.3.6.1.4.1.30932.1.1.3.5.13.0|2|25 +1.3.6.1.4.1.30932.1.1.3.5.14.0|2|0 +1.3.6.1.4.1.30932.1.1.3.5.15.0|2|24 +1.3.6.1.4.1.30932.1.1.3.5.16.0|2|20 +1.3.6.1.4.1.30932.1.1.3.5.17.0|2|15 +1.3.6.1.4.1.30932.1.1.3.5.18.0|2|3 +1.3.6.1.4.1.30932.1.1.3.5.19.0|2|28 +1.3.6.1.4.1.30932.1.1.3.5.20.0|2|17 +1.3.6.1.4.1.30932.1.1.3.5.21.0|2|29 +1.3.6.1.4.1.30932.1.1.3.5.22.0|2|5 +1.3.6.1.4.1.30932.1.1.3.5.23.0|2|15 +1.3.6.1.4.1.30932.1.1.3.5.24.0|2|9 +1.3.6.1.4.1.30932.1.1.3.6.0|4x|7468656972204a6164656420627574 +1.3.6.1.4.1.30932.1.1.3.7.1.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.2.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.3.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.4.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.5.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.6.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.7.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.8.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.9.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.10.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.11.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.12.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.13.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.14.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.15.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.16.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.17.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.18.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.19.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.20.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.21.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.22.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.23.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.24.0|2|0 +1.3.6.1.4.1.30932.1.1.3.8.1.0|2|30 +1.3.6.1.4.1.30932.1.1.3.8.2.0|2|20 +1.3.6.1.4.1.30932.1.1.3.9.1.0|2|16 +1.3.6.1.4.1.30932.1.1.3.9.2.0|2|29 +1.3.6.1.4.1.30932.1.1.3.10.1.0|2|3 +1.3.6.1.4.1.30932.1.1.3.10.2.0|2|14 +1.3.6.1.4.1.30932.1.1.3.10.3.0|2|11 +1.3.6.1.4.1.30932.1.1.3.10.4.0|2|9 +1.3.6.1.4.1.30932.1.1.3.10.5.0|2|7 +1.3.6.1.4.1.30932.1.1.3.10.7.0|2|31 +1.3.6.1.4.1.30932.1.1.3.10.9.0|2|0 +1.3.6.1.4.1.30932.1.1.3.10.11.0|2|14 +1.3.6.1.4.1.30932.1.1.3.11.1.0|70|16264590203672736646 +1.3.6.1.4.1.30932.1.1.3.11.2.0|70|10480497828214594536 +1.3.6.1.4.1.30932.1.1.3.11.3.0|70|15275984435908529563 +1.3.6.1.4.1.30932.1.1.3.11.4.0|70|2649644366939238895 +1.3.6.1.4.1.30932.1.1.3.11.5.0|70|16023443192449606371 +1.3.6.1.4.1.30932.1.1.3.11.6.0|70|4242479706199318859 +1.3.6.1.4.1.30932.1.1.3.12.1.0|70|4092322495551077882 +1.3.6.1.4.1.30932.1.1.3.12.2.0|70|1976339425415722858 +1.3.6.1.4.1.30932.1.1.3.12.3.0|70|17082478301598655917 +1.3.6.1.4.1.30932.1.1.3.12.4.0|70|14900246911539986721 +1.3.6.1.4.1.30932.1.1.3.12.5.0|70|17980681661801324771 +1.3.6.1.4.1.30932.1.1.3.12.6.0|70|4404849861412391969 +1.3.6.1.4.1.30932.1.1.3.12.7.0|70|6614263813499667200 +1.3.6.1.4.1.30932.1.1.3.12.8.0|70|11226575729869874634 +1.3.6.1.4.1.30932.1.1.3.12.9.0|70|18304423676138222618 +1.3.6.1.4.1.30932.1.1.3.12.10.0|70|8567092784356374549 +1.3.6.1.4.1.30932.1.1.3.12.11.0|70|15934476233589254254 +1.3.6.1.4.1.30932.1.1.3.12.12.0|70|10526965409775612347 +1.3.6.1.4.1.30932.1.1.3.12.13.0|70|4992860910233408263 +1.3.6.1.4.1.30932.1.1.3.12.14.0|70|6647558032794683578 +1.3.6.1.4.1.30932.1.1.3.12.15.0|70|11780883078059484674 +1.3.6.1.4.1.30932.1.1.3.12.16.0|70|1843737533351206621 +1.3.6.1.4.1.30932.1.1.3.12.17.0|70|4542252279799957129 +1.3.6.1.4.1.30932.1.1.3.12.18.0|70|14916965746036634478 +1.3.6.1.4.1.30932.1.1.3.12.19.0|70|1735783194298570549 +1.3.6.1.4.1.30932.1.1.3.12.20.0|70|16561897416095631530 +1.3.6.1.4.1.30932.1.1.3.12.21.0|70|10049784299176410470 +1.3.6.1.4.1.30932.1.1.3.12.22.0|70|1221396927160634845 +1.3.6.1.4.1.30932.1.1.3.12.23.0|70|13798134093641246880 +1.3.6.1.4.1.30932.1.1.3.12.24.0|70|6889309830170805650 +1.3.6.1.4.1.30932.1.1.3.13.1.0|2|10 +1.3.6.1.4.1.30932.1.1.3.13.2.0|2|8 +1.3.6.1.4.1.30932.1.1.3.13.3.0|2|16 +1.3.6.1.4.1.30932.1.1.4.1.1.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.2.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.3.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.4.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.5.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.6.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.7.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.8.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.9.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.10.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.11.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.12.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.13.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.14.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.15.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.16.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.17.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.18.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.19.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.20.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.21.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.22.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.23.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.24.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.1.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.2.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.3.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.4.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.5.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.6.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.7.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.8.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.9.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.10.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.11.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.12.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.13.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.14.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.15.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.16.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.17.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.18.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.19.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.20.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.21.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.22.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.23.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.24.0|2|0 +1.3.6.1.4.1.30932.1.1.4.3.0|4x|6f78656e2064726976696e6720627574 +1.3.6.1.4.1.30932.1.1.5.1.0|2|26 +1.3.6.1.4.1.30932.1.1.5.2.0|4x|6b65707420627574207468656972207468656972206f78656e207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.5.3.0|2|12 +1.3.6.1.4.1.30932.1.1.5.4.0|4x|627574204a616465642064726976696e67206b657074206f78656e206b657074 +1.3.6.1.4.1.30932.1.10.1.1.1.1.1.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.1.1.2.0|64x|cb99c348 +1.3.6.1.4.1.30932.1.10.1.1.1.1.3.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.1.1.4.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.1.1.5.0|64x|2ea03123 +1.3.6.1.4.1.30932.1.10.1.1.1.1.6.0|64x|9fa67a25 +1.3.6.1.4.1.30932.1.10.1.1.1.1.7.0|64x|d4a5d417 +1.3.6.1.4.1.30932.1.10.1.1.1.1.8.0|64x|65ed45d6 +1.3.6.1.4.1.30932.1.10.1.1.1.1.9.0|64x|ebb7605f +1.3.6.1.4.1.30932.1.10.1.1.1.2.1.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.1.2.2.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.1.2.3.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.1.2.4.0|4x|7a6f6d62696573207a6f6d62696573204a6164656420717561696e746c79 +1.3.6.1.4.1.30932.1.10.1.1.1.2.5.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.1.2.6.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.1.2.7.0|4x|717561696e746c7920627574 +1.3.6.1.4.1.30932.1.10.1.1.1.2.8.0|4|kept +1.3.6.1.4.1.30932.1.10.1.1.1.2.9.0|4x|717561696e746c79204a6164656420616374656420666f7277617264206163746564 +1.3.6.1.4.1.30932.1.10.1.1.1.2.10.0|4x|666f727761726420717561696e746c792064726976696e67206b657074206163746564 +1.3.6.1.4.1.30932.1.10.1.1.1.2.11.0|4x|6f78656e20746865697220717561696e746c792064726976696e672064726976696e67 +1.3.6.1.4.1.30932.1.10.1.1.1.3.1.0|4|kept +1.3.6.1.4.1.30932.1.10.1.1.1.3.2.0|4x|6b6570742064726976696e6720666f7277617264206b657074204a61646564207a6f6d62696573 +1.3.6.1.4.1.30932.1.10.1.1.2.1.1.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.2.1.2.1.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.2.1.2.2.0|4x|6b65707420746865697220627574206f78656e207a6f6d6269657320627574206b657074 +1.3.6.1.4.1.30932.1.10.1.1.2.1.2.3.0|4x|6f78656e20746865697220666f7277617264206b657074 +1.3.6.1.4.1.30932.1.10.1.1.2.1.2.4.0|4x|64726976696e67206b65707420666f727761726420666f7277617264207468656972204a616465642064726976696e67207a6f6d62696573206b657074 +1.3.6.1.4.1.30932.1.10.1.1.2.1.2.5.0|4x|627574206f78656e206163746564206b6570742064726976696e67207a6f6d62696573 +1.3.6.1.4.1.30932.1.10.1.1.2.1.2.6.0|4x|746865697220746865697220717561696e746c79206b657074206b657074204a61646564206b657074207468656972206f78656e +1.3.6.1.4.1.30932.1.10.1.1.2.1.2.7.0|4|but +1.3.6.1.4.1.30932.1.10.1.1.2.1.3.0|2|10 +1.3.6.1.4.1.30932.1.10.1.1.2.1.4.0|2|9 +1.3.6.1.4.1.30932.1.10.1.1.2.1.5.0|4x|627574206163746564206b65707420627574 +1.3.6.1.4.1.30932.1.10.1.1.2.1.6.0|4|Jaded +1.3.6.1.4.1.30932.1.10.1.1.2.1.7.0|4x|717561696e746c79207a6f6d626965732064726976696e672062757420627574207a6f6d62696573204a61646564206163746564 +1.3.6.1.4.1.30932.1.10.1.1.2.1.8.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.2.1.9.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.2.1.10.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.2.1.11.0|4x|717561696e746c79207a6f6d62696573204a61646564206b657074 +1.3.6.1.4.1.30932.1.10.1.1.2.1.12.0|4x|7a6f6d62696573206f78656e2064726976696e67204a6164656420627574204a61646564206f78656e207468656972 +1.3.6.1.4.1.30932.1.10.1.1.2.1.13.0|4x|62757420717561696e746c79 +1.3.6.1.4.1.30932.1.10.1.1.2.1.14.0|4x|666f7277617264206b657074204a61646564206163746564 +1.3.6.1.4.1.30932.1.10.1.1.2.1.15.0|4x|6b657074207468656972206163746564204a6164656420666f7277617264 +1.3.6.1.4.1.30932.1.10.1.1.2.1.16.0|4x|64726976696e672064726976696e67204a61646564206f78656e20616374656420627574 +1.3.6.1.4.1.30932.1.10.1.1.2.1.17.1.0|4|kept +1.3.6.1.4.1.30932.1.10.1.1.2.1.17.2.0|4x|4a6164656420616374656420666f72776172642064726976696e6720627574206163746564 +1.3.6.1.4.1.30932.1.10.1.1.2.1.17.3.0|4x|6f78656e20717561696e746c7920666f72776172642074686569722062757420666f7277617264207a6f6d626965732064726976696e672064726976696e67 +1.3.6.1.4.1.30932.1.10.1.1.2.1.17.4.0|4x|616374656420666f7277617264206f78656e206b657074206f78656e206163746564 +1.3.6.1.4.1.30932.1.10.1.1.2.1.17.5.0|4x|666f72776172642062757420627574206163746564206f78656e207a6f6d62696573 +1.3.6.1.4.1.30932.1.10.1.1.2.1.17.6.0|4x|6b657074206f78656e20746865697220666f7277617264207a6f6d6269657320627574206f78656e20627574 +1.3.6.1.4.1.30932.1.10.1.1.2.1.18.5.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.2.2.1.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.2.2.2.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.2.2.3.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.2.2.4.0|2|12 +1.3.6.1.4.1.30932.1.10.1.1.2.2.5.0|2|17 +1.3.6.1.4.1.30932.1.10.1.1.2.3.1.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.2.3.2.0|2|27 +1.3.6.1.4.1.30932.1.10.1.1.2.3.3.0|2|29 +1.3.6.1.4.1.30932.1.10.1.1.2.3.4.0|4|Jaded +1.3.6.1.4.1.30932.1.10.1.1.2.3.5.0|4x|4a61646564207a6f6d62696573 +1.3.6.1.4.1.30932.1.10.1.1.2.3.6.0|4x|7468656972204a6164656420627574206f78656e2064726976696e6720627574206b657074206b657074 +1.3.6.1.4.1.30932.1.10.1.1.2.3.7.0|4x|6b65707420666f7277617264207468656972204a61646564207a6f6d62696573207468656972206b657074206163746564207468656972 +1.3.6.1.4.1.30932.1.10.1.1.2.3.8.0|4x|62757420666f7277617264206f78656e20717561696e746c79206f78656e206b657074 +1.3.6.1.4.1.30932.1.10.1.1.2.3.9.0|4x|746865697220666f7277617264207468656972206f78656e207a6f6d626965732064726976696e67 +1.3.6.1.4.1.30932.1.10.1.1.2.3.10.0|4x|6163746564207a6f6d626965732062757420627574206b657074206163746564 +1.3.6.1.4.1.30932.1.10.1.1.2.3.11.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.3.1.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.3.2.0|2|26 +1.3.6.1.4.1.30932.1.10.1.1.3.3.0|2|14 +1.3.6.1.4.1.30932.1.10.1.1.3.4.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.3.5.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.3.6.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.3.7.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.3.8.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.3.9.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.3.10.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.3.11.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.3.12.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.3.13.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.3.14.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.3.15.0|2|7 +1.3.6.1.4.1.30932.1.10.1.1.3.16.0|2|51 +1.3.6.1.4.1.30932.1.10.1.1.3.17.0|4x|6f78656e207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.30932.1.10.1.1.3.18.0|2|15 +1.3.6.1.4.1.30932.1.10.1.1.3.19.0|4x|666f7277617264206b65707420627574204a6164656420666f7277617264 +1.3.6.1.4.1.30932.1.10.1.1.3.20.0|4x|717561696e746c7920717561696e746c79 +1.3.6.1.4.1.30932.1.10.1.1.3.21.0|4x|64726976696e67207a6f6d6269657320717561696e746c792064726976696e6720666f7277617264 +1.3.6.1.4.1.30932.1.10.1.1.3.22.0|4x|616374656420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.30932.1.10.1.1.3.23.0|4x|627574204a6164656420666f7277617264206163746564204a61646564207468656972206b6570742061637465642064726976696e67 +1.3.6.1.4.1.30932.1.10.1.1.3.24.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.3.25.0|4|kept +1.3.6.1.4.1.30932.1.10.1.1.3.26.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.4.1.1.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.4.1.2.0|4x|616374656420627574206f78656e206f78656e204a61646564 +1.3.6.1.4.1.30932.1.10.1.1.4.1.3.0|4|oxen +1.3.6.1.4.1.30932.1.10.1.1.4.1.4.0|2|3 +1.3.6.1.4.1.30932.1.10.1.1.4.1.5.0|2|18 +1.3.6.1.4.1.30932.1.10.1.1.4.2.1.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.4.2.2.0|4x|6275742061637465642064726976696e67207a6f6d62696573206f78656e204a61646564206163746564206f78656e +1.3.6.1.4.1.30932.1.10.1.1.4.2.3.0|4x|6275742064726976696e67 +1.3.6.1.4.1.30932.1.10.1.1.4.2.4.0|4x|6f78656e204a61646564206b65707420666f7277617264 +1.3.6.1.4.1.30932.1.10.1.1.4.2.5.0|2|25 +1.3.6.1.4.1.30932.1.10.1.1.4.2.6.0|2|7 +1.3.6.1.4.1.30932.1.10.1.1.4.2.7.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.4.2.8.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.4.2.9.0|4x|6163746564206b657074206163746564204a616465642064726976696e6720666f7277617264207a6f6d62696573 +1.3.6.1.4.1.30932.1.10.1.1.4.2.10.0|4|Jaded +1.3.6.1.4.1.30932.1.10.1.1.4.2.11.0|2|21 +1.3.6.1.4.1.30932.1.10.1.1.4.2.12.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.4.2.13.0|4x|666f727761726420717561696e746c79206b65707420666f7277617264204a6164656420666f7277617264206f78656e206b65707420627574 +1.3.6.1.4.1.30932.1.10.1.1.4.2.14.0|2|20 +1.3.6.1.4.1.30932.1.10.1.1.4.2.15.0|4x|6f78656e20666f7277617264206b657074207a6f6d626965732062757420627574 +1.3.6.1.4.1.30932.1.10.1.1.4.2.16.0|2|20 +1.3.6.1.4.1.30932.1.10.1.1.4.2.17.0|4x|6b6570742062757420627574206163746564207a6f6d626965732074686569722064726976696e67206163746564206f78656e +1.3.6.1.4.1.30932.1.10.1.1.4.2.18.0|2|30 +1.3.6.1.4.1.30932.1.10.1.1.4.2.19.0|4x|717561696e746c7920666f727761726420717561696e746c79206f78656e206b657074206f78656e204a61646564 +1.3.6.1.4.1.30932.1.10.1.1.4.2.20.0|2|24 +1.3.6.1.4.1.30932.1.10.1.1.6.1.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.6.2.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.6.3.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.6.4.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.6.5.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.6.6.0|2|13 +1.3.6.1.4.1.30932.1.10.1.1.6.7.0|2|28 +1.3.6.1.4.1.30932.1.10.1.1.6.8.0|2|6 +1.3.6.1.4.1.30932.1.10.1.1.6.9.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.7.1.0|2|29 +1.3.6.1.4.1.30932.1.10.1.1.8.1.1.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.2.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.3.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.4.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.5.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.6.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.7.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.8.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.9.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.10.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.11.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.12.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.13.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.14.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.15.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.16.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.17.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.18.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.19.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.20.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.21.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.22.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.23.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.24.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.25.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.26.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.27.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.28.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.29.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.30.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.31.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.1.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.2.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.3.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.4.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.5.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.6.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.7.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.8.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.9.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.10.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.11.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.12.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.13.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.14.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.15.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.16.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.17.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.18.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.19.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.20.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.21.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.22.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.23.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.24.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.25.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.26.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.27.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.28.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.29.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.30.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.31.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.1.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.2.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.3.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.4.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.5.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.6.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.7.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.8.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.9.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.10.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.11.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.12.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.13.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.14.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.15.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.16.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.17.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.18.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.19.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.20.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.21.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.22.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.23.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.24.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.25.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.26.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.27.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.28.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.29.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.30.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.31.0|2|1 +1.3.6.1.4.1.30932.1.10.1.2.1.0|66|55859 +1.3.6.1.4.1.30932.1.10.1.2.10.1.1.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.2.10.1.2.6.0.36.155.53.3.246|4x|6d6f64656c31 +1.3.6.1.4.1.30932.1.10.1.2.10.1.3.6.0.36.155.53.3.246|4x|6e616d6531 +1.3.6.1.4.1.30932.1.10.1.2.10.1.3.12.48.48.48.69.68.51.48.49.48.54.67.53|4x|6e616d6532 +1.3.6.1.4.1.30932.1.10.1.2.10.1.4.6.0.36.155.53.3.246|4|forward +1.3.6.1.4.1.30932.1.10.1.2.10.1.5.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.2.10.1.6.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.2.10.1.7.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.2.10.1.8.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.2.10.1.9.6.0.36.155.53.3.246|2|19 +1.3.6.1.4.1.30932.1.10.1.2.10.1.10.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.2.10.1.11.6.0.36.155.53.3.246|4x|76312e31 +1.3.6.1.4.1.30932.1.10.1.2.10.1.12.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.2.10.1.13.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.2.10.1.14.6.0.36.155.53.3.246|64x|2a02d2e0 +1.3.6.1.4.1.30932.1.10.1.2.10.1.15.6.0.36.155.53.3.246|4x|7a6f6d62696573204a61646564206163746564206f78656e +1.3.6.1.4.1.30932.1.10.1.2.10.1.16.6.0.36.155.53.3.246|2|31 +1.3.6.1.4.1.30932.1.10.1.2.10.1.17.6.0.36.155.53.3.246|4x|63616231 +1.3.6.1.4.1.30932.1.10.1.2.10.1.18.6.0.36.155.53.3.246|4x|6f78656e20616374656420717561696e746c79 +1.3.6.1.4.1.30932.1.10.1.3.1.0|66|53817 +1.3.6.1.4.1.30932.1.10.1.3.10.1.1.6.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.3.10.1.1.18.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.3.10.1.2.6.6.0.36.155.53.3.246|2|6 +1.3.6.1.4.1.30932.1.10.1.3.10.1.2.18.6.0.36.155.53.3.246|2|18 +1.3.6.1.4.1.30932.1.10.1.3.10.1.3.6.6.0.36.155.53.3.246|2|10 +1.3.6.1.4.1.30932.1.10.1.3.10.1.3.18.6.0.36.155.53.3.246|2|27 +1.3.6.1.4.1.30932.1.10.1.3.100.0|66|13416 +1.3.6.1.4.1.30932.1.10.1.3.110.1.1.1.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.3.110.1.1.17.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.3.110.1.2.1.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.3.110.1.2.1.12.48.48.48.69.68.51.48.49.48.54.67.53|2|1 +1.3.6.1.4.1.30932.1.10.1.3.110.1.2.17.6.0.36.155.53.3.246|2|17 +1.3.6.1.4.1.30932.1.10.1.3.110.1.3.1.6.0.36.155.53.3.246|2|28 +1.3.6.1.4.1.30932.1.10.1.3.110.1.3.17.6.0.36.155.53.3.246|2|9 +1.3.6.1.4.1.30932.1.10.1.3.110.1.4.1.6.0.36.155.53.3.246|2|31 +1.3.6.1.4.1.30932.1.10.1.3.110.1.4.17.6.0.36.155.53.3.246|2|31 +1.3.6.1.4.1.30932.1.10.1.3.110.1.5.1.6.0.36.155.53.3.246|2|14 +1.3.6.1.4.1.30932.1.10.1.3.110.1.5.17.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.3.110.1.6.1.6.0.36.155.53.3.246|2|17 +1.3.6.1.4.1.30932.1.10.1.3.110.1.6.17.6.0.36.155.53.3.246|2|26 +1.3.6.1.4.1.30932.1.10.1.3.110.1.7.1.6.0.36.155.53.3.246|2|25 +1.3.6.1.4.1.30932.1.10.1.3.110.1.7.1.12.48.48.48.69.68.51.48.49.48.54.67.53|2|25 +1.3.6.1.4.1.30932.1.10.1.3.110.1.7.17.6.0.36.155.53.3.246|2|11 +1.3.6.1.4.1.30932.1.10.1.3.110.1.8.1.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.3.110.1.8.17.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.3.110.1.9.1.6.0.36.155.53.3.246|70|5425026526891357035 +1.3.6.1.4.1.30932.1.10.1.3.110.1.9.1.12.48.48.48.69.68.51.48.49.48.54.67.53|70|5425026526891357035 +1.3.6.1.4.1.30932.1.10.1.3.110.1.9.17.6.0.36.155.53.3.246|70|5905007801987739246 +1.3.6.1.4.1.30932.1.10.1.3.210.1.1.30060|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.3.210.1.1.42504|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.3.210.1.2.30060|2|2 +1.3.6.1.4.1.30932.1.10.1.3.210.1.2.42504|2|10 +1.3.6.1.4.1.30932.1.10.1.3.210.1.3.30060|2|9 +1.3.6.1.4.1.30932.1.10.1.3.210.1.3.42504|2|19 +1.3.6.1.4.1.30932.1.10.1.3.210.1.4.30060|2|8 +1.3.6.1.4.1.30932.1.10.1.3.210.1.4.42504|2|13 +1.3.6.1.4.1.30932.1.10.1.3.210.1.5.30060|2|6 +1.3.6.1.4.1.30932.1.10.1.3.210.1.5.42504|2|16 +1.3.6.1.4.1.30932.1.10.1.3.210.1.6.30060|2|8 +1.3.6.1.4.1.30932.1.10.1.3.210.1.6.42504|2|7 +1.3.6.1.4.1.30932.1.10.1.3.210.1.7.30060|2|24 +1.3.6.1.4.1.30932.1.10.1.3.210.1.7.42504|2|15 +1.3.6.1.4.1.30932.1.10.1.3.210.1.8.30060|2|7 +1.3.6.1.4.1.30932.1.10.1.3.210.1.8.42504|2|23 +1.3.6.1.4.1.30932.1.10.1.3.210.1.9.30060|2|20 +1.3.6.1.4.1.30932.1.10.1.3.210.1.9.42504|2|5 +1.3.6.1.4.1.30932.1.10.1.3.210.1.10.30060|2|29 +1.3.6.1.4.1.30932.1.10.1.3.210.1.10.42504|2|5 +1.3.6.1.4.1.30932.1.10.1.3.210.1.11.30060|2|29 +1.3.6.1.4.1.30932.1.10.1.3.210.1.11.42504|2|1 +1.3.6.1.4.1.30932.1.10.1.3.210.1.12.30060|66|30060 +1.3.6.1.4.1.30932.1.10.1.3.210.1.12.42504|66|42504 +1.3.6.1.4.1.30932.1.10.1.4.1.0|66|50677 +1.3.6.1.4.1.30932.1.10.1.4.10.1.1.7.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.4.10.1.1.16.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.4.10.1.2.7.6.0.36.155.53.3.246|2|7 +1.3.6.1.4.1.30932.1.10.1.4.10.1.2.16.6.0.36.155.53.3.246|2|16 +1.3.6.1.4.1.30932.1.10.1.4.10.1.3.7.6.0.36.155.53.3.246|2|29 +1.3.6.1.4.1.30932.1.10.1.4.10.1.3.16.6.0.36.155.53.3.246|2|23 +1.3.6.1.4.1.30932.1.10.1.4.10.1.4.7.6.0.36.155.53.3.246|4x|6f75746c657431 +1.3.6.1.4.1.30932.1.10.1.4.10.1.4.16.6.0.36.155.53.3.246|4x|6f75746c657432 +1.3.6.1.4.1.30932.1.10.1.4.10.1.5.7.6.0.36.155.53.3.246|4x|6f78656e20666f72776172642064726976696e67207a6f6d6269657320616374656420717561696e746c79207468656972207a6f6d62696573207468656972 +1.3.6.1.4.1.30932.1.10.1.4.10.1.5.16.6.0.36.155.53.3.246|4x|7468656972206b6570742064726976696e67207468656972207a6f6d6269657320666f7277617264204a616465642064726976696e67 +1.3.6.1.4.1.30932.1.10.1.4.10.1.6.7.6.0.36.155.53.3.246|2|15 +1.3.6.1.4.1.30932.1.10.1.4.10.1.6.16.6.0.36.155.53.3.246|2|28 +1.3.6.1.4.1.30932.1.10.1.4.10.1.7.7.6.0.36.155.53.3.246|2|3 +1.3.6.1.4.1.30932.1.10.1.4.10.1.7.16.6.0.36.155.53.3.246|2|8 +1.3.6.1.4.1.30932.1.10.1.4.10.1.8.7.6.0.36.155.53.3.246|2|16 +1.3.6.1.4.1.30932.1.10.1.4.10.1.8.16.6.0.36.155.53.3.246|2|16 +1.3.6.1.4.1.30932.1.10.1.4.10.1.9.7.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.4.10.1.9.16.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.4.10.1.10.7.6.0.36.155.53.3.246|70|16933530166855965280 +1.3.6.1.4.1.30932.1.10.1.4.10.1.10.16.6.0.36.155.53.3.246|70|12820398031307264998 +1.3.6.1.4.1.30932.1.10.1.4.10.1.11.7.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.4.10.1.11.16.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.4.10.1.12.7.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.4.10.1.12.16.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.4.210.1.1.19.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.4.210.1.1.20.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.4.210.1.2.19.6.0.36.155.53.3.246|2|19 +1.3.6.1.4.1.30932.1.10.1.4.210.1.2.20.6.0.36.155.53.3.246|2|20 +1.3.6.1.4.1.30932.1.10.1.4.210.1.3.19.6.0.36.155.53.3.246|2|9 +1.3.6.1.4.1.30932.1.10.1.4.210.1.3.20.6.0.36.155.53.3.246|2|6 +1.3.6.1.4.1.30932.1.10.1.4.210.1.4.19.6.0.36.155.53.3.246|2|3 +1.3.6.1.4.1.30932.1.10.1.4.210.1.4.20.6.0.36.155.53.3.246|2|13 +1.3.6.1.4.1.30932.1.10.1.4.310.1.1.4.111.120.101.110.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.4.310.1.1.17.122.111.109.98.105.101.115.32.107.101.112.116.32.107.101.112.116.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.4.310.1.2.4.111.120.101.110.6.0.36.155.53.3.246|4|oxen +1.3.6.1.4.1.30932.1.10.1.4.310.1.2.17.122.111.109.98.105.101.115.32.107.101.112.116.32.107.101.112.116.6.0.36.155.53.3.246|4x|7a6f6d62696573206b657074206b657074 +1.3.6.1.4.1.30932.1.10.1.4.310.1.3.4.111.120.101.110.6.0.36.155.53.3.246|2|19 +1.3.6.1.4.1.30932.1.10.1.4.310.1.3.17.122.111.109.98.105.101.115.32.107.101.112.116.32.107.101.112.116.6.0.36.155.53.3.246|2|29 +1.3.6.1.4.1.30932.1.10.1.4.310.1.4.4.111.120.101.110.6.0.36.155.53.3.246|2|2 +1.3.6.1.4.1.30932.1.10.1.4.310.1.4.17.122.111.109.98.105.101.115.32.107.101.112.116.32.107.101.112.116.6.0.36.155.53.3.246|2|4 +1.3.6.1.4.1.30932.1.10.1.4.310.1.5.4.111.120.101.110.6.0.36.155.53.3.246|2|8 +1.3.6.1.4.1.30932.1.10.1.4.310.1.5.17.122.111.109.98.105.101.115.32.107.101.112.116.32.107.101.112.116.6.0.36.155.53.3.246|2|17 +1.3.6.1.4.1.30932.1.10.1.4.310.1.6.4.111.120.101.110.6.0.36.155.53.3.246|2|26 +1.3.6.1.4.1.30932.1.10.1.4.310.1.6.17.122.111.109.98.105.101.115.32.107.101.112.116.32.107.101.112.116.6.0.36.155.53.3.246|2|14 +1.3.6.1.4.1.30932.1.10.1.4.310.1.7.4.111.120.101.110.6.0.36.155.53.3.246|2|15 +1.3.6.1.4.1.30932.1.10.1.4.310.1.7.17.122.111.109.98.105.101.115.32.107.101.112.116.32.107.101.112.116.6.0.36.155.53.3.246|2|15 +1.3.6.1.4.1.30932.1.10.1.5.1.0|66|47455 +1.3.6.1.4.1.30932.1.10.1.5.5.1.1.5.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.5.5.1.1.10.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.5.5.1.2.5.6.0.36.155.53.3.246|2|5 +1.3.6.1.4.1.30932.1.10.1.5.5.1.2.10.6.0.36.155.53.3.246|2|10 +1.3.6.1.4.1.30932.1.10.1.5.5.1.3.5.6.0.36.155.53.3.246|4x|7a6f6d626965732064726976696e672062757420666f7277617264207a6f6d6269657320666f7277617264207a6f6d6269657320717561696e746c7920717561696e746c79 +1.3.6.1.4.1.30932.1.10.1.5.5.1.3.10.6.0.36.155.53.3.246|4x|627574207468656972206b657074206f78656e206b657074206163746564 +1.3.6.1.4.1.30932.1.10.1.5.10.1.1.4.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.5.10.1.1.6.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.5.10.1.2.4.6.0.36.155.53.3.246|2|4 +1.3.6.1.4.1.30932.1.10.1.5.10.1.2.6.6.0.36.155.53.3.246|2|6 +1.3.6.1.4.1.30932.1.10.1.5.10.1.3.4.6.0.36.155.53.3.246|4x|73656e736f7231 +1.3.6.1.4.1.30932.1.10.1.5.10.1.3.6.6.0.36.155.53.3.246|4x|73656e736f7232 +1.3.6.1.4.1.30932.1.10.1.5.10.1.4.4.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.5.10.1.4.6.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.5.10.1.5.4.6.0.36.155.53.3.246|2|10 +1.3.6.1.4.1.30932.1.10.1.5.10.1.5.6.6.0.36.155.53.3.246|2|13 +1.3.6.1.4.1.30932.1.10.1.5.110.1.1.10.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.5.110.1.1.25.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.5.110.1.2.10.6.0.36.155.53.3.246|2|10 +1.3.6.1.4.1.30932.1.10.1.5.110.1.2.25.6.0.36.155.53.3.246|2|25 +1.3.6.1.4.1.30932.1.10.1.5.110.1.3.10.6.0.36.155.53.3.246|2|31 +1.3.6.1.4.1.30932.1.10.1.5.110.1.3.25.6.0.36.155.53.3.246|2|15 +1.3.6.1.4.1.30932.1.10.1.5.110.1.4.10.6.0.36.155.53.3.246|2|26 +1.3.6.1.4.1.30932.1.10.1.5.110.1.4.25.6.0.36.155.53.3.246|2|22 +1.3.6.1.4.1.30932.1.10.1.5.110.1.5.10.6.0.36.155.53.3.246|2|6 +1.3.6.1.4.1.30932.1.10.1.5.110.1.5.25.6.0.36.155.53.3.246|2|2 +1.3.6.1.4.1.30932.1.10.1.5.110.1.6.10.6.0.36.155.53.3.246|2|4 +1.3.6.1.4.1.30932.1.10.1.5.110.1.6.25.6.0.36.155.53.3.246|2|15 +1.3.6.1.4.1.30932.1.10.1.6.1.0|66|46081 +1.3.6.1.4.1.30932.1.10.1.6.2.0|66|51334 +1.3.6.1.4.1.30932.1.10.1.6.10.1.1.2374|66|2374 +1.3.6.1.4.1.30932.1.10.1.6.10.1.1.59874|66|59874 +1.3.6.1.4.1.30932.1.10.1.6.10.1.2.2374|4x|7468656972206f78656e20717561696e746c7920666f7277617264207468656972 +1.3.6.1.4.1.30932.1.10.1.6.10.1.2.59874|4x|74686569722064726976696e6720666f72776172642064726976696e67207a6f6d62696573206163746564206f78656e20717561696e746c79 +1.3.6.1.4.1.30932.1.10.1.6.20.1.1.49237|66|49237 +1.3.6.1.4.1.30932.1.10.1.6.20.1.1.57037|66|57037 +1.3.6.1.4.1.30932.1.10.1.6.20.1.2.49237|66|3703 +1.3.6.1.4.1.30932.1.10.1.6.20.1.2.57037|66|22638 +1.3.6.1.4.1.30932.1.10.1.6.20.1.3.49237|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.6.20.1.3.57037|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.6.20.1.4.49237|2|15 +1.3.6.1.4.1.30932.1.10.1.6.20.1.4.57037|2|31 +1.3.6.1.4.1.30932.1.10.1.7.1.0|66|1916 +1.3.6.1.4.1.30932.1.10.1.7.90.1.1.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.7.90.1.2.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.7.90.1.3.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.7.90.1.4.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.7.90.1.5.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.7.90.1.6.6.0.36.155.53.3.246|2|8 +1.3.6.1.4.1.30932.1.10.1.7.100.1.1.1.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.7.100.1.1.2.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.7.100.1.2.1.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.7.100.1.2.2.6.0.36.155.53.3.246|2|2 +1.3.6.1.4.1.30932.1.10.1.7.100.1.3.1.6.0.36.155.53.3.246|2|2 +1.3.6.1.4.1.30932.1.10.1.7.100.1.3.2.6.0.36.155.53.3.246|2|2 +1.3.6.1.4.1.30932.1.10.1.7.100.1.4.1.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.7.100.1.4.2.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.7.100.1.5.1.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.7.100.1.5.2.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.7.100.1.6.0|2|1 +1.3.6.1.4.1.30932.1.10.1.7.100.1.7.0|2|1 +1.3.6.1.4.1.30932.1.10.1.7.100.1.8.0|66|26997 +1.3.6.1.4.1.30932.1.10.1.7.100.1.9.0|4x|7a6f6d62696573206275742064726976696e672064726976696e67 +1.3.6.1.4.1.30932.1.10.1.7.100.1.10.0|4x|6f78656e206f78656e20666f7277617264 +1.3.6.1.4.1.30932.1.10.1.7.100.1.11.0|2|0 +1.3.6.1.4.1.30932.1.10.1.500.0.1.0|4|their +1.3.6.1.4.1.30932.1.10.1.500.0.2.0|4|forward +1.3.6.1.4.1.30932.1.10.1.500.0.3.0|4x|7468656972204a6164656420717561696e746c792064726976696e67204a61646564 +1.3.6.1.4.1.30932.1.10.1.500.0.4.0|2|2 +1.3.6.1.4.1.30932.1.10.1.500.0.5.0|6|1.3.6.1.3.179.103 +1.3.6.1.4.1.30932.1.10.1.500.0.6.0|2|0 +1.3.6.1.4.1.30932.1.10.1.500.0.7.0|2|9 +1.3.6.1.4.1.30932.1.10.1.500.0.8.0|2|0 +1.3.6.1.4.1.30932.1.10.1.500.0.9.0|2|28 +1.3.6.1.4.1.30932.1.10.1.500.0.10.0|4x|627574207a6f6d6269657320717561696e746c792064726976696e67 diff --git a/test/new-e2e/ndm/snmp/compose/data/checkpoint-firewall.snmprec b/test/new-e2e/ndm/snmp/compose/data/checkpoint-firewall.snmprec new file mode 100644 index 00000000000000..2adb7d3cc5ab07 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/checkpoint-firewall.snmprec @@ -0,0 +1,4027 @@ +1.3.6.1.2.1.1.1.0|4|Linux gw-af4bd9 3.10.0-957.21.3cpx86_64 #1 SMP Tue Jan 28 17:26:12 IST 2020 x86_64 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.2620.1.1 +1.3.6.1.4.1.2620.1.1.1.0|4x|6f78656e204a61646564206f78656e +1.3.6.1.4.1.2620.1.1.2.0|4x|4a61646564206b6570742064726976696e67204a61646564207a6f6d626965732062757420717561696e746c792064726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.1.3.0|4|quaintly +1.3.6.1.4.1.2620.1.1.4.0|2|10 +1.3.6.1.4.1.2620.1.1.5.0|2|25 +1.3.6.1.4.1.2620.1.1.6.0|2|22 +1.3.6.1.4.1.2620.1.1.7.0|2|23 +1.3.6.1.4.1.2620.1.1.8.0|2|3 +1.3.6.1.4.1.2620.1.1.9.0|2|2 +1.3.6.1.4.1.2620.1.1.10.0|4x|746865697220717561696e746c7920627574 +1.3.6.1.4.1.2620.1.1.11.0|4x|74686569722064726976696e672061637465642064726976696e67 +1.3.6.1.4.1.2620.1.1.12.0|4x|6b657074206b657074207468656972207a6f6d62696573207a6f6d62696573206163746564207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.1.21.0|4x|64726976696e672062757420666f727761726420666f72776172642062757420746865697220627574206b657074 +1.3.6.1.4.1.2620.1.1.22.0|2|7 +1.3.6.1.4.1.2620.1.1.23.0|2|19 +1.3.6.1.4.1.2620.1.1.24.0|2|31 +1.3.6.1.4.1.2620.1.1.25.1.0|4x|6163746564207a6f6d626965732064726976696e6720717561696e746c7920616374656420746865697220666f72776172642064726976696e67 +1.3.6.1.4.1.2620.1.1.25.2.0|4|but +1.3.6.1.4.1.2620.1.1.25.3.0|2|10 +1.3.6.1.4.1.2620.1.1.25.4.0|2|1 +1.3.6.1.4.1.2620.1.1.25.5.1.1.749|66|749 +1.3.6.1.4.1.2620.1.1.25.5.1.1.3015|66|3015 +1.3.6.1.4.1.2620.1.1.25.5.1.1.17885|66|17885 +1.3.6.1.4.1.2620.1.1.25.5.1.1.27174|66|27174 +1.3.6.1.4.1.2620.1.1.25.5.1.1.30854|66|30854 +1.3.6.1.4.1.2620.1.1.25.5.1.1.33502|66|33502 +1.3.6.1.4.1.2620.1.1.25.5.1.1.40202|66|40202 +1.3.6.1.4.1.2620.1.1.25.5.1.1.55865|66|55865 +1.3.6.1.4.1.2620.1.1.25.5.1.1.56693|66|56693 +1.3.6.1.4.1.2620.1.1.25.5.1.1.60198|66|60198 +1.3.6.1.4.1.2620.1.1.25.5.1.2.749|4x|6b65707420666f727761726420717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.1.25.5.1.2.3015|4x|6f78656e206b657074206f78656e20627574 +1.3.6.1.4.1.2620.1.1.25.5.1.2.17885|4x|64726976696e67207468656972206b65707420616374656420627574207468656972 +1.3.6.1.4.1.2620.1.1.25.5.1.2.27174|4x|627574206b657074206f78656e207a6f6d6269657320627574206163746564 +1.3.6.1.4.1.2620.1.1.25.5.1.2.30854|4x|6163746564206f78656e206b657074206b657074206b657074204a61646564204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.1.25.5.1.2.33502|4x|666f7277617264204a616465642064726976696e6720666f7277617264206f78656e206b657074 +1.3.6.1.4.1.2620.1.1.25.5.1.2.40202|4x|62757420746865697220666f727761726420717561696e746c792064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.1.25.5.1.2.55865|4x|666f727761726420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.1.25.5.1.2.56693|4x|4a61646564206f78656e206b657074 +1.3.6.1.4.1.2620.1.1.25.5.1.2.60198|4x|7468656972206b657074204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.1.25.5.1.5.749|2|24 +1.3.6.1.4.1.2620.1.1.25.5.1.5.3015|2|7 +1.3.6.1.4.1.2620.1.1.25.5.1.5.17885|2|9 +1.3.6.1.4.1.2620.1.1.25.5.1.5.27174|2|30 +1.3.6.1.4.1.2620.1.1.25.5.1.5.30854|2|29 +1.3.6.1.4.1.2620.1.1.25.5.1.5.33502|2|1 +1.3.6.1.4.1.2620.1.1.25.5.1.5.40202|2|2 +1.3.6.1.4.1.2620.1.1.25.5.1.5.55865|2|0 +1.3.6.1.4.1.2620.1.1.25.5.1.5.56693|2|31 +1.3.6.1.4.1.2620.1.1.25.5.1.5.60198|2|31 +1.3.6.1.4.1.2620.1.1.25.5.1.6.749|2|2 +1.3.6.1.4.1.2620.1.1.25.5.1.6.3015|2|27 +1.3.6.1.4.1.2620.1.1.25.5.1.6.17885|2|24 +1.3.6.1.4.1.2620.1.1.25.5.1.6.27174|2|28 +1.3.6.1.4.1.2620.1.1.25.5.1.6.30854|2|12 +1.3.6.1.4.1.2620.1.1.25.5.1.6.33502|2|15 +1.3.6.1.4.1.2620.1.1.25.5.1.6.40202|2|12 +1.3.6.1.4.1.2620.1.1.25.5.1.6.55865|2|11 +1.3.6.1.4.1.2620.1.1.25.5.1.6.56693|2|4 +1.3.6.1.4.1.2620.1.1.25.5.1.6.60198|2|23 +1.3.6.1.4.1.2620.1.1.25.5.1.7.749|2|10 +1.3.6.1.4.1.2620.1.1.25.5.1.7.3015|2|2 +1.3.6.1.4.1.2620.1.1.25.5.1.7.17885|2|17 +1.3.6.1.4.1.2620.1.1.25.5.1.7.27174|2|16 +1.3.6.1.4.1.2620.1.1.25.5.1.7.30854|2|22 +1.3.6.1.4.1.2620.1.1.25.5.1.7.33502|2|11 +1.3.6.1.4.1.2620.1.1.25.5.1.7.40202|2|28 +1.3.6.1.4.1.2620.1.1.25.5.1.7.55865|2|5 +1.3.6.1.4.1.2620.1.1.25.5.1.7.56693|2|15 +1.3.6.1.4.1.2620.1.1.25.5.1.7.60198|2|22 +1.3.6.1.4.1.2620.1.1.25.5.1.8.749|2|23 +1.3.6.1.4.1.2620.1.1.25.5.1.8.3015|2|23 +1.3.6.1.4.1.2620.1.1.25.5.1.8.17885|2|18 +1.3.6.1.4.1.2620.1.1.25.5.1.8.27174|2|31 +1.3.6.1.4.1.2620.1.1.25.5.1.8.30854|2|13 +1.3.6.1.4.1.2620.1.1.25.5.1.8.33502|2|5 +1.3.6.1.4.1.2620.1.1.25.5.1.8.40202|2|27 +1.3.6.1.4.1.2620.1.1.25.5.1.8.55865|2|24 +1.3.6.1.4.1.2620.1.1.25.5.1.8.56693|2|14 +1.3.6.1.4.1.2620.1.1.25.5.1.8.60198|2|0 +1.3.6.1.4.1.2620.1.1.25.5.1.9.749|2|14 +1.3.6.1.4.1.2620.1.1.25.5.1.9.3015|2|16 +1.3.6.1.4.1.2620.1.1.25.5.1.9.17885|2|18 +1.3.6.1.4.1.2620.1.1.25.5.1.9.27174|2|4 +1.3.6.1.4.1.2620.1.1.25.5.1.9.30854|2|24 +1.3.6.1.4.1.2620.1.1.25.5.1.9.33502|2|26 +1.3.6.1.4.1.2620.1.1.25.5.1.9.40202|2|1 +1.3.6.1.4.1.2620.1.1.25.5.1.9.55865|2|11 +1.3.6.1.4.1.2620.1.1.25.5.1.9.56693|2|31 +1.3.6.1.4.1.2620.1.1.25.5.1.9.60198|2|28 +1.3.6.1.4.1.2620.1.1.25.5.1.10.749|2|2 +1.3.6.1.4.1.2620.1.1.25.5.1.10.3015|2|30 +1.3.6.1.4.1.2620.1.1.25.5.1.10.17885|2|27 +1.3.6.1.4.1.2620.1.1.25.5.1.10.27174|2|0 +1.3.6.1.4.1.2620.1.1.25.5.1.10.30854|2|7 +1.3.6.1.4.1.2620.1.1.25.5.1.10.33502|2|25 +1.3.6.1.4.1.2620.1.1.25.5.1.10.40202|2|22 +1.3.6.1.4.1.2620.1.1.25.5.1.10.55865|2|30 +1.3.6.1.4.1.2620.1.1.25.5.1.10.56693|2|26 +1.3.6.1.4.1.2620.1.1.25.5.1.10.60198|2|26 +1.3.6.1.4.1.2620.1.1.25.5.1.11.749|2|15 +1.3.6.1.4.1.2620.1.1.25.5.1.11.3015|2|16 +1.3.6.1.4.1.2620.1.1.25.5.1.11.17885|2|9 +1.3.6.1.4.1.2620.1.1.25.5.1.11.27174|2|7 +1.3.6.1.4.1.2620.1.1.25.5.1.11.30854|2|22 +1.3.6.1.4.1.2620.1.1.25.5.1.11.33502|2|7 +1.3.6.1.4.1.2620.1.1.25.5.1.11.40202|2|1 +1.3.6.1.4.1.2620.1.1.25.5.1.11.55865|2|30 +1.3.6.1.4.1.2620.1.1.25.5.1.11.56693|2|1 +1.3.6.1.4.1.2620.1.1.25.5.1.11.60198|2|8 +1.3.6.1.4.1.2620.1.1.25.5.1.12.749|2|30 +1.3.6.1.4.1.2620.1.1.25.5.1.12.3015|2|3 +1.3.6.1.4.1.2620.1.1.25.5.1.12.17885|2|6 +1.3.6.1.4.1.2620.1.1.25.5.1.12.27174|2|17 +1.3.6.1.4.1.2620.1.1.25.5.1.12.30854|2|29 +1.3.6.1.4.1.2620.1.1.25.5.1.12.33502|2|24 +1.3.6.1.4.1.2620.1.1.25.5.1.12.40202|2|9 +1.3.6.1.4.1.2620.1.1.25.5.1.12.55865|2|26 +1.3.6.1.4.1.2620.1.1.25.5.1.12.56693|2|16 +1.3.6.1.4.1.2620.1.1.25.5.1.12.60198|2|19 +1.3.6.1.4.1.2620.1.1.25.5.1.13.749|2|12 +1.3.6.1.4.1.2620.1.1.25.5.1.13.3015|2|20 +1.3.6.1.4.1.2620.1.1.25.5.1.13.17885|2|11 +1.3.6.1.4.1.2620.1.1.25.5.1.13.27174|2|7 +1.3.6.1.4.1.2620.1.1.25.5.1.13.30854|2|31 +1.3.6.1.4.1.2620.1.1.25.5.1.13.33502|2|16 +1.3.6.1.4.1.2620.1.1.25.5.1.13.40202|2|13 +1.3.6.1.4.1.2620.1.1.25.5.1.13.55865|2|30 +1.3.6.1.4.1.2620.1.1.25.5.1.13.56693|2|18 +1.3.6.1.4.1.2620.1.1.25.5.1.13.60198|2|23 +1.3.6.1.4.1.2620.1.1.25.5.1.14.749|2|5 +1.3.6.1.4.1.2620.1.1.25.5.1.14.3015|2|27 +1.3.6.1.4.1.2620.1.1.25.5.1.14.17885|2|18 +1.3.6.1.4.1.2620.1.1.25.5.1.14.27174|2|31 +1.3.6.1.4.1.2620.1.1.25.5.1.14.30854|2|25 +1.3.6.1.4.1.2620.1.1.25.5.1.14.33502|2|2 +1.3.6.1.4.1.2620.1.1.25.5.1.14.40202|2|20 +1.3.6.1.4.1.2620.1.1.25.5.1.14.55865|2|14 +1.3.6.1.4.1.2620.1.1.25.5.1.14.56693|2|22 +1.3.6.1.4.1.2620.1.1.25.5.1.14.60198|2|25 +1.3.6.1.4.1.2620.1.1.25.6.0|4x|4a61646564206f78656e207468656972206b657074 +1.3.6.1.4.1.2620.1.1.25.8.0|4x|627574206b657074204a61646564 +1.3.6.1.4.1.2620.1.1.25.9.0|4|acted +1.3.6.1.4.1.2620.1.1.25.10.0|2|13 +1.3.6.1.4.1.2620.1.1.25.16.0|4|their +1.3.6.1.4.1.2620.1.1.26.1.1.0|2|24 +1.3.6.1.4.1.2620.1.1.26.1.2.0|2|24 +1.3.6.1.4.1.2620.1.1.26.1.3.0|2|1 +1.3.6.1.4.1.2620.1.1.26.1.4.0|2|12 +1.3.6.1.4.1.2620.1.1.26.1.5.0|2|25 +1.3.6.1.4.1.2620.1.1.26.1.6.0|2|1 +1.3.6.1.4.1.2620.1.1.26.1.7.0|2|24 +1.3.6.1.4.1.2620.1.1.26.1.8.0|2|23 +1.3.6.1.4.1.2620.1.1.26.1.9.0|2|23 +1.3.6.1.4.1.2620.1.1.26.1.10.0|2|24 +1.3.6.1.4.1.2620.1.1.26.1.11.0|2|9 +1.3.6.1.4.1.2620.1.1.26.1.12.0|2|24 +1.3.6.1.4.1.2620.1.1.26.1.13.0|2|30 +1.3.6.1.4.1.2620.1.1.26.1.14.0|2|17 +1.3.6.1.4.1.2620.1.1.26.1.15.0|2|8 +1.3.6.1.4.1.2620.1.1.26.1.16.0|2|7 +1.3.6.1.4.1.2620.1.1.26.1.17.0|2|5 +1.3.6.1.4.1.2620.1.1.26.1.18.0|2|4 +1.3.6.1.4.1.2620.1.1.26.1.19.0|2|23 +1.3.6.1.4.1.2620.1.1.26.1.20.0|2|28 +1.3.6.1.4.1.2620.1.1.26.1.21.0|2|1 +1.3.6.1.4.1.2620.1.1.26.1.22.0|2|27 +1.3.6.1.4.1.2620.1.1.26.2.1.0|2|12 +1.3.6.1.4.1.2620.1.1.26.2.2.0|2|11 +1.3.6.1.4.1.2620.1.1.26.2.3.0|2|23 +1.3.6.1.4.1.2620.1.1.26.2.4.0|2|6 +1.3.6.1.4.1.2620.1.1.26.2.5.0|2|6 +1.3.6.1.4.1.2620.1.1.26.2.6.0|2|6 +1.3.6.1.4.1.2620.1.1.26.2.7.0|2|4 +1.3.6.1.4.1.2620.1.1.26.2.8.0|2|29 +1.3.6.1.4.1.2620.1.1.26.2.9.0|2|10 +1.3.6.1.4.1.2620.1.1.26.2.10.0|2|19 +1.3.6.1.4.1.2620.1.1.26.2.11.0|2|2 +1.3.6.1.4.1.2620.1.1.26.2.12.0|2|22 +1.3.6.1.4.1.2620.1.1.26.2.13.0|2|6 +1.3.6.1.4.1.2620.1.1.26.2.14.0|2|23 +1.3.6.1.4.1.2620.1.1.26.2.15.0|2|3 +1.3.6.1.4.1.2620.1.1.26.2.16.0|2|0 +1.3.6.1.4.1.2620.1.1.26.3.1.0|2|30 +1.3.6.1.4.1.2620.1.1.26.3.2.0|2|4 +1.3.6.1.4.1.2620.1.1.26.3.3.0|2|28 +1.3.6.1.4.1.2620.1.1.26.3.4.0|2|7 +1.3.6.1.4.1.2620.1.1.26.3.5.0|2|11 +1.3.6.1.4.1.2620.1.1.26.4.1.0|2|22 +1.3.6.1.4.1.2620.1.1.26.4.2.0|2|5 +1.3.6.1.4.1.2620.1.1.26.4.3.0|2|31 +1.3.6.1.4.1.2620.1.1.26.4.4.0|2|21 +1.3.6.1.4.1.2620.1.1.26.4.5.0|2|0 +1.3.6.1.4.1.2620.1.1.26.4.6.0|2|25 +1.3.6.1.4.1.2620.1.1.26.4.7.0|2|10 +1.3.6.1.4.1.2620.1.1.26.5.1.0|2|0 +1.3.6.1.4.1.2620.1.1.26.5.2.0|2|6 +1.3.6.1.4.1.2620.1.1.26.6.1.0|2|18 +1.3.6.1.4.1.2620.1.1.26.6.2.0|2|26 +1.3.6.1.4.1.2620.1.1.26.6.3.0|2|16 +1.3.6.1.4.1.2620.1.1.26.8.1.0|2|21 +1.3.6.1.4.1.2620.1.1.26.8.2.0|2|2 +1.3.6.1.4.1.2620.1.1.26.8.3.0|2|20 +1.3.6.1.4.1.2620.1.1.26.9.1.1.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.1.2.0|2|13 +1.3.6.1.4.1.2620.1.1.26.9.1.3.0|2|23 +1.3.6.1.4.1.2620.1.1.26.9.1.4.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.1.5.0|2|31 +1.3.6.1.4.1.2620.1.1.26.9.1.6.0|2|4 +1.3.6.1.4.1.2620.1.1.26.9.1.7.0|2|6 +1.3.6.1.4.1.2620.1.1.26.9.1.8.0|2|18 +1.3.6.1.4.1.2620.1.1.26.9.1.9.0|2|26 +1.3.6.1.4.1.2620.1.1.26.9.1.10.0|2|30 +1.3.6.1.4.1.2620.1.1.26.9.1.11.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.1.12.0|2|29 +1.3.6.1.4.1.2620.1.1.26.9.1.13.0|2|23 +1.3.6.1.4.1.2620.1.1.26.9.1.14.0|2|12 +1.3.6.1.4.1.2620.1.1.26.9.1.15.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.1.16.0|2|1 +1.3.6.1.4.1.2620.1.1.26.9.1.17.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.1.18.0|2|29 +1.3.6.1.4.1.2620.1.1.26.9.1.19.0|2|0 +1.3.6.1.4.1.2620.1.1.26.9.1.20.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.1.21.0|2|3 +1.3.6.1.4.1.2620.1.1.26.9.1.22.0|2|11 +1.3.6.1.4.1.2620.1.1.26.9.1.23.0|2|1 +1.3.6.1.4.1.2620.1.1.26.9.1.24.0|2|1 +1.3.6.1.4.1.2620.1.1.26.9.1.25.0|2|11 +1.3.6.1.4.1.2620.1.1.26.9.1.26.0|2|22 +1.3.6.1.4.1.2620.1.1.26.9.1.27.0|2|4 +1.3.6.1.4.1.2620.1.1.26.9.1.28.0|2|26 +1.3.6.1.4.1.2620.1.1.26.9.1.29.0|2|17 +1.3.6.1.4.1.2620.1.1.26.9.1.30.0|2|8 +1.3.6.1.4.1.2620.1.1.26.9.1.31.0|2|3 +1.3.6.1.4.1.2620.1.1.26.9.1.32.0|2|6 +1.3.6.1.4.1.2620.1.1.26.9.1.33.0|2|3 +1.3.6.1.4.1.2620.1.1.26.9.1.34.0|2|25 +1.3.6.1.4.1.2620.1.1.26.9.1.35.0|2|4 +1.3.6.1.4.1.2620.1.1.26.9.1.36.0|2|20 +1.3.6.1.4.1.2620.1.1.26.9.1.37.0|4x|7a6f6d62696573206163746564207a6f6d62696573207a6f6d62696573207a6f6d626965732061637465642061637465642062757420627574 +1.3.6.1.4.1.2620.1.1.26.9.1.38.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.1.39.0|2|30 +1.3.6.1.4.1.2620.1.1.26.9.1.40.0|2|15 +1.3.6.1.4.1.2620.1.1.26.9.1.41.0|2|9 +1.3.6.1.4.1.2620.1.1.26.9.1.42.0|2|30 +1.3.6.1.4.1.2620.1.1.26.9.1.43.0|2|16 +1.3.6.1.4.1.2620.1.1.26.9.1.44.0|2|26 +1.3.6.1.4.1.2620.1.1.26.9.1.45.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.1.46.0|2|1 +1.3.6.1.4.1.2620.1.1.26.9.1.47.0|2|22 +1.3.6.1.4.1.2620.1.1.26.9.1.48.0|2|15 +1.3.6.1.4.1.2620.1.1.26.9.1.49.0|2|0 +1.3.6.1.4.1.2620.1.1.26.9.1.50.0|2|30 +1.3.6.1.4.1.2620.1.1.26.9.1.51.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.1.52.0|2|11 +1.3.6.1.4.1.2620.1.1.26.9.1.53.0|2|16 +1.3.6.1.4.1.2620.1.1.26.9.1.54.0|2|28 +1.3.6.1.4.1.2620.1.1.26.9.1.55.0|2|28 +1.3.6.1.4.1.2620.1.1.26.9.1.56.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.1.57.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.2.1.0|2|16 +1.3.6.1.4.1.2620.1.1.26.9.2.2.0|2|12 +1.3.6.1.4.1.2620.1.1.26.9.2.3.0|2|3 +1.3.6.1.4.1.2620.1.1.26.9.2.4.0|2|7 +1.3.6.1.4.1.2620.1.1.26.9.2.5.0|2|16 +1.3.6.1.4.1.2620.1.1.26.9.2.6.0|2|22 +1.3.6.1.4.1.2620.1.1.26.9.2.7.0|2|31 +1.3.6.1.4.1.2620.1.1.26.9.2.8.0|2|15 +1.3.6.1.4.1.2620.1.1.26.9.2.9.0|2|20 +1.3.6.1.4.1.2620.1.1.26.9.2.10.0|2|18 +1.3.6.1.4.1.2620.1.1.26.9.2.11.0|2|7 +1.3.6.1.4.1.2620.1.1.26.9.2.12.0|2|27 +1.3.6.1.4.1.2620.1.1.26.9.2.13.0|2|2 +1.3.6.1.4.1.2620.1.1.26.9.2.14.0|2|30 +1.3.6.1.4.1.2620.1.1.26.9.2.15.0|2|31 +1.3.6.1.4.1.2620.1.1.26.9.2.16.0|2|0 +1.3.6.1.4.1.2620.1.1.26.9.2.17.0|2|10 +1.3.6.1.4.1.2620.1.1.26.9.2.18.0|2|10 +1.3.6.1.4.1.2620.1.1.26.9.2.19.0|2|15 +1.3.6.1.4.1.2620.1.1.26.9.2.20.0|2|27 +1.3.6.1.4.1.2620.1.1.26.9.2.21.0|2|17 +1.3.6.1.4.1.2620.1.1.26.9.2.22.0|4x|746865697220666f7277617264206f78656e2064726976696e67206f78656e +1.3.6.1.4.1.2620.1.1.26.9.2.23.0|2|1 +1.3.6.1.4.1.2620.1.1.26.9.2.24.0|2|15 +1.3.6.1.4.1.2620.1.1.26.9.2.25.0|2|9 +1.3.6.1.4.1.2620.1.1.26.9.2.26.0|2|2 +1.3.6.1.4.1.2620.1.1.26.9.2.27.0|2|1 +1.3.6.1.4.1.2620.1.1.26.9.2.28.0|2|21 +1.3.6.1.4.1.2620.1.1.26.9.2.29.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.2.30.0|2|20 +1.3.6.1.4.1.2620.1.1.26.9.2.31.0|2|8 +1.3.6.1.4.1.2620.1.1.26.9.2.32.0|2|26 +1.3.6.1.4.1.2620.1.1.26.9.2.33.0|2|4 +1.3.6.1.4.1.2620.1.1.26.9.2.34.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.2.35.0|2|27 +1.3.6.1.4.1.2620.1.1.26.9.2.36.0|2|7 +1.3.6.1.4.1.2620.1.1.26.9.2.37.0|2|11 +1.3.6.1.4.1.2620.1.1.26.9.2.38.0|2|6 +1.3.6.1.4.1.2620.1.1.26.9.3.1.0|2|12 +1.3.6.1.4.1.2620.1.1.26.9.3.2.0|2|17 +1.3.6.1.4.1.2620.1.1.26.9.3.3.0|2|8 +1.3.6.1.4.1.2620.1.1.26.9.3.4.0|2|27 +1.3.6.1.4.1.2620.1.1.26.9.3.5.0|2|7 +1.3.6.1.4.1.2620.1.1.26.9.3.6.0|2|2 +1.3.6.1.4.1.2620.1.1.26.9.3.7.0|2|10 +1.3.6.1.4.1.2620.1.1.26.9.3.8.0|2|18 +1.3.6.1.4.1.2620.1.1.26.9.3.9.0|2|9 +1.3.6.1.4.1.2620.1.1.26.9.3.10.0|2|31 +1.3.6.1.4.1.2620.1.1.26.9.3.11.0|2|11 +1.3.6.1.4.1.2620.1.1.26.9.3.12.0|2|13 +1.3.6.1.4.1.2620.1.1.26.9.3.13.0|2|12 +1.3.6.1.4.1.2620.1.1.26.9.3.14.0|2|0 +1.3.6.1.4.1.2620.1.1.26.9.3.15.0|2|20 +1.3.6.1.4.1.2620.1.1.26.9.3.16.0|2|13 +1.3.6.1.4.1.2620.1.1.26.9.3.17.0|2|4 +1.3.6.1.4.1.2620.1.1.26.9.3.18.0|4x|6b657074204a61646564207468656972207a6f6d62696573207a6f6d62696573204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.1.26.9.3.19.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.4.1.0|2|3 +1.3.6.1.4.1.2620.1.1.26.9.4.2.0|2|3 +1.3.6.1.4.1.2620.1.1.26.9.4.3.0|2|8 +1.3.6.1.4.1.2620.1.1.26.9.4.4.0|2|27 +1.3.6.1.4.1.2620.1.1.26.9.4.5.0|2|13 +1.3.6.1.4.1.2620.1.1.26.9.4.6.0|2|28 +1.3.6.1.4.1.2620.1.1.26.9.4.7.0|2|6 +1.3.6.1.4.1.2620.1.1.26.9.4.8.0|2|13 +1.3.6.1.4.1.2620.1.1.26.9.4.9.0|2|3 +1.3.6.1.4.1.2620.1.1.26.9.4.10.0|2|31 +1.3.6.1.4.1.2620.1.1.26.9.4.11.0|2|9 +1.3.6.1.4.1.2620.1.1.26.9.4.12.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.4.13.0|2|12 +1.3.6.1.4.1.2620.1.1.26.9.4.14.0|2|17 +1.3.6.1.4.1.2620.1.1.26.9.4.15.0|2|26 +1.3.6.1.4.1.2620.1.1.26.9.4.16.0|2|19 +1.3.6.1.4.1.2620.1.1.26.9.4.17.0|2|29 +1.3.6.1.4.1.2620.1.1.26.9.4.18.0|4x|6f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.26.9.4.19.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.5.1.0|2|10 +1.3.6.1.4.1.2620.1.1.26.9.5.2.0|2|15 +1.3.6.1.4.1.2620.1.1.26.9.5.3.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.5.4.0|2|15 +1.3.6.1.4.1.2620.1.1.26.9.5.5.0|4x|666f7277617264206f78656e2064726976696e672064726976696e6720746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.1.26.9.5.6.0|2|21 +1.3.6.1.4.1.2620.1.1.26.9.6.1.0|2|27 +1.3.6.1.4.1.2620.1.1.26.9.6.2.0|2|7 +1.3.6.1.4.1.2620.1.1.26.9.6.3.0|2|11 +1.3.6.1.4.1.2620.1.1.26.9.6.4.0|2|22 +1.3.6.1.4.1.2620.1.1.26.9.6.5.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.6.6.0|2|2 +1.3.6.1.4.1.2620.1.1.26.9.6.7.0|2|28 +1.3.6.1.4.1.2620.1.1.26.9.6.8.0|2|9 +1.3.6.1.4.1.2620.1.1.26.9.6.9.0|2|18 +1.3.6.1.4.1.2620.1.1.26.9.6.10.0|2|3 +1.3.6.1.4.1.2620.1.1.26.9.6.11.0|2|9 +1.3.6.1.4.1.2620.1.1.26.9.6.12.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.6.13.0|2|26 +1.3.6.1.4.1.2620.1.1.26.9.6.14.0|2|29 +1.3.6.1.4.1.2620.1.1.26.9.6.15.0|2|17 +1.3.6.1.4.1.2620.1.1.26.9.6.16.0|2|27 +1.3.6.1.4.1.2620.1.1.26.9.6.17.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.6.18.0|2|4 +1.3.6.1.4.1.2620.1.1.26.9.6.19.0|2|22 +1.3.6.1.4.1.2620.1.1.26.9.6.20.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.6.21.0|2|28 +1.3.6.1.4.1.2620.1.1.26.9.6.22.0|2|19 +1.3.6.1.4.1.2620.1.1.26.9.6.23.0|2|6 +1.3.6.1.4.1.2620.1.1.26.9.6.24.0|2|8 +1.3.6.1.4.1.2620.1.1.26.9.6.25.0|2|22 +1.3.6.1.4.1.2620.1.1.26.9.6.26.0|4x|6b65707420717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.1.26.9.6.27.0|2|0 +1.3.6.1.4.1.2620.1.1.26.9.6.28.0|2|11 +1.3.6.1.4.1.2620.1.1.26.9.6.29.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.6.30.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.6.31.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.6.32.0|2|1 +1.3.6.1.4.1.2620.1.1.26.9.6.33.0|2|26 +1.3.6.1.4.1.2620.1.1.26.9.6.34.0|2|16 +1.3.6.1.4.1.2620.1.1.26.9.6.35.0|2|4 +1.3.6.1.4.1.2620.1.1.26.9.6.36.0|2|29 +1.3.6.1.4.1.2620.1.1.26.9.6.37.0|2|19 +1.3.6.1.4.1.2620.1.1.26.9.6.38.0|2|31 +1.3.6.1.4.1.2620.1.1.26.9.6.39.0|2|6 +1.3.6.1.4.1.2620.1.1.26.9.6.40.0|2|22 +1.3.6.1.4.1.2620.1.1.26.9.6.41.0|2|8 +1.3.6.1.4.1.2620.1.1.26.9.6.42.0|2|31 +1.3.6.1.4.1.2620.1.1.26.9.7.1.0|2|17 +1.3.6.1.4.1.2620.1.1.26.9.7.2.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.7.3.0|2|11 +1.3.6.1.4.1.2620.1.1.26.9.7.4.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.7.5.0|2|9 +1.3.6.1.4.1.2620.1.1.26.9.7.6.0|2|17 +1.3.6.1.4.1.2620.1.1.26.9.7.7.0|2|2 +1.3.6.1.4.1.2620.1.1.26.9.7.8.0|2|7 +1.3.6.1.4.1.2620.1.1.26.9.7.9.0|2|13 +1.3.6.1.4.1.2620.1.1.26.9.7.10.0|2|10 +1.3.6.1.4.1.2620.1.1.26.9.7.11.0|2|29 +1.3.6.1.4.1.2620.1.1.26.9.7.12.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.7.13.0|2|7 +1.3.6.1.4.1.2620.1.1.26.9.7.14.0|2|20 +1.3.6.1.4.1.2620.1.1.26.9.7.15.0|2|22 +1.3.6.1.4.1.2620.1.1.26.9.7.16.0|2|18 +1.3.6.1.4.1.2620.1.1.26.9.7.17.0|2|15 +1.3.6.1.4.1.2620.1.1.26.9.7.18.0|2|30 +1.3.6.1.4.1.2620.1.1.26.9.7.19.0|2|13 +1.3.6.1.4.1.2620.1.1.26.9.7.20.0|2|29 +1.3.6.1.4.1.2620.1.1.26.9.7.21.0|2|11 +1.3.6.1.4.1.2620.1.1.26.9.7.22.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.7.23.0|2|29 +1.3.6.1.4.1.2620.1.1.26.9.7.24.0|2|22 +1.3.6.1.4.1.2620.1.1.26.9.7.25.0|2|17 +1.3.6.1.4.1.2620.1.1.26.9.7.26.0|4x|4a61646564206b657074206163746564 +1.3.6.1.4.1.2620.1.1.26.9.7.27.0|2|15 +1.3.6.1.4.1.2620.1.1.26.9.7.28.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.7.29.0|2|1 +1.3.6.1.4.1.2620.1.1.26.9.7.30.0|2|4 +1.3.6.1.4.1.2620.1.1.26.9.7.31.0|2|7 +1.3.6.1.4.1.2620.1.1.26.9.7.32.0|2|18 +1.3.6.1.4.1.2620.1.1.26.9.7.33.0|2|13 +1.3.6.1.4.1.2620.1.1.26.9.7.34.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.7.35.0|2|30 +1.3.6.1.4.1.2620.1.1.26.9.7.36.0|2|23 +1.3.6.1.4.1.2620.1.1.26.9.7.37.0|2|1 +1.3.6.1.4.1.2620.1.1.26.9.7.38.0|2|8 +1.3.6.1.4.1.2620.1.1.26.9.7.39.0|2|17 +1.3.6.1.4.1.2620.1.1.26.9.7.40.0|2|30 +1.3.6.1.4.1.2620.1.1.26.9.7.41.0|2|25 +1.3.6.1.4.1.2620.1.1.26.9.7.42.0|2|23 +1.3.6.1.4.1.2620.1.1.26.9.10.1.0|2|26 +1.3.6.1.4.1.2620.1.1.26.9.10.2.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.10.3.0|2|26 +1.3.6.1.4.1.2620.1.1.26.9.10.4.0|2|27 +1.3.6.1.4.1.2620.1.1.26.9.10.5.0|2|19 +1.3.6.1.4.1.2620.1.1.26.9.10.6.0|2|6 +1.3.6.1.4.1.2620.1.1.26.9.10.7.0|2|20 +1.3.6.1.4.1.2620.1.1.26.9.10.8.0|2|9 +1.3.6.1.4.1.2620.1.1.26.9.10.9.0|2|9 +1.3.6.1.4.1.2620.1.1.26.9.10.10.0|2|21 +1.3.6.1.4.1.2620.1.1.26.9.10.11.0|2|8 +1.3.6.1.4.1.2620.1.1.26.9.10.12.0|2|4 +1.3.6.1.4.1.2620.1.1.26.9.10.13.0|2|19 +1.3.6.1.4.1.2620.1.1.26.9.10.14.0|2|6 +1.3.6.1.4.1.2620.1.1.26.9.10.15.0|2|4 +1.3.6.1.4.1.2620.1.1.26.11.1.0|2|4 +1.3.6.1.4.1.2620.1.1.26.11.2.0|2|20 +1.3.6.1.4.1.2620.1.1.26.11.3.0|2|24 +1.3.6.1.4.1.2620.1.1.26.11.4.0|2|30 +1.3.6.1.4.1.2620.1.1.26.11.5.0|2|10 +1.3.6.1.4.1.2620.1.1.26.11.6.0|2|2 +1.3.6.1.4.1.2620.1.1.26.12.1.0|4x|7468656972207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.26.12.2.0|4x|666f7277617264206163746564206b657074207468656972206f78656e206b657074 +1.3.6.1.4.1.2620.1.1.26.12.3.0|4x|62757420717561696e746c79206f78656e2064726976696e6720666f7277617264206f78656e207468656972207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.1.26.12.4.0|2|18 +1.3.6.1.4.1.2620.1.1.26.12.5.0|2|9 +1.3.6.1.4.1.2620.1.1.26.12.6.0|4x|7a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.1.26.12.7.0|2|9 +1.3.6.1.4.1.2620.1.1.26.12.8.0|2|7 +1.3.6.1.4.1.2620.1.1.26.12.9.0|4x|4a61646564206163746564206f78656e2061637465642064726976696e672064726976696e6720627574 +1.3.6.1.4.1.2620.1.1.26.12.10.0|2|5 +1.3.6.1.4.1.2620.1.1.26.12.11.0|4x|6f78656e2064726976696e67207a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.1.26.12.12.0|2|20 +1.3.6.1.4.1.2620.1.1.26.12.13.0|4x|7a6f6d626965732062757420627574206b6570742064726976696e67206f78656e204a61646564 +1.3.6.1.4.1.2620.1.1.26.12.14.0|2|12 +1.3.6.1.4.1.2620.1.1.26.12.15.0|4x|64726976696e6720717561696e746c7920717561696e746c79206163746564206f78656e +1.3.6.1.4.1.2620.1.1.26.12.16.0|2|12 +1.3.6.1.4.1.2620.1.1.26.12.17.0|2|1 +1.3.6.1.4.1.2620.1.1.26.12.18.0|4x|616374656420717561696e746c792064726976696e672064726976696e6720746865697220616374656420666f7277617264 +1.3.6.1.4.1.2620.1.1.26.12.19.0|2|28 +1.3.6.1.4.1.2620.1.1.26.12.20.0|2|24 +1.3.6.1.4.1.2620.1.1.26.12.21.0|2|3 +1.3.6.1.4.1.2620.1.1.26.12.22.0|2|0 +1.3.6.1.4.1.2620.1.1.27.1.1.10195|66|10195 +1.3.6.1.4.1.2620.1.1.27.1.1.14420|66|14420 +1.3.6.1.4.1.2620.1.1.27.1.1.19605|66|19605 +1.3.6.1.4.1.2620.1.1.27.1.1.24119|66|24119 +1.3.6.1.4.1.2620.1.1.27.1.1.28877|66|28877 +1.3.6.1.4.1.2620.1.1.27.1.1.32113|66|32113 +1.3.6.1.4.1.2620.1.1.27.1.1.33158|66|33158 +1.3.6.1.4.1.2620.1.1.27.1.1.36483|66|36483 +1.3.6.1.4.1.2620.1.1.27.1.1.46390|66|46390 +1.3.6.1.4.1.2620.1.1.27.1.1.61861|66|61861 +1.3.6.1.4.1.2620.1.1.27.1.2.10195|4x|717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.1.27.1.2.14420|4|forward +1.3.6.1.4.1.2620.1.1.27.1.2.19605|4|forward +1.3.6.1.4.1.2620.1.1.27.1.2.24119|4x|717561696e746c7920666f727761726420666f7277617264206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.27.1.2.28877|4x|4a6164656420627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.27.1.2.32113|4x|717561696e746c79206f78656e20746865697220666f72776172642062757420717561696e746c792062757420627574 +1.3.6.1.4.1.2620.1.1.27.1.2.33158|4x|4a6164656420616374656420717561696e746c792064726976696e6720717561696e746c79206163746564207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.1.27.1.2.36483|4x|7468656972207a6f6d6269657320717561696e746c7920616374656420666f72776172642074686569722064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.1.27.1.2.46390|4x|717561696e746c79206163746564206b657074204a6164656420616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.1.27.1.2.61861|4|Jaded +1.3.6.1.4.1.2620.1.1.27.1.3.10195|2|22 +1.3.6.1.4.1.2620.1.1.27.1.3.14420|2|14 +1.3.6.1.4.1.2620.1.1.27.1.3.19605|2|31 +1.3.6.1.4.1.2620.1.1.27.1.3.24119|2|15 +1.3.6.1.4.1.2620.1.1.27.1.3.28877|2|17 +1.3.6.1.4.1.2620.1.1.27.1.3.32113|2|2 +1.3.6.1.4.1.2620.1.1.27.1.3.33158|2|10 +1.3.6.1.4.1.2620.1.1.27.1.3.36483|2|17 +1.3.6.1.4.1.2620.1.1.27.1.3.46390|2|10 +1.3.6.1.4.1.2620.1.1.27.1.3.61861|2|25 +1.3.6.1.4.1.2620.1.1.27.1.4.10195|2|4 +1.3.6.1.4.1.2620.1.1.27.1.4.14420|2|25 +1.3.6.1.4.1.2620.1.1.27.1.4.19605|2|11 +1.3.6.1.4.1.2620.1.1.27.1.4.24119|2|8 +1.3.6.1.4.1.2620.1.1.27.1.4.28877|2|25 +1.3.6.1.4.1.2620.1.1.27.1.4.32113|2|19 +1.3.6.1.4.1.2620.1.1.27.1.4.33158|2|9 +1.3.6.1.4.1.2620.1.1.27.1.4.36483|2|6 +1.3.6.1.4.1.2620.1.1.27.1.4.46390|2|25 +1.3.6.1.4.1.2620.1.1.27.1.4.61861|2|22 +1.3.6.1.4.1.2620.1.1.27.1.5.10195|2|13 +1.3.6.1.4.1.2620.1.1.27.1.5.14420|2|4 +1.3.6.1.4.1.2620.1.1.27.1.5.19605|2|22 +1.3.6.1.4.1.2620.1.1.27.1.5.24119|2|17 +1.3.6.1.4.1.2620.1.1.27.1.5.28877|2|27 +1.3.6.1.4.1.2620.1.1.27.1.5.32113|2|27 +1.3.6.1.4.1.2620.1.1.27.1.5.33158|2|12 +1.3.6.1.4.1.2620.1.1.27.1.5.36483|2|25 +1.3.6.1.4.1.2620.1.1.27.1.5.46390|2|23 +1.3.6.1.4.1.2620.1.1.27.1.5.61861|2|1 +1.3.6.1.4.1.2620.1.1.27.1.6.10195|4x|4a6164656420616374656420717561696e746c7920746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.1.27.1.6.14420|4x|7a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.27.1.6.19605|4x|717561696e746c792064726976696e6720717561696e746c79207a6f6d62696573206b657074204a61646564206b657074206f78656e +1.3.6.1.4.1.2620.1.1.27.1.6.24119|4x|6f78656e204a6164656420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.1.27.1.6.28877|4x|6b657074206f78656e20666f72776172642064726976696e672064726976696e6720717561696e746c79204a616465642064726976696e67206163746564 +1.3.6.1.4.1.2620.1.1.27.1.6.32113|4x|4a6164656420666f72776172642074686569722064726976696e67 +1.3.6.1.4.1.2620.1.1.27.1.6.33158|4|quaintly +1.3.6.1.4.1.2620.1.1.27.1.6.36483|4x|62757420627574206b6570742064726976696e6720627574206163746564 +1.3.6.1.4.1.2620.1.1.27.1.6.46390|4x|627574207a6f6d62696573207468656972 +1.3.6.1.4.1.2620.1.1.27.1.6.61861|4x|4a6164656420627574 +1.3.6.1.4.1.2620.1.1.27.1.7.10195|2|9 +1.3.6.1.4.1.2620.1.1.27.1.7.14420|2|19 +1.3.6.1.4.1.2620.1.1.27.1.7.19605|2|19 +1.3.6.1.4.1.2620.1.1.27.1.7.24119|2|8 +1.3.6.1.4.1.2620.1.1.27.1.7.28877|2|0 +1.3.6.1.4.1.2620.1.1.27.1.7.32113|2|15 +1.3.6.1.4.1.2620.1.1.27.1.7.33158|2|2 +1.3.6.1.4.1.2620.1.1.27.1.7.36483|2|15 +1.3.6.1.4.1.2620.1.1.27.1.7.46390|2|3 +1.3.6.1.4.1.2620.1.1.27.1.7.61861|2|2 +1.3.6.1.4.1.2620.1.1.27.1.8.10195|2|10 +1.3.6.1.4.1.2620.1.1.27.1.8.14420|2|15 +1.3.6.1.4.1.2620.1.1.27.1.8.19605|2|15 +1.3.6.1.4.1.2620.1.1.27.1.8.24119|2|13 +1.3.6.1.4.1.2620.1.1.27.1.8.28877|2|15 +1.3.6.1.4.1.2620.1.1.27.1.8.32113|2|24 +1.3.6.1.4.1.2620.1.1.27.1.8.33158|2|20 +1.3.6.1.4.1.2620.1.1.27.1.8.36483|2|15 +1.3.6.1.4.1.2620.1.1.27.1.8.46390|2|29 +1.3.6.1.4.1.2620.1.1.27.1.8.61861|2|3 +1.3.6.1.4.1.2620.1.1.27.1.9.10195|4x|666f727761726420627574207a6f6d62696573206f78656e20717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.1.27.1.9.14420|4x|6f78656e207a6f6d62696573207a6f6d6269657320717561696e746c79204a6164656420616374656420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.27.1.9.19605|4x|717561696e746c7920666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.27.1.9.24119|4x|616374656420666f72776172642064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.1.27.1.9.28877|4x|717561696e746c7920746865697220666f7277617264206163746564 +1.3.6.1.4.1.2620.1.1.27.1.9.32113|4|zombies +1.3.6.1.4.1.2620.1.1.27.1.9.33158|4x|6f78656e206b65707420717561696e746c79206f78656e204a61646564207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.1.27.1.9.36483|4x|64726976696e6720717561696e746c79204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.1.27.1.9.46390|4x|6b65707420666f7277617264206163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.27.1.9.61861|4x|4a61646564206b657074204a61646564206b65707420666f727761726420666f7277617264206163746564 +1.3.6.1.4.1.2620.1.1.27.1.10.10195|4x|7468656972204a61646564 +1.3.6.1.4.1.2620.1.1.27.1.10.14420|4x|6b657074206163746564 +1.3.6.1.4.1.2620.1.1.27.1.10.19605|4|zombies +1.3.6.1.4.1.2620.1.1.27.1.10.24119|4x|6f78656e20616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.1.27.1.10.28877|4x|717561696e746c792061637465642064726976696e67204a6164656420717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.1.27.1.10.32113|4|acted +1.3.6.1.4.1.2620.1.1.27.1.10.33158|4x|666f7277617264206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.1.27.1.10.36483|4|their +1.3.6.1.4.1.2620.1.1.27.1.10.46390|4x|6b657074204a61646564 +1.3.6.1.4.1.2620.1.1.27.1.10.61861|4x|717561696e746c79204a616465642064726976696e67206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.27.1.11.10195|4x|6b657074206b657074206f78656e +1.3.6.1.4.1.2620.1.1.27.1.11.14420|4x|666f72776172642074686569722061637465642064726976696e6720717561696e746c7920627574 +1.3.6.1.4.1.2620.1.1.27.1.11.19605|4x|64726976696e672064726976696e6720666f727761726420666f727761726420717561696e746c7920666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.27.1.11.24119|4x|616374656420666f7277617264207468656972206f78656e2064726976696e67206b657074206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.1.27.1.11.28877|4x|666f7277617264206163746564 +1.3.6.1.4.1.2620.1.1.27.1.11.32113|4x|666f727761726420616374656420717561696e746c79206b65707420627574206f78656e206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.1.27.1.11.33158|4x|4a61646564206163746564206f78656e +1.3.6.1.4.1.2620.1.1.27.1.11.36483|4|their +1.3.6.1.4.1.2620.1.1.27.1.11.46390|4|acted +1.3.6.1.4.1.2620.1.1.27.1.11.61861|4x|717561696e746c792064726976696e6720616374656420666f7277617264204a61646564206b65707420746865697220717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.1.30.1.0|2|25 +1.3.6.1.4.1.2620.1.1.30.2.0|4x|627574204a616465642064726976696e6720717561696e746c7920666f727761726420666f7277617264206163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.30.3.1.1.19667|66|19667 +1.3.6.1.4.1.2620.1.1.30.3.1.1.25767|66|25767 +1.3.6.1.4.1.2620.1.1.30.3.1.1.30380|66|30380 +1.3.6.1.4.1.2620.1.1.30.3.1.1.40339|66|40339 +1.3.6.1.4.1.2620.1.1.30.3.1.1.42496|66|42496 +1.3.6.1.4.1.2620.1.1.30.3.1.1.46701|66|46701 +1.3.6.1.4.1.2620.1.1.30.3.1.1.55147|66|55147 +1.3.6.1.4.1.2620.1.1.30.3.1.1.57403|66|57403 +1.3.6.1.4.1.2620.1.1.30.3.1.1.59930|66|59930 +1.3.6.1.4.1.2620.1.1.30.3.1.1.64934|66|64934 +1.3.6.1.4.1.2620.1.1.30.3.1.2.19667|4x|4a61646564206f78656e206f78656e207a6f6d6269657320746865697220616374656420666f7277617264204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.1.30.3.1.2.25767|4x|6b65707420666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.1.30.3.1.2.30380|4x|717561696e746c79206163746564207a6f6d62696573207a6f6d626965732064726976696e67204a61646564 +1.3.6.1.4.1.2620.1.1.30.3.1.2.40339|4x|7468656972207468656972207468656972206f78656e20717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.1.30.3.1.2.42496|4|acted +1.3.6.1.4.1.2620.1.1.30.3.1.2.46701|4x|666f7277617264206163746564207468656972 +1.3.6.1.4.1.2620.1.1.30.3.1.2.55147|4x|4a61646564206163746564206b657074 +1.3.6.1.4.1.2620.1.1.30.3.1.2.57403|4x|6163746564204a61646564204a6164656420717561696e746c79 +1.3.6.1.4.1.2620.1.1.30.3.1.2.59930|4x|64726976696e672064726976696e67204a61646564206f78656e20627574204a616465642064726976696e67207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.30.3.1.2.64934|4x|61637465642062757420717561696e746c79 +1.3.6.1.4.1.2620.1.1.30.3.1.3.19667|2|17 +1.3.6.1.4.1.2620.1.1.30.3.1.3.25767|2|20 +1.3.6.1.4.1.2620.1.1.30.3.1.3.30380|2|5 +1.3.6.1.4.1.2620.1.1.30.3.1.3.40339|2|13 +1.3.6.1.4.1.2620.1.1.30.3.1.3.42496|2|18 +1.3.6.1.4.1.2620.1.1.30.3.1.3.46701|2|26 +1.3.6.1.4.1.2620.1.1.30.3.1.3.55147|2|30 +1.3.6.1.4.1.2620.1.1.30.3.1.3.57403|2|6 +1.3.6.1.4.1.2620.1.1.30.3.1.3.59930|2|23 +1.3.6.1.4.1.2620.1.1.30.3.1.3.64934|2|27 +1.3.6.1.4.1.2620.1.1.30.3.1.4.19667|4x|6b65707420717561696e746c7920717561696e746c7920616374656420717561696e746c79206b657074206b657074207a6f6d626965732064726976696e67 +1.3.6.1.4.1.2620.1.1.30.3.1.4.25767|4x|6f78656e206b657074 +1.3.6.1.4.1.2620.1.1.30.3.1.4.30380|4x|6f78656e20627574204a61646564206b65707420717561696e746c7920717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.30.3.1.4.40339|4x|64726976696e6720717561696e746c7920627574207a6f6d6269657320666f727761726420666f7277617264204a61646564204a61646564 +1.3.6.1.4.1.2620.1.1.30.3.1.4.42496|4x|717561696e746c79207a6f6d6269657320717561696e746c792064726976696e6720627574 +1.3.6.1.4.1.2620.1.1.30.3.1.4.46701|4x|64726976696e67207468656972204a6164656420616374656420746865697220717561696e746c79204a616465642074686569722064726976696e67 +1.3.6.1.4.1.2620.1.1.30.3.1.4.55147|4|forward +1.3.6.1.4.1.2620.1.1.30.3.1.4.57403|4x|666f727761726420666f7277617264207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.1.1.30.3.1.4.59930|4x|6b657074204a616465642062757420666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.1.30.3.1.4.64934|4x|746865697220616374656420666f727761726420717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.1.30.4.0|4x|7468656972206b657074207468656972206163746564 +1.3.6.1.4.1.2620.1.1.30.5.0|2|17 +1.3.6.1.4.1.2620.1.2.1.0|4x|4a61646564206b657074204a616465642064726976696e6720666f7277617264206b6570742064726976696e67204a61646564206163746564 +1.3.6.1.4.1.2620.1.2.2.0|2|5 +1.3.6.1.4.1.2620.1.2.3.0|2|21 +1.3.6.1.4.1.2620.1.2.4.1.1.0|4x|717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.1.2.4.1.2.0|4x|6f78656e20666f72776172642062757420627574204a61646564204a6164656420717561696e746c7920627574 +1.3.6.1.4.1.2620.1.2.4.2.1.0|4x|62757420666f7277617264206163746564207468656972 +1.3.6.1.4.1.2620.1.2.4.2.2.0|4x|4a61646564206f78656e207468656972 +1.3.6.1.4.1.2620.1.2.4.2.3.0|4x|666f72776172642064726976696e6720717561696e746c7920717561696e746c7920627574207a6f6d626965732061637465642064726976696e67204a61646564 +1.3.6.1.4.1.2620.1.2.4.2.4.0|4x|6163746564206b65707420627574206275742062757420717561696e746c7920717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.2.5.2.1.0|4x|7a6f6d62696573207a6f6d62696573207468656972207468656972 +1.3.6.1.4.1.2620.1.2.5.2.2.0|4|kept +1.3.6.1.4.1.2620.1.2.5.2.3.0|4x|7a6f6d6269657320717561696e746c7920627574207468656972204a61646564206b657074 +1.3.6.1.4.1.2620.1.2.5.2.4.0|4x|6f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.2.5.2.5.0|4x|717561696e746c79206275742074686569722064726976696e6720616374656420616374656420666f7277617264 +1.3.6.1.4.1.2620.1.2.5.2.6.0|4x|616374656420627574207468656972204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.2.5.2.7.0|4x|7a6f6d6269657320666f72776172642074686569722064726976696e67 +1.3.6.1.4.1.2620.1.2.5.2.8.0|4x|6f78656e204a6164656420717561696e746c79206f78656e206f78656e20627574206b657074206f78656e207468656972 +1.3.6.1.4.1.2620.1.2.5.2.9.0|4x|7468656972206f78656e206f78656e204a6164656420616374656420717561696e746c79207a6f6d62696573206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.2.5.2.10.0|4x|64726976696e67206f78656e207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.2.5.2.11.0|4x|6275742064726976696e67 +1.3.6.1.4.1.2620.1.2.5.2.12.0|4x|6163746564206275742064726976696e67206163746564206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.2.5.3.1.0|4x|746865697220666f7277617264206163746564204a61646564207a6f6d62696573206b657074204a61646564206f78656e +1.3.6.1.4.1.2620.1.2.5.3.2.0|4x|6b657074206f78656e207468656972206b657074207a6f6d62696573204a616465642064726976696e6720746865697220666f7277617264 +1.3.6.1.4.1.2620.1.2.5.3.3.0|4x|666f72776172642064726976696e6720717561696e746c7920717561696e746c79206b657074206f78656e20666f7277617264206f78656e206b657074 +1.3.6.1.4.1.2620.1.2.5.3.4.0|4|but +1.3.6.1.4.1.2620.1.2.5.3.5.0|4x|666f727761726420616374656420717561696e746c7920666f727761726420666f727761726420666f7277617264206163746564206b657074 +1.3.6.1.4.1.2620.1.2.5.3.6.0|4x|7a6f6d62696573206f78656e2074686569722062757420666f7277617264206b657074207468656972 +1.3.6.1.4.1.2620.1.2.5.3.7.0|4x|7468656972206b657074206b657074 +1.3.6.1.4.1.2620.1.2.5.4.1.0|4|but +1.3.6.1.4.1.2620.1.2.5.4.2.0|4x|746865697220627574206163746564206b65707420666f72776172642064726976696e672064726976696e6720717561696e746c7920627574 +1.3.6.1.4.1.2620.1.2.5.4.3.0|4x|666f727761726420616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.2.5.4.4.0|4x|7a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.2.5.4.5.0|4x|746865697220666f7277617264207468656972207468656972204a61646564 +1.3.6.1.4.1.2620.1.2.5.4.6.0|4x|6b65707420627574207468656972204a61646564206163746564206163746564 +1.3.6.1.4.1.2620.1.2.5.4.7.0|4x|627574207a6f6d62696573206b6570742064726976696e6720717561696e746c79207a6f6d6269657320717561696e746c792064726976696e6720627574 +1.3.6.1.4.1.2620.1.2.5.4.8.0|4x|6275742062757420627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.2.5.4.9.0|4|quaintly +1.3.6.1.4.1.2620.1.2.5.4.10.0|4x|6f78656e2064726976696e6720616374656420616374656420666f7277617264204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.2.5.4.11.0|4x|62757420666f7277617264206f78656e20666f727761726420627574204a61646564 +1.3.6.1.4.1.2620.1.2.5.4.12.0|4x|6b65707420666f7277617264 +1.3.6.1.4.1.2620.1.2.5.4.13.0|4x|6f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.2.5.4.14.0|4x|666f727761726420717561696e746c7920627574206f78656e20717561696e746c79206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.2.5.4.15.0|4x|6f78656e206163746564207a6f6d62696573206f78656e20627574206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.2.5.4.16.0|4x|6f78656e207468656972207a6f6d62696573 +1.3.6.1.4.1.2620.1.2.5.4.17.0|4x|7a6f6d62696573206b657074206b6570742062757420666f7277617264 +1.3.6.1.4.1.2620.1.2.5.4.18.0|4x|7468656972206b65707420627574204a61646564 +1.3.6.1.4.1.2620.1.2.5.4.19.0|4x|4a61646564204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.2.5.4.20.0|4x|6163746564206275742064726976696e67204a61646564207468656972206f78656e207468656972204a61646564 +1.3.6.1.4.1.2620.1.2.6.1.1.0|2|29 +1.3.6.1.4.1.2620.1.2.6.1.2.0|2|2 +1.3.6.1.4.1.2620.1.2.6.1.3.0|2|3 +1.3.6.1.4.1.2620.1.2.6.1.4.0|2|8 +1.3.6.1.4.1.2620.1.2.6.2.1.0|2|31 +1.3.6.1.4.1.2620.1.2.6.2.2.0|2|15 +1.3.6.1.4.1.2620.1.2.6.2.3.0|2|1 +1.3.6.1.4.1.2620.1.2.6.2.4.0|2|18 +1.3.6.1.4.1.2620.1.2.8.1.1.0|4x|616374656420666f727761726420717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.2.8.1.2.0|4x|7a6f6d626965732064726976696e67206b657074 +1.3.6.1.4.1.2620.1.2.8.1.3.0|2|27 +1.3.6.1.4.1.2620.1.2.8.1.4.0|2|10 +1.3.6.1.4.1.2620.1.2.8.2.1.0|4x|746865697220616374656420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.2.8.2.2.0|4x|6163746564207468656972207468656972206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.2.8.2.3.0|4x|666f7277617264204a61646564204a61646564 +1.3.6.1.4.1.2620.1.2.8.2.4.0|4x|64726976696e6720666f72776172642074686569722062757420717561696e746c7920717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.2.8.2.5.0|4x|7a6f6d62696573204a61646564 +1.3.6.1.4.1.2620.1.2.8.2.6.0|4x|627574206f78656e206b657074 +1.3.6.1.4.1.2620.1.2.8.2.7.0|4x|7468656972207468656972206f78656e20666f7277617264206f78656e20627574206b657074 +1.3.6.1.4.1.2620.1.2.8.2.8.0|4x|7a6f6d62696573206b657074206163746564206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.2.9.1.1.0|4x|6f78656e206163746564207a6f6d62696573204a61646564206163746564 +1.3.6.1.4.1.2620.1.2.9.1.2.0|4x|6163746564207a6f6d626965732064726976696e672064726976696e67204a6164656420717561696e746c79206163746564204a61646564 +1.3.6.1.4.1.2620.1.2.9.1.3.0|4|acted +1.3.6.1.4.1.2620.1.2.9.1.4.0|4x|6f78656e206f78656e207a6f6d626965732064726976696e6720717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.2.9.1.5.0|4x|746865697220717561696e746c792064726976696e6720666f727761726420666f7277617264206275742064726976696e6720666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.2.9.1.6.0|4x|616374656420717561696e746c792061637465642064726976696e672064726976696e67206f78656e20717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.2.9.1.7.0|4x|7a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.2.9.1.8.0|4x|616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.2.9.1.9.0|4x|4a6164656420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.2.9.1.10.0|4|forward +1.3.6.1.4.1.2620.1.2.9.1.11.0|4x|6163746564206b657074 +1.3.6.1.4.1.2620.1.2.9.1.12.0|4|forward +1.3.6.1.4.1.2620.1.2.9.2.1.0|4x|4a6164656420717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.1.2.9.2.2.0|4x|6163746564206f78656e20666f7277617264206b65707420616374656420666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.2.9.2.3.0|4x|4a61646564207468656972204a61646564206163746564 +1.3.6.1.4.1.2620.1.2.10.1.1.0|2|24 +1.3.6.1.4.1.2620.1.2.10.1.2.0|4x|6163746564204a616465642064726976696e672061637465642064726976696e67206f78656e206163746564 +1.3.6.1.4.1.2620.1.2.10.1.3.0|4x|4a6164656420746865697220627574206b65707420717561696e746c792062757420666f7277617264206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.2.10.1.4.0|4x|4a6164656420717561696e746c7920627574206b657074204a61646564207468656972207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.2.10.1.5.0|4x|74686569722061637465642062757420666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.2.10.1.6.0|4x|627574206b657074204a61646564 +1.3.6.1.4.1.2620.1.2.10.1.7.0|4x|7a6f6d62696573206163746564206f78656e206163746564207a6f6d62696573206f78656e20666f72776172642064726976696e67206f78656e +1.3.6.1.4.1.2620.1.3.1.0|4x|4a6164656420616374656420746865697220666f72776172642074686569722062757420627574 +1.3.6.1.4.1.2620.1.3.2.0|2|29 +1.3.6.1.4.1.2620.1.3.3.0|2|21 +1.3.6.1.4.1.2620.1.3.4.0|4x|666f727761726420717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.3.5.0|2|7 +1.3.6.1.4.1.2620.1.3.6.0|4x|4a61646564206b65707420627574204a6164656420717561696e746c79204a61646564206f78656e +1.3.6.1.4.1.2620.1.3.7.0|4|acted +1.3.6.1.4.1.2620.1.3.8.0|4x|6f78656e20666f7277617264206275742062757420666f727761726420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.3.9.1.1.6833|66|6833 +1.3.6.1.4.1.2620.1.3.9.1.1.9617|66|9617 +1.3.6.1.4.1.2620.1.3.9.1.1.12777|66|12777 +1.3.6.1.4.1.2620.1.3.9.1.1.21037|66|21037 +1.3.6.1.4.1.2620.1.3.9.1.1.23145|66|23145 +1.3.6.1.4.1.2620.1.3.9.1.1.27759|66|27759 +1.3.6.1.4.1.2620.1.3.9.1.1.40201|66|40201 +1.3.6.1.4.1.2620.1.3.9.1.1.54989|66|54989 +1.3.6.1.4.1.2620.1.3.9.1.1.55318|66|55318 +1.3.6.1.4.1.2620.1.3.9.1.1.57712|66|57712 +1.3.6.1.4.1.2620.1.3.9.1.2.6833|4x|7a6f6d6269657320627574204a616465642062757420666f7277617264204a61646564206f78656e2064726976696e67206b657074 +1.3.6.1.4.1.2620.1.3.9.1.2.9617|4|acted +1.3.6.1.4.1.2620.1.3.9.1.2.12777|4x|627574204a61646564204a6164656420666f727761726420627574206163746564204a61646564 +1.3.6.1.4.1.2620.1.3.9.1.2.21037|4x|62757420666f72776172642064726976696e67204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.3.9.1.2.23145|4x|616374656420717561696e746c79206163746564204a6164656420717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.3.9.1.2.27759|4x|627574206f78656e206275742064726976696e672064726976696e6720666f72776172642061637465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.3.9.1.2.40201|4x|666f7277617264207a6f6d62696573206f78656e2074686569722064726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.3.9.1.2.54989|4|Jaded +1.3.6.1.4.1.2620.1.3.9.1.2.55318|4x|4a6164656420746865697220666f7277617264204a61646564206163746564204a61646564206163746564 +1.3.6.1.4.1.2620.1.3.9.1.2.57712|4x|627574206b65707420717561696e746c7920717561696e746c7920627574 +1.3.6.1.4.1.2620.1.3.9.1.3.6833|4x|7468656972206f78656e204a6164656420627574207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.3.9.1.3.9617|4x|6b657074206f78656e204a6164656420666f727761726420616374656420627574207468656972204a61646564207468656972 +1.3.6.1.4.1.2620.1.3.9.1.3.12777|4x|64726976696e67206b65707420627574206f78656e206f78656e207468656972207468656972 +1.3.6.1.4.1.2620.1.3.9.1.3.21037|4x|6b6570742074686569722074686569722064726976696e67 +1.3.6.1.4.1.2620.1.3.9.1.3.23145|4x|7a6f6d6269657320717561696e746c7920627574 +1.3.6.1.4.1.2620.1.3.9.1.3.27759|4x|74686569722062757420746865697220666f72776172642062757420616374656420627574 +1.3.6.1.4.1.2620.1.3.9.1.3.40201|4x|6f78656e2062757420717561696e746c792064726976696e67206f78656e206b657074 +1.3.6.1.4.1.2620.1.3.9.1.3.54989|4x|627574206f78656e204a61646564207468656972204a61646564206f78656e20627574 +1.3.6.1.4.1.2620.1.3.9.1.3.55318|4|Jaded +1.3.6.1.4.1.2620.1.3.9.1.3.57712|4x|62757420666f727761726420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.3.9.1.4.6833|2|1 +1.3.6.1.4.1.2620.1.3.9.1.4.9617|2|7 +1.3.6.1.4.1.2620.1.3.9.1.4.12777|2|12 +1.3.6.1.4.1.2620.1.3.9.1.4.21037|2|30 +1.3.6.1.4.1.2620.1.3.9.1.4.23145|2|6 +1.3.6.1.4.1.2620.1.3.9.1.4.27759|2|3 +1.3.6.1.4.1.2620.1.3.9.1.4.40201|2|7 +1.3.6.1.4.1.2620.1.3.9.1.4.54989|2|0 +1.3.6.1.4.1.2620.1.3.9.1.4.55318|2|21 +1.3.6.1.4.1.2620.1.3.9.1.4.57712|2|18 +1.3.6.1.4.1.2620.1.3.9.1.5.6833|2|24 +1.3.6.1.4.1.2620.1.3.9.1.5.9617|2|30 +1.3.6.1.4.1.2620.1.3.9.1.5.12777|2|5 +1.3.6.1.4.1.2620.1.3.9.1.5.21037|2|19 +1.3.6.1.4.1.2620.1.3.9.1.5.23145|2|13 +1.3.6.1.4.1.2620.1.3.9.1.5.27759|2|28 +1.3.6.1.4.1.2620.1.3.9.1.5.40201|2|8 +1.3.6.1.4.1.2620.1.3.9.1.5.54989|2|17 +1.3.6.1.4.1.2620.1.3.9.1.5.55318|2|28 +1.3.6.1.4.1.2620.1.3.9.1.5.57712|2|6 +1.3.6.1.4.1.2620.1.3.9.1.6.6833|2|5 +1.3.6.1.4.1.2620.1.3.9.1.6.9617|2|0 +1.3.6.1.4.1.2620.1.3.9.1.6.12777|2|27 +1.3.6.1.4.1.2620.1.3.9.1.6.21037|2|1 +1.3.6.1.4.1.2620.1.3.9.1.6.23145|2|1 +1.3.6.1.4.1.2620.1.3.9.1.6.27759|2|30 +1.3.6.1.4.1.2620.1.3.9.1.6.40201|2|12 +1.3.6.1.4.1.2620.1.3.9.1.6.54989|2|24 +1.3.6.1.4.1.2620.1.3.9.1.6.55318|2|28 +1.3.6.1.4.1.2620.1.3.9.1.6.57712|2|22 +1.3.6.1.4.1.2620.1.3.9.1.7.6833|2|15 +1.3.6.1.4.1.2620.1.3.9.1.7.9617|2|29 +1.3.6.1.4.1.2620.1.3.9.1.7.12777|2|21 +1.3.6.1.4.1.2620.1.3.9.1.7.21037|2|14 +1.3.6.1.4.1.2620.1.3.9.1.7.23145|2|3 +1.3.6.1.4.1.2620.1.3.9.1.7.27759|2|18 +1.3.6.1.4.1.2620.1.3.9.1.7.40201|2|12 +1.3.6.1.4.1.2620.1.3.9.1.7.54989|2|2 +1.3.6.1.4.1.2620.1.3.9.1.7.55318|2|17 +1.3.6.1.4.1.2620.1.3.9.1.7.57712|2|22 +1.3.6.1.4.1.2620.1.3.9.1.8.6833|2|26 +1.3.6.1.4.1.2620.1.3.9.1.8.9617|2|30 +1.3.6.1.4.1.2620.1.3.9.1.8.12777|2|30 +1.3.6.1.4.1.2620.1.3.9.1.8.21037|2|9 +1.3.6.1.4.1.2620.1.3.9.1.8.23145|2|21 +1.3.6.1.4.1.2620.1.3.9.1.8.27759|2|23 +1.3.6.1.4.1.2620.1.3.9.1.8.40201|2|18 +1.3.6.1.4.1.2620.1.3.9.1.8.54989|2|6 +1.3.6.1.4.1.2620.1.3.9.1.8.55318|2|22 +1.3.6.1.4.1.2620.1.3.9.1.8.57712|2|4 +1.3.6.1.4.1.2620.1.3.9.1.9.6833|2|25 +1.3.6.1.4.1.2620.1.3.9.1.9.9617|2|17 +1.3.6.1.4.1.2620.1.3.9.1.9.12777|2|14 +1.3.6.1.4.1.2620.1.3.9.1.9.21037|2|20 +1.3.6.1.4.1.2620.1.3.9.1.9.23145|2|19 +1.3.6.1.4.1.2620.1.3.9.1.9.27759|2|15 +1.3.6.1.4.1.2620.1.3.9.1.9.40201|2|21 +1.3.6.1.4.1.2620.1.3.9.1.9.54989|2|12 +1.3.6.1.4.1.2620.1.3.9.1.9.55318|2|25 +1.3.6.1.4.1.2620.1.3.9.1.9.57712|2|7 +1.3.6.1.4.1.2620.1.3.9.1.10.6833|2|19 +1.3.6.1.4.1.2620.1.3.9.1.10.9617|2|0 +1.3.6.1.4.1.2620.1.3.9.1.10.12777|2|0 +1.3.6.1.4.1.2620.1.3.9.1.10.21037|2|23 +1.3.6.1.4.1.2620.1.3.9.1.10.23145|2|11 +1.3.6.1.4.1.2620.1.3.9.1.10.27759|2|25 +1.3.6.1.4.1.2620.1.3.9.1.10.40201|2|31 +1.3.6.1.4.1.2620.1.3.9.1.10.54989|2|11 +1.3.6.1.4.1.2620.1.3.9.1.10.55318|2|20 +1.3.6.1.4.1.2620.1.3.9.1.10.57712|2|24 +1.3.6.1.4.1.2620.1.3.9.1.11.6833|2|12 +1.3.6.1.4.1.2620.1.3.9.1.11.9617|2|17 +1.3.6.1.4.1.2620.1.3.9.1.11.12777|2|20 +1.3.6.1.4.1.2620.1.3.9.1.11.21037|2|31 +1.3.6.1.4.1.2620.1.3.9.1.11.23145|2|28 +1.3.6.1.4.1.2620.1.3.9.1.11.27759|2|15 +1.3.6.1.4.1.2620.1.3.9.1.11.40201|2|4 +1.3.6.1.4.1.2620.1.3.9.1.11.54989|2|25 +1.3.6.1.4.1.2620.1.3.9.1.11.55318|2|22 +1.3.6.1.4.1.2620.1.3.9.1.11.57712|2|31 +1.3.6.1.4.1.2620.1.3.9.1.12.6833|2|19 +1.3.6.1.4.1.2620.1.3.9.1.12.9617|2|14 +1.3.6.1.4.1.2620.1.3.9.1.12.12777|2|14 +1.3.6.1.4.1.2620.1.3.9.1.12.21037|2|4 +1.3.6.1.4.1.2620.1.3.9.1.12.23145|2|22 +1.3.6.1.4.1.2620.1.3.9.1.12.27759|2|30 +1.3.6.1.4.1.2620.1.3.9.1.12.40201|2|26 +1.3.6.1.4.1.2620.1.3.9.1.12.54989|2|4 +1.3.6.1.4.1.2620.1.3.9.1.12.55318|2|18 +1.3.6.1.4.1.2620.1.3.9.1.12.57712|2|20 +1.3.6.1.4.1.2620.1.3.9.1.13.6833|2|29 +1.3.6.1.4.1.2620.1.3.9.1.13.9617|2|9 +1.3.6.1.4.1.2620.1.3.9.1.13.12777|2|5 +1.3.6.1.4.1.2620.1.3.9.1.13.21037|2|2 +1.3.6.1.4.1.2620.1.3.9.1.13.23145|2|12 +1.3.6.1.4.1.2620.1.3.9.1.13.27759|2|7 +1.3.6.1.4.1.2620.1.3.9.1.13.40201|2|30 +1.3.6.1.4.1.2620.1.3.9.1.13.54989|2|17 +1.3.6.1.4.1.2620.1.3.9.1.13.55318|2|13 +1.3.6.1.4.1.2620.1.3.9.1.13.57712|2|5 +1.3.6.1.4.1.2620.1.3.9.1.14.6833|2|26 +1.3.6.1.4.1.2620.1.3.9.1.14.9617|2|4 +1.3.6.1.4.1.2620.1.3.9.1.14.12777|2|17 +1.3.6.1.4.1.2620.1.3.9.1.14.21037|2|27 +1.3.6.1.4.1.2620.1.3.9.1.14.23145|2|25 +1.3.6.1.4.1.2620.1.3.9.1.14.27759|2|15 +1.3.6.1.4.1.2620.1.3.9.1.14.40201|2|6 +1.3.6.1.4.1.2620.1.3.9.1.14.54989|2|17 +1.3.6.1.4.1.2620.1.3.9.1.14.55318|2|10 +1.3.6.1.4.1.2620.1.3.9.1.14.57712|2|18 +1.3.6.1.4.1.2620.1.3.9.1.15.6833|2|10 +1.3.6.1.4.1.2620.1.3.9.1.15.9617|2|6 +1.3.6.1.4.1.2620.1.3.9.1.15.12777|2|7 +1.3.6.1.4.1.2620.1.3.9.1.15.21037|2|0 +1.3.6.1.4.1.2620.1.3.9.1.15.23145|2|11 +1.3.6.1.4.1.2620.1.3.9.1.15.27759|2|20 +1.3.6.1.4.1.2620.1.3.9.1.15.40201|2|24 +1.3.6.1.4.1.2620.1.3.9.1.15.54989|2|31 +1.3.6.1.4.1.2620.1.3.9.1.15.55318|2|20 +1.3.6.1.4.1.2620.1.3.9.1.15.57712|2|17 +1.3.6.1.4.1.2620.1.5.1.0|4x|7a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.2.0|2|12 +1.3.6.1.4.1.2620.1.5.3.0|2|21 +1.3.6.1.4.1.2620.1.5.4.0|2|22 +1.3.6.1.4.1.2620.1.5.5.0|4x|6f78656e20666f7277617264206163746564206b657074 +1.3.6.1.4.1.2620.1.5.6.0|4x|4a6164656420616374656420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.7.0|4x|4a61646564207468656972206163746564207a6f6d62696573206f78656e206f78656e20717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.5.8.0|2|18 +1.3.6.1.4.1.2620.1.5.10.0|2|3 +1.3.6.1.4.1.2620.1.5.11.0|4|their +1.3.6.1.4.1.2620.1.5.12.1.1.364|66|364 +1.3.6.1.4.1.2620.1.5.12.1.1.7934|66|7934 +1.3.6.1.4.1.2620.1.5.12.1.1.8496|66|8496 +1.3.6.1.4.1.2620.1.5.12.1.1.13428|66|13428 +1.3.6.1.4.1.2620.1.5.12.1.1.15584|66|15584 +1.3.6.1.4.1.2620.1.5.12.1.1.31324|66|31324 +1.3.6.1.4.1.2620.1.5.12.1.1.41779|66|41779 +1.3.6.1.4.1.2620.1.5.12.1.1.42369|66|42369 +1.3.6.1.4.1.2620.1.5.12.1.1.55537|66|55537 +1.3.6.1.4.1.2620.1.5.12.1.1.64077|66|64077 +1.3.6.1.4.1.2620.1.5.12.1.2.364|4|Jaded +1.3.6.1.4.1.2620.1.5.12.1.2.7934|4x|4a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.5.12.1.2.8496|4x|627574204a61646564207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.12.1.2.13428|4x|7a6f6d62696573206b657074206163746564206b657074206275742062757420666f7277617264 +1.3.6.1.4.1.2620.1.5.12.1.2.15584|4x|6163746564207468656972207a6f6d6269657320627574204a6164656420717561696e746c79204a61646564207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.12.1.2.31324|4x|6275742062757420717561696e746c79207468656972206163746564 +1.3.6.1.4.1.2620.1.5.12.1.2.41779|4x|64726976696e672064726976696e672064726976696e67206163746564206f78656e +1.3.6.1.4.1.2620.1.5.12.1.2.42369|4x|6b65707420717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.5.12.1.2.55537|4x|64726976696e67206b657074206f78656e +1.3.6.1.4.1.2620.1.5.12.1.2.64077|4x|6b657074206b657074207a6f6d62696573207a6f6d62696573204a6164656420666f72776172642064726976696e67207468656972 +1.3.6.1.4.1.2620.1.5.12.1.3.364|64x|31b04422 +1.3.6.1.4.1.2620.1.5.12.1.3.7934|64x|273c1ef3 +1.3.6.1.4.1.2620.1.5.12.1.3.8496|64x|669ee0fd +1.3.6.1.4.1.2620.1.5.12.1.3.13428|64x|9c96c1b9 +1.3.6.1.4.1.2620.1.5.12.1.3.15584|64x|7dc191f9 +1.3.6.1.4.1.2620.1.5.12.1.3.31324|64x|f6bc802c +1.3.6.1.4.1.2620.1.5.12.1.3.41779|64x|11e6bf9b +1.3.6.1.4.1.2620.1.5.12.1.3.42369|64x|e23aba6f +1.3.6.1.4.1.2620.1.5.12.1.3.55537|64x|2cd187c7 +1.3.6.1.4.1.2620.1.5.12.1.3.64077|64x|09dc0da2 +1.3.6.1.4.1.2620.1.5.12.1.4.364|4x|616374656420627574207468656972206b657074204a61646564204a61646564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.1.5.12.1.4.7934|4x|666f727761726420717561696e746c79204a61646564207a6f6d62696573207468656972207a6f6d626965732064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.12.1.4.8496|4x|64726976696e67206f78656e20666f7277617264207468656972204a61646564206b657074206f78656e +1.3.6.1.4.1.2620.1.5.12.1.4.13428|4x|64726976696e672061637465642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.12.1.4.15584|4x|616374656420666f727761726420666f727761726420666f7277617264206f78656e20746865697220717561696e746c7920627574206163746564 +1.3.6.1.4.1.2620.1.5.12.1.4.31324|4x|64726976696e67206163746564204a61646564206b65707420627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.12.1.4.41779|4x|666f7277617264206f78656e206f78656e20666f727761726420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.5.12.1.4.42369|4x|6b657074207468656972206b65707420666f72776172642062757420717561696e746c79 +1.3.6.1.4.1.2620.1.5.12.1.4.55537|4|zombies +1.3.6.1.4.1.2620.1.5.12.1.4.64077|4|driving +1.3.6.1.4.1.2620.1.5.12.1.5.364|2|21 +1.3.6.1.4.1.2620.1.5.12.1.5.7934|2|27 +1.3.6.1.4.1.2620.1.5.12.1.5.8496|2|10 +1.3.6.1.4.1.2620.1.5.12.1.5.13428|2|21 +1.3.6.1.4.1.2620.1.5.12.1.5.15584|2|22 +1.3.6.1.4.1.2620.1.5.12.1.5.31324|2|13 +1.3.6.1.4.1.2620.1.5.12.1.5.41779|2|19 +1.3.6.1.4.1.2620.1.5.12.1.5.42369|2|28 +1.3.6.1.4.1.2620.1.5.12.1.5.55537|2|30 +1.3.6.1.4.1.2620.1.5.12.1.5.64077|2|16 +1.3.6.1.4.1.2620.1.5.12.1.6.364|2|16 +1.3.6.1.4.1.2620.1.5.12.1.6.7934|2|24 +1.3.6.1.4.1.2620.1.5.12.1.6.8496|2|23 +1.3.6.1.4.1.2620.1.5.12.1.6.13428|2|10 +1.3.6.1.4.1.2620.1.5.12.1.6.15584|2|6 +1.3.6.1.4.1.2620.1.5.12.1.6.31324|2|17 +1.3.6.1.4.1.2620.1.5.12.1.6.41779|2|16 +1.3.6.1.4.1.2620.1.5.12.1.6.42369|2|28 +1.3.6.1.4.1.2620.1.5.12.1.6.55537|2|18 +1.3.6.1.4.1.2620.1.5.12.1.6.64077|2|28 +1.3.6.1.4.1.2620.1.5.12.1.7.364|2|13 +1.3.6.1.4.1.2620.1.5.12.1.7.7934|2|18 +1.3.6.1.4.1.2620.1.5.12.1.7.8496|2|11 +1.3.6.1.4.1.2620.1.5.12.1.7.13428|2|17 +1.3.6.1.4.1.2620.1.5.12.1.7.15584|2|3 +1.3.6.1.4.1.2620.1.5.12.1.7.31324|2|13 +1.3.6.1.4.1.2620.1.5.12.1.7.41779|2|14 +1.3.6.1.4.1.2620.1.5.12.1.7.42369|2|21 +1.3.6.1.4.1.2620.1.5.12.1.7.55537|2|5 +1.3.6.1.4.1.2620.1.5.12.1.7.64077|2|30 +1.3.6.1.4.1.2620.1.5.13.1.1.2868|2|11 +1.3.6.1.4.1.2620.1.5.13.1.1.5551|2|8 +1.3.6.1.4.1.2620.1.5.13.1.1.16747|2|15 +1.3.6.1.4.1.2620.1.5.13.1.1.20626|2|17 +1.3.6.1.4.1.2620.1.5.13.1.1.24053|2|27 +1.3.6.1.4.1.2620.1.5.13.1.1.24837|2|28 +1.3.6.1.4.1.2620.1.5.13.1.1.31559|2|8 +1.3.6.1.4.1.2620.1.5.13.1.1.32912|2|3 +1.3.6.1.4.1.2620.1.5.13.1.1.32962|2|28 +1.3.6.1.4.1.2620.1.5.13.1.1.34531|2|8 +1.3.6.1.4.1.2620.1.5.13.1.2.2868|4x|666f727761726420717561696e746c7920717561696e746c79206163746564206f78656e20627574206f78656e +1.3.6.1.4.1.2620.1.5.13.1.2.5551|4x|717561696e746c7920717561696e746c79204a61646564 +1.3.6.1.4.1.2620.1.5.13.1.2.16747|4x|666f7277617264206f78656e2062757420627574207468656972 +1.3.6.1.4.1.2620.1.5.13.1.2.20626|4x|6f78656e207468656972206163746564 +1.3.6.1.4.1.2620.1.5.13.1.2.24053|4x|4a6164656420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.13.1.2.24837|4x|7a6f6d62696573206163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.13.1.2.31559|4x|6b657074207a6f6d62696573204a6164656420717561696e746c79204a61646564207a6f6d626965732064726976696e67207468656972 +1.3.6.1.4.1.2620.1.5.13.1.2.32912|4x|7a6f6d62696573207a6f6d626965732064726976696e6720666f7277617264204a616465642064726976696e6720717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.5.13.1.2.32962|4x|4a6164656420666f727761726420666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.5.13.1.2.34531|4x|4a616465642064726976696e67206b657074207a6f6d6269657320616374656420627574 +1.3.6.1.4.1.2620.1.5.13.1.3.2868|4x|717561696e746c7920717561696e746c7920746865697220627574204a61646564204a6164656420627574206f78656e204a61646564 +1.3.6.1.4.1.2620.1.5.13.1.3.5551|4|zombies +1.3.6.1.4.1.2620.1.5.13.1.3.16747|4x|6b6570742062757420746865697220616374656420666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.5.13.1.3.20626|4x|4a61646564204a616465642064726976696e67207a6f6d6269657320627574204a61646564 +1.3.6.1.4.1.2620.1.5.13.1.3.24053|4x|717561696e746c79207468656972206b657074206b657074 +1.3.6.1.4.1.2620.1.5.13.1.3.24837|4x|7a6f6d62696573207a6f6d62696573206b6570742061637465642062757420627574 +1.3.6.1.4.1.2620.1.5.13.1.3.31559|4x|6f78656e20717561696e746c79204a61646564 +1.3.6.1.4.1.2620.1.5.13.1.3.32912|4|quaintly +1.3.6.1.4.1.2620.1.5.13.1.3.32962|4x|6f78656e20627574204a61646564204a616465642062757420627574206163746564 +1.3.6.1.4.1.2620.1.5.13.1.3.34531|4x|6f78656e204a61646564206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.5.13.1.4.2868|2|24 +1.3.6.1.4.1.2620.1.5.13.1.4.5551|2|6 +1.3.6.1.4.1.2620.1.5.13.1.4.16747|2|18 +1.3.6.1.4.1.2620.1.5.13.1.4.20626|2|8 +1.3.6.1.4.1.2620.1.5.13.1.4.24053|2|1 +1.3.6.1.4.1.2620.1.5.13.1.4.24837|2|10 +1.3.6.1.4.1.2620.1.5.13.1.4.31559|2|0 +1.3.6.1.4.1.2620.1.5.13.1.4.32912|2|8 +1.3.6.1.4.1.2620.1.5.13.1.4.32962|2|11 +1.3.6.1.4.1.2620.1.5.13.1.4.34531|2|14 +1.3.6.1.4.1.2620.1.5.13.1.5.2868|2|28 +1.3.6.1.4.1.2620.1.5.13.1.5.5551|2|29 +1.3.6.1.4.1.2620.1.5.13.1.5.16747|2|8 +1.3.6.1.4.1.2620.1.5.13.1.5.20626|2|8 +1.3.6.1.4.1.2620.1.5.13.1.5.24053|2|18 +1.3.6.1.4.1.2620.1.5.13.1.5.24837|2|18 +1.3.6.1.4.1.2620.1.5.13.1.5.31559|2|25 +1.3.6.1.4.1.2620.1.5.13.1.5.32912|2|28 +1.3.6.1.4.1.2620.1.5.13.1.5.32962|2|0 +1.3.6.1.4.1.2620.1.5.13.1.5.34531|2|11 +1.3.6.1.4.1.2620.1.5.13.1.6.2868|4x|7a6f6d62696573206b657074206f78656e +1.3.6.1.4.1.2620.1.5.13.1.6.5551|4x|627574206f78656e206163746564204a6164656420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.5.13.1.6.16747|4x|62757420666f7277617264206163746564206163746564206b657074 +1.3.6.1.4.1.2620.1.5.13.1.6.20626|4x|7468656972207468656972204a61646564 +1.3.6.1.4.1.2620.1.5.13.1.6.24053|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.5.13.1.6.24837|4|but +1.3.6.1.4.1.2620.1.5.13.1.6.31559|4|zombies +1.3.6.1.4.1.2620.1.5.13.1.6.32912|4x|7468656972206163746564207a6f6d62696573204a6164656420627574204a61646564 +1.3.6.1.4.1.2620.1.5.13.1.6.32962|4x|666f72776172642064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.5.13.1.6.34531|4x|666f7277617264206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.14.0|4x|6b65707420717561696e746c792061637465642062757420666f7277617264206f78656e +1.3.6.1.4.1.2620.1.5.15.1.1.995|66|995 +1.3.6.1.4.1.2620.1.5.15.1.1.9585|66|9585 +1.3.6.1.4.1.2620.1.5.15.1.1.14294|66|14294 +1.3.6.1.4.1.2620.1.5.15.1.1.14705|66|14705 +1.3.6.1.4.1.2620.1.5.15.1.1.22335|66|22335 +1.3.6.1.4.1.2620.1.5.15.1.1.25009|66|25009 +1.3.6.1.4.1.2620.1.5.15.1.1.56007|66|56007 +1.3.6.1.4.1.2620.1.5.15.1.1.57014|66|57014 +1.3.6.1.4.1.2620.1.5.15.1.1.60935|66|60935 +1.3.6.1.4.1.2620.1.5.15.1.1.64449|66|64449 +1.3.6.1.4.1.2620.1.5.15.1.2.995|4x|7a6f6d626965732062757420627574204a61646564207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.15.1.2.9585|4x|6f78656e20666f7277617264207468656972206f78656e20666f72776172642062757420717561696e746c79 +1.3.6.1.4.1.2620.1.5.15.1.2.14294|4x|6f78656e206b657074 +1.3.6.1.4.1.2620.1.5.15.1.2.14705|4x|666f7277617264206b657074 +1.3.6.1.4.1.2620.1.5.15.1.2.22335|4x|4a61646564206163746564206163746564204a61646564 +1.3.6.1.4.1.2620.1.5.15.1.2.25009|4x|6275742064726976696e67207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.5.15.1.2.56007|4x|6f78656e20627574206b657074206b657074 +1.3.6.1.4.1.2620.1.5.15.1.2.57014|4x|746865697220666f7277617264206163746564207a6f6d62696573207a6f6d62696573207a6f6d62696573204a61646564 +1.3.6.1.4.1.2620.1.5.15.1.2.60935|4x|666f727761726420666f72776172642064726976696e672064726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.5.15.1.2.64449|4x|6163746564204a61646564206f78656e20627574 +1.3.6.1.4.1.2620.1.5.15.1.3.995|2|12 +1.3.6.1.4.1.2620.1.5.15.1.3.9585|2|28 +1.3.6.1.4.1.2620.1.5.15.1.3.14294|2|31 +1.3.6.1.4.1.2620.1.5.15.1.3.14705|2|17 +1.3.6.1.4.1.2620.1.5.15.1.3.22335|2|8 +1.3.6.1.4.1.2620.1.5.15.1.3.25009|2|24 +1.3.6.1.4.1.2620.1.5.15.1.3.56007|2|6 +1.3.6.1.4.1.2620.1.5.15.1.3.57014|2|19 +1.3.6.1.4.1.2620.1.5.15.1.3.60935|2|6 +1.3.6.1.4.1.2620.1.5.15.1.3.64449|2|26 +1.3.6.1.4.1.2620.1.5.15.1.4.995|2|19 +1.3.6.1.4.1.2620.1.5.15.1.4.9585|2|16 +1.3.6.1.4.1.2620.1.5.15.1.4.14294|2|27 +1.3.6.1.4.1.2620.1.5.15.1.4.14705|2|7 +1.3.6.1.4.1.2620.1.5.15.1.4.22335|2|14 +1.3.6.1.4.1.2620.1.5.15.1.4.25009|2|6 +1.3.6.1.4.1.2620.1.5.15.1.4.56007|2|15 +1.3.6.1.4.1.2620.1.5.15.1.4.57014|2|4 +1.3.6.1.4.1.2620.1.5.15.1.4.60935|2|27 +1.3.6.1.4.1.2620.1.5.15.1.4.64449|2|0 +1.3.6.1.4.1.2620.1.5.15.1.5.995|2|26 +1.3.6.1.4.1.2620.1.5.15.1.5.9585|2|25 +1.3.6.1.4.1.2620.1.5.15.1.5.14294|2|28 +1.3.6.1.4.1.2620.1.5.15.1.5.14705|2|24 +1.3.6.1.4.1.2620.1.5.15.1.5.22335|2|22 +1.3.6.1.4.1.2620.1.5.15.1.5.25009|2|18 +1.3.6.1.4.1.2620.1.5.15.1.5.56007|2|17 +1.3.6.1.4.1.2620.1.5.15.1.5.57014|2|16 +1.3.6.1.4.1.2620.1.5.15.1.5.60935|2|9 +1.3.6.1.4.1.2620.1.5.15.1.5.64449|2|10 +1.3.6.1.4.1.2620.1.5.15.1.6.995|2|20 +1.3.6.1.4.1.2620.1.5.15.1.6.9585|2|6 +1.3.6.1.4.1.2620.1.5.15.1.6.14294|2|12 +1.3.6.1.4.1.2620.1.5.15.1.6.14705|2|18 +1.3.6.1.4.1.2620.1.5.15.1.6.22335|2|10 +1.3.6.1.4.1.2620.1.5.15.1.6.25009|2|13 +1.3.6.1.4.1.2620.1.5.15.1.6.56007|2|6 +1.3.6.1.4.1.2620.1.5.15.1.6.57014|2|14 +1.3.6.1.4.1.2620.1.5.15.1.6.60935|2|27 +1.3.6.1.4.1.2620.1.5.15.1.6.64449|2|23 +1.3.6.1.4.1.2620.1.5.16.1.1.177|66|177 +1.3.6.1.4.1.2620.1.5.16.1.1.26062|66|26062 +1.3.6.1.4.1.2620.1.5.16.1.1.28566|66|28566 +1.3.6.1.4.1.2620.1.5.16.1.1.31355|66|31355 +1.3.6.1.4.1.2620.1.5.16.1.1.31386|66|31386 +1.3.6.1.4.1.2620.1.5.16.1.1.42207|66|42207 +1.3.6.1.4.1.2620.1.5.16.1.1.51551|66|51551 +1.3.6.1.4.1.2620.1.5.16.1.1.53504|66|53504 +1.3.6.1.4.1.2620.1.5.16.1.1.56015|66|56015 +1.3.6.1.4.1.2620.1.5.16.1.1.58546|66|58546 +1.3.6.1.4.1.2620.1.5.16.1.2.177|4x|6f78656e207a6f6d6269657320666f7277617264206f78656e206163746564207468656972204a6164656420746865697220666f7277617264 +1.3.6.1.4.1.2620.1.5.16.1.2.26062|4x|64726976696e67206b65707420616374656420746865697220666f7277617264206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.5.16.1.2.28566|4x|7a6f6d6269657320666f7277617264206f78656e206275742064726976696e6720666f727761726420717561696e746c79207468656972206b657074 +1.3.6.1.4.1.2620.1.5.16.1.2.31355|4x|717561696e746c79206163746564204a61646564 +1.3.6.1.4.1.2620.1.5.16.1.2.31386|4x|666f7277617264207468656972206f78656e2074686569722064726976696e67207468656972 +1.3.6.1.4.1.2620.1.5.16.1.2.42207|4x|627574204a616465642062757420717561696e746c79206f78656e207468656972206163746564204a61646564 +1.3.6.1.4.1.2620.1.5.16.1.2.51551|4x|7a6f6d62696573207a6f6d62696573206b65707420666f727761726420616374656420666f7277617264207468656972206b657074207468656972 +1.3.6.1.4.1.2620.1.5.16.1.2.53504|4|but +1.3.6.1.4.1.2620.1.5.16.1.2.56015|4x|666f727761726420666f7277617264207468656972204a6164656420616374656420666f7277617264 +1.3.6.1.4.1.2620.1.5.16.1.2.58546|4x|7468656972204a61646564 +1.3.6.1.4.1.2620.1.5.16.1.3.177|2|10 +1.3.6.1.4.1.2620.1.5.16.1.3.26062|2|20 +1.3.6.1.4.1.2620.1.5.16.1.3.28566|2|4 +1.3.6.1.4.1.2620.1.5.16.1.3.31355|2|22 +1.3.6.1.4.1.2620.1.5.16.1.3.31386|2|19 +1.3.6.1.4.1.2620.1.5.16.1.3.42207|2|16 +1.3.6.1.4.1.2620.1.5.16.1.3.51551|2|15 +1.3.6.1.4.1.2620.1.5.16.1.3.53504|2|20 +1.3.6.1.4.1.2620.1.5.16.1.3.56015|2|6 +1.3.6.1.4.1.2620.1.5.16.1.3.58546|2|23 +1.3.6.1.4.1.2620.1.5.16.1.4.177|2|9 +1.3.6.1.4.1.2620.1.5.16.1.4.26062|2|6 +1.3.6.1.4.1.2620.1.5.16.1.4.28566|2|9 +1.3.6.1.4.1.2620.1.5.16.1.4.31355|2|12 +1.3.6.1.4.1.2620.1.5.16.1.4.31386|2|1 +1.3.6.1.4.1.2620.1.5.16.1.4.42207|2|12 +1.3.6.1.4.1.2620.1.5.16.1.4.51551|2|15 +1.3.6.1.4.1.2620.1.5.16.1.4.53504|2|17 +1.3.6.1.4.1.2620.1.5.16.1.4.56015|2|29 +1.3.6.1.4.1.2620.1.5.16.1.4.58546|2|6 +1.3.6.1.4.1.2620.1.5.101.0|2|30 +1.3.6.1.4.1.2620.1.5.102.0|4x|7a6f6d62696573206b6570742064726976696e67206f78656e +1.3.6.1.4.1.2620.1.5.103.0|4x|64726976696e6720616374656420717561696e746c79204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.5.999.0|2|13 +1.3.6.1.4.1.2620.1.6.1.0|4|SVN Foundation +1.3.6.1.4.1.2620.1.6.2.0|2|9 +1.3.6.1.4.1.2620.1.6.3.0|2|9 +1.3.6.1.4.1.2620.1.6.4.1.0|4|R80.10 +1.3.6.1.4.1.2620.1.6.4.2.0|66|991310018 +1.3.6.1.4.1.2620.1.6.5.1.0|4|Gaia +1.3.6.1.4.1.2620.1.6.5.2.0|2|2 +1.3.6.1.4.1.2620.1.6.5.3.0|2|6 +1.3.6.1.4.1.2620.1.6.5.7.0|4| +1.3.6.1.4.1.2620.1.6.6.1.1.4626|66|4626 +1.3.6.1.4.1.2620.1.6.6.1.1.6768|66|6768 +1.3.6.1.4.1.2620.1.6.6.1.1.7799|66|7799 +1.3.6.1.4.1.2620.1.6.6.1.1.32942|66|32942 +1.3.6.1.4.1.2620.1.6.6.1.1.36905|66|36905 +1.3.6.1.4.1.2620.1.6.6.1.1.51226|66|51226 +1.3.6.1.4.1.2620.1.6.6.1.1.52662|66|52662 +1.3.6.1.4.1.2620.1.6.6.1.1.54033|66|54033 +1.3.6.1.4.1.2620.1.6.6.1.1.59395|66|59395 +1.3.6.1.4.1.2620.1.6.6.1.1.59973|66|59973 +1.3.6.1.4.1.2620.1.6.6.1.2.4626|64x|5b33e1aa +1.3.6.1.4.1.2620.1.6.6.1.2.6768|64x|3c2e7622 +1.3.6.1.4.1.2620.1.6.6.1.2.7799|64x|a23cde9f +1.3.6.1.4.1.2620.1.6.6.1.2.32942|64x|af1f3854 +1.3.6.1.4.1.2620.1.6.6.1.2.36905|64x|b4075669 +1.3.6.1.4.1.2620.1.6.6.1.2.51226|64x|2e6e5fa4 +1.3.6.1.4.1.2620.1.6.6.1.2.52662|64x|9e92babc +1.3.6.1.4.1.2620.1.6.6.1.2.54033|64x|8d88ec2a +1.3.6.1.4.1.2620.1.6.6.1.2.59395|64x|39fa362e +1.3.6.1.4.1.2620.1.6.6.1.2.59973|64x|3d7b260c +1.3.6.1.4.1.2620.1.6.6.1.3.4626|64x|8bcf22ce +1.3.6.1.4.1.2620.1.6.6.1.3.6768|64x|e1c51fd5 +1.3.6.1.4.1.2620.1.6.6.1.3.7799|64x|3f9e8289 +1.3.6.1.4.1.2620.1.6.6.1.3.32942|64x|4b7c1467 +1.3.6.1.4.1.2620.1.6.6.1.3.36905|64x|b44f72e2 +1.3.6.1.4.1.2620.1.6.6.1.3.51226|64x|716f517c +1.3.6.1.4.1.2620.1.6.6.1.3.52662|64x|8aa98f40 +1.3.6.1.4.1.2620.1.6.6.1.3.54033|64x|85f8f424 +1.3.6.1.4.1.2620.1.6.6.1.3.59395|64x|0a9d659f +1.3.6.1.4.1.2620.1.6.6.1.3.59973|64x|429e0b93 +1.3.6.1.4.1.2620.1.6.6.1.4.4626|64x|157a4864 +1.3.6.1.4.1.2620.1.6.6.1.4.6768|64x|3ec3dddf +1.3.6.1.4.1.2620.1.6.6.1.4.7799|64x|36b79586 +1.3.6.1.4.1.2620.1.6.6.1.4.32942|64x|58ff7cd0 +1.3.6.1.4.1.2620.1.6.6.1.4.36905|64x|28ed11cf +1.3.6.1.4.1.2620.1.6.6.1.4.51226|64x|57080148 +1.3.6.1.4.1.2620.1.6.6.1.4.52662|64x|a665b16f +1.3.6.1.4.1.2620.1.6.6.1.4.54033|64x|143dd6d0 +1.3.6.1.4.1.2620.1.6.6.1.4.59395|64x|9ec3312e +1.3.6.1.4.1.2620.1.6.6.1.4.59973|64x|132b7e13 +1.3.6.1.4.1.2620.1.6.6.1.5.4626|4x|6b657074207468656972206b6570742064726976696e67206275742064726976696e67 +1.3.6.1.4.1.2620.1.6.6.1.5.6768|4|kept +1.3.6.1.4.1.2620.1.6.6.1.5.7799|4x|666f727761726420717561696e746c792064726976696e67204a61646564207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.6.6.1.5.32942|4x|6b657074206b657074206f78656e206163746564206b657074206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.6.6.1.5.36905|4x|62757420746865697220746865697220666f727761726420666f7277617264204a61646564206b65707420627574 +1.3.6.1.4.1.2620.1.6.6.1.5.51226|4x|7a6f6d626965732064726976696e6720666f727761726420717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.6.6.1.5.52662|4x|666f7277617264206f78656e204a61646564 +1.3.6.1.4.1.2620.1.6.6.1.5.54033|4x|64726976696e6720666f727761726420666f7277617264206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.6.6.1.5.59395|4x|627574204a6164656420666f727761726420666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.6.6.1.5.59973|4x|717561696e746c792064726976696e67206f78656e +1.3.6.1.4.1.2620.1.6.7.1.1.0|2|21 +1.3.6.1.4.1.2620.1.6.7.1.2.0|2|15 +1.3.6.1.4.1.2620.1.6.7.1.3.0|2|9 +1.3.6.1.4.1.2620.1.6.7.1.4.0|2|14 +1.3.6.1.4.1.2620.1.6.7.1.5.0|2|23 +1.3.6.1.4.1.2620.1.6.7.1.6.0|2|26 +1.3.6.1.4.1.2620.1.6.7.1.7.0|2|25 +1.3.6.1.4.1.2620.1.6.7.2.1.0|2|29 +1.3.6.1.4.1.2620.1.6.7.2.2.0|2|5 +1.3.6.1.4.1.2620.1.6.7.2.3.0|2|21 +1.3.6.1.4.1.2620.1.6.7.2.4.0|2|21 +1.3.6.1.4.1.2620.1.6.7.2.5.0|2|21 +1.3.6.1.4.1.2620.1.6.7.2.6.0|2|31 +1.3.6.1.4.1.2620.1.6.7.2.7.0|2|16 +1.3.6.1.4.1.2620.1.6.7.3.1.0|2|27 +1.3.6.1.4.1.2620.1.6.7.3.2.0|2|5 +1.3.6.1.4.1.2620.1.6.7.3.3.0|2|9 +1.3.6.1.4.1.2620.1.6.7.3.4.0|4x|666f7277617264207a6f6d62696573206b65707420666f7277617264204a61646564204a61646564206f78656e204a61646564 +1.3.6.1.4.1.2620.1.6.7.3.5.0|4x|64726976696e6720717561696e746c79206163746564207468656972206163746564206f78656e +1.3.6.1.4.1.2620.1.6.7.3.6.0|4x|627574206163746564206163746564206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.6.7.4.1.0|4x|38303030303030303030 +1.3.6.1.4.1.2620.1.6.7.4.2.0|4x|38303030303030303030 +1.3.6.1.4.1.2620.1.6.7.4.3.0|4x|3136303030303030303030 +1.3.6.1.4.1.2620.1.6.7.4.4.0|4x|38303030303030303030 +1.3.6.1.4.1.2620.1.6.7.4.5.0|4|8000000000 +1.3.6.1.4.1.2620.1.6.7.4.6.0|2|7 +1.3.6.1.4.1.2620.1.6.7.4.7.0|2|20 +1.3.6.1.4.1.2620.1.6.7.5.1.1.7097|66|7097 +1.3.6.1.4.1.2620.1.6.7.5.1.1.13039|66|13039 +1.3.6.1.4.1.2620.1.6.7.5.1.1.13761|66|13761 +1.3.6.1.4.1.2620.1.6.7.5.1.1.28994|66|28994 +1.3.6.1.4.1.2620.1.6.7.5.1.1.29751|66|29751 +1.3.6.1.4.1.2620.1.6.7.5.1.1.33826|66|33826 +1.3.6.1.4.1.2620.1.6.7.5.1.1.40053|66|40053 +1.3.6.1.4.1.2620.1.6.7.5.1.1.48847|66|48847 +1.3.6.1.4.1.2620.1.6.7.5.1.1.61593|66|61593 +1.3.6.1.4.1.2620.1.6.7.5.1.1.65044|66|65044 +1.3.6.1.4.1.2620.1.6.7.5.1.2.7097|2|2 +1.3.6.1.4.1.2620.1.6.7.5.1.2.13039|2|2 +1.3.6.1.4.1.2620.1.6.7.5.1.2.13761|2|16 +1.3.6.1.4.1.2620.1.6.7.5.1.2.28994|2|0 +1.3.6.1.4.1.2620.1.6.7.5.1.2.29751|2|25 +1.3.6.1.4.1.2620.1.6.7.5.1.2.33826|2|19 +1.3.6.1.4.1.2620.1.6.7.5.1.2.40053|2|2 +1.3.6.1.4.1.2620.1.6.7.5.1.2.48847|2|5 +1.3.6.1.4.1.2620.1.6.7.5.1.2.61593|2|1 +1.3.6.1.4.1.2620.1.6.7.5.1.2.65044|2|12 +1.3.6.1.4.1.2620.1.6.7.5.1.3.7097|2|6 +1.3.6.1.4.1.2620.1.6.7.5.1.3.13039|2|0 +1.3.6.1.4.1.2620.1.6.7.5.1.3.13761|2|8 +1.3.6.1.4.1.2620.1.6.7.5.1.3.28994|2|29 +1.3.6.1.4.1.2620.1.6.7.5.1.3.29751|2|24 +1.3.6.1.4.1.2620.1.6.7.5.1.3.33826|2|23 +1.3.6.1.4.1.2620.1.6.7.5.1.3.40053|2|5 +1.3.6.1.4.1.2620.1.6.7.5.1.3.48847|2|29 +1.3.6.1.4.1.2620.1.6.7.5.1.3.61593|2|10 +1.3.6.1.4.1.2620.1.6.7.5.1.3.65044|2|24 +1.3.6.1.4.1.2620.1.6.7.5.1.4.7097|2|8 +1.3.6.1.4.1.2620.1.6.7.5.1.4.13039|2|27 +1.3.6.1.4.1.2620.1.6.7.5.1.4.13761|2|7 +1.3.6.1.4.1.2620.1.6.7.5.1.4.28994|2|25 +1.3.6.1.4.1.2620.1.6.7.5.1.4.29751|2|2 +1.3.6.1.4.1.2620.1.6.7.5.1.4.33826|2|27 +1.3.6.1.4.1.2620.1.6.7.5.1.4.40053|2|16 +1.3.6.1.4.1.2620.1.6.7.5.1.4.48847|2|2 +1.3.6.1.4.1.2620.1.6.7.5.1.4.61593|2|23 +1.3.6.1.4.1.2620.1.6.7.5.1.4.65044|2|17 +1.3.6.1.4.1.2620.1.6.7.5.1.5.7097|2|1 +1.3.6.1.4.1.2620.1.6.7.5.1.5.13039|2|6 +1.3.6.1.4.1.2620.1.6.7.5.1.5.13761|2|21 +1.3.6.1.4.1.2620.1.6.7.5.1.5.28994|2|27 +1.3.6.1.4.1.2620.1.6.7.5.1.5.29751|2|1 +1.3.6.1.4.1.2620.1.6.7.5.1.5.33826|2|0 +1.3.6.1.4.1.2620.1.6.7.5.1.5.40053|2|7 +1.3.6.1.4.1.2620.1.6.7.5.1.5.48847|2|7 +1.3.6.1.4.1.2620.1.6.7.5.1.5.61593|2|8 +1.3.6.1.4.1.2620.1.6.7.5.1.5.65044|2|13 +1.3.6.1.4.1.2620.1.6.7.5.1.6.7097|2|29 +1.3.6.1.4.1.2620.1.6.7.5.1.6.13039|2|20 +1.3.6.1.4.1.2620.1.6.7.5.1.6.13761|2|15 +1.3.6.1.4.1.2620.1.6.7.5.1.6.28994|2|8 +1.3.6.1.4.1.2620.1.6.7.5.1.6.29751|2|18 +1.3.6.1.4.1.2620.1.6.7.5.1.6.33826|2|14 +1.3.6.1.4.1.2620.1.6.7.5.1.6.40053|2|15 +1.3.6.1.4.1.2620.1.6.7.5.1.6.48847|2|26 +1.3.6.1.4.1.2620.1.6.7.5.1.6.61593|2|17 +1.3.6.1.4.1.2620.1.6.7.5.1.6.65044|2|13 +1.3.6.1.4.1.2620.1.6.7.5.1.7.7097|2|19 +1.3.6.1.4.1.2620.1.6.7.5.1.7.13039|2|24 +1.3.6.1.4.1.2620.1.6.7.5.1.7.13761|2|3 +1.3.6.1.4.1.2620.1.6.7.5.1.7.28994|2|22 +1.3.6.1.4.1.2620.1.6.7.5.1.7.29751|2|3 +1.3.6.1.4.1.2620.1.6.7.5.1.7.33826|2|12 +1.3.6.1.4.1.2620.1.6.7.5.1.7.40053|2|4 +1.3.6.1.4.1.2620.1.6.7.5.1.7.48847|2|24 +1.3.6.1.4.1.2620.1.6.7.5.1.7.61593|2|2 +1.3.6.1.4.1.2620.1.6.7.5.1.7.65044|2|3 +1.3.6.1.4.1.2620.1.6.7.6.1.1.0|66|0 +1.3.6.1.4.1.2620.1.6.7.6.1.1.1|66|1 +1.3.6.1.4.1.2620.1.6.7.6.1.1.2|66|2 +1.3.6.1.4.1.2620.1.6.7.6.1.1.3|66|3 +1.3.6.1.4.1.2620.1.6.7.6.1.1.4|66|4 +1.3.6.1.4.1.2620.1.6.7.6.1.1.5|66|5 +1.3.6.1.4.1.2620.1.6.7.6.1.1.6|66|6 +1.3.6.1.4.1.2620.1.6.7.6.1.1.7|66|7 +1.3.6.1.4.1.2620.1.6.7.6.1.1.8|66|8 +1.3.6.1.4.1.2620.1.6.7.6.1.1.9|66|9 +1.3.6.1.4.1.2620.1.6.7.6.1.2.0|4|first +1.3.6.1.4.1.2620.1.6.7.6.1.2.1|4|second +1.3.6.1.4.1.2620.1.6.7.6.1.2.2|4|third +1.3.6.1.4.1.2620.1.6.7.6.1.2.3|4|fourth +1.3.6.1.4.1.2620.1.6.7.6.1.2.4|4|fifth +1.3.6.1.4.1.2620.1.6.7.6.1.2.5|4|sixth +1.3.6.1.4.1.2620.1.6.7.6.1.2.6|4|seventh +1.3.6.1.4.1.2620.1.6.7.6.1.2.7|4|eighth +1.3.6.1.4.1.2620.1.6.7.6.1.2.8|4|ninth +1.3.6.1.4.1.2620.1.6.7.6.1.2.9|4|tenth +1.3.6.1.4.1.2620.1.6.7.6.1.3.0|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.3.1|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.3.2|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.3.3|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.3.4|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.3.5|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.3.6|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.3.7|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.3.8|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.3.9|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.0|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.1|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.2|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.3|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.4|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.5|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.6|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.7|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.8|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.9|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.0|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.1|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.2|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.3|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.4|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.5|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.6|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.7|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.8|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.9|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.6.0|2|31 +1.3.6.1.4.1.2620.1.6.7.6.1.6.1|2|3 +1.3.6.1.4.1.2620.1.6.7.6.1.6.2|2|28 +1.3.6.1.4.1.2620.1.6.7.6.1.6.3|2|3 +1.3.6.1.4.1.2620.1.6.7.6.1.6.4|2|12 +1.3.6.1.4.1.2620.1.6.7.6.1.6.5|2|19 +1.3.6.1.4.1.2620.1.6.7.6.1.6.6|2|16 +1.3.6.1.4.1.2620.1.6.7.6.1.6.7|2|31 +1.3.6.1.4.1.2620.1.6.7.6.1.6.8|2|23 +1.3.6.1.4.1.2620.1.6.7.6.1.6.9|2|1 +1.3.6.1.4.1.2620.1.6.7.6.1.7.0|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.7.1|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.7.2|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.7.3|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.7.4|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.7.5|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.7.6|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.7.7|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.7.8|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.7.9|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.8.0|2|18 +1.3.6.1.4.1.2620.1.6.7.6.1.8.1|2|14 +1.3.6.1.4.1.2620.1.6.7.6.1.8.2|2|8 +1.3.6.1.4.1.2620.1.6.7.6.1.8.3|2|6 +1.3.6.1.4.1.2620.1.6.7.6.1.8.4|2|24 +1.3.6.1.4.1.2620.1.6.7.6.1.8.5|2|18 +1.3.6.1.4.1.2620.1.6.7.6.1.8.6|2|23 +1.3.6.1.4.1.2620.1.6.7.6.1.8.7|2|15 +1.3.6.1.4.1.2620.1.6.7.6.1.8.8|2|13 +1.3.6.1.4.1.2620.1.6.7.6.1.8.9|2|5 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.882|66|882 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.8345|66|8345 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.14773|66|14773 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.42475|66|42475 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.42661|66|42661 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.43784|66|43784 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.45792|66|45792 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.56965|66|56965 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.59227|66|59227 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.62700|66|62700 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.882|2|24 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.8345|2|30 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.14773|2|29 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.42475|2|1 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.42661|2|27 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.43784|2|2 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.45792|2|10 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.56965|2|3 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.59227|2|2 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.62700|2|8 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.882|2|1 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.8345|2|0 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.14773|2|11 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.42475|2|4 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.42661|2|13 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.43784|2|29 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.45792|2|26 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.56965|2|5 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.59227|2|19 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.62700|2|22 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.882|2|23 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.8345|2|23 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.14773|2|29 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.42475|2|6 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.42661|2|5 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.43784|2|12 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.45792|2|31 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.56965|2|7 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.59227|2|21 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.62700|2|2 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.882|2|16 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.8345|2|2 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.14773|2|7 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.42475|2|19 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.42661|2|12 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.43784|2|10 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.45792|2|6 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.56965|2|14 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.59227|2|18 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.62700|2|10 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.882|2|11 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.8345|2|4 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.14773|2|6 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.42475|2|8 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.42661|2|12 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.43784|2|27 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.45792|2|6 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.56965|2|0 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.59227|2|18 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.62700|2|30 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.882|2|8 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.8345|2|0 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.14773|2|24 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.42475|2|1 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.42661|2|11 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.43784|2|29 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.45792|2|29 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.56965|2|9 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.59227|2|25 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.62700|2|3 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.882|2|1 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.8345|2|9 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.14773|2|26 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.42475|2|1 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.42661|2|16 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.43784|2|27 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.45792|2|20 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.56965|2|30 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.59227|2|19 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.62700|2|28 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.23494|66|23494 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.25142|66|25142 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.30106|66|30106 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.34744|66|34744 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.34861|66|34861 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.45301|66|45301 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.50802|66|50802 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.54447|66|54447 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.54672|66|54672 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.54751|66|54751 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.23494|2|28 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.25142|2|17 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.30106|2|1 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.34744|2|4 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.34861|2|26 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.45301|2|4 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.50802|2|30 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.54447|2|6 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.54672|2|9 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.54751|2|2 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.23494|2|17 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.25142|2|26 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.30106|2|31 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.34744|2|29 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.34861|2|16 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.45301|2|30 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.50802|2|25 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.54447|2|23 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.54672|2|19 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.54751|2|0 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.23494|2|6 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.25142|2|15 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.30106|2|1 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.34744|2|16 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.34861|2|26 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.45301|2|29 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.50802|2|16 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.54447|2|6 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.54672|2|18 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.54751|2|18 +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.23494|4x|64726976696e67207468656972204a6164656420746865697220717561696e746c79206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.25142|4|their +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.30106|4x|4a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.34744|4x|4a61646564207a6f6d6269657320666f7277617264206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.34861|4x|7468656972204a6164656420627574 +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.45301|4x|4a61646564204a6164656420627574206f78656e206f78656e +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.50802|4x|666f7277617264204a61646564206163746564206b65707420717561696e746c7920666f72776172642062757420627574 +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.54447|4x|6163746564206b657074206163746564206275742064726976696e67206b657074206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.54672|4x|6275742064726976696e6720627574207a6f6d6269657320746865697220666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.54751|4x|6f78656e20627574 +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.23494|4x|4a6164656420717561696e746c79206275742064726976696e67207a6f6d62696573207a6f6d6269657320746865697220627574 +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.25142|4x|746865697220717561696e746c7920666f72776172642064726976696e67206f78656e206f78656e +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.30106|4x|74686569722074686569722062757420666f7277617264206b657074204a61646564207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.34744|4x|4a6164656420666f7277617264206b657074206f78656e204a6164656420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.34861|4|acted +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.45301|4x|7468656972206b6570742064726976696e6720627574 +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.50802|4x|7a6f6d626965732064726976696e6720627574206b657074 +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.54447|4x|7468656972206f78656e206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.54672|4x|717561696e746c79206b65707420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.54751|4x|74686569722064726976696e6720616374656420627574204a616465642064726976696e6720627574206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.23494|4x|7a6f6d62696573207a6f6d62696573206b657074206b65707420717561696e746c79207468656972207468656972 +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.25142|4x|7a6f6d6269657320746865697220627574206f78656e20666f7277617264206b657074206f78656e +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.30106|4x|6b6570742062757420616374656420717561696e746c7920717561696e746c79206163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.34744|4x|666f727761726420717561696e746c79206f78656e206f78656e20627574206275742064726976696e67204a61646564 +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.34861|4x|6b65707420717561696e746c79206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.45301|4x|7a6f6d6269657320666f7277617264206b657074206b657074 +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.50802|4x|627574207a6f6d62696573206b657074207468656972206b65707420627574204a6164656420627574 +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.54447|4|oxen +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.54672|4x|717561696e746c79204a6164656420717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.54751|4x|7468656972206f78656e +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.23494|2|22 +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.25142|2|23 +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.30106|2|1 +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.34744|2|31 +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.34861|2|12 +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.45301|2|27 +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.50802|2|5 +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.54447|2|4 +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.54672|2|9 +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.54751|2|26 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.23494|2|16 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.25142|2|11 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.30106|2|2 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.34744|2|26 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.34861|2|3 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.45301|2|9 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.50802|2|4 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.54447|2|0 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.54672|2|9 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.54751|2|31 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.23494|2|16 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.25142|2|30 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.30106|2|4 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.34744|2|2 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.34861|2|3 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.45301|2|5 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.50802|2|6 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.54447|2|2 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.54672|2|13 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.54751|2|20 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.23494|2|17 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.25142|2|13 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.30106|2|0 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.34744|2|7 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.34861|2|28 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.45301|2|18 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.50802|2|21 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.54447|2|19 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.54672|2|18 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.54751|2|21 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.23494|2|2 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.25142|2|21 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.30106|2|0 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.34744|2|26 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.34861|2|10 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.45301|2|21 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.50802|2|31 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.54447|2|9 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.54672|2|28 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.54751|2|18 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.0|66|0 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.1|66|1 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.2|66|2 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.3|66|3 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.4|66|4 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.5|66|5 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.6|66|6 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.7|66|7 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.8|66|8 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.9|66|9 +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.0|4|first +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.1|4|second +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.2|4|third +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.3|4|fourth +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.4|4|fifth +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.5|4|sixth +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.6|4|seventh +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.7|4|eighth +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.8|4|ninth +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.9|4|tenth +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.0|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.1|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.2|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.3|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.4|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.5|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.6|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.7|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.8|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.9|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.0|4x|666f7277617264207a6f6d62696573207468656972206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.1|4x|666f727761726420627574206f78656e206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.2|4x|6b657074207468656972206b657074206f78656e207a6f6d62696573204a6164656420616374656420627574206f78656e +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.3|4x|6163746564206b65707420717561696e746c79206275742064726976696e6720717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.4|4x|7a6f6d6269657320717561696e746c79206b657074204a61646564206f78656e2074686569722064726976696e672064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.5|4|but +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.6|4x|666f7277617264207468656972 +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.7|4x|62757420746865697220746865697220717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.8|4x|74686569722061637465642062757420717561696e746c79206f78656e20627574 +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.9|4x|61637465642064726976696e6720717561696e746c792064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.0|4x|4a616465642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.1|4x|746865697220666f7277617264206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.2|4x|6f78656e204a61646564207468656972206163746564 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.3|4x|6b65707420717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.4|4x|746865697220666f7277617264206b65707420746865697220746865697220627574 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.5|4x|64726976696e672062757420666f7277617264206b657074207a6f6d62696573206b6570742064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.6|4x|666f727761726420717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.7|4x|6163746564206f78656e204a61646564 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.8|4x|6b657074204a61646564207468656972207a6f6d62696573206b657074204a61646564206163746564 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.9|4x|6b6570742064726976696e67206f78656e206275742062757420627574206b657074204a61646564 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.0|2|9 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.1|2|31 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.2|2|22 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.3|2|25 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.4|2|20 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.5|2|9 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.6|2|11 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.7|2|18 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.8|2|30 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.9|2|6 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.0|66|0 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.1|66|1 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.2|66|2 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.3|66|3 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.4|66|4 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.5|66|5 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.6|66|6 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.7|66|7 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.8|66|8 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.9|66|9 +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.0|4|first +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.1|4|second +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.2|4|third +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.3|4|fourth +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.4|4|fifth +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.5|4|sixth +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.6|4|seventh +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.7|4|eighth +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.8|4|ninth +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.9|4|tenth +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.0|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.1|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.2|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.3|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.4|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.5|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.6|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.7|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.8|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.9|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.0|4x|6163746564206f78656e20627574206f78656e206b657074207468656972204a61646564207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.1|4x|616374656420627574 +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.2|4x|666f7277617264206163746564206f78656e +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.3|4|kept +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.4|4|Jaded +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.5|4x|627574206b65707420666f72776172642064726976696e672064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.6|4x|627574206f78656e206163746564 +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.7|4x|64726976696e67206f78656e +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.8|4x|746865697220717561696e746c79206b6570742064726976696e67206163746564207a6f6d62696573206b657074207a6f6d62696573204a61646564 +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.9|4x|7a6f6d626965732064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.0|4x|6163746564207a6f6d62696573206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.1|4|their +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.2|4x|7468656972207a6f6d62696573207a6f6d626965732064726976696e67206163746564206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.3|4x|7468656972207468656972207468656972206b657074 +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.4|4x|627574206163746564206163746564 +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.5|4x|4a6164656420717561696e746c79 +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.6|4x|616374656420627574204a61646564 +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.7|4x|64726976696e67204a61646564 +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.8|4x|6b657074207468656972206163746564207468656972207a6f6d62696573207a6f6d62696573206b6570742061637465642064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.9|4|but +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.0|2|27 +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.1|2|17 +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.2|2|6 +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.3|2|4 +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.4|2|29 +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.5|2|1 +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.6|2|1 +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.7|2|7 +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.8|2|28 +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.9|2|1 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.6140|66|6140 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.11728|66|11728 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.22397|66|22397 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.22594|66|22594 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.44543|66|44543 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.45508|66|45508 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.47879|66|47879 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.53788|66|53788 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.60442|66|60442 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.65407|66|65407 +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.6140|4x|6f78656e20627574206b657074 +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.11728|4|oxen +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.22397|4x|7a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.22594|4x|4a6164656420627574206163746564206b657074206b657074207a6f6d62696573204a61646564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.44543|4x|64726976696e67204a6164656420666f7277617264204a6164656420627574206f78656e206f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.45508|4x|4a61646564206b65707420717561696e746c79206163746564206163746564 +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.47879|4x|6275742064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.53788|4x|7a6f6d6269657320627574207468656972204a61646564207a6f6d62696573204a6164656420616374656420627574 +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.60442|4x|7468656972206b657074206b657074204a61646564207a6f6d62696573206b65707420627574206163746564 +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.65407|4x|6275742064726976696e67206163746564206163746564204a61646564206163746564 +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.6140|4x|627574206b657074206b65707420746865697220746865697220717561696e746c7920717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.11728|4x|6b6570742064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.22397|4x|64726976696e67204a61646564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.22594|4x|717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.44543|4x|6163746564207a6f6d62696573206b657074206b657074207a6f6d62696573204a61646564 +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.45508|4x|74686569722064726976696e672064726976696e67206b657074 +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.47879|4x|64726976696e67206163746564207a6f6d6269657320717561696e746c7920717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.53788|4x|666f7277617264204a61646564206163746564 +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.60442|4x|717561696e746c79206f78656e20717561696e746c79204a61646564206163746564204a61646564 +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.65407|4x|64726976696e67206b65707420746865697220627574207a6f6d62696573204a61646564206f78656e20666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.6140|4|acted +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.11728|4x|64726976696e67207a6f6d62696573206b657074206f78656e206163746564 +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.22397|4x|6f78656e20717561696e746c79206275742064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.22594|4x|666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.44543|4x|666f7277617264204a6164656420627574204a61646564204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.45508|4x|64726976696e67206b657074207a6f6d626965732061637465642074686569722064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.47879|4x|64726976696e672064726976696e67204a6164656420616374656420717561696e746c7920627574 +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.53788|4x|6b6570742064726976696e67206b65707420717561696e746c79204a6164656420627574206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.60442|4x|64726976696e672064726976696e67207a6f6d6269657320746865697220717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.65407|4x|6275742064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.6140|4x|746865697220666f72776172642074686569722064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.11728|4x|6f78656e2064726976696e6720666f7277617264206b657074206f78656e204a61646564 +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.22397|4|their +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.22594|4x|666f7277617264206f78656e206b6570742064726976696e67206f78656e204a616465642064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.44543|4x|6f78656e20627574206f78656e +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.45508|4x|666f7277617264207a6f6d62696573207a6f6d62696573207468656972206b657074 +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.47879|4x|7a6f6d62696573206163746564207a6f6d62696573204a6164656420666f72776172642064726976696e67207a6f6d626965732074686569722064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.53788|4|Jaded +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.60442|4x|717561696e746c79206f78656e20666f72776172642064726976696e67206b657074207a6f6d62696573206163746564206f78656e20627574 +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.65407|4x|6163746564207a6f6d626965732064726976696e672061637465642074686569722062757420627574206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.6140|2|9 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.11728|2|31 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.22397|2|13 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.22594|2|4 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.44543|2|20 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.45508|2|11 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.47879|2|16 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.53788|2|10 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.60442|2|16 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.65407|2|8 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.10601|66|10601 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.10959|66|10959 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.12120|66|12120 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.17422|66|17422 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.18052|66|18052 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.22579|66|22579 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.42492|66|42492 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.49819|66|49819 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.52641|66|52641 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.53889|66|53889 +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.10601|4|forward +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.10959|4|but +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.12120|4|acted +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.17422|4x|7a6f6d6269657320627574207a6f6d6269657320627574206163746564207468656972 +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.18052|4x|4a6164656420666f727761726420666f7277617264206b6570742062757420666f7277617264 +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.22579|4x|6f78656e206b6570742064726976696e67206f78656e207468656972 +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.42492|4x|6f78656e20616374656420627574204a61646564 +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.49819|4x|6163746564206f78656e2062757420666f7277617264 +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.52641|4x|4a6164656420717561696e746c79206b657074204a61646564206163746564206f78656e20616374656420627574 +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.53889|4x|627574207a6f6d6269657320717561696e746c79206f78656e20717561696e746c7920717561696e746c79207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.6.8.0|2|2 +1.3.6.1.4.1.2620.1.6.9.2.0|64x|eba02a17 +1.3.6.1.4.1.2620.1.6.9.3.0|64x|7507646f +1.3.6.1.4.1.2620.1.6.9.4.0|64x|e6a80b6a +1.3.6.1.4.1.2620.1.6.9.5.0|2|16 +1.3.6.1.4.1.2620.1.6.9.6.0|4x|6f78656e207a6f6d62696573204a6164656420717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.6.9.10.0|2|2 +1.3.6.1.4.1.2620.1.6.10.0|2|2 +1.3.6.1.4.1.2620.1.6.11.1.0|4|quaintly +1.3.6.1.4.1.2620.1.6.12.0|2|5 +1.3.6.1.4.1.2620.1.6.13.0|4x|7a6f6d62696573206f78656e20717561696e746c7920627574204a61646564206163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.15.0|2|2 +1.3.6.1.4.1.2620.1.6.16.3.0|4|1711BA4008 +1.3.6.1.4.1.2620.1.6.16.7.0|4|Check Point 3200 +1.3.6.1.4.1.2620.1.6.16.9.0|4|CheckPoint +1.3.6.1.4.1.2620.1.6.16.10.0|4|3000 Appliance +1.3.6.1.4.1.2620.1.6.50.1.1.1.566|66|566 +1.3.6.1.4.1.2620.1.6.50.1.1.1.3111|66|3111 +1.3.6.1.4.1.2620.1.6.50.1.1.1.6288|66|6288 +1.3.6.1.4.1.2620.1.6.50.1.1.1.6428|66|6428 +1.3.6.1.4.1.2620.1.6.50.1.1.1.17910|66|17910 +1.3.6.1.4.1.2620.1.6.50.1.1.1.28229|66|28229 +1.3.6.1.4.1.2620.1.6.50.1.1.1.33908|66|33908 +1.3.6.1.4.1.2620.1.6.50.1.1.1.34796|66|34796 +1.3.6.1.4.1.2620.1.6.50.1.1.1.52824|66|52824 +1.3.6.1.4.1.2620.1.6.50.1.1.1.63804|66|63804 +1.3.6.1.4.1.2620.1.6.50.1.1.2.566|2|13 +1.3.6.1.4.1.2620.1.6.50.1.1.2.3111|2|20 +1.3.6.1.4.1.2620.1.6.50.1.1.2.6288|2|15 +1.3.6.1.4.1.2620.1.6.50.1.1.2.6428|2|28 +1.3.6.1.4.1.2620.1.6.50.1.1.2.17910|2|12 +1.3.6.1.4.1.2620.1.6.50.1.1.2.28229|2|24 +1.3.6.1.4.1.2620.1.6.50.1.1.2.33908|2|12 +1.3.6.1.4.1.2620.1.6.50.1.1.2.34796|2|5 +1.3.6.1.4.1.2620.1.6.50.1.1.2.52824|2|22 +1.3.6.1.4.1.2620.1.6.50.1.1.2.63804|2|6 +1.3.6.1.4.1.2620.1.6.50.1.1.3.566|4x|4a6164656420666f7277617264204a61646564206f78656e20746865697220666f72776172642064726976696e67 +1.3.6.1.4.1.2620.1.6.50.1.1.3.3111|4x|6163746564206f78656e20717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.6.50.1.1.3.6288|4x|64726976696e672061637465642061637465642064726976696e67206f78656e20666f7277617264206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.6.50.1.1.3.6428|4x|616374656420717561696e746c792064726976696e67207a6f6d62696573206f78656e20627574 +1.3.6.1.4.1.2620.1.6.50.1.1.3.17910|4x|4a61646564204a61646564206f78656e +1.3.6.1.4.1.2620.1.6.50.1.1.3.28229|4x|7a6f6d62696573206b657074206b657074206275742064726976696e67 +1.3.6.1.4.1.2620.1.6.50.1.1.3.33908|4x|6b657074206f78656e204a61646564 +1.3.6.1.4.1.2620.1.6.50.1.1.3.34796|4x|64726976696e6720627574206f78656e2064726976696e6720666f7277617264206f78656e206f78656e +1.3.6.1.4.1.2620.1.6.50.1.1.3.52824|4x|7a6f6d62696573206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.6.50.1.1.3.63804|4x|616374656420746865697220717561696e746c792064726976696e6720717561696e746c79204a61646564 +1.3.6.1.4.1.2620.1.6.50.1.1.4.566|64x|beb85226 +1.3.6.1.4.1.2620.1.6.50.1.1.4.3111|64x|ecea0df3 +1.3.6.1.4.1.2620.1.6.50.1.1.4.6288|64x|1f6a2bf9 +1.3.6.1.4.1.2620.1.6.50.1.1.4.6428|64x|332978a4 +1.3.6.1.4.1.2620.1.6.50.1.1.4.17910|64x|9571b866 +1.3.6.1.4.1.2620.1.6.50.1.1.4.28229|64x|2088a003 +1.3.6.1.4.1.2620.1.6.50.1.1.4.33908|64x|4265a81f +1.3.6.1.4.1.2620.1.6.50.1.1.4.34796|64x|7bfb79b5 +1.3.6.1.4.1.2620.1.6.50.1.1.4.52824|64x|7e06453b +1.3.6.1.4.1.2620.1.6.50.1.1.4.63804|64x|7edf34de +1.3.6.1.4.1.2620.1.6.50.1.1.5.566|64x|505d0e07 +1.3.6.1.4.1.2620.1.6.50.1.1.5.3111|64x|f744d059 +1.3.6.1.4.1.2620.1.6.50.1.1.5.6288|64x|43bb17ad +1.3.6.1.4.1.2620.1.6.50.1.1.5.6428|64x|d78aa43c +1.3.6.1.4.1.2620.1.6.50.1.1.5.17910|64x|0b66bfd8 +1.3.6.1.4.1.2620.1.6.50.1.1.5.28229|64x|4dde8483 +1.3.6.1.4.1.2620.1.6.50.1.1.5.33908|64x|2a3fd155 +1.3.6.1.4.1.2620.1.6.50.1.1.5.34796|64x|6d951b27 +1.3.6.1.4.1.2620.1.6.50.1.1.5.52824|64x|96ea84dc +1.3.6.1.4.1.2620.1.6.50.1.1.5.63804|64x|bffa5e23 +1.3.6.1.4.1.2620.1.6.50.1.1.6.566|2|8 +1.3.6.1.4.1.2620.1.6.50.1.1.6.3111|2|4 +1.3.6.1.4.1.2620.1.6.50.1.1.6.6288|2|4 +1.3.6.1.4.1.2620.1.6.50.1.1.6.6428|2|23 +1.3.6.1.4.1.2620.1.6.50.1.1.6.17910|2|9 +1.3.6.1.4.1.2620.1.6.50.1.1.6.28229|2|31 +1.3.6.1.4.1.2620.1.6.50.1.1.6.33908|2|28 +1.3.6.1.4.1.2620.1.6.50.1.1.6.34796|2|20 +1.3.6.1.4.1.2620.1.6.50.1.1.6.52824|2|18 +1.3.6.1.4.1.2620.1.6.50.1.1.6.63804|2|17 +1.3.6.1.4.1.2620.1.6.50.1.1.7.566|2|10 +1.3.6.1.4.1.2620.1.6.50.1.1.7.3111|2|29 +1.3.6.1.4.1.2620.1.6.50.1.1.7.6288|2|18 +1.3.6.1.4.1.2620.1.6.50.1.1.7.6428|2|14 +1.3.6.1.4.1.2620.1.6.50.1.1.7.17910|2|14 +1.3.6.1.4.1.2620.1.6.50.1.1.7.28229|2|21 +1.3.6.1.4.1.2620.1.6.50.1.1.7.33908|2|5 +1.3.6.1.4.1.2620.1.6.50.1.1.7.34796|2|28 +1.3.6.1.4.1.2620.1.6.50.1.1.7.52824|2|16 +1.3.6.1.4.1.2620.1.6.50.1.1.7.63804|2|19 +1.3.6.1.4.1.2620.1.6.50.1.1.8.566|4x|4a61646564206f78656e20746865697220717561696e746c792064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.50.1.1.8.3111|4x|64726976696e67206f78656e +1.3.6.1.4.1.2620.1.6.50.1.1.8.6288|4x|6b657074204a6164656420717561696e746c79206b65707420746865697220666f7277617264 +1.3.6.1.4.1.2620.1.6.50.1.1.8.6428|4x|666f7277617264207468656972206b657074206b6570742064726976696e67206163746564 +1.3.6.1.4.1.2620.1.6.50.1.1.8.17910|4x|4a61646564204a61646564204a6164656420717561696e746c79206f78656e204a6164656420666f727761726420627574 +1.3.6.1.4.1.2620.1.6.50.1.1.8.28229|4x|717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.6.50.1.1.8.33908|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.6.50.1.1.8.34796|4x|666f72776172642064726976696e67 +1.3.6.1.4.1.2620.1.6.50.1.1.8.52824|4x|717561696e746c79204a61646564206f78656e206b657074206b657074207468656972 +1.3.6.1.4.1.2620.1.6.50.1.1.8.63804|4x|7a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.6.50.1.1.9.566|4x|717561696e746c792064726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.6.50.1.1.9.3111|4x|7a6f6d6269657320666f727761726420616374656420717561696e746c79207a6f6d6269657320717561696e746c792064726976696e67206b657074 +1.3.6.1.4.1.2620.1.6.50.1.1.9.6288|4x|6b657074206b657074204a616465642062757420666f727761726420717561696e746c79204a61646564207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.50.1.1.9.6428|4x|717561696e746c79206163746564206163746564206f78656e2061637465642074686569722064726976696e67204a61646564 +1.3.6.1.4.1.2620.1.6.50.1.1.9.17910|4x|627574207468656972207468656972206f78656e2064726976696e67206f78656e +1.3.6.1.4.1.2620.1.6.50.1.1.9.28229|4x|61637465642061637465642074686569722064726976696e67204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.6.50.1.1.9.33908|4x|64726976696e672064726976696e6720746865697220616374656420627574207a6f6d62696573207468656972206f78656e206f78656e +1.3.6.1.4.1.2620.1.6.50.1.1.9.34796|4|kept +1.3.6.1.4.1.2620.1.6.50.1.1.9.52824|4x|4a61646564206163746564206b65707420627574206b657074206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.50.1.1.9.63804|4x|666f7277617264206f78656e207a6f6d62696573206b657074207468656972207468656972204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.6.50.1.1.10.566|2|17 +1.3.6.1.4.1.2620.1.6.50.1.1.10.3111|2|14 +1.3.6.1.4.1.2620.1.6.50.1.1.10.6288|2|4 +1.3.6.1.4.1.2620.1.6.50.1.1.10.6428|2|8 +1.3.6.1.4.1.2620.1.6.50.1.1.10.17910|2|16 +1.3.6.1.4.1.2620.1.6.50.1.1.10.28229|2|22 +1.3.6.1.4.1.2620.1.6.50.1.1.10.33908|2|15 +1.3.6.1.4.1.2620.1.6.50.1.1.10.34796|2|13 +1.3.6.1.4.1.2620.1.6.50.1.1.10.52824|2|28 +1.3.6.1.4.1.2620.1.6.50.1.1.10.63804|2|12 +1.3.6.1.4.1.2620.1.6.51.1.1.6958|66|6958 +1.3.6.1.4.1.2620.1.6.51.1.1.8421|66|8421 +1.3.6.1.4.1.2620.1.6.51.1.1.18192|66|18192 +1.3.6.1.4.1.2620.1.6.51.1.1.21212|66|21212 +1.3.6.1.4.1.2620.1.6.51.1.1.25554|66|25554 +1.3.6.1.4.1.2620.1.6.51.1.1.56993|66|56993 +1.3.6.1.4.1.2620.1.6.51.1.1.60242|66|60242 +1.3.6.1.4.1.2620.1.6.51.1.1.60407|66|60407 +1.3.6.1.4.1.2620.1.6.51.1.1.64345|66|64345 +1.3.6.1.4.1.2620.1.6.51.1.1.64736|66|64736 +1.3.6.1.4.1.2620.1.6.51.1.2.6958|64x|5c4a33a8 +1.3.6.1.4.1.2620.1.6.51.1.2.8421|64x|af51911b +1.3.6.1.4.1.2620.1.6.51.1.2.18192|64x|4b3a3aa6 +1.3.6.1.4.1.2620.1.6.51.1.2.21212|64x|6715a987 +1.3.6.1.4.1.2620.1.6.51.1.2.25554|64x|ad84330f +1.3.6.1.4.1.2620.1.6.51.1.2.56993|64x|24bbe41b +1.3.6.1.4.1.2620.1.6.51.1.2.60242|64x|e951ef3b +1.3.6.1.4.1.2620.1.6.51.1.2.60407|64x|10067b32 +1.3.6.1.4.1.2620.1.6.51.1.2.64345|64x|73b6c619 +1.3.6.1.4.1.2620.1.6.51.1.2.64736|64x|20f20d94 +1.3.6.1.4.1.2620.1.6.51.1.3.6958|64x|d458ee8c +1.3.6.1.4.1.2620.1.6.51.1.3.8421|64x|535f0254 +1.3.6.1.4.1.2620.1.6.51.1.3.18192|64x|947b6f58 +1.3.6.1.4.1.2620.1.6.51.1.3.21212|64x|6fd60163 +1.3.6.1.4.1.2620.1.6.51.1.3.25554|64x|2c853379 +1.3.6.1.4.1.2620.1.6.51.1.3.56993|64x|506a582b +1.3.6.1.4.1.2620.1.6.51.1.3.60242|64x|658de17e +1.3.6.1.4.1.2620.1.6.51.1.3.60407|64x|b27c7a79 +1.3.6.1.4.1.2620.1.6.51.1.3.64345|64x|9eb81eab +1.3.6.1.4.1.2620.1.6.51.1.3.64736|64x|13e8a7df +1.3.6.1.4.1.2620.1.6.51.1.4.6958|64x|e2e130a0 +1.3.6.1.4.1.2620.1.6.51.1.4.8421|64x|f108d561 +1.3.6.1.4.1.2620.1.6.51.1.4.18192|64x|9527983c +1.3.6.1.4.1.2620.1.6.51.1.4.21212|64x|aa840c0a +1.3.6.1.4.1.2620.1.6.51.1.4.25554|64x|c94e5d9f +1.3.6.1.4.1.2620.1.6.51.1.4.56993|64x|0f2b56bd +1.3.6.1.4.1.2620.1.6.51.1.4.60242|64x|75073968 +1.3.6.1.4.1.2620.1.6.51.1.4.60407|64x|41549f77 +1.3.6.1.4.1.2620.1.6.51.1.4.64345|64x|dcefc97c +1.3.6.1.4.1.2620.1.6.51.1.4.64736|64x|0d6d10ae +1.3.6.1.4.1.2620.1.6.51.1.5.6958|4x|717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.6.51.1.5.8421|4x|6f78656e20627574204a6164656420627574206163746564 +1.3.6.1.4.1.2620.1.6.51.1.5.18192|4x|6b657074206b6570742064726976696e67207468656972204a61646564206b657074 +1.3.6.1.4.1.2620.1.6.51.1.5.21212|4x|6f78656e207a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.6.51.1.5.25554|4x|717561696e746c79206f78656e204a616465642062757420627574207468656972206b65707420717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.6.51.1.5.56993|4x|666f72776172642062757420616374656420746865697220746865697220666f727761726420666f7277617264204a61646564 +1.3.6.1.4.1.2620.1.6.51.1.5.60242|4x|7468656972206163746564206163746564 +1.3.6.1.4.1.2620.1.6.51.1.5.60407|4x|717561696e746c792074686569722064726976696e67 +1.3.6.1.4.1.2620.1.6.51.1.5.64345|4x|717561696e746c79207468656972204a6164656420627574 +1.3.6.1.4.1.2620.1.6.51.1.5.64736|4|forward +1.3.6.1.4.1.2620.1.6.51.1.6.6958|2|25 +1.3.6.1.4.1.2620.1.6.51.1.6.8421|2|13 +1.3.6.1.4.1.2620.1.6.51.1.6.18192|2|19 +1.3.6.1.4.1.2620.1.6.51.1.6.21212|2|25 +1.3.6.1.4.1.2620.1.6.51.1.6.25554|2|8 +1.3.6.1.4.1.2620.1.6.51.1.6.56993|2|29 +1.3.6.1.4.1.2620.1.6.51.1.6.60242|2|2 +1.3.6.1.4.1.2620.1.6.51.1.6.60407|2|0 +1.3.6.1.4.1.2620.1.6.51.1.6.64345|2|22 +1.3.6.1.4.1.2620.1.6.51.1.6.64736|2|1 +1.3.6.1.4.1.2620.1.6.101.0|2|17 +1.3.6.1.4.1.2620.1.6.102.0|4x|6b657074206b657074206f78656e20717561696e746c792062757420666f7277617264206163746564 +1.3.6.1.4.1.2620.1.6.103.0|4x|6b6570742062757420717561696e746c79 +1.3.6.1.4.1.2620.1.6.999.0|2|20 +1.3.6.1.4.1.2620.1.7.1.0|4x|666f72776172642064726976696e6720666f7277617264206163746564204a616465642064726976696e67207a6f6d6269657320666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.7.2.0|2|13 +1.3.6.1.4.1.2620.1.7.3.0|2|6 +1.3.6.1.4.1.2620.1.7.4.0|2|29 +1.3.6.1.4.1.2620.1.7.5.0|4|kept +1.3.6.1.4.1.2620.1.7.6.0|2|9 +1.3.6.1.4.1.2620.1.7.7.1.1.4793|66|4793 +1.3.6.1.4.1.2620.1.7.7.1.1.16018|66|16018 +1.3.6.1.4.1.2620.1.7.7.1.1.17937|66|17937 +1.3.6.1.4.1.2620.1.7.7.1.1.22118|66|22118 +1.3.6.1.4.1.2620.1.7.7.1.1.29069|66|29069 +1.3.6.1.4.1.2620.1.7.7.1.1.32415|66|32415 +1.3.6.1.4.1.2620.1.7.7.1.1.32468|66|32468 +1.3.6.1.4.1.2620.1.7.7.1.1.40369|66|40369 +1.3.6.1.4.1.2620.1.7.7.1.1.44867|66|44867 +1.3.6.1.4.1.2620.1.7.7.1.1.54964|66|54964 +1.3.6.1.4.1.2620.1.7.7.1.2.4793|4x|746865697220616374656420666f7277617264206163746564206f78656e20666f7277617264206163746564 +1.3.6.1.4.1.2620.1.7.7.1.2.16018|4x|4a616465642064726976696e67206163746564 +1.3.6.1.4.1.2620.1.7.7.1.2.17937|4x|7a6f6d62696573204a61646564207a6f6d626965732074686569722062757420627574207468656972 +1.3.6.1.4.1.2620.1.7.7.1.2.22118|4x|6f78656e20627574206f78656e20746865697220717561696e746c79206f78656e2064726976696e67207a6f6d62696573207468656972 +1.3.6.1.4.1.2620.1.7.7.1.2.29069|4x|6163746564206163746564204a61646564204a6164656420666f7277617264207a6f6d62696573207468656972206163746564 +1.3.6.1.4.1.2620.1.7.7.1.2.32415|4x|6b65707420717561696e746c7920627574 +1.3.6.1.4.1.2620.1.7.7.1.2.32468|4x|61637465642064726976696e672064726976696e6720717561696e746c79207468656972204a616465642061637465642064726976696e67206b657074 +1.3.6.1.4.1.2620.1.7.7.1.2.40369|4x|717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.7.7.1.2.44867|4x|717561696e746c792074686569722064726976696e67206163746564206163746564204a61646564 +1.3.6.1.4.1.2620.1.7.7.1.2.54964|4x|666f727761726420666f7277617264207a6f6d6269657320666f72776172642074686569722064726976696e67 +1.3.6.1.4.1.2620.1.7.7.1.3.4793|4x|746865697220717561696e746c79206b657074206163746564206b65707420616374656420616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.7.7.1.3.16018|4x|7468656972206f78656e204a616465642064726976696e67206f78656e204a6164656420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.7.7.1.3.17937|4x|717561696e746c7920717561696e746c79 +1.3.6.1.4.1.2620.1.7.7.1.3.22118|4x|666f727761726420627574206b65707420717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.7.7.1.3.29069|4x|746865697220666f7277617264204a61646564 +1.3.6.1.4.1.2620.1.7.7.1.3.32415|4x|4a616465642062757420627574206f78656e2061637465642061637465642061637465642064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.7.7.1.3.32468|4x|7468656972204a6164656420627574206b65707420616374656420627574 +1.3.6.1.4.1.2620.1.7.7.1.3.40369|4|zombies +1.3.6.1.4.1.2620.1.7.7.1.3.44867|4x|6f78656e204a61646564206f78656e207a6f6d62696573206b657074206163746564 +1.3.6.1.4.1.2620.1.7.7.1.3.54964|4x|4a61646564206b657074206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.7.7.1.4.4793|4|oxen +1.3.6.1.4.1.2620.1.7.7.1.4.16018|4x|7a6f6d62696573206b6570742064726976696e6720627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.7.7.1.4.17937|4x|717561696e746c7920627574206163746564204a61646564207468656972206163746564207a6f6d626965732062757420666f7277617264 +1.3.6.1.4.1.2620.1.7.7.1.4.22118|4x|6b65707420666f72776172642064726976696e6720717561696e746c79207a6f6d62696573206b65707420666f72776172642062757420627574 +1.3.6.1.4.1.2620.1.7.7.1.4.29069|4x|4a6164656420627574206b657074206f78656e206b657074204a61646564206163746564204a61646564204a61646564 +1.3.6.1.4.1.2620.1.7.7.1.4.32415|4|driving +1.3.6.1.4.1.2620.1.7.7.1.4.32468|4x|64726976696e67206b657074204a616465642064726976696e6720717561696e746c7920717561696e746c79207a6f6d626965732074686569722064726976696e67 +1.3.6.1.4.1.2620.1.7.7.1.4.40369|4x|717561696e746c79207a6f6d62696573204a61646564 +1.3.6.1.4.1.2620.1.7.7.1.4.44867|4x|4a61646564207468656972 +1.3.6.1.4.1.2620.1.7.7.1.4.54964|4x|6b657074206275742064726976696e67 +1.3.6.1.4.1.2620.1.7.7.1.5.4793|4x|627574207a6f6d6269657320717561696e746c7920627574206b65707420717561696e746c7920666f727761726420666f7277617264206f78656e +1.3.6.1.4.1.2620.1.7.7.1.5.16018|4x|6163746564207468656972 +1.3.6.1.4.1.2620.1.7.7.1.5.17937|4x|6f78656e20717561696e746c79206163746564206163746564207468656972204a61646564206163746564206f78656e +1.3.6.1.4.1.2620.1.7.7.1.5.22118|4x|64726976696e672064726976696e67206163746564 +1.3.6.1.4.1.2620.1.7.7.1.5.29069|4x|666f72776172642064726976696e6720616374656420616374656420717561696e746c79206b657074206b657074206b657074 +1.3.6.1.4.1.2620.1.7.7.1.5.32415|4x|717561696e746c79207468656972206b657074207468656972 +1.3.6.1.4.1.2620.1.7.7.1.5.32468|4x|4a6164656420746865697220627574 +1.3.6.1.4.1.2620.1.7.7.1.5.40369|4x|7a6f6d62696573206b657074206b6570742064726976696e67206b657074 +1.3.6.1.4.1.2620.1.7.7.1.5.44867|4x|4a6164656420666f727761726420627574 +1.3.6.1.4.1.2620.1.7.7.1.5.54964|4x|666f727761726420746865697220666f7277617264 +1.3.6.1.4.1.2620.1.7.101.0|2|21 +1.3.6.1.4.1.2620.1.7.102.0|4x|4a6164656420616374656420616374656420746865697220746865697220627574 +1.3.6.1.4.1.2620.1.7.103.0|4|Jaded +1.3.6.1.4.1.2620.1.8.1.0|4x|717561696e746c79204a616465642064726976696e67206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.8.2.0|2|3 +1.3.6.1.4.1.2620.1.8.3.0|2|29 +1.3.6.1.4.1.2620.1.8.4.0|4x|6163746564207a6f6d6269657320746865697220717561696e746c7920717561696e746c79206b657074207a6f6d626965732064726976696e67206b657074 +1.3.6.1.4.1.2620.1.8.5.0|4x|4a61646564207468656972206f78656e206f78656e2064726976696e6720616374656420627574204a61646564 +1.3.6.1.4.1.2620.1.8.6.1.0|2|30 +1.3.6.1.4.1.2620.1.8.6.2.0|2|12 +1.3.6.1.4.1.2620.1.8.7.1.0|4x|64726976696e67206163746564 +1.3.6.1.4.1.2620.1.8.7.2.0|4x|7a6f6d6269657320666f7277617264206f78656e206f78656e206b65707420717561696e746c7920627574207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.8.8.1.0|4x|64726976696e67207a6f6d62696573207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.8.8.2.0|2|18 +1.3.6.1.4.1.2620.1.8.8.3.0|2|22 +1.3.6.1.4.1.2620.1.8.8.4.0|2|11 +1.3.6.1.4.1.2620.1.8.8.5.0|4|Jaded +1.3.6.1.4.1.2620.1.8.9.1.0|2|2 +1.3.6.1.4.1.2620.1.8.9.2.0|4x|4a61646564206b6570742064726976696e672064726976696e67204a6164656420666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.8.101.0|2|6 +1.3.6.1.4.1.2620.1.8.102.0|4x|4a616465642064726976696e67206275742061637465642062757420746865697220717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.8.103.0|4|quaintly +1.3.6.1.4.1.2620.1.9.1.0|4x|64726976696e67204a6164656420616374656420717561696e746c7920717561696e746c792062757420627574207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.9.2.0|2|8 +1.3.6.1.4.1.2620.1.9.3.0|2|20 +1.3.6.1.4.1.2620.1.9.4.0|2|19 +1.3.6.1.4.1.2620.1.9.5.0|2|2 +1.3.6.1.4.1.2620.1.9.101.0|2|27 +1.3.6.1.4.1.2620.1.9.102.0|4x|64726976696e67207a6f6d6269657320666f72776172642062757420616374656420666f72776172642061637465642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.9.103.0|4x|6f78656e20666f7277617264206f78656e207468656972206163746564 +1.3.6.1.4.1.2620.1.11.1.0|4x|6f78656e206f78656e207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.11.2.0|2|12 +1.3.6.1.4.1.2620.1.11.3.0|2|25 +1.3.6.1.4.1.2620.1.11.4.0|2|15 +1.3.6.1.4.1.2620.1.11.5.0|2|28 +1.3.6.1.4.1.2620.1.11.7.1.1.741|66|741 +1.3.6.1.4.1.2620.1.11.7.1.1.7546|66|7546 +1.3.6.1.4.1.2620.1.11.7.1.1.26226|66|26226 +1.3.6.1.4.1.2620.1.11.7.1.1.27222|66|27222 +1.3.6.1.4.1.2620.1.11.7.1.1.28924|66|28924 +1.3.6.1.4.1.2620.1.11.7.1.1.35044|66|35044 +1.3.6.1.4.1.2620.1.11.7.1.1.42557|66|42557 +1.3.6.1.4.1.2620.1.11.7.1.1.46132|66|46132 +1.3.6.1.4.1.2620.1.11.7.1.1.48689|66|48689 +1.3.6.1.4.1.2620.1.11.7.1.1.50734|66|50734 +1.3.6.1.4.1.2620.1.11.7.1.2.741|4x|666f72776172642064726976696e67207468656972206b657074206b6570742074686569722064726976696e67207468656972 +1.3.6.1.4.1.2620.1.11.7.1.2.7546|4x|746865697220717561696e746c792061637465642064726976696e67206b657074206f78656e204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.11.7.1.2.26226|4x|7a6f6d6269657320717561696e746c79206b657074204a6164656420717561696e746c7920627574207468656972 +1.3.6.1.4.1.2620.1.11.7.1.2.27222|4|but +1.3.6.1.4.1.2620.1.11.7.1.2.28924|4x|4a61646564206f78656e20627574206163746564207468656972207a6f6d6269657320717561696e746c7920666f7277617264204a61646564 +1.3.6.1.4.1.2620.1.11.7.1.2.35044|4x|666f727761726420717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.11.7.1.2.42557|4x|666f727761726420666f7277617264206b6570742062757420717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.11.7.1.2.46132|4x|666f72776172642064726976696e67206b6570742064726976696e67206f78656e +1.3.6.1.4.1.2620.1.11.7.1.2.48689|4x|62757420627574206b657074206f78656e204a616465642062757420717561696e746c7920717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.11.7.1.2.50734|4|acted +1.3.6.1.4.1.2620.1.11.7.1.3.741|4x|6b657074206f78656e206f78656e207a6f6d62696573206163746564204a61646564207a6f6d6269657320717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.11.7.1.3.7546|4x|6f78656e207a6f6d6269657320717561696e746c7920627574 +1.3.6.1.4.1.2620.1.11.7.1.3.26226|4x|64726976696e67206163746564204a6164656420627574207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.11.7.1.3.27222|4|forward +1.3.6.1.4.1.2620.1.11.7.1.3.28924|4x|7a6f6d626965732061637465642074686569722064726976696e6720717561696e746c792064726976696e6720666f7277617264206f78656e206f78656e +1.3.6.1.4.1.2620.1.11.7.1.3.35044|4x|62757420627574206f78656e207468656972206275742064726976696e67 +1.3.6.1.4.1.2620.1.11.7.1.3.42557|4x|4a61646564207468656972207a6f6d6269657320627574206275742064726976696e6720666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.11.7.1.3.46132|4x|4a61646564207468656972206163746564 +1.3.6.1.4.1.2620.1.11.7.1.3.48689|4|Jaded +1.3.6.1.4.1.2620.1.11.7.1.3.50734|4x|64726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.11.7.1.4.741|4x|7468656972207a6f6d6269657320666f7277617264206b65707420627574204a616465642062757420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.11.7.1.4.7546|4|Jaded +1.3.6.1.4.1.2620.1.11.7.1.4.26226|4x|6f78656e206f78656e207468656972204a61646564206163746564 +1.3.6.1.4.1.2620.1.11.7.1.4.27222|4x|4a61646564206b65707420627574207468656972204a61646564207a6f6d6269657320666f72776172642064726976696e67206f78656e +1.3.6.1.4.1.2620.1.11.7.1.4.28924|4x|6275742064726976696e672062757420746865697220717561696e746c7920717561696e746c79206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.11.7.1.4.35044|4x|4a61646564206f78656e207468656972206f78656e2062757420717561696e746c7920717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.11.7.1.4.42557|4x|4a616465642074686569722064726976696e672062757420666f7277617264 +1.3.6.1.4.1.2620.1.11.7.1.4.46132|4x|666f7277617264204a61646564206163746564206b657074 +1.3.6.1.4.1.2620.1.11.7.1.4.48689|4x|64726976696e672062757420717561696e746c7920717561696e746c7920627574206b657074206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.11.7.1.4.50734|4x|6f78656e20616374656420616374656420627574207a6f6d6269657320666f72776172642064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.11.7.1.5.741|4x|6f78656e20627574 +1.3.6.1.4.1.2620.1.11.7.1.5.7546|4x|6275742064726976696e6720717561696e746c79206f78656e207a6f6d62696573206f78656e206f78656e2064726976696e67206b657074 +1.3.6.1.4.1.2620.1.11.7.1.5.26226|4x|4a61646564206f78656e2061637465642064726976696e67206163746564206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.11.7.1.5.27222|4x|74686569722062757420666f7277617264207a6f6d6269657320717561696e746c79204a6164656420627574 +1.3.6.1.4.1.2620.1.11.7.1.5.28924|4x|6b65707420746865697220717561696e746c7920717561696e746c79206f78656e207a6f6d62696573207a6f6d62696573207468656972 +1.3.6.1.4.1.2620.1.11.7.1.5.35044|4|forward +1.3.6.1.4.1.2620.1.11.7.1.5.42557|4x|6f78656e20717561696e746c79206163746564204a61646564206f78656e +1.3.6.1.4.1.2620.1.11.7.1.5.46132|4x|64726976696e67206163746564 +1.3.6.1.4.1.2620.1.11.7.1.5.48689|4|Jaded +1.3.6.1.4.1.2620.1.11.7.1.5.50734|4x|6f78656e20627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.11.101.0|2|16 +1.3.6.1.4.1.2620.1.11.102.0|4x|7a6f6d626965732064726976696e67204a61646564206f78656e204a61646564 +1.3.6.1.4.1.2620.1.11.103.0|4x|4a61646564206f78656e20666f7277617264207a6f6d62696573207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.16.11.0|2|21 +1.3.6.1.4.1.2620.1.16.12.0|2|6 +1.3.6.1.4.1.2620.1.16.13.0|2|0 +1.3.6.1.4.1.2620.1.16.22.1.1.1.2342|66|2342 +1.3.6.1.4.1.2620.1.16.22.1.1.1.3908|66|3908 +1.3.6.1.4.1.2620.1.16.22.1.1.1.6949|66|6949 +1.3.6.1.4.1.2620.1.16.22.1.1.1.23425|66|23425 +1.3.6.1.4.1.2620.1.16.22.1.1.1.23778|66|23778 +1.3.6.1.4.1.2620.1.16.22.1.1.1.25546|66|25546 +1.3.6.1.4.1.2620.1.16.22.1.1.1.47306|66|47306 +1.3.6.1.4.1.2620.1.16.22.1.1.1.50073|66|50073 +1.3.6.1.4.1.2620.1.16.22.1.1.1.60638|66|60638 +1.3.6.1.4.1.2620.1.16.22.1.1.1.63250|66|63250 +1.3.6.1.4.1.2620.1.16.22.1.1.2.2342|66|35672 +1.3.6.1.4.1.2620.1.16.22.1.1.2.3908|66|44797 +1.3.6.1.4.1.2620.1.16.22.1.1.2.6949|66|31692 +1.3.6.1.4.1.2620.1.16.22.1.1.2.23425|66|6567 +1.3.6.1.4.1.2620.1.16.22.1.1.2.23778|66|39079 +1.3.6.1.4.1.2620.1.16.22.1.1.2.25546|66|43639 +1.3.6.1.4.1.2620.1.16.22.1.1.2.47306|66|63723 +1.3.6.1.4.1.2620.1.16.22.1.1.2.50073|66|20112 +1.3.6.1.4.1.2620.1.16.22.1.1.2.60638|66|50359 +1.3.6.1.4.1.2620.1.16.22.1.1.2.63250|66|42642 +1.3.6.1.4.1.2620.1.16.22.1.1.3.2342|4|driving +1.3.6.1.4.1.2620.1.16.22.1.1.3.3908|4x|627574206b657074206f78656e206b657074 +1.3.6.1.4.1.2620.1.16.22.1.1.3.6949|4|forward +1.3.6.1.4.1.2620.1.16.22.1.1.3.23425|4x|666f727761726420616374656420627574207a6f6d62696573206b657074207468656972204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.16.22.1.1.3.23778|4x|7a6f6d6269657320717561696e746c79207a6f6d6269657320627574206b65707420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.16.22.1.1.3.25546|4x|7468656972206163746564204a61646564 +1.3.6.1.4.1.2620.1.16.22.1.1.3.47306|4x|666f7277617264206b657074206f78656e +1.3.6.1.4.1.2620.1.16.22.1.1.3.50073|4x|64726976696e67206f78656e20717561696e746c79206f78656e206b657074206f78656e204a61646564206b657074 +1.3.6.1.4.1.2620.1.16.22.1.1.3.60638|4x|4a61646564204a61646564 +1.3.6.1.4.1.2620.1.16.22.1.1.3.63250|4x|6163746564204a616465642064726976696e6720666f7277617264206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.22.1.1.4.2342|4x|64726976696e672064726976696e67206f78656e204a61646564207a6f6d62696573207a6f6d62696573206f78656e204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.4.3908|4x|6163746564206b65707420627574206f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.4.6949|4x|6163746564204a61646564204a61646564206f78656e206f78656e +1.3.6.1.4.1.2620.1.16.22.1.1.4.23425|4x|7a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.16.22.1.1.4.23778|4x|6275742064726976696e672064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.4.25546|4x|62757420666f7277617264206b657074206163746564206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.16.22.1.1.4.47306|4|kept +1.3.6.1.4.1.2620.1.16.22.1.1.4.50073|4x|64726976696e672064726976696e67206b65707420627574 +1.3.6.1.4.1.2620.1.16.22.1.1.4.60638|4x|627574206b657074207468656972 +1.3.6.1.4.1.2620.1.16.22.1.1.4.63250|4x|627574206f78656e20616374656420666f7277617264206f78656e204a61646564206163746564206f78656e206163746564 +1.3.6.1.4.1.2620.1.16.22.1.1.5.2342|4x|717561696e746c7920717561696e746c7920616374656420627574 +1.3.6.1.4.1.2620.1.16.22.1.1.5.3908|4|Jaded +1.3.6.1.4.1.2620.1.16.22.1.1.5.6949|4x|6f78656e206163746564206163746564207a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.5.23425|4x|746865697220746865697220666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.22.1.1.5.23778|4x|627574207468656972206b657074 +1.3.6.1.4.1.2620.1.16.22.1.1.5.25546|4x|6b65707420666f72776172642062757420666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.16.22.1.1.5.47306|4x|7a6f6d626965732074686569722064726976696e67207a6f6d62696573204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.16.22.1.1.5.50073|4x|627574204a6164656420627574 +1.3.6.1.4.1.2620.1.16.22.1.1.5.60638|4x|717561696e746c79206f78656e204a61646564206f78656e206b657074206f78656e206f78656e206b657074 +1.3.6.1.4.1.2620.1.16.22.1.1.5.63250|4x|6b657074204a61646564 +1.3.6.1.4.1.2620.1.16.22.1.1.6.2342|4x|64726976696e67204a61646564206b657074204a61646564206f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.6.3908|4|forward +1.3.6.1.4.1.2620.1.16.22.1.1.6.6949|4x|64726976696e67204a6164656420666f7277617264206163746564206f78656e20717561696e746c79206163746564204a61646564204a61646564 +1.3.6.1.4.1.2620.1.16.22.1.1.6.23425|4x|627574204a6164656420666f7277617264207468656972206b657074206163746564 +1.3.6.1.4.1.2620.1.16.22.1.1.6.23778|4x|7a6f6d62696573207468656972207a6f6d6269657320717561696e746c7920717561696e746c79 +1.3.6.1.4.1.2620.1.16.22.1.1.6.25546|4x|4a61646564206b657074204a6164656420717561696e746c7920666f7277617264207468656972206163746564206f78656e +1.3.6.1.4.1.2620.1.16.22.1.1.6.47306|4x|666f727761726420666f727761726420666f727761726420666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.16.22.1.1.6.50073|4x|666f7277617264206b657074204a61646564206b65707420717561696e746c7920666f7277617264204a6164656420616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.16.22.1.1.6.60638|4x|6b6570742064726976696e67206f78656e207a6f6d62696573206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.16.22.1.1.6.63250|4x|746865697220616374656420717561696e746c7920717561696e746c79204a61646564207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.22.1.1.7.2342|4x|6b65707420627574 +1.3.6.1.4.1.2620.1.16.22.1.1.7.3908|4x|666f7277617264204a6164656420717561696e746c7920717561696e746c7920666f72776172642064726976696e67206f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.7.6949|4x|64726976696e672062757420666f727761726420616374656420666f7277617264 +1.3.6.1.4.1.2620.1.16.22.1.1.7.23425|4x|62757420717561696e746c79204a616465642064726976696e6720717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.16.22.1.1.7.23778|4|quaintly +1.3.6.1.4.1.2620.1.16.22.1.1.7.25546|4x|4a6164656420666f72776172642064726976696e67206f78656e20717561696e746c7920666f7277617264207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.16.22.1.1.7.47306|4x|6f78656e20666f72776172642064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.7.50073|4x|4a61646564206b657074206163746564204a61646564204a61646564206f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.7.60638|4x|717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.7.63250|4x|717561696e746c7920717561696e746c7920666f7277617264206b657074204a61646564206b657074207468656972 +1.3.6.1.4.1.2620.1.16.22.1.1.8.2342|4|oxen +1.3.6.1.4.1.2620.1.16.22.1.1.8.3908|4x|7a6f6d62696573207a6f6d62696573206b65707420616374656420746865697220717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.16.22.1.1.8.6949|4x|7a6f6d626965732064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.8.23425|4x|4a61646564207468656972 +1.3.6.1.4.1.2620.1.16.22.1.1.8.23778|4x|4a61646564206b657074206f78656e20746865697220627574206b657074 +1.3.6.1.4.1.2620.1.16.22.1.1.8.25546|4x|717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.22.1.1.8.47306|4x|666f7277617264206b657074206b6570742064726976696e672064726976696e67207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.16.22.1.1.8.50073|4x|6f78656e206f78656e +1.3.6.1.4.1.2620.1.16.22.1.1.8.60638|4x|7468656972207468656972204a61646564 +1.3.6.1.4.1.2620.1.16.22.1.1.8.63250|4x|4a61646564206f78656e20666f7277617264206f78656e20717561696e746c792064726976696e67206f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.9.2342|4x|61637465642064726976696e672064726976696e6720666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.16.22.1.1.9.3908|4x|4a61646564206f78656e20717561696e746c7920666f727761726420746865697220746865697220666f72776172642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.22.1.1.9.6949|4x|627574206275742064726976696e67207a6f6d626965732061637465642064726976696e67207a6f6d62696573207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.16.22.1.1.9.23425|4|oxen +1.3.6.1.4.1.2620.1.16.22.1.1.9.23778|4x|6b65707420717561696e746c79206163746564207468656972206b657074206b6570742064726976696e672061637465642064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.9.25546|4x|6f78656e2074686569722064726976696e67204a6164656420717561696e746c79 +1.3.6.1.4.1.2620.1.16.22.1.1.9.47306|4x|61637465642074686569722064726976696e67206f78656e +1.3.6.1.4.1.2620.1.16.22.1.1.9.50073|4x|7a6f6d6269657320627574207468656972 +1.3.6.1.4.1.2620.1.16.22.1.1.9.60638|4x|717561696e746c7920746865697220666f7277617264207a6f6d62696573207468656972207468656972 +1.3.6.1.4.1.2620.1.16.22.1.1.9.63250|4x|717561696e746c79206b65707420627574206163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.22.1.1.10.2342|2|14 +1.3.6.1.4.1.2620.1.16.22.1.1.10.3908|2|28 +1.3.6.1.4.1.2620.1.16.22.1.1.10.6949|2|25 +1.3.6.1.4.1.2620.1.16.22.1.1.10.23425|2|9 +1.3.6.1.4.1.2620.1.16.22.1.1.10.23778|2|8 +1.3.6.1.4.1.2620.1.16.22.1.1.10.25546|2|4 +1.3.6.1.4.1.2620.1.16.22.1.1.10.47306|2|20 +1.3.6.1.4.1.2620.1.16.22.1.1.10.50073|2|28 +1.3.6.1.4.1.2620.1.16.22.1.1.10.60638|2|13 +1.3.6.1.4.1.2620.1.16.22.1.1.10.63250|2|10 +1.3.6.1.4.1.2620.1.16.22.2.1.1.531|2|12 +1.3.6.1.4.1.2620.1.16.22.2.1.1.2789|2|28 +1.3.6.1.4.1.2620.1.16.22.2.1.1.8268|2|13 +1.3.6.1.4.1.2620.1.16.22.2.1.1.9293|2|17 +1.3.6.1.4.1.2620.1.16.22.2.1.1.13850|2|21 +1.3.6.1.4.1.2620.1.16.22.2.1.1.18224|2|21 +1.3.6.1.4.1.2620.1.16.22.2.1.1.28872|2|8 +1.3.6.1.4.1.2620.1.16.22.2.1.1.36187|2|12 +1.3.6.1.4.1.2620.1.16.22.2.1.1.45779|2|27 +1.3.6.1.4.1.2620.1.16.22.2.1.1.56540|2|2 +1.3.6.1.4.1.2620.1.16.22.2.1.2.531|2|19 +1.3.6.1.4.1.2620.1.16.22.2.1.2.2789|2|13 +1.3.6.1.4.1.2620.1.16.22.2.1.2.8268|2|21 +1.3.6.1.4.1.2620.1.16.22.2.1.2.9293|2|21 +1.3.6.1.4.1.2620.1.16.22.2.1.2.13850|2|22 +1.3.6.1.4.1.2620.1.16.22.2.1.2.18224|2|26 +1.3.6.1.4.1.2620.1.16.22.2.1.2.28872|2|13 +1.3.6.1.4.1.2620.1.16.22.2.1.2.36187|2|18 +1.3.6.1.4.1.2620.1.16.22.2.1.2.45779|2|14 +1.3.6.1.4.1.2620.1.16.22.2.1.2.56540|2|19 +1.3.6.1.4.1.2620.1.16.22.2.1.3.531|2|13 +1.3.6.1.4.1.2620.1.16.22.2.1.3.2789|2|22 +1.3.6.1.4.1.2620.1.16.22.2.1.3.8268|2|13 +1.3.6.1.4.1.2620.1.16.22.2.1.3.9293|2|29 +1.3.6.1.4.1.2620.1.16.22.2.1.3.13850|2|7 +1.3.6.1.4.1.2620.1.16.22.2.1.3.18224|2|18 +1.3.6.1.4.1.2620.1.16.22.2.1.3.28872|2|24 +1.3.6.1.4.1.2620.1.16.22.2.1.3.36187|2|18 +1.3.6.1.4.1.2620.1.16.22.2.1.3.45779|2|22 +1.3.6.1.4.1.2620.1.16.22.2.1.3.56540|2|28 +1.3.6.1.4.1.2620.1.16.22.2.1.4.531|2|3 +1.3.6.1.4.1.2620.1.16.22.2.1.4.2789|2|10 +1.3.6.1.4.1.2620.1.16.22.2.1.4.8268|2|26 +1.3.6.1.4.1.2620.1.16.22.2.1.4.9293|2|5 +1.3.6.1.4.1.2620.1.16.22.2.1.4.13850|2|29 +1.3.6.1.4.1.2620.1.16.22.2.1.4.18224|2|9 +1.3.6.1.4.1.2620.1.16.22.2.1.4.28872|2|29 +1.3.6.1.4.1.2620.1.16.22.2.1.4.36187|2|15 +1.3.6.1.4.1.2620.1.16.22.2.1.4.45779|2|12 +1.3.6.1.4.1.2620.1.16.22.2.1.4.56540|2|2 +1.3.6.1.4.1.2620.1.16.22.2.1.5.531|2|3 +1.3.6.1.4.1.2620.1.16.22.2.1.5.2789|2|7 +1.3.6.1.4.1.2620.1.16.22.2.1.5.8268|2|23 +1.3.6.1.4.1.2620.1.16.22.2.1.5.9293|2|22 +1.3.6.1.4.1.2620.1.16.22.2.1.5.13850|2|17 +1.3.6.1.4.1.2620.1.16.22.2.1.5.18224|2|11 +1.3.6.1.4.1.2620.1.16.22.2.1.5.28872|2|22 +1.3.6.1.4.1.2620.1.16.22.2.1.5.36187|2|3 +1.3.6.1.4.1.2620.1.16.22.2.1.5.45779|2|5 +1.3.6.1.4.1.2620.1.16.22.2.1.5.56540|2|0 +1.3.6.1.4.1.2620.1.16.22.2.1.6.531|2|13 +1.3.6.1.4.1.2620.1.16.22.2.1.6.2789|2|28 +1.3.6.1.4.1.2620.1.16.22.2.1.6.8268|2|19 +1.3.6.1.4.1.2620.1.16.22.2.1.6.9293|2|29 +1.3.6.1.4.1.2620.1.16.22.2.1.6.13850|2|3 +1.3.6.1.4.1.2620.1.16.22.2.1.6.18224|2|17 +1.3.6.1.4.1.2620.1.16.22.2.1.6.28872|2|23 +1.3.6.1.4.1.2620.1.16.22.2.1.6.36187|2|17 +1.3.6.1.4.1.2620.1.16.22.2.1.6.45779|2|11 +1.3.6.1.4.1.2620.1.16.22.2.1.6.56540|2|9 +1.3.6.1.4.1.2620.1.16.23.1.1.1.923|2|14 +1.3.6.1.4.1.2620.1.16.23.1.1.1.1098|2|7 +1.3.6.1.4.1.2620.1.16.23.1.1.1.5611|2|21 +1.3.6.1.4.1.2620.1.16.23.1.1.1.5967|2|7 +1.3.6.1.4.1.2620.1.16.23.1.1.1.9349|2|25 +1.3.6.1.4.1.2620.1.16.23.1.1.1.15167|2|1 +1.3.6.1.4.1.2620.1.16.23.1.1.1.28555|2|13 +1.3.6.1.4.1.2620.1.16.23.1.1.1.37907|2|15 +1.3.6.1.4.1.2620.1.16.23.1.1.1.40571|2|27 +1.3.6.1.4.1.2620.1.16.23.1.1.1.65094|2|22 +1.3.6.1.4.1.2620.1.16.23.1.1.2.923|2|17 +1.3.6.1.4.1.2620.1.16.23.1.1.2.1098|2|0 +1.3.6.1.4.1.2620.1.16.23.1.1.2.5611|2|29 +1.3.6.1.4.1.2620.1.16.23.1.1.2.5967|2|22 +1.3.6.1.4.1.2620.1.16.23.1.1.2.9349|2|4 +1.3.6.1.4.1.2620.1.16.23.1.1.2.15167|2|26 +1.3.6.1.4.1.2620.1.16.23.1.1.2.28555|2|13 +1.3.6.1.4.1.2620.1.16.23.1.1.2.37907|2|11 +1.3.6.1.4.1.2620.1.16.23.1.1.2.40571|2|6 +1.3.6.1.4.1.2620.1.16.23.1.1.2.65094|2|30 +1.3.6.1.4.1.2620.1.16.23.1.1.3.923|2|22 +1.3.6.1.4.1.2620.1.16.23.1.1.3.1098|2|30 +1.3.6.1.4.1.2620.1.16.23.1.1.3.5611|2|19 +1.3.6.1.4.1.2620.1.16.23.1.1.3.5967|2|20 +1.3.6.1.4.1.2620.1.16.23.1.1.3.9349|2|23 +1.3.6.1.4.1.2620.1.16.23.1.1.3.15167|2|21 +1.3.6.1.4.1.2620.1.16.23.1.1.3.28555|2|5 +1.3.6.1.4.1.2620.1.16.23.1.1.3.37907|2|15 +1.3.6.1.4.1.2620.1.16.23.1.1.3.40571|2|14 +1.3.6.1.4.1.2620.1.16.23.1.1.3.65094|2|5 +1.3.6.1.4.1.2620.1.16.23.1.1.4.923|2|21 +1.3.6.1.4.1.2620.1.16.23.1.1.4.1098|2|18 +1.3.6.1.4.1.2620.1.16.23.1.1.4.5611|2|6 +1.3.6.1.4.1.2620.1.16.23.1.1.4.5967|2|6 +1.3.6.1.4.1.2620.1.16.23.1.1.4.9349|2|26 +1.3.6.1.4.1.2620.1.16.23.1.1.4.15167|2|19 +1.3.6.1.4.1.2620.1.16.23.1.1.4.28555|2|18 +1.3.6.1.4.1.2620.1.16.23.1.1.4.37907|2|20 +1.3.6.1.4.1.2620.1.16.23.1.1.4.40571|2|6 +1.3.6.1.4.1.2620.1.16.23.1.1.4.65094|2|16 +1.3.6.1.4.1.2620.1.16.23.1.1.5.923|4x|7a6f6d6269657320666f72776172642064726976696e67206b657074206b657074207468656972204a61646564206f78656e +1.3.6.1.4.1.2620.1.16.23.1.1.5.1098|4x|4a61646564207a6f6d62696573204a616465642064726976696e67207a6f6d6269657320627574206b65707420717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.16.23.1.1.5.5611|4x|6b65707420627574206b657074 +1.3.6.1.4.1.2620.1.16.23.1.1.5.5967|4x|6b657074207a6f6d626965732064726976696e67207a6f6d62696573204a61646564206b657074 +1.3.6.1.4.1.2620.1.16.23.1.1.5.9349|4x|6b65707420666f7277617264206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.5.15167|4x|7468656972206f78656e2064726976696e6720627574206275742074686569722064726976696e67207468656972 +1.3.6.1.4.1.2620.1.16.23.1.1.5.28555|4x|746865697220717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.23.1.1.5.37907|4x|666f7277617264207a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.2620.1.16.23.1.1.5.40571|4|kept +1.3.6.1.4.1.2620.1.16.23.1.1.5.65094|4|Jaded +1.3.6.1.4.1.2620.1.16.23.1.1.6.923|4x|4a6164656420717561696e746c79206f78656e2062757420717561696e746c79207a6f6d62696573207468656972207468656972 +1.3.6.1.4.1.2620.1.16.23.1.1.6.1098|4x|7468656972207468656972204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.16.23.1.1.6.5611|4x|4a61646564204a61646564 +1.3.6.1.4.1.2620.1.16.23.1.1.6.5967|4x|4a6164656420717561696e746c79207a6f6d62696573206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.16.23.1.1.6.9349|4x|6f78656e207a6f6d62696573206163746564207468656972206b657074206f78656e +1.3.6.1.4.1.2620.1.16.23.1.1.6.15167|4x|4a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.6.28555|4x|64726976696e67206f78656e206f78656e20666f7277617264206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.6.37907|4x|6b657074204a61646564 +1.3.6.1.4.1.2620.1.16.23.1.1.6.40571|4x|6f78656e207468656972206b657074206f78656e +1.3.6.1.4.1.2620.1.16.23.1.1.6.65094|4x|6b65707420627574206f78656e207a6f6d62696573204a61646564207a6f6d626965732064726976696e67206f78656e207468656972 +1.3.6.1.4.1.2620.1.16.23.1.1.7.923|4|zombies +1.3.6.1.4.1.2620.1.16.23.1.1.7.1098|4x|717561696e746c7920746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.16.23.1.1.7.5611|4x|616374656420627574206b657074206163746564204a6164656420717561696e746c79206f78656e20627574 +1.3.6.1.4.1.2620.1.16.23.1.1.7.5967|4x|6f78656e207468656972206b657074204a61646564206b657074 +1.3.6.1.4.1.2620.1.16.23.1.1.7.9349|4|quaintly +1.3.6.1.4.1.2620.1.16.23.1.1.7.15167|4x|4a61646564204a61646564206f78656e +1.3.6.1.4.1.2620.1.16.23.1.1.7.28555|4x|7a6f6d6269657320616374656420666f727761726420627574206f78656e206275742062757420717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.23.1.1.7.37907|4x|6f78656e20666f727761726420717561696e746c792064726976696e6720627574 +1.3.6.1.4.1.2620.1.16.23.1.1.7.40571|4x|717561696e746c792064726976696e67206b657074206b65707420666f727761726420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.16.23.1.1.7.65094|4x|62757420666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.8.923|4x|6f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.23.1.1.8.1098|4x|717561696e746c7920616374656420616374656420717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.16.23.1.1.8.5611|4x|627574204a61646564204a6164656420627574206163746564204a61646564206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.16.23.1.1.8.5967|4x|627574206b657074204a61646564206163746564 +1.3.6.1.4.1.2620.1.16.23.1.1.8.9349|4x|717561696e746c79204a6164656420627574 +1.3.6.1.4.1.2620.1.16.23.1.1.8.15167|4x|717561696e746c7920666f7277617264204a61646564207468656972204a61646564207a6f6d62696573207468656972204a61646564 +1.3.6.1.4.1.2620.1.16.23.1.1.8.28555|4x|4a616465642064726976696e67 +1.3.6.1.4.1.2620.1.16.23.1.1.8.37907|4x|627574204a6164656420717561696e746c79 +1.3.6.1.4.1.2620.1.16.23.1.1.8.40571|4x|64726976696e6720717561696e746c7920746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.16.23.1.1.8.65094|4x|64726976696e6720666f7277617264204a61646564206b65707420666f727761726420616374656420666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.9.923|4x|6b657074204a6164656420666f7277617264204a61646564207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.16.23.1.1.9.1098|4x|74686569722064726976696e6720717561696e746c7920666f7277617264204a616465642064726976696e67206f78656e2064726976696e67206f78656e +1.3.6.1.4.1.2620.1.16.23.1.1.9.5611|4|forward +1.3.6.1.4.1.2620.1.16.23.1.1.9.5967|4x|6163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.23.1.1.9.9349|4x|616374656420666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.9.15167|4x|7a6f6d626965732064726976696e672062757420666f7277617264206163746564207468656972206163746564 +1.3.6.1.4.1.2620.1.16.23.1.1.9.28555|4x|74686569722074686569722074686569722064726976696e672062757420666f727761726420717561696e746c7920746865697220627574 +1.3.6.1.4.1.2620.1.16.23.1.1.9.37907|4x|627574206163746564206163746564206f78656e2064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.23.1.1.9.40571|4x|6f78656e206f78656e2064726976696e67206b657074206f78656e204a61646564 +1.3.6.1.4.1.2620.1.16.23.1.1.9.65094|4x|627574207a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.16.23.1.1.10.923|4x|616374656420666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.10.1098|4x|7a6f6d6269657320717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.16.23.1.1.10.5611|4x|64726976696e6720627574207a6f6d6269657320666f727761726420666f72776172642064726976696e67206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.16.23.1.1.10.5967|4x|7a6f6d62696573206163746564207a6f6d62696573207468656972207468656972206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.23.1.1.10.9349|4x|666f72776172642064726976696e67206f78656e20746865697220666f7277617264204a61646564206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.10.15167|4x|7468656972207468656972204a61646564 +1.3.6.1.4.1.2620.1.16.23.1.1.10.28555|4|their +1.3.6.1.4.1.2620.1.16.23.1.1.10.37907|4x|61637465642064726976696e6720627574 +1.3.6.1.4.1.2620.1.16.23.1.1.10.40571|4x|7a6f6d62696573207a6f6d626965732064726976696e672074686569722062757420627574204a61646564 +1.3.6.1.4.1.2620.1.16.23.1.1.10.65094|4x|7a6f6d6269657320717561696e746c7920717561696e746c79206f78656e206163746564206b657074206163746564207468656972 +1.3.6.1.4.1.2620.1.16.23.1.1.11.923|4x|666f7277617264206163746564204a61646564204a61646564206f78656e20666f7277617264204a61646564207468656972 +1.3.6.1.4.1.2620.1.16.23.1.1.11.1098|4x|6163746564207a6f6d62696573206b657074204a61646564206f78656e206b657074206b657074 +1.3.6.1.4.1.2620.1.16.23.1.1.11.5611|4x|6b657074206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.11.5967|4x|746865697220666f7277617264204a61646564 +1.3.6.1.4.1.2620.1.16.23.1.1.11.9349|4x|7a6f6d62696573207468656972204a61646564206b657074 +1.3.6.1.4.1.2620.1.16.23.1.1.11.15167|4x|6b65707420627574207468656972206b657074206b657074 +1.3.6.1.4.1.2620.1.16.23.1.1.11.28555|4|kept +1.3.6.1.4.1.2620.1.16.23.1.1.11.37907|4x|627574206b657074206b65707420616374656420717561696e746c79207a6f6d62696573206b65707420717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.11.40571|4x|6b6570742064726976696e67 +1.3.6.1.4.1.2620.1.16.23.1.1.11.65094|4x|6f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.16.23.1.1.12.923|4x|6163746564207468656972206b657074206163746564206f78656e204a61646564 +1.3.6.1.4.1.2620.1.16.23.1.1.12.1098|4x|666f7277617264207a6f6d62696573204a6164656420666f7277617264207a6f6d62696573207a6f6d6269657320717561696e746c7920616374656420666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.12.5611|4x|666f727761726420627574206f78656e +1.3.6.1.4.1.2620.1.16.23.1.1.12.5967|4x|666f727761726420627574207468656972 +1.3.6.1.4.1.2620.1.16.23.1.1.12.9349|4x|717561696e746c7920717561696e746c79206f78656e20666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.16.23.1.1.12.15167|4x|7a6f6d62696573206f78656e20717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.23.1.1.12.28555|4x|6b65707420666f727761726420666f7277617264207a6f6d62696573206f78656e207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.16.23.1.1.12.37907|4|driving +1.3.6.1.4.1.2620.1.16.23.1.1.12.40571|4x|717561696e746c7920666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.16.23.1.1.12.65094|4x|7a6f6d626965732064726976696e6720717561696e746c7920627574 +1.3.6.1.4.1.2620.1.16.23.1.1.13.923|2|0 +1.3.6.1.4.1.2620.1.16.23.1.1.13.1098|2|1 +1.3.6.1.4.1.2620.1.16.23.1.1.13.5611|2|1 +1.3.6.1.4.1.2620.1.16.23.1.1.13.5967|2|0 +1.3.6.1.4.1.2620.1.16.23.1.1.13.9349|2|0 +1.3.6.1.4.1.2620.1.16.23.1.1.13.15167|2|0 +1.3.6.1.4.1.2620.1.16.23.1.1.13.28555|2|0 +1.3.6.1.4.1.2620.1.16.23.1.1.13.37907|2|0 +1.3.6.1.4.1.2620.1.16.23.1.1.13.40571|2|1 +1.3.6.1.4.1.2620.1.16.23.1.1.13.65094|2|1 +1.3.6.1.4.1.2620.1.17.1.2.1.1.1.0|2|5 +1.3.6.1.4.1.2620.1.17.1.2.1.1.2.0|2|6 +1.3.6.1.4.1.2620.1.17.1.2.1.1.3.0|2|26 +1.3.6.1.4.1.2620.1.17.1.2.1.1.4.0|2|27 +1.3.6.1.4.1.2620.1.17.1.2.1.1.5.0|2|26 +1.3.6.1.4.1.2620.1.17.1.2.1.2.1.0|2|14 +1.3.6.1.4.1.2620.1.17.1.2.1.2.2.0|2|29 +1.3.6.1.4.1.2620.1.17.1.2.1.3.1.0|2|5 +1.3.6.1.4.1.2620.1.17.1.2.1.3.2.0|2|29 +1.3.6.1.4.1.2620.1.17.1.2.1.3.3.0|2|6 +1.3.6.1.4.1.2620.1.17.1.2.3.1.1.0|2|16 +1.3.6.1.4.1.2620.1.17.1.2.3.2.1.0|2|23 +1.3.6.1.4.1.2620.1.17.1.3.1.1.1.0|2|20 +1.3.6.1.4.1.2620.1.17.1.3.1.2.1.0|2|24 +1.3.6.1.4.1.2620.1.17.1.3.1.2.2.0|2|5 +1.3.6.1.4.1.2620.1.17.1.3.1.2.3.0|2|17 +1.3.6.1.4.1.2620.1.17.1.3.1.3.1.0|2|6 +1.3.6.1.4.1.2620.1.17.1.3.1.4.1.0|2|8 +1.3.6.1.4.1.2620.1.17.1.3.2.1.1.0|2|6 +1.3.6.1.4.1.2620.1.17.1.3.2.2.1.0|2|6 +1.3.6.1.4.1.2620.1.17.1.3.2.3.1.0|2|25 +1.3.6.1.4.1.2620.1.17.1.3.2.4.1.0|2|17 +1.3.6.1.4.1.2620.1.17.1.3.2.5.1.0|2|26 +1.3.6.1.4.1.2620.1.17.1.3.3.1.1.0|2|2 +1.3.6.1.4.1.2620.1.17.1.3.3.2.1.0|2|14 +1.3.6.1.4.1.2620.1.17.1.3.3.3.1.0|2|20 +1.3.6.1.4.1.2620.1.17.1.3.3.4.1.0|2|2 +1.3.6.1.4.1.2620.1.17.1.3.3.5.1.0|2|7 +1.3.6.1.4.1.2620.1.17.1.3.3.6.1.0|2|3 +1.3.6.1.4.1.2620.1.24.1.1.1.1.269|66|269 +1.3.6.1.4.1.2620.1.24.1.1.1.1.1948|66|1948 +1.3.6.1.4.1.2620.1.24.1.1.1.1.3210|66|3210 +1.3.6.1.4.1.2620.1.24.1.1.1.1.5868|66|5868 +1.3.6.1.4.1.2620.1.24.1.1.1.1.6256|66|6256 +1.3.6.1.4.1.2620.1.24.1.1.1.1.14231|66|14231 +1.3.6.1.4.1.2620.1.24.1.1.1.1.26340|66|26340 +1.3.6.1.4.1.2620.1.24.1.1.1.1.28900|66|28900 +1.3.6.1.4.1.2620.1.24.1.1.1.1.34904|66|34904 +1.3.6.1.4.1.2620.1.24.1.1.1.1.62621|66|62621 +1.3.6.1.4.1.2620.1.24.1.1.1.2.269|4x|7a6f6d6269657320666f7277617264204a61646564 +1.3.6.1.4.1.2620.1.24.1.1.1.2.1948|4x|7a6f6d6269657320717561696e746c79206b65707420666f7277617264206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.2.3210|4x|7468656972204a61646564206b65707420717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.2.5868|4x|666f727761726420627574 +1.3.6.1.4.1.2620.1.24.1.1.1.2.6256|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.24.1.1.1.2.14231|4x|7468656972206b657074207468656972206163746564206b657074207468656972206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.2.26340|4x|6b657074206b657074207468656972204a61646564 +1.3.6.1.4.1.2620.1.24.1.1.1.2.28900|4x|7a6f6d6269657320627574206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.24.1.1.1.2.34904|4x|627574206b657074204a61646564206f78656e206f78656e +1.3.6.1.4.1.2620.1.24.1.1.1.2.62621|4x|62757420666f727761726420666f7277617264206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.1.1.1.3.269|4x|6f78656e20627574206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.3.1948|4x|717561696e746c7920717561696e746c7920717561696e746c7920666f7277617264207468656972206b65707420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.24.1.1.1.3.3210|4x|6b6570742061637465642064726976696e6720746865697220746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.24.1.1.1.3.5868|4x|6b65707420616374656420627574207a6f6d62696573207468656972 +1.3.6.1.4.1.2620.1.24.1.1.1.3.6256|4x|627574206163746564206f78656e20627574206b657074206f78656e20717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.24.1.1.1.3.14231|4|their +1.3.6.1.4.1.2620.1.24.1.1.1.3.26340|4x|616374656420666f7277617264204a61646564206275742064726976696e67206f78656e2074686569722064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.24.1.1.1.3.28900|4x|6b657074206b6570742064726976696e6720666f7277617264204a61646564 +1.3.6.1.4.1.2620.1.24.1.1.1.3.34904|4x|6b6570742074686569722062757420746865697220746865697220666f7277617264 +1.3.6.1.4.1.2620.1.24.1.1.1.3.62621|4x|666f727761726420666f72776172642074686569722064726976696e6720616374656420627574 +1.3.6.1.4.1.2620.1.24.1.1.1.4.269|2|21 +1.3.6.1.4.1.2620.1.24.1.1.1.4.1948|2|14 +1.3.6.1.4.1.2620.1.24.1.1.1.4.3210|2|11 +1.3.6.1.4.1.2620.1.24.1.1.1.4.5868|2|25 +1.3.6.1.4.1.2620.1.24.1.1.1.4.6256|2|4 +1.3.6.1.4.1.2620.1.24.1.1.1.4.14231|2|13 +1.3.6.1.4.1.2620.1.24.1.1.1.4.26340|2|16 +1.3.6.1.4.1.2620.1.24.1.1.1.4.28900|2|5 +1.3.6.1.4.1.2620.1.24.1.1.1.4.34904|2|24 +1.3.6.1.4.1.2620.1.24.1.1.1.4.62621|2|20 +1.3.6.1.4.1.2620.1.24.1.1.1.5.269|4x|6b6570742064726976696e6720746865697220627574 +1.3.6.1.4.1.2620.1.24.1.1.1.5.1948|4x|666f7277617264206b65707420616374656420666f7277617264206f78656e204a61646564 +1.3.6.1.4.1.2620.1.24.1.1.1.5.3210|4x|6163746564206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.5.5868|4x|717561696e746c792064726976696e67207a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.5.6256|4x|4a6164656420666f727761726420666f727761726420627574206163746564206f78656e206f78656e2064726976696e67206b657074 +1.3.6.1.4.1.2620.1.24.1.1.1.5.14231|4x|64726976696e6720717561696e746c792064726976696e6720627574207468656972206b6570742074686569722064726976696e67 +1.3.6.1.4.1.2620.1.24.1.1.1.5.26340|4x|627574206f78656e206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.5.28900|4x|6f78656e206275742064726976696e67 +1.3.6.1.4.1.2620.1.24.1.1.1.5.34904|4x|717561696e746c79207468656972206b6570742064726976696e67206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.24.1.1.1.5.62621|4x|6163746564207a6f6d6269657320666f7277617264206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.24.1.1.1.6.269|4x|7a6f6d6269657320717561696e746c792061637465642064726976696e67207a6f6d626965732064726976696e67 +1.3.6.1.4.1.2620.1.24.1.1.1.6.1948|4x|7a6f6d626965732062757420627574 +1.3.6.1.4.1.2620.1.24.1.1.1.6.3210|4x|62757420627574204a61646564206163746564206163746564206b6570742064726976696e6720627574204a61646564 +1.3.6.1.4.1.2620.1.24.1.1.1.6.5868|4x|666f7277617264207a6f6d62696573207a6f6d62696573206163746564206b657074206f78656e20666f7277617264206163746564206b657074 +1.3.6.1.4.1.2620.1.24.1.1.1.6.6256|4x|7a6f6d62696573207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.1.1.1.6.14231|4x|7a6f6d62696573206163746564207a6f6d6269657320666f7277617264206f78656e206163746564206f78656e +1.3.6.1.4.1.2620.1.24.1.1.1.6.26340|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.24.1.1.1.6.28900|4x|6163746564206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.6.34904|4x|6163746564206163746564206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.6.62621|4x|6b65707420717561696e746c7920717561696e746c7920717561696e746c79206163746564206163746564204a61646564207468656972 +1.3.6.1.4.1.2620.1.24.1.1.1.7.269|2|2 +1.3.6.1.4.1.2620.1.24.1.1.1.7.1948|2|31 +1.3.6.1.4.1.2620.1.24.1.1.1.7.3210|2|3 +1.3.6.1.4.1.2620.1.24.1.1.1.7.5868|2|24 +1.3.6.1.4.1.2620.1.24.1.1.1.7.6256|2|2 +1.3.6.1.4.1.2620.1.24.1.1.1.7.14231|2|1 +1.3.6.1.4.1.2620.1.24.1.1.1.7.26340|2|9 +1.3.6.1.4.1.2620.1.24.1.1.1.7.28900|2|20 +1.3.6.1.4.1.2620.1.24.1.1.1.7.34904|2|28 +1.3.6.1.4.1.2620.1.24.1.1.1.7.62621|2|1 +1.3.6.1.4.1.2620.1.24.1.1.1.8.269|2|26 +1.3.6.1.4.1.2620.1.24.1.1.1.8.1948|2|29 +1.3.6.1.4.1.2620.1.24.1.1.1.8.3210|2|17 +1.3.6.1.4.1.2620.1.24.1.1.1.8.5868|2|3 +1.3.6.1.4.1.2620.1.24.1.1.1.8.6256|2|31 +1.3.6.1.4.1.2620.1.24.1.1.1.8.14231|2|2 +1.3.6.1.4.1.2620.1.24.1.1.1.8.26340|2|30 +1.3.6.1.4.1.2620.1.24.1.1.1.8.28900|2|29 +1.3.6.1.4.1.2620.1.24.1.1.1.8.34904|2|2 +1.3.6.1.4.1.2620.1.24.1.1.1.8.62621|2|21 +1.3.6.1.4.1.2620.1.24.1.1.1.9.269|4x|627574207468656972204a61646564207a6f6d62696573207468656972207468656972 +1.3.6.1.4.1.2620.1.24.1.1.1.9.1948|4x|717561696e746c792064726976696e67207468656972204a6164656420666f72776172642064726976696e67206b65707420746865697220627574 +1.3.6.1.4.1.2620.1.24.1.1.1.9.3210|4x|7a6f6d62696573206f78656e2064726976696e67206163746564206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.9.5868|4x|64726976696e67206275742064726976696e6720717561696e746c7920666f7277617264207a6f6d62696573206f78656e206f78656e206b657074 +1.3.6.1.4.1.2620.1.24.1.1.1.9.6256|4|acted +1.3.6.1.4.1.2620.1.24.1.1.1.9.14231|4x|666f7277617264206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.9.26340|4x|717561696e746c7920666f7277617264206b657074204a6164656420627574204a61646564207468656972207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.1.1.1.9.28900|4x|627574206f78656e +1.3.6.1.4.1.2620.1.24.1.1.1.9.34904|4x|746865697220666f727761726420717561696e746c79206f78656e204a61646564 +1.3.6.1.4.1.2620.1.24.1.1.1.9.62621|4x|717561696e746c79207a6f6d62696573206f78656e2064726976696e67207468656972207468656972 +1.3.6.1.4.1.2620.1.24.1.1.1.10.269|4x|6275742064726976696e67207468656972206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.10.1948|4x|64726976696e672062757420746865697220666f727761726420627574 +1.3.6.1.4.1.2620.1.24.1.1.1.10.3210|4x|6163746564207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.24.1.1.1.10.5868|4x|64726976696e672064726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.24.1.1.1.10.6256|4x|4a616465642064726976696e6720627574 +1.3.6.1.4.1.2620.1.24.1.1.1.10.14231|4x|6b657074204a61646564206f78656e2064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.24.1.1.1.10.26340|4x|64726976696e67206275742064726976696e67207a6f6d6269657320717561696e746c79206163746564206f78656e +1.3.6.1.4.1.2620.1.24.1.1.1.10.28900|4x|6b65707420717561696e746c7920666f727761726420627574206f78656e2064726976696e672062757420717561696e746c79 +1.3.6.1.4.1.2620.1.24.1.1.1.10.34904|4x|7a6f6d62696573206b657074204a61646564207468656972206b657074 +1.3.6.1.4.1.2620.1.24.1.1.1.10.62621|4x|7a6f6d62696573204a6164656420666f7277617264207468656972204a61646564 +1.3.6.1.4.1.2620.1.24.2.1.1.1.11582|66|11582 +1.3.6.1.4.1.2620.1.24.2.1.1.1.17656|66|17656 +1.3.6.1.4.1.2620.1.24.2.1.1.1.17770|66|17770 +1.3.6.1.4.1.2620.1.24.2.1.1.1.20110|66|20110 +1.3.6.1.4.1.2620.1.24.2.1.1.1.24937|66|24937 +1.3.6.1.4.1.2620.1.24.2.1.1.1.27263|66|27263 +1.3.6.1.4.1.2620.1.24.2.1.1.1.27879|66|27879 +1.3.6.1.4.1.2620.1.24.2.1.1.1.34522|66|34522 +1.3.6.1.4.1.2620.1.24.2.1.1.1.39350|66|39350 +1.3.6.1.4.1.2620.1.24.2.1.1.1.56551|66|56551 +1.3.6.1.4.1.2620.1.24.2.1.1.2.11582|4x|62757420627574 +1.3.6.1.4.1.2620.1.24.2.1.1.2.17656|4x|6f78656e20666f7277617264206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.24.2.1.1.2.17770|4x|7a6f6d62696573206f78656e206163746564204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.24.2.1.1.2.20110|4x|627574207a6f6d62696573207468656972206163746564206b65707420717561696e746c79204a61646564 +1.3.6.1.4.1.2620.1.24.2.1.1.2.24937|4x|666f7277617264206b657074204a6164656420666f727761726420616374656420616374656420616374656420717561696e746c7920627574 +1.3.6.1.4.1.2620.1.24.2.1.1.2.27263|4x|7468656972206b65707420746865697220666f7277617264204a6164656420746865697220746865697220627574 +1.3.6.1.4.1.2620.1.24.2.1.1.2.27879|4x|717561696e746c792062757420627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.2.1.1.2.34522|4x|4a61646564207468656972206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.24.2.1.1.2.39350|4x|7a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.24.2.1.1.2.56551|4x|7468656972206f78656e207468656972207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.2.1.1.3.11582|2|25 +1.3.6.1.4.1.2620.1.24.2.1.1.3.17656|2|25 +1.3.6.1.4.1.2620.1.24.2.1.1.3.17770|2|7 +1.3.6.1.4.1.2620.1.24.2.1.1.3.20110|2|1 +1.3.6.1.4.1.2620.1.24.2.1.1.3.24937|2|20 +1.3.6.1.4.1.2620.1.24.2.1.1.3.27263|2|27 +1.3.6.1.4.1.2620.1.24.2.1.1.3.27879|2|3 +1.3.6.1.4.1.2620.1.24.2.1.1.3.34522|2|25 +1.3.6.1.4.1.2620.1.24.2.1.1.3.39350|2|6 +1.3.6.1.4.1.2620.1.24.2.1.1.3.56551|2|10 +1.3.6.1.4.1.2620.1.24.3.1.1.1.16028|66|16028 +1.3.6.1.4.1.2620.1.24.3.1.1.1.16615|66|16615 +1.3.6.1.4.1.2620.1.24.3.1.1.1.17531|66|17531 +1.3.6.1.4.1.2620.1.24.3.1.1.1.27810|66|27810 +1.3.6.1.4.1.2620.1.24.3.1.1.1.29253|66|29253 +1.3.6.1.4.1.2620.1.24.3.1.1.1.31826|66|31826 +1.3.6.1.4.1.2620.1.24.3.1.1.1.46978|66|46978 +1.3.6.1.4.1.2620.1.24.3.1.1.1.53043|66|53043 +1.3.6.1.4.1.2620.1.24.3.1.1.1.53046|66|53046 +1.3.6.1.4.1.2620.1.24.3.1.1.1.54627|66|54627 +1.3.6.1.4.1.2620.1.24.3.1.1.2.16028|4x|627574206163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.3.1.1.2.16615|4x|666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.24.3.1.1.2.17531|4x|7a6f6d62696573206b657074206163746564206f78656e20627574204a61646564206163746564 +1.3.6.1.4.1.2620.1.24.3.1.1.2.27810|4x|6b657074206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.24.3.1.1.2.29253|4x|666f727761726420666f727761726420616374656420627574206b657074204a61646564207a6f6d62696573207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.24.3.1.1.2.31826|4x|6163746564204a6164656420627574206b657074206b657074206163746564204a61646564204a61646564 +1.3.6.1.4.1.2620.1.24.3.1.1.2.46978|4x|7468656972207a6f6d62696573206b6570742064726976696e672064726976696e67206f78656e +1.3.6.1.4.1.2620.1.24.3.1.1.2.53043|4x|62757420666f7277617264206f78656e207468656972204a6164656420717561696e746c79 +1.3.6.1.4.1.2620.1.24.3.1.1.2.53046|4x|7a6f6d6269657320666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.24.3.1.1.2.54627|4x|6f78656e20717561696e746c79206f78656e206163746564207a6f6d62696573206b657074206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.24.3.1.1.3.16028|2|23 +1.3.6.1.4.1.2620.1.24.3.1.1.3.16615|2|0 +1.3.6.1.4.1.2620.1.24.3.1.1.3.17531|2|22 +1.3.6.1.4.1.2620.1.24.3.1.1.3.27810|2|6 +1.3.6.1.4.1.2620.1.24.3.1.1.3.29253|2|30 +1.3.6.1.4.1.2620.1.24.3.1.1.3.31826|2|18 +1.3.6.1.4.1.2620.1.24.3.1.1.3.46978|2|4 +1.3.6.1.4.1.2620.1.24.3.1.1.3.53043|2|20 +1.3.6.1.4.1.2620.1.24.3.1.1.3.53046|2|2 +1.3.6.1.4.1.2620.1.24.3.1.1.3.54627|2|7 +1.3.6.1.4.1.2620.1.24.4.1.1.0|2|30 +1.3.6.1.4.1.2620.1.24.4.1.2.0|4x|6f78656e2064726976696e67207a6f6d6269657320717561696e746c79207468656972206163746564 +1.3.6.1.4.1.2620.1.24.4.1.3.0|2|3 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.546|66|546 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.7578|66|7578 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.9598|66|9598 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.14834|66|14834 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.17795|66|17795 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.18694|66|18694 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.45179|66|45179 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.51066|66|51066 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.54735|66|54735 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.57938|66|57938 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.546|4x|746865697220627574207468656972206163746564207468656972204a61646564 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.7578|4x|6163746564206b657074204a61646564207a6f6d6269657320717561696e746c7920627574206163746564 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.9598|4x|62757420666f727761726420717561696e746c79204a61646564 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.14834|4x|7a6f6d626965732062757420746865697220666f7277617264 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.17795|4x|74686569722064726976696e672064726976696e6720627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.18694|4x|6b657074204a6164656420717561696e746c79206b657074207468656972207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.45179|4x|717561696e746c79206163746564204a61646564204a61646564 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.51066|4x|616374656420616374656420616374656420666f7277617264207468656972206f78656e206f78656e206163746564206163746564 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.54735|4x|6f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.57938|4x|4a61646564206f78656e20717561696e746c79206163746564206b65707420616374656420717561696e746c7920627574206f78656e +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.546|2|3 +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.7578|2|0 +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.9598|2|4 +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.14834|2|24 +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.17795|2|26 +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.18694|2|21 +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.45179|2|21 +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.51066|2|9 +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.54735|2|10 +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.57938|2|20 +1.3.6.1.4.1.2620.1.24.4.2.1.0|2|29 +1.3.6.1.4.1.2620.1.24.4.2.2.0|4|oxen +1.3.6.1.4.1.2620.1.24.4.2.3.0|2|9 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.283|66|283 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.6462|66|6462 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.8564|66|8564 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.18811|66|18811 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.28827|66|28827 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.33621|66|33621 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.42149|66|42149 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.45968|66|45968 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.55142|66|55142 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.55860|66|55860 +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.283|4|quaintly +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.6462|4|acted +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.8564|4x|6f78656e20717561696e746c79206f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.18811|4x|61637465642062757420627574206f78656e207468656972207468656972206163746564206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.28827|4x|64726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.33621|4x|64726976696e6720717561696e746c79204a616465642064726976696e67206f78656e206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.42149|4x|64726976696e672064726976696e67206f78656e207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.45968|4x|7468656972206f78656e20746865697220666f7277617264206f78656e206b65707420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.55142|4x|6f78656e207468656972206275742064726976696e672064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.55860|4x|616374656420717561696e746c7920717561696e746c79206f78656e2064726976696e6720717561696e746c79206f78656e206163746564 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.283|2|26 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.6462|2|29 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.8564|2|17 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.18811|2|12 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.28827|2|31 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.33621|2|5 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.42149|2|20 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.45968|2|31 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.55142|2|13 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.55860|2|31 +1.3.6.1.4.1.2620.1.24.4.3.1.0|2|13 +1.3.6.1.4.1.2620.1.24.4.3.2.0|4x|746865697220717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.24.4.3.3.0|2|18 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.2572|66|2572 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.2835|66|2835 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.7698|66|7698 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.24801|66|24801 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.25948|66|25948 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.25997|66|25997 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.52762|66|52762 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.55152|66|55152 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.56667|66|56667 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.61890|66|61890 +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.2572|4x|6b657074206f78656e206b65707420666f7277617264206275742064726976696e6720627574 +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.2835|4|acted +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.7698|4x|7468656972204a616465642062757420616374656420627574204a61646564207a6f6d62696573204a61646564207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.24801|4|acted +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.25948|4|quaintly +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.25997|4x|4a6164656420666f727761726420666f7277617264206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.52762|4|forward +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.55152|4x|6f78656e206b65707420627574206f78656e206f78656e2064726976696e67206163746564 +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.56667|4x|6f78656e207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.61890|4x|616374656420717561696e746c79206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.2572|2|19 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.2835|2|27 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.7698|2|11 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.24801|2|5 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.25948|2|3 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.25997|2|10 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.52762|2|26 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.55152|2|23 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.56667|2|7 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.61890|2|27 +1.3.6.1.4.1.2620.1.24.4.4.1.0|2|10 +1.3.6.1.4.1.2620.1.24.4.4.2.0|4x|6b65707420717561696e746c792064726976696e6720717561696e746c7920717561696e746c79204a61646564 +1.3.6.1.4.1.2620.1.24.4.4.3.0|2|26 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.2664|66|2664 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.5962|66|5962 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.8559|66|8559 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.14790|66|14790 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.31680|66|31680 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.41368|66|41368 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.42943|66|42943 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.55415|66|55415 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.57778|66|57778 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.61103|66|61103 +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.2664|4x|616374656420717561696e746c79206f78656e207468656972 +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.5962|4x|717561696e746c79204a61646564204a61646564207468656972 +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.8559|4x|7a6f6d626965732074686569722064726976696e67207468656972204a61646564 +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.14790|4x|7a6f6d6269657320666f7277617264206b657074206163746564206f78656e +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.31680|4x|666f727761726420666f727761726420717561696e746c7920717561696e746c79204a6164656420627574207a6f6d62696573207468656972207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.41368|4x|666f7277617264206f78656e20717561696e746c792064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.42943|4x|6163746564207a6f6d62696573206b65707420627574206f78656e20666f727761726420627574206163746564 +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.55415|4x|6275742064726976696e67207a6f6d62696573204a61646564204a6164656420717561696e746c79207a6f6d62696573206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.57778|4x|616374656420717561696e746c79206b657074206275742064726976696e67 +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.61103|4x|6163746564206163746564 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.2664|2|9 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.5962|2|18 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.8559|2|26 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.14790|2|16 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.31680|2|10 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.41368|2|1 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.42943|2|28 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.55415|2|8 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.57778|2|22 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.61103|2|20 +1.3.6.1.4.1.2620.1.24.101.0|2|28 +1.3.6.1.4.1.2620.1.24.102.0|4x|4a6164656420746865697220717561696e746c7920666f727761726420627574206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.103.0|4x|666f72776172642064726976696e6720666f727761726420616374656420627574206163746564 +1.3.6.1.4.1.2620.1.25.1.1.0|2|6 +1.3.6.1.4.1.2620.1.25.1.2.0|2|18 +1.3.6.1.4.1.2620.1.25.1.3.0|2|31 +1.3.6.1.4.1.2620.1.25.1.4.0|4x|7468656972206f78656e206275742062757420717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.25.1.5.0|4|acted +1.3.6.1.4.1.2620.1.25.1.6.0|4x|717561696e746c79206163746564206f78656e20717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.25.1.7.0|2|14 +1.3.6.1.4.1.2620.1.25.1.8.0|4x|6b65707420627574204a6164656420717561696e746c792064726976696e6720717561696e746c7920666f727761726420717561696e746c7920717561696e746c79 +1.3.6.1.4.1.2620.1.25.1.9.1.1.7705|66|7705 +1.3.6.1.4.1.2620.1.25.1.9.1.1.11293|66|11293 +1.3.6.1.4.1.2620.1.25.1.9.1.1.16671|66|16671 +1.3.6.1.4.1.2620.1.25.1.9.1.1.18079|66|18079 +1.3.6.1.4.1.2620.1.25.1.9.1.1.25138|66|25138 +1.3.6.1.4.1.2620.1.25.1.9.1.1.27306|66|27306 +1.3.6.1.4.1.2620.1.25.1.9.1.1.30860|66|30860 +1.3.6.1.4.1.2620.1.25.1.9.1.1.33843|66|33843 +1.3.6.1.4.1.2620.1.25.1.9.1.1.48121|66|48121 +1.3.6.1.4.1.2620.1.25.1.9.1.1.62988|66|62988 +1.3.6.1.4.1.2620.1.25.1.9.1.2.7705|4x|7468656972206163746564204a616465642062757420666f72776172642064726976696e672064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.1.9.1.2.11293|4x|6b65707420666f7277617264207a6f6d6269657320627574207a6f6d62696573207468656972204a61646564 +1.3.6.1.4.1.2620.1.25.1.9.1.2.16671|4x|6f78656e2064726976696e67204a6164656420717561696e746c792061637465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.25.1.9.1.2.18079|4x|64726976696e67207468656972204a616465642064726976696e67207a6f6d62696573207468656972206163746564 +1.3.6.1.4.1.2620.1.25.1.9.1.2.25138|4|forward +1.3.6.1.4.1.2620.1.25.1.9.1.2.27306|4x|746865697220627574204a616465642064726976696e67204a61646564207a6f6d62696573207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.1.9.1.2.30860|4x|627574206f78656e206f78656e206f78656e2061637465642061637465642064726976696e67206163746564 +1.3.6.1.4.1.2620.1.25.1.9.1.2.33843|4x|717561696e746c7920746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.25.1.9.1.2.48121|4x|717561696e746c79206f78656e207468656972206f78656e206163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.1.9.1.2.62988|4x|627574206f78656e +1.3.6.1.4.1.2620.1.25.1.9.1.3.7705|4x|4a61646564206163746564206275742064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.25.1.9.1.3.11293|4x|717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.25.1.9.1.3.16671|4|forward +1.3.6.1.4.1.2620.1.25.1.9.1.3.18079|4x|7a6f6d62696573206b65707420746865697220616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.25.1.9.1.3.25138|4x|666f72776172642064726976696e6720717561696e746c7920627574 +1.3.6.1.4.1.2620.1.25.1.9.1.3.27306|4x|4a616465642062757420717561696e746c7920627574207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.25.1.9.1.3.30860|4x|7468656972207a6f6d62696573204a61646564204a61646564 +1.3.6.1.4.1.2620.1.25.1.9.1.3.33843|4x|6f78656e207a6f6d626965732062757420666f7277617264206f78656e207468656972206b65707420627574 +1.3.6.1.4.1.2620.1.25.1.9.1.3.48121|4x|6b657074204a61646564207a6f6d6269657320746865697220666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.25.1.9.1.3.62988|4x|6275742064726976696e67206163746564204a61646564206b65707420627574 +1.3.6.1.4.1.2620.1.25.1.9.1.4.7705|2|2 +1.3.6.1.4.1.2620.1.25.1.9.1.4.11293|2|26 +1.3.6.1.4.1.2620.1.25.1.9.1.4.16671|2|22 +1.3.6.1.4.1.2620.1.25.1.9.1.4.18079|2|11 +1.3.6.1.4.1.2620.1.25.1.9.1.4.25138|2|8 +1.3.6.1.4.1.2620.1.25.1.9.1.4.27306|2|2 +1.3.6.1.4.1.2620.1.25.1.9.1.4.30860|2|13 +1.3.6.1.4.1.2620.1.25.1.9.1.4.33843|2|2 +1.3.6.1.4.1.2620.1.25.1.9.1.4.48121|2|19 +1.3.6.1.4.1.2620.1.25.1.9.1.4.62988|2|27 +1.3.6.1.4.1.2620.1.25.1.9.1.5.7705|2|9 +1.3.6.1.4.1.2620.1.25.1.9.1.5.11293|2|23 +1.3.6.1.4.1.2620.1.25.1.9.1.5.16671|2|5 +1.3.6.1.4.1.2620.1.25.1.9.1.5.18079|2|4 +1.3.6.1.4.1.2620.1.25.1.9.1.5.25138|2|13 +1.3.6.1.4.1.2620.1.25.1.9.1.5.27306|2|4 +1.3.6.1.4.1.2620.1.25.1.9.1.5.30860|2|6 +1.3.6.1.4.1.2620.1.25.1.9.1.5.33843|2|7 +1.3.6.1.4.1.2620.1.25.1.9.1.5.48121|2|0 +1.3.6.1.4.1.2620.1.25.1.9.1.5.62988|2|1 +1.3.6.1.4.1.2620.1.25.1.10.0|2|24 +1.3.6.1.4.1.2620.1.25.1.101.0|2|27 +1.3.6.1.4.1.2620.1.25.1.102.0|4x|717561696e746c79206f78656e206b65707420717561696e746c79204a616465642061637465642062757420666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.25.1.103.0|4x|4a6164656420627574206f78656e207468656972 +1.3.6.1.4.1.2620.1.25.2.1.0|2|18 +1.3.6.1.4.1.2620.1.25.2.2.0|2|8 +1.3.6.1.4.1.2620.1.25.2.3.0|4x|6f78656e2064726976696e6720746865697220666f7277617264204a616465642062757420616374656420627574206f78656e +1.3.6.1.4.1.2620.1.25.2.4.1.1.448|66|448 +1.3.6.1.4.1.2620.1.25.2.4.1.1.6521|66|6521 +1.3.6.1.4.1.2620.1.25.2.4.1.1.6638|66|6638 +1.3.6.1.4.1.2620.1.25.2.4.1.1.11103|66|11103 +1.3.6.1.4.1.2620.1.25.2.4.1.1.13775|66|13775 +1.3.6.1.4.1.2620.1.25.2.4.1.1.28356|66|28356 +1.3.6.1.4.1.2620.1.25.2.4.1.1.36624|66|36624 +1.3.6.1.4.1.2620.1.25.2.4.1.1.49289|66|49289 +1.3.6.1.4.1.2620.1.25.2.4.1.1.52103|66|52103 +1.3.6.1.4.1.2620.1.25.2.4.1.1.54649|66|54649 +1.3.6.1.4.1.2620.1.25.2.4.1.2.448|4x|61637465642062757420666f7277617264206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.2.6521|4|oxen +1.3.6.1.4.1.2620.1.25.2.4.1.2.6638|4x|717561696e746c79207a6f6d62696573204a61646564206f78656e20666f7277617264206f78656e +1.3.6.1.4.1.2620.1.25.2.4.1.2.11103|4x|666f727761726420666f72776172642064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.2.13775|4|kept +1.3.6.1.4.1.2620.1.25.2.4.1.2.28356|4x|7a6f6d6269657320717561696e746c792064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.2.36624|4x|6b657074206f78656e2064726976696e67206b65707420717561696e746c79206163746564207a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.2.49289|4x|717561696e746c79207468656972204a61646564206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.2.52103|4x|6b657074206f78656e20666f7277617264206f78656e206f78656e2064726976696e672062757420627574 +1.3.6.1.4.1.2620.1.25.2.4.1.2.54649|4x|7468656972204a61646564206f78656e20717561696e746c79204a61646564207a6f6d6269657320717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.3.448|4x|4a616465642074686569722064726976696e6720666f7277617264206f78656e20666f7277617264207a6f6d6269657320717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.3.6521|4x|627574206275742064726976696e6720746865697220666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.3.6638|4x|6163746564207468656972204a61646564206b657074 +1.3.6.1.4.1.2620.1.25.2.4.1.3.11103|4x|746865697220616374656420717561696e746c79204a61646564206275742062757420666f7277617264206f78656e +1.3.6.1.4.1.2620.1.25.2.4.1.3.13775|4x|717561696e746c79204a6164656420717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.25.2.4.1.3.28356|4x|666f7277617264207a6f6d62696573204a61646564207468656972 +1.3.6.1.4.1.2620.1.25.2.4.1.3.36624|4x|7a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.3.49289|4x|627574206f78656e20627574206f78656e2062757420666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.3.52103|4|oxen +1.3.6.1.4.1.2620.1.25.2.4.1.3.54649|4|driving +1.3.6.1.4.1.2620.1.25.2.4.1.4.448|4x|666f727761726420717561696e746c79206163746564206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.25.2.4.1.4.6521|4x|7a6f6d62696573207a6f6d62696573206b657074206b6570742064726976696e6720616374656420666f7277617264206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.4.6638|4x|64726976696e672064726976696e672061637465642064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.4.11103|4x|62757420627574204a6164656420666f727761726420666f72776172642062757420717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.25.2.4.1.4.13775|4x|64726976696e672064726976696e67207468656972 +1.3.6.1.4.1.2620.1.25.2.4.1.4.28356|4x|6163746564206f78656e20717561696e746c792064726976696e67207a6f6d626965732074686569722064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.4.36624|4x|717561696e746c7920717561696e746c79207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.4.49289|4x|627574207468656972 +1.3.6.1.4.1.2620.1.25.2.4.1.4.52103|4x|62757420666f727761726420616374656420666f7277617264206f78656e20717561696e746c7920616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.25.2.4.1.4.54649|4x|6275742064726976696e6720627574 +1.3.6.1.4.1.2620.1.25.2.4.1.5.448|2|13 +1.3.6.1.4.1.2620.1.25.2.4.1.5.6521|2|25 +1.3.6.1.4.1.2620.1.25.2.4.1.5.6638|2|6 +1.3.6.1.4.1.2620.1.25.2.4.1.5.11103|2|27 +1.3.6.1.4.1.2620.1.25.2.4.1.5.13775|2|20 +1.3.6.1.4.1.2620.1.25.2.4.1.5.28356|2|31 +1.3.6.1.4.1.2620.1.25.2.4.1.5.36624|2|1 +1.3.6.1.4.1.2620.1.25.2.4.1.5.49289|2|25 +1.3.6.1.4.1.2620.1.25.2.4.1.5.52103|2|0 +1.3.6.1.4.1.2620.1.25.2.4.1.5.54649|2|26 +1.3.6.1.4.1.2620.1.25.2.4.1.6.448|4|oxen +1.3.6.1.4.1.2620.1.25.2.4.1.6.6521|4x|4a6164656420746865697220627574206f78656e204a61646564206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.6.6638|4x|6163746564207a6f6d626965732074686569722064726976696e67206b6570742064726976696e67206f78656e20616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.25.2.4.1.6.11103|4x|717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.6.13775|4x|6b657074206b657074206b65707420746865697220627574206b657074207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.25.2.4.1.6.28356|4x|6f78656e206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.6.36624|4x|627574206b65707420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.6.49289|4|kept +1.3.6.1.4.1.2620.1.25.2.4.1.6.52103|4x|717561696e746c7920717561696e746c79207a6f6d6269657320717561696e746c792062757420746865697220717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.6.54649|4x|4a61646564204a6164656420666f727761726420717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.7.448|4|oxen +1.3.6.1.4.1.2620.1.25.2.4.1.7.6521|4x|6f78656e20717561696e746c7920717561696e746c792064726976696e67206b657074204a61646564 +1.3.6.1.4.1.2620.1.25.2.4.1.7.6638|4x|4a6164656420717561696e746c792074686569722064726976696e67207a6f6d626965732064726976696e672064726976696e6720746865697220666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.7.11103|4x|746865697220717561696e746c792064726976696e6720616374656420717561696e746c792062757420717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.7.13775|4x|6f78656e20616374656420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.25.2.4.1.7.28356|4x|64726976696e67207a6f6d62696573207468656972206b6570742061637465642062757420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.25.2.4.1.7.36624|4x|7a6f6d626965732064726976696e672062757420717561696e746c79204a616465642064726976696e67207a6f6d62696573207468656972 +1.3.6.1.4.1.2620.1.25.2.4.1.7.49289|4x|64726976696e672064726976696e6720666f7277617264207468656972207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.7.52103|4x|666f7277617264204a61646564206f78656e +1.3.6.1.4.1.2620.1.25.2.4.1.7.54649|4x|6f78656e2064726976696e672064726976696e67206f78656e20616374656420746865697220616374656420666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.8.448|2|26 +1.3.6.1.4.1.2620.1.25.2.4.1.8.6521|2|8 +1.3.6.1.4.1.2620.1.25.2.4.1.8.6638|2|25 +1.3.6.1.4.1.2620.1.25.2.4.1.8.11103|2|4 +1.3.6.1.4.1.2620.1.25.2.4.1.8.13775|2|31 +1.3.6.1.4.1.2620.1.25.2.4.1.8.28356|2|31 +1.3.6.1.4.1.2620.1.25.2.4.1.8.36624|2|26 +1.3.6.1.4.1.2620.1.25.2.4.1.8.49289|2|22 +1.3.6.1.4.1.2620.1.25.2.4.1.8.52103|2|31 +1.3.6.1.4.1.2620.1.25.2.4.1.8.54649|2|14 +1.3.6.1.4.1.2620.1.25.2.4.1.9.448|4x|7468656972204a61646564206b65707420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.9.6521|4x|7a6f6d626965732062757420666f727761726420627574204a61646564204a61646564207468656972204a61646564207468656972 +1.3.6.1.4.1.2620.1.25.2.4.1.9.6638|4x|74686569722064726976696e67206f78656e204a61646564206f78656e206f78656e204a61646564206f78656e +1.3.6.1.4.1.2620.1.25.2.4.1.9.11103|4x|666f7277617264206b657074206f78656e20666f7277617264206b6570742061637465642064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.9.13775|4|driving +1.3.6.1.4.1.2620.1.25.2.4.1.9.28356|4x|6f78656e20616374656420666f727761726420627574 +1.3.6.1.4.1.2620.1.25.2.4.1.9.36624|4x|7a6f6d62696573206163746564207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.25.2.4.1.9.49289|4x|6b6570742064726976696e67206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.9.52103|4x|61637465642064726976696e6720717561696e746c7920627574206b657074204a61646564204a61646564204a61646564207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.9.54649|4|but +1.3.6.1.4.1.2620.1.25.2.4.1.10.448|4x|4a61646564207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.10.6521|4x|62757420666f72776172642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.10.6638|4x|666f727761726420717561696e746c79206163746564204a616465642062757420717561696e746c79204a61646564207a6f6d62696573204a61646564 +1.3.6.1.4.1.2620.1.25.2.4.1.10.11103|4x|746865697220666f7277617264206163746564207468656972207468656972206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.25.2.4.1.10.13775|4x|6b657074206f78656e20627574204a61646564206b657074204a6164656420627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.10.28356|4x|717561696e746c7920746865697220666f727761726420717561696e746c79207a6f6d62696573204a61646564206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.10.36624|4x|74686569722064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.10.49289|4x|7468656972206f78656e207a6f6d62696573206b657074204a61646564207a6f6d62696573207468656972 +1.3.6.1.4.1.2620.1.25.2.4.1.10.52103|4x|627574206b65707420666f7277617264206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.25.2.4.1.10.54649|4x|717561696e746c7920616374656420746865697220666f7277617264204a616465642064726976696e672074686569722064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.11.448|4x|6f78656e20666f727761726420717561696e746c79206f78656e206b65707420717561696e746c792062757420627574 +1.3.6.1.4.1.2620.1.25.2.4.1.11.6521|4x|666f72776172642064726976696e67207468656972207468656972 +1.3.6.1.4.1.2620.1.25.2.4.1.11.6638|4x|64726976696e67206b65707420717561696e746c7920717561696e746c7920666f72776172642064726976696e67206b65707420627574 +1.3.6.1.4.1.2620.1.25.2.4.1.11.11103|4x|61637465642061637465642062757420717561696e746c79204a61646564206b657074206163746564204a61646564206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.11.13775|4x|4a616465642064726976696e67206f78656e206f78656e206b65707420627574 +1.3.6.1.4.1.2620.1.25.2.4.1.11.28356|4x|6b657074206163746564204a61646564204a6164656420666f727761726420717561696e746c792064726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.25.2.4.1.11.36624|4|but +1.3.6.1.4.1.2620.1.25.2.4.1.11.49289|4x|64726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.25.2.4.1.11.52103|4x|4a61646564204a616465642064726976696e67207468656972204a61646564 +1.3.6.1.4.1.2620.1.25.2.4.1.11.54649|4x|4a61646564204a61646564 +1.3.6.1.4.1.2620.1.25.2.4.1.12.448|4x|717561696e746c79207a6f6d626965732064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.12.6521|4x|6f78656e206163746564206b657074 +1.3.6.1.4.1.2620.1.25.2.4.1.12.6638|4x|6163746564206163746564206b65707420627574 +1.3.6.1.4.1.2620.1.25.2.4.1.12.11103|4x|64726976696e6720746865697220717561696e746c7920627574204a6164656420717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.25.2.4.1.12.13775|4|but +1.3.6.1.4.1.2620.1.25.2.4.1.12.28356|4x|62757420717561696e746c7920627574206f78656e206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.12.36624|4x|627574206f78656e207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.25.2.4.1.12.49289|4x|6f78656e204a61646564206b657074206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.12.52103|4x|6f78656e204a61646564207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.12.54649|4x|4a616465642064726976696e672064726976696e672064726976696e67206b657074206f78656e206b65707420627574 +1.3.6.1.4.1.2620.1.25.2.4.1.13.448|4x|6f78656e20666f7277617264206b65707420717561696e746c792074686569722061637465642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.13.6521|4x|6275742064726976696e672062757420717561696e746c7920627574 +1.3.6.1.4.1.2620.1.25.2.4.1.13.6638|4x|6b657074206f78656e206275742064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.13.11103|4|but +1.3.6.1.4.1.2620.1.25.2.4.1.13.13775|4x|717561696e746c7920717561696e746c79206163746564207a6f6d6269657320717561696e746c7920616374656420666f7277617264206f78656e +1.3.6.1.4.1.2620.1.25.2.4.1.13.28356|4x|7a6f6d62696573206f78656e20627574206163746564206f78656e2064726976696e67206b657074204a61646564206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.13.36624|4|Jaded +1.3.6.1.4.1.2620.1.25.2.4.1.13.49289|4x|61637465642064726976696e67206b65707420717561696e746c792064726976696e67204a61646564206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.13.52103|4x|64726976696e6720627574206b657074206b657074206b657074206b65707420746865697220627574206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.13.54649|4x|4a6164656420717561696e746c79206f78656e20717561696e746c792064726976696e67207a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.25.2.5.0|2|0 +1.3.6.1.4.1.2620.1.25.2.101.0|2|2 +1.3.6.1.4.1.2620.1.25.2.102.0|4x|6f78656e2062757420627574206163746564207a6f6d62696573206f78656e206b6570742064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.25.2.103.0|4x|6f78656e206b657074206f78656e20627574207468656972206163746564206f78656e206f78656e +1.3.6.1.4.1.2620.1.29.1.1.0|4x|6f78656e206f78656e20666f7277617264207a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.2620.1.29.1.2.0|4x|6b657074206275742064726976696e67206f78656e20717561696e746c79207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.29.1.3.0|2|21 +1.3.6.1.4.1.2620.1.29.1.4.0|2|22 +1.3.6.1.4.1.2620.1.29.1.5.0|4x|666f727761726420717561696e746c79207468656972206b65707420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.29.1.6.0|2|8 +1.3.6.1.4.1.2620.1.29.1.7.0|4x|6f78656e207a6f6d62696573207468656972206163746564 +1.3.6.1.4.1.2620.1.29.1.8.0|4|kept +1.3.6.1.4.1.2620.1.29.2.1.0|4x|6f78656e207a6f6d6269657320666f727761726420666f7277617264204a61646564206163746564206163746564206163746564207468656972 +1.3.6.1.4.1.2620.1.29.2.2.0|2|29 +1.3.6.1.4.1.2620.1.29.2.3.0|2|30 +1.3.6.1.4.1.2620.1.29.2.4.1.1.5075|66|5075 +1.3.6.1.4.1.2620.1.29.2.4.1.1.5335|66|5335 +1.3.6.1.4.1.2620.1.29.2.4.1.1.14249|66|14249 +1.3.6.1.4.1.2620.1.29.2.4.1.1.15114|66|15114 +1.3.6.1.4.1.2620.1.29.2.4.1.1.34138|66|34138 +1.3.6.1.4.1.2620.1.29.2.4.1.1.35579|66|35579 +1.3.6.1.4.1.2620.1.29.2.4.1.1.40308|66|40308 +1.3.6.1.4.1.2620.1.29.2.4.1.1.56464|66|56464 +1.3.6.1.4.1.2620.1.29.2.4.1.1.58518|66|58518 +1.3.6.1.4.1.2620.1.29.2.4.1.1.63005|66|63005 +1.3.6.1.4.1.2620.1.29.2.4.1.2.5075|4x|64726976696e67206f78656e +1.3.6.1.4.1.2620.1.29.2.4.1.2.5335|4x|64726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.29.2.4.1.2.14249|4x|717561696e746c79206b65707420627574204a61646564206f78656e20616374656420666f7277617264206f78656e204a61646564 +1.3.6.1.4.1.2620.1.29.2.4.1.2.15114|4x|6163746564204a6164656420746865697220746865697220616374656420666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.29.2.4.1.2.34138|4x|6163746564207468656972206163746564206b657074204a616465642074686569722064726976696e67206163746564206b657074 +1.3.6.1.4.1.2620.1.29.2.4.1.2.35579|4x|627574206f78656e207468656972206b657074204a6164656420616374656420627574206f78656e +1.3.6.1.4.1.2620.1.29.2.4.1.2.40308|4x|4a61646564204a6164656420717561696e746c7920666f7277617264206f78656e204a61646564 +1.3.6.1.4.1.2620.1.29.2.4.1.2.56464|4x|666f7277617264206163746564206f78656e20627574206f78656e +1.3.6.1.4.1.2620.1.29.2.4.1.2.58518|4x|4a61646564207a6f6d626965732064726976696e67207468656972207468656972207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.1.29.2.4.1.2.63005|4x|6163746564204a61646564207a6f6d62696573206163746564206f78656e +1.3.6.1.4.1.2620.1.29.2.4.1.3.5075|2|6 +1.3.6.1.4.1.2620.1.29.2.4.1.3.5335|2|2 +1.3.6.1.4.1.2620.1.29.2.4.1.3.14249|2|26 +1.3.6.1.4.1.2620.1.29.2.4.1.3.15114|2|8 +1.3.6.1.4.1.2620.1.29.2.4.1.3.34138|2|4 +1.3.6.1.4.1.2620.1.29.2.4.1.3.35579|2|3 +1.3.6.1.4.1.2620.1.29.2.4.1.3.40308|2|17 +1.3.6.1.4.1.2620.1.29.2.4.1.3.56464|2|12 +1.3.6.1.4.1.2620.1.29.2.4.1.3.58518|2|3 +1.3.6.1.4.1.2620.1.29.2.4.1.3.63005|2|23 +1.3.6.1.4.1.2620.1.29.2.5.1.1.3081|66|3081 +1.3.6.1.4.1.2620.1.29.2.5.1.1.10884|66|10884 +1.3.6.1.4.1.2620.1.29.2.5.1.1.25000|66|25000 +1.3.6.1.4.1.2620.1.29.2.5.1.1.32193|66|32193 +1.3.6.1.4.1.2620.1.29.2.5.1.1.35623|66|35623 +1.3.6.1.4.1.2620.1.29.2.5.1.1.35896|66|35896 +1.3.6.1.4.1.2620.1.29.2.5.1.1.37267|66|37267 +1.3.6.1.4.1.2620.1.29.2.5.1.1.43307|66|43307 +1.3.6.1.4.1.2620.1.29.2.5.1.1.57336|66|57336 +1.3.6.1.4.1.2620.1.29.2.5.1.1.65128|66|65128 +1.3.6.1.4.1.2620.1.29.2.5.1.2.3081|4x|64726976696e67207468656972 +1.3.6.1.4.1.2620.1.29.2.5.1.2.10884|4x|616374656420616374656420627574206f78656e20666f72776172642064726976696e672064726976696e67206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.29.2.5.1.2.25000|4x|666f7277617264204a6164656420666f7277617264207468656972 +1.3.6.1.4.1.2620.1.29.2.5.1.2.32193|4x|627574204a6164656420627574206f78656e20666f7277617264206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.29.2.5.1.2.35623|4x|717561696e746c792064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.29.2.5.1.2.35896|4x|6b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.29.2.5.1.2.37267|4x|61637465642064726976696e67 +1.3.6.1.4.1.2620.1.29.2.5.1.2.43307|4x|616374656420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.29.2.5.1.2.57336|4x|666f7277617264206f78656e207468656972204a61646564 +1.3.6.1.4.1.2620.1.29.2.5.1.2.65128|4x|6f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.29.2.5.1.3.3081|2|19 +1.3.6.1.4.1.2620.1.29.2.5.1.3.10884|2|15 +1.3.6.1.4.1.2620.1.29.2.5.1.3.25000|2|17 +1.3.6.1.4.1.2620.1.29.2.5.1.3.32193|2|30 +1.3.6.1.4.1.2620.1.29.2.5.1.3.35623|2|10 +1.3.6.1.4.1.2620.1.29.2.5.1.3.35896|2|23 +1.3.6.1.4.1.2620.1.29.2.5.1.3.37267|2|15 +1.3.6.1.4.1.2620.1.29.2.5.1.3.43307|2|2 +1.3.6.1.4.1.2620.1.29.2.5.1.3.57336|2|6 +1.3.6.1.4.1.2620.1.29.2.5.1.3.65128|2|7 +1.3.6.1.4.1.2620.1.29.2.6.1.1.5410|66|5410 +1.3.6.1.4.1.2620.1.29.2.6.1.1.16133|66|16133 +1.3.6.1.4.1.2620.1.29.2.6.1.1.16492|66|16492 +1.3.6.1.4.1.2620.1.29.2.6.1.1.23752|66|23752 +1.3.6.1.4.1.2620.1.29.2.6.1.1.29115|66|29115 +1.3.6.1.4.1.2620.1.29.2.6.1.1.33833|66|33833 +1.3.6.1.4.1.2620.1.29.2.6.1.1.42488|66|42488 +1.3.6.1.4.1.2620.1.29.2.6.1.1.46703|66|46703 +1.3.6.1.4.1.2620.1.29.2.6.1.1.52016|66|52016 +1.3.6.1.4.1.2620.1.29.2.6.1.1.52622|66|52622 +1.3.6.1.4.1.2620.1.29.2.6.1.2.5410|4|quaintly +1.3.6.1.4.1.2620.1.29.2.6.1.2.16133|4x|62757420746865697220616374656420717561696e746c792064726976696e67207a6f6d62696573204a6164656420627574 +1.3.6.1.4.1.2620.1.29.2.6.1.2.16492|4x|746865697220717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.29.2.6.1.2.23752|4x|6b657074204a61646564207a6f6d62696573207a6f6d6269657320616374656420666f7277617264207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.29.2.6.1.2.29115|4x|666f727761726420717561696e746c79206b65707420666f72776172642064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.29.2.6.1.2.33833|4x|7a6f6d62696573206163746564206b65707420666f7277617264206f78656e204a616465642064726976696e67207468656972206163746564 +1.3.6.1.4.1.2620.1.29.2.6.1.2.42488|4x|4a61646564204a6164656420717561696e746c79207a6f6d62696573204a6164656420627574 +1.3.6.1.4.1.2620.1.29.2.6.1.2.46703|4x|746865697220627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.29.2.6.1.2.52016|4x|4a61646564206163746564206f78656e204a6164656420717561696e746c79204a61646564204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.29.2.6.1.2.52622|4x|717561696e746c79206163746564207468656972207a6f6d62696573 +1.3.6.1.4.1.2620.1.29.2.6.1.3.5410|2|12 +1.3.6.1.4.1.2620.1.29.2.6.1.3.16133|2|27 +1.3.6.1.4.1.2620.1.29.2.6.1.3.16492|2|11 +1.3.6.1.4.1.2620.1.29.2.6.1.3.23752|2|26 +1.3.6.1.4.1.2620.1.29.2.6.1.3.29115|2|29 +1.3.6.1.4.1.2620.1.29.2.6.1.3.33833|2|19 +1.3.6.1.4.1.2620.1.29.2.6.1.3.42488|2|27 +1.3.6.1.4.1.2620.1.29.2.6.1.3.46703|2|16 +1.3.6.1.4.1.2620.1.29.2.6.1.3.52016|2|23 +1.3.6.1.4.1.2620.1.29.2.6.1.3.52622|2|6 +1.3.6.1.4.1.2620.1.29.101.0|2|24 +1.3.6.1.4.1.2620.1.29.102.0|4x|6163746564207a6f6d6269657320666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.29.103.0|4x|64726976696e6720616374656420717561696e746c7920616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.30.1.0|4x|4a61646564206b657074207468656972206b657074 +1.3.6.1.4.1.2620.1.30.2.0|2|21 +1.3.6.1.4.1.2620.1.30.3.0|2|6 +1.3.6.1.4.1.2620.1.30.4.0|2|22 +1.3.6.1.4.1.2620.1.30.5.0|4x|6b65707420616374656420616374656420627574204a61646564206b65707420627574204a61646564 +1.3.6.1.4.1.2620.1.30.6.1.0|2|30 +1.3.6.1.4.1.2620.1.30.6.2.0|2|18 +1.3.6.1.4.1.2620.1.30.6.3.0|2|8 +1.3.6.1.4.1.2620.1.30.6.4.1.0|2|21 +1.3.6.1.4.1.2620.1.30.6.4.2.0|2|12 +1.3.6.1.4.1.2620.1.30.6.4.3.0|2|12 +1.3.6.1.4.1.2620.1.30.6.4.4.0|2|20 +1.3.6.1.4.1.2620.1.30.6.4.5.0|2|12 +1.3.6.1.4.1.2620.1.30.6.4.6.0|2|6 +1.3.6.1.4.1.2620.1.30.7.0|4|but +1.3.6.1.4.1.2620.1.30.8.0|4x|64726976696e672064726976696e6720666f7277617264206f78656e +1.3.6.1.4.1.2620.1.30.9.0|2|19 +1.3.6.1.4.1.2620.1.30.101.0|2|21 +1.3.6.1.4.1.2620.1.30.102.0|4x|6b6570742064726976696e67206b65707420666f7277617264206b657074206f78656e207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.1.30.103.0|4x|717561696e746c79204a61646564206f78656e204a6164656420717561696e746c79207a6f6d6269657320717561696e746c7920666f7277617264207468656972 +1.3.6.1.4.1.2620.1.30.999.0|4x|61637465642064726976696e67207a6f6d6269657320627574204a61646564206f78656e20627574 +1.3.6.1.4.1.2620.1.31.1.0|4|forward +1.3.6.1.4.1.2620.1.31.2.0|2|14 +1.3.6.1.4.1.2620.1.31.3.0|2|12 +1.3.6.1.4.1.2620.1.31.4.0|2|23 +1.3.6.1.4.1.2620.1.31.5.0|4x|62757420717561696e746c792064726976696e67207468656972206163746564207a6f6d6269657320666f7277617264204a61646564206163746564 +1.3.6.1.4.1.2620.1.31.6.1.1.1.0|2|29 +1.3.6.1.4.1.2620.1.31.6.1.1.2.0|2|3 +1.3.6.1.4.1.2620.1.31.6.1.1.3.0|2|22 +1.3.6.1.4.1.2620.1.31.6.1.1.4.0|2|30 +1.3.6.1.4.1.2620.1.31.6.1.1.5.0|2|7 +1.3.6.1.4.1.2620.1.31.6.1.1.6.0|2|22 +1.3.6.1.4.1.2620.1.31.6.1.1.7.0|2|3 +1.3.6.1.4.1.2620.1.31.6.1.1.8.0|2|30 +1.3.6.1.4.1.2620.1.31.6.1.1.9.0|2|30 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.18771|66|18771 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.23703|66|23703 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.26748|66|26748 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.28073|66|28073 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.41070|66|41070 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.41715|66|41715 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.45587|66|45587 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.52887|66|52887 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.57867|66|57867 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.60573|66|60573 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.18771|2|19 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.23703|2|28 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.26748|2|4 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.28073|2|29 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.41070|2|18 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.41715|2|23 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.45587|2|0 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.52887|2|15 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.57867|2|8 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.60573|2|8 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.18771|2|22 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.23703|2|29 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.26748|2|0 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.28073|2|15 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.41070|2|1 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.41715|2|15 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.45587|2|1 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.52887|2|13 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.57867|2|16 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.60573|2|12 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.18771|2|9 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.23703|2|26 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.26748|2|29 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.28073|2|5 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.41070|2|22 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.41715|2|20 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.45587|2|8 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.52887|2|21 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.57867|2|30 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.60573|2|15 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.18771|2|16 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.23703|2|29 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.26748|2|13 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.28073|2|4 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.41070|2|10 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.41715|2|5 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.45587|2|23 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.52887|2|12 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.57867|2|21 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.60573|2|7 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.18771|2|22 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.23703|2|27 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.26748|2|18 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.28073|2|13 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.41070|2|24 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.41715|2|27 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.45587|2|16 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.52887|2|27 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.57867|2|4 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.60573|2|11 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.18771|2|28 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.23703|2|26 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.26748|2|5 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.28073|2|4 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.41070|2|10 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.41715|2|0 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.45587|2|17 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.52887|2|23 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.57867|2|8 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.60573|2|16 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.18771|2|20 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.23703|2|21 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.26748|2|28 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.28073|2|3 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.41070|2|21 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.41715|2|23 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.45587|2|20 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.52887|2|21 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.57867|2|9 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.60573|2|3 +1.3.6.1.4.1.2620.1.31.7.1.1.0|2|29 +1.3.6.1.4.1.2620.1.31.7.1.2.0|2|23 +1.3.6.1.4.1.2620.1.31.101.0|2|24 +1.3.6.1.4.1.2620.1.31.102.0|4x|6b657074204a6164656420666f7277617264207a6f6d626965732064726976696e67 +1.3.6.1.4.1.2620.1.31.103.0|4x|616374656420717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.31.999.0|4|kept +1.3.6.1.4.1.2620.1.36.1.1.0|2|0 +1.3.6.1.4.1.2620.1.36.1.2.0|2|7 +1.3.6.1.4.1.2620.1.36.1.3.0|2|26 +1.3.6.1.4.1.2620.1.36.1.4.0|2|19 +1.3.6.1.4.1.2620.1.38.1.0|4x|7a6f6d6269657320717561696e746c7920717561696e746c792061637465642062757420746865697220616374656420717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.38.2.0|2|8 +1.3.6.1.4.1.2620.1.38.3.0|2|26 +1.3.6.1.4.1.2620.1.38.4.0|2|16 +1.3.6.1.4.1.2620.1.38.5.0|2|8 +1.3.6.1.4.1.2620.1.38.6.0|2|4 +1.3.6.1.4.1.2620.1.38.7.0|2|5 +1.3.6.1.4.1.2620.1.38.8.0|2|9 +1.3.6.1.4.1.2620.1.38.9.0|2|7 +1.3.6.1.4.1.2620.1.38.10.0|2|9 +1.3.6.1.4.1.2620.1.38.11.0|2|31 +1.3.6.1.4.1.2620.1.38.12.0|2|11 +1.3.6.1.4.1.2620.1.38.13.0|2|4 +1.3.6.1.4.1.2620.1.38.14.0|2|19 +1.3.6.1.4.1.2620.1.38.15.0|2|26 +1.3.6.1.4.1.2620.1.38.16.0|2|3 +1.3.6.1.4.1.2620.1.38.17.0|2|18 +1.3.6.1.4.1.2620.1.38.18.0|2|13 +1.3.6.1.4.1.2620.1.38.19.0|2|29 +1.3.6.1.4.1.2620.1.38.20.0|2|25 +1.3.6.1.4.1.2620.1.38.21.0|2|9 +1.3.6.1.4.1.2620.1.38.22.0|2|25 +1.3.6.1.4.1.2620.1.38.23.0|2|12 +1.3.6.1.4.1.2620.1.38.24.1.1.3528|66|3528 +1.3.6.1.4.1.2620.1.38.24.1.1.11783|66|11783 +1.3.6.1.4.1.2620.1.38.24.1.1.11814|66|11814 +1.3.6.1.4.1.2620.1.38.24.1.1.16655|66|16655 +1.3.6.1.4.1.2620.1.38.24.1.1.27954|66|27954 +1.3.6.1.4.1.2620.1.38.24.1.1.30506|66|30506 +1.3.6.1.4.1.2620.1.38.24.1.1.32554|66|32554 +1.3.6.1.4.1.2620.1.38.24.1.1.38664|66|38664 +1.3.6.1.4.1.2620.1.38.24.1.1.48679|66|48679 +1.3.6.1.4.1.2620.1.38.24.1.1.61929|66|61929 +1.3.6.1.4.1.2620.1.38.24.1.2.3528|4x|6275742061637465642064726976696e672074686569722064726976696e6720627574206b657074206163746564 +1.3.6.1.4.1.2620.1.38.24.1.2.11783|4x|7a6f6d62696573204a61646564206f78656e +1.3.6.1.4.1.2620.1.38.24.1.2.11814|4x|666f727761726420616374656420746865697220717561696e746c7920746865697220616374656420666f7277617264 +1.3.6.1.4.1.2620.1.38.24.1.2.16655|4|kept +1.3.6.1.4.1.2620.1.38.24.1.2.27954|4x|6b657074206f78656e2064726976696e6720666f7277617264206f78656e204a61646564204a616465642064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.38.24.1.2.30506|4x|7a6f6d62696573207468656972207468656972 +1.3.6.1.4.1.2620.1.38.24.1.2.32554|4x|7a6f6d6269657320627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.38.24.1.2.38664|4x|6163746564206b657074206275742064726976696e67207a6f6d6269657320717561696e746c79206163746564206163746564206163746564 +1.3.6.1.4.1.2620.1.38.24.1.2.48679|4x|616374656420627574206163746564206163746564206f78656e20666f72776172642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.38.24.1.2.61929|4x|4a61646564207468656972206f78656e2064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.38.24.1.3.3528|2|30 +1.3.6.1.4.1.2620.1.38.24.1.3.11783|2|3 +1.3.6.1.4.1.2620.1.38.24.1.3.11814|2|6 +1.3.6.1.4.1.2620.1.38.24.1.3.16655|2|22 +1.3.6.1.4.1.2620.1.38.24.1.3.27954|2|21 +1.3.6.1.4.1.2620.1.38.24.1.3.30506|2|7 +1.3.6.1.4.1.2620.1.38.24.1.3.32554|2|5 +1.3.6.1.4.1.2620.1.38.24.1.3.38664|2|15 +1.3.6.1.4.1.2620.1.38.24.1.3.48679|2|29 +1.3.6.1.4.1.2620.1.38.24.1.3.61929|2|11 +1.3.6.1.4.1.2620.1.38.24.1.4.3528|2|22 +1.3.6.1.4.1.2620.1.38.24.1.4.11783|2|10 +1.3.6.1.4.1.2620.1.38.24.1.4.11814|2|27 +1.3.6.1.4.1.2620.1.38.24.1.4.16655|2|13 +1.3.6.1.4.1.2620.1.38.24.1.4.27954|2|0 +1.3.6.1.4.1.2620.1.38.24.1.4.30506|2|16 +1.3.6.1.4.1.2620.1.38.24.1.4.32554|2|28 +1.3.6.1.4.1.2620.1.38.24.1.4.38664|2|6 +1.3.6.1.4.1.2620.1.38.24.1.4.48679|2|28 +1.3.6.1.4.1.2620.1.38.24.1.4.61929|2|8 +1.3.6.1.4.1.2620.1.38.24.1.5.3528|2|1 +1.3.6.1.4.1.2620.1.38.24.1.5.11783|2|10 +1.3.6.1.4.1.2620.1.38.24.1.5.11814|2|29 +1.3.6.1.4.1.2620.1.38.24.1.5.16655|2|25 +1.3.6.1.4.1.2620.1.38.24.1.5.27954|2|18 +1.3.6.1.4.1.2620.1.38.24.1.5.30506|2|13 +1.3.6.1.4.1.2620.1.38.24.1.5.32554|2|13 +1.3.6.1.4.1.2620.1.38.24.1.5.38664|2|11 +1.3.6.1.4.1.2620.1.38.24.1.5.48679|2|22 +1.3.6.1.4.1.2620.1.38.24.1.5.61929|2|28 +1.3.6.1.4.1.2620.1.38.24.1.6.3528|2|10 +1.3.6.1.4.1.2620.1.38.24.1.6.11783|2|7 +1.3.6.1.4.1.2620.1.38.24.1.6.11814|2|30 +1.3.6.1.4.1.2620.1.38.24.1.6.16655|2|26 +1.3.6.1.4.1.2620.1.38.24.1.6.27954|2|28 +1.3.6.1.4.1.2620.1.38.24.1.6.30506|2|28 +1.3.6.1.4.1.2620.1.38.24.1.6.32554|2|20 +1.3.6.1.4.1.2620.1.38.24.1.6.38664|2|3 +1.3.6.1.4.1.2620.1.38.24.1.6.48679|2|11 +1.3.6.1.4.1.2620.1.38.24.1.6.61929|2|28 +1.3.6.1.4.1.2620.1.38.25.1.1.1484|66|1484 +1.3.6.1.4.1.2620.1.38.25.1.1.4399|66|4399 +1.3.6.1.4.1.2620.1.38.25.1.1.17141|66|17141 +1.3.6.1.4.1.2620.1.38.25.1.1.25207|66|25207 +1.3.6.1.4.1.2620.1.38.25.1.1.30563|66|30563 +1.3.6.1.4.1.2620.1.38.25.1.1.31488|66|31488 +1.3.6.1.4.1.2620.1.38.25.1.1.51584|66|51584 +1.3.6.1.4.1.2620.1.38.25.1.1.57051|66|57051 +1.3.6.1.4.1.2620.1.38.25.1.1.58915|66|58915 +1.3.6.1.4.1.2620.1.38.25.1.1.64779|66|64779 +1.3.6.1.4.1.2620.1.38.25.1.2.1484|2|23 +1.3.6.1.4.1.2620.1.38.25.1.2.4399|2|1 +1.3.6.1.4.1.2620.1.38.25.1.2.17141|2|20 +1.3.6.1.4.1.2620.1.38.25.1.2.25207|2|18 +1.3.6.1.4.1.2620.1.38.25.1.2.30563|2|27 +1.3.6.1.4.1.2620.1.38.25.1.2.31488|2|14 +1.3.6.1.4.1.2620.1.38.25.1.2.51584|2|25 +1.3.6.1.4.1.2620.1.38.25.1.2.57051|2|30 +1.3.6.1.4.1.2620.1.38.25.1.2.58915|2|2 +1.3.6.1.4.1.2620.1.38.25.1.2.64779|2|18 +1.3.6.1.4.1.2620.1.38.25.1.3.1484|4x|6163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.38.25.1.3.4399|4x|6f78656e207468656972206f78656e204a61646564206b65707420666f72776172642064726976696e67206b657074206f78656e +1.3.6.1.4.1.2620.1.38.25.1.3.17141|4x|64726976696e67204a61646564206f78656e20616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.38.25.1.3.25207|4x|7468656972204a61646564 +1.3.6.1.4.1.2620.1.38.25.1.3.30563|4x|7a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.1.38.25.1.3.31488|4x|4a6164656420616374656420616374656420666f7277617264 +1.3.6.1.4.1.2620.1.38.25.1.3.51584|4x|6f78656e207a6f6d62696573207468656972204a61646564 +1.3.6.1.4.1.2620.1.38.25.1.3.57051|4x|7a6f6d626965732061637465642064726976696e672062757420666f7277617264 +1.3.6.1.4.1.2620.1.38.25.1.3.58915|4x|717561696e746c79206f78656e20666f727761726420666f727761726420666f727761726420746865697220627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.38.25.1.3.64779|4x|7a6f6d62696573206f78656e204a61646564207a6f6d626965732064726976696e6720717561696e746c7920627574 +1.3.6.1.4.1.2620.1.38.25.1.4.1484|64x|8902d6ed +1.3.6.1.4.1.2620.1.38.25.1.4.4399|64x|adb5424a +1.3.6.1.4.1.2620.1.38.25.1.4.17141|64x|024dfb05 +1.3.6.1.4.1.2620.1.38.25.1.4.25207|64x|bde38fdd +1.3.6.1.4.1.2620.1.38.25.1.4.30563|64x|d63520f8 +1.3.6.1.4.1.2620.1.38.25.1.4.31488|64x|3e4f537b +1.3.6.1.4.1.2620.1.38.25.1.4.51584|64x|26b6ee49 +1.3.6.1.4.1.2620.1.38.25.1.4.57051|64x|8b7db7b4 +1.3.6.1.4.1.2620.1.38.25.1.4.58915|64x|615518e3 +1.3.6.1.4.1.2620.1.38.25.1.4.64779|64x|6599a7ac +1.3.6.1.4.1.2620.1.38.25.1.5.1484|2|20 +1.3.6.1.4.1.2620.1.38.25.1.5.4399|2|1 +1.3.6.1.4.1.2620.1.38.25.1.5.17141|2|20 +1.3.6.1.4.1.2620.1.38.25.1.5.25207|2|4 +1.3.6.1.4.1.2620.1.38.25.1.5.30563|2|23 +1.3.6.1.4.1.2620.1.38.25.1.5.31488|2|7 +1.3.6.1.4.1.2620.1.38.25.1.5.51584|2|9 +1.3.6.1.4.1.2620.1.38.25.1.5.57051|2|20 +1.3.6.1.4.1.2620.1.38.25.1.5.58915|2|29 +1.3.6.1.4.1.2620.1.38.25.1.5.64779|2|4 +1.3.6.1.4.1.2620.1.38.101.0|2|27 +1.3.6.1.4.1.2620.1.38.102.0|4x|746865697220666f7277617264206163746564 +1.3.6.1.4.1.2620.1.38.103.0|4x|64726976696e6720666f72776172642064726976696e67206163746564206163746564 +1.3.6.1.4.1.2620.1.39.1.1.0|4x|64726976696e67206f78656e2064726976696e672062757420627574206163746564207468656972 +1.3.6.1.4.1.2620.1.39.1.2.0|4x|616374656420627574204a61646564 +1.3.6.1.4.1.2620.1.39.1.3.0|4x|64726976696e672062757420717561696e746c79207a6f6d6269657320627574206b65707420666f727761726420666f7277617264207468656972 +1.3.6.1.4.1.2620.1.39.2.1.0|4x|666f7277617264204a61646564204a61646564 +1.3.6.1.4.1.2620.1.39.2.2.0|4x|717561696e746c7920627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.39.2.3.0|4x|6275742064726976696e67 +1.3.6.1.4.1.2620.1.39.2.4.0|4x|666f7277617264206b657074 +1.3.6.1.4.1.2620.1.39.101.0|2|28 +1.3.6.1.4.1.2620.1.39.102.0|4x|6f78656e20666f7277617264206b6570742064726976696e67206b657074206f78656e +1.3.6.1.4.1.2620.1.39.103.0|4x|6b657074206b65707420627574204a61646564207a6f6d62696573204a61646564206b657074206f78656e +1.3.6.1.4.1.2620.1.42.1.0|4x|616374656420666f7277617264207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.42.2.0|2|10 +1.3.6.1.4.1.2620.1.42.3.0|4x|666f7277617264206f78656e20627574206163746564204a6164656420627574206f78656e206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.42.4.0|2|19 +1.3.6.1.4.1.2620.1.42.5.0|2|26 +1.3.6.1.4.1.2620.1.42.6.0|2|21 +1.3.6.1.4.1.2620.1.42.7.1.1.8496|66|8496 +1.3.6.1.4.1.2620.1.42.7.1.1.19506|66|19506 +1.3.6.1.4.1.2620.1.42.7.1.1.21368|66|21368 +1.3.6.1.4.1.2620.1.42.7.1.1.23320|66|23320 +1.3.6.1.4.1.2620.1.42.7.1.1.23813|66|23813 +1.3.6.1.4.1.2620.1.42.7.1.1.27519|66|27519 +1.3.6.1.4.1.2620.1.42.7.1.1.30558|66|30558 +1.3.6.1.4.1.2620.1.42.7.1.1.35854|66|35854 +1.3.6.1.4.1.2620.1.42.7.1.1.38212|66|38212 +1.3.6.1.4.1.2620.1.42.7.1.1.60129|66|60129 +1.3.6.1.4.1.2620.1.42.7.1.2.8496|4x|746865697220746865697220717561696e746c79206163746564206f78656e +1.3.6.1.4.1.2620.1.42.7.1.2.19506|4x|7468656972206b657074206b657074207a6f6d626965732064726976696e67206b657074206b657074 +1.3.6.1.4.1.2620.1.42.7.1.2.21368|4|zombies +1.3.6.1.4.1.2620.1.42.7.1.2.23320|4x|666f7277617264206b657074206f78656e206163746564204a61646564207a6f6d62696573206f78656e20746865697220627574 +1.3.6.1.4.1.2620.1.42.7.1.2.23813|4x|666f72776172642064726976696e6720666f7277617264206b6570742064726976696e6720627574207468656972206f78656e206163746564 +1.3.6.1.4.1.2620.1.42.7.1.2.27519|4x|616374656420616374656420627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.42.7.1.2.30558|4|acted +1.3.6.1.4.1.2620.1.42.7.1.2.35854|4|oxen +1.3.6.1.4.1.2620.1.42.7.1.2.38212|4x|7468656972204a61646564207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.42.7.1.2.60129|4x|6b65707420616374656420717561696e746c7920717561696e746c79 +1.3.6.1.4.1.2620.1.42.7.1.3.8496|4x|627574206f78656e204a616465642064726976696e672062757420627574 +1.3.6.1.4.1.2620.1.42.7.1.3.19506|4x|666f72776172642064726976696e67206275742064726976696e67204a6164656420666f727761726420717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.42.7.1.3.21368|4x|666f727761726420616374656420666f727761726420666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.42.7.1.3.23320|4x|64726976696e6720627574 +1.3.6.1.4.1.2620.1.42.7.1.3.23813|4x|6f78656e206b657074206f78656e +1.3.6.1.4.1.2620.1.42.7.1.3.27519|4x|6b657074207a6f6d62696573207a6f6d62696573207468656972206f78656e +1.3.6.1.4.1.2620.1.42.7.1.3.30558|4|oxen +1.3.6.1.4.1.2620.1.42.7.1.3.35854|4x|61637465642064726976696e67 +1.3.6.1.4.1.2620.1.42.7.1.3.38212|4x|7a6f6d6269657320616374656420666f72776172642064726976696e67207a6f6d62696573207a6f6d62696573204a61646564 +1.3.6.1.4.1.2620.1.42.7.1.3.60129|4|but +1.3.6.1.4.1.2620.1.42.7.1.4.8496|2|14 +1.3.6.1.4.1.2620.1.42.7.1.4.19506|2|17 +1.3.6.1.4.1.2620.1.42.7.1.4.21368|2|16 +1.3.6.1.4.1.2620.1.42.7.1.4.23320|2|13 +1.3.6.1.4.1.2620.1.42.7.1.4.23813|2|19 +1.3.6.1.4.1.2620.1.42.7.1.4.27519|2|0 +1.3.6.1.4.1.2620.1.42.7.1.4.30558|2|0 +1.3.6.1.4.1.2620.1.42.7.1.4.35854|2|25 +1.3.6.1.4.1.2620.1.42.7.1.4.38212|2|4 +1.3.6.1.4.1.2620.1.42.7.1.4.60129|2|29 +1.3.6.1.4.1.2620.1.42.7.1.5.8496|4x|4a61646564204a6164656420746865697220616374656420717561696e746c79206f78656e206b657074206f78656e20627574 +1.3.6.1.4.1.2620.1.42.7.1.5.19506|4x|6b657074206f78656e +1.3.6.1.4.1.2620.1.42.7.1.5.21368|4x|64726976696e67206f78656e20717561696e746c79206f78656e20666f7277617264206b6570742064726976696e67206b657074 +1.3.6.1.4.1.2620.1.42.7.1.5.23320|4x|64726976696e67206f78656e207a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.42.7.1.5.23813|4x|627574206f78656e20717561696e746c79207a6f6d6269657320616374656420616374656420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.42.7.1.5.27519|4x|666f727761726420746865697220717561696e746c7920616374656420666f72776172642062757420627574204a61646564 +1.3.6.1.4.1.2620.1.42.7.1.5.30558|4x|7a6f6d6269657320666f72776172642064726976696e672064726976696e6720616374656420717561696e746c7920717561696e746c79 +1.3.6.1.4.1.2620.1.42.7.1.5.35854|4x|666f727761726420666f7277617264206163746564206b6570742064726976696e67204a61646564 +1.3.6.1.4.1.2620.1.42.7.1.5.38212|4x|61637465642064726976696e6720666f7277617264206b657074206163746564206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.42.7.1.5.60129|4x|627574206b65707420717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.42.7.1.6.8496|4x|717561696e746c79204a61646564206b657074207a6f6d62696573207468656972206163746564206f78656e207a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.42.7.1.6.19506|4x|6f78656e20616374656420717561696e746c7920717561696e746c792064726976696e67206b65707420746865697220666f72776172642064726976696e67 +1.3.6.1.4.1.2620.1.42.7.1.6.21368|4x|717561696e746c7920666f727761726420627574206b657074204a6164656420717561696e746c79 +1.3.6.1.4.1.2620.1.42.7.1.6.23320|4x|4a61646564207a6f6d6269657320627574204a616465642062757420666f7277617264207a6f6d626965732064726976696e6720627574 +1.3.6.1.4.1.2620.1.42.7.1.6.23813|4x|666f7277617264206163746564206b657074206163746564206f78656e20627574206f78656e204a61646564 +1.3.6.1.4.1.2620.1.42.7.1.6.27519|4x|7468656972206f78656e2074686569722064726976696e67207a6f6d62696573206f78656e20746865697220717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.42.7.1.6.30558|4x|7468656972206f78656e2062757420717561696e746c79204a6164656420717561696e746c79 +1.3.6.1.4.1.2620.1.42.7.1.6.35854|4x|6f78656e204a6164656420666f7277617264204a61646564206b657074 +1.3.6.1.4.1.2620.1.42.7.1.6.38212|4x|4a6164656420666f7277617264206163746564 +1.3.6.1.4.1.2620.1.42.7.1.6.60129|4x|666f7277617264206f78656e +1.3.6.1.4.1.2620.1.42.7.1.7.8496|4x|7a6f6d626965732064726976696e67206b65707420746865697220666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.42.7.1.7.19506|4x|64726976696e6720746865697220627574206163746564204a61646564206b65707420616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.42.7.1.7.21368|4x|7a6f6d62696573206b65707420717561696e746c7920717561696e746c792064726976696e67206b657074207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.42.7.1.7.23320|4x|74686569722062757420666f727761726420666f72776172642064726976696e6720666f727761726420717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.42.7.1.7.23813|4|quaintly +1.3.6.1.4.1.2620.1.42.7.1.7.27519|4x|6f78656e206163746564207468656972 +1.3.6.1.4.1.2620.1.42.7.1.7.30558|4x|666f7277617264206b657074206f78656e +1.3.6.1.4.1.2620.1.42.7.1.7.35854|4|driving +1.3.6.1.4.1.2620.1.42.7.1.7.38212|4x|7a6f6d62696573204a61646564204a61646564207a6f6d6269657320616374656420746865697220717561696e746c79206b657074206163746564 +1.3.6.1.4.1.2620.1.42.7.1.7.60129|4|zombies +1.3.6.1.4.1.2620.1.42.7.1.8.8496|4|quaintly +1.3.6.1.4.1.2620.1.42.7.1.8.19506|4x|6b6570742064726976696e672062757420746865697220746865697220627574206f78656e +1.3.6.1.4.1.2620.1.42.7.1.8.21368|4x|7468656972206f78656e20717561696e746c792074686569722074686569722064726976696e67204a6164656420627574 +1.3.6.1.4.1.2620.1.42.7.1.8.23320|4x|64726976696e67206163746564206b657074207468656972206b65707420666f7277617264206f78656e206b657074207468656972 +1.3.6.1.4.1.2620.1.42.7.1.8.23813|4x|4a61646564204a6164656420717561696e746c7920666f727761726420616374656420717561696e746c792064726976696e6720616374656420666f7277617264 +1.3.6.1.4.1.2620.1.42.7.1.8.27519|4x|6163746564206f78656e20666f72776172642064726976696e672064726976696e67207468656972207468656972207468656972 +1.3.6.1.4.1.2620.1.42.7.1.8.30558|4x|616374656420717561696e746c7920666f7277617264204a61646564204a61646564 +1.3.6.1.4.1.2620.1.42.7.1.8.35854|4x|746865697220627574207468656972204a61646564204a61646564207a6f6d62696573 +1.3.6.1.4.1.2620.1.42.7.1.8.38212|4x|717561696e746c792064726976696e672064726976696e672074686569722064726976696e67 +1.3.6.1.4.1.2620.1.42.7.1.8.60129|4x|6f78656e20616374656420666f7277617264204a61646564206163746564 +1.3.6.1.4.1.2620.1.42.8.1.1.20313|66|20313 +1.3.6.1.4.1.2620.1.42.8.1.1.29903|66|29903 +1.3.6.1.4.1.2620.1.42.8.1.1.30761|66|30761 +1.3.6.1.4.1.2620.1.42.8.1.1.32365|66|32365 +1.3.6.1.4.1.2620.1.42.8.1.1.47436|66|47436 +1.3.6.1.4.1.2620.1.42.8.1.1.49361|66|49361 +1.3.6.1.4.1.2620.1.42.8.1.1.52713|66|52713 +1.3.6.1.4.1.2620.1.42.8.1.1.57160|66|57160 +1.3.6.1.4.1.2620.1.42.8.1.1.59523|66|59523 +1.3.6.1.4.1.2620.1.42.8.1.1.60699|66|60699 +1.3.6.1.4.1.2620.1.42.8.1.2.20313|4x|6b657074206b6570742061637465642064726976696e67207468656972206b657074207468656972207468656972206b657074 +1.3.6.1.4.1.2620.1.42.8.1.2.29903|4x|7468656972206163746564206f78656e206163746564206163746564207468656972 +1.3.6.1.4.1.2620.1.42.8.1.2.30761|4x|6275742062757420666f7277617264204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.42.8.1.2.32365|4x|6f78656e204a6164656420717561696e746c79204a61646564 +1.3.6.1.4.1.2620.1.42.8.1.2.47436|4|forward +1.3.6.1.4.1.2620.1.42.8.1.2.49361|4x|666f72776172642064726976696e67 +1.3.6.1.4.1.2620.1.42.8.1.2.52713|4x|7a6f6d626965732062757420717561696e746c79206b657074206f78656e20627574 +1.3.6.1.4.1.2620.1.42.8.1.2.57160|4x|7468656972206f78656e20717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.42.8.1.2.59523|4x|666f72776172642064726976696e6720717561696e746c792062757420717561696e746c79207a6f6d62696573206b657074206163746564 +1.3.6.1.4.1.2620.1.42.8.1.2.60699|4x|6275742074686569722064726976696e672061637465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.42.8.1.3.20313|4|forward +1.3.6.1.4.1.2620.1.42.8.1.3.29903|4|but +1.3.6.1.4.1.2620.1.42.8.1.3.30761|4x|666f727761726420717561696e746c7920627574207468656972206275742064726976696e672064726976696e67206f78656e +1.3.6.1.4.1.2620.1.42.8.1.3.32365|4x|616374656420616374656420717561696e746c7920746865697220627574 +1.3.6.1.4.1.2620.1.42.8.1.3.47436|4|acted +1.3.6.1.4.1.2620.1.42.8.1.3.49361|4x|6b6570742064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.42.8.1.3.52713|4x|746865697220666f7277617264206b657074206f78656e206b657074 +1.3.6.1.4.1.2620.1.42.8.1.3.57160|4x|6b657074206b657074207a6f6d626965732064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.42.8.1.3.59523|4x|717561696e746c79206b657074206f78656e20627574206b65707420666f727761726420616374656420666f7277617264204a61646564 +1.3.6.1.4.1.2620.1.42.8.1.3.60699|4x|4a61646564204a61646564206f78656e +1.3.6.1.4.1.2620.1.42.8.1.4.20313|2|14 +1.3.6.1.4.1.2620.1.42.8.1.4.29903|2|23 +1.3.6.1.4.1.2620.1.42.8.1.4.30761|2|2 +1.3.6.1.4.1.2620.1.42.8.1.4.32365|2|25 +1.3.6.1.4.1.2620.1.42.8.1.4.47436|2|31 +1.3.6.1.4.1.2620.1.42.8.1.4.49361|2|12 +1.3.6.1.4.1.2620.1.42.8.1.4.52713|2|27 +1.3.6.1.4.1.2620.1.42.8.1.4.57160|2|1 +1.3.6.1.4.1.2620.1.42.8.1.4.59523|2|16 +1.3.6.1.4.1.2620.1.42.8.1.4.60699|2|23 +1.3.6.1.4.1.2620.1.42.8.1.5.20313|4x|6b657074204a61646564 +1.3.6.1.4.1.2620.1.42.8.1.5.29903|4x|7a6f6d626965732062757420717561696e746c79 +1.3.6.1.4.1.2620.1.42.8.1.5.30761|4x|6f78656e20666f727761726420746865697220627574206b657074204a6164656420717561696e746c79206f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.42.8.1.5.32365|4x|64726976696e6720666f72776172642074686569722064726976696e67 +1.3.6.1.4.1.2620.1.42.8.1.5.47436|4x|6b657074206f78656e2062757420717561696e746c79204a61646564206f78656e206b65707420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.42.8.1.5.49361|4x|717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.42.8.1.5.52713|4x|666f7277617264206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.42.8.1.5.57160|4x|666f7277617264204a6164656420717561696e746c79204a61646564 +1.3.6.1.4.1.2620.1.42.8.1.5.59523|4x|6163746564204a61646564206163746564207468656972 +1.3.6.1.4.1.2620.1.42.8.1.5.60699|4x|6b657074204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.42.8.1.6.20313|2|15 +1.3.6.1.4.1.2620.1.42.8.1.6.29903|2|28 +1.3.6.1.4.1.2620.1.42.8.1.6.30761|2|8 +1.3.6.1.4.1.2620.1.42.8.1.6.32365|2|31 +1.3.6.1.4.1.2620.1.42.8.1.6.47436|2|21 +1.3.6.1.4.1.2620.1.42.8.1.6.49361|2|19 +1.3.6.1.4.1.2620.1.42.8.1.6.52713|2|21 +1.3.6.1.4.1.2620.1.42.8.1.6.57160|2|13 +1.3.6.1.4.1.2620.1.42.8.1.6.59523|2|17 +1.3.6.1.4.1.2620.1.42.8.1.6.60699|2|27 +1.3.6.1.4.1.2620.1.42.9.1.1.3560|66|3560 +1.3.6.1.4.1.2620.1.42.9.1.1.3851|66|3851 +1.3.6.1.4.1.2620.1.42.9.1.1.5012|66|5012 +1.3.6.1.4.1.2620.1.42.9.1.1.21820|66|21820 +1.3.6.1.4.1.2620.1.42.9.1.1.24307|66|24307 +1.3.6.1.4.1.2620.1.42.9.1.1.40285|66|40285 +1.3.6.1.4.1.2620.1.42.9.1.1.52436|66|52436 +1.3.6.1.4.1.2620.1.42.9.1.1.57839|66|57839 +1.3.6.1.4.1.2620.1.42.9.1.1.58995|66|58995 +1.3.6.1.4.1.2620.1.42.9.1.1.63227|66|63227 +1.3.6.1.4.1.2620.1.42.9.1.2.3560|4x|6f78656e2062757420717561696e746c79207468656972204a61646564207468656972 +1.3.6.1.4.1.2620.1.42.9.1.2.3851|4x|6b657074207468656972206b657074206b657074207a6f6d6269657320627574206f78656e207468656972 +1.3.6.1.4.1.2620.1.42.9.1.2.5012|4x|6f78656e20746865697220746865697220666f7277617264 +1.3.6.1.4.1.2620.1.42.9.1.2.21820|4x|4a61646564206f78656e2062757420666f7277617264206f78656e +1.3.6.1.4.1.2620.1.42.9.1.2.24307|4x|4a61646564204a6164656420627574206b657074206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.42.9.1.2.40285|4x|7a6f6d62696573206b65707420616374656420627574204a61646564 +1.3.6.1.4.1.2620.1.42.9.1.2.52436|4x|666f7277617264204a61646564206b657074206f78656e206163746564207a6f6d6269657320666f72776172642064726976696e6720627574 +1.3.6.1.4.1.2620.1.42.9.1.2.57839|4x|6f78656e207a6f6d62696573207a6f6d62696573207468656972206f78656e207a6f6d62696573206163746564204a61646564 +1.3.6.1.4.1.2620.1.42.9.1.2.58995|4x|6f78656e204a6164656420717561696e746c79204a61646564 +1.3.6.1.4.1.2620.1.42.9.1.2.63227|4x|717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.42.9.1.3.3560|4|but +1.3.6.1.4.1.2620.1.42.9.1.3.3851|4x|616374656420666f727761726420627574204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.42.9.1.3.5012|4|zombies +1.3.6.1.4.1.2620.1.42.9.1.3.21820|4x|717561696e746c7920746865697220666f7277617264207468656972204a61646564 +1.3.6.1.4.1.2620.1.42.9.1.3.24307|4x|666f7277617264206b657074204a61646564207468656972 +1.3.6.1.4.1.2620.1.42.9.1.3.40285|4x|7468656972206275742064726976696e6720627574 +1.3.6.1.4.1.2620.1.42.9.1.3.52436|4x|4a61646564207468656972207a6f6d62696573204a61646564206f78656e20616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.42.9.1.3.57839|4x|627574206275742074686569722062757420666f72776172642064726976696e67204a61646564207468656972204a61646564 +1.3.6.1.4.1.2620.1.42.9.1.3.58995|4x|717561696e746c7920717561696e746c79206b657074207468656972206f78656e204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.42.9.1.3.63227|4x|6b657074206b6570742064726976696e67206f78656e206163746564 +1.3.6.1.4.1.2620.1.42.9.1.4.3560|4x|616374656420746865697220627574207a6f6d62696573207a6f6d6269657320746865697220717561696e746c792064726976696e67206b657074 +1.3.6.1.4.1.2620.1.42.9.1.4.3851|4|forward +1.3.6.1.4.1.2620.1.42.9.1.4.5012|4x|666f7277617264206f78656e20717561696e746c79207a6f6d6269657320746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.42.9.1.4.21820|4x|6f78656e2074686569722064726976696e6720627574206b657074206f78656e206163746564 +1.3.6.1.4.1.2620.1.42.9.1.4.24307|4x|666f7277617264207468656972206b657074207a6f6d62696573206275742074686569722064726976696e672064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.42.9.1.4.40285|4x|7468656972206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.42.9.1.4.52436|4x|717561696e746c7920627574207a6f6d6269657320627574204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.42.9.1.4.57839|4x|6b657074206f78656e207468656972206163746564206163746564 +1.3.6.1.4.1.2620.1.42.9.1.4.58995|4x|717561696e746c792064726976696e67206f78656e20666f727761726420717561696e746c7920717561696e746c79 +1.3.6.1.4.1.2620.1.42.9.1.4.63227|4x|7a6f6d626965732062757420717561696e746c79206163746564206163746564 +1.3.6.1.4.1.2620.1.42.9.1.5.3560|4x|7a6f6d626965732064726976696e67204a61646564 +1.3.6.1.4.1.2620.1.42.9.1.5.3851|4x|6b657074206163746564206f78656e20717561696e746c7920717561696e746c79206f78656e20627574207468656972 +1.3.6.1.4.1.2620.1.42.9.1.5.5012|4x|666f727761726420666f72776172642064726976696e67206f78656e206b657074 +1.3.6.1.4.1.2620.1.42.9.1.5.21820|4|their +1.3.6.1.4.1.2620.1.42.9.1.5.24307|4x|6b6570742062757420616374656420666f7277617264206f78656e +1.3.6.1.4.1.2620.1.42.9.1.5.40285|4|zombies +1.3.6.1.4.1.2620.1.42.9.1.5.52436|4x|4a61646564206f78656e20666f7277617264206b65707420627574206b657074 +1.3.6.1.4.1.2620.1.42.9.1.5.57839|4x|666f7277617264207a6f6d626965732064726976696e67206b65707420717561696e746c7920666f7277617264206f78656e206b657074204a61646564 +1.3.6.1.4.1.2620.1.42.9.1.5.58995|4x|4a6164656420717561696e746c792064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.42.9.1.5.63227|4|their +1.3.6.1.4.1.2620.1.43.1.1.0|4x|61637465642074686569722074686569722061637465642064726976696e6720627574 +1.3.6.1.4.1.2620.1.43.1.2.0|4x|6163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.43.1.3.0|4x|64726976696e6720717561696e746c79204a6164656420746865697220717561696e746c7920746865697220666f7277617264207468656972206b657074 +1.3.6.1.4.1.2620.1.43.2.1.0|4x|717561696e746c7920666f7277617264206b657074206f78656e204a616465642064726976696e67204a61646564204a61646564207468656972 +1.3.6.1.4.1.2620.1.43.2.2.0|4x|717561696e746c79206b6570742064726976696e6720666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.43.2.3.0|4x|64726976696e6720666f7277617264207a6f6d62696573207468656972 +1.3.6.1.4.1.2620.1.43.2.4.0|4x|666f7277617264206f78656e2062757420717561696e746c79207a6f6d6269657320717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.43.3.1.0|2|1 +1.3.6.1.4.1.2620.1.43.3.2.0|4x|6f78656e20717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.43.101.0|2|3 +1.3.6.1.4.1.2620.1.43.102.0|4x|62757420666f7277617264 +1.3.6.1.4.1.2620.1.43.103.0|4x|717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.44.1.1.1.1.2213|66|2213 +1.3.6.1.4.1.2620.1.44.1.1.1.1.9576|66|9576 +1.3.6.1.4.1.2620.1.44.1.1.1.1.9685|66|9685 +1.3.6.1.4.1.2620.1.44.1.1.1.1.30366|66|30366 +1.3.6.1.4.1.2620.1.44.1.1.1.1.30757|66|30757 +1.3.6.1.4.1.2620.1.44.1.1.1.1.40292|66|40292 +1.3.6.1.4.1.2620.1.44.1.1.1.1.45039|66|45039 +1.3.6.1.4.1.2620.1.44.1.1.1.1.51637|66|51637 +1.3.6.1.4.1.2620.1.44.1.1.1.1.62524|66|62524 +1.3.6.1.4.1.2620.1.44.1.1.1.1.62847|66|62847 +1.3.6.1.4.1.2620.1.44.1.1.1.2.2213|4x|6163746564204a61646564204a616465642064726976696e67207468656972206f78656e206b65707420746865697220627574 +1.3.6.1.4.1.2620.1.44.1.1.1.2.9576|4x|6f78656e20717561696e746c79206b657074206163746564 +1.3.6.1.4.1.2620.1.44.1.1.1.2.9685|4x|64726976696e67206f78656e2064726976696e6720746865697220627574204a6164656420627574207468656972206f78656e +1.3.6.1.4.1.2620.1.44.1.1.1.2.30366|4x|746865697220666f7277617264206163746564 +1.3.6.1.4.1.2620.1.44.1.1.1.2.30757|4x|6b657074206b657074206f78656e20616374656420717561696e746c7920717561696e746c79207a6f6d6269657320746865697220627574 +1.3.6.1.4.1.2620.1.44.1.1.1.2.40292|4x|7468656972207a6f6d62696573207468656972 +1.3.6.1.4.1.2620.1.44.1.1.1.2.45039|4x|64726976696e67206f78656e204a61646564204a616465642062757420627574206275742064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.44.1.1.1.2.51637|4|driving +1.3.6.1.4.1.2620.1.44.1.1.1.2.62524|4x|627574206f78656e20627574206b657074 +1.3.6.1.4.1.2620.1.44.1.1.1.2.62847|4x|7468656972206b65707420627574 +1.3.6.1.4.1.2620.1.44.1.1.1.3.2213|4x|7468656972206f78656e204a616465642074686569722062757420666f7277617264207468656972206163746564 +1.3.6.1.4.1.2620.1.44.1.1.1.3.9576|4x|7a6f6d62696573207468656972206275742064726976696e67204a61646564206f78656e +1.3.6.1.4.1.2620.1.44.1.1.1.3.9685|4x|64726976696e6720746865697220746865697220627574207468656972207a6f6d62696573 +1.3.6.1.4.1.2620.1.44.1.1.1.3.30366|4x|64726976696e672061637465642061637465642064726976696e6720746865697220717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.44.1.1.1.3.30757|4|zombies +1.3.6.1.4.1.2620.1.44.1.1.1.3.40292|4x|6f78656e20746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.44.1.1.1.3.45039|4|oxen +1.3.6.1.4.1.2620.1.44.1.1.1.3.51637|4x|64726976696e67207a6f6d62696573207a6f6d62696573204a6164656420666f727761726420627574206b657074207468656972 +1.3.6.1.4.1.2620.1.44.1.1.1.3.62524|4x|4a6164656420616374656420627574204a61646564 +1.3.6.1.4.1.2620.1.44.1.1.1.3.62847|4x|717561696e746c79206b657074206163746564204a61646564206163746564207a6f6d62696573207468656972204a61646564206f78656e +1.3.6.1.4.1.2620.1.44.1.1.1.4.2213|2|12 +1.3.6.1.4.1.2620.1.44.1.1.1.4.9576|2|20 +1.3.6.1.4.1.2620.1.44.1.1.1.4.9685|2|17 +1.3.6.1.4.1.2620.1.44.1.1.1.4.30366|2|13 +1.3.6.1.4.1.2620.1.44.1.1.1.4.30757|2|23 +1.3.6.1.4.1.2620.1.44.1.1.1.4.40292|2|10 +1.3.6.1.4.1.2620.1.44.1.1.1.4.45039|2|4 +1.3.6.1.4.1.2620.1.44.1.1.1.4.51637|2|13 +1.3.6.1.4.1.2620.1.44.1.1.1.4.62524|2|0 +1.3.6.1.4.1.2620.1.44.1.1.1.4.62847|2|24 +1.3.6.1.4.1.2620.1.44.1.1.1.5.2213|2|0 +1.3.6.1.4.1.2620.1.44.1.1.1.5.9576|2|14 +1.3.6.1.4.1.2620.1.44.1.1.1.5.9685|2|27 +1.3.6.1.4.1.2620.1.44.1.1.1.5.30366|2|22 +1.3.6.1.4.1.2620.1.44.1.1.1.5.30757|2|31 +1.3.6.1.4.1.2620.1.44.1.1.1.5.40292|2|22 +1.3.6.1.4.1.2620.1.44.1.1.1.5.45039|2|23 +1.3.6.1.4.1.2620.1.44.1.1.1.5.51637|2|1 +1.3.6.1.4.1.2620.1.44.1.1.1.5.62524|2|25 +1.3.6.1.4.1.2620.1.44.1.1.1.5.62847|2|30 +1.3.6.1.4.1.2620.1.44.1.1.1.6.2213|2|24 +1.3.6.1.4.1.2620.1.44.1.1.1.6.9576|2|17 +1.3.6.1.4.1.2620.1.44.1.1.1.6.9685|2|22 +1.3.6.1.4.1.2620.1.44.1.1.1.6.30366|2|28 +1.3.6.1.4.1.2620.1.44.1.1.1.6.30757|2|22 +1.3.6.1.4.1.2620.1.44.1.1.1.6.40292|2|7 +1.3.6.1.4.1.2620.1.44.1.1.1.6.45039|2|15 +1.3.6.1.4.1.2620.1.44.1.1.1.6.51637|2|22 +1.3.6.1.4.1.2620.1.44.1.1.1.6.62524|2|1 +1.3.6.1.4.1.2620.1.44.1.1.1.6.62847|2|15 +1.3.6.1.4.1.2620.1.44.1.1.1.7.2213|2|15 +1.3.6.1.4.1.2620.1.44.1.1.1.7.9576|2|30 +1.3.6.1.4.1.2620.1.44.1.1.1.7.9685|2|6 +1.3.6.1.4.1.2620.1.44.1.1.1.7.30366|2|5 +1.3.6.1.4.1.2620.1.44.1.1.1.7.30757|2|25 +1.3.6.1.4.1.2620.1.44.1.1.1.7.40292|2|7 +1.3.6.1.4.1.2620.1.44.1.1.1.7.45039|2|9 +1.3.6.1.4.1.2620.1.44.1.1.1.7.51637|2|3 +1.3.6.1.4.1.2620.1.44.1.1.1.7.62524|2|11 +1.3.6.1.4.1.2620.1.44.1.1.1.7.62847|2|24 +1.3.6.1.4.1.2620.1.44.1.1.1.8.2213|2|27 +1.3.6.1.4.1.2620.1.44.1.1.1.8.9576|2|9 +1.3.6.1.4.1.2620.1.44.1.1.1.8.9685|2|6 +1.3.6.1.4.1.2620.1.44.1.1.1.8.30366|2|30 +1.3.6.1.4.1.2620.1.44.1.1.1.8.30757|2|4 +1.3.6.1.4.1.2620.1.44.1.1.1.8.40292|2|29 +1.3.6.1.4.1.2620.1.44.1.1.1.8.45039|2|4 +1.3.6.1.4.1.2620.1.44.1.1.1.8.51637|2|20 +1.3.6.1.4.1.2620.1.44.1.1.1.8.62524|2|11 +1.3.6.1.4.1.2620.1.44.1.1.1.8.62847|2|2 +1.3.6.1.4.1.2620.1.44.1.1.1.9.2213|2|16 +1.3.6.1.4.1.2620.1.44.1.1.1.9.9576|2|18 +1.3.6.1.4.1.2620.1.44.1.1.1.9.9685|2|21 +1.3.6.1.4.1.2620.1.44.1.1.1.9.30366|2|13 +1.3.6.1.4.1.2620.1.44.1.1.1.9.30757|2|5 +1.3.6.1.4.1.2620.1.44.1.1.1.9.40292|2|31 +1.3.6.1.4.1.2620.1.44.1.1.1.9.45039|2|1 +1.3.6.1.4.1.2620.1.44.1.1.1.9.51637|2|3 +1.3.6.1.4.1.2620.1.44.1.1.1.9.62524|2|10 +1.3.6.1.4.1.2620.1.44.1.1.1.9.62847|2|12 +1.3.6.1.4.1.2620.1.44.1.1.1.10.2213|2|1 +1.3.6.1.4.1.2620.1.44.1.1.1.10.9576|2|10 +1.3.6.1.4.1.2620.1.44.1.1.1.10.9685|2|1 +1.3.6.1.4.1.2620.1.44.1.1.1.10.30366|2|11 +1.3.6.1.4.1.2620.1.44.1.1.1.10.30757|2|29 +1.3.6.1.4.1.2620.1.44.1.1.1.10.40292|2|13 +1.3.6.1.4.1.2620.1.44.1.1.1.10.45039|2|4 +1.3.6.1.4.1.2620.1.44.1.1.1.10.51637|2|15 +1.3.6.1.4.1.2620.1.44.1.1.1.10.62524|2|27 +1.3.6.1.4.1.2620.1.44.1.1.1.10.62847|2|8 +1.3.6.1.4.1.2620.1.44.1.1.1.11.2213|4x|616374656420616374656420746865697220746865697220616374656420666f7277617264 +1.3.6.1.4.1.2620.1.44.1.1.1.11.9576|4x|666f727761726420627574207a6f6d62696573206f78656e206163746564206b657074 +1.3.6.1.4.1.2620.1.44.1.1.1.11.9685|4|kept +1.3.6.1.4.1.2620.1.44.1.1.1.11.30366|4x|4a616465642061637465642064726976696e672062757420746865697220666f7277617264204a61646564 +1.3.6.1.4.1.2620.1.44.1.1.1.11.30757|4x|6b657074207468656972206f78656e206f78656e2064726976696e67206163746564204a61646564207468656972204a61646564 +1.3.6.1.4.1.2620.1.44.1.1.1.11.40292|4x|627574204a61646564206f78656e206b65707420627574206163746564206163746564 +1.3.6.1.4.1.2620.1.44.1.1.1.11.45039|4x|6b657074207a6f6d62696573206f78656e20627574 +1.3.6.1.4.1.2620.1.44.1.1.1.11.51637|4x|6163746564206163746564207a6f6d62696573204a61646564204a61646564204a61646564206163746564 +1.3.6.1.4.1.2620.1.44.1.1.1.11.62524|4x|61637465642064726976696e67204a6164656420627574206163746564206f78656e +1.3.6.1.4.1.2620.1.44.1.1.1.11.62847|4x|717561696e746c7920717561696e746c79207468656972206163746564206b6570742064726976696e67206163746564204a61646564 +1.3.6.1.4.1.2620.1.44.1.1.1.12.2213|4x|6b657074206f78656e2064726976696e67206b657074 +1.3.6.1.4.1.2620.1.44.1.1.1.12.9576|4x|74686569722062757420666f727761726420627574 +1.3.6.1.4.1.2620.1.44.1.1.1.12.9685|4x|7a6f6d62696573204a61646564 +1.3.6.1.4.1.2620.1.44.1.1.1.12.30366|4x|666f72776172642064726976696e6720666f7277617264204a6164656420717561696e746c7920717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.1.44.1.1.1.12.30757|4x|6b657074207468656972206b657074 +1.3.6.1.4.1.2620.1.44.1.1.1.12.40292|4x|7468656972206163746564206f78656e20666f72776172642064726976696e6720666f7277617264206b65707420666f727761726420627574 +1.3.6.1.4.1.2620.1.44.1.1.1.12.45039|4x|627574207468656972206163746564207a6f6d62696573206163746564207468656972 +1.3.6.1.4.1.2620.1.44.1.1.1.12.51637|4x|717561696e746c7920746865697220666f727761726420717561696e746c79206f78656e206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.44.1.1.1.12.62524|4|quaintly +1.3.6.1.4.1.2620.1.44.1.1.1.12.62847|4|oxen +1.3.6.1.4.1.2620.1.44.1.1.1.13.2213|4x|717561696e746c79206f78656e207a6f6d62696573206163746564206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.44.1.1.1.13.9576|4|Jaded +1.3.6.1.4.1.2620.1.44.1.1.1.13.9685|4x|6b65707420717561696e746c792074686569722064726976696e67204a6164656420627574206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.44.1.1.1.13.30366|4x|6f78656e2062757420717561696e746c7920717561696e746c79206f78656e20746865697220717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.44.1.1.1.13.30757|4x|64726976696e672064726976696e6720666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.44.1.1.1.13.40292|4x|7a6f6d62696573207a6f6d62696573206f78656e207a6f6d62696573206f78656e20627574206f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.44.1.1.1.13.45039|4x|7a6f6d6269657320666f7277617264207a6f6d62696573204a61646564206f78656e20666f7277617264207468656972206f78656e +1.3.6.1.4.1.2620.1.44.1.1.1.13.51637|4x|627574204a616465642064726976696e6720717561696e746c79204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.44.1.1.1.13.62524|4x|666f7277617264204a616465642064726976696e67206f78656e206f78656e206163746564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.1.44.1.1.1.13.62847|4|but +1.3.6.1.4.1.2620.1.44.1.1.1.14.2213|4x|7468656972204a61646564207468656972206163746564204a6164656420627574 +1.3.6.1.4.1.2620.1.44.1.1.1.14.9576|4x|6b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.44.1.1.1.14.9685|4x|746865697220666f7277617264 +1.3.6.1.4.1.2620.1.44.1.1.1.14.30366|4x|7a6f6d6269657320666f727761726420666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.44.1.1.1.14.30757|4x|7a6f6d62696573206f78656e207468656972206b657074204a61646564206f78656e20717561696e746c7920666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.44.1.1.1.14.40292|4x|717561696e746c79207468656972207a6f6d6269657320666f727761726420666f7277617264206f78656e20666f727761726420627574206163746564 +1.3.6.1.4.1.2620.1.44.1.1.1.14.45039|4x|62757420666f7277617264204a6164656420616374656420666f7277617264 +1.3.6.1.4.1.2620.1.44.1.1.1.14.51637|4x|4a61646564206b6570742064726976696e672064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.44.1.1.1.14.62524|4x|4a61646564206f78656e2064726976696e6720717561696e746c79207a6f6d62696573206b657074206b657074 +1.3.6.1.4.1.2620.1.44.1.1.1.14.62847|4x|717561696e746c7920627574 +1.3.6.1.4.1.2620.1.44.1.1.1.15.2213|4x|64726976696e67204a61646564207468656972207a6f6d626965732064726976696e67206163746564206b657074207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.44.1.1.1.15.9576|4x|666f7277617264204a61646564206f78656e20616374656420666f7277617264204a616465642064726976696e6720627574 +1.3.6.1.4.1.2620.1.44.1.1.1.15.9685|4x|64726976696e67207a6f6d62696573207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.1.44.1.1.1.15.30366|4x|717561696e746c7920746865697220717561696e746c79206f78656e20666f72776172642064726976696e67206b657074206b657074 +1.3.6.1.4.1.2620.1.44.1.1.1.15.30757|4|driving +1.3.6.1.4.1.2620.1.44.1.1.1.15.40292|4x|7a6f6d62696573206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.44.1.1.1.15.45039|4x|64726976696e67206163746564206163746564204a6164656420627574206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.44.1.1.1.15.51637|4x|627574206163746564207a6f6d62696573207a6f6d62696573206163746564207a6f6d62696573207468656972206f78656e +1.3.6.1.4.1.2620.1.44.1.1.1.15.62524|4x|6f78656e20627574206f78656e20717561696e746c7920717561696e746c7920666f7277617264207468656972 +1.3.6.1.4.1.2620.1.44.1.1.1.15.62847|4x|6f78656e20717561696e746c79206b657074206b657074 +1.3.6.1.4.1.2620.1.44.1.1.1.16.2213|2|9 +1.3.6.1.4.1.2620.1.44.1.1.1.16.9576|2|27 +1.3.6.1.4.1.2620.1.44.1.1.1.16.9685|2|7 +1.3.6.1.4.1.2620.1.44.1.1.1.16.30366|2|20 +1.3.6.1.4.1.2620.1.44.1.1.1.16.30757|2|29 +1.3.6.1.4.1.2620.1.44.1.1.1.16.40292|2|13 +1.3.6.1.4.1.2620.1.44.1.1.1.16.45039|2|13 +1.3.6.1.4.1.2620.1.44.1.1.1.16.51637|2|11 +1.3.6.1.4.1.2620.1.44.1.1.1.16.62524|2|25 +1.3.6.1.4.1.2620.1.44.1.1.1.16.62847|2|7 +1.3.6.1.4.1.2620.1.44.11.0|4x|717561696e746c79204a6164656420627574206b657074 +1.3.6.1.4.1.2620.1.44.12.0|4x|6f78656e206163746564207468656972207468656972 +1.3.6.1.4.1.2620.1.44.13.0|4x|717561696e746c792064726976696e6720746865697220627574206f78656e2064726976696e672064726976696e67204a61646564204a61646564 +1.3.6.1.4.1.2620.1.44.14.0|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.44.15.0|4x|4a61646564207468656972206f78656e207a6f6d626965732064726976696e67207a6f6d62696573204a61646564204a61646564 +1.3.6.1.4.1.2620.1.44.16.0|4x|62757420717561696e746c7920666f7277617264206f78656e2074686569722062757420746865697220666f727761726420627574 +1.3.6.1.4.1.2620.1.44.17.0|4x|7a6f6d6269657320627574206f78656e +1.3.6.1.4.1.2620.1.44.18.0|2|16 +1.3.6.1.4.1.2620.1.44.19.0|2|8 +1.3.6.1.4.1.2620.1.44.20.0|4x|666f7277617264206163746564207468656972206275742064726976696e67 +1.3.6.1.4.1.2620.1.44.21.0|4x|61637465642064726976696e67206163746564 +1.3.6.1.4.1.2620.1.44.22.0|4x|62757420616374656420666f727761726420666f727761726420746865697220666f7277617264206163746564 +1.3.6.1.4.1.2620.1.44.23.0|2|28 +1.3.6.1.4.1.2620.1.44.24.0|2|22 +1.3.6.1.4.1.2620.1.44.25.0|2|3 +1.3.6.1.4.1.2620.1.44.26.0|2|0 +1.3.6.1.4.1.2620.1.44.27.0|2|15 +1.3.6.1.4.1.2620.1.44.28.0|4x|4a6164656420717561696e746c7920627574207a6f6d62696573207468656972207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.44.29.0|4x|64726976696e6720666f727761726420666f7277617264207468656972207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.44.30.0|4x|64726976696e67207a6f6d626965732064726976696e672064726976696e6720666f727761726420666f72776172642064726976696e67206163746564 +1.3.6.1.4.1.2620.1.44.31.0|4x|7a6f6d626965732064726976696e6720627574 +1.3.6.1.4.1.2620.1.44.32.0|4x|64726976696e67207a6f6d62696573206f78656e206b657074206b6570742064726976696e672064726976696e67204a61646564 +1.3.6.1.4.1.2620.1.44.33.0|4x|64726976696e672064726976696e67204a6164656420717561696e746c79204a61646564207a6f6d626965732062757420717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.44.34.0|4x|6163746564206f78656e206b657074 +1.3.6.1.4.1.2620.1.44.35.0|4x|6f78656e206b6570742064726976696e6720746865697220746865697220627574207468656972 +1.3.6.1.4.1.2620.1.44.36.0|4x|64726976696e67206163746564206f78656e +1.3.6.1.4.1.2620.1.44.37.0|2|22 +1.3.6.1.4.1.2620.1.44.38.0|4|acted +1.3.6.1.4.1.2620.1.44.101.0|2|31 +1.3.6.1.4.1.2620.1.44.102.0|4x|4a61646564207468656972206f78656e204a61646564206b65707420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.44.103.0|4x|717561696e746c7920717561696e746c7920627574206b657074206f78656e +1.3.6.1.4.1.2620.1.46.1.1.0|4x|64726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.46.1.2.0|4|forward +1.3.6.1.4.1.2620.1.46.1.3.0|4x|62757420627574206163746564207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.46.1.4.0|4x|6f78656e206f78656e207a6f6d62696573207468656972206f78656e +1.3.6.1.4.1.2620.1.46.2.1.0|4x|6163746564206f78656e2062757420627574206f78656e204a61646564204a61646564207468656972 +1.3.6.1.4.1.2620.1.46.2.2.0|4x|7a6f6d6269657320666f727761726420666f727761726420627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.46.2.3.0|4x|7a6f6d62696573207a6f6d62696573207a6f6d62696573207a6f6d62696573206163746564206f78656e206b657074 +1.3.6.1.4.1.2620.1.46.3.1.0|4x|666f727761726420666f7277617264206b65707420717561696e746c79206f78656e206f78656e206f78656e206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.46.3.2.0|4x|6b657074207a6f6d62696573207a6f6d6269657320666f7277617264207468656972 +1.3.6.1.4.1.2620.1.46.3.3.0|4x|6b65707420616374656420627574206b657074 +1.3.6.1.4.1.2620.1.46.4.1.0|4x|627574206b65707420717561696e746c7920666f727761726420717561696e746c7920627574 +1.3.6.1.4.1.2620.1.46.4.2.0|4x|74686569722064726976696e6720666f7277617264204a61646564204a61646564 +1.3.6.1.4.1.2620.1.46.4.3.0|4x|7a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.46.5.1.0|4|Jaded +1.3.6.1.4.1.2620.1.46.5.2.0|4x|6f78656e2062757420627574207468656972207468656972 +1.3.6.1.4.1.2620.1.46.5.3.0|4x|666f7277617264204a61646564206163746564 +1.3.6.1.4.1.2620.1.46.5.4.0|4x|4a61646564204a61646564 +1.3.6.1.4.1.2620.1.46.101.0|2|23 +1.3.6.1.4.1.2620.1.46.102.0|4x|6b657074206f78656e20616374656420666f727761726420717561696e746c79206163746564207a6f6d62696573207a6f6d62696573204a61646564 +1.3.6.1.4.1.2620.1.46.103.0|4x|6b65707420627574207a6f6d6269657320717561696e746c79207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.49.16.0|4x|64726976696e67207a6f6d62696573204a6164656420717561696e746c792061637465642062757420666f7277617264206f78656e207468656972 +1.3.6.1.4.1.2620.1.49.17.0|4x|6b65707420627574 +1.3.6.1.4.1.2620.1.49.20.0|4x|717561696e746c79206b65707420616374656420627574206163746564207a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.49.25.0|4x|6f78656e20627574204a61646564206b657074 +1.3.6.1.4.1.2620.1.49.26.0|4x|4a61646564206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.49.27.0|4x|666f72776172642064726976696e67206f78656e204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.49.101.0|2|14 +1.3.6.1.4.1.2620.1.49.102.0|4x|6f78656e204a61646564206f78656e207a6f6d6269657320717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.49.103.0|4x|717561696e746c79206275742064726976696e6720666f7277617264206f78656e206b65707420666f7277617264206163746564 +1.3.6.1.4.1.2620.500.9000.1.1.33.199.227.196|64x|21c7e3c4 +1.3.6.1.4.1.2620.500.9000.1.1.46.126.175.232|64x|2e7eafe8 +1.3.6.1.4.1.2620.500.9000.1.1.66.212.142.154|64x|42d48e9a +1.3.6.1.4.1.2620.500.9000.1.1.108.69.23.40|64x|6c451728 +1.3.6.1.4.1.2620.500.9000.1.1.118.248.172.83|64x|76f8ac53 +1.3.6.1.4.1.2620.500.9000.1.1.120.227.215.77|64x|78e3d74d +1.3.6.1.4.1.2620.500.9000.1.1.129.43.253.78|64x|812bfd4e +1.3.6.1.4.1.2620.500.9000.1.1.167.222.155.98|64x|a7de9b62 +1.3.6.1.4.1.2620.500.9000.1.1.210.189.204.118|64x|d2bdcc76 +1.3.6.1.4.1.2620.500.9000.1.1.249.167.247.111|64x|f9a7f76f +1.3.6.1.4.1.2620.500.9000.1.19.33.199.227.196|64x|f0a40c77 +1.3.6.1.4.1.2620.500.9000.1.19.46.126.175.232|64x|01cb5596 +1.3.6.1.4.1.2620.500.9000.1.19.66.212.142.154|64x|0f88f65b +1.3.6.1.4.1.2620.500.9000.1.19.108.69.23.40|64x|c47c0707 +1.3.6.1.4.1.2620.500.9000.1.19.118.248.172.83|64x|93959791 +1.3.6.1.4.1.2620.500.9000.1.19.120.227.215.77|64x|799f1b66 +1.3.6.1.4.1.2620.500.9000.1.19.129.43.253.78|64x|ff1c4886 +1.3.6.1.4.1.2620.500.9000.1.19.167.222.155.98|64x|929de240 +1.3.6.1.4.1.2620.500.9000.1.19.210.189.204.118|64x|53ca368f +1.3.6.1.4.1.2620.500.9000.1.19.249.167.247.111|64x|ca4be6d9 +1.3.6.1.4.1.2620.500.9000.1.20.33.199.227.196|2|3 +1.3.6.1.4.1.2620.500.9000.1.20.46.126.175.232|2|3 +1.3.6.1.4.1.2620.500.9000.1.20.66.212.142.154|2|4 +1.3.6.1.4.1.2620.500.9000.1.20.108.69.23.40|2|4 +1.3.6.1.4.1.2620.500.9000.1.20.118.248.172.83|2|4 +1.3.6.1.4.1.2620.500.9000.1.20.120.227.215.77|2|3 +1.3.6.1.4.1.2620.500.9000.1.20.129.43.253.78|2|4 +1.3.6.1.4.1.2620.500.9000.1.20.167.222.155.98|2|3 +1.3.6.1.4.1.2620.500.9000.1.20.210.189.204.118|2|4 +1.3.6.1.4.1.2620.500.9000.1.20.249.167.247.111|2|3 +1.3.6.1.4.1.2620.500.9000.1.21.33.199.227.196|2|25 +1.3.6.1.4.1.2620.500.9000.1.21.46.126.175.232|2|5 +1.3.6.1.4.1.2620.500.9000.1.21.66.212.142.154|2|31 +1.3.6.1.4.1.2620.500.9000.1.21.108.69.23.40|2|0 +1.3.6.1.4.1.2620.500.9000.1.21.118.248.172.83|2|10 +1.3.6.1.4.1.2620.500.9000.1.21.120.227.215.77|2|4 +1.3.6.1.4.1.2620.500.9000.1.21.129.43.253.78|2|2 +1.3.6.1.4.1.2620.500.9000.1.21.167.222.155.98|2|3 +1.3.6.1.4.1.2620.500.9000.1.21.210.189.204.118|2|23 +1.3.6.1.4.1.2620.500.9000.1.21.249.167.247.111|2|2 +1.3.6.1.4.1.2620.500.9000.1.22.33.199.227.196|2|25 +1.3.6.1.4.1.2620.500.9000.1.22.46.126.175.232|2|15 +1.3.6.1.4.1.2620.500.9000.1.22.66.212.142.154|2|13 +1.3.6.1.4.1.2620.500.9000.1.22.108.69.23.40|2|26 +1.3.6.1.4.1.2620.500.9000.1.22.118.248.172.83|2|8 +1.3.6.1.4.1.2620.500.9000.1.22.120.227.215.77|2|26 +1.3.6.1.4.1.2620.500.9000.1.22.129.43.253.78|2|20 +1.3.6.1.4.1.2620.500.9000.1.22.167.222.155.98|2|7 +1.3.6.1.4.1.2620.500.9000.1.22.210.189.204.118|2|10 +1.3.6.1.4.1.2620.500.9000.1.22.249.167.247.111|2|19 +1.3.6.1.4.1.2620.500.9000.1.23.33.199.227.196|2|22 +1.3.6.1.4.1.2620.500.9000.1.23.46.126.175.232|2|17 +1.3.6.1.4.1.2620.500.9000.1.23.66.212.142.154|2|20 +1.3.6.1.4.1.2620.500.9000.1.23.108.69.23.40|2|22 +1.3.6.1.4.1.2620.500.9000.1.23.118.248.172.83|2|28 +1.3.6.1.4.1.2620.500.9000.1.23.120.227.215.77|2|15 +1.3.6.1.4.1.2620.500.9000.1.23.129.43.253.78|2|3 +1.3.6.1.4.1.2620.500.9000.1.23.167.222.155.98|2|8 +1.3.6.1.4.1.2620.500.9000.1.23.210.189.204.118|2|10 +1.3.6.1.4.1.2620.500.9000.1.23.249.167.247.111|2|0 +1.3.6.1.4.1.2620.500.9000.1.24.33.199.227.196|2|4 +1.3.6.1.4.1.2620.500.9000.1.24.46.126.175.232|2|13 +1.3.6.1.4.1.2620.500.9000.1.24.66.212.142.154|2|27 +1.3.6.1.4.1.2620.500.9000.1.24.108.69.23.40|2|29 +1.3.6.1.4.1.2620.500.9000.1.24.118.248.172.83|2|15 +1.3.6.1.4.1.2620.500.9000.1.24.120.227.215.77|2|2 +1.3.6.1.4.1.2620.500.9000.1.24.129.43.253.78|2|0 +1.3.6.1.4.1.2620.500.9000.1.24.167.222.155.98|2|13 +1.3.6.1.4.1.2620.500.9000.1.24.210.189.204.118|2|25 +1.3.6.1.4.1.2620.500.9000.1.24.249.167.247.111|2|18 +1.3.6.1.4.1.2620.500.9000.1.25.33.199.227.196|2|19 +1.3.6.1.4.1.2620.500.9000.1.25.46.126.175.232|2|19 +1.3.6.1.4.1.2620.500.9000.1.25.66.212.142.154|2|17 +1.3.6.1.4.1.2620.500.9000.1.25.108.69.23.40|2|26 +1.3.6.1.4.1.2620.500.9000.1.25.118.248.172.83|2|19 +1.3.6.1.4.1.2620.500.9000.1.25.120.227.215.77|2|20 +1.3.6.1.4.1.2620.500.9000.1.25.129.43.253.78|2|30 +1.3.6.1.4.1.2620.500.9000.1.25.167.222.155.98|2|26 +1.3.6.1.4.1.2620.500.9000.1.25.210.189.204.118|2|10 +1.3.6.1.4.1.2620.500.9000.1.25.249.167.247.111|2|31 +1.3.6.1.4.1.2620.500.9000.1.26.33.199.227.196|4x|4a61646564206b65707420717561696e746c79 +1.3.6.1.4.1.2620.500.9000.1.26.46.126.175.232|4x|627574207468656972204a61646564 +1.3.6.1.4.1.2620.500.9000.1.26.66.212.142.154|4x|61637465642064726976696e6720666f72776172642064726976696e67207a6f6d62696573206163746564206163746564206f78656e +1.3.6.1.4.1.2620.500.9000.1.26.108.69.23.40|4x|7a6f6d62696573204a6164656420746865697220717561696e746c79207468656972 +1.3.6.1.4.1.2620.500.9000.1.26.118.248.172.83|4x|64726976696e67207a6f6d626965732064726976696e6720666f72776172642062757420746865697220627574207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.500.9000.1.26.120.227.215.77|4x|6b6570742061637465642064726976696e6720666f727761726420717561696e746c79206b65707420666f7277617264 +1.3.6.1.4.1.2620.500.9000.1.26.129.43.253.78|4x|627574207468656972206f78656e20666f7277617264206b657074 +1.3.6.1.4.1.2620.500.9000.1.26.167.222.155.98|4x|6b657074206b657074 +1.3.6.1.4.1.2620.500.9000.1.26.210.189.204.118|4x|6163746564207a6f6d626965732062757420627574206f78656e +1.3.6.1.4.1.2620.500.9000.1.26.249.167.247.111|4x|7468656972204a61646564 +1.3.6.1.4.1.2620.500.9000.1.27.33.199.227.196|2|9 +1.3.6.1.4.1.2620.500.9000.1.27.46.126.175.232|2|2 +1.3.6.1.4.1.2620.500.9000.1.27.66.212.142.154|2|5 +1.3.6.1.4.1.2620.500.9000.1.27.108.69.23.40|2|7 +1.3.6.1.4.1.2620.500.9000.1.27.118.248.172.83|2|5 +1.3.6.1.4.1.2620.500.9000.1.27.120.227.215.77|2|9 +1.3.6.1.4.1.2620.500.9000.1.27.129.43.253.78|2|9 +1.3.6.1.4.1.2620.500.9000.1.27.167.222.155.98|2|9 +1.3.6.1.4.1.2620.500.9000.1.27.210.189.204.118|2|2 +1.3.6.1.4.1.2620.500.9000.1.27.249.167.247.111|2|2 +1.3.6.1.4.1.2620.500.9000.1.28.33.199.227.196|2|4 +1.3.6.1.4.1.2620.500.9000.1.28.46.126.175.232|2|4 +1.3.6.1.4.1.2620.500.9000.1.28.66.212.142.154|2|3 +1.3.6.1.4.1.2620.500.9000.1.28.108.69.23.40|2|2 +1.3.6.1.4.1.2620.500.9000.1.28.118.248.172.83|2|3 +1.3.6.1.4.1.2620.500.9000.1.28.120.227.215.77|2|4 +1.3.6.1.4.1.2620.500.9000.1.28.129.43.253.78|2|3 +1.3.6.1.4.1.2620.500.9000.1.28.167.222.155.98|2|1 +1.3.6.1.4.1.2620.500.9000.1.28.210.189.204.118|2|2 +1.3.6.1.4.1.2620.500.9000.1.28.249.167.247.111|2|5 +1.3.6.1.4.1.2620.500.9000.1.29.33.199.227.196|2|9 +1.3.6.1.4.1.2620.500.9000.1.29.46.126.175.232|2|26 +1.3.6.1.4.1.2620.500.9000.1.29.66.212.142.154|2|22 +1.3.6.1.4.1.2620.500.9000.1.29.108.69.23.40|2|17 +1.3.6.1.4.1.2620.500.9000.1.29.118.248.172.83|2|0 +1.3.6.1.4.1.2620.500.9000.1.29.120.227.215.77|2|17 +1.3.6.1.4.1.2620.500.9000.1.29.129.43.253.78|2|8 +1.3.6.1.4.1.2620.500.9000.1.29.167.222.155.98|2|6 +1.3.6.1.4.1.2620.500.9000.1.29.210.189.204.118|2|14 +1.3.6.1.4.1.2620.500.9000.1.29.249.167.247.111|2|17 +1.3.6.1.4.1.2620.500.9002.1.1.3.29.123.204|64x|031d7bcc +1.3.6.1.4.1.2620.500.9002.1.1.9.35.229.234|64x|0923e5ea +1.3.6.1.4.1.2620.500.9002.1.1.40.82.179.97|64x|2852b361 +1.3.6.1.4.1.2620.500.9002.1.1.43.214.97.166|64x|2bd661a6 +1.3.6.1.4.1.2620.500.9002.1.1.76.230.249.240|64x|4ce6f9f0 +1.3.6.1.4.1.2620.500.9002.1.1.79.28.104.141|64x|4f1c688d +1.3.6.1.4.1.2620.500.9002.1.1.87.46.179.8|64x|572eb308 +1.3.6.1.4.1.2620.500.9002.1.1.129.155.25.70|64x|819b1946 +1.3.6.1.4.1.2620.500.9002.1.1.135.75.254.24|64x|874bfe18 +1.3.6.1.4.1.2620.500.9002.1.1.162.208.10.5|64x|a2d00a05 +1.3.6.1.4.1.2620.500.9002.1.2.3.29.123.204|4x|717561696e746c79206b657074207a6f6d6269657320666f7277617264204a61646564206b657074 +1.3.6.1.4.1.2620.500.9002.1.2.9.35.229.234|4x|616374656420666f7277617264 +1.3.6.1.4.1.2620.500.9002.1.2.40.82.179.97|4x|746865697220627574207a6f6d62696573207468656972206f78656e +1.3.6.1.4.1.2620.500.9002.1.2.43.214.97.166|4x|62757420616374656420717561696e746c7920627574206163746564207468656972204a61646564 +1.3.6.1.4.1.2620.500.9002.1.2.76.230.249.240|4x|6f78656e204a61646564206b6570742062757420717561696e746c7920717561696e746c79 +1.3.6.1.4.1.2620.500.9002.1.2.79.28.104.141|4x|6f78656e207468656972 +1.3.6.1.4.1.2620.500.9002.1.2.87.46.179.8|4x|7a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.500.9002.1.2.129.155.25.70|4x|7a6f6d62696573206b65707420717561696e746c79207468656972 +1.3.6.1.4.1.2620.500.9002.1.2.135.75.254.24|4x|62757420717561696e746c79 +1.3.6.1.4.1.2620.500.9002.1.2.162.208.10.5|4x|666f7277617264206b657074206163746564206275742062757420627574206b657074206f78656e20666f7277617264 +1.3.6.1.4.1.2620.500.9002.1.3.3.29.123.204|2|4 +1.3.6.1.4.1.2620.500.9002.1.3.9.35.229.234|2|3 +1.3.6.1.4.1.2620.500.9002.1.3.40.82.179.97|2|3 +1.3.6.1.4.1.2620.500.9002.1.3.43.214.97.166|2|3 +1.3.6.1.4.1.2620.500.9002.1.3.76.230.249.240|2|3 +1.3.6.1.4.1.2620.500.9002.1.3.79.28.104.141|2|4 +1.3.6.1.4.1.2620.500.9002.1.3.87.46.179.8|2|3 +1.3.6.1.4.1.2620.500.9002.1.3.129.155.25.70|2|3 +1.3.6.1.4.1.2620.500.9002.1.3.135.75.254.24|2|3 +1.3.6.1.4.1.2620.500.9002.1.3.162.208.10.5|2|3 +1.3.6.1.4.1.2620.500.9002.1.4.3.29.123.204|4x|4a61646564206b6570742074686569722064726976696e67 +1.3.6.1.4.1.2620.500.9002.1.4.9.35.229.234|4x|6163746564206b657074207468656972206f78656e206f78656e206b657074207468656972 +1.3.6.1.4.1.2620.500.9002.1.4.40.82.179.97|4x|74686569722064726976696e67204a61646564207a6f6d62696573206b657074204a61646564206f78656e206b65707420666f7277617264 +1.3.6.1.4.1.2620.500.9002.1.4.43.214.97.166|4x|717561696e746c7920666f727761726420616374656420627574206b657074204a61646564206163746564207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.500.9002.1.4.76.230.249.240|4x|7468656972207468656972204a61646564 +1.3.6.1.4.1.2620.500.9002.1.4.79.28.104.141|4|driving +1.3.6.1.4.1.2620.500.9002.1.4.87.46.179.8|4x|62757420717561696e746c79207a6f6d6269657320666f727761726420666f7277617264207a6f6d62696573207468656972 +1.3.6.1.4.1.2620.500.9002.1.4.129.155.25.70|4x|717561696e746c79207468656972 +1.3.6.1.4.1.2620.500.9002.1.4.135.75.254.24|4x|666f727761726420627574 +1.3.6.1.4.1.2620.500.9002.1.4.162.208.10.5|4x|64726976696e672064726976696e67 +1.3.6.1.4.1.2620.500.9002.1.5.3.29.123.204|64x|bcb0ee9f +1.3.6.1.4.1.2620.500.9002.1.5.9.35.229.234|64x|461ddd83 +1.3.6.1.4.1.2620.500.9002.1.5.40.82.179.97|64x|d4a23bd8 +1.3.6.1.4.1.2620.500.9002.1.5.43.214.97.166|64x|f512c661 +1.3.6.1.4.1.2620.500.9002.1.5.76.230.249.240|64x|0e7f11ba +1.3.6.1.4.1.2620.500.9002.1.5.79.28.104.141|64x|35bd9d4a +1.3.6.1.4.1.2620.500.9002.1.5.87.46.179.8|64x|0da67bf2 +1.3.6.1.4.1.2620.500.9002.1.5.129.155.25.70|64x|1241299b +1.3.6.1.4.1.2620.500.9002.1.5.135.75.254.24|64x|bdef3db0 +1.3.6.1.4.1.2620.500.9002.1.5.162.208.10.5|64x|fd93a4ac +1.3.6.1.4.1.2620.500.9002.1.6.3.29.123.204|4x|616374656420717561696e746c79207468656972206f78656e20627574 +1.3.6.1.4.1.2620.500.9002.1.6.9.35.229.234|4x|717561696e746c792064726976696e6720666f72776172642062757420666f7277617264206163746564207a6f6d62696573 +1.3.6.1.4.1.2620.500.9002.1.6.40.82.179.97|4|driving +1.3.6.1.4.1.2620.500.9002.1.6.43.214.97.166|4|zombies +1.3.6.1.4.1.2620.500.9002.1.6.76.230.249.240|4x|4a61646564206b65707420666f7277617264204a61646564206f78656e206f78656e20717561696e746c7920666f7277617264207468656972 +1.3.6.1.4.1.2620.500.9002.1.6.79.28.104.141|4x|4a61646564207468656972206f78656e207468656972206163746564206f78656e207468656972 +1.3.6.1.4.1.2620.500.9002.1.6.87.46.179.8|4x|6b657074206163746564 +1.3.6.1.4.1.2620.500.9002.1.6.129.155.25.70|4x|717561696e746c79206f78656e204a6164656420666f7277617264 +1.3.6.1.4.1.2620.500.9002.1.6.135.75.254.24|4x|6f78656e207a6f6d62696573207468656972206b657074207468656972 +1.3.6.1.4.1.2620.500.9002.1.6.162.208.10.5|4x|6b65707420666f7277617264207468656972 +1.3.6.1.4.1.2620.500.9002.1.7.3.29.123.204|64x|8c5c3e90 +1.3.6.1.4.1.2620.500.9002.1.7.9.35.229.234|64x|419c0d50 +1.3.6.1.4.1.2620.500.9002.1.7.40.82.179.97|64x|616d486b +1.3.6.1.4.1.2620.500.9002.1.7.43.214.97.166|64x|3e4888f1 +1.3.6.1.4.1.2620.500.9002.1.7.76.230.249.240|64x|eafc19b1 +1.3.6.1.4.1.2620.500.9002.1.7.79.28.104.141|64x|0627affd +1.3.6.1.4.1.2620.500.9002.1.7.87.46.179.8|64x|2e3692d5 +1.3.6.1.4.1.2620.500.9002.1.7.129.155.25.70|64x|97f97807 +1.3.6.1.4.1.2620.500.9002.1.7.135.75.254.24|64x|576f580f +1.3.6.1.4.1.2620.500.9002.1.7.162.208.10.5|64x|3d1dcf86 +1.3.6.1.4.1.2620.500.9002.1.8.3.29.123.204|2|0 +1.3.6.1.4.1.2620.500.9002.1.8.9.35.229.234|2|0 +1.3.6.1.4.1.2620.500.9002.1.8.40.82.179.97|2|1 +1.3.6.1.4.1.2620.500.9002.1.8.43.214.97.166|2|0 +1.3.6.1.4.1.2620.500.9002.1.8.76.230.249.240|2|2 +1.3.6.1.4.1.2620.500.9002.1.8.79.28.104.141|2|0 +1.3.6.1.4.1.2620.500.9002.1.8.87.46.179.8|2|2 +1.3.6.1.4.1.2620.500.9002.1.8.129.155.25.70|2|2 +1.3.6.1.4.1.2620.500.9002.1.8.135.75.254.24|2|2 +1.3.6.1.4.1.2620.500.9002.1.8.162.208.10.5|2|2 +1.3.6.1.4.1.2620.500.9002.1.9.3.29.123.204|2|2 +1.3.6.1.4.1.2620.500.9002.1.9.9.35.229.234|2|0 +1.3.6.1.4.1.2620.500.9002.1.9.40.82.179.97|2|0 +1.3.6.1.4.1.2620.500.9002.1.9.43.214.97.166|2|2 +1.3.6.1.4.1.2620.500.9002.1.9.76.230.249.240|2|2 +1.3.6.1.4.1.2620.500.9002.1.9.79.28.104.141|2|1 +1.3.6.1.4.1.2620.500.9002.1.9.87.46.179.8|2|0 +1.3.6.1.4.1.2620.500.9002.1.9.129.155.25.70|2|0 +1.3.6.1.4.1.2620.500.9002.1.9.135.75.254.24|2|0 +1.3.6.1.4.1.2620.500.9002.1.9.162.208.10.5|2|0 +1.3.6.1.4.1.2620.500.9002.1.10.3.29.123.204|2|3 +1.3.6.1.4.1.2620.500.9002.1.10.9.35.229.234|2|1 +1.3.6.1.4.1.2620.500.9002.1.10.40.82.179.97|2|2 +1.3.6.1.4.1.2620.500.9002.1.10.43.214.97.166|2|3 +1.3.6.1.4.1.2620.500.9002.1.10.76.230.249.240|2|3 +1.3.6.1.4.1.2620.500.9002.1.10.79.28.104.141|2|1 +1.3.6.1.4.1.2620.500.9002.1.10.87.46.179.8|2|3 +1.3.6.1.4.1.2620.500.9002.1.10.129.155.25.70|2|1 +1.3.6.1.4.1.2620.500.9002.1.10.135.75.254.24|2|2 +1.3.6.1.4.1.2620.500.9002.1.10.162.208.10.5|2|1 +1.3.6.1.4.1.2620.500.9002.1.11.3.29.123.204|2|1 +1.3.6.1.4.1.2620.500.9002.1.11.9.35.229.234|2|2 +1.3.6.1.4.1.2620.500.9002.1.11.40.82.179.97|2|1 +1.3.6.1.4.1.2620.500.9002.1.11.43.214.97.166|2|2 +1.3.6.1.4.1.2620.500.9002.1.11.76.230.249.240|2|2 +1.3.6.1.4.1.2620.500.9002.1.11.79.28.104.141|2|1 +1.3.6.1.4.1.2620.500.9002.1.11.87.46.179.8|2|1 +1.3.6.1.4.1.2620.500.9002.1.11.129.155.25.70|2|2 +1.3.6.1.4.1.2620.500.9002.1.11.135.75.254.24|2|1 +1.3.6.1.4.1.2620.500.9002.1.11.162.208.10.5|2|1 +1.3.6.1.4.1.2620.500.9003.1.1.38.64.229.219|64x|2640e5db +1.3.6.1.4.1.2620.500.9003.1.1.41.203.72.238|64x|29cb48ee +1.3.6.1.4.1.2620.500.9003.1.1.54.78.86.56|64x|364e5638 +1.3.6.1.4.1.2620.500.9003.1.1.55.152.115.196|64x|379873c4 +1.3.6.1.4.1.2620.500.9003.1.1.60.242.137.213|64x|3cf289d5 +1.3.6.1.4.1.2620.500.9003.1.1.98.19.200.197|64x|6213c8c5 +1.3.6.1.4.1.2620.500.9003.1.1.139.251.136.61|64x|8bfb883d +1.3.6.1.4.1.2620.500.9003.1.1.147.118.185.135|64x|9376b987 +1.3.6.1.4.1.2620.500.9003.1.1.199.246.13.174|64x|c7f60dae +1.3.6.1.4.1.2620.500.9003.1.1.241.64.12.155|64x|f1400c9b +1.3.6.1.4.1.2620.500.9003.1.2.38.64.229.219|4x|717561696e746c7920616374656420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.500.9003.1.2.41.203.72.238|4x|7468656972206f78656e206f78656e20666f7277617264204a6164656420666f7277617264 +1.3.6.1.4.1.2620.500.9003.1.2.54.78.86.56|4x|64726976696e672064726976696e67 +1.3.6.1.4.1.2620.500.9003.1.2.55.152.115.196|4x|7468656972207a6f6d62696573206f78656e20746865697220717561696e746c7920717561696e746c79204a6164656420666f7277617264 +1.3.6.1.4.1.2620.500.9003.1.2.60.242.137.213|4|but +1.3.6.1.4.1.2620.500.9003.1.2.98.19.200.197|4x|6f78656e206f78656e2064726976696e6720717561696e746c79206b657074 +1.3.6.1.4.1.2620.500.9003.1.2.139.251.136.61|4x|7a6f6d6269657320666f727761726420746865697220717561696e746c79207468656972 +1.3.6.1.4.1.2620.500.9003.1.2.147.118.185.135|4|zombies +1.3.6.1.4.1.2620.500.9003.1.2.199.246.13.174|4x|666f7277617264207a6f6d62696573206f78656e2064726976696e6720666f72776172642074686569722064726976696e67207468656972206163746564 +1.3.6.1.4.1.2620.500.9003.1.2.241.64.12.155|4|Jaded +1.3.6.1.4.1.2620.500.9003.1.3.38.64.229.219|2|3 +1.3.6.1.4.1.2620.500.9003.1.3.41.203.72.238|2|4 +1.3.6.1.4.1.2620.500.9003.1.3.54.78.86.56|2|4 +1.3.6.1.4.1.2620.500.9003.1.3.55.152.115.196|2|4 +1.3.6.1.4.1.2620.500.9003.1.3.60.242.137.213|2|3 +1.3.6.1.4.1.2620.500.9003.1.3.98.19.200.197|2|4 +1.3.6.1.4.1.2620.500.9003.1.3.139.251.136.61|2|4 +1.3.6.1.4.1.2620.500.9003.1.3.147.118.185.135|2|3 +1.3.6.1.4.1.2620.500.9003.1.3.199.246.13.174|2|4 +1.3.6.1.4.1.2620.500.9003.1.3.241.64.12.155|2|3 +1.3.6.1.4.1.2620.500.9003.1.4.38.64.229.219|4x|6275742064726976696e67 +1.3.6.1.4.1.2620.500.9003.1.4.41.203.72.238|4x|666f7277617264204a6164656420666f727761726420666f727761726420666f727761726420746865697220627574207468656972 +1.3.6.1.4.1.2620.500.9003.1.4.54.78.86.56|4x|4a616465642064726976696e67 +1.3.6.1.4.1.2620.500.9003.1.4.55.152.115.196|4x|6f78656e20717561696e746c79204a61646564204a61646564 +1.3.6.1.4.1.2620.500.9003.1.4.60.242.137.213|4x|7468656972207a6f6d62696573206f78656e20627574 +1.3.6.1.4.1.2620.500.9003.1.4.98.19.200.197|4x|61637465642064726976696e672064726976696e6720717561696e746c79206f78656e +1.3.6.1.4.1.2620.500.9003.1.4.139.251.136.61|4|oxen +1.3.6.1.4.1.2620.500.9003.1.4.147.118.185.135|4x|64726976696e67206f78656e204a6164656420717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.500.9003.1.4.199.246.13.174|4x|6b6570742064726976696e67207468656972206275742074686569722064726976696e67206163746564207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.500.9003.1.4.241.64.12.155|4x|746865697220666f7277617264207a6f6d62696573206f78656e2064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.500.9003.1.5.38.64.229.219|64x|93de6caa +1.3.6.1.4.1.2620.500.9003.1.5.41.203.72.238|64x|e3b44887 +1.3.6.1.4.1.2620.500.9003.1.5.54.78.86.56|64x|27783acb +1.3.6.1.4.1.2620.500.9003.1.5.55.152.115.196|64x|a34d81f8 +1.3.6.1.4.1.2620.500.9003.1.5.60.242.137.213|64x|d3a249a7 +1.3.6.1.4.1.2620.500.9003.1.5.98.19.200.197|64x|90c677a2 +1.3.6.1.4.1.2620.500.9003.1.5.139.251.136.61|64x|6bf0648c +1.3.6.1.4.1.2620.500.9003.1.5.147.118.185.135|64x|f9e143b5 +1.3.6.1.4.1.2620.500.9003.1.5.199.246.13.174|64x|1c647dc8 +1.3.6.1.4.1.2620.500.9003.1.5.241.64.12.155|64x|3399b278 +1.3.6.1.4.1.2620.500.9003.1.6.38.64.229.219|64x|927b89e9 +1.3.6.1.4.1.2620.500.9003.1.6.41.203.72.238|64x|06f4c3cf +1.3.6.1.4.1.2620.500.9003.1.6.54.78.86.56|64x|e3a4ea53 +1.3.6.1.4.1.2620.500.9003.1.6.55.152.115.196|64x|7acc51ea +1.3.6.1.4.1.2620.500.9003.1.6.60.242.137.213|64x|db022351 +1.3.6.1.4.1.2620.500.9003.1.6.98.19.200.197|64x|5525f43a +1.3.6.1.4.1.2620.500.9003.1.6.139.251.136.61|64x|3a2b1365 +1.3.6.1.4.1.2620.500.9003.1.6.147.118.185.135|64x|c773a393 +1.3.6.1.4.1.2620.500.9003.1.6.199.246.13.174|64x|ea50f047 +1.3.6.1.4.1.2620.500.9003.1.6.241.64.12.155|64x|7e70e950 +1.3.6.1.4.1.2620.500.9003.1.7.38.64.229.219|64x|3ae9f0cb +1.3.6.1.4.1.2620.500.9003.1.7.41.203.72.238|64x|9ea57746 +1.3.6.1.4.1.2620.500.9003.1.7.54.78.86.56|64x|dc35e3f7 +1.3.6.1.4.1.2620.500.9003.1.7.55.152.115.196|64x|56112b40 +1.3.6.1.4.1.2620.500.9003.1.7.60.242.137.213|64x|65a8cd28 +1.3.6.1.4.1.2620.500.9003.1.7.98.19.200.197|64x|4c9cda64 +1.3.6.1.4.1.2620.500.9003.1.7.139.251.136.61|64x|01667af4 +1.3.6.1.4.1.2620.500.9003.1.7.147.118.185.135|64x|597d8c0b +1.3.6.1.4.1.2620.500.9003.1.7.199.246.13.174|64x|cf609e29 +1.3.6.1.4.1.2620.500.9003.1.7.241.64.12.155|64x|cbd61c34 +1.3.6.1.4.1.2620.500.9003.1.8.38.64.229.219|2|2 +1.3.6.1.4.1.2620.500.9003.1.8.41.203.72.238|2|0 +1.3.6.1.4.1.2620.500.9003.1.8.54.78.86.56|2|1 +1.3.6.1.4.1.2620.500.9003.1.8.55.152.115.196|2|1 +1.3.6.1.4.1.2620.500.9003.1.8.60.242.137.213|2|1 +1.3.6.1.4.1.2620.500.9003.1.8.98.19.200.197|2|2 +1.3.6.1.4.1.2620.500.9003.1.8.139.251.136.61|2|1 +1.3.6.1.4.1.2620.500.9003.1.8.147.118.185.135|2|1 +1.3.6.1.4.1.2620.500.9003.1.8.199.246.13.174|2|1 +1.3.6.1.4.1.2620.500.9003.1.8.241.64.12.155|2|2 +1.3.6.1.4.1.2620.500.9003.1.9.38.64.229.219|2|0 +1.3.6.1.4.1.2620.500.9003.1.9.41.203.72.238|2|2 +1.3.6.1.4.1.2620.500.9003.1.9.54.78.86.56|2|1 +1.3.6.1.4.1.2620.500.9003.1.9.55.152.115.196|2|1 +1.3.6.1.4.1.2620.500.9003.1.9.60.242.137.213|2|1 +1.3.6.1.4.1.2620.500.9003.1.9.98.19.200.197|2|1 +1.3.6.1.4.1.2620.500.9003.1.9.139.251.136.61|2|0 +1.3.6.1.4.1.2620.500.9003.1.9.147.118.185.135|2|1 +1.3.6.1.4.1.2620.500.9003.1.9.199.246.13.174|2|1 +1.3.6.1.4.1.2620.500.9003.1.9.241.64.12.155|2|2 +1.3.6.1.4.1.2620.500.9003.1.10.38.64.229.219|2|2 +1.3.6.1.4.1.2620.500.9003.1.10.41.203.72.238|2|2 +1.3.6.1.4.1.2620.500.9003.1.10.54.78.86.56|2|3 +1.3.6.1.4.1.2620.500.9003.1.10.55.152.115.196|2|3 +1.3.6.1.4.1.2620.500.9003.1.10.60.242.137.213|2|3 +1.3.6.1.4.1.2620.500.9003.1.10.98.19.200.197|2|3 +1.3.6.1.4.1.2620.500.9003.1.10.139.251.136.61|2|1 +1.3.6.1.4.1.2620.500.9003.1.10.147.118.185.135|2|2 +1.3.6.1.4.1.2620.500.9003.1.10.199.246.13.174|2|1 +1.3.6.1.4.1.2620.500.9003.1.10.241.64.12.155|2|2 diff --git a/test/new-e2e/ndm/snmp/compose/data/cisco-asa-5525.snmprec b/test/new-e2e/ndm/snmp/compose/data/cisco-asa-5525.snmprec new file mode 100644 index 00000000000000..8184c651523c99 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/cisco-asa-5525.snmprec @@ -0,0 +1,1478 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.9.1.1408 +1.3.6.1.2.1.1.3.0|67|1727368662 +1.3.6.1.2.1.1.5.0|4|kept +1.3.6.1.2.1.2.2.1.1.11|2|11 +1.3.6.1.2.1.2.2.1.2.11|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.3.11|2|29 +1.3.6.1.2.1.2.2.1.4.11|2|10 +1.3.6.1.2.1.2.2.1.5.11|66|842689539 +1.3.6.1.2.1.2.2.1.6.11|4x|00 +1.3.6.1.2.1.2.2.1.7.11|2|2 +1.3.6.1.2.1.2.2.1.8.11|2|7 +1.3.6.1.2.1.2.2.1.9.11|67|4043941980 +1.3.6.1.2.1.2.2.1.10.11|65|2268799121 +1.3.6.1.2.1.2.2.1.11.11|65|1358081555 +1.3.6.1.2.1.2.2.1.12.11|65|2804916297 +1.3.6.1.2.1.2.2.1.13.11|65|1953269825 +1.3.6.1.2.1.2.2.1.14.11|65|3659465164 +1.3.6.1.2.1.2.2.1.15.11|65|3028473442 +1.3.6.1.2.1.2.2.1.16.11|65|2204618213 +1.3.6.1.2.1.2.2.1.17.11|65|3659357157 +1.3.6.1.2.1.2.2.1.18.11|65|1946069301 +1.3.6.1.2.1.2.2.1.19.11|65|1976763204 +1.3.6.1.2.1.2.2.1.20.11|65|1287028500 +1.3.6.1.2.1.2.2.1.21.11|66|3693484051 +1.3.6.1.2.1.6.5.0|65|2858992486 +1.3.6.1.2.1.6.6.0|65|4156312381 +1.3.6.1.2.1.6.7.0|65|2022233107 +1.3.6.1.2.1.6.8.0|65|2434846008 +1.3.6.1.2.1.6.9.0|66|3859114747 +1.3.6.1.2.1.6.10.0|65|443704958 +1.3.6.1.2.1.6.11.0|65|761536386 +1.3.6.1.2.1.6.12.0|65|3742055603 +1.3.6.1.2.1.6.13.1.1.23.177.97.199.10.151.211.52.249.28|2|12 +1.3.6.1.2.1.6.13.1.1.113.156.27.12.6.103.49.217.167.25|2|8 +1.3.6.1.2.1.6.13.1.1.122.61.54.190.29.172.169.37.170.22|2|5 +1.3.6.1.2.1.6.13.1.1.148.215.184.93.3.18.135.204.247.11|2|9 +1.3.6.1.2.1.6.13.1.1.192.71.88.207.22.184.150.214.61.14|2|12 +1.3.6.1.2.1.6.13.1.1.215.10.127.204.23.126.210.252.1.27|2|7 +1.3.6.1.2.1.6.13.1.1.223.16.55.201.31.104.212.252.181.5|2|9 +1.3.6.1.2.1.6.13.1.1.223.54.125.172.16.159.226.236.17.1|2|5 +1.3.6.1.2.1.6.13.1.1.227.50.96.2.2.215.88.85.244.22|2|3 +1.3.6.1.2.1.6.13.1.1.254.4.140.40.29.214.201.146.122.0|2|1 +1.3.6.1.2.1.6.13.1.2.23.177.97.199.10.151.211.52.249.28|64x|17b161c7 +1.3.6.1.2.1.6.13.1.2.113.156.27.12.6.103.49.217.167.25|64x|719c1b0c +1.3.6.1.2.1.6.13.1.2.122.61.54.190.29.172.169.37.170.22|64x|7a3d36be +1.3.6.1.2.1.6.13.1.2.148.215.184.93.3.18.135.204.247.11|64x|94d7b85d +1.3.6.1.2.1.6.13.1.2.192.71.88.207.22.184.150.214.61.14|64x|c04758cf +1.3.6.1.2.1.6.13.1.2.215.10.127.204.23.126.210.252.1.27|64x|d70a7fcc +1.3.6.1.2.1.6.13.1.2.223.16.55.201.31.104.212.252.181.5|64x|df1037c9 +1.3.6.1.2.1.6.13.1.2.223.54.125.172.16.159.226.236.17.1|64x|df367dac +1.3.6.1.2.1.6.13.1.2.227.50.96.2.2.215.88.85.244.22|64x|e3326002 +1.3.6.1.2.1.6.13.1.2.254.4.140.40.29.214.201.146.122.0|64x|fe048c28 +1.3.6.1.2.1.6.13.1.3.23.177.97.199.10.151.211.52.249.28|2|10 +1.3.6.1.2.1.6.13.1.3.113.156.27.12.6.103.49.217.167.25|2|6 +1.3.6.1.2.1.6.13.1.3.122.61.54.190.29.172.169.37.170.22|2|29 +1.3.6.1.2.1.6.13.1.3.148.215.184.93.3.18.135.204.247.11|2|3 +1.3.6.1.2.1.6.13.1.3.192.71.88.207.22.184.150.214.61.14|2|22 +1.3.6.1.2.1.6.13.1.3.215.10.127.204.23.126.210.252.1.27|2|23 +1.3.6.1.2.1.6.13.1.3.223.16.55.201.31.104.212.252.181.5|2|31 +1.3.6.1.2.1.6.13.1.3.223.54.125.172.16.159.226.236.17.1|2|16 +1.3.6.1.2.1.6.13.1.3.227.50.96.2.2.215.88.85.244.22|2|2 +1.3.6.1.2.1.6.13.1.3.254.4.140.40.29.214.201.146.122.0|2|29 +1.3.6.1.2.1.6.13.1.4.23.177.97.199.10.151.211.52.249.28|64x|97d334f9 +1.3.6.1.2.1.6.13.1.4.113.156.27.12.6.103.49.217.167.25|64x|6731d9a7 +1.3.6.1.2.1.6.13.1.4.122.61.54.190.29.172.169.37.170.22|64x|aca925aa +1.3.6.1.2.1.6.13.1.4.148.215.184.93.3.18.135.204.247.11|64x|1287ccf7 +1.3.6.1.2.1.6.13.1.4.192.71.88.207.22.184.150.214.61.14|64x|b896d63d +1.3.6.1.2.1.6.13.1.4.215.10.127.204.23.126.210.252.1.27|64x|7ed2fc01 +1.3.6.1.2.1.6.13.1.4.223.16.55.201.31.104.212.252.181.5|64x|68d4fcb5 +1.3.6.1.2.1.6.13.1.4.223.54.125.172.16.159.226.236.17.1|64x|9fe2ec11 +1.3.6.1.2.1.6.13.1.4.227.50.96.2.2.215.88.85.244.22|64x|d75855f4 +1.3.6.1.2.1.6.13.1.4.254.4.140.40.29.214.201.146.122.0|64x|d6c9927a +1.3.6.1.2.1.6.13.1.5.23.177.97.199.10.151.211.52.249.28|2|28 +1.3.6.1.2.1.6.13.1.5.113.156.27.12.6.103.49.217.167.25|2|25 +1.3.6.1.2.1.6.13.1.5.122.61.54.190.29.172.169.37.170.22|2|22 +1.3.6.1.2.1.6.13.1.5.148.215.184.93.3.18.135.204.247.11|2|11 +1.3.6.1.2.1.6.13.1.5.192.71.88.207.22.184.150.214.61.14|2|14 +1.3.6.1.2.1.6.13.1.5.215.10.127.204.23.126.210.252.1.27|2|27 +1.3.6.1.2.1.6.13.1.5.223.16.55.201.31.104.212.252.181.5|2|5 +1.3.6.1.2.1.6.13.1.5.223.54.125.172.16.159.226.236.17.1|2|1 +1.3.6.1.2.1.6.13.1.5.227.50.96.2.2.215.88.85.244.22|2|22 +1.3.6.1.2.1.6.13.1.5.254.4.140.40.29.214.201.146.122.0|2|0 +1.3.6.1.2.1.6.14.0|65|2935824574 +1.3.6.1.2.1.6.15.0|65|1544900307 +1.3.6.1.2.1.6.17.0|70|16581522528925471079 +1.3.6.1.2.1.6.18.0|70|3369991573516953990 +1.3.6.1.2.1.7.2.0|65|3998586035 +1.3.6.1.2.1.7.3.0|65|3549343151 +1.3.6.1.2.1.7.4.0|65|2404484755 +1.3.6.1.2.1.7.5.1.1.2.141.239.85.23|64x|028def55 +1.3.6.1.2.1.7.5.1.1.20.60.66.67.23|64x|143c4243 +1.3.6.1.2.1.7.5.1.1.42.145.113.188.16|64x|2a9171bc +1.3.6.1.2.1.7.5.1.1.78.118.31.86.2|64x|4e761f56 +1.3.6.1.2.1.7.5.1.1.85.153.183.119.31|64x|5599b777 +1.3.6.1.2.1.7.5.1.1.87.237.140.144.26|64x|57ed8c90 +1.3.6.1.2.1.7.5.1.1.145.214.51.243.3|64x|91d633f3 +1.3.6.1.2.1.7.5.1.1.169.8.79.103.26|64x|a9084f67 +1.3.6.1.2.1.7.5.1.1.172.6.61.73.19|64x|ac063d49 +1.3.6.1.2.1.7.5.1.1.209.91.67.71.4|64x|d15b4347 +1.3.6.1.2.1.7.5.1.2.2.141.239.85.23|2|23 +1.3.6.1.2.1.7.5.1.2.20.60.66.67.23|2|23 +1.3.6.1.2.1.7.5.1.2.42.145.113.188.16|2|16 +1.3.6.1.2.1.7.5.1.2.78.118.31.86.2|2|2 +1.3.6.1.2.1.7.5.1.2.85.153.183.119.31|2|31 +1.3.6.1.2.1.7.5.1.2.87.237.140.144.26|2|26 +1.3.6.1.2.1.7.5.1.2.145.214.51.243.3|2|3 +1.3.6.1.2.1.7.5.1.2.169.8.79.103.26|2|26 +1.3.6.1.2.1.7.5.1.2.172.6.61.73.19|2|19 +1.3.6.1.2.1.7.5.1.2.209.91.67.71.4|2|4 +1.3.6.1.2.1.7.7.1.1.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|2|0 +1.3.6.1.2.1.7.7.1.1.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|2|0 +1.3.6.1.2.1.7.7.1.1.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|2|1 +1.3.6.1.2.1.7.7.1.1.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|2|2 +1.3.6.1.2.1.7.7.1.1.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|2|2 +1.3.6.1.2.1.7.7.1.1.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|2|2 +1.3.6.1.2.1.7.7.1.1.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|2|2 +1.3.6.1.2.1.7.7.1.1.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|2|3 +1.3.6.1.2.1.7.7.1.1.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|2|4 +1.3.6.1.2.1.7.7.1.1.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|2|4 +1.3.6.1.2.1.7.7.1.2.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|4|their +1.3.6.1.2.1.7.7.1.2.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|4x|4a61646564206b65707420627574206b657074 +1.3.6.1.2.1.7.7.1.2.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|4x|717561696e746c79206b6570742064726976696e67206b6570742074686569722062757420717561696e746c79207a6f6d62696573 +1.3.6.1.2.1.7.7.1.2.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|4x|746865697220666f7277617264204a61646564 +1.3.6.1.2.1.7.7.1.2.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|4x|627574206163746564206b65707420627574206f78656e207468656972 +1.3.6.1.2.1.7.7.1.2.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|4x|666f727761726420666f727761726420717561696e746c79207a6f6d62696573 +1.3.6.1.2.1.7.7.1.2.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|4x|64726976696e67207468656972206b657074206163746564204a61646564207a6f6d62696573206163746564206b657074 +1.3.6.1.2.1.7.7.1.2.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|4x|717561696e746c79207a6f6d626965732062757420627574206b657074 +1.3.6.1.2.1.7.7.1.2.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|4x|4a61646564204a6164656420717561696e746c79206f78656e206f78656e204a6164656420627574206163746564 +1.3.6.1.2.1.7.7.1.2.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|4x|717561696e746c7920666f727761726420627574207a6f6d626965732064726976696e67204a61646564207a6f6d62696573 +1.3.6.1.2.1.7.7.1.3.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|66|59995 +1.3.6.1.2.1.7.7.1.3.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|66|13615 +1.3.6.1.2.1.7.7.1.3.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|66|17513 +1.3.6.1.2.1.7.7.1.3.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|66|2480 +1.3.6.1.2.1.7.7.1.3.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|66|37036 +1.3.6.1.2.1.7.7.1.3.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|66|20490 +1.3.6.1.2.1.7.7.1.3.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|66|30354 +1.3.6.1.2.1.7.7.1.3.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|66|6240 +1.3.6.1.2.1.7.7.1.3.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|66|29265 +1.3.6.1.2.1.7.7.1.3.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|66|27397 +1.3.6.1.2.1.7.7.1.4.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|2|0 +1.3.6.1.2.1.7.7.1.4.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|2|2 +1.3.6.1.2.1.7.7.1.4.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|2|16 +1.3.6.1.2.1.7.7.1.4.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|2|0 +1.3.6.1.2.1.7.7.1.4.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|2|3 +1.3.6.1.2.1.7.7.1.4.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|2|16 +1.3.6.1.2.1.7.7.1.4.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|2|3 +1.3.6.1.2.1.7.7.1.4.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|2|4 +1.3.6.1.2.1.7.7.1.4.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|2|1 +1.3.6.1.2.1.7.7.1.4.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|2|3 +1.3.6.1.2.1.7.7.1.5.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|4x|6163746564207a6f6d62696573207468656972204a61646564206b657074 +1.3.6.1.2.1.7.7.1.5.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|4x|7a6f6d62696573207a6f6d62696573206b65707420666f7277617264206b657074206b657074204a6164656420627574207468656972 +1.3.6.1.2.1.7.7.1.5.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|4x|666f7277617264206f78656e204a61646564 +1.3.6.1.2.1.7.7.1.5.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|4x|4a616465642064726976696e6720616374656420616374656420627574204a61646564207a6f6d62696573 +1.3.6.1.2.1.7.7.1.5.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|4x|64726976696e67206f78656e206b65707420717561696e746c79207468656972207a6f6d62696573207a6f6d62696573 +1.3.6.1.2.1.7.7.1.5.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|4x|717561696e746c79206163746564 +1.3.6.1.2.1.7.7.1.5.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|4x|6275742074686569722062757420717561696e746c79206b657074 +1.3.6.1.2.1.7.7.1.5.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|4|their +1.3.6.1.2.1.7.7.1.5.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|4x|7a6f6d626965732074686569722064726976696e672062757420717561696e746c79207a6f6d626965732074686569722064726976696e67207468656972 +1.3.6.1.2.1.7.7.1.5.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|4x|62757420666f7277617264 +1.3.6.1.2.1.7.7.1.6.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|66|55726 +1.3.6.1.2.1.7.7.1.6.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|66|28531 +1.3.6.1.2.1.7.7.1.6.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|66|11079 +1.3.6.1.2.1.7.7.1.6.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|66|36798 +1.3.6.1.2.1.7.7.1.6.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|66|16811 +1.3.6.1.2.1.7.7.1.6.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|66|48634 +1.3.6.1.2.1.7.7.1.6.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|66|47173 +1.3.6.1.2.1.7.7.1.6.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|66|64624 +1.3.6.1.2.1.7.7.1.6.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|66|50219 +1.3.6.1.2.1.7.7.1.6.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|66|29145 +1.3.6.1.2.1.7.7.1.7.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|66|774 +1.3.6.1.2.1.7.7.1.7.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|66|32766 +1.3.6.1.2.1.7.7.1.7.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|66|42521 +1.3.6.1.2.1.7.7.1.7.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|66|62779 +1.3.6.1.2.1.7.7.1.7.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|66|47504 +1.3.6.1.2.1.7.7.1.7.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|66|55881 +1.3.6.1.2.1.7.7.1.7.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|66|30456 +1.3.6.1.2.1.7.7.1.7.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|66|29068 +1.3.6.1.2.1.7.7.1.7.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|66|30734 +1.3.6.1.2.1.7.7.1.7.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|66|33093 +1.3.6.1.2.1.7.7.1.8.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|66|22659 +1.3.6.1.2.1.7.7.1.8.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|66|19353 +1.3.6.1.2.1.7.7.1.8.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|66|61976 +1.3.6.1.2.1.7.7.1.8.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|66|61206 +1.3.6.1.2.1.7.7.1.8.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|66|14129 +1.3.6.1.2.1.7.7.1.8.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|66|59181 +1.3.6.1.2.1.7.7.1.8.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|66|15936 +1.3.6.1.2.1.7.7.1.8.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|66|5023 +1.3.6.1.2.1.7.7.1.8.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|66|22219 +1.3.6.1.2.1.7.7.1.8.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|66|45286 +1.3.6.1.2.1.7.8.0|70|6116206687099577350 +1.3.6.1.2.1.7.9.0|70|60548728080473664 +1.3.6.1.2.1.31.1.1.1.1.11|4x|65746830 +1.3.6.1.2.1.31.1.1.1.2.11|65|3971642957 +1.3.6.1.2.1.31.1.1.1.3.11|65|3271801795 +1.3.6.1.2.1.31.1.1.1.4.11|65|3342364789 +1.3.6.1.2.1.31.1.1.1.5.11|65|3388467146 +1.3.6.1.2.1.31.1.1.1.6.11|70|14670660891743438939 +1.3.6.1.2.1.31.1.1.1.7.11|70|10886984631120028416 +1.3.6.1.2.1.31.1.1.1.8.11|70|17994136813414766052 +1.3.6.1.2.1.31.1.1.1.9.11|70|10439183159610289289 +1.3.6.1.2.1.31.1.1.1.10.11|70|2583386891169315520 +1.3.6.1.2.1.31.1.1.1.11.11|70|8885889412380302445 +1.3.6.1.2.1.31.1.1.1.12.11|70|10885548970511406028 +1.3.6.1.2.1.31.1.1.1.13.11|70|10028224865574503284 +1.3.6.1.2.1.31.1.1.1.15.11|66|31298329 +1.3.6.1.2.1.99.1.1.1.1.31|2|9 +1.3.6.1.2.1.99.1.1.1.2.31|2|3 +1.3.6.1.2.1.99.1.1.1.3.31|2|6 +1.3.6.1.2.1.99.1.1.1.4.31|2|10 +1.3.6.1.4.1.9.9.13.1.3.1.1.3|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.1.6|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.1.8|2|8 +1.3.6.1.4.1.9.9.13.1.3.1.1.11|2|11 +1.3.6.1.4.1.9.9.13.1.3.1.1.13|2|13 +1.3.6.1.4.1.9.9.13.1.3.1.1.14|2|14 +1.3.6.1.4.1.9.9.13.1.3.1.1.20|2|20 +1.3.6.1.4.1.9.9.13.1.3.1.1.21|2|21 +1.3.6.1.4.1.9.9.13.1.3.1.1.31|2|31 +1.3.6.1.4.1.9.9.13.1.3.1.2.3|4x|7468656972207a6f6d62696573207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.9.9.13.1.3.1.2.6|4x|64726976696e672064726976696e67206b657074206163746564 +1.3.6.1.4.1.9.9.13.1.3.1.2.8|4x|7a6f6d626965732062757420717561696e746c79 +1.3.6.1.4.1.9.9.13.1.3.1.2.11|4x|61637465642064726976696e67204a61646564206163746564 +1.3.6.1.4.1.9.9.13.1.3.1.2.13|4x|7a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.9.9.13.1.3.1.2.14|4|oxen +1.3.6.1.4.1.9.9.13.1.3.1.2.20|4x|6b657074206f78656e +1.3.6.1.4.1.9.9.13.1.3.1.2.21|4x|627574204a61646564207468656972 +1.3.6.1.4.1.9.9.13.1.3.1.2.31|4x|64726976696e6720717561696e746c79 +1.3.6.1.4.1.9.9.13.1.3.1.3.3|66|3930379735 +1.3.6.1.4.1.9.9.13.1.3.1.3.6|66|2258658671 +1.3.6.1.4.1.9.9.13.1.3.1.3.8|66|3213289584 +1.3.6.1.4.1.9.9.13.1.3.1.3.11|66|978410705 +1.3.6.1.4.1.9.9.13.1.3.1.3.13|66|2328456073 +1.3.6.1.4.1.9.9.13.1.3.1.3.14|66|952183581 +1.3.6.1.4.1.9.9.13.1.3.1.3.20|66|2877883263 +1.3.6.1.4.1.9.9.13.1.3.1.3.21|66|3953080519 +1.3.6.1.4.1.9.9.13.1.3.1.3.31|66|414726588 +1.3.6.1.4.1.9.9.13.1.3.1.4.3|2|9 +1.3.6.1.4.1.9.9.13.1.3.1.4.6|2|17 +1.3.6.1.4.1.9.9.13.1.3.1.4.8|2|1 +1.3.6.1.4.1.9.9.13.1.3.1.4.11|2|29 +1.3.6.1.4.1.9.9.13.1.3.1.4.13|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.4.14|2|10 +1.3.6.1.4.1.9.9.13.1.3.1.4.20|2|23 +1.3.6.1.4.1.9.9.13.1.3.1.4.21|2|13 +1.3.6.1.4.1.9.9.13.1.3.1.4.31|2|5 +1.3.6.1.4.1.9.9.13.1.3.1.5.3|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.5.6|2|7 +1.3.6.1.4.1.9.9.13.1.3.1.5.8|2|10 +1.3.6.1.4.1.9.9.13.1.3.1.5.11|2|26 +1.3.6.1.4.1.9.9.13.1.3.1.5.13|2|30 +1.3.6.1.4.1.9.9.13.1.3.1.5.14|2|9 +1.3.6.1.4.1.9.9.13.1.3.1.5.20|2|17 +1.3.6.1.4.1.9.9.13.1.3.1.5.21|2|21 +1.3.6.1.4.1.9.9.13.1.3.1.5.31|2|28 +1.3.6.1.4.1.9.9.13.1.3.1.6.3|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.6.6|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.8|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.11|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.13|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.6.14|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.20|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.21|2|4 +1.3.6.1.4.1.9.9.13.1.3.1.6.31|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.1.4|2|4 +1.3.6.1.4.1.9.9.13.1.4.1.1.6|2|6 +1.3.6.1.4.1.9.9.13.1.4.1.1.7|2|7 +1.3.6.1.4.1.9.9.13.1.4.1.1.16|2|16 +1.3.6.1.4.1.9.9.13.1.4.1.1.21|2|21 +1.3.6.1.4.1.9.9.13.1.4.1.1.22|2|22 +1.3.6.1.4.1.9.9.13.1.4.1.1.25|2|25 +1.3.6.1.4.1.9.9.13.1.4.1.1.27|2|27 +1.3.6.1.4.1.9.9.13.1.4.1.1.30|2|30 +1.3.6.1.4.1.9.9.13.1.4.1.2.4|4|fan_1 +1.3.6.1.4.1.9.9.13.1.4.1.2.6|4|fan_2 +1.3.6.1.4.1.9.9.13.1.4.1.2.7|4|fan_3 +1.3.6.1.4.1.9.9.13.1.4.1.2.16|4|fan_4 +1.3.6.1.4.1.9.9.13.1.4.1.2.22|4|fan_5 +1.3.6.1.4.1.9.9.13.1.4.1.2.25|4|fan_6 +1.3.6.1.4.1.9.9.13.1.4.1.2.27|4|fan_7 +1.3.6.1.4.1.9.9.13.1.4.1.2.30|4|fan_8 +1.3.6.1.4.1.9.9.13.1.4.1.3.4|2|3 +1.3.6.1.4.1.9.9.13.1.4.1.3.6|2|6 +1.3.6.1.4.1.9.9.13.1.4.1.3.7|2|3 +1.3.6.1.4.1.9.9.13.1.4.1.3.16|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.3.21|2|3 +1.3.6.1.4.1.9.9.13.1.4.1.3.22|2|6 +1.3.6.1.4.1.9.9.13.1.4.1.3.25|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.3.27|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.3.30|2|1 +1.3.6.1.4.1.9.9.13.1.5.1.1.0|2|0 +1.3.6.1.4.1.9.9.13.1.5.1.1.5|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.1.16|2|16 +1.3.6.1.4.1.9.9.13.1.5.1.1.20|2|20 +1.3.6.1.4.1.9.9.13.1.5.1.1.21|2|21 +1.3.6.1.4.1.9.9.13.1.5.1.1.22|2|22 +1.3.6.1.4.1.9.9.13.1.5.1.1.25|2|25 +1.3.6.1.4.1.9.9.13.1.5.1.1.26|2|26 +1.3.6.1.4.1.9.9.13.1.5.1.1.29|2|29 +1.3.6.1.4.1.9.9.13.1.5.1.1.31|2|31 +1.3.6.1.4.1.9.9.13.1.5.1.2.0|4x|666f7277617264206f78656e206163746564 +1.3.6.1.4.1.9.9.13.1.5.1.2.5|4|Jaded +1.3.6.1.4.1.9.9.13.1.5.1.2.16|4x|62757420717561696e746c792062757420717561696e746c79 +1.3.6.1.4.1.9.9.13.1.5.1.2.20|4|quaintly +1.3.6.1.4.1.9.9.13.1.5.1.2.21|4x|64726976696e6720717561696e746c7920616374656420627574207468656972 +1.3.6.1.4.1.9.9.13.1.5.1.2.22|4x|62757420627574 +1.3.6.1.4.1.9.9.13.1.5.1.2.25|4x|6163746564206b6570742064726976696e67206163746564 +1.3.6.1.4.1.9.9.13.1.5.1.2.26|4x|6f78656e207468656972204a61646564 +1.3.6.1.4.1.9.9.13.1.5.1.2.29|4x|746865697220746865697220616374656420666f7277617264 +1.3.6.1.4.1.9.9.13.1.5.1.2.31|4x|4a616465642064726976696e67207468656972207468656972207468656972 +1.3.6.1.4.1.9.9.13.1.5.1.3.0|2|1 +1.3.6.1.4.1.9.9.13.1.5.1.3.5|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.3.16|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.3.20|2|6 +1.3.6.1.4.1.9.9.13.1.5.1.3.21|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.3.22|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.3.25|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.3.26|2|6 +1.3.6.1.4.1.9.9.13.1.5.1.3.29|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.3.31|2|1 +1.3.6.1.4.1.9.9.13.1.5.1.4.0|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.4.5|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.4.16|2|4 +1.3.6.1.4.1.9.9.13.1.5.1.4.20|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.21|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.22|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.25|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.26|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.29|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.4.31|2|1 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.1|2|22 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.7|2|21 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.10|2|17 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.13|2|6 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.15|2|20 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.18|2|8 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.20|2|16 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.1|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.7|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.10|2|2 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.13|2|2 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.15|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.18|2|2 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.20|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.1|2|3 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.7|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.10|2|6 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.13|2|4 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.15|2|6 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.18|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.20|2|6 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.1|66|2223021701 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.7|66|917475738 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.10|66|631313195 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.13|66|2637486476 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.15|66|30159574 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.18|66|3370367591 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.20|66|1617271034 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.1|2|13 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.7|2|30 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.10|2|2 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.13|2|21 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.15|2|19 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.18|2|20 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.20|2|27 +1.3.6.1.4.1.9.9.48.1.1.1.1.18|2|18 +1.3.6.1.4.1.9.9.48.1.1.1.2.18|4|test_pool +1.3.6.1.4.1.9.9.48.1.1.1.3.18|2|23 +1.3.6.1.4.1.9.9.48.1.1.1.4.18|2|1 +1.3.6.1.4.1.9.9.48.1.1.1.5.18|66|4078680985 +1.3.6.1.4.1.9.9.48.1.1.1.6.18|66|3648996318 +1.3.6.1.4.1.9.9.48.1.1.1.7.18|66|3283078931 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.712|66|712 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.7746|66|7746 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.712|2|20 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.7746|2|21 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.712|66|90 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.7746|66|3 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.712|66|40 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.7746|66|4 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.712|66|50 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.7746|66|5 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.712|66|60 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.7746|66|3 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.712|66|20 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.7746|66|5 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.712|66|40 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.7746|66|5 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.712|66|15518 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.7746|66|38028 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.712|66|60 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.7746|66|6 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.712|66|70 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.7746|66|7 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.712|66|353 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.7746|66|727588670 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.712|66|248 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.7746|66|1683542536 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.3|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.4|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.5|2|5 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.7|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.11|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.16|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.17|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.24|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.25|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.3|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.4|2|5 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.5|2|11 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.7|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.11|2|6 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.16|2|11 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.17|2|11 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.24|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.25|2|12 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.3|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.4|2|14 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.5|2|12 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.7|2|30 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.11|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.16|2|10 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.17|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.24|2|8 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.25|2|29 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.3|4x|6f78656e207a6f6d626965732064726976696e67 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.4|4x|4a6164656420717561696e746c79204a6164656420627574207a6f6d6269657320717561696e746c79207a6f6d6269657320666f7277617264206b657074 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.5|4x|74686569722064726976696e67206b657074206f78656e2064726976696e6720666f7277617264207468656972 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.7|4x|6b65707420666f727761726420627574207468656972206275742064726976696e67207a6f6d6269657320746865697220717561696e746c79 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.11|4|quaintly +1.3.6.1.4.1.9.9.117.1.1.2.1.4.16|4x|6b657074207a6f6d62696573 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.17|4x|6f78656e206b65707420627574207a6f6d6269657320717561696e746c7920627574206f78656e +1.3.6.1.4.1.9.9.117.1.1.2.1.4.24|4x|4a61646564207a6f6d626965732061637465642064726976696e67207468656972207a6f6d6269657320666f727761726420717561696e746c79 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.25|4x|6275742064726976696e67204a61646564206275742062757420627574 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.3|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.4|2|24 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.5|2|10 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.7|2|23 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.11|2|20 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.16|2|30 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.17|2|11 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.24|2|12 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.25|2|0 +1.3.6.1.4.1.9.9.117.1.1.3.0|2|10 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.2|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.7|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.8|2|4 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.11|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.21|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.26|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.27|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.30|2|4 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.31|2|1 +1.3.6.1.4.1.9.9.147.1.2.1.1.1.1.3|2|3 +1.3.6.1.4.1.9.9.147.1.2.1.1.1.2.3|4|Secondary unit +1.3.6.1.4.1.9.9.147.1.2.1.1.1.2.5|4|Primary unit +1.3.6.1.4.1.9.9.147.1.2.1.1.1.2.6|4|Failover LAN Interface +1.3.6.1.4.1.9.9.147.1.2.1.1.1.3.3|2|2 +1.3.6.1.4.1.9.9.147.1.2.1.1.1.3.5|2|8 +1.3.6.1.4.1.9.9.147.1.2.1.1.1.3.6|2|9 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.1.47596.5|66|47596 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.1.50035.2|66|50035 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.2.47596.5|2|5 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.2.50035.2|2|2 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.3.47596.5|4x|64726976696e67206b6570742064726976696e67207468656972204a61646564204a61646564206b65707420627574206b657074 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.3.50035.2|4x|717561696e746c7920627574207468656972206275742064726976696e67 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.4.47596.5|66|759866853 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.4.50035.2|66|3000607411 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.1.5.5|2|5 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.1.8.1|2|8 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.1.20.2|2|20 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.2.5.5|2|5 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.2.8.1|2|1 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.2.20.2|2|2 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.3.5.5|4x|627574206b657074207468656972206f78656e20666f72776172642064726976696e672064726976696e6720717561696e746c79 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.3.8.1|4|test_conn +1.3.6.1.4.1.9.9.147.1.2.2.2.1.3.20.2|4x|4a6164656420746865697220627574204a6164656420717561696e746c79207468656972 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.4.5.5|65|2025029234 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.4.8.1|65|2690303639 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.4.20.2|65|2586750173 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.5.5.5|66|20378309 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.5.20.2|66|4087850099 +1.3.6.1.4.1.9.9.171.1.1.1.0|2|20 +1.3.6.1.4.1.9.9.171.1.2.1.1.0|66|2517445787 +1.3.6.1.4.1.9.9.171.1.2.1.2.0|65|2082435314 +1.3.6.1.4.1.9.9.171.1.2.1.3.0|65|3586485799 +1.3.6.1.4.1.9.9.171.1.2.1.4.0|65|55415745 +1.3.6.1.4.1.9.9.171.1.2.1.5.0|65|2585066045 +1.3.6.1.4.1.9.9.171.1.2.1.6.0|65|2512419052 +1.3.6.1.4.1.9.9.171.1.2.1.7.0|65|787033253 +1.3.6.1.4.1.9.9.171.1.2.1.8.0|65|3554335867 +1.3.6.1.4.1.9.9.171.1.2.1.9.0|65|3427054745 +1.3.6.1.4.1.9.9.171.1.2.1.10.0|65|915529830 +1.3.6.1.4.1.9.9.171.1.2.1.11.0|65|1771994502 +1.3.6.1.4.1.9.9.171.1.2.1.12.0|65|2076367213 +1.3.6.1.4.1.9.9.171.1.2.1.13.0|65|123173035 +1.3.6.1.4.1.9.9.171.1.2.1.14.0|65|3653722608 +1.3.6.1.4.1.9.9.171.1.2.1.15.0|65|67753505 +1.3.6.1.4.1.9.9.171.1.2.1.16.0|65|2844371229 +1.3.6.1.4.1.9.9.171.1.2.1.17.0|65|654198838 +1.3.6.1.4.1.9.9.171.1.2.1.18.0|65|1314173894 +1.3.6.1.4.1.9.9.171.1.2.1.19.0|65|2721519379 +1.3.6.1.4.1.9.9.171.1.2.1.20.0|65|2355318485 +1.3.6.1.4.1.9.9.171.1.2.1.21.0|65|2650257281 +1.3.6.1.4.1.9.9.171.1.2.1.22.0|65|1030937622 +1.3.6.1.4.1.9.9.171.1.2.1.23.0|65|2780652506 +1.3.6.1.4.1.9.9.171.1.2.1.24.0|65|1045063375 +1.3.6.1.4.1.9.9.171.1.2.1.25.0|65|3776486351 +1.3.6.1.4.1.9.9.171.1.2.1.26.0|65|1216922190 +1.3.6.1.4.1.9.9.171.1.2.2.1.1.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|1 +1.3.6.1.4.1.9.9.171.1.2.2.1.1.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|2 +1.3.6.1.4.1.9.9.171.1.2.2.1.2.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|4x|6b6570742064726976696e67206275742064726976696e67206f78656e20666f7277617264204a6164656420717561696e746c7920717561696e746c79 +1.3.6.1.4.1.9.9.171.1.2.2.1.2.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|4x|627574207a6f6d62696573206f78656e207468656972206b657074 +1.3.6.1.4.1.9.9.171.1.2.2.1.3.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|1 +1.3.6.1.4.1.9.9.171.1.2.2.1.3.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|1 +1.3.6.1.4.1.9.9.171.1.2.2.1.4.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|4x|6b65707420666f7277617264207468656972 +1.3.6.1.4.1.9.9.171.1.2.2.1.4.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|4x|717561696e746c792064726976696e67207a6f6d62696573206163746564 +1.3.6.1.4.1.9.9.171.1.2.2.1.5.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|30 +1.3.6.1.4.1.9.9.171.1.2.2.1.5.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|12 +1.3.6.1.4.1.9.9.171.1.2.2.1.6.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|4x|4a61646564206b657074207468656972 +1.3.6.1.4.1.9.9.171.1.2.2.1.6.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|4|kept +1.3.6.1.4.1.9.9.171.1.2.2.1.7.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|4x|4a61646564206163746564206f78656e +1.3.6.1.4.1.9.9.171.1.2.2.1.7.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|4|kept +1.3.6.1.4.1.9.9.171.1.2.2.1.8.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|23 +1.3.6.1.4.1.9.9.171.1.2.2.1.8.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|31 +1.3.6.1.4.1.9.9.171.1.2.2.1.9.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|22 +1.3.6.1.4.1.9.9.171.1.2.2.1.9.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.1.3|2|3 +1.3.6.1.4.1.9.9.171.1.2.3.1.1.5|2|5 +1.3.6.1.4.1.9.9.171.1.2.3.1.2.3|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.2.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.3.3|4x|7468656972207a6f6d62696573207468656972207a6f6d62696573206b657074206f78656e +1.3.6.1.4.1.9.9.171.1.2.3.1.3.5|4x|7a6f6d62696573204a6164656420746865697220616374656420627574 +1.3.6.1.4.1.9.9.171.1.2.3.1.4.3|4|oxen +1.3.6.1.4.1.9.9.171.1.2.3.1.4.5|4x|6163746564206163746564206f78656e +1.3.6.1.4.1.9.9.171.1.2.3.1.5.3|4|oxen +1.3.6.1.4.1.9.9.171.1.2.3.1.5.5|4|but +1.3.6.1.4.1.9.9.171.1.2.3.1.6.3|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.6.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.7.3|4x|6163746564206b657074204a61646564206163746564 +1.3.6.1.4.1.9.9.171.1.2.3.1.7.5|4x|64726976696e67206f78656e206b65707420627574204a61646564207a6f6d62696573204a61646564 +1.3.6.1.4.1.9.9.171.1.2.3.1.8.3|4|kept +1.3.6.1.4.1.9.9.171.1.2.3.1.8.5|4x|6b657074207468656972204a61646564 +1.3.6.1.4.1.9.9.171.1.2.3.1.9.3|4x|6163746564206b657074207468656972207468656972 +1.3.6.1.4.1.9.9.171.1.2.3.1.9.5|4x|666f727761726420666f7277617264206b65707420717561696e746c79206163746564207a6f6d62696573 +1.3.6.1.4.1.9.9.171.1.2.3.1.10.3|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.10.5|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.11.3|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.11.5|2|3 +1.3.6.1.4.1.9.9.171.1.2.3.1.12.3|2|3 +1.3.6.1.4.1.9.9.171.1.2.3.1.12.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.13.3|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.13.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.14.3|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.14.5|2|5 +1.3.6.1.4.1.9.9.171.1.2.3.1.15.3|2|13 +1.3.6.1.4.1.9.9.171.1.2.3.1.15.5|2|28 +1.3.6.1.4.1.9.9.171.1.2.3.1.16.3|2|16 +1.3.6.1.4.1.9.9.171.1.2.3.1.16.5|2|0 +1.3.6.1.4.1.9.9.171.1.2.3.1.17.3|2|9 +1.3.6.1.4.1.9.9.171.1.2.3.1.17.5|2|23 +1.3.6.1.4.1.9.9.171.1.2.3.1.18.3|65|873863217 +1.3.6.1.4.1.9.9.171.1.2.3.1.18.5|65|4041389162 +1.3.6.1.4.1.9.9.171.1.2.3.1.19.3|65|444696945 +1.3.6.1.4.1.9.9.171.1.2.3.1.19.5|65|1429413108 +1.3.6.1.4.1.9.9.171.1.2.3.1.20.3|65|2526233032 +1.3.6.1.4.1.9.9.171.1.2.3.1.20.5|65|3931574972 +1.3.6.1.4.1.9.9.171.1.2.3.1.21.3|65|2479090364 +1.3.6.1.4.1.9.9.171.1.2.3.1.21.5|65|874183465 +1.3.6.1.4.1.9.9.171.1.2.3.1.22.3|65|888202948 +1.3.6.1.4.1.9.9.171.1.2.3.1.22.5|65|1610429217 +1.3.6.1.4.1.9.9.171.1.2.3.1.23.3|65|3462920250 +1.3.6.1.4.1.9.9.171.1.2.3.1.23.5|65|2151705546 +1.3.6.1.4.1.9.9.171.1.2.3.1.24.3|65|2565719801 +1.3.6.1.4.1.9.9.171.1.2.3.1.24.5|65|3395553994 +1.3.6.1.4.1.9.9.171.1.2.3.1.25.3|65|2228405074 +1.3.6.1.4.1.9.9.171.1.2.3.1.25.5|65|2624335244 +1.3.6.1.4.1.9.9.171.1.2.3.1.26.3|65|3006967537 +1.3.6.1.4.1.9.9.171.1.2.3.1.26.5|65|410051353 +1.3.6.1.4.1.9.9.171.1.2.3.1.27.3|65|1337714779 +1.3.6.1.4.1.9.9.171.1.2.3.1.27.5|65|1425712802 +1.3.6.1.4.1.9.9.171.1.2.3.1.28.3|65|2116873007 +1.3.6.1.4.1.9.9.171.1.2.3.1.28.5|65|1353332653 +1.3.6.1.4.1.9.9.171.1.2.3.1.29.3|65|3580869615 +1.3.6.1.4.1.9.9.171.1.2.3.1.29.5|65|715475082 +1.3.6.1.4.1.9.9.171.1.2.3.1.30.3|65|2249094174 +1.3.6.1.4.1.9.9.171.1.2.3.1.30.5|65|685279905 +1.3.6.1.4.1.9.9.171.1.2.3.1.31.3|65|2318835995 +1.3.6.1.4.1.9.9.171.1.2.3.1.31.5|65|3313898297 +1.3.6.1.4.1.9.9.171.1.2.3.1.32.3|65|990926535 +1.3.6.1.4.1.9.9.171.1.2.3.1.32.5|65|4004637148 +1.3.6.1.4.1.9.9.171.1.2.3.1.33.3|65|1674719135 +1.3.6.1.4.1.9.9.171.1.2.3.1.33.5|65|3116893031 +1.3.6.1.4.1.9.9.171.1.2.3.1.34.3|65|2142489467 +1.3.6.1.4.1.9.9.171.1.2.3.1.34.5|65|567516830 +1.3.6.1.4.1.9.9.171.1.2.3.1.35.3|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.35.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.4.1.1.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|2 +1.3.6.1.4.1.9.9.171.1.2.4.1.1.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|2 +1.3.6.1.4.1.9.9.171.1.2.4.1.2.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|4x|666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.171.1.2.4.1.2.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|4x|7468656972207a6f6d62696573206f78656e204a616465642064726976696e67 +1.3.6.1.4.1.9.9.171.1.2.4.1.3.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.4.1.3.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|2 +1.3.6.1.4.1.9.9.171.1.2.4.1.4.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|4x|627574206f78656e2064726976696e67207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.9.9.171.1.2.4.1.4.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|4x|7468656972204a61646564206b657074207a6f6d62696573207468656972206b65707420627574 +1.3.6.1.4.1.9.9.171.1.2.4.1.5.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|13 +1.3.6.1.4.1.9.9.171.1.2.4.1.5.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|24 +1.3.6.1.4.1.9.9.171.1.2.4.1.6.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|5 +1.3.6.1.4.1.9.9.171.1.2.4.1.6.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|26 +1.3.6.1.4.1.9.9.171.1.2.4.1.7.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|23 +1.3.6.1.4.1.9.9.171.1.2.4.1.7.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|24 +1.3.6.1.4.1.9.9.171.1.2.5.1.1.2|66|3405348844 +1.3.6.1.4.1.9.9.171.1.2.5.1.1.17|66|1379037661 +1.3.6.1.4.1.9.9.171.1.2.5.1.2.2|65|88229005 +1.3.6.1.4.1.9.9.171.1.2.5.1.2.17|65|3030198713 +1.3.6.1.4.1.9.9.171.1.2.5.1.3.2|65|344910659 +1.3.6.1.4.1.9.9.171.1.2.5.1.3.17|65|33036840 +1.3.6.1.4.1.9.9.171.1.2.5.1.4.2|65|447299365 +1.3.6.1.4.1.9.9.171.1.2.5.1.4.17|65|538727845 +1.3.6.1.4.1.9.9.171.1.2.5.1.5.2|65|472834505 +1.3.6.1.4.1.9.9.171.1.2.5.1.5.17|65|3054034 +1.3.6.1.4.1.9.9.171.1.2.5.1.6.2|65|3593802072 +1.3.6.1.4.1.9.9.171.1.2.5.1.6.17|65|3549366247 +1.3.6.1.4.1.9.9.171.1.2.5.1.7.2|65|2944563745 +1.3.6.1.4.1.9.9.171.1.2.5.1.7.17|65|3766841702 +1.3.6.1.4.1.9.9.171.1.2.5.1.8.2|65|2827110916 +1.3.6.1.4.1.9.9.171.1.2.5.1.8.17|65|541497651 +1.3.6.1.4.1.9.9.171.1.2.5.1.9.2|65|234506077 +1.3.6.1.4.1.9.9.171.1.2.5.1.9.17|65|2731827217 +1.3.6.1.4.1.9.9.171.1.2.5.1.10.2|65|35823350 +1.3.6.1.4.1.9.9.171.1.2.5.1.10.17|65|2055408274 +1.3.6.1.4.1.9.9.171.1.2.5.1.11.2|65|613379743 +1.3.6.1.4.1.9.9.171.1.2.5.1.11.17|65|749737562 +1.3.6.1.4.1.9.9.171.1.2.5.1.12.2|65|3136782594 +1.3.6.1.4.1.9.9.171.1.2.5.1.12.17|65|3867599558 +1.3.6.1.4.1.9.9.171.1.2.5.1.13.2|65|2518038894 +1.3.6.1.4.1.9.9.171.1.2.5.1.13.17|65|3789209889 +1.3.6.1.4.1.9.9.171.1.2.5.1.14.2|65|485135820 +1.3.6.1.4.1.9.9.171.1.2.5.1.14.17|65|2804351110 +1.3.6.1.4.1.9.9.171.1.2.5.1.15.2|65|3816944451 +1.3.6.1.4.1.9.9.171.1.2.5.1.15.17|65|3061990294 +1.3.6.1.4.1.9.9.171.1.2.5.1.16.2|65|3293750728 +1.3.6.1.4.1.9.9.171.1.2.5.1.16.17|65|3502377103 +1.3.6.1.4.1.9.9.171.1.2.5.1.17.2|65|4236310901 +1.3.6.1.4.1.9.9.171.1.2.5.1.17.17|65|2360434961 +1.3.6.1.4.1.9.9.171.1.2.5.1.18.2|65|3798162230 +1.3.6.1.4.1.9.9.171.1.2.5.1.18.17|65|3954421682 +1.3.6.1.4.1.9.9.171.1.2.5.1.19.2|65|1365609163 +1.3.6.1.4.1.9.9.171.1.2.5.1.19.17|65|191894913 +1.3.6.1.4.1.9.9.171.1.2.5.1.20.2|65|1405339921 +1.3.6.1.4.1.9.9.171.1.2.5.1.20.17|65|2429774821 +1.3.6.1.4.1.9.9.171.1.2.5.1.21.2|65|2995566101 +1.3.6.1.4.1.9.9.171.1.2.5.1.21.17|65|1832565962 +1.3.6.1.4.1.9.9.171.1.2.5.1.22.2|65|4132429477 +1.3.6.1.4.1.9.9.171.1.2.5.1.22.17|65|418366803 +1.3.6.1.4.1.9.9.171.1.2.5.1.23.2|65|2015402172 +1.3.6.1.4.1.9.9.171.1.2.5.1.23.17|65|1316534295 +1.3.6.1.4.1.9.9.171.1.2.5.1.24.2|65|3247282160 +1.3.6.1.4.1.9.9.171.1.2.5.1.24.17|65|2833736517 +1.3.6.1.4.1.9.9.171.1.2.5.1.25.2|65|2823444229 +1.3.6.1.4.1.9.9.171.1.2.5.1.25.17|65|1615516389 +1.3.6.1.4.1.9.9.171.1.2.5.1.26.2|65|73347298 +1.3.6.1.4.1.9.9.171.1.2.5.1.26.17|65|2896149360 +1.3.6.1.4.1.9.9.171.1.3.1.1.0|66|555520100 +1.3.6.1.4.1.9.9.171.1.3.1.2.0|65|3433850807 +1.3.6.1.4.1.9.9.171.1.3.1.3.0|65|3765451978 +1.3.6.1.4.1.9.9.171.1.3.1.4.0|70|8076380598964912751 +1.3.6.1.4.1.9.9.171.1.3.1.5.0|65|605242469 +1.3.6.1.4.1.9.9.171.1.3.1.6.0|65|2117938836 +1.3.6.1.4.1.9.9.171.1.3.1.7.0|70|1244382013554652095 +1.3.6.1.4.1.9.9.171.1.3.1.8.0|65|2069097191 +1.3.6.1.4.1.9.9.171.1.3.1.9.0|65|1103506722 +1.3.6.1.4.1.9.9.171.1.3.1.10.0|65|3278141363 +1.3.6.1.4.1.9.9.171.1.3.1.11.0|65|2348631446 +1.3.6.1.4.1.9.9.171.1.3.1.12.0|65|788758787 +1.3.6.1.4.1.9.9.171.1.3.1.13.0|65|1299954247 +1.3.6.1.4.1.9.9.171.1.3.1.14.0|65|2563637642 +1.3.6.1.4.1.9.9.171.1.3.1.15.0|65|34726275 +1.3.6.1.4.1.9.9.171.1.3.1.16.0|65|3892208230 +1.3.6.1.4.1.9.9.171.1.3.1.17.0|70|11061656018312361232 +1.3.6.1.4.1.9.9.171.1.3.1.18.0|65|3239360685 +1.3.6.1.4.1.9.9.171.1.3.1.19.0|65|2198334559 +1.3.6.1.4.1.9.9.171.1.3.1.20.0|70|3371199286386608944 +1.3.6.1.4.1.9.9.171.1.3.1.21.0|65|2444861007 +1.3.6.1.4.1.9.9.171.1.3.1.22.0|65|1881053125 +1.3.6.1.4.1.9.9.171.1.3.1.23.0|65|3540985166 +1.3.6.1.4.1.9.9.171.1.3.1.24.0|65|3081489769 +1.3.6.1.4.1.9.9.171.1.3.1.25.0|65|257883106 +1.3.6.1.4.1.9.9.171.1.3.1.26.0|65|1836586560 +1.3.6.1.4.1.9.9.171.1.3.1.27.0|65|980485057 +1.3.6.1.4.1.9.9.171.1.3.1.28.0|65|644393269 +1.3.6.1.4.1.9.9.171.1.3.1.29.0|65|3550809455 +1.3.6.1.4.1.9.9.171.1.3.1.30.0|65|1537259604 +1.3.6.1.4.1.9.9.171.1.3.2.1.1.23|2|23 +1.3.6.1.4.1.9.9.171.1.3.2.1.1.28|2|28 +1.3.6.1.4.1.9.9.171.1.3.2.1.2.23|2|7 +1.3.6.1.4.1.9.9.171.1.3.2.1.2.28|2|7 +1.3.6.1.4.1.9.9.171.1.3.2.1.3.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.3.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.4.23|4x|64726976696e67206b65707420627574 +1.3.6.1.4.1.9.9.171.1.3.2.1.4.28|4x|6b6570742062757420666f7277617264 +1.3.6.1.4.1.9.9.171.1.3.2.1.5.23|4|kept +1.3.6.1.4.1.9.9.171.1.3.2.1.5.28|4|kept +1.3.6.1.4.1.9.9.171.1.3.2.1.6.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.6.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.7.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.7.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.8.23|2|4 +1.3.6.1.4.1.9.9.171.1.3.2.1.8.28|2|6 +1.3.6.1.4.1.9.9.171.1.3.2.1.9.23|2|25 +1.3.6.1.4.1.9.9.171.1.3.2.1.9.28|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.10.23|2|30 +1.3.6.1.4.1.9.9.171.1.3.2.1.10.28|2|7 +1.3.6.1.4.1.9.9.171.1.3.2.1.11.23|2|25 +1.3.6.1.4.1.9.9.171.1.3.2.1.11.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.12.23|2|29 +1.3.6.1.4.1.9.9.171.1.3.2.1.12.28|2|12 +1.3.6.1.4.1.9.9.171.1.3.2.1.13.23|65|736404368 +1.3.6.1.4.1.9.9.171.1.3.2.1.13.28|65|3035617434 +1.3.6.1.4.1.9.9.171.1.3.2.1.14.23|65|2717096145 +1.3.6.1.4.1.9.9.171.1.3.2.1.14.28|65|3979661869 +1.3.6.1.4.1.9.9.171.1.3.2.1.15.23|66|1401352929 +1.3.6.1.4.1.9.9.171.1.3.2.1.15.28|66|1557942135 +1.3.6.1.4.1.9.9.171.1.3.2.1.16.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.16.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.17.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.17.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.18.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.18.28|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.19.23|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.19.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.20.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.20.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.21.23|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.21.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.22.23|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.22.28|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.23.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.23.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.24.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.24.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.25.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.25.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.26.23|65|165896064 +1.3.6.1.4.1.9.9.171.1.3.2.1.26.28|65|3618088990 +1.3.6.1.4.1.9.9.171.1.3.2.1.27.23|70|16893382919849205152 +1.3.6.1.4.1.9.9.171.1.3.2.1.27.28|70|11976318338642029242 +1.3.6.1.4.1.9.9.171.1.3.2.1.28.23|65|373706179 +1.3.6.1.4.1.9.9.171.1.3.2.1.28.28|65|42463689 +1.3.6.1.4.1.9.9.171.1.3.2.1.29.23|65|1106272656 +1.3.6.1.4.1.9.9.171.1.3.2.1.29.28|65|1002521669 +1.3.6.1.4.1.9.9.171.1.3.2.1.30.23|70|11922900353577803661 +1.3.6.1.4.1.9.9.171.1.3.2.1.30.28|70|15599379710949051351 +1.3.6.1.4.1.9.9.171.1.3.2.1.31.23|65|1074980189 +1.3.6.1.4.1.9.9.171.1.3.2.1.31.28|65|1263307338 +1.3.6.1.4.1.9.9.171.1.3.2.1.32.23|65|19491227 +1.3.6.1.4.1.9.9.171.1.3.2.1.32.28|65|3040420568 +1.3.6.1.4.1.9.9.171.1.3.2.1.33.23|65|185606313 +1.3.6.1.4.1.9.9.171.1.3.2.1.33.28|65|4077668277 +1.3.6.1.4.1.9.9.171.1.3.2.1.34.23|65|3856931801 +1.3.6.1.4.1.9.9.171.1.3.2.1.34.28|65|1043684270 +1.3.6.1.4.1.9.9.171.1.3.2.1.35.23|65|1768453926 +1.3.6.1.4.1.9.9.171.1.3.2.1.35.28|65|2468669416 +1.3.6.1.4.1.9.9.171.1.3.2.1.36.23|65|3103192375 +1.3.6.1.4.1.9.9.171.1.3.2.1.36.28|65|3896235917 +1.3.6.1.4.1.9.9.171.1.3.2.1.37.23|65|2610571653 +1.3.6.1.4.1.9.9.171.1.3.2.1.37.28|65|2004039361 +1.3.6.1.4.1.9.9.171.1.3.2.1.38.23|65|668234317 +1.3.6.1.4.1.9.9.171.1.3.2.1.38.28|65|229562644 +1.3.6.1.4.1.9.9.171.1.3.2.1.39.23|65|451351388 +1.3.6.1.4.1.9.9.171.1.3.2.1.39.28|65|358890378 +1.3.6.1.4.1.9.9.171.1.3.2.1.40.23|70|15907561446294960767 +1.3.6.1.4.1.9.9.171.1.3.2.1.40.28|70|14524952430283157279 +1.3.6.1.4.1.9.9.171.1.3.2.1.41.23|65|2966419854 +1.3.6.1.4.1.9.9.171.1.3.2.1.41.28|65|2075836476 +1.3.6.1.4.1.9.9.171.1.3.2.1.42.23|65|2137519503 +1.3.6.1.4.1.9.9.171.1.3.2.1.42.28|65|723885852 +1.3.6.1.4.1.9.9.171.1.3.2.1.43.23|70|13733445844003001241 +1.3.6.1.4.1.9.9.171.1.3.2.1.43.28|70|13579132757302593240 +1.3.6.1.4.1.9.9.171.1.3.2.1.44.23|65|2771155894 +1.3.6.1.4.1.9.9.171.1.3.2.1.44.28|65|1824515850 +1.3.6.1.4.1.9.9.171.1.3.2.1.45.23|65|1889625612 +1.3.6.1.4.1.9.9.171.1.3.2.1.45.28|65|4054252226 +1.3.6.1.4.1.9.9.171.1.3.2.1.46.23|65|2849925259 +1.3.6.1.4.1.9.9.171.1.3.2.1.46.28|65|3010306271 +1.3.6.1.4.1.9.9.171.1.3.2.1.47.23|65|2110348798 +1.3.6.1.4.1.9.9.171.1.3.2.1.47.28|65|3986765758 +1.3.6.1.4.1.9.9.171.1.3.2.1.48.23|65|2958887014 +1.3.6.1.4.1.9.9.171.1.3.2.1.48.28|65|121428427 +1.3.6.1.4.1.9.9.171.1.3.2.1.49.23|65|4235674459 +1.3.6.1.4.1.9.9.171.1.3.2.1.49.28|65|3087398701 +1.3.6.1.4.1.9.9.171.1.3.2.1.50.23|65|2987809814 +1.3.6.1.4.1.9.9.171.1.3.2.1.50.28|65|1084010267 +1.3.6.1.4.1.9.9.171.1.3.2.1.51.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.51.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.3.1.1.3.15|2|15 +1.3.6.1.4.1.9.9.171.1.3.3.1.1.19.26|2|26 +1.3.6.1.4.1.9.9.171.1.3.3.1.2.3.15|4x|717561696e746c79207a6f6d62696573206163746564207a6f6d62696573 +1.3.6.1.4.1.9.9.171.1.3.3.1.2.19.26|4x|6b657074206163746564206b65707420666f7277617264206b657074 +1.3.6.1.4.1.9.9.171.1.3.3.1.3.3.15|2|1 +1.3.6.1.4.1.9.9.171.1.3.3.1.3.19.26|2|2 +1.3.6.1.4.1.9.9.171.1.3.3.1.4.3.15|4|oxen +1.3.6.1.4.1.9.9.171.1.3.3.1.4.19.26|4|oxen +1.3.6.1.4.1.9.9.171.1.3.3.1.5.3.15|4x|64726976696e67206f78656e20627574 +1.3.6.1.4.1.9.9.171.1.3.3.1.5.19.26|4|kept +1.3.6.1.4.1.9.9.171.1.3.3.1.6.3.15|2|6 +1.3.6.1.4.1.9.9.171.1.3.3.1.6.19.26|2|20 +1.3.6.1.4.1.9.9.171.1.3.3.1.7.3.15|2|22 +1.3.6.1.4.1.9.9.171.1.3.3.1.7.19.26|2|25 +1.3.6.1.4.1.9.9.171.1.3.3.1.8.3.15|4x|6f78656e204a6164656420746865697220627574 +1.3.6.1.4.1.9.9.171.1.3.3.1.8.19.26|4x|746865697220717561696e746c79206163746564207a6f6d62696573206163746564206f78656e2064726976696e67 +1.3.6.1.4.1.9.9.171.1.3.3.1.9.3.15|2|3 +1.3.6.1.4.1.9.9.171.1.3.3.1.9.19.26|2|3 +1.3.6.1.4.1.9.9.171.1.3.3.1.10.3.15|4|oxen +1.3.6.1.4.1.9.9.171.1.3.3.1.10.19.26|4|kept +1.3.6.1.4.1.9.9.171.1.3.3.1.11.3.15|4|kept +1.3.6.1.4.1.9.9.171.1.3.3.1.11.19.26|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.9.9.171.1.3.3.1.12.3.15|2|11 +1.3.6.1.4.1.9.9.171.1.3.3.1.12.19.26|2|3 +1.3.6.1.4.1.9.9.171.1.3.3.1.13.3.15|2|17 +1.3.6.1.4.1.9.9.171.1.3.3.1.13.19.26|2|31 +1.3.6.1.4.1.9.9.171.1.3.4.1.1.9.2|2|2 +1.3.6.1.4.1.9.9.171.1.3.4.1.1.31.28|2|28 +1.3.6.1.4.1.9.9.171.1.3.4.1.2.9.2|2|2 +1.3.6.1.4.1.9.9.171.1.3.4.1.2.31.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.4.1.3.9.2|66|45981 +1.3.6.1.4.1.9.9.171.1.3.4.1.3.31.28|66|2825 +1.3.6.1.4.1.9.9.171.1.3.4.1.4.9.2|2|3 +1.3.6.1.4.1.9.9.171.1.3.4.1.4.31.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.4.1.5.9.2|2|2 +1.3.6.1.4.1.9.9.171.1.3.4.1.5.31.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.5.1.1.11|66|1539004452 +1.3.6.1.4.1.9.9.171.1.3.5.1.1.21|66|986476198 +1.3.6.1.4.1.9.9.171.1.3.5.1.2.11|65|3634989455 +1.3.6.1.4.1.9.9.171.1.3.5.1.2.21|65|774642436 +1.3.6.1.4.1.9.9.171.1.3.5.1.3.11|65|971728629 +1.3.6.1.4.1.9.9.171.1.3.5.1.3.21|65|3145266041 +1.3.6.1.4.1.9.9.171.1.3.5.1.4.11|65|2110814352 +1.3.6.1.4.1.9.9.171.1.3.5.1.4.21|65|155761707 +1.3.6.1.4.1.9.9.171.1.3.5.1.5.11|65|2248268558 +1.3.6.1.4.1.9.9.171.1.3.5.1.5.21|65|561905585 +1.3.6.1.4.1.9.9.171.1.3.5.1.6.11|65|974515501 +1.3.6.1.4.1.9.9.171.1.3.5.1.6.21|65|913516496 +1.3.6.1.4.1.9.9.171.1.3.5.1.7.11|65|3221449308 +1.3.6.1.4.1.9.9.171.1.3.5.1.7.21|65|2989278436 +1.3.6.1.4.1.9.9.171.1.3.5.1.8.11|65|2541691427 +1.3.6.1.4.1.9.9.171.1.3.5.1.8.21|65|3367590847 +1.3.6.1.4.1.9.9.171.1.3.5.1.9.11|65|2075568959 +1.3.6.1.4.1.9.9.171.1.3.5.1.9.21|65|505678552 +1.3.6.1.4.1.9.9.171.1.3.5.1.10.11|65|1601794867 +1.3.6.1.4.1.9.9.171.1.3.5.1.10.21|65|4108299796 +1.3.6.1.4.1.9.9.171.1.3.5.1.11.11|65|3796494388 +1.3.6.1.4.1.9.9.171.1.3.5.1.11.21|65|1442135763 +1.3.6.1.4.1.9.9.171.1.3.5.1.12.11|65|2850926956 +1.3.6.1.4.1.9.9.171.1.3.5.1.12.21|65|989514632 +1.3.6.1.4.1.9.9.171.1.3.5.1.13.11|65|1864025156 +1.3.6.1.4.1.9.9.171.1.3.5.1.13.21|65|115684894 +1.3.6.1.4.1.9.9.171.1.3.5.1.14.11|65|1486924693 +1.3.6.1.4.1.9.9.171.1.3.5.1.14.21|65|3614381712 +1.3.6.1.4.1.9.9.171.1.3.5.1.15.11|65|2886166675 +1.3.6.1.4.1.9.9.171.1.3.5.1.15.21|65|2418878004 +1.3.6.1.4.1.9.9.171.1.3.5.1.16.11|65|4041081525 +1.3.6.1.4.1.9.9.171.1.3.5.1.16.21|65|3202353128 +1.3.6.1.4.1.9.9.171.1.3.5.1.17.11|65|3359563692 +1.3.6.1.4.1.9.9.171.1.3.5.1.17.21|65|3939308341 +1.3.6.1.4.1.9.9.171.1.3.5.1.18.11|65|3421730058 +1.3.6.1.4.1.9.9.171.1.3.5.1.18.21|65|2537482589 +1.3.6.1.4.1.9.9.171.1.3.5.1.19.11|65|2662393759 +1.3.6.1.4.1.9.9.171.1.3.5.1.19.21|65|2933597356 +1.3.6.1.4.1.9.9.171.1.3.5.1.20.11|65|4135163112 +1.3.6.1.4.1.9.9.171.1.3.5.1.20.21|65|3283135834 +1.3.6.1.4.1.9.9.171.1.3.5.1.21.11|65|562097720 +1.3.6.1.4.1.9.9.171.1.3.5.1.21.21|65|168036034 +1.3.6.1.4.1.9.9.171.1.3.5.1.22.11|65|2444828842 +1.3.6.1.4.1.9.9.171.1.3.5.1.22.21|65|78028517 +1.3.6.1.4.1.9.9.171.1.3.5.1.23.11|65|1627747682 +1.3.6.1.4.1.9.9.171.1.3.5.1.23.21|65|871345082 +1.3.6.1.4.1.9.9.171.1.3.5.1.24.11|65|3118031750 +1.3.6.1.4.1.9.9.171.1.3.5.1.24.21|65|3275451558 +1.3.6.1.4.1.9.9.171.1.3.5.1.25.11|65|142449220 +1.3.6.1.4.1.9.9.171.1.3.5.1.25.21|65|3664919325 +1.3.6.1.4.1.9.9.171.1.3.5.1.26.11|65|2401996341 +1.3.6.1.4.1.9.9.171.1.3.5.1.26.21|65|3251587706 +1.3.6.1.4.1.9.9.171.1.4.1.1.1.0|2|13 +1.3.6.1.4.1.9.9.171.1.4.1.1.2.0|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.1.10|2|10 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.1.22|2|22 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.2.10|2|4 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.2.22|2|7 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.3.10|2|30 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.3.22|2|19 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.4.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.4.22|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.5.10|4x|6163746564207a6f6d62696573206f78656e2061637465642064726976696e6720627574 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.5.22|4x|627574204a61646564207468656972 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.6.10|2|6 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.6.22|2|19 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.7.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.7.22|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.8.10|4x|627574207a6f6d62696573207a6f6d62696573207a6f6d62696573206163746564 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.8.22|4x|6275742064726976696e67206b657074 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.9.10|4|kept +1.3.6.1.4.1.9.9.171.1.4.2.1.1.9.22|4x|4a61646564206163746564206f78656e +1.3.6.1.4.1.9.9.171.1.4.2.1.1.10.10|4x|64726976696e67206275742064726976696e6720666f7277617264207468656972 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.10.22|4x|6b657074207468656972204a61646564206b657074206b6570742064726976696e672062757420627574206f78656e +1.3.6.1.4.1.9.9.171.1.4.2.1.1.11.10|4|oxen +1.3.6.1.4.1.9.9.171.1.4.2.1.1.11.22|4x|717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.12.10|4x|64726976696e67207468656972206f78656e2064726976696e67207a6f6d6269657320666f727761726420717561696e746c7920666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.12.22|4x|7468656972206163746564 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.13.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.13.22|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.14.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.14.22|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.15.10|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.15.22|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.16.10|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.16.22|2|3 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.17.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.17.22|2|3 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.18.10|2|17 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.18.22|2|15 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.19.10|67|4188924691 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.19.22|67|2937118870 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.20.10|2|11 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.20.22|2|6 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.21.10|65|3904979266 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.21.22|65|3560928040 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.22.10|65|3895453958 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.22.22|65|930877155 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.23.10|65|4155384128 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.23.22|65|1945794694 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.24.10|65|2440644215 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.24.22|65|2179560049 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.25.10|65|3951748314 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.25.22|65|127664431 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.26.10|65|240677500 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.26.22|65|4237031121 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.27.10|65|2919250870 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.27.22|65|4208516442 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.28.10|65|2427553207 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.28.22|65|948705652 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.29.10|65|82976265 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.29.22|65|3934746364 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.30.10|65|3861895215 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.30.22|65|217536823 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.31.10|65|3151994492 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.31.22|65|241794704 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.32.10|65|1506839476 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.32.22|65|2068566446 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.33.10|65|2343908199 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.33.22|65|3426161501 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.34.10|65|648407740 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.34.22|65|1146473588 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.35.10|65|1680408828 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.35.22|65|799707233 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.36.10|65|3312014872 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.36.22|65|1227147473 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.37.10|65|1202145057 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.37.22|65|1608376026 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.38.10|65|3883766622 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.38.22|65|2243100818 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.1.17|2|17 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.1.18|2|18 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.2.17|2|4 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.2.18|2|5 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.3.17|2|6 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.3.18|2|13 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.4.17|2|11 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.4.18|2|5 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.5.17|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.1.1.5.18|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.1.1.6.17|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.1.1.6.18|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.1.1.7.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.7.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.8.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.8.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.9.17|2|10 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.9.18|2|6 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.10.17|2|21 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.10.18|2|22 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.11.17|67|2140606133 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.11.18|67|947877786 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.12.17|2|24 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.12.18|2|6 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.13.17|65|804171075 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.13.18|65|3013529205 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.14.17|65|2306734177 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.14.18|65|59730603 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.15.17|2|3 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.15.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.16.17|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.16.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.17.17|2|3 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.17.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.18.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.18.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.19.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.19.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.20.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.20.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.21.17|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.21.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.22.17|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.22.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.23.17|2|3 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.23.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.24.17|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.24.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.25.17|65|1350520686 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.25.18|65|460378122 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.26.17|70|10257421324758334396 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.26.18|70|15955968530926075190 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.27.17|65|2626476172 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.27.18|65|866683012 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.28.17|65|729325687 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.28.18|65|2042095897 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.29.17|70|3908873172283764405 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.29.18|70|9692543863636570033 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.30.17|65|797291069 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.30.18|65|3831339083 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.31.17|65|365694518 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.31.18|65|659908830 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.32.17|65|3175828355 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.32.18|65|3194917681 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.33.17|65|3486343761 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.33.18|65|647213477 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.34.17|65|620133147 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.34.18|65|3900465494 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.35.17|65|2135862472 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.35.18|65|2286879901 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.36.17|65|4212299981 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.36.18|65|2957562648 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.37.17|65|3498974530 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.37.18|65|4110881771 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.38.17|65|3426811607 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.38.18|65|3841788286 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.39.17|70|4204788537335394816 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.39.18|70|12043116387776586811 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.40.17|65|3519864046 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.40.18|65|1622184210 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.41.17|65|3039522194 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.41.18|65|1867658882 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.42.17|70|17502062167311159970 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.42.18|70|10996239327049192810 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.43.17|65|3935338485 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.43.18|65|4137439811 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.44.17|65|2920482346 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.44.18|65|166949467 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.45.17|65|3600484353 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.45.18|65|542927767 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.46.17|65|250089742 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.46.18|65|3039150373 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.47.17|65|1876324894 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.47.18|65|3523115734 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.48.17|65|396919596 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.48.18|65|3635284240 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.49.17|65|1871392869 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.49.18|65|1071823832 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.1.22|2|22 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.1.24|2|24 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.2.22|2|23 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.2.24|2|8 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.3.22|2|11 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.3.24|2|28 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.4.22|4x|616374656420666f7277617264206163746564206b657074206163746564206163746564 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.4.24|4x|717561696e746c79204a6164656420746865697220616374656420627574 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.5.22|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.5.24|2|3 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.6.22|4|oxen +1.3.6.1.4.1.9.9.171.1.4.3.2.1.6.24|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.2.1.7.22|4x|6163746564206f78656e204a61646564 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.7.24|4|oxen +1.3.6.1.4.1.9.9.171.1.4.3.2.1.8.22|2|24 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.8.24|2|10 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.9.22|2|31 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.9.24|2|5 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.10.22|4x|6f78656e20627574206b65707420717561696e746c79 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.10.24|4x|616374656420627574 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.11.22|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.11.24|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.12.22|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.2.1.12.24|4x|6f78656e206163746564207468656972 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.13.22|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.2.1.13.24|4|oxen +1.3.6.1.4.1.9.9.171.1.4.3.2.1.14.22|2|14 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.14.24|2|6 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.15.22|2|5 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.15.24|2|15 +1.3.6.1.4.1.9.9.171.1.5.1.1.1.0|2|15 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.1.8|2|8 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.1.15|2|15 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.2.8|2|11 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.2.15|2|14 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.3.8|67|2511746407 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.3.15|67|919534560 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.4.8|2|2 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.4.15|2|2 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.5.8|4x|717561696e746c7920627574206b6570742061637465642064726976696e6720627574 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.5.15|4x|4a61646564204a61646564204a61646564 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.6.8|2|1 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.6.15|2|2 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.7.8|4x|4a6164656420717561696e746c7920627574 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.7.15|4x|64726976696e6720666f72776172642064726976696e6720666f7277617264 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.8.8|4x|717561696e746c7920666f7277617264 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.8.15|4|kept +1.3.6.1.4.1.9.9.171.1.5.2.1.1.9.8|4x|717561696e746c7920666f7277617264 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.9.15|4|oxen +1.3.6.1.4.1.9.9.171.1.5.3.1.1.1.22|2|22 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.1.29|2|29 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.2.22|2|16 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.2.29|2|10 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.3.22|67|4157396408 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.3.29|67|96476129 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.4.22|2|28 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.4.29|2|12 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.5.22|2|25 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.5.29|2|2 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.6.22|4|kept +1.3.6.1.4.1.9.9.171.1.5.3.1.1.6.29|4|kept +1.3.6.1.4.1.9.9.171.1.5.3.1.1.7.22|4|oxen +1.3.6.1.4.1.9.9.171.1.5.3.1.1.7.29|4x|4a61646564206163746564206f78656e +1.3.6.1.4.1.9.9.171.1.6.1.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.2.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.3.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.4.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.5.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.6.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.7.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.8.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.9.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.10.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.11.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.12.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.13.0|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.27|65|1629044510 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.27|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.1.2|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.1.6|2|6 +1.3.6.1.4.1.9.9.324.1.1.1.1.2.2|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.9.9.324.1.1.1.1.2.6|4x|6163746564207468656972 +1.3.6.1.4.1.9.9.324.1.1.1.1.3.2|2|5 +1.3.6.1.4.1.9.9.324.1.1.1.1.3.6|2|19 +1.3.6.1.4.1.9.9.324.1.1.1.1.4.2|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.4.6|2|3 +1.3.6.1.4.1.9.9.324.1.1.1.1.5.2|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.5.6|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.6.2|2|9 +1.3.6.1.4.1.9.9.324.1.1.1.1.6.6|2|24 +1.3.6.1.4.1.9.9.324.1.1.1.1.7.2|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.7.6|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.8.2|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.8.6|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.9.2|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.9.6|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.10.2|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.10.6|2|2 +1.3.6.1.4.1.9.9.324.1.1.2.1.1.7.9|2|9 +1.3.6.1.4.1.9.9.324.1.1.2.1.1.16.29|2|29 +1.3.6.1.4.1.9.9.324.1.1.2.1.2.7.9|2|2 +1.3.6.1.4.1.9.9.324.1.1.2.1.2.16.29|2|1 +1.3.6.1.4.1.9.9.324.1.1.2.1.3.7.9|4|acted +1.3.6.1.4.1.9.9.324.1.1.2.1.3.16.29|4x|7468656972204a61646564 +1.3.6.1.4.1.9.9.324.1.1.2.1.4.7.9|2|20 +1.3.6.1.4.1.9.9.324.1.1.2.1.4.16.29|2|30 +1.3.6.1.4.1.9.9.324.1.1.2.1.5.7.9|66|28786 +1.3.6.1.4.1.9.9.324.1.1.2.1.5.16.29|66|14266 +1.3.6.1.4.1.9.9.324.1.1.2.1.6.7.9|2|20 +1.3.6.1.4.1.9.9.324.1.1.2.1.6.16.29|2|24 +1.3.6.1.4.1.9.9.324.1.1.2.1.7.7.9|4x|717561696e746c792064726976696e67 +1.3.6.1.4.1.9.9.324.1.1.2.1.7.16.29|4x|627574206b657074 +1.3.6.1.4.1.9.9.324.1.1.3.1.1.8.25|2|25 +1.3.6.1.4.1.9.9.324.1.1.3.1.1.16.7|2|7 +1.3.6.1.4.1.9.9.324.1.1.3.1.2.8.25|2|12 +1.3.6.1.4.1.9.9.324.1.1.3.1.2.16.7|2|29 +1.3.6.1.4.1.9.9.324.1.1.3.1.3.8.25|2|29 +1.3.6.1.4.1.9.9.324.1.1.3.1.3.16.7|2|30 +1.3.6.1.4.1.9.9.324.1.1.3.1.4.8.25|2|27 +1.3.6.1.4.1.9.9.324.1.1.3.1.4.16.7|2|15 +1.3.6.1.4.1.9.9.324.1.1.3.1.5.8.25|2|2 +1.3.6.1.4.1.9.9.324.1.1.3.1.5.16.7|2|3 +1.3.6.1.4.1.9.9.324.1.1.3.1.6.8.25|4x|616374656420666f727761726420666f72776172642062757420627574206f78656e206f78656e +1.3.6.1.4.1.9.9.324.1.1.3.1.6.16.7|4x|7468656972206163746564 +1.3.6.1.4.1.9.9.324.1.1.3.1.7.8.25|66|196 +1.3.6.1.4.1.9.9.324.1.1.3.1.7.16.7|66|1734 +1.3.6.1.4.1.9.9.324.1.1.3.1.8.8.25|2|2 +1.3.6.1.4.1.9.9.324.1.1.3.1.8.16.7|2|1 +1.3.6.1.4.1.9.9.324.1.1.3.1.9.8.25|2|1 +1.3.6.1.4.1.9.9.324.1.1.3.1.9.16.7|2|2 +1.3.6.1.4.1.9.9.324.1.1.3.1.10.8.25|2|6 +1.3.6.1.4.1.9.9.324.1.1.3.1.10.16.7|2|1 +1.3.6.1.4.1.9.9.324.1.1.4.1.1.9.20|2|20 +1.3.6.1.4.1.9.9.324.1.1.4.1.1.14.6|2|6 +1.3.6.1.4.1.9.9.324.1.1.4.1.2.9.20|2|3 +1.3.6.1.4.1.9.9.324.1.1.4.1.2.14.6|2|1 +1.3.6.1.4.1.9.9.324.1.1.4.1.3.9.20|4x|62757420746865697220717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.9.9.324.1.1.4.1.3.14.6|4x|6f78656e206163746564204a616465642064726976696e67204a61646564207a6f6d6269657320717561696e746c79206f78656e +1.3.6.1.4.1.9.9.324.1.1.4.1.4.9.20|2|1 +1.3.6.1.4.1.9.9.324.1.1.4.1.4.14.6|2|5 +1.3.6.1.4.1.9.9.324.1.1.5.1.1.3.4|2|4 +1.3.6.1.4.1.9.9.324.1.1.5.1.1.3.5|2|5 +1.3.6.1.4.1.9.9.324.1.1.5.1.2.3.4|4x|61637465642064726976696e67207a6f6d62696573206163746564 +1.3.6.1.4.1.9.9.324.1.1.5.1.2.3.5|4x|7468656972206f78656e20717561696e746c7920616374656420616374656420666f727761726420717561696e746c79207468656972206b657074 +1.3.6.1.4.1.9.9.324.1.1.5.1.3.3.4|2|3 +1.3.6.1.4.1.9.9.324.1.1.5.1.3.3.5|2|2 +1.3.6.1.4.1.9.9.324.1.1.5.1.4.3.4|4x|64726976696e67204a6164656420627574 +1.3.6.1.4.1.9.9.324.1.1.5.1.4.3.5|4x|717561696e746c79204a6164656420717561696e746c79206f78656e +1.3.6.1.4.1.9.9.324.1.1.5.1.5.3.4|2|4 +1.3.6.1.4.1.9.9.324.1.1.5.1.5.3.5|2|2 +1.3.6.1.4.1.9.9.324.1.1.6.1.1.10.32|66|32 +1.3.6.1.4.1.9.9.324.1.1.6.1.1.19.255|66|255 +1.3.6.1.4.1.9.9.324.1.1.6.1.2.10.32|66|434 +1.3.6.1.4.1.9.9.324.1.1.6.1.2.19.255|66|645 +1.3.6.1.4.1.9.9.324.1.1.6.1.3.10.32|66|324 +1.3.6.1.4.1.9.9.324.1.1.6.1.3.19.255|66|732 +1.3.6.1.4.1.9.9.324.1.1.7.1.1.3|66|32 +1.3.6.1.4.1.9.9.324.1.1.7.1.1.10|66|227 +1.3.6.1.4.1.9.9.324.1.1.7.1.2.3|66|122 +1.3.6.1.4.1.9.9.324.1.1.7.1.2.10|66|232 +1.3.6.1.4.1.9.9.324.1.1.7.1.3.3|66|97 +1.3.6.1.4.1.9.9.324.1.1.7.1.3.10|66|115 +1.3.6.1.4.1.9.9.324.1.1.7.1.4.3|66|110 +1.3.6.1.4.1.9.9.324.1.1.7.1.4.10|66|113 +1.3.6.1.4.1.9.9.324.1.1.7.1.5.3|66|4513 +1.3.6.1.4.1.9.9.324.1.1.7.1.5.10|66|4412 +1.3.6.1.4.1.9.9.324.1.1.7.1.6.3|2|2 +1.3.6.1.4.1.9.9.324.1.1.7.1.6.10|2|1 +1.3.6.1.4.1.9.9.324.1.1.7.1.7.3|66|61 +1.3.6.1.4.1.9.9.324.1.1.7.1.7.10|66|133 +1.3.6.1.4.1.9.9.324.1.1.7.1.8.3|66|102 +1.3.6.1.4.1.9.9.324.1.1.7.1.8.10|66|67 +1.3.6.1.4.1.9.9.324.1.1.7.1.9.3|66|55 +1.3.6.1.4.1.9.9.324.1.1.7.1.9.10|66|35 +1.3.6.1.4.1.9.9.324.1.1.7.1.10.3|66|53760 +1.3.6.1.4.1.9.9.324.1.1.7.1.10.10|66|62525 +1.3.6.1.4.1.9.9.324.1.1.7.1.11.3|2|2 +1.3.6.1.4.1.9.9.324.1.1.7.1.11.10|2|1 +1.3.6.1.4.1.9.9.324.1.1.7.1.12.3|4x|666f727761726420627574207468656972 +1.3.6.1.4.1.9.9.324.1.1.7.1.12.10|4x|627574207a6f6d62696573207a6f6d626965732064726976696e6720666f7277617264207468656972207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.9.9.324.1.1.7.1.13.3|4x|6f78656e20666f7277617264206163746564206f78656e207468656972206f78656e +1.3.6.1.4.1.9.9.324.1.1.7.1.13.10|4x|6f78656e20666f7277617264 +1.3.6.1.4.1.9.9.324.1.1.7.1.14.3|4x|62757420666f7277617264206163746564207468656972207a6f6d6269657320717561696e746c79206163746564206b657074206b657074 +1.3.6.1.4.1.9.9.324.1.1.7.1.14.10|4x|7a6f6d6269657320616374656420616374656420717561696e746c792062757420616374656420627574206163746564 +1.3.6.1.4.1.9.9.324.1.1.7.1.15.3|4x|666f7277617264206f78656e +1.3.6.1.4.1.9.9.324.1.1.7.1.15.10|4x|4a6164656420666f7277617264206163746564207a6f6d62696573 +1.3.6.1.4.1.9.9.324.1.1.7.1.16.3|2|3 +1.3.6.1.4.1.9.9.324.1.1.7.1.16.10|2|1 +1.3.6.1.4.1.9.9.324.1.1.7.1.17.3|2|4 +1.3.6.1.4.1.9.9.324.1.1.7.1.17.10|2|2 +1.3.6.1.4.1.9.9.324.1.1.7.1.18.3|4x|666f727761726420746865697220666f72776172642064726976696e672064726976696e67 +1.3.6.1.4.1.9.9.324.1.1.7.1.18.10|4|Jaded +1.3.6.1.4.1.9.9.324.1.2.1.1.1.18.14|2|14 +1.3.6.1.4.1.9.9.324.1.2.1.1.1.26.14|2|14 +1.3.6.1.4.1.9.9.324.1.2.1.1.2.18.14|66|968784078 +1.3.6.1.4.1.9.9.324.1.2.1.1.2.26.14|66|1598367577 +1.3.6.1.4.1.9.9.324.1.2.1.1.3.18.14|66|2893057786 +1.3.6.1.4.1.9.9.324.1.2.1.1.3.26.14|66|4031602965 +1.3.6.1.4.1.9.9.324.1.2.1.1.4.18.14|66|1154560899 +1.3.6.1.4.1.9.9.324.1.2.1.1.4.26.14|66|2087239256 +1.3.6.1.4.1.9.9.324.1.2.1.1.5.18.14|66|42982 +1.3.6.1.4.1.9.9.324.1.2.1.1.5.26.14|66|52885 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.7|66|9997 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.8|66|15228 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.9|66|4850 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.12|66|8851 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.16|66|30813 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.25|66|24389 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.26|66|36264 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.27|66|4684 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.28|66|16580 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.7|2|2 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.8|2|1 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.9|2|2 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.12|2|1 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.16|2|3 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.25|2|2 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.26|2|3 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.27|2|3 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.28|2|2 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.7|67|2938099246 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.8|67|1742326644 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.9|67|222898566 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.12|67|41659817 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.16|67|1663224446 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.25|67|3973111650 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.26|67|736091720 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.27|67|3693310177 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.28|67|1614278838 +1.3.6.1.4.1.9.9.392.1.1.1.0|2|24 +1.3.6.1.4.1.9.9.392.1.1.2.0|2|29 +1.3.6.1.4.1.9.9.392.1.1.3.0|2|5 +1.3.6.1.4.1.9.9.392.1.1.4.0|2|4 +1.3.6.1.4.1.9.9.392.1.2.1.0|66|220179290 +1.3.6.1.4.1.9.9.392.1.3.1.0|66|3080751325 +1.3.6.1.4.1.9.9.392.1.3.2.0|65|1540201027 +1.3.6.1.4.1.9.9.392.1.3.3.0|66|1805302581 +1.3.6.1.4.1.9.9.392.1.3.4.0|66|161784324 +1.3.6.1.4.1.9.9.392.1.3.5.0|70|4672136608535977512 +1.3.6.1.4.1.9.9.392.1.3.6.0|70|2893804194127754033 +1.3.6.1.4.1.9.9.392.1.3.7.0|70|6239211035010594908 +1.3.6.1.4.1.9.9.392.1.3.8.0|70|7265876306749545408 +1.3.6.1.4.1.9.9.392.1.3.9.0|70|192850609352945696 +1.3.6.1.4.1.9.9.392.1.3.10.0|70|17127455384536618658 +1.3.6.1.4.1.9.9.392.1.3.11.0|70|14460697319949409206 +1.3.6.1.4.1.9.9.392.1.3.12.0|70|6617289242687491214 +1.3.6.1.4.1.9.9.392.1.3.21.1.1.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|666f7277617264204a61646564206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.1.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6b6570742074686569722064726976696e67207468656972204a61646564207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.3.21.1.2.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|7a6f6d62696573207a6f6d62696573204a61646564204a61646564207468656972206f78656e20616374656420746865697220627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.2.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|64726976696e67204a61646564204a61646564207a6f6d62696573207a6f6d62696573206b657074206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.3.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|18 +1.3.6.1.4.1.9.9.392.1.3.21.1.3.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|11 +1.3.6.1.4.1.9.9.392.1.3.21.1.4.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|8 +1.3.6.1.4.1.9.9.392.1.3.21.1.4.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|7 +1.3.6.1.4.1.9.9.392.1.3.21.1.5.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.5.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|5 +1.3.6.1.4.1.9.9.392.1.3.21.1.6.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|65|1067898008 +1.3.6.1.4.1.9.9.392.1.3.21.1.6.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|65|2164050177 +1.3.6.1.4.1.9.9.392.1.3.21.1.7.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.7.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|2 +1.3.6.1.4.1.9.9.392.1.3.21.1.8.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|64726976696e6720717561696e746c79206b657074207468656972204a61646564204a61646564206f78656e207468656972206f78656e +1.3.6.1.4.1.9.9.392.1.3.21.1.8.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4|Jaded +1.3.6.1.4.1.9.9.392.1.3.21.1.9.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.9.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.10.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|717561696e746c79207a6f6d62696573204a61646564204a6164656420746865697220627574206b657074 +1.3.6.1.4.1.9.9.392.1.3.21.1.10.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6b657074206f78656e20717561696e746c792064726976696e6720717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.3.21.1.11.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|7 +1.3.6.1.4.1.9.9.392.1.3.21.1.11.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|2 +1.3.6.1.4.1.9.9.392.1.3.21.1.12.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|6|1.3.6.1.3.208.49 +1.3.6.1.4.1.9.9.392.1.3.21.1.12.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|6|1.3.6.1.3.0.25.27 +1.3.6.1.4.1.9.9.392.1.3.21.1.13.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|8 +1.3.6.1.4.1.9.9.392.1.3.21.1.13.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.14.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.14.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.15.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.15.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|2 +1.3.6.1.4.1.9.9.392.1.3.21.1.16.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|66|24991 +1.3.6.1.4.1.9.9.392.1.3.21.1.16.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|66|19923 +1.3.6.1.4.1.9.9.392.1.3.21.1.17.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|746865697220717561696e746c7920616374656420717561696e746c79206b65707420616374656420717561696e746c792064726976696e67206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.17.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|62757420627574206f78656e206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.18.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|717561696e746c79206163746564207468656972 +1.3.6.1.4.1.9.9.392.1.3.21.1.18.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6b6570742061637465642064726976696e67206275742064726976696e67206b65707420666f7277617264 +1.3.6.1.4.1.9.9.392.1.3.21.1.19.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|666f727761726420746865697220666f7277617264206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.19.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6f78656e20666f727761726420717561696e746c79206163746564206b657074206f78656e +1.3.6.1.4.1.9.9.392.1.3.21.1.20.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|7a6f6d62696573206163746564206f78656e +1.3.6.1.4.1.9.9.392.1.3.21.1.20.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|666f72776172642061637465642064726976696e6720627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.21.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|16 +1.3.6.1.4.1.9.9.392.1.3.21.1.21.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|4 +1.3.6.1.4.1.9.9.392.1.3.21.1.22.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|666f727761726420666f7277617264207a6f6d62696573207a6f6d62696573207a6f6d62696573204a61646564206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.22.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6b6570742064726976696e67207a6f6d626965732064726976696e67 +1.3.6.1.4.1.9.9.392.1.3.21.1.23.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|0 +1.3.6.1.4.1.9.9.392.1.3.21.1.23.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|2 +1.3.6.1.4.1.9.9.392.1.3.21.1.24.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|4a6164656420717561696e746c79 +1.3.6.1.4.1.9.9.392.1.3.21.1.24.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|4a61646564207468656972206f78656e20616374656420616374656420666f727761726420746865697220666f7277617264 +1.3.6.1.4.1.9.9.392.1.3.21.1.25.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.25.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|16 +1.3.6.1.4.1.9.9.392.1.3.21.1.26.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|666f7277617264206b657074206f78656e206f78656e206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.26.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|616374656420717561696e746c7920627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.27.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|16 +1.3.6.1.4.1.9.9.392.1.3.21.1.27.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|4 +1.3.6.1.4.1.9.9.392.1.3.21.1.28.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|64726976696e67207468656972207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.3.21.1.28.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|62757420627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.29.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|0 +1.3.6.1.4.1.9.9.392.1.3.21.1.29.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.30.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|717561696e746c79206b657074 +1.3.6.1.4.1.9.9.392.1.3.21.1.30.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|746865697220717561696e746c7920717561696e746c7920616374656420717561696e746c7920717561696e746c79206163746564207a6f6d6269657320627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.31.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|4442691408326093793 +1.3.6.1.4.1.9.9.392.1.3.21.1.31.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|1873321696187597909 +1.3.6.1.4.1.9.9.392.1.3.21.1.32.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|6469637372671445412 +1.3.6.1.4.1.9.9.392.1.3.21.1.32.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|6712781232926100858 +1.3.6.1.4.1.9.9.392.1.3.21.1.33.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|13490210027652370573 +1.3.6.1.4.1.9.9.392.1.3.21.1.33.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|15555989303984511978 +1.3.6.1.4.1.9.9.392.1.3.21.1.34.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|12279646205639820727 +1.3.6.1.4.1.9.9.392.1.3.21.1.34.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|11056409441366507351 +1.3.6.1.4.1.9.9.392.1.3.21.1.35.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|13180762840652524543 +1.3.6.1.4.1.9.9.392.1.3.21.1.35.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|13958065058835407351 +1.3.6.1.4.1.9.9.392.1.3.21.1.36.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|3745449795705425282 +1.3.6.1.4.1.9.9.392.1.3.21.1.36.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|15681610043458202824 +1.3.6.1.4.1.9.9.392.1.3.21.1.37.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.37.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|1 +1.3.6.1.4.1.9.9.392.1.3.22.1.1.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|4x|616374656420666f7277617264207a6f6d62696573207a6f6d62696573207468656972 +1.3.6.1.4.1.9.9.392.1.3.22.1.1.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|4x|7468656972207468656972206b6570742062757420616374656420627574206275742064726976696e67207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.3.22.1.2.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|2|2 +1.3.6.1.4.1.9.9.392.1.3.22.1.2.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|2|21 +1.3.6.1.4.1.9.9.392.1.3.22.1.3.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|338143677832082857 +1.3.6.1.4.1.9.9.392.1.3.22.1.3.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|2540809463851896468 +1.3.6.1.4.1.9.9.392.1.3.22.1.4.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|9211169575499894801 +1.3.6.1.4.1.9.9.392.1.3.22.1.4.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|5889125074864305265 +1.3.6.1.4.1.9.9.392.1.3.22.1.5.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|15329032065323570335 +1.3.6.1.4.1.9.9.392.1.3.22.1.5.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|11848822181082996062 +1.3.6.1.4.1.9.9.392.1.3.22.1.6.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|9393682061551994449 +1.3.6.1.4.1.9.9.392.1.3.22.1.6.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|14553503058612069516 +1.3.6.1.4.1.9.9.392.1.3.22.1.7.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|5657946358853111387 +1.3.6.1.4.1.9.9.392.1.3.22.1.7.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|132504407579425476 +1.3.6.1.4.1.9.9.392.1.3.22.1.8.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|14359838585433121302 +1.3.6.1.4.1.9.9.392.1.3.22.1.8.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|16427745788021119202 +1.3.6.1.4.1.9.9.392.1.3.23.0|66|3912948724 +1.3.6.1.4.1.9.9.392.1.3.24.0|65|3793567672 +1.3.6.1.4.1.9.9.392.1.3.25.0|66|24567 +1.3.6.1.4.1.9.9.392.1.3.26.0|66|4157346489 +1.3.6.1.4.1.9.9.392.1.3.27.0|65|566439668 +1.3.6.1.4.1.9.9.392.1.3.28.0|66|2035 +1.3.6.1.4.1.9.9.392.1.3.29.0|66|899294235 +1.3.6.1.4.1.9.9.392.1.3.30.0|65|2870170921 +1.3.6.1.4.1.9.9.392.1.3.31.0|66|47972 +1.3.6.1.4.1.9.9.392.1.3.32.0|66|1402819470 +1.3.6.1.4.1.9.9.392.1.3.33.0|65|552584163 +1.3.6.1.4.1.9.9.392.1.3.34.0|66|54192 +1.3.6.1.4.1.9.9.392.1.3.35.0|66|4109252783 +1.3.6.1.4.1.9.9.392.1.3.36.0|65|3375288981 +1.3.6.1.4.1.9.9.392.1.3.37.0|66|60584 +1.3.6.1.4.1.9.9.392.1.3.38.0|66|2342846144 +1.3.6.1.4.1.9.9.392.1.3.39.0|65|2612706951 +1.3.6.1.4.1.9.9.392.1.3.40.0|66|27723 +1.3.6.1.4.1.9.9.392.1.4.1.1.0|70|18308256571427912229 +1.3.6.1.4.1.9.9.392.1.4.1.2.0|66|12797 +1.3.6.1.4.1.9.9.392.1.4.1.3.0|70|18072880834846251558 +1.3.6.1.4.1.9.9.392.1.4.1.4.0|70|8998085897560354675 +1.3.6.1.4.1.9.9.392.1.4.2.1.0|66|19062 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.1.26|66|26 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.1.6794|66|6794 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.2.26|4x|717561696e746c7920666f7277617264206b657074207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.2.6794|4x|7a6f6d62696573206f78656e204a61646564204a616465642074686569722062757420666f7277617264206b657074204a61646564 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.3.26|4x|62757420666f7277617264204a61646564206275742064726976696e672064726976696e67 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.3.6794|4|Jaded +1.3.6.1.4.1.9.9.392.1.4.3.1.1.4.26|2|2 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.4.6794|2|1 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.5.26|2|3 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.5.6794|2|5 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.6.26|67|2717938161 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.6.6794|67|1576292881 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.7.26|2|20 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.7.6794|2|7 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.8.26|2|0 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.8.6794|2|1 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.9.26|4x|6b6570742064726976696e672064726976696e67207a6f6d62696573206b657074206b657074204a61646564 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.9.6794|4x|7a6f6d62696573207a6f6d6269657320627574207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.10.26|2|0 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.10.6794|2|0 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.11.26|4x|64726976696e67206163746564 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.11.6794|4x|64726976696e67206b65707420746865697220746865697220666f7277617264 +1.3.6.1.4.1.9.9.392.1.4.3.2.0|66|19587 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.1.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|4x|7a6f6d62696573207a6f6d62696573207a6f6d626965732064726976696e67 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.1.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|4x|62757420717561696e746c7920746865697220666f727761726420717561696e746c7920666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.2.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|7705169462584045514 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.2.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|4782105877718188020 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.3.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|1208657904808146249 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.3.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|6135263682934130631 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.4.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|3212491034507665689 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.4.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|4669944071782599429 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.5.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|15487989910931679686 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.5.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|16491208374579900638 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.6.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|14990721728316737493 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.6.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|17568880258347646976 +1.3.6.1.4.1.9.9.392.1.5.1.1.0|70|16763036102461238324 +1.3.6.1.4.1.9.9.392.1.6.1.0|2|30 +1.3.6.1.4.1.9.9.392.1.6.2.0|66|10901 +1.3.6.1.4.1.9.9.392.1.6.3.0|2|3 +1.3.6.1.4.1.9.9.392.1.7.1.0|2|1 +1.3.6.1.4.1.9.9.392.1.7.2.0|2|1 +1.3.6.1.4.1.9.9.392.1.7.3.0|2|1 +1.3.6.1.4.1.9.9.500.1.2.1.1.1.21|66|23989 +1.3.6.1.4.1.9.9.500.1.2.1.1.2.21|66|64612 +1.3.6.1.4.1.9.9.500.1.2.1.1.3.21|2|4 +1.3.6.1.4.1.9.9.500.1.2.1.1.4.21|66|33053 +1.3.6.1.4.1.9.9.500.1.2.1.1.5.21|66|55695 +1.3.6.1.4.1.9.9.500.1.2.1.1.6.21|2|8 +1.3.6.1.4.1.9.9.500.1.2.1.1.7.21|4x|ffffffffffff +1.3.6.1.4.1.9.9.500.1.2.2.1.1.7|2|3 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.213.175.39.60.38.62.82.247.189 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.166.109.172.24.90.149 +1.3.6.1.6.3.1.1.6.1.0|2|3 +1.3.6.1.6.3.10.2.1.1.0|4x|6f78656e20717561696e746c79 +1.3.6.1.6.3.10.2.1.1.0|4x|64726976696e67206f78656e204a6164656420717561696e746c79 +1.3.6.1.6.3.10.2.1.2.0|2|12 +1.3.6.1.6.3.10.2.1.2.0|2|24 +1.3.6.1.6.3.10.2.1.3.0|2|4 +1.3.6.1.6.3.10.2.1.3.0|2|28 +1.3.6.1.6.3.10.2.1.4.0|2|567 +1.3.6.1.6.3.10.2.1.4.0|2|763 \ No newline at end of file diff --git a/test/new-e2e/ndm/snmp/compose/data/cisco-asa.snmprec b/test/new-e2e/ndm/snmp/compose/data/cisco-asa.snmprec new file mode 100644 index 00000000000000..f052f153933a7b --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/cisco-asa.snmprec @@ -0,0 +1,1478 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.9.1.669 +1.3.6.1.2.1.1.3.0|67|1727368662 +1.3.6.1.2.1.1.5.0|4|kept +1.3.6.1.2.1.2.2.1.1.11|2|11 +1.3.6.1.2.1.2.2.1.2.11|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.3.11|2|29 +1.3.6.1.2.1.2.2.1.4.11|2|10 +1.3.6.1.2.1.2.2.1.5.11|66|842689539 +1.3.6.1.2.1.2.2.1.6.11|4x|00 +1.3.6.1.2.1.2.2.1.7.11|2|2 +1.3.6.1.2.1.2.2.1.8.11|2|7 +1.3.6.1.2.1.2.2.1.9.11|67|4043941980 +1.3.6.1.2.1.2.2.1.10.11|65|2268799121 +1.3.6.1.2.1.2.2.1.11.11|65|1358081555 +1.3.6.1.2.1.2.2.1.12.11|65|2804916297 +1.3.6.1.2.1.2.2.1.13.11|65|1953269825 +1.3.6.1.2.1.2.2.1.14.11|65|3659465164 +1.3.6.1.2.1.2.2.1.15.11|65|3028473442 +1.3.6.1.2.1.2.2.1.16.11|65|2204618213 +1.3.6.1.2.1.2.2.1.17.11|65|3659357157 +1.3.6.1.2.1.2.2.1.18.11|65|1946069301 +1.3.6.1.2.1.2.2.1.19.11|65|1976763204 +1.3.6.1.2.1.2.2.1.20.11|65|1287028500 +1.3.6.1.2.1.2.2.1.21.11|66|3693484051 +1.3.6.1.2.1.6.5.0|65|2858992486 +1.3.6.1.2.1.6.6.0|65|4156312381 +1.3.6.1.2.1.6.7.0|65|2022233107 +1.3.6.1.2.1.6.8.0|65|2434846008 +1.3.6.1.2.1.6.9.0|66|3859114747 +1.3.6.1.2.1.6.10.0|65|443704958 +1.3.6.1.2.1.6.11.0|65|761536386 +1.3.6.1.2.1.6.12.0|65|3742055603 +1.3.6.1.2.1.6.13.1.1.23.177.97.199.10.151.211.52.249.28|2|12 +1.3.6.1.2.1.6.13.1.1.113.156.27.12.6.103.49.217.167.25|2|8 +1.3.6.1.2.1.6.13.1.1.122.61.54.190.29.172.169.37.170.22|2|5 +1.3.6.1.2.1.6.13.1.1.148.215.184.93.3.18.135.204.247.11|2|9 +1.3.6.1.2.1.6.13.1.1.192.71.88.207.22.184.150.214.61.14|2|12 +1.3.6.1.2.1.6.13.1.1.215.10.127.204.23.126.210.252.1.27|2|7 +1.3.6.1.2.1.6.13.1.1.223.16.55.201.31.104.212.252.181.5|2|9 +1.3.6.1.2.1.6.13.1.1.223.54.125.172.16.159.226.236.17.1|2|5 +1.3.6.1.2.1.6.13.1.1.227.50.96.2.2.215.88.85.244.22|2|3 +1.3.6.1.2.1.6.13.1.1.254.4.140.40.29.214.201.146.122.0|2|1 +1.3.6.1.2.1.6.13.1.2.23.177.97.199.10.151.211.52.249.28|64x|17b161c7 +1.3.6.1.2.1.6.13.1.2.113.156.27.12.6.103.49.217.167.25|64x|719c1b0c +1.3.6.1.2.1.6.13.1.2.122.61.54.190.29.172.169.37.170.22|64x|7a3d36be +1.3.6.1.2.1.6.13.1.2.148.215.184.93.3.18.135.204.247.11|64x|94d7b85d +1.3.6.1.2.1.6.13.1.2.192.71.88.207.22.184.150.214.61.14|64x|c04758cf +1.3.6.1.2.1.6.13.1.2.215.10.127.204.23.126.210.252.1.27|64x|d70a7fcc +1.3.6.1.2.1.6.13.1.2.223.16.55.201.31.104.212.252.181.5|64x|df1037c9 +1.3.6.1.2.1.6.13.1.2.223.54.125.172.16.159.226.236.17.1|64x|df367dac +1.3.6.1.2.1.6.13.1.2.227.50.96.2.2.215.88.85.244.22|64x|e3326002 +1.3.6.1.2.1.6.13.1.2.254.4.140.40.29.214.201.146.122.0|64x|fe048c28 +1.3.6.1.2.1.6.13.1.3.23.177.97.199.10.151.211.52.249.28|2|10 +1.3.6.1.2.1.6.13.1.3.113.156.27.12.6.103.49.217.167.25|2|6 +1.3.6.1.2.1.6.13.1.3.122.61.54.190.29.172.169.37.170.22|2|29 +1.3.6.1.2.1.6.13.1.3.148.215.184.93.3.18.135.204.247.11|2|3 +1.3.6.1.2.1.6.13.1.3.192.71.88.207.22.184.150.214.61.14|2|22 +1.3.6.1.2.1.6.13.1.3.215.10.127.204.23.126.210.252.1.27|2|23 +1.3.6.1.2.1.6.13.1.3.223.16.55.201.31.104.212.252.181.5|2|31 +1.3.6.1.2.1.6.13.1.3.223.54.125.172.16.159.226.236.17.1|2|16 +1.3.6.1.2.1.6.13.1.3.227.50.96.2.2.215.88.85.244.22|2|2 +1.3.6.1.2.1.6.13.1.3.254.4.140.40.29.214.201.146.122.0|2|29 +1.3.6.1.2.1.6.13.1.4.23.177.97.199.10.151.211.52.249.28|64x|97d334f9 +1.3.6.1.2.1.6.13.1.4.113.156.27.12.6.103.49.217.167.25|64x|6731d9a7 +1.3.6.1.2.1.6.13.1.4.122.61.54.190.29.172.169.37.170.22|64x|aca925aa +1.3.6.1.2.1.6.13.1.4.148.215.184.93.3.18.135.204.247.11|64x|1287ccf7 +1.3.6.1.2.1.6.13.1.4.192.71.88.207.22.184.150.214.61.14|64x|b896d63d +1.3.6.1.2.1.6.13.1.4.215.10.127.204.23.126.210.252.1.27|64x|7ed2fc01 +1.3.6.1.2.1.6.13.1.4.223.16.55.201.31.104.212.252.181.5|64x|68d4fcb5 +1.3.6.1.2.1.6.13.1.4.223.54.125.172.16.159.226.236.17.1|64x|9fe2ec11 +1.3.6.1.2.1.6.13.1.4.227.50.96.2.2.215.88.85.244.22|64x|d75855f4 +1.3.6.1.2.1.6.13.1.4.254.4.140.40.29.214.201.146.122.0|64x|d6c9927a +1.3.6.1.2.1.6.13.1.5.23.177.97.199.10.151.211.52.249.28|2|28 +1.3.6.1.2.1.6.13.1.5.113.156.27.12.6.103.49.217.167.25|2|25 +1.3.6.1.2.1.6.13.1.5.122.61.54.190.29.172.169.37.170.22|2|22 +1.3.6.1.2.1.6.13.1.5.148.215.184.93.3.18.135.204.247.11|2|11 +1.3.6.1.2.1.6.13.1.5.192.71.88.207.22.184.150.214.61.14|2|14 +1.3.6.1.2.1.6.13.1.5.215.10.127.204.23.126.210.252.1.27|2|27 +1.3.6.1.2.1.6.13.1.5.223.16.55.201.31.104.212.252.181.5|2|5 +1.3.6.1.2.1.6.13.1.5.223.54.125.172.16.159.226.236.17.1|2|1 +1.3.6.1.2.1.6.13.1.5.227.50.96.2.2.215.88.85.244.22|2|22 +1.3.6.1.2.1.6.13.1.5.254.4.140.40.29.214.201.146.122.0|2|0 +1.3.6.1.2.1.6.14.0|65|2935824574 +1.3.6.1.2.1.6.15.0|65|1544900307 +1.3.6.1.2.1.6.17.0|70|16581522528925471079 +1.3.6.1.2.1.6.18.0|70|3369991573516953990 +1.3.6.1.2.1.7.2.0|65|3998586035 +1.3.6.1.2.1.7.3.0|65|3549343151 +1.3.6.1.2.1.7.4.0|65|2404484755 +1.3.6.1.2.1.7.5.1.1.2.141.239.85.23|64x|028def55 +1.3.6.1.2.1.7.5.1.1.20.60.66.67.23|64x|143c4243 +1.3.6.1.2.1.7.5.1.1.42.145.113.188.16|64x|2a9171bc +1.3.6.1.2.1.7.5.1.1.78.118.31.86.2|64x|4e761f56 +1.3.6.1.2.1.7.5.1.1.85.153.183.119.31|64x|5599b777 +1.3.6.1.2.1.7.5.1.1.87.237.140.144.26|64x|57ed8c90 +1.3.6.1.2.1.7.5.1.1.145.214.51.243.3|64x|91d633f3 +1.3.6.1.2.1.7.5.1.1.169.8.79.103.26|64x|a9084f67 +1.3.6.1.2.1.7.5.1.1.172.6.61.73.19|64x|ac063d49 +1.3.6.1.2.1.7.5.1.1.209.91.67.71.4|64x|d15b4347 +1.3.6.1.2.1.7.5.1.2.2.141.239.85.23|2|23 +1.3.6.1.2.1.7.5.1.2.20.60.66.67.23|2|23 +1.3.6.1.2.1.7.5.1.2.42.145.113.188.16|2|16 +1.3.6.1.2.1.7.5.1.2.78.118.31.86.2|2|2 +1.3.6.1.2.1.7.5.1.2.85.153.183.119.31|2|31 +1.3.6.1.2.1.7.5.1.2.87.237.140.144.26|2|26 +1.3.6.1.2.1.7.5.1.2.145.214.51.243.3|2|3 +1.3.6.1.2.1.7.5.1.2.169.8.79.103.26|2|26 +1.3.6.1.2.1.7.5.1.2.172.6.61.73.19|2|19 +1.3.6.1.2.1.7.5.1.2.209.91.67.71.4|2|4 +1.3.6.1.2.1.7.7.1.1.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|2|0 +1.3.6.1.2.1.7.7.1.1.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|2|0 +1.3.6.1.2.1.7.7.1.1.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|2|1 +1.3.6.1.2.1.7.7.1.1.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|2|2 +1.3.6.1.2.1.7.7.1.1.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|2|2 +1.3.6.1.2.1.7.7.1.1.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|2|2 +1.3.6.1.2.1.7.7.1.1.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|2|2 +1.3.6.1.2.1.7.7.1.1.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|2|3 +1.3.6.1.2.1.7.7.1.1.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|2|4 +1.3.6.1.2.1.7.7.1.1.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|2|4 +1.3.6.1.2.1.7.7.1.2.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|4|their +1.3.6.1.2.1.7.7.1.2.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|4x|4a61646564206b65707420627574206b657074 +1.3.6.1.2.1.7.7.1.2.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|4x|717561696e746c79206b6570742064726976696e67206b6570742074686569722062757420717561696e746c79207a6f6d62696573 +1.3.6.1.2.1.7.7.1.2.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|4x|746865697220666f7277617264204a61646564 +1.3.6.1.2.1.7.7.1.2.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|4x|627574206163746564206b65707420627574206f78656e207468656972 +1.3.6.1.2.1.7.7.1.2.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|4x|666f727761726420666f727761726420717561696e746c79207a6f6d62696573 +1.3.6.1.2.1.7.7.1.2.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|4x|64726976696e67207468656972206b657074206163746564204a61646564207a6f6d62696573206163746564206b657074 +1.3.6.1.2.1.7.7.1.2.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|4x|717561696e746c79207a6f6d626965732062757420627574206b657074 +1.3.6.1.2.1.7.7.1.2.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|4x|4a61646564204a6164656420717561696e746c79206f78656e206f78656e204a6164656420627574206163746564 +1.3.6.1.2.1.7.7.1.2.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|4x|717561696e746c7920666f727761726420627574207a6f6d626965732064726976696e67204a61646564207a6f6d62696573 +1.3.6.1.2.1.7.7.1.3.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|66|59995 +1.3.6.1.2.1.7.7.1.3.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|66|13615 +1.3.6.1.2.1.7.7.1.3.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|66|17513 +1.3.6.1.2.1.7.7.1.3.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|66|2480 +1.3.6.1.2.1.7.7.1.3.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|66|37036 +1.3.6.1.2.1.7.7.1.3.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|66|20490 +1.3.6.1.2.1.7.7.1.3.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|66|30354 +1.3.6.1.2.1.7.7.1.3.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|66|6240 +1.3.6.1.2.1.7.7.1.3.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|66|29265 +1.3.6.1.2.1.7.7.1.3.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|66|27397 +1.3.6.1.2.1.7.7.1.4.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|2|0 +1.3.6.1.2.1.7.7.1.4.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|2|2 +1.3.6.1.2.1.7.7.1.4.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|2|16 +1.3.6.1.2.1.7.7.1.4.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|2|0 +1.3.6.1.2.1.7.7.1.4.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|2|3 +1.3.6.1.2.1.7.7.1.4.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|2|16 +1.3.6.1.2.1.7.7.1.4.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|2|3 +1.3.6.1.2.1.7.7.1.4.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|2|4 +1.3.6.1.2.1.7.7.1.4.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|2|1 +1.3.6.1.2.1.7.7.1.4.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|2|3 +1.3.6.1.2.1.7.7.1.5.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|4x|6163746564207a6f6d62696573207468656972204a61646564206b657074 +1.3.6.1.2.1.7.7.1.5.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|4x|7a6f6d62696573207a6f6d62696573206b65707420666f7277617264206b657074206b657074204a6164656420627574207468656972 +1.3.6.1.2.1.7.7.1.5.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|4x|666f7277617264206f78656e204a61646564 +1.3.6.1.2.1.7.7.1.5.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|4x|4a616465642064726976696e6720616374656420616374656420627574204a61646564207a6f6d62696573 +1.3.6.1.2.1.7.7.1.5.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|4x|64726976696e67206f78656e206b65707420717561696e746c79207468656972207a6f6d62696573207a6f6d62696573 +1.3.6.1.2.1.7.7.1.5.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|4x|717561696e746c79206163746564 +1.3.6.1.2.1.7.7.1.5.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|4x|6275742074686569722062757420717561696e746c79206b657074 +1.3.6.1.2.1.7.7.1.5.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|4|their +1.3.6.1.2.1.7.7.1.5.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|4x|7a6f6d626965732074686569722064726976696e672062757420717561696e746c79207a6f6d626965732074686569722064726976696e67207468656972 +1.3.6.1.2.1.7.7.1.5.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|4x|62757420666f7277617264 +1.3.6.1.2.1.7.7.1.6.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|66|55726 +1.3.6.1.2.1.7.7.1.6.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|66|28531 +1.3.6.1.2.1.7.7.1.6.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|66|11079 +1.3.6.1.2.1.7.7.1.6.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|66|36798 +1.3.6.1.2.1.7.7.1.6.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|66|16811 +1.3.6.1.2.1.7.7.1.6.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|66|48634 +1.3.6.1.2.1.7.7.1.6.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|66|47173 +1.3.6.1.2.1.7.7.1.6.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|66|64624 +1.3.6.1.2.1.7.7.1.6.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|66|50219 +1.3.6.1.2.1.7.7.1.6.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|66|29145 +1.3.6.1.2.1.7.7.1.7.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|66|774 +1.3.6.1.2.1.7.7.1.7.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|66|32766 +1.3.6.1.2.1.7.7.1.7.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|66|42521 +1.3.6.1.2.1.7.7.1.7.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|66|62779 +1.3.6.1.2.1.7.7.1.7.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|66|47504 +1.3.6.1.2.1.7.7.1.7.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|66|55881 +1.3.6.1.2.1.7.7.1.7.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|66|30456 +1.3.6.1.2.1.7.7.1.7.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|66|29068 +1.3.6.1.2.1.7.7.1.7.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|66|30734 +1.3.6.1.2.1.7.7.1.7.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|66|33093 +1.3.6.1.2.1.7.7.1.8.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|66|22659 +1.3.6.1.2.1.7.7.1.8.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|66|19353 +1.3.6.1.2.1.7.7.1.8.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|66|61976 +1.3.6.1.2.1.7.7.1.8.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|66|61206 +1.3.6.1.2.1.7.7.1.8.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|66|14129 +1.3.6.1.2.1.7.7.1.8.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|66|59181 +1.3.6.1.2.1.7.7.1.8.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|66|15936 +1.3.6.1.2.1.7.7.1.8.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|66|5023 +1.3.6.1.2.1.7.7.1.8.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|66|22219 +1.3.6.1.2.1.7.7.1.8.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|66|45286 +1.3.6.1.2.1.7.8.0|70|6116206687099577350 +1.3.6.1.2.1.7.9.0|70|60548728080473664 +1.3.6.1.2.1.31.1.1.1.1.11|4x|65746830 +1.3.6.1.2.1.31.1.1.1.2.11|65|3971642957 +1.3.6.1.2.1.31.1.1.1.3.11|65|3271801795 +1.3.6.1.2.1.31.1.1.1.4.11|65|3342364789 +1.3.6.1.2.1.31.1.1.1.5.11|65|3388467146 +1.3.6.1.2.1.31.1.1.1.6.11|70|14670660891743438939 +1.3.6.1.2.1.31.1.1.1.7.11|70|10886984631120028416 +1.3.6.1.2.1.31.1.1.1.8.11|70|17994136813414766052 +1.3.6.1.2.1.31.1.1.1.9.11|70|10439183159610289289 +1.3.6.1.2.1.31.1.1.1.10.11|70|2583386891169315520 +1.3.6.1.2.1.31.1.1.1.11.11|70|8885889412380302445 +1.3.6.1.2.1.31.1.1.1.12.11|70|10885548970511406028 +1.3.6.1.2.1.31.1.1.1.13.11|70|10028224865574503284 +1.3.6.1.2.1.31.1.1.1.15.11|66|31298329 +1.3.6.1.2.1.99.1.1.1.1.31|2|9 +1.3.6.1.2.1.99.1.1.1.2.31|2|3 +1.3.6.1.2.1.99.1.1.1.3.31|2|6 +1.3.6.1.2.1.99.1.1.1.4.31|2|10 +1.3.6.1.4.1.9.9.13.1.3.1.1.3|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.1.6|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.1.8|2|8 +1.3.6.1.4.1.9.9.13.1.3.1.1.11|2|11 +1.3.6.1.4.1.9.9.13.1.3.1.1.13|2|13 +1.3.6.1.4.1.9.9.13.1.3.1.1.14|2|14 +1.3.6.1.4.1.9.9.13.1.3.1.1.20|2|20 +1.3.6.1.4.1.9.9.13.1.3.1.1.21|2|21 +1.3.6.1.4.1.9.9.13.1.3.1.1.31|2|31 +1.3.6.1.4.1.9.9.13.1.3.1.2.3|4x|7468656972207a6f6d62696573207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.9.9.13.1.3.1.2.6|4x|64726976696e672064726976696e67206b657074206163746564 +1.3.6.1.4.1.9.9.13.1.3.1.2.8|4x|7a6f6d626965732062757420717561696e746c79 +1.3.6.1.4.1.9.9.13.1.3.1.2.11|4x|61637465642064726976696e67204a61646564206163746564 +1.3.6.1.4.1.9.9.13.1.3.1.2.13|4x|7a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.9.9.13.1.3.1.2.14|4|oxen +1.3.6.1.4.1.9.9.13.1.3.1.2.20|4x|6b657074206f78656e +1.3.6.1.4.1.9.9.13.1.3.1.2.21|4x|627574204a61646564207468656972 +1.3.6.1.4.1.9.9.13.1.3.1.2.31|4x|64726976696e6720717561696e746c79 +1.3.6.1.4.1.9.9.13.1.3.1.3.3|66|3930379735 +1.3.6.1.4.1.9.9.13.1.3.1.3.6|66|2258658671 +1.3.6.1.4.1.9.9.13.1.3.1.3.8|66|3213289584 +1.3.6.1.4.1.9.9.13.1.3.1.3.11|66|978410705 +1.3.6.1.4.1.9.9.13.1.3.1.3.13|66|2328456073 +1.3.6.1.4.1.9.9.13.1.3.1.3.14|66|952183581 +1.3.6.1.4.1.9.9.13.1.3.1.3.20|66|2877883263 +1.3.6.1.4.1.9.9.13.1.3.1.3.21|66|3953080519 +1.3.6.1.4.1.9.9.13.1.3.1.3.31|66|414726588 +1.3.6.1.4.1.9.9.13.1.3.1.4.3|2|9 +1.3.6.1.4.1.9.9.13.1.3.1.4.6|2|17 +1.3.6.1.4.1.9.9.13.1.3.1.4.8|2|1 +1.3.6.1.4.1.9.9.13.1.3.1.4.11|2|29 +1.3.6.1.4.1.9.9.13.1.3.1.4.13|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.4.14|2|10 +1.3.6.1.4.1.9.9.13.1.3.1.4.20|2|23 +1.3.6.1.4.1.9.9.13.1.3.1.4.21|2|13 +1.3.6.1.4.1.9.9.13.1.3.1.4.31|2|5 +1.3.6.1.4.1.9.9.13.1.3.1.5.3|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.5.6|2|7 +1.3.6.1.4.1.9.9.13.1.3.1.5.8|2|10 +1.3.6.1.4.1.9.9.13.1.3.1.5.11|2|26 +1.3.6.1.4.1.9.9.13.1.3.1.5.13|2|30 +1.3.6.1.4.1.9.9.13.1.3.1.5.14|2|9 +1.3.6.1.4.1.9.9.13.1.3.1.5.20|2|17 +1.3.6.1.4.1.9.9.13.1.3.1.5.21|2|21 +1.3.6.1.4.1.9.9.13.1.3.1.5.31|2|28 +1.3.6.1.4.1.9.9.13.1.3.1.6.3|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.6.6|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.8|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.11|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.13|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.6.14|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.20|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.21|2|4 +1.3.6.1.4.1.9.9.13.1.3.1.6.31|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.1.4|2|4 +1.3.6.1.4.1.9.9.13.1.4.1.1.6|2|6 +1.3.6.1.4.1.9.9.13.1.4.1.1.7|2|7 +1.3.6.1.4.1.9.9.13.1.4.1.1.16|2|16 +1.3.6.1.4.1.9.9.13.1.4.1.1.21|2|21 +1.3.6.1.4.1.9.9.13.1.4.1.1.22|2|22 +1.3.6.1.4.1.9.9.13.1.4.1.1.25|2|25 +1.3.6.1.4.1.9.9.13.1.4.1.1.27|2|27 +1.3.6.1.4.1.9.9.13.1.4.1.1.30|2|30 +1.3.6.1.4.1.9.9.13.1.4.1.2.4|4|fan_1 +1.3.6.1.4.1.9.9.13.1.4.1.2.6|4|fan_2 +1.3.6.1.4.1.9.9.13.1.4.1.2.7|4|fan_3 +1.3.6.1.4.1.9.9.13.1.4.1.2.16|4|fan_4 +1.3.6.1.4.1.9.9.13.1.4.1.2.22|4|fan_5 +1.3.6.1.4.1.9.9.13.1.4.1.2.25|4|fan_6 +1.3.6.1.4.1.9.9.13.1.4.1.2.27|4|fan_7 +1.3.6.1.4.1.9.9.13.1.4.1.2.30|4|fan_8 +1.3.6.1.4.1.9.9.13.1.4.1.3.4|2|3 +1.3.6.1.4.1.9.9.13.1.4.1.3.6|2|6 +1.3.6.1.4.1.9.9.13.1.4.1.3.7|2|3 +1.3.6.1.4.1.9.9.13.1.4.1.3.16|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.3.21|2|3 +1.3.6.1.4.1.9.9.13.1.4.1.3.22|2|6 +1.3.6.1.4.1.9.9.13.1.4.1.3.25|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.3.27|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.3.30|2|1 +1.3.6.1.4.1.9.9.13.1.5.1.1.0|2|0 +1.3.6.1.4.1.9.9.13.1.5.1.1.5|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.1.16|2|16 +1.3.6.1.4.1.9.9.13.1.5.1.1.20|2|20 +1.3.6.1.4.1.9.9.13.1.5.1.1.21|2|21 +1.3.6.1.4.1.9.9.13.1.5.1.1.22|2|22 +1.3.6.1.4.1.9.9.13.1.5.1.1.25|2|25 +1.3.6.1.4.1.9.9.13.1.5.1.1.26|2|26 +1.3.6.1.4.1.9.9.13.1.5.1.1.29|2|29 +1.3.6.1.4.1.9.9.13.1.5.1.1.31|2|31 +1.3.6.1.4.1.9.9.13.1.5.1.2.0|4x|666f7277617264206f78656e206163746564 +1.3.6.1.4.1.9.9.13.1.5.1.2.5|4|Jaded +1.3.6.1.4.1.9.9.13.1.5.1.2.16|4x|62757420717561696e746c792062757420717561696e746c79 +1.3.6.1.4.1.9.9.13.1.5.1.2.20|4|quaintly +1.3.6.1.4.1.9.9.13.1.5.1.2.21|4x|64726976696e6720717561696e746c7920616374656420627574207468656972 +1.3.6.1.4.1.9.9.13.1.5.1.2.22|4x|62757420627574 +1.3.6.1.4.1.9.9.13.1.5.1.2.25|4x|6163746564206b6570742064726976696e67206163746564 +1.3.6.1.4.1.9.9.13.1.5.1.2.26|4x|6f78656e207468656972204a61646564 +1.3.6.1.4.1.9.9.13.1.5.1.2.29|4x|746865697220746865697220616374656420666f7277617264 +1.3.6.1.4.1.9.9.13.1.5.1.2.31|4x|4a616465642064726976696e67207468656972207468656972207468656972 +1.3.6.1.4.1.9.9.13.1.5.1.3.0|2|1 +1.3.6.1.4.1.9.9.13.1.5.1.3.5|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.3.16|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.3.20|2|6 +1.3.6.1.4.1.9.9.13.1.5.1.3.21|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.3.22|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.3.25|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.3.26|2|6 +1.3.6.1.4.1.9.9.13.1.5.1.3.29|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.3.31|2|1 +1.3.6.1.4.1.9.9.13.1.5.1.4.0|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.4.5|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.4.16|2|4 +1.3.6.1.4.1.9.9.13.1.5.1.4.20|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.21|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.22|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.25|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.26|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.29|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.4.31|2|1 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.1|2|22 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.7|2|21 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.10|2|17 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.13|2|6 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.15|2|20 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.18|2|8 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.20|2|16 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.1|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.7|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.10|2|2 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.13|2|2 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.15|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.18|2|2 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.20|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.1|2|3 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.7|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.10|2|6 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.13|2|4 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.15|2|6 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.18|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.20|2|6 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.1|66|2223021701 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.7|66|917475738 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.10|66|631313195 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.13|66|2637486476 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.15|66|30159574 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.18|66|3370367591 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.20|66|1617271034 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.1|2|13 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.7|2|30 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.10|2|2 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.13|2|21 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.15|2|19 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.18|2|20 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.20|2|27 +1.3.6.1.4.1.9.9.48.1.1.1.1.18|2|18 +1.3.6.1.4.1.9.9.48.1.1.1.2.18|4|test_pool +1.3.6.1.4.1.9.9.48.1.1.1.3.18|2|23 +1.3.6.1.4.1.9.9.48.1.1.1.4.18|2|1 +1.3.6.1.4.1.9.9.48.1.1.1.5.18|66|4078680985 +1.3.6.1.4.1.9.9.48.1.1.1.6.18|66|3648996318 +1.3.6.1.4.1.9.9.48.1.1.1.7.18|66|3283078931 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.712|66|712 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.7746|66|7746 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.712|2|20 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.7746|2|21 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.712|66|90 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.7746|66|3 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.712|66|40 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.7746|66|4 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.712|66|50 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.7746|66|5 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.712|66|60 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.7746|66|3 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.712|66|20 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.7746|66|5 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.712|66|40 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.7746|66|5 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.712|66|15518 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.7746|66|38028 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.712|66|60 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.7746|66|6 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.712|66|70 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.7746|66|7 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.712|66|353 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.7746|66|727588670 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.712|66|248 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.7746|66|1683542536 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.3|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.4|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.5|2|5 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.7|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.11|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.16|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.17|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.24|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.25|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.3|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.4|2|5 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.5|2|11 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.7|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.11|2|6 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.16|2|11 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.17|2|11 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.24|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.25|2|12 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.3|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.4|2|14 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.5|2|12 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.7|2|30 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.11|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.16|2|10 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.17|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.24|2|8 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.25|2|29 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.3|4x|6f78656e207a6f6d626965732064726976696e67 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.4|4x|4a6164656420717561696e746c79204a6164656420627574207a6f6d6269657320717561696e746c79207a6f6d6269657320666f7277617264206b657074 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.5|4x|74686569722064726976696e67206b657074206f78656e2064726976696e6720666f7277617264207468656972 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.7|4x|6b65707420666f727761726420627574207468656972206275742064726976696e67207a6f6d6269657320746865697220717561696e746c79 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.11|4|quaintly +1.3.6.1.4.1.9.9.117.1.1.2.1.4.16|4x|6b657074207a6f6d62696573 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.17|4x|6f78656e206b65707420627574207a6f6d6269657320717561696e746c7920627574206f78656e +1.3.6.1.4.1.9.9.117.1.1.2.1.4.24|4x|4a61646564207a6f6d626965732061637465642064726976696e67207468656972207a6f6d6269657320666f727761726420717561696e746c79 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.25|4x|6275742064726976696e67204a61646564206275742062757420627574 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.3|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.4|2|24 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.5|2|10 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.7|2|23 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.11|2|20 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.16|2|30 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.17|2|11 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.24|2|12 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.25|2|0 +1.3.6.1.4.1.9.9.117.1.1.3.0|2|10 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.2|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.7|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.8|2|4 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.11|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.21|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.26|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.27|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.30|2|4 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.31|2|1 +1.3.6.1.4.1.9.9.147.1.2.1.1.1.1.3|2|3 +1.3.6.1.4.1.9.9.147.1.2.1.1.1.2.3|4|Secondary unit +1.3.6.1.4.1.9.9.147.1.2.1.1.1.2.5|4|Primary unit +1.3.6.1.4.1.9.9.147.1.2.1.1.1.2.6|4|Failover LAN Interface +1.3.6.1.4.1.9.9.147.1.2.1.1.1.3.3|2|2 +1.3.6.1.4.1.9.9.147.1.2.1.1.1.3.5|2|8 +1.3.6.1.4.1.9.9.147.1.2.1.1.1.3.6|2|9 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.1.47596.5|66|47596 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.1.50035.2|66|50035 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.2.47596.5|2|5 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.2.50035.2|2|2 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.3.47596.5|4x|64726976696e67206b6570742064726976696e67207468656972204a61646564204a61646564206b65707420627574206b657074 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.3.50035.2|4x|717561696e746c7920627574207468656972206275742064726976696e67 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.4.47596.5|66|759866853 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.4.50035.2|66|3000607411 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.1.5.5|2|5 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.1.8.1|2|8 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.1.20.2|2|20 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.2.5.5|2|5 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.2.8.1|2|1 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.2.20.2|2|2 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.3.5.5|4x|627574206b657074207468656972206f78656e20666f72776172642064726976696e672064726976696e6720717561696e746c79 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.3.8.1|4|test_conn +1.3.6.1.4.1.9.9.147.1.2.2.2.1.3.20.2|4x|4a6164656420746865697220627574204a6164656420717561696e746c79207468656972 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.4.5.5|65|2025029234 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.4.8.1|65|2690303639 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.4.20.2|65|2586750173 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.5.5.5|66|20378309 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.5.20.2|66|4087850099 +1.3.6.1.4.1.9.9.171.1.1.1.0|2|20 +1.3.6.1.4.1.9.9.171.1.2.1.1.0|66|2517445787 +1.3.6.1.4.1.9.9.171.1.2.1.2.0|65|2082435314 +1.3.6.1.4.1.9.9.171.1.2.1.3.0|65|3586485799 +1.3.6.1.4.1.9.9.171.1.2.1.4.0|65|55415745 +1.3.6.1.4.1.9.9.171.1.2.1.5.0|65|2585066045 +1.3.6.1.4.1.9.9.171.1.2.1.6.0|65|2512419052 +1.3.6.1.4.1.9.9.171.1.2.1.7.0|65|787033253 +1.3.6.1.4.1.9.9.171.1.2.1.8.0|65|3554335867 +1.3.6.1.4.1.9.9.171.1.2.1.9.0|65|3427054745 +1.3.6.1.4.1.9.9.171.1.2.1.10.0|65|915529830 +1.3.6.1.4.1.9.9.171.1.2.1.11.0|65|1771994502 +1.3.6.1.4.1.9.9.171.1.2.1.12.0|65|2076367213 +1.3.6.1.4.1.9.9.171.1.2.1.13.0|65|123173035 +1.3.6.1.4.1.9.9.171.1.2.1.14.0|65|3653722608 +1.3.6.1.4.1.9.9.171.1.2.1.15.0|65|67753505 +1.3.6.1.4.1.9.9.171.1.2.1.16.0|65|2844371229 +1.3.6.1.4.1.9.9.171.1.2.1.17.0|65|654198838 +1.3.6.1.4.1.9.9.171.1.2.1.18.0|65|1314173894 +1.3.6.1.4.1.9.9.171.1.2.1.19.0|65|2721519379 +1.3.6.1.4.1.9.9.171.1.2.1.20.0|65|2355318485 +1.3.6.1.4.1.9.9.171.1.2.1.21.0|65|2650257281 +1.3.6.1.4.1.9.9.171.1.2.1.22.0|65|1030937622 +1.3.6.1.4.1.9.9.171.1.2.1.23.0|65|2780652506 +1.3.6.1.4.1.9.9.171.1.2.1.24.0|65|1045063375 +1.3.6.1.4.1.9.9.171.1.2.1.25.0|65|3776486351 +1.3.6.1.4.1.9.9.171.1.2.1.26.0|65|1216922190 +1.3.6.1.4.1.9.9.171.1.2.2.1.1.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|1 +1.3.6.1.4.1.9.9.171.1.2.2.1.1.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|2 +1.3.6.1.4.1.9.9.171.1.2.2.1.2.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|4x|6b6570742064726976696e67206275742064726976696e67206f78656e20666f7277617264204a6164656420717561696e746c7920717561696e746c79 +1.3.6.1.4.1.9.9.171.1.2.2.1.2.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|4x|627574207a6f6d62696573206f78656e207468656972206b657074 +1.3.6.1.4.1.9.9.171.1.2.2.1.3.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|1 +1.3.6.1.4.1.9.9.171.1.2.2.1.3.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|1 +1.3.6.1.4.1.9.9.171.1.2.2.1.4.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|4x|6b65707420666f7277617264207468656972 +1.3.6.1.4.1.9.9.171.1.2.2.1.4.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|4x|717561696e746c792064726976696e67207a6f6d62696573206163746564 +1.3.6.1.4.1.9.9.171.1.2.2.1.5.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|30 +1.3.6.1.4.1.9.9.171.1.2.2.1.5.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|12 +1.3.6.1.4.1.9.9.171.1.2.2.1.6.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|4x|4a61646564206b657074207468656972 +1.3.6.1.4.1.9.9.171.1.2.2.1.6.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|4|kept +1.3.6.1.4.1.9.9.171.1.2.2.1.7.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|4x|4a61646564206163746564206f78656e +1.3.6.1.4.1.9.9.171.1.2.2.1.7.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|4|kept +1.3.6.1.4.1.9.9.171.1.2.2.1.8.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|23 +1.3.6.1.4.1.9.9.171.1.2.2.1.8.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|31 +1.3.6.1.4.1.9.9.171.1.2.2.1.9.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|22 +1.3.6.1.4.1.9.9.171.1.2.2.1.9.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.1.3|2|3 +1.3.6.1.4.1.9.9.171.1.2.3.1.1.5|2|5 +1.3.6.1.4.1.9.9.171.1.2.3.1.2.3|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.2.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.3.3|4x|7468656972207a6f6d62696573207468656972207a6f6d62696573206b657074206f78656e +1.3.6.1.4.1.9.9.171.1.2.3.1.3.5|4x|7a6f6d62696573204a6164656420746865697220616374656420627574 +1.3.6.1.4.1.9.9.171.1.2.3.1.4.3|4|oxen +1.3.6.1.4.1.9.9.171.1.2.3.1.4.5|4x|6163746564206163746564206f78656e +1.3.6.1.4.1.9.9.171.1.2.3.1.5.3|4|oxen +1.3.6.1.4.1.9.9.171.1.2.3.1.5.5|4|but +1.3.6.1.4.1.9.9.171.1.2.3.1.6.3|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.6.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.7.3|4x|6163746564206b657074204a61646564206163746564 +1.3.6.1.4.1.9.9.171.1.2.3.1.7.5|4x|64726976696e67206f78656e206b65707420627574204a61646564207a6f6d62696573204a61646564 +1.3.6.1.4.1.9.9.171.1.2.3.1.8.3|4|kept +1.3.6.1.4.1.9.9.171.1.2.3.1.8.5|4x|6b657074207468656972204a61646564 +1.3.6.1.4.1.9.9.171.1.2.3.1.9.3|4x|6163746564206b657074207468656972207468656972 +1.3.6.1.4.1.9.9.171.1.2.3.1.9.5|4x|666f727761726420666f7277617264206b65707420717561696e746c79206163746564207a6f6d62696573 +1.3.6.1.4.1.9.9.171.1.2.3.1.10.3|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.10.5|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.11.3|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.11.5|2|3 +1.3.6.1.4.1.9.9.171.1.2.3.1.12.3|2|3 +1.3.6.1.4.1.9.9.171.1.2.3.1.12.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.13.3|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.13.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.14.3|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.14.5|2|5 +1.3.6.1.4.1.9.9.171.1.2.3.1.15.3|2|13 +1.3.6.1.4.1.9.9.171.1.2.3.1.15.5|2|28 +1.3.6.1.4.1.9.9.171.1.2.3.1.16.3|2|16 +1.3.6.1.4.1.9.9.171.1.2.3.1.16.5|2|0 +1.3.6.1.4.1.9.9.171.1.2.3.1.17.3|2|9 +1.3.6.1.4.1.9.9.171.1.2.3.1.17.5|2|23 +1.3.6.1.4.1.9.9.171.1.2.3.1.18.3|65|873863217 +1.3.6.1.4.1.9.9.171.1.2.3.1.18.5|65|4041389162 +1.3.6.1.4.1.9.9.171.1.2.3.1.19.3|65|444696945 +1.3.6.1.4.1.9.9.171.1.2.3.1.19.5|65|1429413108 +1.3.6.1.4.1.9.9.171.1.2.3.1.20.3|65|2526233032 +1.3.6.1.4.1.9.9.171.1.2.3.1.20.5|65|3931574972 +1.3.6.1.4.1.9.9.171.1.2.3.1.21.3|65|2479090364 +1.3.6.1.4.1.9.9.171.1.2.3.1.21.5|65|874183465 +1.3.6.1.4.1.9.9.171.1.2.3.1.22.3|65|888202948 +1.3.6.1.4.1.9.9.171.1.2.3.1.22.5|65|1610429217 +1.3.6.1.4.1.9.9.171.1.2.3.1.23.3|65|3462920250 +1.3.6.1.4.1.9.9.171.1.2.3.1.23.5|65|2151705546 +1.3.6.1.4.1.9.9.171.1.2.3.1.24.3|65|2565719801 +1.3.6.1.4.1.9.9.171.1.2.3.1.24.5|65|3395553994 +1.3.6.1.4.1.9.9.171.1.2.3.1.25.3|65|2228405074 +1.3.6.1.4.1.9.9.171.1.2.3.1.25.5|65|2624335244 +1.3.6.1.4.1.9.9.171.1.2.3.1.26.3|65|3006967537 +1.3.6.1.4.1.9.9.171.1.2.3.1.26.5|65|410051353 +1.3.6.1.4.1.9.9.171.1.2.3.1.27.3|65|1337714779 +1.3.6.1.4.1.9.9.171.1.2.3.1.27.5|65|1425712802 +1.3.6.1.4.1.9.9.171.1.2.3.1.28.3|65|2116873007 +1.3.6.1.4.1.9.9.171.1.2.3.1.28.5|65|1353332653 +1.3.6.1.4.1.9.9.171.1.2.3.1.29.3|65|3580869615 +1.3.6.1.4.1.9.9.171.1.2.3.1.29.5|65|715475082 +1.3.6.1.4.1.9.9.171.1.2.3.1.30.3|65|2249094174 +1.3.6.1.4.1.9.9.171.1.2.3.1.30.5|65|685279905 +1.3.6.1.4.1.9.9.171.1.2.3.1.31.3|65|2318835995 +1.3.6.1.4.1.9.9.171.1.2.3.1.31.5|65|3313898297 +1.3.6.1.4.1.9.9.171.1.2.3.1.32.3|65|990926535 +1.3.6.1.4.1.9.9.171.1.2.3.1.32.5|65|4004637148 +1.3.6.1.4.1.9.9.171.1.2.3.1.33.3|65|1674719135 +1.3.6.1.4.1.9.9.171.1.2.3.1.33.5|65|3116893031 +1.3.6.1.4.1.9.9.171.1.2.3.1.34.3|65|2142489467 +1.3.6.1.4.1.9.9.171.1.2.3.1.34.5|65|567516830 +1.3.6.1.4.1.9.9.171.1.2.3.1.35.3|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.35.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.4.1.1.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|2 +1.3.6.1.4.1.9.9.171.1.2.4.1.1.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|2 +1.3.6.1.4.1.9.9.171.1.2.4.1.2.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|4x|666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.171.1.2.4.1.2.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|4x|7468656972207a6f6d62696573206f78656e204a616465642064726976696e67 +1.3.6.1.4.1.9.9.171.1.2.4.1.3.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.4.1.3.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|2 +1.3.6.1.4.1.9.9.171.1.2.4.1.4.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|4x|627574206f78656e2064726976696e67207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.9.9.171.1.2.4.1.4.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|4x|7468656972204a61646564206b657074207a6f6d62696573207468656972206b65707420627574 +1.3.6.1.4.1.9.9.171.1.2.4.1.5.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|13 +1.3.6.1.4.1.9.9.171.1.2.4.1.5.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|24 +1.3.6.1.4.1.9.9.171.1.2.4.1.6.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|5 +1.3.6.1.4.1.9.9.171.1.2.4.1.6.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|26 +1.3.6.1.4.1.9.9.171.1.2.4.1.7.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|23 +1.3.6.1.4.1.9.9.171.1.2.4.1.7.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|24 +1.3.6.1.4.1.9.9.171.1.2.5.1.1.2|66|3405348844 +1.3.6.1.4.1.9.9.171.1.2.5.1.1.17|66|1379037661 +1.3.6.1.4.1.9.9.171.1.2.5.1.2.2|65|88229005 +1.3.6.1.4.1.9.9.171.1.2.5.1.2.17|65|3030198713 +1.3.6.1.4.1.9.9.171.1.2.5.1.3.2|65|344910659 +1.3.6.1.4.1.9.9.171.1.2.5.1.3.17|65|33036840 +1.3.6.1.4.1.9.9.171.1.2.5.1.4.2|65|447299365 +1.3.6.1.4.1.9.9.171.1.2.5.1.4.17|65|538727845 +1.3.6.1.4.1.9.9.171.1.2.5.1.5.2|65|472834505 +1.3.6.1.4.1.9.9.171.1.2.5.1.5.17|65|3054034 +1.3.6.1.4.1.9.9.171.1.2.5.1.6.2|65|3593802072 +1.3.6.1.4.1.9.9.171.1.2.5.1.6.17|65|3549366247 +1.3.6.1.4.1.9.9.171.1.2.5.1.7.2|65|2944563745 +1.3.6.1.4.1.9.9.171.1.2.5.1.7.17|65|3766841702 +1.3.6.1.4.1.9.9.171.1.2.5.1.8.2|65|2827110916 +1.3.6.1.4.1.9.9.171.1.2.5.1.8.17|65|541497651 +1.3.6.1.4.1.9.9.171.1.2.5.1.9.2|65|234506077 +1.3.6.1.4.1.9.9.171.1.2.5.1.9.17|65|2731827217 +1.3.6.1.4.1.9.9.171.1.2.5.1.10.2|65|35823350 +1.3.6.1.4.1.9.9.171.1.2.5.1.10.17|65|2055408274 +1.3.6.1.4.1.9.9.171.1.2.5.1.11.2|65|613379743 +1.3.6.1.4.1.9.9.171.1.2.5.1.11.17|65|749737562 +1.3.6.1.4.1.9.9.171.1.2.5.1.12.2|65|3136782594 +1.3.6.1.4.1.9.9.171.1.2.5.1.12.17|65|3867599558 +1.3.6.1.4.1.9.9.171.1.2.5.1.13.2|65|2518038894 +1.3.6.1.4.1.9.9.171.1.2.5.1.13.17|65|3789209889 +1.3.6.1.4.1.9.9.171.1.2.5.1.14.2|65|485135820 +1.3.6.1.4.1.9.9.171.1.2.5.1.14.17|65|2804351110 +1.3.6.1.4.1.9.9.171.1.2.5.1.15.2|65|3816944451 +1.3.6.1.4.1.9.9.171.1.2.5.1.15.17|65|3061990294 +1.3.6.1.4.1.9.9.171.1.2.5.1.16.2|65|3293750728 +1.3.6.1.4.1.9.9.171.1.2.5.1.16.17|65|3502377103 +1.3.6.1.4.1.9.9.171.1.2.5.1.17.2|65|4236310901 +1.3.6.1.4.1.9.9.171.1.2.5.1.17.17|65|2360434961 +1.3.6.1.4.1.9.9.171.1.2.5.1.18.2|65|3798162230 +1.3.6.1.4.1.9.9.171.1.2.5.1.18.17|65|3954421682 +1.3.6.1.4.1.9.9.171.1.2.5.1.19.2|65|1365609163 +1.3.6.1.4.1.9.9.171.1.2.5.1.19.17|65|191894913 +1.3.6.1.4.1.9.9.171.1.2.5.1.20.2|65|1405339921 +1.3.6.1.4.1.9.9.171.1.2.5.1.20.17|65|2429774821 +1.3.6.1.4.1.9.9.171.1.2.5.1.21.2|65|2995566101 +1.3.6.1.4.1.9.9.171.1.2.5.1.21.17|65|1832565962 +1.3.6.1.4.1.9.9.171.1.2.5.1.22.2|65|4132429477 +1.3.6.1.4.1.9.9.171.1.2.5.1.22.17|65|418366803 +1.3.6.1.4.1.9.9.171.1.2.5.1.23.2|65|2015402172 +1.3.6.1.4.1.9.9.171.1.2.5.1.23.17|65|1316534295 +1.3.6.1.4.1.9.9.171.1.2.5.1.24.2|65|3247282160 +1.3.6.1.4.1.9.9.171.1.2.5.1.24.17|65|2833736517 +1.3.6.1.4.1.9.9.171.1.2.5.1.25.2|65|2823444229 +1.3.6.1.4.1.9.9.171.1.2.5.1.25.17|65|1615516389 +1.3.6.1.4.1.9.9.171.1.2.5.1.26.2|65|73347298 +1.3.6.1.4.1.9.9.171.1.2.5.1.26.17|65|2896149360 +1.3.6.1.4.1.9.9.171.1.3.1.1.0|66|555520100 +1.3.6.1.4.1.9.9.171.1.3.1.2.0|65|3433850807 +1.3.6.1.4.1.9.9.171.1.3.1.3.0|65|3765451978 +1.3.6.1.4.1.9.9.171.1.3.1.4.0|70|8076380598964912751 +1.3.6.1.4.1.9.9.171.1.3.1.5.0|65|605242469 +1.3.6.1.4.1.9.9.171.1.3.1.6.0|65|2117938836 +1.3.6.1.4.1.9.9.171.1.3.1.7.0|70|1244382013554652095 +1.3.6.1.4.1.9.9.171.1.3.1.8.0|65|2069097191 +1.3.6.1.4.1.9.9.171.1.3.1.9.0|65|1103506722 +1.3.6.1.4.1.9.9.171.1.3.1.10.0|65|3278141363 +1.3.6.1.4.1.9.9.171.1.3.1.11.0|65|2348631446 +1.3.6.1.4.1.9.9.171.1.3.1.12.0|65|788758787 +1.3.6.1.4.1.9.9.171.1.3.1.13.0|65|1299954247 +1.3.6.1.4.1.9.9.171.1.3.1.14.0|65|2563637642 +1.3.6.1.4.1.9.9.171.1.3.1.15.0|65|34726275 +1.3.6.1.4.1.9.9.171.1.3.1.16.0|65|3892208230 +1.3.6.1.4.1.9.9.171.1.3.1.17.0|70|11061656018312361232 +1.3.6.1.4.1.9.9.171.1.3.1.18.0|65|3239360685 +1.3.6.1.4.1.9.9.171.1.3.1.19.0|65|2198334559 +1.3.6.1.4.1.9.9.171.1.3.1.20.0|70|3371199286386608944 +1.3.6.1.4.1.9.9.171.1.3.1.21.0|65|2444861007 +1.3.6.1.4.1.9.9.171.1.3.1.22.0|65|1881053125 +1.3.6.1.4.1.9.9.171.1.3.1.23.0|65|3540985166 +1.3.6.1.4.1.9.9.171.1.3.1.24.0|65|3081489769 +1.3.6.1.4.1.9.9.171.1.3.1.25.0|65|257883106 +1.3.6.1.4.1.9.9.171.1.3.1.26.0|65|1836586560 +1.3.6.1.4.1.9.9.171.1.3.1.27.0|65|980485057 +1.3.6.1.4.1.9.9.171.1.3.1.28.0|65|644393269 +1.3.6.1.4.1.9.9.171.1.3.1.29.0|65|3550809455 +1.3.6.1.4.1.9.9.171.1.3.1.30.0|65|1537259604 +1.3.6.1.4.1.9.9.171.1.3.2.1.1.23|2|23 +1.3.6.1.4.1.9.9.171.1.3.2.1.1.28|2|28 +1.3.6.1.4.1.9.9.171.1.3.2.1.2.23|2|7 +1.3.6.1.4.1.9.9.171.1.3.2.1.2.28|2|7 +1.3.6.1.4.1.9.9.171.1.3.2.1.3.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.3.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.4.23|4x|64726976696e67206b65707420627574 +1.3.6.1.4.1.9.9.171.1.3.2.1.4.28|4x|6b6570742062757420666f7277617264 +1.3.6.1.4.1.9.9.171.1.3.2.1.5.23|4|kept +1.3.6.1.4.1.9.9.171.1.3.2.1.5.28|4|kept +1.3.6.1.4.1.9.9.171.1.3.2.1.6.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.6.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.7.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.7.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.8.23|2|4 +1.3.6.1.4.1.9.9.171.1.3.2.1.8.28|2|6 +1.3.6.1.4.1.9.9.171.1.3.2.1.9.23|2|25 +1.3.6.1.4.1.9.9.171.1.3.2.1.9.28|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.10.23|2|30 +1.3.6.1.4.1.9.9.171.1.3.2.1.10.28|2|7 +1.3.6.1.4.1.9.9.171.1.3.2.1.11.23|2|25 +1.3.6.1.4.1.9.9.171.1.3.2.1.11.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.12.23|2|29 +1.3.6.1.4.1.9.9.171.1.3.2.1.12.28|2|12 +1.3.6.1.4.1.9.9.171.1.3.2.1.13.23|65|736404368 +1.3.6.1.4.1.9.9.171.1.3.2.1.13.28|65|3035617434 +1.3.6.1.4.1.9.9.171.1.3.2.1.14.23|65|2717096145 +1.3.6.1.4.1.9.9.171.1.3.2.1.14.28|65|3979661869 +1.3.6.1.4.1.9.9.171.1.3.2.1.15.23|66|1401352929 +1.3.6.1.4.1.9.9.171.1.3.2.1.15.28|66|1557942135 +1.3.6.1.4.1.9.9.171.1.3.2.1.16.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.16.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.17.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.17.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.18.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.18.28|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.19.23|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.19.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.20.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.20.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.21.23|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.21.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.22.23|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.22.28|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.23.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.23.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.24.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.24.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.25.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.25.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.26.23|65|165896064 +1.3.6.1.4.1.9.9.171.1.3.2.1.26.28|65|3618088990 +1.3.6.1.4.1.9.9.171.1.3.2.1.27.23|70|16893382919849205152 +1.3.6.1.4.1.9.9.171.1.3.2.1.27.28|70|11976318338642029242 +1.3.6.1.4.1.9.9.171.1.3.2.1.28.23|65|373706179 +1.3.6.1.4.1.9.9.171.1.3.2.1.28.28|65|42463689 +1.3.6.1.4.1.9.9.171.1.3.2.1.29.23|65|1106272656 +1.3.6.1.4.1.9.9.171.1.3.2.1.29.28|65|1002521669 +1.3.6.1.4.1.9.9.171.1.3.2.1.30.23|70|11922900353577803661 +1.3.6.1.4.1.9.9.171.1.3.2.1.30.28|70|15599379710949051351 +1.3.6.1.4.1.9.9.171.1.3.2.1.31.23|65|1074980189 +1.3.6.1.4.1.9.9.171.1.3.2.1.31.28|65|1263307338 +1.3.6.1.4.1.9.9.171.1.3.2.1.32.23|65|19491227 +1.3.6.1.4.1.9.9.171.1.3.2.1.32.28|65|3040420568 +1.3.6.1.4.1.9.9.171.1.3.2.1.33.23|65|185606313 +1.3.6.1.4.1.9.9.171.1.3.2.1.33.28|65|4077668277 +1.3.6.1.4.1.9.9.171.1.3.2.1.34.23|65|3856931801 +1.3.6.1.4.1.9.9.171.1.3.2.1.34.28|65|1043684270 +1.3.6.1.4.1.9.9.171.1.3.2.1.35.23|65|1768453926 +1.3.6.1.4.1.9.9.171.1.3.2.1.35.28|65|2468669416 +1.3.6.1.4.1.9.9.171.1.3.2.1.36.23|65|3103192375 +1.3.6.1.4.1.9.9.171.1.3.2.1.36.28|65|3896235917 +1.3.6.1.4.1.9.9.171.1.3.2.1.37.23|65|2610571653 +1.3.6.1.4.1.9.9.171.1.3.2.1.37.28|65|2004039361 +1.3.6.1.4.1.9.9.171.1.3.2.1.38.23|65|668234317 +1.3.6.1.4.1.9.9.171.1.3.2.1.38.28|65|229562644 +1.3.6.1.4.1.9.9.171.1.3.2.1.39.23|65|451351388 +1.3.6.1.4.1.9.9.171.1.3.2.1.39.28|65|358890378 +1.3.6.1.4.1.9.9.171.1.3.2.1.40.23|70|15907561446294960767 +1.3.6.1.4.1.9.9.171.1.3.2.1.40.28|70|14524952430283157279 +1.3.6.1.4.1.9.9.171.1.3.2.1.41.23|65|2966419854 +1.3.6.1.4.1.9.9.171.1.3.2.1.41.28|65|2075836476 +1.3.6.1.4.1.9.9.171.1.3.2.1.42.23|65|2137519503 +1.3.6.1.4.1.9.9.171.1.3.2.1.42.28|65|723885852 +1.3.6.1.4.1.9.9.171.1.3.2.1.43.23|70|13733445844003001241 +1.3.6.1.4.1.9.9.171.1.3.2.1.43.28|70|13579132757302593240 +1.3.6.1.4.1.9.9.171.1.3.2.1.44.23|65|2771155894 +1.3.6.1.4.1.9.9.171.1.3.2.1.44.28|65|1824515850 +1.3.6.1.4.1.9.9.171.1.3.2.1.45.23|65|1889625612 +1.3.6.1.4.1.9.9.171.1.3.2.1.45.28|65|4054252226 +1.3.6.1.4.1.9.9.171.1.3.2.1.46.23|65|2849925259 +1.3.6.1.4.1.9.9.171.1.3.2.1.46.28|65|3010306271 +1.3.6.1.4.1.9.9.171.1.3.2.1.47.23|65|2110348798 +1.3.6.1.4.1.9.9.171.1.3.2.1.47.28|65|3986765758 +1.3.6.1.4.1.9.9.171.1.3.2.1.48.23|65|2958887014 +1.3.6.1.4.1.9.9.171.1.3.2.1.48.28|65|121428427 +1.3.6.1.4.1.9.9.171.1.3.2.1.49.23|65|4235674459 +1.3.6.1.4.1.9.9.171.1.3.2.1.49.28|65|3087398701 +1.3.6.1.4.1.9.9.171.1.3.2.1.50.23|65|2987809814 +1.3.6.1.4.1.9.9.171.1.3.2.1.50.28|65|1084010267 +1.3.6.1.4.1.9.9.171.1.3.2.1.51.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.51.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.3.1.1.3.15|2|15 +1.3.6.1.4.1.9.9.171.1.3.3.1.1.19.26|2|26 +1.3.6.1.4.1.9.9.171.1.3.3.1.2.3.15|4x|717561696e746c79207a6f6d62696573206163746564207a6f6d62696573 +1.3.6.1.4.1.9.9.171.1.3.3.1.2.19.26|4x|6b657074206163746564206b65707420666f7277617264206b657074 +1.3.6.1.4.1.9.9.171.1.3.3.1.3.3.15|2|1 +1.3.6.1.4.1.9.9.171.1.3.3.1.3.19.26|2|2 +1.3.6.1.4.1.9.9.171.1.3.3.1.4.3.15|4|oxen +1.3.6.1.4.1.9.9.171.1.3.3.1.4.19.26|4|oxen +1.3.6.1.4.1.9.9.171.1.3.3.1.5.3.15|4x|64726976696e67206f78656e20627574 +1.3.6.1.4.1.9.9.171.1.3.3.1.5.19.26|4|kept +1.3.6.1.4.1.9.9.171.1.3.3.1.6.3.15|2|6 +1.3.6.1.4.1.9.9.171.1.3.3.1.6.19.26|2|20 +1.3.6.1.4.1.9.9.171.1.3.3.1.7.3.15|2|22 +1.3.6.1.4.1.9.9.171.1.3.3.1.7.19.26|2|25 +1.3.6.1.4.1.9.9.171.1.3.3.1.8.3.15|4x|6f78656e204a6164656420746865697220627574 +1.3.6.1.4.1.9.9.171.1.3.3.1.8.19.26|4x|746865697220717561696e746c79206163746564207a6f6d62696573206163746564206f78656e2064726976696e67 +1.3.6.1.4.1.9.9.171.1.3.3.1.9.3.15|2|3 +1.3.6.1.4.1.9.9.171.1.3.3.1.9.19.26|2|3 +1.3.6.1.4.1.9.9.171.1.3.3.1.10.3.15|4|oxen +1.3.6.1.4.1.9.9.171.1.3.3.1.10.19.26|4|kept +1.3.6.1.4.1.9.9.171.1.3.3.1.11.3.15|4|kept +1.3.6.1.4.1.9.9.171.1.3.3.1.11.19.26|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.9.9.171.1.3.3.1.12.3.15|2|11 +1.3.6.1.4.1.9.9.171.1.3.3.1.12.19.26|2|3 +1.3.6.1.4.1.9.9.171.1.3.3.1.13.3.15|2|17 +1.3.6.1.4.1.9.9.171.1.3.3.1.13.19.26|2|31 +1.3.6.1.4.1.9.9.171.1.3.4.1.1.9.2|2|2 +1.3.6.1.4.1.9.9.171.1.3.4.1.1.31.28|2|28 +1.3.6.1.4.1.9.9.171.1.3.4.1.2.9.2|2|2 +1.3.6.1.4.1.9.9.171.1.3.4.1.2.31.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.4.1.3.9.2|66|45981 +1.3.6.1.4.1.9.9.171.1.3.4.1.3.31.28|66|2825 +1.3.6.1.4.1.9.9.171.1.3.4.1.4.9.2|2|3 +1.3.6.1.4.1.9.9.171.1.3.4.1.4.31.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.4.1.5.9.2|2|2 +1.3.6.1.4.1.9.9.171.1.3.4.1.5.31.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.5.1.1.11|66|1539004452 +1.3.6.1.4.1.9.9.171.1.3.5.1.1.21|66|986476198 +1.3.6.1.4.1.9.9.171.1.3.5.1.2.11|65|3634989455 +1.3.6.1.4.1.9.9.171.1.3.5.1.2.21|65|774642436 +1.3.6.1.4.1.9.9.171.1.3.5.1.3.11|65|971728629 +1.3.6.1.4.1.9.9.171.1.3.5.1.3.21|65|3145266041 +1.3.6.1.4.1.9.9.171.1.3.5.1.4.11|65|2110814352 +1.3.6.1.4.1.9.9.171.1.3.5.1.4.21|65|155761707 +1.3.6.1.4.1.9.9.171.1.3.5.1.5.11|65|2248268558 +1.3.6.1.4.1.9.9.171.1.3.5.1.5.21|65|561905585 +1.3.6.1.4.1.9.9.171.1.3.5.1.6.11|65|974515501 +1.3.6.1.4.1.9.9.171.1.3.5.1.6.21|65|913516496 +1.3.6.1.4.1.9.9.171.1.3.5.1.7.11|65|3221449308 +1.3.6.1.4.1.9.9.171.1.3.5.1.7.21|65|2989278436 +1.3.6.1.4.1.9.9.171.1.3.5.1.8.11|65|2541691427 +1.3.6.1.4.1.9.9.171.1.3.5.1.8.21|65|3367590847 +1.3.6.1.4.1.9.9.171.1.3.5.1.9.11|65|2075568959 +1.3.6.1.4.1.9.9.171.1.3.5.1.9.21|65|505678552 +1.3.6.1.4.1.9.9.171.1.3.5.1.10.11|65|1601794867 +1.3.6.1.4.1.9.9.171.1.3.5.1.10.21|65|4108299796 +1.3.6.1.4.1.9.9.171.1.3.5.1.11.11|65|3796494388 +1.3.6.1.4.1.9.9.171.1.3.5.1.11.21|65|1442135763 +1.3.6.1.4.1.9.9.171.1.3.5.1.12.11|65|2850926956 +1.3.6.1.4.1.9.9.171.1.3.5.1.12.21|65|989514632 +1.3.6.1.4.1.9.9.171.1.3.5.1.13.11|65|1864025156 +1.3.6.1.4.1.9.9.171.1.3.5.1.13.21|65|115684894 +1.3.6.1.4.1.9.9.171.1.3.5.1.14.11|65|1486924693 +1.3.6.1.4.1.9.9.171.1.3.5.1.14.21|65|3614381712 +1.3.6.1.4.1.9.9.171.1.3.5.1.15.11|65|2886166675 +1.3.6.1.4.1.9.9.171.1.3.5.1.15.21|65|2418878004 +1.3.6.1.4.1.9.9.171.1.3.5.1.16.11|65|4041081525 +1.3.6.1.4.1.9.9.171.1.3.5.1.16.21|65|3202353128 +1.3.6.1.4.1.9.9.171.1.3.5.1.17.11|65|3359563692 +1.3.6.1.4.1.9.9.171.1.3.5.1.17.21|65|3939308341 +1.3.6.1.4.1.9.9.171.1.3.5.1.18.11|65|3421730058 +1.3.6.1.4.1.9.9.171.1.3.5.1.18.21|65|2537482589 +1.3.6.1.4.1.9.9.171.1.3.5.1.19.11|65|2662393759 +1.3.6.1.4.1.9.9.171.1.3.5.1.19.21|65|2933597356 +1.3.6.1.4.1.9.9.171.1.3.5.1.20.11|65|4135163112 +1.3.6.1.4.1.9.9.171.1.3.5.1.20.21|65|3283135834 +1.3.6.1.4.1.9.9.171.1.3.5.1.21.11|65|562097720 +1.3.6.1.4.1.9.9.171.1.3.5.1.21.21|65|168036034 +1.3.6.1.4.1.9.9.171.1.3.5.1.22.11|65|2444828842 +1.3.6.1.4.1.9.9.171.1.3.5.1.22.21|65|78028517 +1.3.6.1.4.1.9.9.171.1.3.5.1.23.11|65|1627747682 +1.3.6.1.4.1.9.9.171.1.3.5.1.23.21|65|871345082 +1.3.6.1.4.1.9.9.171.1.3.5.1.24.11|65|3118031750 +1.3.6.1.4.1.9.9.171.1.3.5.1.24.21|65|3275451558 +1.3.6.1.4.1.9.9.171.1.3.5.1.25.11|65|142449220 +1.3.6.1.4.1.9.9.171.1.3.5.1.25.21|65|3664919325 +1.3.6.1.4.1.9.9.171.1.3.5.1.26.11|65|2401996341 +1.3.6.1.4.1.9.9.171.1.3.5.1.26.21|65|3251587706 +1.3.6.1.4.1.9.9.171.1.4.1.1.1.0|2|13 +1.3.6.1.4.1.9.9.171.1.4.1.1.2.0|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.1.10|2|10 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.1.22|2|22 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.2.10|2|4 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.2.22|2|7 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.3.10|2|30 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.3.22|2|19 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.4.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.4.22|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.5.10|4x|6163746564207a6f6d62696573206f78656e2061637465642064726976696e6720627574 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.5.22|4x|627574204a61646564207468656972 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.6.10|2|6 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.6.22|2|19 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.7.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.7.22|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.8.10|4x|627574207a6f6d62696573207a6f6d62696573207a6f6d62696573206163746564 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.8.22|4x|6275742064726976696e67206b657074 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.9.10|4|kept +1.3.6.1.4.1.9.9.171.1.4.2.1.1.9.22|4x|4a61646564206163746564206f78656e +1.3.6.1.4.1.9.9.171.1.4.2.1.1.10.10|4x|64726976696e67206275742064726976696e6720666f7277617264207468656972 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.10.22|4x|6b657074207468656972204a61646564206b657074206b6570742064726976696e672062757420627574206f78656e +1.3.6.1.4.1.9.9.171.1.4.2.1.1.11.10|4|oxen +1.3.6.1.4.1.9.9.171.1.4.2.1.1.11.22|4x|717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.12.10|4x|64726976696e67207468656972206f78656e2064726976696e67207a6f6d6269657320666f727761726420717561696e746c7920666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.12.22|4x|7468656972206163746564 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.13.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.13.22|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.14.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.14.22|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.15.10|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.15.22|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.16.10|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.16.22|2|3 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.17.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.17.22|2|3 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.18.10|2|17 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.18.22|2|15 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.19.10|67|4188924691 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.19.22|67|2937118870 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.20.10|2|11 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.20.22|2|6 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.21.10|65|3904979266 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.21.22|65|3560928040 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.22.10|65|3895453958 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.22.22|65|930877155 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.23.10|65|4155384128 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.23.22|65|1945794694 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.24.10|65|2440644215 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.24.22|65|2179560049 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.25.10|65|3951748314 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.25.22|65|127664431 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.26.10|65|240677500 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.26.22|65|4237031121 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.27.10|65|2919250870 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.27.22|65|4208516442 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.28.10|65|2427553207 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.28.22|65|948705652 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.29.10|65|82976265 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.29.22|65|3934746364 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.30.10|65|3861895215 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.30.22|65|217536823 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.31.10|65|3151994492 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.31.22|65|241794704 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.32.10|65|1506839476 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.32.22|65|2068566446 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.33.10|65|2343908199 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.33.22|65|3426161501 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.34.10|65|648407740 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.34.22|65|1146473588 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.35.10|65|1680408828 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.35.22|65|799707233 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.36.10|65|3312014872 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.36.22|65|1227147473 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.37.10|65|1202145057 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.37.22|65|1608376026 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.38.10|65|3883766622 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.38.22|65|2243100818 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.1.17|2|17 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.1.18|2|18 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.2.17|2|4 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.2.18|2|5 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.3.17|2|6 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.3.18|2|13 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.4.17|2|11 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.4.18|2|5 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.5.17|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.1.1.5.18|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.1.1.6.17|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.1.1.6.18|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.1.1.7.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.7.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.8.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.8.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.9.17|2|10 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.9.18|2|6 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.10.17|2|21 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.10.18|2|22 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.11.17|67|2140606133 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.11.18|67|947877786 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.12.17|2|24 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.12.18|2|6 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.13.17|65|804171075 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.13.18|65|3013529205 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.14.17|65|2306734177 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.14.18|65|59730603 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.15.17|2|3 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.15.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.16.17|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.16.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.17.17|2|3 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.17.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.18.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.18.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.19.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.19.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.20.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.20.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.21.17|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.21.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.22.17|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.22.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.23.17|2|3 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.23.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.24.17|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.24.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.25.17|65|1350520686 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.25.18|65|460378122 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.26.17|70|10257421324758334396 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.26.18|70|15955968530926075190 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.27.17|65|2626476172 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.27.18|65|866683012 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.28.17|65|729325687 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.28.18|65|2042095897 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.29.17|70|3908873172283764405 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.29.18|70|9692543863636570033 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.30.17|65|797291069 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.30.18|65|3831339083 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.31.17|65|365694518 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.31.18|65|659908830 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.32.17|65|3175828355 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.32.18|65|3194917681 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.33.17|65|3486343761 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.33.18|65|647213477 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.34.17|65|620133147 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.34.18|65|3900465494 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.35.17|65|2135862472 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.35.18|65|2286879901 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.36.17|65|4212299981 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.36.18|65|2957562648 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.37.17|65|3498974530 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.37.18|65|4110881771 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.38.17|65|3426811607 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.38.18|65|3841788286 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.39.17|70|4204788537335394816 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.39.18|70|12043116387776586811 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.40.17|65|3519864046 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.40.18|65|1622184210 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.41.17|65|3039522194 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.41.18|65|1867658882 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.42.17|70|17502062167311159970 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.42.18|70|10996239327049192810 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.43.17|65|3935338485 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.43.18|65|4137439811 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.44.17|65|2920482346 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.44.18|65|166949467 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.45.17|65|3600484353 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.45.18|65|542927767 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.46.17|65|250089742 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.46.18|65|3039150373 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.47.17|65|1876324894 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.47.18|65|3523115734 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.48.17|65|396919596 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.48.18|65|3635284240 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.49.17|65|1871392869 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.49.18|65|1071823832 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.1.22|2|22 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.1.24|2|24 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.2.22|2|23 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.2.24|2|8 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.3.22|2|11 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.3.24|2|28 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.4.22|4x|616374656420666f7277617264206163746564206b657074206163746564206163746564 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.4.24|4x|717561696e746c79204a6164656420746865697220616374656420627574 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.5.22|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.5.24|2|3 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.6.22|4|oxen +1.3.6.1.4.1.9.9.171.1.4.3.2.1.6.24|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.2.1.7.22|4x|6163746564206f78656e204a61646564 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.7.24|4|oxen +1.3.6.1.4.1.9.9.171.1.4.3.2.1.8.22|2|24 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.8.24|2|10 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.9.22|2|31 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.9.24|2|5 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.10.22|4x|6f78656e20627574206b65707420717561696e746c79 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.10.24|4x|616374656420627574 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.11.22|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.11.24|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.12.22|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.2.1.12.24|4x|6f78656e206163746564207468656972 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.13.22|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.2.1.13.24|4|oxen +1.3.6.1.4.1.9.9.171.1.4.3.2.1.14.22|2|14 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.14.24|2|6 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.15.22|2|5 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.15.24|2|15 +1.3.6.1.4.1.9.9.171.1.5.1.1.1.0|2|15 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.1.8|2|8 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.1.15|2|15 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.2.8|2|11 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.2.15|2|14 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.3.8|67|2511746407 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.3.15|67|919534560 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.4.8|2|2 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.4.15|2|2 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.5.8|4x|717561696e746c7920627574206b6570742061637465642064726976696e6720627574 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.5.15|4x|4a61646564204a61646564204a61646564 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.6.8|2|1 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.6.15|2|2 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.7.8|4x|4a6164656420717561696e746c7920627574 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.7.15|4x|64726976696e6720666f72776172642064726976696e6720666f7277617264 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.8.8|4x|717561696e746c7920666f7277617264 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.8.15|4|kept +1.3.6.1.4.1.9.9.171.1.5.2.1.1.9.8|4x|717561696e746c7920666f7277617264 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.9.15|4|oxen +1.3.6.1.4.1.9.9.171.1.5.3.1.1.1.22|2|22 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.1.29|2|29 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.2.22|2|16 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.2.29|2|10 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.3.22|67|4157396408 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.3.29|67|96476129 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.4.22|2|28 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.4.29|2|12 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.5.22|2|25 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.5.29|2|2 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.6.22|4|kept +1.3.6.1.4.1.9.9.171.1.5.3.1.1.6.29|4|kept +1.3.6.1.4.1.9.9.171.1.5.3.1.1.7.22|4|oxen +1.3.6.1.4.1.9.9.171.1.5.3.1.1.7.29|4x|4a61646564206163746564206f78656e +1.3.6.1.4.1.9.9.171.1.6.1.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.2.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.3.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.4.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.5.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.6.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.7.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.8.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.9.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.10.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.11.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.12.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.13.0|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.27|65|1629044510 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.27|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.1.2|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.1.6|2|6 +1.3.6.1.4.1.9.9.324.1.1.1.1.2.2|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.9.9.324.1.1.1.1.2.6|4x|6163746564207468656972 +1.3.6.1.4.1.9.9.324.1.1.1.1.3.2|2|5 +1.3.6.1.4.1.9.9.324.1.1.1.1.3.6|2|19 +1.3.6.1.4.1.9.9.324.1.1.1.1.4.2|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.4.6|2|3 +1.3.6.1.4.1.9.9.324.1.1.1.1.5.2|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.5.6|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.6.2|2|9 +1.3.6.1.4.1.9.9.324.1.1.1.1.6.6|2|24 +1.3.6.1.4.1.9.9.324.1.1.1.1.7.2|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.7.6|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.8.2|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.8.6|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.9.2|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.9.6|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.10.2|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.10.6|2|2 +1.3.6.1.4.1.9.9.324.1.1.2.1.1.7.9|2|9 +1.3.6.1.4.1.9.9.324.1.1.2.1.1.16.29|2|29 +1.3.6.1.4.1.9.9.324.1.1.2.1.2.7.9|2|2 +1.3.6.1.4.1.9.9.324.1.1.2.1.2.16.29|2|1 +1.3.6.1.4.1.9.9.324.1.1.2.1.3.7.9|4|acted +1.3.6.1.4.1.9.9.324.1.1.2.1.3.16.29|4x|7468656972204a61646564 +1.3.6.1.4.1.9.9.324.1.1.2.1.4.7.9|2|20 +1.3.6.1.4.1.9.9.324.1.1.2.1.4.16.29|2|30 +1.3.6.1.4.1.9.9.324.1.1.2.1.5.7.9|66|28786 +1.3.6.1.4.1.9.9.324.1.1.2.1.5.16.29|66|14266 +1.3.6.1.4.1.9.9.324.1.1.2.1.6.7.9|2|20 +1.3.6.1.4.1.9.9.324.1.1.2.1.6.16.29|2|24 +1.3.6.1.4.1.9.9.324.1.1.2.1.7.7.9|4x|717561696e746c792064726976696e67 +1.3.6.1.4.1.9.9.324.1.1.2.1.7.16.29|4x|627574206b657074 +1.3.6.1.4.1.9.9.324.1.1.3.1.1.8.25|2|25 +1.3.6.1.4.1.9.9.324.1.1.3.1.1.16.7|2|7 +1.3.6.1.4.1.9.9.324.1.1.3.1.2.8.25|2|12 +1.3.6.1.4.1.9.9.324.1.1.3.1.2.16.7|2|29 +1.3.6.1.4.1.9.9.324.1.1.3.1.3.8.25|2|29 +1.3.6.1.4.1.9.9.324.1.1.3.1.3.16.7|2|30 +1.3.6.1.4.1.9.9.324.1.1.3.1.4.8.25|2|27 +1.3.6.1.4.1.9.9.324.1.1.3.1.4.16.7|2|15 +1.3.6.1.4.1.9.9.324.1.1.3.1.5.8.25|2|2 +1.3.6.1.4.1.9.9.324.1.1.3.1.5.16.7|2|3 +1.3.6.1.4.1.9.9.324.1.1.3.1.6.8.25|4x|616374656420666f727761726420666f72776172642062757420627574206f78656e206f78656e +1.3.6.1.4.1.9.9.324.1.1.3.1.6.16.7|4x|7468656972206163746564 +1.3.6.1.4.1.9.9.324.1.1.3.1.7.8.25|66|196 +1.3.6.1.4.1.9.9.324.1.1.3.1.7.16.7|66|1734 +1.3.6.1.4.1.9.9.324.1.1.3.1.8.8.25|2|2 +1.3.6.1.4.1.9.9.324.1.1.3.1.8.16.7|2|1 +1.3.6.1.4.1.9.9.324.1.1.3.1.9.8.25|2|1 +1.3.6.1.4.1.9.9.324.1.1.3.1.9.16.7|2|2 +1.3.6.1.4.1.9.9.324.1.1.3.1.10.8.25|2|6 +1.3.6.1.4.1.9.9.324.1.1.3.1.10.16.7|2|1 +1.3.6.1.4.1.9.9.324.1.1.4.1.1.9.20|2|20 +1.3.6.1.4.1.9.9.324.1.1.4.1.1.14.6|2|6 +1.3.6.1.4.1.9.9.324.1.1.4.1.2.9.20|2|3 +1.3.6.1.4.1.9.9.324.1.1.4.1.2.14.6|2|1 +1.3.6.1.4.1.9.9.324.1.1.4.1.3.9.20|4x|62757420746865697220717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.9.9.324.1.1.4.1.3.14.6|4x|6f78656e206163746564204a616465642064726976696e67204a61646564207a6f6d6269657320717561696e746c79206f78656e +1.3.6.1.4.1.9.9.324.1.1.4.1.4.9.20|2|1 +1.3.6.1.4.1.9.9.324.1.1.4.1.4.14.6|2|5 +1.3.6.1.4.1.9.9.324.1.1.5.1.1.3.4|2|4 +1.3.6.1.4.1.9.9.324.1.1.5.1.1.3.5|2|5 +1.3.6.1.4.1.9.9.324.1.1.5.1.2.3.4|4x|61637465642064726976696e67207a6f6d62696573206163746564 +1.3.6.1.4.1.9.9.324.1.1.5.1.2.3.5|4x|7468656972206f78656e20717561696e746c7920616374656420616374656420666f727761726420717561696e746c79207468656972206b657074 +1.3.6.1.4.1.9.9.324.1.1.5.1.3.3.4|2|3 +1.3.6.1.4.1.9.9.324.1.1.5.1.3.3.5|2|2 +1.3.6.1.4.1.9.9.324.1.1.5.1.4.3.4|4x|64726976696e67204a6164656420627574 +1.3.6.1.4.1.9.9.324.1.1.5.1.4.3.5|4x|717561696e746c79204a6164656420717561696e746c79206f78656e +1.3.6.1.4.1.9.9.324.1.1.5.1.5.3.4|2|4 +1.3.6.1.4.1.9.9.324.1.1.5.1.5.3.5|2|2 +1.3.6.1.4.1.9.9.324.1.1.6.1.1.10.32|66|32 +1.3.6.1.4.1.9.9.324.1.1.6.1.1.19.255|66|255 +1.3.6.1.4.1.9.9.324.1.1.6.1.2.10.32|66|434 +1.3.6.1.4.1.9.9.324.1.1.6.1.2.19.255|66|645 +1.3.6.1.4.1.9.9.324.1.1.6.1.3.10.32|66|324 +1.3.6.1.4.1.9.9.324.1.1.6.1.3.19.255|66|732 +1.3.6.1.4.1.9.9.324.1.1.7.1.1.3|66|32 +1.3.6.1.4.1.9.9.324.1.1.7.1.1.10|66|227 +1.3.6.1.4.1.9.9.324.1.1.7.1.2.3|66|122 +1.3.6.1.4.1.9.9.324.1.1.7.1.2.10|66|232 +1.3.6.1.4.1.9.9.324.1.1.7.1.3.3|66|97 +1.3.6.1.4.1.9.9.324.1.1.7.1.3.10|66|115 +1.3.6.1.4.1.9.9.324.1.1.7.1.4.3|66|110 +1.3.6.1.4.1.9.9.324.1.1.7.1.4.10|66|113 +1.3.6.1.4.1.9.9.324.1.1.7.1.5.3|66|4513 +1.3.6.1.4.1.9.9.324.1.1.7.1.5.10|66|4412 +1.3.6.1.4.1.9.9.324.1.1.7.1.6.3|2|2 +1.3.6.1.4.1.9.9.324.1.1.7.1.6.10|2|1 +1.3.6.1.4.1.9.9.324.1.1.7.1.7.3|66|61 +1.3.6.1.4.1.9.9.324.1.1.7.1.7.10|66|133 +1.3.6.1.4.1.9.9.324.1.1.7.1.8.3|66|102 +1.3.6.1.4.1.9.9.324.1.1.7.1.8.10|66|67 +1.3.6.1.4.1.9.9.324.1.1.7.1.9.3|66|55 +1.3.6.1.4.1.9.9.324.1.1.7.1.9.10|66|35 +1.3.6.1.4.1.9.9.324.1.1.7.1.10.3|66|53760 +1.3.6.1.4.1.9.9.324.1.1.7.1.10.10|66|62525 +1.3.6.1.4.1.9.9.324.1.1.7.1.11.3|2|2 +1.3.6.1.4.1.9.9.324.1.1.7.1.11.10|2|1 +1.3.6.1.4.1.9.9.324.1.1.7.1.12.3|4x|666f727761726420627574207468656972 +1.3.6.1.4.1.9.9.324.1.1.7.1.12.10|4x|627574207a6f6d62696573207a6f6d626965732064726976696e6720666f7277617264207468656972207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.9.9.324.1.1.7.1.13.3|4x|6f78656e20666f7277617264206163746564206f78656e207468656972206f78656e +1.3.6.1.4.1.9.9.324.1.1.7.1.13.10|4x|6f78656e20666f7277617264 +1.3.6.1.4.1.9.9.324.1.1.7.1.14.3|4x|62757420666f7277617264206163746564207468656972207a6f6d6269657320717561696e746c79206163746564206b657074206b657074 +1.3.6.1.4.1.9.9.324.1.1.7.1.14.10|4x|7a6f6d6269657320616374656420616374656420717561696e746c792062757420616374656420627574206163746564 +1.3.6.1.4.1.9.9.324.1.1.7.1.15.3|4x|666f7277617264206f78656e +1.3.6.1.4.1.9.9.324.1.1.7.1.15.10|4x|4a6164656420666f7277617264206163746564207a6f6d62696573 +1.3.6.1.4.1.9.9.324.1.1.7.1.16.3|2|3 +1.3.6.1.4.1.9.9.324.1.1.7.1.16.10|2|1 +1.3.6.1.4.1.9.9.324.1.1.7.1.17.3|2|4 +1.3.6.1.4.1.9.9.324.1.1.7.1.17.10|2|2 +1.3.6.1.4.1.9.9.324.1.1.7.1.18.3|4x|666f727761726420746865697220666f72776172642064726976696e672064726976696e67 +1.3.6.1.4.1.9.9.324.1.1.7.1.18.10|4|Jaded +1.3.6.1.4.1.9.9.324.1.2.1.1.1.18.14|2|14 +1.3.6.1.4.1.9.9.324.1.2.1.1.1.26.14|2|14 +1.3.6.1.4.1.9.9.324.1.2.1.1.2.18.14|66|968784078 +1.3.6.1.4.1.9.9.324.1.2.1.1.2.26.14|66|1598367577 +1.3.6.1.4.1.9.9.324.1.2.1.1.3.18.14|66|2893057786 +1.3.6.1.4.1.9.9.324.1.2.1.1.3.26.14|66|4031602965 +1.3.6.1.4.1.9.9.324.1.2.1.1.4.18.14|66|1154560899 +1.3.6.1.4.1.9.9.324.1.2.1.1.4.26.14|66|2087239256 +1.3.6.1.4.1.9.9.324.1.2.1.1.5.18.14|66|42982 +1.3.6.1.4.1.9.9.324.1.2.1.1.5.26.14|66|52885 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.7|66|9997 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.8|66|15228 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.9|66|4850 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.12|66|8851 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.16|66|30813 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.25|66|24389 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.26|66|36264 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.27|66|4684 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.28|66|16580 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.7|2|2 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.8|2|1 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.9|2|2 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.12|2|1 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.16|2|3 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.25|2|2 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.26|2|3 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.27|2|3 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.28|2|2 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.7|67|2938099246 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.8|67|1742326644 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.9|67|222898566 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.12|67|41659817 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.16|67|1663224446 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.25|67|3973111650 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.26|67|736091720 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.27|67|3693310177 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.28|67|1614278838 +1.3.6.1.4.1.9.9.392.1.1.1.0|2|24 +1.3.6.1.4.1.9.9.392.1.1.2.0|2|29 +1.3.6.1.4.1.9.9.392.1.1.3.0|2|5 +1.3.6.1.4.1.9.9.392.1.1.4.0|2|4 +1.3.6.1.4.1.9.9.392.1.2.1.0|66|220179290 +1.3.6.1.4.1.9.9.392.1.3.1.0|66|3080751325 +1.3.6.1.4.1.9.9.392.1.3.2.0|65|1540201027 +1.3.6.1.4.1.9.9.392.1.3.3.0|66|1805302581 +1.3.6.1.4.1.9.9.392.1.3.4.0|66|161784324 +1.3.6.1.4.1.9.9.392.1.3.5.0|70|4672136608535977512 +1.3.6.1.4.1.9.9.392.1.3.6.0|70|2893804194127754033 +1.3.6.1.4.1.9.9.392.1.3.7.0|70|6239211035010594908 +1.3.6.1.4.1.9.9.392.1.3.8.0|70|7265876306749545408 +1.3.6.1.4.1.9.9.392.1.3.9.0|70|192850609352945696 +1.3.6.1.4.1.9.9.392.1.3.10.0|70|17127455384536618658 +1.3.6.1.4.1.9.9.392.1.3.11.0|70|14460697319949409206 +1.3.6.1.4.1.9.9.392.1.3.12.0|70|6617289242687491214 +1.3.6.1.4.1.9.9.392.1.3.21.1.1.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|666f7277617264204a61646564206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.1.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6b6570742074686569722064726976696e67207468656972204a61646564207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.3.21.1.2.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|7a6f6d62696573207a6f6d62696573204a61646564204a61646564207468656972206f78656e20616374656420746865697220627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.2.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|64726976696e67204a61646564204a61646564207a6f6d62696573207a6f6d62696573206b657074206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.3.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|18 +1.3.6.1.4.1.9.9.392.1.3.21.1.3.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|11 +1.3.6.1.4.1.9.9.392.1.3.21.1.4.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|8 +1.3.6.1.4.1.9.9.392.1.3.21.1.4.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|7 +1.3.6.1.4.1.9.9.392.1.3.21.1.5.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.5.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|5 +1.3.6.1.4.1.9.9.392.1.3.21.1.6.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|65|1067898008 +1.3.6.1.4.1.9.9.392.1.3.21.1.6.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|65|2164050177 +1.3.6.1.4.1.9.9.392.1.3.21.1.7.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.7.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|2 +1.3.6.1.4.1.9.9.392.1.3.21.1.8.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|64726976696e6720717561696e746c79206b657074207468656972204a61646564204a61646564206f78656e207468656972206f78656e +1.3.6.1.4.1.9.9.392.1.3.21.1.8.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4|Jaded +1.3.6.1.4.1.9.9.392.1.3.21.1.9.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.9.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.10.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|717561696e746c79207a6f6d62696573204a61646564204a6164656420746865697220627574206b657074 +1.3.6.1.4.1.9.9.392.1.3.21.1.10.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6b657074206f78656e20717561696e746c792064726976696e6720717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.3.21.1.11.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|7 +1.3.6.1.4.1.9.9.392.1.3.21.1.11.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|2 +1.3.6.1.4.1.9.9.392.1.3.21.1.12.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|6|1.3.6.1.3.208.49 +1.3.6.1.4.1.9.9.392.1.3.21.1.12.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|6|1.3.6.1.3.0.25.27 +1.3.6.1.4.1.9.9.392.1.3.21.1.13.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|8 +1.3.6.1.4.1.9.9.392.1.3.21.1.13.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.14.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.14.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.15.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.15.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|2 +1.3.6.1.4.1.9.9.392.1.3.21.1.16.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|66|24991 +1.3.6.1.4.1.9.9.392.1.3.21.1.16.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|66|19923 +1.3.6.1.4.1.9.9.392.1.3.21.1.17.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|746865697220717561696e746c7920616374656420717561696e746c79206b65707420616374656420717561696e746c792064726976696e67206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.17.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|62757420627574206f78656e206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.18.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|717561696e746c79206163746564207468656972 +1.3.6.1.4.1.9.9.392.1.3.21.1.18.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6b6570742061637465642064726976696e67206275742064726976696e67206b65707420666f7277617264 +1.3.6.1.4.1.9.9.392.1.3.21.1.19.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|666f727761726420746865697220666f7277617264206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.19.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6f78656e20666f727761726420717561696e746c79206163746564206b657074206f78656e +1.3.6.1.4.1.9.9.392.1.3.21.1.20.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|7a6f6d62696573206163746564206f78656e +1.3.6.1.4.1.9.9.392.1.3.21.1.20.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|666f72776172642061637465642064726976696e6720627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.21.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|16 +1.3.6.1.4.1.9.9.392.1.3.21.1.21.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|4 +1.3.6.1.4.1.9.9.392.1.3.21.1.22.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|666f727761726420666f7277617264207a6f6d62696573207a6f6d62696573207a6f6d62696573204a61646564206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.22.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6b6570742064726976696e67207a6f6d626965732064726976696e67 +1.3.6.1.4.1.9.9.392.1.3.21.1.23.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|0 +1.3.6.1.4.1.9.9.392.1.3.21.1.23.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|2 +1.3.6.1.4.1.9.9.392.1.3.21.1.24.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|4a6164656420717561696e746c79 +1.3.6.1.4.1.9.9.392.1.3.21.1.24.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|4a61646564207468656972206f78656e20616374656420616374656420666f727761726420746865697220666f7277617264 +1.3.6.1.4.1.9.9.392.1.3.21.1.25.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.25.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|16 +1.3.6.1.4.1.9.9.392.1.3.21.1.26.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|666f7277617264206b657074206f78656e206f78656e206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.26.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|616374656420717561696e746c7920627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.27.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|16 +1.3.6.1.4.1.9.9.392.1.3.21.1.27.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|4 +1.3.6.1.4.1.9.9.392.1.3.21.1.28.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|64726976696e67207468656972207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.3.21.1.28.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|62757420627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.29.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|0 +1.3.6.1.4.1.9.9.392.1.3.21.1.29.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.30.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|717561696e746c79206b657074 +1.3.6.1.4.1.9.9.392.1.3.21.1.30.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|746865697220717561696e746c7920717561696e746c7920616374656420717561696e746c7920717561696e746c79206163746564207a6f6d6269657320627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.31.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|4442691408326093793 +1.3.6.1.4.1.9.9.392.1.3.21.1.31.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|1873321696187597909 +1.3.6.1.4.1.9.9.392.1.3.21.1.32.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|6469637372671445412 +1.3.6.1.4.1.9.9.392.1.3.21.1.32.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|6712781232926100858 +1.3.6.1.4.1.9.9.392.1.3.21.1.33.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|13490210027652370573 +1.3.6.1.4.1.9.9.392.1.3.21.1.33.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|15555989303984511978 +1.3.6.1.4.1.9.9.392.1.3.21.1.34.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|12279646205639820727 +1.3.6.1.4.1.9.9.392.1.3.21.1.34.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|11056409441366507351 +1.3.6.1.4.1.9.9.392.1.3.21.1.35.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|13180762840652524543 +1.3.6.1.4.1.9.9.392.1.3.21.1.35.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|13958065058835407351 +1.3.6.1.4.1.9.9.392.1.3.21.1.36.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|3745449795705425282 +1.3.6.1.4.1.9.9.392.1.3.21.1.36.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|15681610043458202824 +1.3.6.1.4.1.9.9.392.1.3.21.1.37.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.37.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|1 +1.3.6.1.4.1.9.9.392.1.3.22.1.1.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|4x|616374656420666f7277617264207a6f6d62696573207a6f6d62696573207468656972 +1.3.6.1.4.1.9.9.392.1.3.22.1.1.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|4x|7468656972207468656972206b6570742062757420616374656420627574206275742064726976696e67207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.3.22.1.2.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|2|2 +1.3.6.1.4.1.9.9.392.1.3.22.1.2.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|2|21 +1.3.6.1.4.1.9.9.392.1.3.22.1.3.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|338143677832082857 +1.3.6.1.4.1.9.9.392.1.3.22.1.3.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|2540809463851896468 +1.3.6.1.4.1.9.9.392.1.3.22.1.4.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|9211169575499894801 +1.3.6.1.4.1.9.9.392.1.3.22.1.4.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|5889125074864305265 +1.3.6.1.4.1.9.9.392.1.3.22.1.5.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|15329032065323570335 +1.3.6.1.4.1.9.9.392.1.3.22.1.5.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|11848822181082996062 +1.3.6.1.4.1.9.9.392.1.3.22.1.6.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|9393682061551994449 +1.3.6.1.4.1.9.9.392.1.3.22.1.6.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|14553503058612069516 +1.3.6.1.4.1.9.9.392.1.3.22.1.7.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|5657946358853111387 +1.3.6.1.4.1.9.9.392.1.3.22.1.7.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|132504407579425476 +1.3.6.1.4.1.9.9.392.1.3.22.1.8.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|14359838585433121302 +1.3.6.1.4.1.9.9.392.1.3.22.1.8.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|16427745788021119202 +1.3.6.1.4.1.9.9.392.1.3.23.0|66|3912948724 +1.3.6.1.4.1.9.9.392.1.3.24.0|65|3793567672 +1.3.6.1.4.1.9.9.392.1.3.25.0|66|24567 +1.3.6.1.4.1.9.9.392.1.3.26.0|66|4157346489 +1.3.6.1.4.1.9.9.392.1.3.27.0|65|566439668 +1.3.6.1.4.1.9.9.392.1.3.28.0|66|2035 +1.3.6.1.4.1.9.9.392.1.3.29.0|66|899294235 +1.3.6.1.4.1.9.9.392.1.3.30.0|65|2870170921 +1.3.6.1.4.1.9.9.392.1.3.31.0|66|47972 +1.3.6.1.4.1.9.9.392.1.3.32.0|66|1402819470 +1.3.6.1.4.1.9.9.392.1.3.33.0|65|552584163 +1.3.6.1.4.1.9.9.392.1.3.34.0|66|54192 +1.3.6.1.4.1.9.9.392.1.3.35.0|66|4109252783 +1.3.6.1.4.1.9.9.392.1.3.36.0|65|3375288981 +1.3.6.1.4.1.9.9.392.1.3.37.0|66|60584 +1.3.6.1.4.1.9.9.392.1.3.38.0|66|2342846144 +1.3.6.1.4.1.9.9.392.1.3.39.0|65|2612706951 +1.3.6.1.4.1.9.9.392.1.3.40.0|66|27723 +1.3.6.1.4.1.9.9.392.1.4.1.1.0|70|18308256571427912229 +1.3.6.1.4.1.9.9.392.1.4.1.2.0|66|12797 +1.3.6.1.4.1.9.9.392.1.4.1.3.0|70|18072880834846251558 +1.3.6.1.4.1.9.9.392.1.4.1.4.0|70|8998085897560354675 +1.3.6.1.4.1.9.9.392.1.4.2.1.0|66|19062 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.1.26|66|26 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.1.6794|66|6794 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.2.26|4x|717561696e746c7920666f7277617264206b657074207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.2.6794|4x|7a6f6d62696573206f78656e204a61646564204a616465642074686569722062757420666f7277617264206b657074204a61646564 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.3.26|4x|62757420666f7277617264204a61646564206275742064726976696e672064726976696e67 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.3.6794|4|Jaded +1.3.6.1.4.1.9.9.392.1.4.3.1.1.4.26|2|2 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.4.6794|2|1 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.5.26|2|3 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.5.6794|2|5 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.6.26|67|2717938161 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.6.6794|67|1576292881 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.7.26|2|20 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.7.6794|2|7 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.8.26|2|0 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.8.6794|2|1 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.9.26|4x|6b6570742064726976696e672064726976696e67207a6f6d62696573206b657074206b657074204a61646564 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.9.6794|4x|7a6f6d62696573207a6f6d6269657320627574207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.10.26|2|0 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.10.6794|2|0 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.11.26|4x|64726976696e67206163746564 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.11.6794|4x|64726976696e67206b65707420746865697220746865697220666f7277617264 +1.3.6.1.4.1.9.9.392.1.4.3.2.0|66|19587 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.1.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|4x|7a6f6d62696573207a6f6d62696573207a6f6d626965732064726976696e67 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.1.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|4x|62757420717561696e746c7920746865697220666f727761726420717561696e746c7920666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.2.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|7705169462584045514 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.2.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|4782105877718188020 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.3.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|1208657904808146249 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.3.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|6135263682934130631 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.4.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|3212491034507665689 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.4.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|4669944071782599429 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.5.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|15487989910931679686 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.5.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|16491208374579900638 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.6.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|14990721728316737493 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.6.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|17568880258347646976 +1.3.6.1.4.1.9.9.392.1.5.1.1.0|70|16763036102461238324 +1.3.6.1.4.1.9.9.392.1.6.1.0|2|30 +1.3.6.1.4.1.9.9.392.1.6.2.0|66|10901 +1.3.6.1.4.1.9.9.392.1.6.3.0|2|3 +1.3.6.1.4.1.9.9.392.1.7.1.0|2|1 +1.3.6.1.4.1.9.9.392.1.7.2.0|2|1 +1.3.6.1.4.1.9.9.392.1.7.3.0|2|1 +1.3.6.1.4.1.9.9.500.1.2.1.1.1.21|66|23989 +1.3.6.1.4.1.9.9.500.1.2.1.1.2.21|66|64612 +1.3.6.1.4.1.9.9.500.1.2.1.1.3.21|2|4 +1.3.6.1.4.1.9.9.500.1.2.1.1.4.21|66|33053 +1.3.6.1.4.1.9.9.500.1.2.1.1.5.21|66|55695 +1.3.6.1.4.1.9.9.500.1.2.1.1.6.21|2|8 +1.3.6.1.4.1.9.9.500.1.2.1.1.7.21|4x|ffffffffffff +1.3.6.1.4.1.9.9.500.1.2.2.1.1.7|2|3 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.213.175.39.60.38.62.82.247.189 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.166.109.172.24.90.149 +1.3.6.1.6.3.1.1.6.1.0|2|3 +1.3.6.1.6.3.10.2.1.1.0|4x|6f78656e20717561696e746c79 +1.3.6.1.6.3.10.2.1.1.0|4x|64726976696e67206f78656e204a6164656420717561696e746c79 +1.3.6.1.6.3.10.2.1.2.0|2|12 +1.3.6.1.6.3.10.2.1.2.0|2|24 +1.3.6.1.6.3.10.2.1.3.0|2|4 +1.3.6.1.6.3.10.2.1.3.0|2|28 +1.3.6.1.6.3.10.2.1.4.0|2|567 +1.3.6.1.6.3.10.2.1.4.0|2|763 diff --git a/test/new-e2e/ndm/snmp/compose/data/cisco-catalyst.snmprec b/test/new-e2e/ndm/snmp/compose/data/cisco-catalyst.snmprec new file mode 100644 index 00000000000000..884066b6c71030 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/cisco-catalyst.snmprec @@ -0,0 +1,136 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.9.1.241 +1.3.6.1.2.1.1.3.0|67|1727368662 +1.3.6.1.2.1.1.5.0|4|catalyst-6000.example +1.3.6.1.2.1.31.1.1.1.1.2|4|Nu0 +1.3.6.1.2.1.31.1.1.1.1.8|4x|4769312f302f36 +1.3.6.1.2.1.31.1.1.1.1.12|4x|4769312f302f3130 +1.3.6.1.2.1.31.1.1.1.1.13|4x|4769312f302f3132 +1.3.6.1.2.1.31.1.1.1.1.20|4x|4769312f302f3138 +1.3.6.1.2.1.31.1.1.1.1.24|4x|4769312f302f3232 +1.3.6.1.2.1.31.1.1.1.1.27|4x|4769312f302f3235 +1.3.6.1.2.1.31.1.1.1.1.29|4x|4769312f302f3237 +1.3.6.1.4.1.9.5.1.2.19.0|4|SCA044001J9 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.5|2|10 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.9|2|10 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.5|2|13 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.9|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.5|2|5 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.9|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.5|2|23 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.9|2|3 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.5|2|3 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.9|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.5|67|1049691128 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.9|67|1263170302 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.5|2|14 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.9|2|9 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.5|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.9|2|13 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.1001|2|0 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.1010|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.2001|2|0 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.2010|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.1001|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.1010|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.2001|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.2010|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.1001|2|0 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.1010|2|0 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.2001|2|0 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.2010|2|0 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.2|66|3212285088 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.8|66|2549745875 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.12|66|1593634447 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.13|66|808029871 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.20|66|2834780680 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.24|66|143097770 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.27|66|1054270666 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.29|66|2115594198 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.2|66|3654206285 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.8|66|3471768262 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.12|66|4114631259 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.13|66|2572660324 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.20|66|881502462 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.24|66|3928182588 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.27|66|864463746 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.29|66|2794940018 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.2|66|2070214205 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.8|66|3056100498 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.12|66|2504461818 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.13|66|3933035197 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.20|66|452554532 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.24|66|1461380713 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.27|66|175693990 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.29|66|3240655547 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.2|65|228010741 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.8|65|206579581 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.12|65|3921291878 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.13|65|1783596833 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.20|65|1665500425 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.24|65|1143836242 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.27|65|1922821796 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.29|65|2001716681 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.2|65|1142461627 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.8|65|3059551836 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.12|65|2180426153 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.13|65|4168917597 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.20|65|2348485051 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.24|65|3885252847 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.27|65|430313909 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.29|65|1040929562 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.2|65|820404054 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.8|65|2842996488 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.12|65|516627181 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.13|65|3834958484 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.20|65|4008809623 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.24|65|1591458481 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.27|65|987592255 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.29|65|4091757079 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.2|65|2654913472 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.8|65|3445531903 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.12|65|2714831435 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.13|65|1451987827 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.20|65|2047943866 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.24|65|2557121706 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.27|65|3780408747 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.29|65|2637888044 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.2|65|1180282382 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.8|65|2061646443 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.12|65|3785685086 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.13|65|25718795 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.20|65|3804634205 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.24|65|3264052307 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.27|65|172763145 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.29|65|427550293 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.2|65|729797820 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.8|65|1936660647 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.12|65|3798824095 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.13|65|2468750642 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.20|65|3659844688 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.24|65|1351841532 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.27|65|1979532859 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.29|65|1661918307 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.2|65|4142247954 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.8|65|3001638507 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.12|65|3472759966 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.13|65|2231231366 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.20|65|1172731832 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.24|65|799128435 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.27|65|2659811954 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.29|65|3387896804 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.2|65|4250585048 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.8|65|3784229221 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.12|65|3972327928 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.13|65|3829663665 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.20|65|3862025380 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.24|65|3173505921 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.27|65|4149481903 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.29|65|2691284812 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.2|67|3232838669 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.8|67|3707696379 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.12|67|2247655666 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.13|67|1190980479 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.20|67|1427024890 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.24|67|2179332826 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.27|67|1567995511 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.29|67|1679558187 diff --git a/test/new-e2e/ndm/snmp/compose/data/cisco-csr1000v.snmprec b/test/new-e2e/ndm/snmp/compose/data/cisco-csr1000v.snmprec new file mode 100644 index 00000000000000..72ab8517133a7f --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/cisco-csr1000v.snmprec @@ -0,0 +1,24 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.9.1.1537 +1.3.6.1.2.1.15.3.1.1.244.12.239.177|64x|47365042 +1.3.6.1.2.1.15.3.1.2.244.12.239.177|2|6 +1.3.6.1.2.1.15.3.1.3.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.4.244.12.239.177|2|21 +1.3.6.1.2.1.15.3.1.5.244.12.239.177|64x|56a51b1e +1.3.6.1.2.1.15.3.1.6.244.12.239.177|2|31 +1.3.6.1.2.1.15.3.1.7.244.12.239.177|64x|f40cefb1 +1.3.6.1.2.1.15.3.1.8.244.12.239.177|2|7 +1.3.6.1.2.1.15.3.1.9.244.12.239.177|2|26 +1.3.6.1.2.1.15.3.1.10.244.12.239.177|65|2016631572 +1.3.6.1.2.1.15.3.1.11.244.12.239.177|65|2128197531 +1.3.6.1.2.1.15.3.1.12.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.13.244.12.239.177|65|3947895592 +1.3.6.1.2.1.15.3.1.15.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.16.244.12.239.177|66|3947895592 +1.3.6.1.2.1.15.3.1.17.244.12.239.177|2|378 +1.3.6.1.2.1.15.3.1.18.244.12.239.177|2|124 +1.3.6.1.2.1.15.3.1.19.244.12.239.177|2|25342 +1.3.6.1.2.1.15.3.1.20.244.12.239.177|2|9203 +1.3.6.1.2.1.15.3.1.21.244.12.239.177|2|235634 +1.3.6.1.2.1.15.3.1.22.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.23.244.12.239.177|2|4 +1.3.6.1.2.1.15.3.1.24.244.12.239.177|66|3947895592 diff --git a/test/new-e2e/ndm/snmp/compose/data/cisco-nexus.snmprec b/test/new-e2e/ndm/snmp/compose/data/cisco-nexus.snmprec new file mode 100644 index 00000000000000..e54bcb11307685 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/cisco-nexus.snmprec @@ -0,0 +1,3275 @@ +1.3.6.1.2.1.1.1.0|4x|6f78656e20616374656420627574206163746564206b657074 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.9.12.3.1.3.1.2 +1.3.6.1.2.1.1.3.0|67|1727368662 +1.3.6.1.2.1.1.4.0|4|acted +1.3.6.1.2.1.1.5.0|4x|4e657875732d6575312e636f6d70616e796e616d652e6d616e61676564 +1.3.6.1.2.1.1.6.0|4x|627574206b657074204a6164656420746865697220627574206b65707420717561696e746c792064726976696e67207468656972 +1.3.6.1.2.1.1.7.0|2|9 +1.3.6.1.2.1.1.8.0|67|3680163691 +1.3.6.1.2.1.1.9.1.1.1|2|1 +1.3.6.1.2.1.1.9.1.1.3|2|3 +1.3.6.1.2.1.1.9.1.1.9|2|9 +1.3.6.1.2.1.1.9.1.1.11|2|11 +1.3.6.1.2.1.1.9.1.1.15|2|15 +1.3.6.1.2.1.1.9.1.1.16|2|16 +1.3.6.1.2.1.1.9.1.1.18|2|18 +1.3.6.1.2.1.1.9.1.1.20|2|20 +1.3.6.1.2.1.1.9.1.1.21|2|21 +1.3.6.1.2.1.1.9.1.1.24|2|24 +1.3.6.1.2.1.1.9.1.2.1|6|1.3.6.1.3.164.198.69.240.83.26.70 +1.3.6.1.2.1.1.9.1.2.3|6|1.3.6.1.3 +1.3.6.1.2.1.1.9.1.2.9|6|1.3.6.1.3.129.98.33.156 +1.3.6.1.2.1.1.9.1.2.11|6|1.3.6.1.3.45.170.49.172 +1.3.6.1.2.1.1.9.1.2.15|6|1.3.6.1.3.218.227.133.165.158.83 +1.3.6.1.2.1.1.9.1.2.16|6|1.3.6.1.3.38.4.57.45.113.219.22 +1.3.6.1.2.1.1.9.1.2.18|6|1.3.6.1.3.212.88.17.14.129 +1.3.6.1.2.1.1.9.1.2.20|6|1.3.6.1.3.221 +1.3.6.1.2.1.1.9.1.2.21|6|1.3.6.1.3.144.52 +1.3.6.1.2.1.1.9.1.2.24|6|1.3.6.1.3.159.1 +1.3.6.1.2.1.1.9.1.3.1|4x|6f78656e204a6164656420616374656420666f72776172642064726976696e6720717561696e746c7920717561696e746c79 +1.3.6.1.2.1.1.9.1.3.3|4x|627574204a6164656420666f72776172642064726976696e6720616374656420616374656420717561696e746c79206f78656e +1.3.6.1.2.1.1.9.1.3.9|4x|4a61646564207468656972207a6f6d6269657320627574206b657074207a6f6d62696573207468656972 +1.3.6.1.2.1.1.9.1.3.11|4x|64726976696e67206b657074206163746564204a616465642064726976696e6720717561696e746c792074686569722064726976696e67 +1.3.6.1.2.1.1.9.1.3.15|4|but +1.3.6.1.2.1.1.9.1.3.16|4x|7a6f6d626965732074686569722064726976696e672062757420666f7277617264204a61646564206b6570742064726976696e67204a61646564 +1.3.6.1.2.1.1.9.1.3.18|4|their +1.3.6.1.2.1.1.9.1.3.20|4x|62757420627574204a6164656420666f7277617264206163746564204a61646564207a6f6d6269657320627574204a61646564 +1.3.6.1.2.1.1.9.1.3.21|4x|4a61646564204a61646564206f78656e206163746564 +1.3.6.1.2.1.1.9.1.3.24|4|driving +1.3.6.1.2.1.1.9.1.4.1|67|1695851488 +1.3.6.1.2.1.1.9.1.4.3|67|3741814296 +1.3.6.1.2.1.1.9.1.4.9|67|780686098 +1.3.6.1.2.1.1.9.1.4.11|67|4058878359 +1.3.6.1.2.1.1.9.1.4.15|67|2547376430 +1.3.6.1.2.1.1.9.1.4.16|67|2644545445 +1.3.6.1.2.1.1.9.1.4.18|67|2083688378 +1.3.6.1.2.1.1.9.1.4.20|67|663477043 +1.3.6.1.2.1.1.9.1.4.21|67|3245404876 +1.3.6.1.2.1.1.9.1.4.24|67|278147560 +1.3.6.1.2.1.2.1.0|2|0 +1.3.6.1.2.1.2.2.1.1.1|2|1 +1.3.6.1.2.1.2.2.1.1.5|2|5 +1.3.6.1.2.1.2.2.1.1.6|2|6 +1.3.6.1.2.1.2.2.1.1.7|2|7 +1.3.6.1.2.1.2.2.1.1.14|2|14 +1.3.6.1.2.1.2.2.1.1.19|2|19 +1.3.6.1.2.1.2.2.1.1.23|2|23 +1.3.6.1.2.1.2.2.1.1.28|2|28 +1.3.6.1.2.1.2.2.1.1.30|2|30 +1.3.6.1.2.1.2.2.1.1.31|2|31 +1.3.6.1.2.1.2.2.1.2.2|4x|4769676162697445746865726e6574312f302f31 +1.3.6.1.2.1.2.2.1.2.13|4x|4769676162697445746865726e6574312f302f32 +1.3.6.1.2.1.2.2.1.2.20|4x|4769676162697445746865726e6574312f302f33 +1.3.6.1.2.1.2.2.1.2.22|4x|4769676162697445746865726e6574312f302f34 +1.3.6.1.2.1.2.2.1.2.23|4x|4769676162697445746865726e6574312f302f35 +1.3.6.1.2.1.2.2.1.2.25|4x|4769676162697445746865726e6574312f302f36 +1.3.6.1.2.1.2.2.1.2.29|4x|4769676162697445746865726e6574312f302f37 +1.3.6.1.2.1.2.2.1.2.30|4x|4769676162697445746865726e6574312f302f38 +1.3.6.1.2.1.2.2.1.3.1|2|9 +1.3.6.1.2.1.2.2.1.3.5|2|1 +1.3.6.1.2.1.2.2.1.3.6|2|2 +1.3.6.1.2.1.2.2.1.3.7|2|23 +1.3.6.1.2.1.2.2.1.3.14|2|3 +1.3.6.1.2.1.2.2.1.3.19|2|30 +1.3.6.1.2.1.2.2.1.3.23|2|8 +1.3.6.1.2.1.2.2.1.3.28|2|15 +1.3.6.1.2.1.2.2.1.3.30|2|13 +1.3.6.1.2.1.2.2.1.3.31|2|28 +1.3.6.1.2.1.2.2.1.4.1|2|25 +1.3.6.1.2.1.2.2.1.4.5|2|7 +1.3.6.1.2.1.2.2.1.4.6|2|10 +1.3.6.1.2.1.2.2.1.4.7|2|17 +1.3.6.1.2.1.2.2.1.4.14|2|23 +1.3.6.1.2.1.2.2.1.4.19|2|27 +1.3.6.1.2.1.2.2.1.4.23|2|17 +1.3.6.1.2.1.2.2.1.4.28|2|21 +1.3.6.1.2.1.2.2.1.4.30|2|21 +1.3.6.1.2.1.2.2.1.4.31|2|25 +1.3.6.1.2.1.2.2.1.5.2|66|22 +1.3.6.1.2.1.2.2.1.5.13|66|31 +1.3.6.1.2.1.2.2.1.5.20|66|92 +1.3.6.1.2.1.2.2.1.5.22|66|34 +1.3.6.1.2.1.2.2.1.5.23|66|78 +1.3.6.1.2.1.2.2.1.5.25|66|28 +1.3.6.1.2.1.2.2.1.5.29|66|85 +1.3.6.1.2.1.2.2.1.5.30|66|41 +1.3.6.1.2.1.2.2.1.6.1|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.5|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.6|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.7|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.14|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.19|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.23|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.28|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.30|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.31|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.7.2|2|1 +1.3.6.1.2.1.2.2.1.7.13|2|2 +1.3.6.1.2.1.2.2.1.7.20|2|2 +1.3.6.1.2.1.2.2.1.7.22|2|1 +1.3.6.1.2.1.2.2.1.7.23|2|1 +1.3.6.1.2.1.2.2.1.7.25|2|1 +1.3.6.1.2.1.2.2.1.7.29|2|3 +1.3.6.1.2.1.2.2.1.7.30|2|2 +1.3.6.1.2.1.2.2.1.8.2|2|3 +1.3.6.1.2.1.2.2.1.8.13|2|2 +1.3.6.1.2.1.2.2.1.8.20|2|3 +1.3.6.1.2.1.2.2.1.8.22|2|5 +1.3.6.1.2.1.2.2.1.8.23|2|6 +1.3.6.1.2.1.2.2.1.8.25|2|1 +1.3.6.1.2.1.2.2.1.8.29|2|1 +1.3.6.1.2.1.2.2.1.8.30|2|6 +1.3.6.1.2.1.2.2.1.9.1|67|46974653 +1.3.6.1.2.1.2.2.1.9.5|67|3524906906 +1.3.6.1.2.1.2.2.1.9.6|67|1854085230 +1.3.6.1.2.1.2.2.1.9.7|67|2589243966 +1.3.6.1.2.1.2.2.1.9.14|67|1415836515 +1.3.6.1.2.1.2.2.1.9.19|67|3494681791 +1.3.6.1.2.1.2.2.1.9.23|67|73477284 +1.3.6.1.2.1.2.2.1.9.28|67|1193030203 +1.3.6.1.2.1.2.2.1.9.30|67|2010077956 +1.3.6.1.2.1.2.2.1.9.31|67|1672264105 +1.3.6.1.2.1.2.2.1.10.1|65|1882003004 +1.3.6.1.2.1.2.2.1.10.5|65|3385985368 +1.3.6.1.2.1.2.2.1.10.6|65|1115476981 +1.3.6.1.2.1.2.2.1.10.7|65|1168361537 +1.3.6.1.2.1.2.2.1.10.14|65|190722488 +1.3.6.1.2.1.2.2.1.10.19|65|3080937116 +1.3.6.1.2.1.2.2.1.10.23|65|2718244281 +1.3.6.1.2.1.2.2.1.10.28|65|1148208774 +1.3.6.1.2.1.2.2.1.10.30|65|618533489 +1.3.6.1.2.1.2.2.1.10.31|65|2503484251 +1.3.6.1.2.1.2.2.1.11.1|65|3496478306 +1.3.6.1.2.1.2.2.1.11.5|65|3410705023 +1.3.6.1.2.1.2.2.1.11.6|65|1796554451 +1.3.6.1.2.1.2.2.1.11.7|65|159541309 +1.3.6.1.2.1.2.2.1.11.14|65|1411862423 +1.3.6.1.2.1.2.2.1.11.19|65|4038679469 +1.3.6.1.2.1.2.2.1.11.23|65|3764171114 +1.3.6.1.2.1.2.2.1.11.28|65|4134622941 +1.3.6.1.2.1.2.2.1.11.30|65|3073594124 +1.3.6.1.2.1.2.2.1.11.31|65|1098762737 +1.3.6.1.2.1.2.2.1.12.1|65|3333721855 +1.3.6.1.2.1.2.2.1.12.5|65|4260137392 +1.3.6.1.2.1.2.2.1.12.6|65|4223847667 +1.3.6.1.2.1.2.2.1.12.7|65|1649342798 +1.3.6.1.2.1.2.2.1.12.14|65|1747369486 +1.3.6.1.2.1.2.2.1.12.19|65|1451002237 +1.3.6.1.2.1.2.2.1.12.23|65|1750393128 +1.3.6.1.2.1.2.2.1.12.28|65|2086509258 +1.3.6.1.2.1.2.2.1.12.30|65|196517694 +1.3.6.1.2.1.2.2.1.12.31|65|2969815192 +1.3.6.1.2.1.2.2.1.13.2|65|2241689204 +1.3.6.1.2.1.2.2.1.13.13|65|4175033535 +1.3.6.1.2.1.2.2.1.13.20|65|1078726538 +1.3.6.1.2.1.2.2.1.13.22|65|1338010120 +1.3.6.1.2.1.2.2.1.13.23|65|3184652116 +1.3.6.1.2.1.2.2.1.13.25|65|537113987 +1.3.6.1.2.1.2.2.1.13.29|65|1725293067 +1.3.6.1.2.1.2.2.1.13.30|65|3185732570 +1.3.6.1.2.1.2.2.1.14.2|65|2672375192 +1.3.6.1.2.1.2.2.1.14.13|65|663057221 +1.3.6.1.2.1.2.2.1.14.20|65|3514419006 +1.3.6.1.2.1.2.2.1.14.22|65|4122938877 +1.3.6.1.2.1.2.2.1.14.23|65|2634101757 +1.3.6.1.2.1.2.2.1.14.25|65|3854692160 +1.3.6.1.2.1.2.2.1.14.29|65|1620889538 +1.3.6.1.2.1.2.2.1.14.30|65|165871928 +1.3.6.1.2.1.2.2.1.15.1|65|4195285301 +1.3.6.1.2.1.2.2.1.15.5|65|1431612784 +1.3.6.1.2.1.2.2.1.15.6|65|543505378 +1.3.6.1.2.1.2.2.1.15.7|65|1976142234 +1.3.6.1.2.1.2.2.1.15.14|65|3674813791 +1.3.6.1.2.1.2.2.1.15.19|65|3004007008 +1.3.6.1.2.1.2.2.1.15.23|65|3326039872 +1.3.6.1.2.1.2.2.1.15.28|65|725344437 +1.3.6.1.2.1.2.2.1.15.30|65|1593318352 +1.3.6.1.2.1.2.2.1.15.31|65|2012521445 +1.3.6.1.2.1.2.2.1.16.1|65|2185729508 +1.3.6.1.2.1.2.2.1.16.5|65|1981888745 +1.3.6.1.2.1.2.2.1.16.6|65|1069282708 +1.3.6.1.2.1.2.2.1.16.7|65|1089537527 +1.3.6.1.2.1.2.2.1.16.14|65|1592695357 +1.3.6.1.2.1.2.2.1.16.19|65|1048940037 +1.3.6.1.2.1.2.2.1.16.23|65|1467394219 +1.3.6.1.2.1.2.2.1.16.28|65|691822583 +1.3.6.1.2.1.2.2.1.16.30|65|1511086565 +1.3.6.1.2.1.2.2.1.16.31|65|1796032263 +1.3.6.1.2.1.2.2.1.17.1|65|3702458710 +1.3.6.1.2.1.2.2.1.17.5|65|1144326488 +1.3.6.1.2.1.2.2.1.17.6|65|755364319 +1.3.6.1.2.1.2.2.1.17.7|65|2989385220 +1.3.6.1.2.1.2.2.1.17.14|65|3953952011 +1.3.6.1.2.1.2.2.1.17.19|65|3083592819 +1.3.6.1.2.1.2.2.1.17.23|65|322682189 +1.3.6.1.2.1.2.2.1.17.28|65|751481754 +1.3.6.1.2.1.2.2.1.17.30|65|1572646496 +1.3.6.1.2.1.2.2.1.17.31|65|1001871605 +1.3.6.1.2.1.2.2.1.18.1|65|3805912207 +1.3.6.1.2.1.2.2.1.18.5|65|3052655381 +1.3.6.1.2.1.2.2.1.18.6|65|1060694077 +1.3.6.1.2.1.2.2.1.18.7|65|1178885167 +1.3.6.1.2.1.2.2.1.18.14|65|146095067 +1.3.6.1.2.1.2.2.1.18.19|65|3416577638 +1.3.6.1.2.1.2.2.1.18.23|65|154936189 +1.3.6.1.2.1.2.2.1.18.28|65|1338060249 +1.3.6.1.2.1.2.2.1.18.30|65|3812251620 +1.3.6.1.2.1.2.2.1.18.31|65|1846042920 +1.3.6.1.2.1.2.2.1.19.2|65|642166389 +1.3.6.1.2.1.2.2.1.19.13|65|3466819068 +1.3.6.1.2.1.2.2.1.19.20|65|646965121 +1.3.6.1.2.1.2.2.1.19.22|65|2275903126 +1.3.6.1.2.1.2.2.1.19.23|65|3412605861 +1.3.6.1.2.1.2.2.1.19.25|65|2646666505 +1.3.6.1.2.1.2.2.1.19.29|65|1387261523 +1.3.6.1.2.1.2.2.1.19.30|65|2609115879 +1.3.6.1.2.1.2.2.1.20.2|65|4148611609 +1.3.6.1.2.1.2.2.1.20.13|65|3724140174 +1.3.6.1.2.1.2.2.1.20.20|65|3028781023 +1.3.6.1.2.1.2.2.1.20.22|65|2087642655 +1.3.6.1.2.1.2.2.1.20.23|65|3915779502 +1.3.6.1.2.1.2.2.1.20.25|65|3902137000 +1.3.6.1.2.1.2.2.1.20.29|65|3262403811 +1.3.6.1.2.1.2.2.1.20.30|65|4238703132 +1.3.6.1.2.1.2.2.1.21.1|66|82 +1.3.6.1.2.1.2.2.1.21.5|66|57 +1.3.6.1.2.1.2.2.1.21.6|66|93 +1.3.6.1.2.1.2.2.1.21.7|66|63 +1.3.6.1.2.1.2.2.1.21.14|66|24 +1.3.6.1.2.1.2.2.1.21.19|66|26 +1.3.6.1.2.1.2.2.1.21.23|66|80 +1.3.6.1.2.1.2.2.1.21.28|66|80 +1.3.6.1.2.1.2.2.1.21.30|66|19 +1.3.6.1.2.1.2.2.1.21.31|66|50 +1.3.6.1.2.1.2.2.1.22.1|6|1.3.6.1.3.45.147.101.228.214 +1.3.6.1.2.1.2.2.1.22.5|6|1.3.6.1.3.45 +1.3.6.1.2.1.2.2.1.22.6|6|1.3.6.1.3.48 +1.3.6.1.2.1.2.2.1.22.7|6|1.3.6.1.3 +1.3.6.1.2.1.2.2.1.22.14|6|1.3.6.1.3.156.196.167.160.176.17.112.48.166 +1.3.6.1.2.1.2.2.1.22.19|6|1.3.6.1.3.133.100.137.5 +1.3.6.1.2.1.2.2.1.22.23|6|1.3.6.1.3.196.82 +1.3.6.1.2.1.2.2.1.22.28|6|1.3.6.1.3.77.239.236 +1.3.6.1.2.1.2.2.1.22.30|6|1.3.6.1.3.47.232.249.83 +1.3.6.1.2.1.2.2.1.22.31|6|1.3.6.1.3.68.173.9.55.66.221.65.82 +1.3.6.1.2.1.6.1.0|2|4 +1.3.6.1.2.1.6.2.0|2|19 +1.3.6.1.2.1.6.3.0|2|13 +1.3.6.1.2.1.6.4.0|2|14 +1.3.6.1.2.1.6.5.0|65|3495703086 +1.3.6.1.2.1.6.6.0|65|372085797 +1.3.6.1.2.1.6.7.0|65|341719439 +1.3.6.1.2.1.6.8.0|65|3777519670 +1.3.6.1.2.1.6.9.0|66|72 +1.3.6.1.2.1.6.10.0|65|3212468096 +1.3.6.1.2.1.6.11.0|65|1506985444 +1.3.6.1.2.1.6.12.0|65|1004422298 +1.3.6.1.2.1.6.13.1.1.19.192.194.138.30.197.116.181.203.19|2|5 +1.3.6.1.2.1.6.13.1.1.49.212.70.37.27.99.156.38.80.20|2|6 +1.3.6.1.2.1.6.13.1.1.63.202.33.95.3.150.24.202.206.14|2|1 +1.3.6.1.2.1.6.13.1.1.75.220.11.81.3.75.157.192.44.26|2|11 +1.3.6.1.2.1.6.13.1.1.78.176.81.126.21.98.39.62.222.12|2|11 +1.3.6.1.2.1.6.13.1.1.162.10.255.161.23.83.77.198.1.22|2|10 +1.3.6.1.2.1.6.13.1.1.194.43.197.151.15.102.149.131.169.1|2|9 +1.3.6.1.2.1.6.13.1.1.201.4.229.174.6.121.8.120.60.9|2|1 +1.3.6.1.2.1.6.13.1.1.232.232.12.248.30.180.112.159.204.23|2|6 +1.3.6.1.2.1.6.13.1.1.241.83.234.94.1.27.228.22.177.14|2|11 +1.3.6.1.2.1.6.13.1.2.19.192.194.138.30.197.116.181.203.19|64x|13c0c28a +1.3.6.1.2.1.6.13.1.2.49.212.70.37.27.99.156.38.80.20|64x|31d44625 +1.3.6.1.2.1.6.13.1.2.63.202.33.95.3.150.24.202.206.14|64x|3fca215f +1.3.6.1.2.1.6.13.1.2.75.220.11.81.3.75.157.192.44.26|64x|4bdc0b51 +1.3.6.1.2.1.6.13.1.2.78.176.81.126.21.98.39.62.222.12|64x|4eb0517e +1.3.6.1.2.1.6.13.1.2.162.10.255.161.23.83.77.198.1.22|64x|a20affa1 +1.3.6.1.2.1.6.13.1.2.194.43.197.151.15.102.149.131.169.1|64x|c22bc597 +1.3.6.1.2.1.6.13.1.2.201.4.229.174.6.121.8.120.60.9|64x|c904e5ae +1.3.6.1.2.1.6.13.1.2.232.232.12.248.30.180.112.159.204.23|64x|e8e80cf8 +1.3.6.1.2.1.6.13.1.2.241.83.234.94.1.27.228.22.177.14|64x|f153ea5e +1.3.6.1.2.1.6.13.1.3.19.192.194.138.30.197.116.181.203.19|2|30 +1.3.6.1.2.1.6.13.1.3.49.212.70.37.27.99.156.38.80.20|2|27 +1.3.6.1.2.1.6.13.1.3.63.202.33.95.3.150.24.202.206.14|2|3 +1.3.6.1.2.1.6.13.1.3.75.220.11.81.3.75.157.192.44.26|2|3 +1.3.6.1.2.1.6.13.1.3.78.176.81.126.21.98.39.62.222.12|2|21 +1.3.6.1.2.1.6.13.1.3.162.10.255.161.23.83.77.198.1.22|2|23 +1.3.6.1.2.1.6.13.1.3.194.43.197.151.15.102.149.131.169.1|2|15 +1.3.6.1.2.1.6.13.1.3.201.4.229.174.6.121.8.120.60.9|2|6 +1.3.6.1.2.1.6.13.1.3.232.232.12.248.30.180.112.159.204.23|2|30 +1.3.6.1.2.1.6.13.1.3.241.83.234.94.1.27.228.22.177.14|2|1 +1.3.6.1.2.1.6.13.1.4.19.192.194.138.30.197.116.181.203.19|64x|c574b5cb +1.3.6.1.2.1.6.13.1.4.49.212.70.37.27.99.156.38.80.20|64x|639c2650 +1.3.6.1.2.1.6.13.1.4.63.202.33.95.3.150.24.202.206.14|64x|9618cace +1.3.6.1.2.1.6.13.1.4.75.220.11.81.3.75.157.192.44.26|64x|4b9dc02c +1.3.6.1.2.1.6.13.1.4.78.176.81.126.21.98.39.62.222.12|64x|62273ede +1.3.6.1.2.1.6.13.1.4.162.10.255.161.23.83.77.198.1.22|64x|534dc601 +1.3.6.1.2.1.6.13.1.4.194.43.197.151.15.102.149.131.169.1|64x|669583a9 +1.3.6.1.2.1.6.13.1.4.201.4.229.174.6.121.8.120.60.9|64x|7908783c +1.3.6.1.2.1.6.13.1.4.232.232.12.248.30.180.112.159.204.23|64x|b4709fcc +1.3.6.1.2.1.6.13.1.4.241.83.234.94.1.27.228.22.177.14|64x|1be416b1 +1.3.6.1.2.1.6.13.1.5.19.192.194.138.30.197.116.181.203.19|2|19 +1.3.6.1.2.1.6.13.1.5.49.212.70.37.27.99.156.38.80.20|2|20 +1.3.6.1.2.1.6.13.1.5.63.202.33.95.3.150.24.202.206.14|2|14 +1.3.6.1.2.1.6.13.1.5.75.220.11.81.3.75.157.192.44.26|2|26 +1.3.6.1.2.1.6.13.1.5.78.176.81.126.21.98.39.62.222.12|2|12 +1.3.6.1.2.1.6.13.1.5.162.10.255.161.23.83.77.198.1.22|2|22 +1.3.6.1.2.1.6.13.1.5.194.43.197.151.15.102.149.131.169.1|2|1 +1.3.6.1.2.1.6.13.1.5.201.4.229.174.6.121.8.120.60.9|2|9 +1.3.6.1.2.1.6.13.1.5.232.232.12.248.30.180.112.159.204.23|2|23 +1.3.6.1.2.1.6.13.1.5.241.83.234.94.1.27.228.22.177.14|2|14 +1.3.6.1.2.1.6.14.0|65|1656807085 +1.3.6.1.2.1.6.15.0|65|209366602 +1.3.6.1.2.1.6.17.0|70|10836309735518636992 +1.3.6.1.2.1.6.18.0|70|6643493366038592398 +1.3.6.1.2.1.6.19.1.1.0.27.98.117.116.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.98.0.51.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.32.107.101.112.116.30876|2|0 +1.3.6.1.2.1.6.19.1.1.0.43.97.99.116.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.98.117.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.19488.2.43.97.99.116.101.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.62320|2|0 +1.3.6.1.2.1.6.19.1.1.0.57.116.104.101.105.114.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.13300.0.29.100.114.105.118.105.110.103.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.54623|2|0 +1.3.6.1.2.1.6.19.1.1.1.49.100.114.105.118.105.110.103.32.107.101.112.116.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.61978.3.46.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.48165|2|1 +1.3.6.1.2.1.6.19.1.1.1.51.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.65208.16.14.113.117.97.105.110.116.108.121.32.116.104.101.105.114.41084|2|1 +1.3.6.1.2.1.6.19.1.1.2.7.100.114.105.118.105.110.103.34220.3.7.102.111.114.119.97.114.100.45017|2|2 +1.3.6.1.2.1.6.19.1.1.3.4.111.120.101.110.62943.2.24.74.97.100.101.100.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.57404|2|3 +1.3.6.1.2.1.6.19.1.1.3.41.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.74.97.100.101.100.58514.16.21.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.54370|2|3 +1.3.6.1.2.1.6.19.1.1.16.21.74.97.100.101.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.50515.2.32.74.97.100.101.100.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.116.104.101.105.114.28244|2|16 +1.3.6.1.2.1.6.19.1.1.16.25.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.116.104.101.105.114.60547.16.29.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.56793|2|16 +1.3.6.1.2.1.6.19.1.2.0.27.98.117.116.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.98.0.51.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.32.107.101.112.116.30876|4x|62757420666f72776172642064726976696e672064726976696e67 +1.3.6.1.2.1.6.19.1.2.0.43.97.99.116.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.98.117.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.19488.2.43.97.99.116.101.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.62320|4x|6163746564207a6f6d6269657320717561696e746c79206275742064726976696e6720717561696e746c79 +1.3.6.1.2.1.6.19.1.2.0.57.116.104.101.105.114.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.13300.0.29.100.114.105.118.105.110.103.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.54623|4x|746865697220666f72776172642074686569722074686569722064726976696e672074686569722064726976696e67206f78656e206f78656e +1.3.6.1.2.1.6.19.1.2.1.49.100.114.105.118.105.110.103.32.107.101.112.116.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.61978.3.46.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.48165|4x|64726976696e67206b657074207a6f6d6269657320666f7277617264204a61646564206b65707420746865697220627574 +1.3.6.1.2.1.6.19.1.2.1.51.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.65208.16.14.113.117.97.105.110.116.108.121.32.116.104.101.105.114.41084|4x|666f7277617264207a6f6d626965732062757420666f727761726420666f727761726420666f727761726420666f7277617264 +1.3.6.1.2.1.6.19.1.2.2.7.100.114.105.118.105.110.103.34220.3.7.102.111.114.119.97.114.100.45017|4|driving +1.3.6.1.2.1.6.19.1.2.3.4.111.120.101.110.62943.2.24.74.97.100.101.100.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.57404|4|oxen +1.3.6.1.2.1.6.19.1.2.3.41.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.74.97.100.101.100.58514.16.21.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.54370|4x|64726976696e672064726976696e6720717561696e746c79206f78656e207468656972204a61646564 +1.3.6.1.2.1.6.19.1.2.16.21.74.97.100.101.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.50515.2.32.74.97.100.101.100.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.116.104.101.105.114.28244|4x|4a61646564207a6f6d62696573207a6f6d62696573 +1.3.6.1.2.1.6.19.1.2.16.25.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.116.104.101.105.114.60547.16.29.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.56793|4x|6163746564207a6f6d62696573207468656972207468656972 +1.3.6.1.2.1.6.19.1.3.0.27.98.117.116.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.98.0.51.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.32.107.101.112.116.30876|66|98 +1.3.6.1.2.1.6.19.1.3.0.43.97.99.116.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.98.117.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.19488.2.43.97.99.116.101.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.62320|66|19488 +1.3.6.1.2.1.6.19.1.3.0.57.116.104.101.105.114.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.13300.0.29.100.114.105.118.105.110.103.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.54623|66|13300 +1.3.6.1.2.1.6.19.1.3.1.49.100.114.105.118.105.110.103.32.107.101.112.116.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.61978.3.46.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.48165|66|61978 +1.3.6.1.2.1.6.19.1.3.1.51.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.65208.16.14.113.117.97.105.110.116.108.121.32.116.104.101.105.114.41084|66|65208 +1.3.6.1.2.1.6.19.1.3.2.7.100.114.105.118.105.110.103.34220.3.7.102.111.114.119.97.114.100.45017|66|34220 +1.3.6.1.2.1.6.19.1.3.3.4.111.120.101.110.62943.2.24.74.97.100.101.100.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.57404|66|62943 +1.3.6.1.2.1.6.19.1.3.3.41.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.74.97.100.101.100.58514.16.21.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.54370|66|58514 +1.3.6.1.2.1.6.19.1.3.16.21.74.97.100.101.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.50515.2.32.74.97.100.101.100.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.116.104.101.105.114.28244|66|50515 +1.3.6.1.2.1.6.19.1.3.16.25.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.116.104.101.105.114.60547.16.29.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.56793|66|60547 +1.3.6.1.2.1.6.19.1.4.0.27.98.117.116.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.98.0.51.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.32.107.101.112.116.30876|2|0 +1.3.6.1.2.1.6.19.1.4.0.43.97.99.116.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.98.117.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.19488.2.43.97.99.116.101.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.62320|2|2 +1.3.6.1.2.1.6.19.1.4.0.57.116.104.101.105.114.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.13300.0.29.100.114.105.118.105.110.103.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.54623|2|0 +1.3.6.1.2.1.6.19.1.4.1.49.100.114.105.118.105.110.103.32.107.101.112.116.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.61978.3.46.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.48165|2|3 +1.3.6.1.2.1.6.19.1.4.1.51.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.65208.16.14.113.117.97.105.110.116.108.121.32.116.104.101.105.114.41084|2|16 +1.3.6.1.2.1.6.19.1.4.2.7.100.114.105.118.105.110.103.34220.3.7.102.111.114.119.97.114.100.45017|2|3 +1.3.6.1.2.1.6.19.1.4.3.4.111.120.101.110.62943.2.24.74.97.100.101.100.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.57404|2|2 +1.3.6.1.2.1.6.19.1.4.3.41.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.74.97.100.101.100.58514.16.21.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.54370|2|16 +1.3.6.1.2.1.6.19.1.4.16.21.74.97.100.101.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.50515.2.32.74.97.100.101.100.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.116.104.101.105.114.28244|2|2 +1.3.6.1.2.1.6.19.1.4.16.25.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.116.104.101.105.114.60547.16.29.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.56793|2|16 +1.3.6.1.2.1.6.19.1.5.0.27.98.117.116.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.98.0.51.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.32.107.101.112.116.30876|4x|6b6570742064726976696e672064726976696e672064726976696e67206b657074206f78656e20666f7277617264206b657074 +1.3.6.1.2.1.6.19.1.5.0.43.97.99.116.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.98.117.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.19488.2.43.97.99.116.101.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.62320|4x|616374656420666f72776172642064726976696e67204a61646564207a6f6d626965732062757420627574 +1.3.6.1.2.1.6.19.1.5.0.57.116.104.101.105.114.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.13300.0.29.100.114.105.118.105.110.103.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.54623|4x|64726976696e6720746865697220666f72776172642064726976696e67 +1.3.6.1.2.1.6.19.1.5.1.49.100.114.105.118.105.110.103.32.107.101.112.116.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.61978.3.46.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.48165|4x|6163746564206163746564204a61646564206f78656e207a6f6d62696573207468656972206b657074206b657074 +1.3.6.1.2.1.6.19.1.5.1.51.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.65208.16.14.113.117.97.105.110.116.108.121.32.116.104.101.105.114.41084|4x|717561696e746c79207468656972 +1.3.6.1.2.1.6.19.1.5.2.7.100.114.105.118.105.110.103.34220.3.7.102.111.114.119.97.114.100.45017|4|forward +1.3.6.1.2.1.6.19.1.5.3.4.111.120.101.110.62943.2.24.74.97.100.101.100.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.57404|4x|4a616465642062757420717561696e746c79206163746564 +1.3.6.1.2.1.6.19.1.5.3.41.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.74.97.100.101.100.58514.16.21.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.54370|4x|666f7277617264206b65707420627574206b657074 +1.3.6.1.2.1.6.19.1.5.16.21.74.97.100.101.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.50515.2.32.74.97.100.101.100.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.116.104.101.105.114.28244|4x|4a61646564206163746564206b65707420627574206163746564207468656972 +1.3.6.1.2.1.6.19.1.5.16.25.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.116.104.101.105.114.60547.16.29.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.56793|4x|64726976696e6720666f7277617264207a6f6d62696573206163746564 +1.3.6.1.2.1.6.19.1.6.0.27.98.117.116.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.98.0.51.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.32.107.101.112.116.30876|66|30876 +1.3.6.1.2.1.6.19.1.6.0.43.97.99.116.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.98.117.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.19488.2.43.97.99.116.101.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.62320|66|62320 +1.3.6.1.2.1.6.19.1.6.0.57.116.104.101.105.114.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.13300.0.29.100.114.105.118.105.110.103.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.54623|66|54623 +1.3.6.1.2.1.6.19.1.6.1.49.100.114.105.118.105.110.103.32.107.101.112.116.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.61978.3.46.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.48165|66|48165 +1.3.6.1.2.1.6.19.1.6.1.51.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.65208.16.14.113.117.97.105.110.116.108.121.32.116.104.101.105.114.41084|66|41084 +1.3.6.1.2.1.6.19.1.6.2.7.100.114.105.118.105.110.103.34220.3.7.102.111.114.119.97.114.100.45017|66|45017 +1.3.6.1.2.1.6.19.1.6.3.4.111.120.101.110.62943.2.24.74.97.100.101.100.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.57404|66|57404 +1.3.6.1.2.1.6.19.1.6.3.41.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.74.97.100.101.100.58514.16.21.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.54370|66|54370 +1.3.6.1.2.1.6.19.1.6.16.21.74.97.100.101.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.50515.2.32.74.97.100.101.100.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.116.104.101.105.114.28244|66|28244 +1.3.6.1.2.1.6.19.1.6.16.25.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.116.104.101.105.114.60547.16.29.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.56793|66|56793 +1.3.6.1.2.1.6.19.1.7.0.27.98.117.116.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.98.0.51.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.32.107.101.112.116.30876|2|9 +1.3.6.1.2.1.6.19.1.7.0.43.97.99.116.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.98.117.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.19488.2.43.97.99.116.101.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.62320|2|4 +1.3.6.1.2.1.6.19.1.7.0.57.116.104.101.105.114.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.13300.0.29.100.114.105.118.105.110.103.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.54623|2|1 +1.3.6.1.2.1.6.19.1.7.1.49.100.114.105.118.105.110.103.32.107.101.112.116.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.61978.3.46.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.48165|2|7 +1.3.6.1.2.1.6.19.1.7.1.51.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.65208.16.14.113.117.97.105.110.116.108.121.32.116.104.101.105.114.41084|2|9 +1.3.6.1.2.1.6.19.1.7.2.7.100.114.105.118.105.110.103.34220.3.7.102.111.114.119.97.114.100.45017|2|9 +1.3.6.1.2.1.6.19.1.7.3.4.111.120.101.110.62943.2.24.74.97.100.101.100.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.57404|2|1 +1.3.6.1.2.1.6.19.1.7.3.41.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.74.97.100.101.100.58514.16.21.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.54370|2|8 +1.3.6.1.2.1.6.19.1.7.16.21.74.97.100.101.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.50515.2.32.74.97.100.101.100.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.116.104.101.105.114.28244|2|3 +1.3.6.1.2.1.6.19.1.7.16.25.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.116.104.101.105.114.60547.16.29.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.56793|2|5 +1.3.6.1.2.1.6.19.1.8.0.27.98.117.116.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.98.0.51.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.32.107.101.112.116.30876|66|11494 +1.3.6.1.2.1.6.19.1.8.0.43.97.99.116.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.98.117.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.19488.2.43.97.99.116.101.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.62320|66|19833 +1.3.6.1.2.1.6.19.1.8.0.57.116.104.101.105.114.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.13300.0.29.100.114.105.118.105.110.103.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.54623|66|20375 +1.3.6.1.2.1.6.19.1.8.1.49.100.114.105.118.105.110.103.32.107.101.112.116.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.61978.3.46.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.48165|66|36316 +1.3.6.1.2.1.6.19.1.8.1.51.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.65208.16.14.113.117.97.105.110.116.108.121.32.116.104.101.105.114.41084|66|14994 +1.3.6.1.2.1.6.19.1.8.2.7.100.114.105.118.105.110.103.34220.3.7.102.111.114.119.97.114.100.45017|66|61477 +1.3.6.1.2.1.6.19.1.8.3.4.111.120.101.110.62943.2.24.74.97.100.101.100.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.57404|66|20102 +1.3.6.1.2.1.6.19.1.8.3.41.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.74.97.100.101.100.58514.16.21.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.54370|66|5148 +1.3.6.1.2.1.6.19.1.8.16.21.74.97.100.101.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.50515.2.32.74.97.100.101.100.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.116.104.101.105.114.28244|66|23335 +1.3.6.1.2.1.6.19.1.8.16.25.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.116.104.101.105.114.60547.16.29.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.56793|66|3408 +1.3.6.1.2.1.6.20.1.1.2.57.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.74.97.100.101.100.43630|2|2 +1.3.6.1.2.1.6.20.1.1.3.7.122.111.109.98.105.101.115.62225|2|3 +1.3.6.1.2.1.6.20.1.1.4.5.116.104.101.105.114.63131|2|4 +1.3.6.1.2.1.6.20.1.1.4.7.100.114.105.118.105.110.103.26679|2|4 +1.3.6.1.2.1.6.20.1.1.4.17.97.99.116.101.100.32.98.117.116.32.122.111.109.98.105.101.115.29283|2|4 +1.3.6.1.2.1.6.20.1.1.4.29.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.2131|2|4 +1.3.6.1.2.1.6.20.1.1.4.41.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.98.117.116.32.111.120.101.110.65455|2|4 +1.3.6.1.2.1.6.20.1.1.16.38.97.99.116.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.98.117.116.32.122.111.109.98.105.101.115.7290|2|16 +1.3.6.1.2.1.6.20.1.1.16.57.122.111.109.98.105.101.115.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.97.99.116.101.100.12767|2|16 +1.3.6.1.2.1.6.20.1.1.16.58.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.113.117.97.105.110.116.108.121.33797|2|16 +1.3.6.1.2.1.6.20.1.2.2.57.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.74.97.100.101.100.43630|4x|666f72776172642064726976696e672061637465642074686569722061637465642064726976696e67206b657074206f78656e204a61646564 +1.3.6.1.2.1.6.20.1.2.3.7.122.111.109.98.105.101.115.62225|4|zombies +1.3.6.1.2.1.6.20.1.2.4.5.116.104.101.105.114.63131|4|their +1.3.6.1.2.1.6.20.1.2.4.7.100.114.105.118.105.110.103.26679|4|driving +1.3.6.1.2.1.6.20.1.2.4.17.97.99.116.101.100.32.98.117.116.32.122.111.109.98.105.101.115.29283|4x|616374656420627574207a6f6d62696573 +1.3.6.1.2.1.6.20.1.2.4.29.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.2131|4x|7468656972207a6f6d62696573206f78656e204a61646564206f78656e +1.3.6.1.2.1.6.20.1.2.4.41.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.98.117.116.32.111.120.101.110.65455|4x|666f7277617264206163746564204a61646564206f78656e207a6f6d6269657320627574206f78656e +1.3.6.1.2.1.6.20.1.2.16.38.97.99.116.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.98.117.116.32.122.111.109.98.105.101.115.7290|4x|6163746564206b657074207a6f6d626965732064726976696e6720627574207a6f6d62696573 +1.3.6.1.2.1.6.20.1.2.16.57.122.111.109.98.105.101.115.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.97.99.116.101.100.12767|4x|7a6f6d62696573204a61646564206f78656e207a6f6d62696573206163746564206b65707420717561696e746c79206b657074206163746564 +1.3.6.1.2.1.6.20.1.2.16.58.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.113.117.97.105.110.116.108.121.33797|4x|666f7277617264207a6f6d62696573204a61646564207468656972207a6f6d6269657320717561696e746c79206b65707420717561696e746c79 +1.3.6.1.2.1.6.20.1.3.2.57.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.74.97.100.101.100.43630|66|43630 +1.3.6.1.2.1.6.20.1.3.3.7.122.111.109.98.105.101.115.62225|66|62225 +1.3.6.1.2.1.6.20.1.3.4.5.116.104.101.105.114.63131|66|63131 +1.3.6.1.2.1.6.20.1.3.4.7.100.114.105.118.105.110.103.26679|66|26679 +1.3.6.1.2.1.6.20.1.3.4.17.97.99.116.101.100.32.98.117.116.32.122.111.109.98.105.101.115.29283|66|29283 +1.3.6.1.2.1.6.20.1.3.4.29.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.2131|66|2131 +1.3.6.1.2.1.6.20.1.3.4.41.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.98.117.116.32.111.120.101.110.65455|66|65455 +1.3.6.1.2.1.6.20.1.3.16.38.97.99.116.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.98.117.116.32.122.111.109.98.105.101.115.7290|66|7290 +1.3.6.1.2.1.6.20.1.3.16.57.122.111.109.98.105.101.115.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.97.99.116.101.100.12767|66|12767 +1.3.6.1.2.1.6.20.1.3.16.58.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.113.117.97.105.110.116.108.121.33797|66|33797 +1.3.6.1.2.1.6.20.1.4.2.57.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.74.97.100.101.100.43630|66|11043 +1.3.6.1.2.1.6.20.1.4.3.7.122.111.109.98.105.101.115.62225|66|46645 +1.3.6.1.2.1.6.20.1.4.4.5.116.104.101.105.114.63131|66|21183 +1.3.6.1.2.1.6.20.1.4.4.7.100.114.105.118.105.110.103.26679|66|22659 +1.3.6.1.2.1.6.20.1.4.4.17.97.99.116.101.100.32.98.117.116.32.122.111.109.98.105.101.115.29283|66|29878 +1.3.6.1.2.1.6.20.1.4.4.29.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.2131|66|30450 +1.3.6.1.2.1.6.20.1.4.4.41.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.98.117.116.32.111.120.101.110.65455|66|6110 +1.3.6.1.2.1.6.20.1.4.16.38.97.99.116.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.98.117.116.32.122.111.109.98.105.101.115.7290|66|6544 +1.3.6.1.2.1.6.20.1.4.16.57.122.111.109.98.105.101.115.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.97.99.116.101.100.12767|66|51412 +1.3.6.1.2.1.6.20.1.4.16.58.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.113.117.97.105.110.116.108.121.33797|66|23539 +1.3.6.1.2.1.7.1.0|65|4270141773 +1.3.6.1.2.1.7.2.0|65|199753378 +1.3.6.1.2.1.7.3.0|65|3005352238 +1.3.6.1.2.1.7.4.0|65|4259461437 +1.3.6.1.2.1.7.5.1.1.13.209.77.90.1|64x|0dd14d5a +1.3.6.1.2.1.7.5.1.1.36.47.137.236.30|64x|242f89ec +1.3.6.1.2.1.7.5.1.1.49.119.163.14.29|64x|3177a30e +1.3.6.1.2.1.7.5.1.1.61.157.139.16.2|64x|3d9d8b10 +1.3.6.1.2.1.7.5.1.1.62.156.117.114.10|64x|3e9c7572 +1.3.6.1.2.1.7.5.1.1.77.165.52.164.25|64x|4da534a4 +1.3.6.1.2.1.7.5.1.1.105.30.91.133.18|64x|691e5b85 +1.3.6.1.2.1.7.5.1.1.195.150.79.206.0|64x|c3964fce +1.3.6.1.2.1.7.5.1.1.239.86.52.156.20|64x|ef56349c +1.3.6.1.2.1.7.5.1.1.240.81.67.244.2|64x|f05143f4 +1.3.6.1.2.1.7.5.1.2.13.209.77.90.1|2|1 +1.3.6.1.2.1.7.5.1.2.36.47.137.236.30|2|30 +1.3.6.1.2.1.7.5.1.2.49.119.163.14.29|2|29 +1.3.6.1.2.1.7.5.1.2.61.157.139.16.2|2|2 +1.3.6.1.2.1.7.5.1.2.62.156.117.114.10|2|10 +1.3.6.1.2.1.7.5.1.2.77.165.52.164.25|2|25 +1.3.6.1.2.1.7.5.1.2.105.30.91.133.18|2|18 +1.3.6.1.2.1.7.5.1.2.195.150.79.206.0|2|0 +1.3.6.1.2.1.7.5.1.2.239.86.52.156.20|2|20 +1.3.6.1.2.1.7.5.1.2.240.81.67.244.2|2|2 +1.3.6.1.2.1.7.7.1.1.0.13.116.104.101.105.114.32.102.111.114.119.97.114.100.4256.4.48.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.74.97.100.101.100.32.97.99.116.101.100.44544.52531|2|0 +1.3.6.1.2.1.7.7.1.1.0.53.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.98.117.116.64125.2.7.122.111.109.98.105.101.115.15820.11592|2|0 +1.3.6.1.2.1.7.7.1.1.1.59.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.111.120.101.110.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.41987.16.21.113.117.97.105.110.116.108.121.32.111.120.101.110.32.122.111.109.98.105.101.115.27196.10000|2|1 +1.3.6.1.2.1.7.7.1.1.2.10.97.99.116.101.100.32.107.101.112.116.29033.16.8.113.117.97.105.110.116.108.121.52479.34579|2|2 +1.3.6.1.2.1.7.7.1.1.2.49.98.117.116.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4650.3.11.97.99.116.101.100.32.116.104.101.105.114.41218.23033|2|2 +1.3.6.1.2.1.7.7.1.1.3.47.107.101.112.116.32.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.13211.3.23.98.117.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.33858.37887|2|3 +1.3.6.1.2.1.7.7.1.1.3.54.107.101.112.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114.12634.2.29.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.97.99.116.101.100.34581.61882|2|3 +1.3.6.1.2.1.7.7.1.1.4.7.100.114.105.118.105.110.103.49271.0.15.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.54166.51020|2|4 +1.3.6.1.2.1.7.7.1.1.4.16.98.117.116.32.98.117.116.32.107.101.112.116.32.98.117.116.13862.16.65.111.120.101.110.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.97.99.116.101.100.39814.14440|2|4 +1.3.6.1.2.1.7.7.1.1.4.25.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.63517.4.7.100.114.105.118.105.110.103.54011.8069|2|4 +1.3.6.1.2.1.7.7.1.2.0.13.116.104.101.105.114.32.102.111.114.119.97.114.100.4256.4.48.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.74.97.100.101.100.32.97.99.116.101.100.44544.52531|4x|746865697220666f7277617264 +1.3.6.1.2.1.7.7.1.2.0.53.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.98.117.116.64125.2.7.122.111.109.98.105.101.115.15820.11592|4x|4a61646564207a6f6d626965732062757420717561696e746c7920717561696e746c79206163746564207a6f6d6269657320627574 +1.3.6.1.2.1.7.7.1.2.1.59.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.111.120.101.110.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.41987.16.21.113.117.97.105.110.116.108.121.32.111.120.101.110.32.122.111.109.98.105.101.115.27196.10000|4x|6b6570742062757420666f7277617264206f78656e2064726976696e6720666f727761726420717561696e746c79206b65707420666f7277617264 +1.3.6.1.2.1.7.7.1.2.2.10.97.99.116.101.100.32.107.101.112.116.29033.16.8.113.117.97.105.110.116.108.121.52479.34579|4x|6163746564206b657074 +1.3.6.1.2.1.7.7.1.2.2.49.98.117.116.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4650.3.11.97.99.116.101.100.32.116.104.101.105.114.41218.23033|4x|6275742064726976696e672061637465642064726976696e67204a61646564206b657074206b65707420666f7277617264 +1.3.6.1.2.1.7.7.1.2.3.47.107.101.112.116.32.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.13211.3.23.98.117.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.33858.37887|4x|6b657074207468656972206f78656e20627574207a6f6d6269657320616374656420746865697220666f7277617264 +1.3.6.1.2.1.7.7.1.2.3.54.107.101.112.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114.12634.2.29.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.97.99.116.101.100.34581.61882|4x|6b657074207468656972207a6f6d62696573206f78656e2061637465642064726976696e67206163746564206b657074207468656972 +1.3.6.1.2.1.7.7.1.2.4.7.100.114.105.118.105.110.103.49271.0.15.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.54166.51020|4|driving +1.3.6.1.2.1.7.7.1.2.4.16.98.117.116.32.98.117.116.32.107.101.112.116.32.98.117.116.13862.16.65.111.120.101.110.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.97.99.116.101.100.39814.14440|4x|62757420627574206b65707420627574 +1.3.6.1.2.1.7.7.1.2.4.25.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.63517.4.7.100.114.105.118.105.110.103.54011.8069|4x|74686569722064726976696e67207468656972204a61646564 +1.3.6.1.2.1.7.7.1.3.0.13.116.104.101.105.114.32.102.111.114.119.97.114.100.4256.4.48.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.74.97.100.101.100.32.97.99.116.101.100.44544.52531|66|4256 +1.3.6.1.2.1.7.7.1.3.0.53.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.98.117.116.64125.2.7.122.111.109.98.105.101.115.15820.11592|66|64125 +1.3.6.1.2.1.7.7.1.3.1.59.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.111.120.101.110.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.41987.16.21.113.117.97.105.110.116.108.121.32.111.120.101.110.32.122.111.109.98.105.101.115.27196.10000|66|41987 +1.3.6.1.2.1.7.7.1.3.2.10.97.99.116.101.100.32.107.101.112.116.29033.16.8.113.117.97.105.110.116.108.121.52479.34579|66|29033 +1.3.6.1.2.1.7.7.1.3.2.49.98.117.116.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4650.3.11.97.99.116.101.100.32.116.104.101.105.114.41218.23033|66|4650 +1.3.6.1.2.1.7.7.1.3.3.47.107.101.112.116.32.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.13211.3.23.98.117.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.33858.37887|66|13211 +1.3.6.1.2.1.7.7.1.3.3.54.107.101.112.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114.12634.2.29.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.97.99.116.101.100.34581.61882|66|12634 +1.3.6.1.2.1.7.7.1.3.4.7.100.114.105.118.105.110.103.49271.0.15.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.54166.51020|66|49271 +1.3.6.1.2.1.7.7.1.3.4.16.98.117.116.32.98.117.116.32.107.101.112.116.32.98.117.116.13862.16.65.111.120.101.110.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.97.99.116.101.100.39814.14440|66|13862 +1.3.6.1.2.1.7.7.1.3.4.25.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.63517.4.7.100.114.105.118.105.110.103.54011.8069|66|63517 +1.3.6.1.2.1.7.7.1.4.0.13.116.104.101.105.114.32.102.111.114.119.97.114.100.4256.4.48.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.74.97.100.101.100.32.97.99.116.101.100.44544.52531|2|4 +1.3.6.1.2.1.7.7.1.4.0.53.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.98.117.116.64125.2.7.122.111.109.98.105.101.115.15820.11592|2|2 +1.3.6.1.2.1.7.7.1.4.1.59.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.111.120.101.110.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.41987.16.21.113.117.97.105.110.116.108.121.32.111.120.101.110.32.122.111.109.98.105.101.115.27196.10000|2|16 +1.3.6.1.2.1.7.7.1.4.2.10.97.99.116.101.100.32.107.101.112.116.29033.16.8.113.117.97.105.110.116.108.121.52479.34579|2|16 +1.3.6.1.2.1.7.7.1.4.2.49.98.117.116.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4650.3.11.97.99.116.101.100.32.116.104.101.105.114.41218.23033|2|3 +1.3.6.1.2.1.7.7.1.4.3.47.107.101.112.116.32.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.13211.3.23.98.117.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.33858.37887|2|3 +1.3.6.1.2.1.7.7.1.4.3.54.107.101.112.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114.12634.2.29.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.97.99.116.101.100.34581.61882|2|2 +1.3.6.1.2.1.7.7.1.4.4.7.100.114.105.118.105.110.103.49271.0.15.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.54166.51020|2|0 +1.3.6.1.2.1.7.7.1.4.4.16.98.117.116.32.98.117.116.32.107.101.112.116.32.98.117.116.13862.16.65.111.120.101.110.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.97.99.116.101.100.39814.14440|2|16 +1.3.6.1.2.1.7.7.1.4.4.25.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.63517.4.7.100.114.105.118.105.110.103.54011.8069|2|4 +1.3.6.1.2.1.7.7.1.5.0.13.116.104.101.105.114.32.102.111.114.119.97.114.100.4256.4.48.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.74.97.100.101.100.32.97.99.116.101.100.44544.52531|4x|746865697220666f727761726420717561696e746c792064726976696e67206163746564204a61646564206163746564 +1.3.6.1.2.1.7.7.1.5.0.53.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.98.117.116.64125.2.7.122.111.109.98.105.101.115.15820.11592|4|zombies +1.3.6.1.2.1.7.7.1.5.1.59.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.111.120.101.110.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.41987.16.21.113.117.97.105.110.116.108.121.32.111.120.101.110.32.122.111.109.98.105.101.115.27196.10000|4x|717561696e746c79206f78656e207a6f6d62696573 +1.3.6.1.2.1.7.7.1.5.2.10.97.99.116.101.100.32.107.101.112.116.29033.16.8.113.117.97.105.110.116.108.121.52479.34579|4|quaintly +1.3.6.1.2.1.7.7.1.5.2.49.98.117.116.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4650.3.11.97.99.116.101.100.32.116.104.101.105.114.41218.23033|4x|6163746564207468656972 +1.3.6.1.2.1.7.7.1.5.3.47.107.101.112.116.32.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.13211.3.23.98.117.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.33858.37887|4x|62757420666f7277617264207468656972207468656972 +1.3.6.1.2.1.7.7.1.5.3.54.107.101.112.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114.12634.2.29.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.97.99.116.101.100.34581.61882|4x|64726976696e672064726976696e672064726976696e67206163746564 +1.3.6.1.2.1.7.7.1.5.4.7.100.114.105.118.105.110.103.49271.0.15.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.54166.51020|4x|6b657074206f78656e206163746564 +1.3.6.1.2.1.7.7.1.5.4.16.98.117.116.32.98.117.116.32.107.101.112.116.32.98.117.116.13862.16.65.111.120.101.110.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.97.99.116.101.100.39814.14440|4x|6f78656e20666f72776172642064726976696e6720616374656420717561696e746c792064726976696e672064726976696e6720666f7277617264206163746564 +1.3.6.1.2.1.7.7.1.5.4.25.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.63517.4.7.100.114.105.118.105.110.103.54011.8069|4|driving +1.3.6.1.2.1.7.7.1.6.0.13.116.104.101.105.114.32.102.111.114.119.97.114.100.4256.4.48.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.74.97.100.101.100.32.97.99.116.101.100.44544.52531|66|44544 +1.3.6.1.2.1.7.7.1.6.0.53.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.98.117.116.64125.2.7.122.111.109.98.105.101.115.15820.11592|66|15820 +1.3.6.1.2.1.7.7.1.6.1.59.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.111.120.101.110.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.41987.16.21.113.117.97.105.110.116.108.121.32.111.120.101.110.32.122.111.109.98.105.101.115.27196.10000|66|27196 +1.3.6.1.2.1.7.7.1.6.2.10.97.99.116.101.100.32.107.101.112.116.29033.16.8.113.117.97.105.110.116.108.121.52479.34579|66|52479 +1.3.6.1.2.1.7.7.1.6.2.49.98.117.116.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4650.3.11.97.99.116.101.100.32.116.104.101.105.114.41218.23033|66|41218 +1.3.6.1.2.1.7.7.1.6.3.47.107.101.112.116.32.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.13211.3.23.98.117.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.33858.37887|66|33858 +1.3.6.1.2.1.7.7.1.6.3.54.107.101.112.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114.12634.2.29.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.97.99.116.101.100.34581.61882|66|34581 +1.3.6.1.2.1.7.7.1.6.4.7.100.114.105.118.105.110.103.49271.0.15.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.54166.51020|66|54166 +1.3.6.1.2.1.7.7.1.6.4.16.98.117.116.32.98.117.116.32.107.101.112.116.32.98.117.116.13862.16.65.111.120.101.110.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.97.99.116.101.100.39814.14440|66|39814 +1.3.6.1.2.1.7.7.1.6.4.25.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.63517.4.7.100.114.105.118.105.110.103.54011.8069|66|54011 +1.3.6.1.2.1.7.7.1.7.0.13.116.104.101.105.114.32.102.111.114.119.97.114.100.4256.4.48.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.74.97.100.101.100.32.97.99.116.101.100.44544.52531|66|52531 +1.3.6.1.2.1.7.7.1.7.0.53.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.98.117.116.64125.2.7.122.111.109.98.105.101.115.15820.11592|66|11592 +1.3.6.1.2.1.7.7.1.7.1.59.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.111.120.101.110.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.41987.16.21.113.117.97.105.110.116.108.121.32.111.120.101.110.32.122.111.109.98.105.101.115.27196.10000|66|10000 +1.3.6.1.2.1.7.7.1.7.2.10.97.99.116.101.100.32.107.101.112.116.29033.16.8.113.117.97.105.110.116.108.121.52479.34579|66|34579 +1.3.6.1.2.1.7.7.1.7.2.49.98.117.116.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4650.3.11.97.99.116.101.100.32.116.104.101.105.114.41218.23033|66|23033 +1.3.6.1.2.1.7.7.1.7.3.47.107.101.112.116.32.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.13211.3.23.98.117.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.33858.37887|66|37887 +1.3.6.1.2.1.7.7.1.7.3.54.107.101.112.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114.12634.2.29.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.97.99.116.101.100.34581.61882|66|61882 +1.3.6.1.2.1.7.7.1.7.4.7.100.114.105.118.105.110.103.49271.0.15.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.54166.51020|66|51020 +1.3.6.1.2.1.7.7.1.7.4.16.98.117.116.32.98.117.116.32.107.101.112.116.32.98.117.116.13862.16.65.111.120.101.110.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.97.99.116.101.100.39814.14440|66|14440 +1.3.6.1.2.1.7.7.1.7.4.25.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.63517.4.7.100.114.105.118.105.110.103.54011.8069|66|8069 +1.3.6.1.2.1.7.7.1.8.0.13.116.104.101.105.114.32.102.111.114.119.97.114.100.4256.4.48.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.74.97.100.101.100.32.97.99.116.101.100.44544.52531|66|56769 +1.3.6.1.2.1.7.7.1.8.0.53.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.98.117.116.64125.2.7.122.111.109.98.105.101.115.15820.11592|66|4918 +1.3.6.1.2.1.7.7.1.8.1.59.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.111.120.101.110.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.41987.16.21.113.117.97.105.110.116.108.121.32.111.120.101.110.32.122.111.109.98.105.101.115.27196.10000|66|29584 +1.3.6.1.2.1.7.7.1.8.2.10.97.99.116.101.100.32.107.101.112.116.29033.16.8.113.117.97.105.110.116.108.121.52479.34579|66|5023 +1.3.6.1.2.1.7.7.1.8.2.49.98.117.116.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4650.3.11.97.99.116.101.100.32.116.104.101.105.114.41218.23033|66|59393 +1.3.6.1.2.1.7.7.1.8.3.47.107.101.112.116.32.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.13211.3.23.98.117.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.33858.37887|66|48568 +1.3.6.1.2.1.7.7.1.8.3.54.107.101.112.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114.12634.2.29.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.97.99.116.101.100.34581.61882|66|46491 +1.3.6.1.2.1.7.7.1.8.4.7.100.114.105.118.105.110.103.49271.0.15.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.54166.51020|66|24853 +1.3.6.1.2.1.7.7.1.8.4.16.98.117.116.32.98.117.116.32.107.101.112.116.32.98.117.116.13862.16.65.111.120.101.110.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.97.99.116.101.100.39814.14440|66|43653 +1.3.6.1.2.1.7.7.1.8.4.25.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.63517.4.7.100.114.105.118.105.110.103.54011.8069|66|21028 +1.3.6.1.2.1.7.8.0|70|7642781740819387010 +1.3.6.1.2.1.7.9.0|70|7684584856575881521 +1.3.6.1.2.1.11.1.0|65|954851721 +1.3.6.1.2.1.11.1.0|65|1454218606 +1.3.6.1.2.1.11.2.0|65|409608966 +1.3.6.1.2.1.11.2.0|65|1880301803 +1.3.6.1.2.1.11.3.0|65|1289819496 +1.3.6.1.2.1.11.3.0|65|3124603570 +1.3.6.1.2.1.11.4.0|65|992806328 +1.3.6.1.2.1.11.4.0|65|2163750677 +1.3.6.1.2.1.11.5.0|65|63400765 +1.3.6.1.2.1.11.5.0|65|1652706228 +1.3.6.1.2.1.11.6.0|65|2152341393 +1.3.6.1.2.1.11.6.0|65|3271598735 +1.3.6.1.2.1.11.8.0|65|4111852310 +1.3.6.1.2.1.11.8.0|65|4201055591 +1.3.6.1.2.1.11.9.0|65|1160138484 +1.3.6.1.2.1.11.9.0|65|4256205423 +1.3.6.1.2.1.11.10.0|65|1221013779 +1.3.6.1.2.1.11.10.0|65|2302657642 +1.3.6.1.2.1.11.11.0|65|1540407169 +1.3.6.1.2.1.11.11.0|65|2350117438 +1.3.6.1.2.1.11.12.0|65|2614239671 +1.3.6.1.2.1.11.12.0|65|4111230750 +1.3.6.1.2.1.11.13.0|65|2852397657 +1.3.6.1.2.1.11.13.0|65|3121375553 +1.3.6.1.2.1.11.14.0|65|755604849 +1.3.6.1.2.1.11.14.0|65|3542294623 +1.3.6.1.2.1.11.15.0|65|741638534 +1.3.6.1.2.1.11.15.0|65|2794090705 +1.3.6.1.2.1.11.16.0|65|3877638626 +1.3.6.1.2.1.11.16.0|65|4180316518 +1.3.6.1.2.1.11.17.0|65|253685917 +1.3.6.1.2.1.11.17.0|65|2693168960 +1.3.6.1.2.1.11.18.0|65|1808524638 +1.3.6.1.2.1.11.18.0|65|2140737931 +1.3.6.1.2.1.11.19.0|65|676443377 +1.3.6.1.2.1.11.19.0|65|1117806078 +1.3.6.1.2.1.11.20.0|65|354628088 +1.3.6.1.2.1.11.20.0|65|3965434335 +1.3.6.1.2.1.11.21.0|65|1634954399 +1.3.6.1.2.1.11.21.0|65|1964459181 +1.3.6.1.2.1.11.22.0|65|1192433191 +1.3.6.1.2.1.11.22.0|65|1853429365 +1.3.6.1.2.1.11.24.0|65|380779089 +1.3.6.1.2.1.11.24.0|65|1472413992 +1.3.6.1.2.1.11.25.0|65|1794503904 +1.3.6.1.2.1.11.25.0|65|2149515263 +1.3.6.1.2.1.11.26.0|65|1232486629 +1.3.6.1.2.1.11.26.0|65|1651496593 +1.3.6.1.2.1.11.27.0|65|916838675 +1.3.6.1.2.1.11.27.0|65|2699929583 +1.3.6.1.2.1.11.28.0|65|70260818 +1.3.6.1.2.1.11.28.0|65|641662408 +1.3.6.1.2.1.11.29.0|65|998857108 +1.3.6.1.2.1.11.29.0|65|3136471498 +1.3.6.1.2.1.11.30.0|2|1 +1.3.6.1.2.1.11.30.0|2|2 +1.3.6.1.2.1.11.31.0|65|2369006345 +1.3.6.1.2.1.11.31.0|65|2819398811 +1.3.6.1.2.1.11.32.0|65|1430690600 +1.3.6.1.2.1.11.32.0|65|1725520591 +1.3.6.1.2.1.31.1.1.1.1.2|4x|4769676162697445746865726e6574312f302f31 +1.3.6.1.2.1.31.1.1.1.1.13|4x|4769676162697445746865726e6574312f302f32 +1.3.6.1.2.1.31.1.1.1.1.20|4x|4769676162697445746865726e6574312f302f33 +1.3.6.1.2.1.31.1.1.1.1.22|4x|4769676162697445746865726e6574312f302f34 +1.3.6.1.2.1.31.1.1.1.1.23|4x|4769676162697445746865726e6574312f302f35 +1.3.6.1.2.1.31.1.1.1.1.25|4x|4769676162697445746865726e6574312f302f36 +1.3.6.1.2.1.31.1.1.1.1.29|4x|4769676162697445746865726e6574312f302f37 +1.3.6.1.2.1.31.1.1.1.1.30|4x|4769676162697445746865726e6574312f302f38 +1.3.6.1.2.1.31.1.1.1.2.2|65|2733450495 +1.3.6.1.2.1.31.1.1.1.2.13|65|699266092 +1.3.6.1.2.1.31.1.1.1.2.20|65|4053490784 +1.3.6.1.2.1.31.1.1.1.2.22|65|1710795156 +1.3.6.1.2.1.31.1.1.1.2.23|65|3843858446 +1.3.6.1.2.1.31.1.1.1.2.25|65|947448120 +1.3.6.1.2.1.31.1.1.1.2.29|65|715533867 +1.3.6.1.2.1.31.1.1.1.2.30|65|3328396082 +1.3.6.1.2.1.31.1.1.1.3.2|65|3325970083 +1.3.6.1.2.1.31.1.1.1.3.13|65|1528033277 +1.3.6.1.2.1.31.1.1.1.3.20|65|3045056125 +1.3.6.1.2.1.31.1.1.1.3.22|65|204045711 +1.3.6.1.2.1.31.1.1.1.3.23|65|2573064606 +1.3.6.1.2.1.31.1.1.1.3.25|65|734698077 +1.3.6.1.2.1.31.1.1.1.3.29|65|2595770740 +1.3.6.1.2.1.31.1.1.1.3.30|65|1524629487 +1.3.6.1.2.1.31.1.1.1.4.2|65|3540226820 +1.3.6.1.2.1.31.1.1.1.4.13|65|2682280325 +1.3.6.1.2.1.31.1.1.1.4.20|65|3957518508 +1.3.6.1.2.1.31.1.1.1.4.22|65|1906225887 +1.3.6.1.2.1.31.1.1.1.4.23|65|1741403028 +1.3.6.1.2.1.31.1.1.1.4.25|65|1255363249 +1.3.6.1.2.1.31.1.1.1.4.29|65|399502146 +1.3.6.1.2.1.31.1.1.1.4.30|65|1144089387 +1.3.6.1.2.1.31.1.1.1.5.2|65|1452176956 +1.3.6.1.2.1.31.1.1.1.5.13|65|3409164710 +1.3.6.1.2.1.31.1.1.1.5.20|65|2463070203 +1.3.6.1.2.1.31.1.1.1.5.22|65|848059051 +1.3.6.1.2.1.31.1.1.1.5.23|65|2914405363 +1.3.6.1.2.1.31.1.1.1.5.25|65|3108752973 +1.3.6.1.2.1.31.1.1.1.5.29|65|1232734959 +1.3.6.1.2.1.31.1.1.1.5.30|65|1764074382 +1.3.6.1.2.1.31.1.1.1.6.2|70|13448303172714697305 +1.3.6.1.2.1.31.1.1.1.6.13|70|4318719075804689635 +1.3.6.1.2.1.31.1.1.1.6.20|70|17201856891642082546 +1.3.6.1.2.1.31.1.1.1.6.22|70|13246658495780705980 +1.3.6.1.2.1.31.1.1.1.6.23|70|9332172312136476036 +1.3.6.1.2.1.31.1.1.1.6.25|70|15314956972903536651 +1.3.6.1.2.1.31.1.1.1.6.29|70|9318379647000499270 +1.3.6.1.2.1.31.1.1.1.6.30|70|9765358329565439355 +1.3.6.1.2.1.31.1.1.1.7.2|70|10179706897128774466 +1.3.6.1.2.1.31.1.1.1.7.13|70|4454859230604991099 +1.3.6.1.2.1.31.1.1.1.7.20|70|3359284887771123963 +1.3.6.1.2.1.31.1.1.1.7.22|70|11446923366838822379 +1.3.6.1.2.1.31.1.1.1.7.23|70|10465411426025060425 +1.3.6.1.2.1.31.1.1.1.7.25|70|3080911980461264564 +1.3.6.1.2.1.31.1.1.1.7.29|70|2435720068607480212 +1.3.6.1.2.1.31.1.1.1.7.30|70|6421342371519975141 +1.3.6.1.2.1.31.1.1.1.8.2|70|456111944996040225 +1.3.6.1.2.1.31.1.1.1.8.13|70|18195635595774592670 +1.3.6.1.2.1.31.1.1.1.8.20|70|10306916805428074276 +1.3.6.1.2.1.31.1.1.1.8.22|70|10817541190455104384 +1.3.6.1.2.1.31.1.1.1.8.23|70|16699596081972900079 +1.3.6.1.2.1.31.1.1.1.8.25|70|12660222749186865742 +1.3.6.1.2.1.31.1.1.1.8.29|70|7608584762010362398 +1.3.6.1.2.1.31.1.1.1.8.30|70|14936114632924624840 +1.3.6.1.2.1.31.1.1.1.9.2|70|4893042909336225003 +1.3.6.1.2.1.31.1.1.1.9.13|70|11758107631008367663 +1.3.6.1.2.1.31.1.1.1.9.20|70|2724215101882812388 +1.3.6.1.2.1.31.1.1.1.9.22|70|5136657074956142950 +1.3.6.1.2.1.31.1.1.1.9.23|70|9530476596662027452 +1.3.6.1.2.1.31.1.1.1.9.25|70|14086768769392060956 +1.3.6.1.2.1.31.1.1.1.9.29|70|11317604788457258935 +1.3.6.1.2.1.31.1.1.1.9.30|70|6797537392375707490 +1.3.6.1.2.1.31.1.1.1.10.2|70|12274849589607689984 +1.3.6.1.2.1.31.1.1.1.10.13|70|940792159273415684 +1.3.6.1.2.1.31.1.1.1.10.20|70|11139680439752029358 +1.3.6.1.2.1.31.1.1.1.10.22|70|1594900387358540750 +1.3.6.1.2.1.31.1.1.1.10.23|70|11192496846189559441 +1.3.6.1.2.1.31.1.1.1.10.25|70|16344897290942655305 +1.3.6.1.2.1.31.1.1.1.10.29|70|677815612738172887 +1.3.6.1.2.1.31.1.1.1.10.30|70|16368354720075476219 +1.3.6.1.2.1.31.1.1.1.11.2|70|15970914692347547432 +1.3.6.1.2.1.31.1.1.1.11.13|70|13601449749320466487 +1.3.6.1.2.1.31.1.1.1.11.20|70|2293591718704981678 +1.3.6.1.2.1.31.1.1.1.11.22|70|12372852009231832301 +1.3.6.1.2.1.31.1.1.1.11.23|70|11206420299303144484 +1.3.6.1.2.1.31.1.1.1.11.25|70|18096173012673022526 +1.3.6.1.2.1.31.1.1.1.11.29|70|16246528730037708164 +1.3.6.1.2.1.31.1.1.1.11.30|70|11360917974542476187 +1.3.6.1.2.1.31.1.1.1.12.2|70|4902902070248533915 +1.3.6.1.2.1.31.1.1.1.12.13|70|17202254967886391507 +1.3.6.1.2.1.31.1.1.1.12.20|70|4717428222020898053 +1.3.6.1.2.1.31.1.1.1.12.22|70|15078557458701602035 +1.3.6.1.2.1.31.1.1.1.12.23|70|8614726914866626135 +1.3.6.1.2.1.31.1.1.1.12.25|70|6002335830185811704 +1.3.6.1.2.1.31.1.1.1.12.29|70|8462951256947496252 +1.3.6.1.2.1.31.1.1.1.12.30|70|11436030414039510640 +1.3.6.1.2.1.31.1.1.1.13.2|70|11008162885060916668 +1.3.6.1.2.1.31.1.1.1.13.13|70|444503635646358599 +1.3.6.1.2.1.31.1.1.1.13.20|70|12142342600175513906 +1.3.6.1.2.1.31.1.1.1.13.22|70|3805092011446384798 +1.3.6.1.2.1.31.1.1.1.13.23|70|10616684150150900851 +1.3.6.1.2.1.31.1.1.1.13.25|70|7473343076948502502 +1.3.6.1.2.1.31.1.1.1.13.29|70|6829434071846665165 +1.3.6.1.2.1.31.1.1.1.13.30|70|7327198865724432175 +1.3.6.1.2.1.31.1.1.1.14.2|2|2 +1.3.6.1.2.1.31.1.1.1.14.13|2|1 +1.3.6.1.2.1.31.1.1.1.14.20|2|2 +1.3.6.1.2.1.31.1.1.1.14.22|2|1 +1.3.6.1.2.1.31.1.1.1.14.23|2|2 +1.3.6.1.2.1.31.1.1.1.14.25|2|1 +1.3.6.1.2.1.31.1.1.1.14.29|2|1 +1.3.6.1.2.1.31.1.1.1.14.30|2|1 +1.3.6.1.2.1.31.1.1.1.15.2|66|29 +1.3.6.1.2.1.31.1.1.1.15.13|66|43 +1.3.6.1.2.1.31.1.1.1.15.20|66|49 +1.3.6.1.2.1.31.1.1.1.15.22|66|68 +1.3.6.1.2.1.31.1.1.1.15.23|66|91 +1.3.6.1.2.1.31.1.1.1.15.25|66|87 +1.3.6.1.2.1.31.1.1.1.15.29|66|81 +1.3.6.1.2.1.31.1.1.1.15.30|66|77 +1.3.6.1.2.1.31.1.1.1.16.2|2|1 +1.3.6.1.2.1.31.1.1.1.16.13|2|1 +1.3.6.1.2.1.31.1.1.1.16.20|2|1 +1.3.6.1.2.1.31.1.1.1.16.22|2|2 +1.3.6.1.2.1.31.1.1.1.16.23|2|2 +1.3.6.1.2.1.31.1.1.1.16.25|2|2 +1.3.6.1.2.1.31.1.1.1.16.29|2|1 +1.3.6.1.2.1.31.1.1.1.16.30|2|2 +1.3.6.1.2.1.31.1.1.1.17.2|2|1 +1.3.6.1.2.1.31.1.1.1.17.13|2|1 +1.3.6.1.2.1.31.1.1.1.17.20|2|2 +1.3.6.1.2.1.31.1.1.1.17.22|2|2 +1.3.6.1.2.1.31.1.1.1.17.23|2|1 +1.3.6.1.2.1.31.1.1.1.17.25|2|2 +1.3.6.1.2.1.31.1.1.1.17.29|2|1 +1.3.6.1.2.1.31.1.1.1.17.30|2|1 +1.3.6.1.2.1.31.1.1.1.18.2|4| +1.3.6.1.2.1.31.1.1.1.18.13|4| +1.3.6.1.2.1.31.1.1.1.18.20|4| +1.3.6.1.2.1.31.1.1.1.18.22|4| +1.3.6.1.2.1.31.1.1.1.18.23|4| +1.3.6.1.2.1.31.1.1.1.18.25|4| +1.3.6.1.2.1.31.1.1.1.18.29|4| +1.3.6.1.2.1.31.1.1.1.18.30|4| +1.3.6.1.2.1.31.1.1.1.19.2|67|3348202847 +1.3.6.1.2.1.31.1.1.1.19.13|67|735588022 +1.3.6.1.2.1.31.1.1.1.19.20|67|3243024311 +1.3.6.1.2.1.31.1.1.1.19.22|67|3697070021 +1.3.6.1.2.1.31.1.1.1.19.23|67|3302138292 +1.3.6.1.2.1.31.1.1.1.19.25|67|3917221164 +1.3.6.1.2.1.31.1.1.1.19.29|67|2442724574 +1.3.6.1.2.1.31.1.1.1.19.30|67|3866962771 +1.3.6.1.2.1.31.1.2.1.1.4.6|2|4 +1.3.6.1.2.1.31.1.2.1.1.5.28|2|5 +1.3.6.1.2.1.31.1.2.1.1.12.14|2|12 +1.3.6.1.2.1.31.1.2.1.1.13.6|2|13 +1.3.6.1.2.1.31.1.2.1.1.14.16|2|14 +1.3.6.1.2.1.31.1.2.1.1.19.2|2|19 +1.3.6.1.2.1.31.1.2.1.1.21.31|2|21 +1.3.6.1.2.1.31.1.2.1.1.26.21|2|26 +1.3.6.1.2.1.31.1.2.1.1.27.5|2|27 +1.3.6.1.2.1.31.1.2.1.1.31.21|2|31 +1.3.6.1.2.1.31.1.2.1.2.4.6|2|6 +1.3.6.1.2.1.31.1.2.1.2.5.28|2|28 +1.3.6.1.2.1.31.1.2.1.2.12.14|2|14 +1.3.6.1.2.1.31.1.2.1.2.13.6|2|6 +1.3.6.1.2.1.31.1.2.1.2.14.16|2|16 +1.3.6.1.2.1.31.1.2.1.2.19.2|2|2 +1.3.6.1.2.1.31.1.2.1.2.21.31|2|31 +1.3.6.1.2.1.31.1.2.1.2.26.21|2|21 +1.3.6.1.2.1.31.1.2.1.2.27.5|2|5 +1.3.6.1.2.1.31.1.2.1.2.31.21|2|21 +1.3.6.1.2.1.31.1.2.1.3.4.6|2|6 +1.3.6.1.2.1.31.1.2.1.3.5.28|2|6 +1.3.6.1.2.1.31.1.2.1.3.12.14|2|3 +1.3.6.1.2.1.31.1.2.1.3.13.6|2|2 +1.3.6.1.2.1.31.1.2.1.3.14.16|2|0 +1.3.6.1.2.1.31.1.2.1.3.19.2|2|4 +1.3.6.1.2.1.31.1.2.1.3.21.31|2|4 +1.3.6.1.2.1.31.1.2.1.3.26.21|2|6 +1.3.6.1.2.1.31.1.2.1.3.27.5|2|0 +1.3.6.1.2.1.31.1.2.1.3.31.21|2|6 +1.3.6.1.2.1.31.1.3.1.1.3|2|19 +1.3.6.1.2.1.31.1.3.1.1.9|2|21 +1.3.6.1.2.1.31.1.3.1.1.15|2|30 +1.3.6.1.2.1.31.1.3.1.1.16|2|18 +1.3.6.1.2.1.31.1.3.1.1.17|2|11 +1.3.6.1.2.1.31.1.3.1.1.18|2|8 +1.3.6.1.2.1.31.1.3.1.1.20|2|7 +1.3.6.1.2.1.31.1.3.1.1.24|2|10 +1.3.6.1.2.1.31.1.3.1.1.27|2|9 +1.3.6.1.2.1.31.1.3.1.1.31|2|2 +1.3.6.1.2.1.31.1.3.1.2.3|2|1 +1.3.6.1.2.1.31.1.3.1.2.9|2|1 +1.3.6.1.2.1.31.1.3.1.2.15|2|2 +1.3.6.1.2.1.31.1.3.1.2.16|2|1 +1.3.6.1.2.1.31.1.3.1.2.17|2|1 +1.3.6.1.2.1.31.1.3.1.2.18|2|2 +1.3.6.1.2.1.31.1.3.1.2.20|2|2 +1.3.6.1.2.1.31.1.3.1.2.24|2|2 +1.3.6.1.2.1.31.1.3.1.2.27|2|2 +1.3.6.1.2.1.31.1.3.1.2.31|2|2 +1.3.6.1.2.1.31.1.3.1.3.3|6|1.3.6.1.3.109 +1.3.6.1.2.1.31.1.3.1.3.9|6|1.3.6.1.3.165.239.212.146.132 +1.3.6.1.2.1.31.1.3.1.3.15|6|1.3.6.1.3.26.60 +1.3.6.1.2.1.31.1.3.1.3.16|6|1.3.6.1.3.49.134.239.38 +1.3.6.1.2.1.31.1.3.1.3.17|6|1.3.6.1.3.42.80.246.41.97.208.178 +1.3.6.1.2.1.31.1.3.1.3.18|6|1.3.6.1.3 +1.3.6.1.2.1.31.1.3.1.3.20|6|1.3.6.1.3.217.68.166.138.250.141 +1.3.6.1.2.1.31.1.3.1.3.24|6|1.3.6.1.3.15.5.120.167 +1.3.6.1.2.1.31.1.3.1.3.27|6|1.3.6.1.3.82.210.10.160.216.59 +1.3.6.1.2.1.31.1.3.1.3.31|6|1.3.6.1.3.97.128.195 +1.3.6.1.2.1.31.1.3.1.4.3|2|2 +1.3.6.1.2.1.31.1.3.1.4.9|2|5 +1.3.6.1.2.1.31.1.3.1.4.15|2|6 +1.3.6.1.2.1.31.1.3.1.4.16|2|3 +1.3.6.1.2.1.31.1.3.1.4.17|2|7 +1.3.6.1.2.1.31.1.3.1.4.18|2|7 +1.3.6.1.2.1.31.1.3.1.4.20|2|7 +1.3.6.1.2.1.31.1.3.1.4.24|2|6 +1.3.6.1.2.1.31.1.3.1.4.27|2|6 +1.3.6.1.2.1.31.1.3.1.4.31|2|3 +1.3.6.1.2.1.31.1.3.1.5.3|6|1.3.6.1.3.41.63.85.46.30 +1.3.6.1.2.1.31.1.3.1.5.9|6|1.3.6.1.3.240.1.39.78.90.70 +1.3.6.1.2.1.31.1.3.1.5.15|6|1.3.6.1.3.194.105 +1.3.6.1.2.1.31.1.3.1.5.16|6|1.3.6.1.3.223.205.243.27.145.236.111.164 +1.3.6.1.2.1.31.1.3.1.5.17|6|1.3.6.1.3.199.37.240.94.50.52.90 +1.3.6.1.2.1.31.1.3.1.5.18|6|1.3.6.1.3.102.51.116.18.224.148.90.3.51 +1.3.6.1.2.1.31.1.3.1.5.20|6|1.3.6.1.3.245.162.128.232.129.33.38 +1.3.6.1.2.1.31.1.3.1.5.24|6|1.3.6.1.3.154.74.95.29.176.206.122.130.33 +1.3.6.1.2.1.31.1.3.1.5.27|6|1.3.6.1.3.193.203.61.185.202.110 +1.3.6.1.2.1.31.1.3.1.5.31|6|1.3.6.1.3.113 +1.3.6.1.2.1.31.1.3.1.6.3|4|kept +1.3.6.1.2.1.31.1.3.1.6.9|4x|7a6f6d62696573204a61646564207468656972204a6164656420717561696e746c792064726976696e67206163746564 +1.3.6.1.2.1.31.1.3.1.6.15|4x|64726976696e6720666f72776172642064726976696e6720717561696e746c79 +1.3.6.1.2.1.31.1.3.1.6.16|4x|616374656420666f727761726420746865697220717561696e746c79206f78656e +1.3.6.1.2.1.31.1.3.1.6.17|4|quaintly +1.3.6.1.2.1.31.1.3.1.6.18|4x|62757420627574204a61646564206b657074 +1.3.6.1.2.1.31.1.3.1.6.20|4x|64726976696e672064726976696e67207468656972206b657074207a6f6d62696573207468656972206f78656e206b657074204a61646564 +1.3.6.1.2.1.31.1.3.1.6.24|4x|717561696e746c79207a6f6d6269657320746865697220746865697220746865697220627574 +1.3.6.1.2.1.31.1.3.1.6.27|4x|7a6f6d62696573206f78656e2064726976696e6720717561696e746c79206b6570742064726976696e67206f78656e206163746564 +1.3.6.1.2.1.31.1.3.1.6.31|4x|717561696e746c79207468656972206b65707420627574207468656972 +1.3.6.1.2.1.31.1.4.1.1.3.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.6.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.7.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.12.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.14.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.20.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.21.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.22.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.26.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.31.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.2.3.6.66.1.10.164.0.51|2|4 +1.3.6.1.2.1.31.1.4.1.2.6.6.66.1.10.164.0.51|2|5 +1.3.6.1.2.1.31.1.4.1.2.7.6.66.1.10.164.0.51|2|6 +1.3.6.1.2.1.31.1.4.1.2.12.6.66.1.10.164.0.51|2|3 +1.3.6.1.2.1.31.1.4.1.2.14.6.66.1.10.164.0.51|2|6 +1.3.6.1.2.1.31.1.4.1.2.20.6.66.1.10.164.0.51|2|2 +1.3.6.1.2.1.31.1.4.1.2.21.6.66.1.10.164.0.51|2|1 +1.3.6.1.2.1.31.1.4.1.2.22.6.66.1.10.164.0.51|2|5 +1.3.6.1.2.1.31.1.4.1.2.26.6.66.1.10.164.0.51|2|2 +1.3.6.1.2.1.31.1.4.1.2.31.6.66.1.10.164.0.51|2|1 +1.3.6.1.2.1.31.1.4.1.3.3.6.66.1.10.164.0.51|2|1 +1.3.6.1.2.1.31.1.4.1.3.6.6.66.1.10.164.0.51|2|1 +1.3.6.1.2.1.31.1.4.1.3.7.6.66.1.10.164.0.51|2|1 +1.3.6.1.2.1.31.1.4.1.3.12.6.66.1.10.164.0.51|2|1 +1.3.6.1.2.1.31.1.4.1.3.14.6.66.1.10.164.0.51|2|1 +1.3.6.1.2.1.31.1.4.1.3.20.6.66.1.10.164.0.51|2|3 +1.3.6.1.2.1.31.1.4.1.3.21.6.66.1.10.164.0.51|2|3 +1.3.6.1.2.1.31.1.4.1.3.22.6.66.1.10.164.0.51|2|3 +1.3.6.1.2.1.31.1.4.1.3.26.6.66.1.10.164.0.51|2|3 +1.3.6.1.2.1.31.1.4.1.3.31.6.66.1.10.164.0.51|2|3 +1.3.6.1.2.1.31.1.5.0|67|769573055 +1.3.6.1.2.1.31.1.6.0|67|2568717285 +1.3.6.1.4.1.9.9.13.1.3.1.1.3|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.1.6|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.1.8|2|8 +1.3.6.1.4.1.9.9.13.1.3.1.1.11|2|11 +1.3.6.1.4.1.9.9.13.1.3.1.1.13|2|13 +1.3.6.1.4.1.9.9.13.1.3.1.1.14|2|14 +1.3.6.1.4.1.9.9.13.1.3.1.1.20|2|20 +1.3.6.1.4.1.9.9.13.1.3.1.1.21|2|21 +1.3.6.1.4.1.9.9.13.1.3.1.1.31|2|31 +1.3.6.1.4.1.9.9.13.1.3.1.2.3|4x|7468656972207a6f6d62696573207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.9.9.13.1.3.1.2.6|4x|64726976696e672064726976696e67206b657074206163746564 +1.3.6.1.4.1.9.9.13.1.3.1.2.8|4x|7a6f6d626965732062757420717561696e746c79 +1.3.6.1.4.1.9.9.13.1.3.1.2.11|4x|61637465642064726976696e67204a61646564206163746564 +1.3.6.1.4.1.9.9.13.1.3.1.2.13|4x|7a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.9.9.13.1.3.1.2.14|4|oxen +1.3.6.1.4.1.9.9.13.1.3.1.2.20|4x|6b657074206f78656e +1.3.6.1.4.1.9.9.13.1.3.1.2.21|4x|627574204a61646564207468656972 +1.3.6.1.4.1.9.9.13.1.3.1.2.31|4x|64726976696e6720717561696e746c79 +1.3.6.1.4.1.9.9.13.1.3.1.3.3|66|3930379735 +1.3.6.1.4.1.9.9.13.1.3.1.3.6|66|2258658671 +1.3.6.1.4.1.9.9.13.1.3.1.3.8|66|3213289584 +1.3.6.1.4.1.9.9.13.1.3.1.3.11|66|978410705 +1.3.6.1.4.1.9.9.13.1.3.1.3.13|66|2328456073 +1.3.6.1.4.1.9.9.13.1.3.1.3.14|66|952183581 +1.3.6.1.4.1.9.9.13.1.3.1.3.20|66|2877883263 +1.3.6.1.4.1.9.9.13.1.3.1.3.21|66|3953080519 +1.3.6.1.4.1.9.9.13.1.3.1.3.31|66|414726588 +1.3.6.1.4.1.9.9.13.1.3.1.4.3|2|9 +1.3.6.1.4.1.9.9.13.1.3.1.4.6|2|17 +1.3.6.1.4.1.9.9.13.1.3.1.4.8|2|1 +1.3.6.1.4.1.9.9.13.1.3.1.4.11|2|29 +1.3.6.1.4.1.9.9.13.1.3.1.4.13|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.4.14|2|10 +1.3.6.1.4.1.9.9.13.1.3.1.4.20|2|23 +1.3.6.1.4.1.9.9.13.1.3.1.4.21|2|13 +1.3.6.1.4.1.9.9.13.1.3.1.4.31|2|5 +1.3.6.1.4.1.9.9.13.1.3.1.5.3|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.5.6|2|7 +1.3.6.1.4.1.9.9.13.1.3.1.5.8|2|10 +1.3.6.1.4.1.9.9.13.1.3.1.5.11|2|26 +1.3.6.1.4.1.9.9.13.1.3.1.5.13|2|30 +1.3.6.1.4.1.9.9.13.1.3.1.5.14|2|9 +1.3.6.1.4.1.9.9.13.1.3.1.5.20|2|17 +1.3.6.1.4.1.9.9.13.1.3.1.5.21|2|21 +1.3.6.1.4.1.9.9.13.1.3.1.5.31|2|28 +1.3.6.1.4.1.9.9.13.1.3.1.6.3|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.6.6|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.8|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.11|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.13|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.6.14|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.20|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.21|2|4 +1.3.6.1.4.1.9.9.13.1.3.1.6.31|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.1.4|2|4 +1.3.6.1.4.1.9.9.13.1.4.1.1.6|2|6 +1.3.6.1.4.1.9.9.13.1.4.1.1.7|2|7 +1.3.6.1.4.1.9.9.13.1.4.1.1.16|2|16 +1.3.6.1.4.1.9.9.13.1.4.1.1.21|2|21 +1.3.6.1.4.1.9.9.13.1.4.1.1.22|2|22 +1.3.6.1.4.1.9.9.13.1.4.1.1.25|2|25 +1.3.6.1.4.1.9.9.13.1.4.1.1.27|2|27 +1.3.6.1.4.1.9.9.13.1.4.1.1.30|2|30 +1.3.6.1.4.1.9.9.13.1.4.1.2.4|4|fan_1 +1.3.6.1.4.1.9.9.13.1.4.1.2.6|4|fan_2 +1.3.6.1.4.1.9.9.13.1.4.1.2.7|4|fan_3 +1.3.6.1.4.1.9.9.13.1.4.1.2.16|4|fan_4 +1.3.6.1.4.1.9.9.13.1.4.1.2.22|4|fan_5 +1.3.6.1.4.1.9.9.13.1.4.1.2.25|4|fan_6 +1.3.6.1.4.1.9.9.13.1.4.1.2.27|4|fan_7 +1.3.6.1.4.1.9.9.13.1.4.1.2.30|4|fan_8 +1.3.6.1.4.1.9.9.13.1.4.1.3.4|2|3 +1.3.6.1.4.1.9.9.13.1.4.1.3.6|2|6 +1.3.6.1.4.1.9.9.13.1.4.1.3.7|2|3 +1.3.6.1.4.1.9.9.13.1.4.1.3.16|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.3.21|2|3 +1.3.6.1.4.1.9.9.13.1.4.1.3.22|2|6 +1.3.6.1.4.1.9.9.13.1.4.1.3.25|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.3.27|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.3.30|2|1 +1.3.6.1.4.1.9.9.13.1.5.1.1.0|2|0 +1.3.6.1.4.1.9.9.13.1.5.1.1.5|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.1.16|2|16 +1.3.6.1.4.1.9.9.13.1.5.1.1.20|2|20 +1.3.6.1.4.1.9.9.13.1.5.1.1.21|2|21 +1.3.6.1.4.1.9.9.13.1.5.1.1.22|2|22 +1.3.6.1.4.1.9.9.13.1.5.1.1.25|2|25 +1.3.6.1.4.1.9.9.13.1.5.1.1.26|2|26 +1.3.6.1.4.1.9.9.13.1.5.1.1.29|2|29 +1.3.6.1.4.1.9.9.13.1.5.1.1.31|2|31 +1.3.6.1.4.1.9.9.13.1.5.1.2.0|4x|666f7277617264206f78656e206163746564 +1.3.6.1.4.1.9.9.13.1.5.1.2.5|4|Jaded +1.3.6.1.4.1.9.9.13.1.5.1.2.16|4x|62757420717561696e746c792062757420717561696e746c79 +1.3.6.1.4.1.9.9.13.1.5.1.2.20|4|quaintly +1.3.6.1.4.1.9.9.13.1.5.1.2.21|4x|64726976696e6720717561696e746c7920616374656420627574207468656972 +1.3.6.1.4.1.9.9.13.1.5.1.2.22|4x|62757420627574 +1.3.6.1.4.1.9.9.13.1.5.1.2.25|4x|6163746564206b6570742064726976696e67206163746564 +1.3.6.1.4.1.9.9.13.1.5.1.2.26|4x|6f78656e207468656972204a61646564 +1.3.6.1.4.1.9.9.13.1.5.1.2.29|4x|746865697220746865697220616374656420666f7277617264 +1.3.6.1.4.1.9.9.13.1.5.1.2.31|4x|4a616465642064726976696e67207468656972207468656972207468656972 +1.3.6.1.4.1.9.9.13.1.5.1.3.0|2|1 +1.3.6.1.4.1.9.9.13.1.5.1.3.5|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.3.16|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.3.20|2|6 +1.3.6.1.4.1.9.9.13.1.5.1.3.21|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.3.22|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.3.25|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.3.26|2|6 +1.3.6.1.4.1.9.9.13.1.5.1.3.29|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.3.31|2|1 +1.3.6.1.4.1.9.9.13.1.5.1.4.0|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.4.5|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.4.16|2|4 +1.3.6.1.4.1.9.9.13.1.5.1.4.20|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.21|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.22|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.25|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.26|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.29|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.4.31|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.1|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.9|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.11|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.12|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.13|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.14|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.17|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.26|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.29|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.31|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.1|2|6 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.9|2|15 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.11|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.12|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.13|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.14|2|6 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.17|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.26|2|15 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.29|2|4 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.31|2|6 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.1|2|2 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.9|2|5 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.11|2|2 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.12|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.13|2|4 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.14|2|2 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.17|2|3 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.26|2|7 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.29|2|2 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.31|2|2 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.1|2|24 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.9|2|10 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.11|2|7 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.12|2|27 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.13|2|23 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.14|2|7 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.17|2|27 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.26|2|0 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.29|2|17 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.31|2|0 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.1|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.9|2|3 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.11|2|2 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.12|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.13|2|2 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.14|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.17|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.26|2|2 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.29|2|3 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.31|2|3 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.1|67|1900813911 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.9|67|25123729 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.11|67|3628093885 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.12|67|3324089695 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.13|67|4269533055 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.14|67|660607648 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.17|67|1101047558 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.26|67|3983603615 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.29|67|1292535257 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.31|67|3650464662 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.1|2|27 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.9|2|14 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.11|2|9 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.12|2|12 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.13|2|18 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.14|2|11 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.17|2|0 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.26|2|26 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.29|2|3 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.31|2|2 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.1|2|7 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.9|2|27 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.11|2|0 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.12|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.13|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.14|2|22 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.17|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.26|2|29 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.29|2|25 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.31|2|29 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.2.26|2|26 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.2.31|2|31 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.4.2|2|2 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.7.14|2|14 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.12.16|2|16 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.14.23|2|23 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.18.3|2|3 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.23.5|2|5 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.26.25|2|25 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.31.18|2|18 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.2.26|2|30 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.2.31|2|10 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.4.2|2|20 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.7.14|2|10 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.12.16|2|10 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.14.23|2|10 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.18.3|2|20 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.23.5|2|30 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.26.25|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.31.18|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.2.26|2|5 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.2.31|2|4 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.4.2|2|3 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.7.14|2|2 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.12.16|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.14.23|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.18.3|2|6 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.23.5|2|5 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.26.25|2|5 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.31.18|2|5 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.2.26|2|10 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.2.31|2|12 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.4.2|2|24 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.7.14|2|8 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.12.16|2|10 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.14.23|2|28 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.18.3|2|17 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.23.5|2|9 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.26.25|2|8 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.31.18|2|8 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.2.26|2|2 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.2.31|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.4.2|2|2 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.7.14|2|2 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.12.16|2|2 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.14.23|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.18.3|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.23.5|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.26.25|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.31.18|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.2.26|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.2.31|2|2 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.4.2|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.7.14|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.12.16|2|2 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.14.23|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.18.3|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.23.5|2|2 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.26.25|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.31.18|2|2 +1.3.6.1.4.1.9.9.91.1.3.1.0|2|2 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.3173|66|3173 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.6692|66|6692 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.11571|66|11571 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.19529|66|19529 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.30674|66|30674 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.38253|66|38253 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.52063|66|52063 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.54474|66|54474 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.55946|66|55946 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.63960|66|63960 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.3173|2|21 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.6692|2|6 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.11571|2|21 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.19529|2|31 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.30674|2|6 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.38253|2|31 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.52063|2|7 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.54474|2|25 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.55946|2|27 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.63960|2|25 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.3173|66|3 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.6692|66|34 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.11571|66|6 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.19529|66|56 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.30674|66|35 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.38253|66|87 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.52063|66|16 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.54474|66|6 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.55946|66|60 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.63960|66|8 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.3173|66|53 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.6692|66|77 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.11571|66|85 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.19529|66|79 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.30674|66|31 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.38253|66|86 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.52063|66|1 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.54474|66|90 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.55946|66|72 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.63960|66|70 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.3173|66|72 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.6692|66|74 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.11571|66|3 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.19529|66|8 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.30674|66|80 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.38253|66|52 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.52063|66|66 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.54474|66|27 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.55946|66|60 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.63960|66|91 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.3173|66|96 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.6692|66|41 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.11571|66|78 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.19529|66|65 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.30674|66|70 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.38253|66|19 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.52063|66|41 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.54474|66|25 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.55946|66|32 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.63960|66|5 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.3173|66|52 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.6692|66|64 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.11571|66|46 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.19529|66|19 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.30674|66|27 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.38253|66|34 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.52063|66|25 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.54474|66|94 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.55946|66|1 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.63960|66|55 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.3173|66|29 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.6692|66|57 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.11571|66|7 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.19529|66|8 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.30674|66|1 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.38253|66|23 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.52063|66|96 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.54474|66|62 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.55946|66|23 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.63960|66|87 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.3173|66|3050 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.6692|66|41115 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.11571|66|902 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.19529|66|42132 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.30674|66|42302 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.38253|66|14144 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.52063|66|55063 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.54474|66|52054 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.55946|66|42044 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.63960|66|41009 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.3173|66|14 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.6692|66|4 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.11571|66|51 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.19529|66|97 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.30674|66|52 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.38253|66|8 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.52063|66|25 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.54474|66|9 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.55946|66|95 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.63960|66|59 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.3173|66|15 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.6692|66|45 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.11571|66|48 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.19529|66|67 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.30674|66|66 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.38253|66|34 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.52063|66|76 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.54474|66|50 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.55946|66|21 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.63960|66|74 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.3173|66|59 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.6692|66|59 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.11571|66|71 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.19529|66|46 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.30674|66|18 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.38253|66|95 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.52063|66|35 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.54474|66|96 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.55946|66|36 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.63960|66|44 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.3173|66|94 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.6692|66|8 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.11571|66|43 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.19529|66|27 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.30674|66|82 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.38253|66|1 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.52063|66|24 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.54474|66|44 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.55946|66|6 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.63960|66|43 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.3173|66|14 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.6692|66|20 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.11571|66|19 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.19529|66|4 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.30674|66|49 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.38253|66|87 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.52063|66|55 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.54474|66|75 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.55946|66|25 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.63960|66|61 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.3173|66|82 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.6692|66|33 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.11571|66|45 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.19529|66|54 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.30674|66|33 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.38253|66|10 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.52063|66|21 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.54474|66|35 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.55946|66|78 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.63960|66|31 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.3173|66|71 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.6692|66|3 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.11571|66|95 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.19529|66|28 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.30674|66|74 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.38253|66|59 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.52063|66|8 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.54474|66|36 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.55946|66|40 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.63960|66|79 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.3173|70|3290693061297386538 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.6692|70|7564509971850013770 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.11571|70|15654260797702288865 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.19529|70|13010811470010516479 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.30674|70|6793566916088852728 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.38253|70|5393542058728323197 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.52063|70|2268170237084751317 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.54474|70|3579988003556919076 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.55946|70|4093858454825039165 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.63960|70|2077285200507819328 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.3173|66|78 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.6692|66|82 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.11571|66|19 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.19529|66|41 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.30674|66|52 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.38253|66|87 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.52063|66|48 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.54474|66|75 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.55946|66|17 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.63960|66|58 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.3173|70|5822992624363405166 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.6692|70|13445277955552209028 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.11571|70|892841109358583387 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.19529|70|8797706252171050151 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.30674|70|13873733226744658372 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.38253|70|6444852483924982709 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.52063|70|7716954844901249882 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.54474|70|6036102741467749802 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.55946|70|9312669560315346235 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.63960|70|10838219291701191875 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.3173|66|35 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.6692|66|77 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.11571|66|82 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.19529|66|70 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.30674|66|61 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.38253|66|20 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.52063|66|58 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.54474|66|42 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.55946|66|0 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.63960|66|68 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.3173|70|16056868659973483516 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.6692|70|10017909177997976087 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.11571|70|2230842307636527027 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.19529|70|17668750968545471270 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.30674|70|12763088877257047417 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.38253|70|2636521422820186079 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.52063|70|12357278839854731282 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.54474|70|17340027277602899307 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.55946|70|5676502918525025098 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.63960|70|2764302225969834845 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.3173|66|38 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.6692|66|20 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.11571|66|54 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.19529|66|21 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.30674|66|74 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.38253|66|26 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.52063|66|73 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.54474|66|42 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.55946|66|32 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.63960|66|5 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.3173|70|7121308621459330441 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.6692|70|3922534602980269925 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.11571|70|5138610210651117747 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.19529|70|4224528508121142168 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.30674|70|11889431121186442907 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.38253|70|17918794903249540226 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.52063|70|5663281812824895846 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.54474|70|14961337836425660842 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.55946|70|4987695838892114677 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.63960|70|5599291427942308324 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.3173|66|31199 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.6692|66|26726 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.11571|66|28498 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.19529|66|9348 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.30674|66|3520 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.38253|66|8160 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.52063|66|34590 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.54474|66|4270 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.55946|66|1405 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.63960|66|4595 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.3173|66|14445 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.6692|66|59502 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.11571|66|39108 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.19529|66|64322 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.30674|66|13001 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.38253|66|54851 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.52063|66|64862 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.54474|66|28436 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.55946|66|16405 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.63960|66|49738 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.3173|66|41359 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.6692|66|54594 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.11571|66|24124 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.19529|66|13619 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.30674|66|52103 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.38253|66|26931 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.52063|66|53441 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.54474|66|3524 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.55946|66|24054 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.63960|66|22153 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.3173|66|60 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.6692|66|73 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.11571|66|33 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.19529|66|86 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.30674|66|99 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.38253|66|25 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.52063|66|75 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.54474|66|31 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.55946|66|47 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.63960|66|41 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.3173|66|94 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.6692|66|55 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.11571|66|58 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.19529|66|6 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.30674|66|71 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.38253|66|11 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.52063|66|5 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.54474|66|94 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.55946|66|98 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.63960|66|42 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.3173|70|11308386979488134514 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.6692|70|12867401079824171768 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.11571|70|7163940979205272132 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.19529|70|12755693763463931220 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.30674|70|2897889008176006026 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.38253|70|11248166661806159715 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.52063|70|9436792442958722426 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.54474|70|17287484452982049608 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.55946|70|710960261146813662 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.63960|70|7288576621002403883 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.1834.53089|66|53089 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.5375.52445|66|52445 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.9984.29744|66|29744 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.11013.18610|66|18610 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.12674.11973|66|11973 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.32048.11203|66|11203 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.32435.37015|66|37015 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.37693.9209|66|9209 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.57718.34885|66|34885 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.65273.50850|66|50850 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.1834.53089|2|9 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.5375.52445|2|0 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.9984.29744|2|27 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.11013.18610|2|24 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.12674.11973|2|31 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.32048.11203|2|16 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.32435.37015|2|2 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.37693.9209|2|23 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.57718.34885|2|29 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.65273.50850|2|31 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.1834.53089|66|40 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.5375.52445|66|40 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.9984.29744|66|62 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.11013.18610|66|71 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.12674.11973|66|25 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.32048.11203|66|41 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.32435.37015|66|57 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.37693.9209|66|29 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.57718.34885|66|61 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.65273.50850|66|77 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.1834.53089|66|64 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.5375.52445|66|52 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.9984.29744|66|68 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.11013.18610|66|73 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.12674.11973|66|74 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.32048.11203|66|55 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.32435.37015|66|9 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.37693.9209|66|23 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.57718.34885|66|61 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.65273.50850|66|74 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.1834.53089|66|24 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.5375.52445|66|14 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.9984.29744|66|68 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.11013.18610|66|26 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.12674.11973|66|40 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.32048.11203|66|4 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.32435.37015|66|41 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.37693.9209|66|66 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.57718.34885|66|75 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.65273.50850|66|68 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.1834.53089|66|50700 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.5375.52445|66|33201 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.9984.29744|66|50882 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.11013.18610|66|63295 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.12674.11973|66|7338 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.32048.11203|66|30398 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.32435.37015|66|30125 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.37693.9209|66|37494 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.57718.34885|66|65153 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.65273.50850|66|63643 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.1834.53089|66|7224 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.5375.52445|66|20812 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.9984.29744|66|52999 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.11013.18610|66|45011 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.12674.11973|66|19495 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.32048.11203|66|7057 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.32435.37015|66|13812 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.37693.9209|66|44860 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.57718.34885|66|53378 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.65273.50850|66|10616 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.1834.53089|66|63098 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.5375.52445|66|8783 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.9984.29744|66|33504 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.11013.18610|66|56445 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.12674.11973|66|46255 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.32048.11203|66|27163 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.32435.37015|66|5048 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.37693.9209|66|9031 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.57718.34885|66|18761 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.65273.50850|66|217 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.5050.63191|66|63191 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.7738.13226|66|13226 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.16585.17703|66|17703 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.18884.41283|66|41283 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.31680.31158|66|31158 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.36563.52821|66|52821 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.36784.59513|66|59513 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.37198.27632|66|27632 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.57206.10814|66|10814 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.62814.61830|66|61830 +1.3.6.1.4.1.9.9.109.1.2.1.1.2.5050.63191|4x|717561696e746c79206f78656e +1.3.6.1.4.1.9.9.109.1.2.1.1.2.7738.13226|4x|64726976696e672064726976696e67207a6f6d62696573 +1.3.6.1.4.1.9.9.109.1.2.1.1.2.16585.17703|4|zombies +1.3.6.1.4.1.9.9.109.1.2.1.1.2.18884.41283|4|Jaded +1.3.6.1.4.1.9.9.109.1.2.1.1.2.31680.31158|4x|6f78656e20666f7277617264 +1.3.6.1.4.1.9.9.109.1.2.1.1.2.36563.52821|4x|616374656420666f7277617264207468656972204a61646564206b657074 +1.3.6.1.4.1.9.9.109.1.2.1.1.2.36784.59513|4|oxen +1.3.6.1.4.1.9.9.109.1.2.1.1.2.37198.27632|4x|7a6f6d62696573206f78656e206f78656e206b657074 +1.3.6.1.4.1.9.9.109.1.2.1.1.2.57206.10814|4x|7a6f6d62696573206f78656e206f78656e207468656972204a61646564 +1.3.6.1.4.1.9.9.109.1.2.1.1.2.62814.61830|4|forward +1.3.6.1.4.1.9.9.109.1.2.1.1.4.5050.63191|66|53017 +1.3.6.1.4.1.9.9.109.1.2.1.1.4.7738.13226|66|47056 +1.3.6.1.4.1.9.9.109.1.2.1.1.4.16585.17703|66|28361 +1.3.6.1.4.1.9.9.109.1.2.1.1.4.18884.41283|66|63054 +1.3.6.1.4.1.9.9.109.1.2.1.1.4.31680.31158|66|61067 +1.3.6.1.4.1.9.9.109.1.2.1.1.4.36563.52821|66|30259 +1.3.6.1.4.1.9.9.109.1.2.1.1.4.36784.59513|66|43768 +1.3.6.1.4.1.9.9.109.1.2.1.1.4.37198.27632|66|61208 +1.3.6.1.4.1.9.9.109.1.2.1.1.4.57206.10814|66|1009 +1.3.6.1.4.1.9.9.109.1.2.1.1.4.62814.61830|66|33434 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.5050.63191|67|4102798138 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.7738.13226|67|783933618 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.16585.17703|67|2842563957 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.18884.41283|67|2858093979 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.31680.31158|67|2520052764 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.36563.52821|67|800983262 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.36784.59513|67|3329122975 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.37198.27632|67|1709081370 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.57206.10814|67|1281736894 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.62814.61830|67|1155750717 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.5050.63191|66|2783 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.7738.13226|66|52771 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.16585.17703|66|28528 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.18884.41283|66|3682 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.31680.31158|66|21256 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.36563.52821|66|26879 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.36784.59513|66|39330 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.37198.27632|66|43770 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.57206.10814|66|55316 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.62814.61830|66|35911 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.1866.44348|66|74 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.7109.50119|66|38 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.8148.23147|66|20 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.12213.58938|66|31 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.12594.44400|66|11 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.16216.28383|66|11 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.43925.62310|66|50 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.50020.18771|66|83 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.51224.10286|66|59 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.62244.14693|66|33 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.1866.44348|66|8 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.7109.50119|66|80 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.8148.23147|66|43 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.12213.58938|66|7 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.12594.44400|66|4 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.16216.28383|66|29 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.43925.62310|66|41 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.50020.18771|66|81 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.51224.10286|66|44 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.62244.14693|66|84 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.1866.44348|65|3073572808 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.7109.50119|65|2372764780 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.8148.23147|65|425569613 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.12213.58938|65|429486184 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.12594.44400|65|2416997065 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.16216.28383|65|1656249 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.43925.62310|65|1384080842 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.50020.18771|65|3116372117 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.51224.10286|65|2059867987 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.62244.14693|65|2793792536 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.1866.44348|65|3132349595 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.7109.50119|65|3564734600 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.8148.23147|65|2053910930 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.12213.58938|65|2047793300 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.12594.44400|65|3730704944 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.16216.28383|65|1931040855 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.43925.62310|65|3915271815 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.50020.18771|65|318837471 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.51224.10286|65|3115812269 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.62244.14693|65|2024261 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.1866.44348|66|36 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.7109.50119|66|55 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.8148.23147|66|62 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.12213.58938|66|87 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.12594.44400|66|90 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.16216.28383|66|7 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.43925.62310|66|86 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.50020.18771|66|97 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.51224.10286|66|72 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.62244.14693|66|60 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.1866.44348|66|65 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.7109.50119|66|97 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.8148.23147|66|98 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.12213.58938|66|43 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.12594.44400|66|11 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.16216.28383|66|98 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.43925.62310|66|74 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.50020.18771|66|49 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.51224.10286|66|58 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.62244.14693|66|77 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.1866.44348|66|32 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.7109.50119|66|89 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.8148.23147|66|51 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.12213.58938|66|5 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.12594.44400|66|41 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.16216.28383|66|10 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.43925.62310|66|59 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.50020.18771|66|90 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.51224.10286|66|84 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.62244.14693|66|46 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.1866.44348|2|1 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.7109.50119|2|5 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.8148.23147|2|4 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.12213.58938|2|4 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.12594.44400|2|1 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.16216.28383|2|4 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.43925.62310|2|5 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.50020.18771|2|5 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.51224.10286|2|2 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.62244.14693|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.521.56978|66|70 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.9186.213|66|61 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.16268.20475|66|73 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.17759.61739|66|45 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.23689.18870|66|99 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.31815.54480|66|91 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.33103.50821|66|63 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.33432.18914|66|85 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.40030.24893|66|20 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.53251.36558|66|9 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.521.56978|66|37 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.9186.213|66|60 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.16268.20475|66|85 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.17759.61739|66|18 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.23689.18870|66|90 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.31815.54480|66|43 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.33103.50821|66|92 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.33432.18914|66|11 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.40030.24893|66|52 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.53251.36558|66|57 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.521.56978|65|3985134255 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.9186.213|65|3772121799 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.16268.20475|65|1070607610 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.17759.61739|65|219330067 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.23689.18870|65|3338621279 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.31815.54480|65|3899074880 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.33103.50821|65|237491262 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.33432.18914|65|2853860449 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.40030.24893|65|4002243710 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.53251.36558|65|349822375 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.521.56978|65|3005306269 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.9186.213|65|1559726237 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.16268.20475|65|2836214003 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.17759.61739|65|2502423132 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.23689.18870|65|2415987835 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.31815.54480|65|2980836764 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.33103.50821|65|2706830688 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.33432.18914|65|3252058731 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.40030.24893|65|722867811 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.53251.36558|65|2751229876 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.521.56978|66|43 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.9186.213|66|39 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.16268.20475|66|78 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.17759.61739|66|76 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.23689.18870|66|30 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.31815.54480|66|92 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.33103.50821|66|82 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.33432.18914|66|8 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.40030.24893|66|69 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.53251.36558|66|23 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.521.56978|66|51 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.9186.213|66|7 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.16268.20475|66|7 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.17759.61739|66|47 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.23689.18870|66|66 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.31815.54480|66|49 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.33103.50821|66|75 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.33432.18914|66|85 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.40030.24893|66|7 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.53251.36558|66|67 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.521.56978|66|24 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.9186.213|66|23 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.16268.20475|66|95 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.17759.61739|66|32 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.23689.18870|66|67 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.31815.54480|66|61 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.33103.50821|66|90 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.33432.18914|66|86 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.40030.24893|66|38 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.53251.36558|66|20 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.521.56978|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.9186.213|2|5 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.16268.20475|2|4 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.17759.61739|2|3 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.23689.18870|2|5 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.31815.54480|2|4 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.33103.50821|2|4 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.33432.18914|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.40030.24893|2|5 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.53251.36558|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.521.56978|2|3 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.9186.213|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.16268.20475|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.17759.61739|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.23689.18870|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.31815.54480|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.33103.50821|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.33432.18914|2|3 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.40030.24893|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.53251.36558|2|3 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.521.56978|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.9186.213|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.16268.20475|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.17759.61739|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.23689.18870|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.31815.54480|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.33103.50821|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.33432.18914|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.40030.24893|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.53251.36558|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.521.56978|65|1404850526 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.9186.213|65|2569030043 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.16268.20475|65|2615755782 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.17759.61739|65|4114438398 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.23689.18870|65|402464564 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.31815.54480|65|1935027795 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.33103.50821|65|1149247672 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.33432.18914|65|2004830638 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.40030.24893|65|3873710144 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.53251.36558|65|3018383535 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.521.56978|65|3859893368 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.9186.213|65|1072275487 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.16268.20475|65|3562728775 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.17759.61739|65|1677368507 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.23689.18870|65|233736144 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.31815.54480|65|1094635678 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.33103.50821|65|1396030876 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.33432.18914|65|3225776463 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.40030.24893|65|3757864776 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.53251.36558|65|2918462442 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.521.56978|2|5 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.9186.213|2|8 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.16268.20475|2|7 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.17759.61739|2|5 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.23689.18870|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.31815.54480|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.33103.50821|2|7 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.33432.18914|2|8 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.40030.24893|2|3 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.53251.36558|2|6 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.521.56978|4x|6163746564207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.9186.213|4x|4a61646564204a6164656420616374656420666f727761726420627574 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.16268.20475|4x|6275742064726976696e67204a61646564 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.17759.61739|4x|717561696e746c7920627574 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.23689.18870|4x|7a6f6d62696573207468656972 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.31815.54480|4x|7468656972206f78656e20627574 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.33103.50821|4x|717561696e746c79206f78656e2061637465642064726976696e67207468656972207a6f6d62696573 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.33432.18914|4x|64726976696e67207a6f6d6269657320717561696e746c79204a61646564207a6f6d62696573206f78656e207468656972206b657074207a6f6d62696573 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.40030.24893|4x|6b657074204a6164656420666f72776172642064726976696e67206b657074204a6164656420717561696e746c7920666f72776172642064726976696e67 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.53251.36558|4x|4a616465642064726976696e67206f78656e206f78656e +1.3.6.1.4.1.9.9.109.1.2.3.1.15.521.56978|66|17420 +1.3.6.1.4.1.9.9.109.1.2.3.1.15.9186.213|66|6080 +1.3.6.1.4.1.9.9.109.1.2.3.1.15.16268.20475|66|48019 +1.3.6.1.4.1.9.9.109.1.2.3.1.15.17759.61739|66|11499 +1.3.6.1.4.1.9.9.109.1.2.3.1.15.23689.18870|66|6646 +1.3.6.1.4.1.9.9.109.1.2.3.1.15.31815.54480|66|23119 +1.3.6.1.4.1.9.9.109.1.2.3.1.15.33103.50821|66|38203 +1.3.6.1.4.1.9.9.109.1.2.3.1.15.33432.18914|66|18223 +1.3.6.1.4.1.9.9.109.1.2.3.1.15.40030.24893|66|13394 +1.3.6.1.4.1.9.9.109.1.2.3.1.15.53251.36558|66|13721 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.521.56978|66|60 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.9186.213|66|45 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.16268.20475|66|23 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.17759.61739|66|67 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.23689.18870|66|55 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.31815.54480|66|37 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.33103.50821|66|65 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.33432.18914|66|32 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.40030.24893|66|89 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.53251.36558|66|18 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.521.56978|66|0 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.9186.213|66|0 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.16268.20475|66|30 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.17759.61739|66|24 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.23689.18870|66|16 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.31815.54480|66|45 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.33103.50821|66|64 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.33432.18914|66|65 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.40030.24893|66|51 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.53251.36558|66|14 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.521.56978|66|88 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.9186.213|66|31 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.16268.20475|66|14 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.17759.61739|66|57 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.23689.18870|66|15 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.31815.54480|66|19 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.33103.50821|66|59 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.33432.18914|66|51 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.40030.24893|66|77 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.53251.36558|66|26 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.521.56978|66|5 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.9186.213|66|72 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.16268.20475|66|41 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.17759.61739|66|29 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.23689.18870|66|46 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.31815.54480|66|79 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.33103.50821|66|37 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.33432.18914|66|89 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.40030.24893|66|83 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.53251.36558|66|76 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.521.56978|70|15369492500408286360 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.9186.213|70|12330355343026713797 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.16268.20475|70|17437390839202513998 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.17759.61739|70|9811260540752629666 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.23689.18870|70|13072214610462469522 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.31815.54480|70|1423405882536019946 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.33103.50821|70|15400502503770756719 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.33432.18914|70|7304503024638386968 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.40030.24893|70|11355283423476280692 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.53251.36558|70|11837713933155375260 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.521.56978|66|35 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.9186.213|66|22 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.16268.20475|66|56 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.17759.61739|66|21 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.23689.18870|66|20 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.31815.54480|66|40 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.33103.50821|66|53 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.33432.18914|66|72 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.40030.24893|66|56 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.53251.36558|66|84 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.521.56978|70|1683904979685991049 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.9186.213|70|4543762234773299100 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.16268.20475|70|3924239032867687955 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.17759.61739|70|1073280279628186147 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.23689.18870|70|14916624358112448342 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.31815.54480|70|6715466263362714741 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.33103.50821|70|9408298646379651638 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.33432.18914|70|17162364556639216384 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.40030.24893|70|5738469502311508448 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.53251.36558|70|1545963014044291141 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.521.56978|66|11931 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.9186.213|66|11912 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.16268.20475|66|3761 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.17759.61739|66|35961 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.23689.18870|66|31845 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.31815.54480|66|24022 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.33103.50821|66|36358 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.33432.18914|66|31994 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.40030.24893|66|51068 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.53251.36558|66|63318 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.521.56978|70|15106092275461330334 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.9186.213|70|9324617721311197732 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.16268.20475|70|14862389194142061143 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.17759.61739|70|18407004200157355835 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.23689.18870|70|6271100479507239456 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.31815.54480|70|9839873037955051683 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.33103.50821|70|4028288617253475855 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.33432.18914|70|6242349747842387500 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.40030.24893|70|5755084948408634474 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.53251.36558|70|9935343495073257974 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.521.56978|66|74 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.9186.213|66|73 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.16268.20475|66|54 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.17759.61739|66|93 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.23689.18870|66|81 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.31815.54480|66|98 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.33103.50821|66|14 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.33432.18914|66|36 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.40030.24893|66|66 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.53251.36558|66|56 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.521.56978|70|9896650306660630803 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.9186.213|70|12209985520629545135 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.16268.20475|70|11813056167543624066 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.17759.61739|70|16053000599576554597 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.23689.18870|70|18358834980803529052 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.31815.54480|70|16544096150339367917 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.33103.50821|70|538800042495191723 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.33432.18914|70|11857589791529122871 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.40030.24893|70|3461284989967045243 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.53251.36558|70|11968143525062600714 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.521.56978|66|20 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.9186.213|66|47 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.16268.20475|66|61 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.17759.61739|66|65 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.23689.18870|66|14 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.31815.54480|66|85 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.33103.50821|66|72 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.33432.18914|66|98 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.40030.24893|66|53 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.53251.36558|66|10 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.521.56978|70|12103757085096184490 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.9186.213|70|5843830361500064657 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.16268.20475|70|4835774082804735247 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.17759.61739|70|5816035763173934275 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.23689.18870|70|1164307549666630523 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.31815.54480|70|10990798822073582251 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.33103.50821|70|6299245436047061138 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.33432.18914|70|5381347318027744817 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.40030.24893|70|15746196839872846105 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.53251.36558|70|161883527798085410 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.521.56978|66|10 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.9186.213|66|68 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.16268.20475|66|23 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.17759.61739|66|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.23689.18870|66|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.31815.54480|66|6 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.33103.50821|66|98 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.33432.18914|66|82 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.40030.24893|66|16 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.53251.36558|66|5 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.521.56978|70|13400642414041499439 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.9186.213|70|11304661000508108741 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.16268.20475|70|4516390742446116438 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.17759.61739|70|712473139123490782 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.23689.18870|70|10451729541519214955 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.31815.54480|70|5875934278731916632 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.33103.50821|70|11851468923929155496 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.33432.18914|70|9706081057617541131 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.40030.24893|70|17274595320087563389 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.53251.36558|70|192402271146810407 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.4251.2|2|2 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.7251.3|2|3 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.13397.1|2|1 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.17564.2|2|2 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.23630.2|2|2 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.38929.2|2|2 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.47166.2|2|2 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.51708.1|2|1 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.57222.1|2|1 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.58800.3|2|3 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.4251.2|66|76 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.7251.3|66|86 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.13397.1|66|32 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.17564.2|66|24 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.23630.2|66|90 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.38929.2|66|78 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.47166.2|66|68 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.51708.1|66|72 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.57222.1|66|7 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.58800.3|66|63 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.4251.2|66|63285 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.7251.3|66|53546 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.13397.1|66|48639 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.17564.2|66|25925 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.23630.2|66|10236 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.38929.2|66|22952 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.47166.2|66|36386 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.51708.1|66|59094 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.57222.1|66|51439 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.58800.3|66|16098 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.4251.2|66|9 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.7251.3|66|33 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.13397.1|66|11 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.17564.2|66|13 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.23630.2|66|9 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.38929.2|66|73 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.47166.2|66|4 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.51708.1|66|39 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.57222.1|66|57 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.58800.3|66|51 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.4251.2|66|23417 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.7251.3|66|31195 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.13397.1|66|6720 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.17564.2|66|61155 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.23630.2|66|55792 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.38929.2|66|46253 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.47166.2|66|14058 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.51708.1|66|30560 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.57222.1|66|5784 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.58800.3|66|58585 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.4251.2|2|1 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.7251.3|2|4 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.13397.1|2|0 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.17564.2|2|6 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.23630.2|2|0 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.38929.2|2|6 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.47166.2|2|5 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.51708.1|2|0 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.57222.1|2|3 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.58800.3|2|2 +1.3.6.1.4.1.9.9.109.1.2.5.1.0|66|11 +1.3.6.1.4.1.9.9.109.1.2.5.2.0|66|33939 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.8025.50660|66|50660 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.11061.1486|66|1486 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.11069.43977|66|43977 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.28265.23860|66|23860 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.35051.14303|66|14303 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.36283.2959|66|2959 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.42204.45256|66|45256 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.42802.44838|66|44838 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.61447.37638|66|37638 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.64661.47730|66|47730 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.8025.50660|66|36170 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.11061.1486|66|42207 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.11069.43977|66|45614 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.28265.23860|66|22125 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.35051.14303|66|50421 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.36283.2959|66|27040 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.42204.45256|66|33126 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.42802.44838|66|8231 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.61447.37638|66|50415 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.64661.47730|66|46063 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.8025.50660|66|6 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.11061.1486|66|29 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.11069.43977|66|97 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.28265.23860|66|55 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.35051.14303|66|16 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.36283.2959|66|61 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.42204.45256|66|9 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.42802.44838|66|28 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.61447.37638|66|51 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.64661.47730|66|29 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.8025.50660|66|20 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.11061.1486|66|71 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.11069.43977|66|15 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.28265.23860|66|84 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.35051.14303|66|34 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.36283.2959|66|4 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.42204.45256|66|80 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.42802.44838|66|60 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.61447.37638|66|87 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.64661.47730|66|19 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.8025.50660|67|3675170886 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.11061.1486|67|4064616831 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.11069.43977|67|2380327368 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.28265.23860|67|1848980811 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.35051.14303|67|4065104924 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.36283.2959|67|3071143191 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.42204.45256|67|444804599 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.42802.44838|67|1792535979 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.61447.37638|67|3109485668 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.64661.47730|67|1798876415 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.16683.48895.35002|66|35002 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.18720.61718.52124|66|52124 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.28936.23834.14668|66|14668 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.32346.30789.55465|66|55465 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.34089.11388.40727|66|40727 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.42715.33675.61887|66|61887 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.47371.19788.37363|66|37363 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.52454.22896.12510|66|12510 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.59802.25402.15265|66|15265 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.60431.32033.63487|66|63487 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.16683.48895.35002|66|35138 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.18720.61718.52124|66|42332 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.28936.23834.14668|66|8205 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.32346.30789.55465|66|35610 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.34089.11388.40727|66|18655 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.42715.33675.61887|66|8792 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.47371.19788.37363|66|36603 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.52454.22896.12510|66|2686 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.59802.25402.15265|66|45827 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.60431.32033.63487|66|14166 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.16683.48895.35002|4x|717561696e746c79206b657074206f78656e206275742062757420616374656420627574207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.18720.61718.52124|4x|7a6f6d62696573206b65707420666f7277617264207a6f6d62696573206163746564 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.28936.23834.14668|4x|666f727761726420666f727761726420666f7277617264207a6f6d6269657320627574206f78656e +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.32346.30789.55465|4x|64726976696e67204a616465642064726976696e67206f78656e204a6164656420666f7277617264206f78656e204a61646564 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.34089.11388.40727|4x|6b65707420717561696e746c79206163746564206163746564207a6f6d62696573 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.42715.33675.61887|4x|7a6f6d6269657320666f7277617264206f78656e206f78656e206f78656e2064726976696e67206163746564207a6f6d62696573 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.47371.19788.37363|4x|6f78656e206b657074 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.52454.22896.12510|4x|4a61646564204a61646564204a616465642064726976696e67 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.59802.25402.15265|4|their +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.60431.32033.63487|4x|7a6f6d6269657320666f7277617264206f78656e20627574204a61646564206b657074206163746564204a6164656420627574 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.16683.48895.35002|67|2637003504 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.18720.61718.52124|67|1150051589 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.28936.23834.14668|67|1466560506 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.32346.30789.55465|67|3939095306 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.34089.11388.40727|67|845719368 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.42715.33675.61887|67|3896297407 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.47371.19788.37363|67|4222885604 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.52454.22896.12510|67|2519548440 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.59802.25402.15265|67|1179433578 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.60431.32033.63487|67|496965377 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.16683.48895.35002|66|44 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.18720.61718.52124|66|97 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.28936.23834.14668|66|97 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.32346.30789.55465|66|43 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.34089.11388.40727|66|34 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.42715.33675.61887|66|19 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.47371.19788.37363|66|67 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.52454.22896.12510|66|77 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.59802.25402.15265|66|55 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.60431.32033.63487|66|24 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.7952.54529.32151|66|32151 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.14170.35158.34064|66|34064 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.14353.1576.21498|66|21498 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.17391.9714.37697|66|37697 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.24300.49333.30531|66|30531 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.30111.4885.10757|66|10757 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.42279.44258.13673|66|13673 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.52782.7129.14290|66|14290 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.60066.45127.57709|66|57709 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.63585.42438.34574|66|34574 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.7952.54529.32151|4x|666f727761726420666f727761726420627574 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.14170.35158.34064|4x|64726976696e67207468656972 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.14353.1576.21498|4x|627574206163746564206163746564206f78656e206b657074206b657074 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.17391.9714.37697|4x|6b657074207468656972 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.24300.49333.30531|4x|64726976696e67206b657074 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.30111.4885.10757|4x|64726976696e6720746865697220627574204a61646564 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.42279.44258.13673|4x|6f78656e206b65707420666f7277617264206275742064726976696e67206b657074207a6f6d626965732064726976696e67 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.52782.7129.14290|4x|6f78656e20717561696e746c79206b657074207468656972207a6f6d626965732074686569722062757420616374656420627574 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.60066.45127.57709|4x|717561696e746c79207a6f6d626965732061637465642064726976696e672064726976696e6720627574206b657074 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.63585.42438.34574|4|their +1.3.6.1.4.1.9.9.109.1.3.1.1.3.7952.54529.32151|66|31 +1.3.6.1.4.1.9.9.109.1.3.1.1.3.14170.35158.34064|66|29 +1.3.6.1.4.1.9.9.109.1.3.1.1.3.14353.1576.21498|66|23 +1.3.6.1.4.1.9.9.109.1.3.1.1.3.17391.9714.37697|66|30 +1.3.6.1.4.1.9.9.109.1.3.1.1.3.24300.49333.30531|66|0 +1.3.6.1.4.1.9.9.109.1.3.1.1.3.30111.4885.10757|66|54 +1.3.6.1.4.1.9.9.109.1.3.1.1.3.42279.44258.13673|66|51 +1.3.6.1.4.1.9.9.109.1.3.1.1.3.52782.7129.14290|66|14 +1.3.6.1.4.1.9.9.109.1.3.1.1.3.60066.45127.57709|66|59 +1.3.6.1.4.1.9.9.109.1.3.1.1.3.63585.42438.34574|66|9 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.7952.54529.32151|2|17 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.14170.35158.34064|2|7 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.14353.1576.21498|2|7 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.17391.9714.37697|2|15 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.24300.49333.30531|2|9 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.30111.4885.10757|2|10 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.42279.44258.13673|2|8 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.52782.7129.14290|2|17 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.60066.45127.57709|2|16 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.63585.42438.34574|2|18 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.7952.54529.32151|6|1.3.6.1.3.3.168.226.157 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.14170.35158.34064|6|1.3.6.1.3.65.140.53.104.230.203 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.14353.1576.21498|6|1.3.6.1.3.88.83.240.128.167.91.123.99 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.17391.9714.37697|6|1.3.6.1.3.0 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.24300.49333.30531|6|1.3.6.1.3.78.9.202.14.13 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.30111.4885.10757|6|1.3.6.1.3.46.176.44.241 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.42279.44258.13673|6|1.3.6.1.3.204.130 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.52782.7129.14290|6|1.3.6.1.3.22.221.139.57.151.64.50.110.142 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.60066.45127.57709|6|1.3.6.1.3.216 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.63585.42438.34574|6|1.3.6.1.3.74 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.7952.54529.32151|66|45 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.14170.35158.34064|66|97 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.14353.1576.21498|66|34 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.17391.9714.37697|66|31 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.24300.49333.30531|66|6 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.30111.4885.10757|66|99 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.42279.44258.13673|66|43 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.52782.7129.14290|66|51 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.60066.45127.57709|66|69 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.63585.42438.34574|66|57 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.7952.54529.32151|66|31 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.14170.35158.34064|66|22 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.14353.1576.21498|66|40 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.17391.9714.37697|66|84 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.24300.49333.30531|66|28 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.30111.4885.10757|66|76 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.42279.44258.13673|66|70 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.52782.7129.14290|66|5 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.60066.45127.57709|66|82 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.63585.42438.34574|66|56 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.7952.54529.32151|66|72 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.14170.35158.34064|66|58 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.14353.1576.21498|66|94 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.17391.9714.37697|66|7 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.24300.49333.30531|66|14 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.30111.4885.10757|66|73 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.42279.44258.13673|66|22 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.52782.7129.14290|66|12 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.60066.45127.57709|66|45 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.63585.42438.34574|66|67 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.7952.54529.32151|70|12536855801311930303 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.14170.35158.34064|70|4572697853400027178 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.14353.1576.21498|70|6017610781913198128 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.17391.9714.37697|70|15327844184217226801 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.24300.49333.30531|70|6077808775831175044 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.30111.4885.10757|70|3569781898646775353 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.42279.44258.13673|70|13572180478614053874 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.52782.7129.14290|70|10311194709848961588 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.60066.45127.57709|70|15552960930157986525 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.63585.42438.34574|70|11961455335232963984 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.4213.48030.43695|66|43695 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.6649.54424.42686|66|42686 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.31268.54020.15551|66|15551 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.36202.12464.13656|66|13656 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.41829.3820.41289|66|41289 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.42482.53385.10498|66|10498 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.47976.31857.32544|66|32544 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.53156.45280.48785|66|48785 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.61984.49990.63540|66|63540 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.64988.4765.48638|66|48638 +1.3.6.1.4.1.9.9.109.1.4.1.1.2.4213.48030.43695|4|quaintly +1.3.6.1.4.1.9.9.109.1.4.1.1.2.6649.54424.42686|4x|616374656420717561696e746c79204a6164656420627574 +1.3.6.1.4.1.9.9.109.1.4.1.1.2.31268.54020.15551|4x|7a6f6d6269657320746865697220627574206163746564 +1.3.6.1.4.1.9.9.109.1.4.1.1.2.36202.12464.13656|4x|4a61646564206f78656e206f78656e +1.3.6.1.4.1.9.9.109.1.4.1.1.2.41829.3820.41289|4|quaintly +1.3.6.1.4.1.9.9.109.1.4.1.1.2.42482.53385.10498|4x|62757420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.9.9.109.1.4.1.1.2.47976.31857.32544|4x|666f7277617264206b657074204a61646564 +1.3.6.1.4.1.9.9.109.1.4.1.1.2.53156.45280.48785|4x|6163746564204a61646564 +1.3.6.1.4.1.9.9.109.1.4.1.1.2.61984.49990.63540|4x|4a6164656420627574206f78656e +1.3.6.1.4.1.9.9.109.1.4.1.1.2.64988.4765.48638|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.4213.48030.43695|66|5 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.6649.54424.42686|66|1 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.31268.54020.15551|66|87 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.36202.12464.13656|66|6 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.41829.3820.41289|66|85 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.42482.53385.10498|66|67 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.47976.31857.32544|66|56 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.53156.45280.48785|66|25 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.61984.49990.63540|66|93 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.64988.4765.48638|66|94 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.4213.48030.43695|66|20 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.6649.54424.42686|66|19 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.31268.54020.15551|66|40 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.36202.12464.13656|66|18 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.41829.3820.41289|66|16 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.42482.53385.10498|66|12 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.47976.31857.32544|66|31 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.53156.45280.48785|66|30 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.61984.49990.63540|66|65 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.64988.4765.48638|66|78 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.4213.48030.43695|66|54 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.6649.54424.42686|66|69 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.31268.54020.15551|66|68 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.36202.12464.13656|66|88 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.41829.3820.41289|66|83 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.42482.53385.10498|66|19 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.47976.31857.32544|66|59 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.53156.45280.48785|66|90 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.61984.49990.63540|66|94 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.64988.4765.48638|66|29 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.4213.48030.43695|66|91 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.6649.54424.42686|66|71 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.31268.54020.15551|66|38 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.36202.12464.13656|66|70 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.41829.3820.41289|66|36 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.42482.53385.10498|66|34 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.47976.31857.32544|66|65 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.53156.45280.48785|66|48 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.61984.49990.63540|66|86 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.64988.4765.48638|66|75 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.4213.48030.43695|66|31 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.6649.54424.42686|66|71 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.31268.54020.15551|66|59 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.36202.12464.13656|66|18 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.41829.3820.41289|66|16 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.42482.53385.10498|66|28 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.47976.31857.32544|66|60 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.53156.45280.48785|66|54 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.61984.49990.63540|66|77 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.64988.4765.48638|66|66 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.4213.48030.43695|65|2319398173 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.6649.54424.42686|65|3249403752 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.31268.54020.15551|65|2155949024 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.36202.12464.13656|65|2160808000 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.41829.3820.41289|65|1376302709 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.42482.53385.10498|65|3349394117 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.47976.31857.32544|65|3008149292 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.53156.45280.48785|65|4092415521 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.61984.49990.63540|65|3409411081 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.64988.4765.48638|65|3245997006 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.4213.48030.43695|65|3454673130 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.6649.54424.42686|65|793272003 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.31268.54020.15551|65|3654728742 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.36202.12464.13656|65|3957871964 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.41829.3820.41289|65|2134320096 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.42482.53385.10498|65|4144251809 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.47976.31857.32544|65|2191076942 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.53156.45280.48785|65|2196810675 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.61984.49990.63540|65|3650134545 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.64988.4765.48638|65|2391168365 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.4213.48030.43695|66|98 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.6649.54424.42686|66|88 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.31268.54020.15551|66|17 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.36202.12464.13656|66|24 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.41829.3820.41289|66|75 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.42482.53385.10498|66|45 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.47976.31857.32544|66|34 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.53156.45280.48785|66|85 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.61984.49990.63540|66|90 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.64988.4765.48638|66|13 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.4213.48030.43695|70|10771359123386452260 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.6649.54424.42686|70|6626829195585800715 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.31268.54020.15551|70|15590584626572032421 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.36202.12464.13656|70|3608045537640384570 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.41829.3820.41289|70|13156002808859145705 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.42482.53385.10498|70|9749715017365667806 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.47976.31857.32544|70|10496628384563594658 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.53156.45280.48785|70|10871113670784198631 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.61984.49990.63540|70|364988844010773600 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.64988.4765.48638|70|14872310483613750125 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.4213.48030.43695|66|31 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.6649.54424.42686|66|95 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.31268.54020.15551|66|73 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.36202.12464.13656|66|36 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.41829.3820.41289|66|52 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.42482.53385.10498|66|52 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.47976.31857.32544|66|15 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.53156.45280.48785|66|43 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.61984.49990.63540|66|27 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.64988.4765.48638|66|65 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.4213.48030.43695|70|17775814700657783740 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.6649.54424.42686|70|14498879412306746375 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.31268.54020.15551|70|17550750001047018929 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.36202.12464.13656|70|13563588664594938177 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.41829.3820.41289|70|13864198119835081503 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.42482.53385.10498|70|1629421407624276278 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.47976.31857.32544|70|17360179421514529509 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.53156.45280.48785|70|16167447620657197327 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.61984.49990.63540|70|4801744969275681230 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.64988.4765.48638|70|2906757100866319957 +1.3.6.1.4.1.9.9.117.1.1.1.1.1.1|2|5 +1.3.6.1.4.1.9.9.117.1.1.1.1.1.4|2|2 +1.3.6.1.4.1.9.9.117.1.1.1.1.1.5|2|7 +1.3.6.1.4.1.9.9.117.1.1.1.1.1.16|2|5 +1.3.6.1.4.1.9.9.117.1.1.1.1.1.18|2|2 +1.3.6.1.4.1.9.9.117.1.1.1.1.1.19|2|2 +1.3.6.1.4.1.9.9.117.1.1.1.1.1.24|2|3 +1.3.6.1.4.1.9.9.117.1.1.1.1.1.27|2|7 +1.3.6.1.4.1.9.9.117.1.1.1.1.2.1|4|zombies +1.3.6.1.4.1.9.9.117.1.1.1.1.2.4|4x|666f72776172642062757420627574 +1.3.6.1.4.1.9.9.117.1.1.1.1.2.5|4x|6b657074204a616465642064726976696e67 +1.3.6.1.4.1.9.9.117.1.1.1.1.2.16|4x|4a6164656420666f727761726420627574204a61646564204a616465642062757420717561696e746c79206f78656e20666f7277617264 +1.3.6.1.4.1.9.9.117.1.1.1.1.2.18|4|forward +1.3.6.1.4.1.9.9.117.1.1.1.1.2.19|4x|6f78656e20666f727761726420666f727761726420666f727761726420627574206f78656e20717561696e746c792062757420627574 +1.3.6.1.4.1.9.9.117.1.1.1.1.2.24|4x|666f7277617264206275742064726976696e67206f78656e +1.3.6.1.4.1.9.9.117.1.1.1.1.2.27|4|quaintly +1.3.6.1.4.1.9.9.117.1.1.1.1.3.1|2|13 +1.3.6.1.4.1.9.9.117.1.1.1.1.3.4|2|31 +1.3.6.1.4.1.9.9.117.1.1.1.1.3.5|2|6 +1.3.6.1.4.1.9.9.117.1.1.1.1.3.16|2|16 +1.3.6.1.4.1.9.9.117.1.1.1.1.3.18|2|31 +1.3.6.1.4.1.9.9.117.1.1.1.1.3.19|2|26 +1.3.6.1.4.1.9.9.117.1.1.1.1.3.24|2|12 +1.3.6.1.4.1.9.9.117.1.1.1.1.3.27|2|14 +1.3.6.1.4.1.9.9.117.1.1.1.1.4.1|2|6 +1.3.6.1.4.1.9.9.117.1.1.1.1.4.4|2|13 +1.3.6.1.4.1.9.9.117.1.1.1.1.4.5|2|2 +1.3.6.1.4.1.9.9.117.1.1.1.1.4.16|2|3 +1.3.6.1.4.1.9.9.117.1.1.1.1.4.18|2|11 +1.3.6.1.4.1.9.9.117.1.1.1.1.4.19|2|13 +1.3.6.1.4.1.9.9.117.1.1.1.1.4.24|2|29 +1.3.6.1.4.1.9.9.117.1.1.1.1.4.27|2|13 +1.3.6.1.4.1.9.9.117.1.1.1.1.5.1|2|3 +1.3.6.1.4.1.9.9.117.1.1.1.1.5.4|2|2 +1.3.6.1.4.1.9.9.117.1.1.1.1.5.5|2|7 +1.3.6.1.4.1.9.9.117.1.1.1.1.5.16|2|4 +1.3.6.1.4.1.9.9.117.1.1.1.1.5.18|2|1 +1.3.6.1.4.1.9.9.117.1.1.1.1.5.19|2|1 +1.3.6.1.4.1.9.9.117.1.1.1.1.5.24|2|4 +1.3.6.1.4.1.9.9.117.1.1.1.1.5.27|2|6 +1.3.6.1.4.1.9.9.117.1.1.1.1.6.1|2|4 +1.3.6.1.4.1.9.9.117.1.1.1.1.6.4|2|3 +1.3.6.1.4.1.9.9.117.1.1.1.1.6.5|2|1 +1.3.6.1.4.1.9.9.117.1.1.1.1.6.16|2|1 +1.3.6.1.4.1.9.9.117.1.1.1.1.6.18|2|3 +1.3.6.1.4.1.9.9.117.1.1.1.1.6.19|2|1 +1.3.6.1.4.1.9.9.117.1.1.1.1.6.24|2|2 +1.3.6.1.4.1.9.9.117.1.1.1.1.6.27|2|5 +1.3.6.1.4.1.9.9.117.1.1.1.1.7.1|2|1 +1.3.6.1.4.1.9.9.117.1.1.1.1.7.4|2|2 +1.3.6.1.4.1.9.9.117.1.1.1.1.7.5|2|4 +1.3.6.1.4.1.9.9.117.1.1.1.1.7.16|2|11 +1.3.6.1.4.1.9.9.117.1.1.1.1.7.18|2|23 +1.3.6.1.4.1.9.9.117.1.1.1.1.7.19|2|8 +1.3.6.1.4.1.9.9.117.1.1.1.1.7.24|2|12 +1.3.6.1.4.1.9.9.117.1.1.1.1.7.27|2|23 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.6|2|5 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.7|2|4 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.15|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.16|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.19|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.27|2|4 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.30|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.31|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.6|2|12 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.7|2|4 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.15|2|10 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.16|2|10 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.19|2|7 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.27|2|8 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.30|2|7 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.31|2|4 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.6|2|24 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.7|2|6 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.15|2|7 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.16|2|5 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.19|2|20 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.27|2|13 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.30|2|10 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.31|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.6|4x|6b6570742061637465642062757420627574206f78656e20627574 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.7|4x|7a6f6d62696573206b65707420616374656420717561696e746c79204a61646564206f78656e206b657074206f78656e +1.3.6.1.4.1.9.9.117.1.1.2.1.4.15|4x|627574207a6f6d62696573 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.16|4x|4a6164656420666f72776172642064726976696e672064726976696e67 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.19|4x|6163746564207a6f6d62696573206b65707420717561696e746c79 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.27|4x|6b65707420717561696e746c792064726976696e672074686569722062757420717561696e746c79 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.30|4x|717561696e746c79206163746564206f78656e207468656972204a616465642074686569722064726976696e67 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.31|4x|7468656972207468656972 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.6|2|30 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.7|2|25 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.15|2|6 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.16|2|25 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.19|2|17 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.27|2|19 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.30|2|25 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.31|2|2 +1.3.6.1.4.1.9.9.117.1.1.3.0|2|9 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.11|2|7 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.12|2|18 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.15|2|14 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.18|2|13 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.19|2|28 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.20|2|16 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.27|2|2 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.29|2|2 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.30|2|27 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.31|2|27 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.11|2|28 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.12|2|2 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.15|2|31 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.18|2|28 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.19|2|5 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.20|2|13 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.27|2|16 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.29|2|4 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.30|2|11 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.31|2|25 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.11|2|14 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.12|2|16 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.15|2|24 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.18|2|23 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.19|2|16 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.20|2|22 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.27|2|11 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.29|2|14 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.30|2|14 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.31|2|19 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.11|2|20 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.12|2|10 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.15|2|6 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.18|2|9 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.19|2|21 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.20|2|28 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.27|2|18 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.29|2|9 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.30|2|22 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.31|2|12 +1.3.6.1.4.1.9.9.117.1.1.5.0|66|61033 +1.3.6.1.4.1.9.9.117.1.2.1.1.1.5|2|1 +1.3.6.1.4.1.9.9.117.1.2.1.1.1.12|2|4 +1.3.6.1.4.1.9.9.117.1.2.1.1.1.14|2|2 +1.3.6.1.4.1.9.9.117.1.2.1.1.1.15|2|1 +1.3.6.1.4.1.9.9.117.1.2.1.1.1.20|2|2 +1.3.6.1.4.1.9.9.117.1.2.1.1.1.23|2|4 +1.3.6.1.4.1.9.9.117.1.2.1.1.1.29|2|4 +1.3.6.1.4.1.9.9.117.1.2.1.1.1.31|2|4 +1.3.6.1.4.1.9.9.117.1.2.1.1.2.5|2|25 +1.3.6.1.4.1.9.9.117.1.2.1.1.2.12|2|11 +1.3.6.1.4.1.9.9.117.1.2.1.1.2.14|2|14 +1.3.6.1.4.1.9.9.117.1.2.1.1.2.15|2|17 +1.3.6.1.4.1.9.9.117.1.2.1.1.2.20|2|8 +1.3.6.1.4.1.9.9.117.1.2.1.1.2.23|2|20 +1.3.6.1.4.1.9.9.117.1.2.1.1.2.29|2|8 +1.3.6.1.4.1.9.9.117.1.2.1.1.2.31|2|1 +1.3.6.1.4.1.9.9.117.1.2.1.1.3.5|2|12 +1.3.6.1.4.1.9.9.117.1.2.1.1.3.12|2|7 +1.3.6.1.4.1.9.9.117.1.2.1.1.3.14|2|16 +1.3.6.1.4.1.9.9.117.1.2.1.1.3.15|2|20 +1.3.6.1.4.1.9.9.117.1.2.1.1.3.20|2|19 +1.3.6.1.4.1.9.9.117.1.2.1.1.3.23|2|22 +1.3.6.1.4.1.9.9.117.1.2.1.1.3.29|2|7 +1.3.6.1.4.1.9.9.117.1.2.1.1.3.31|2|16 +1.3.6.1.4.1.9.9.117.1.2.1.1.4.5|67|2650613581 +1.3.6.1.4.1.9.9.117.1.2.1.1.4.12|67|3336923482 +1.3.6.1.4.1.9.9.117.1.2.1.1.4.14|67|1586519763 +1.3.6.1.4.1.9.9.117.1.2.1.1.4.15|67|843521143 +1.3.6.1.4.1.9.9.117.1.2.1.1.4.20|67|1728591606 +1.3.6.1.4.1.9.9.117.1.2.1.1.4.23|67|3380847573 +1.3.6.1.4.1.9.9.117.1.2.1.1.4.29|67|2507423664 +1.3.6.1.4.1.9.9.117.1.2.1.1.4.31|67|927620814 +1.3.6.1.4.1.9.9.117.1.2.1.1.5.5|67|1761743004 +1.3.6.1.4.1.9.9.117.1.2.1.1.5.12|67|3248124270 +1.3.6.1.4.1.9.9.117.1.2.1.1.5.14|67|1130741044 +1.3.6.1.4.1.9.9.117.1.2.1.1.5.15|67|3891424805 +1.3.6.1.4.1.9.9.117.1.2.1.1.5.20|67|1899751227 +1.3.6.1.4.1.9.9.117.1.2.1.1.5.23|67|1918671328 +1.3.6.1.4.1.9.9.117.1.2.1.1.5.29|67|4268202887 +1.3.6.1.4.1.9.9.117.1.2.1.1.5.31|67|3625784997 +1.3.6.1.4.1.9.9.117.1.2.1.1.6.5|4x|666f72776172642064726976696e672064726976696e6720666f7277617264206b657074206275742064726976696e67 +1.3.6.1.4.1.9.9.117.1.2.1.1.6.12|4x|717561696e746c7920717561696e746c7920627574207a6f6d62696573206f78656e204a61646564206163746564 +1.3.6.1.4.1.9.9.117.1.2.1.1.6.14|4x|7468656972207a6f6d62696573206f78656e2064726976696e67204a61646564206163746564206b657074204a61646564204a61646564 +1.3.6.1.4.1.9.9.117.1.2.1.1.6.15|4|Jaded +1.3.6.1.4.1.9.9.117.1.2.1.1.6.20|4x|6b657074207a6f6d6269657320666f7277617264207468656972 +1.3.6.1.4.1.9.9.117.1.2.1.1.6.23|4x|627574206b657074204a61646564204a61646564204a616465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.9.9.117.1.2.1.1.6.29|4x|6f78656e206f78656e206163746564204a61646564 +1.3.6.1.4.1.9.9.117.1.2.1.1.6.31|4|oxen +1.3.6.1.4.1.9.9.117.1.2.1.1.7.5|4x|62757420627574206b657074204a61646564 +1.3.6.1.4.1.9.9.117.1.2.1.1.7.12|4x|6f78656e207a6f6d62696573206f78656e +1.3.6.1.4.1.9.9.117.1.2.1.1.7.14|4x|666f7277617264207a6f6d6269657320746865697220717561696e746c79 +1.3.6.1.4.1.9.9.117.1.2.1.1.7.15|4x|746865697220627574206f78656e207468656972 +1.3.6.1.4.1.9.9.117.1.2.1.1.7.20|4x|746865697220717561696e746c79 +1.3.6.1.4.1.9.9.117.1.2.1.1.7.23|4|driving +1.3.6.1.4.1.9.9.117.1.2.1.1.7.29|4x|666f7277617264206b6570742064726976696e6720666f72776172642064726976696e67 +1.3.6.1.4.1.9.9.117.1.2.1.1.7.31|4x|4a61646564206f78656e206f78656e2064726976696e6720627574 +1.3.6.1.4.1.9.9.117.1.2.1.1.8.5|66|13876 +1.3.6.1.4.1.9.9.117.1.2.1.1.8.12|66|39581 +1.3.6.1.4.1.9.9.117.1.2.1.1.8.14|66|57038 +1.3.6.1.4.1.9.9.117.1.2.1.1.8.15|66|57543 +1.3.6.1.4.1.9.9.117.1.2.1.1.8.20|66|13652 +1.3.6.1.4.1.9.9.117.1.2.1.1.8.23|66|19160 +1.3.6.1.4.1.9.9.117.1.2.1.1.8.29|66|63177 +1.3.6.1.4.1.9.9.117.1.2.1.1.8.31|66|24546 +1.3.6.1.4.1.9.9.117.1.2.2.1.1.7|2|3 +1.3.6.1.4.1.9.9.117.1.2.2.1.1.11|2|1 +1.3.6.1.4.1.9.9.117.1.2.2.1.1.12|2|0 +1.3.6.1.4.1.9.9.117.1.2.2.1.1.13|2|2 +1.3.6.1.4.1.9.9.117.1.2.2.1.1.23|2|16 +1.3.6.1.4.1.9.9.117.1.2.2.1.1.27|2|1 +1.3.6.1.4.1.9.9.117.1.2.2.1.1.30|2|1 +1.3.6.1.4.1.9.9.117.1.2.2.1.2.7|4x|7a6f6d6269657320746865697220627574207a6f6d62696573207a6f6d62696573206163746564206b657074206b65707420717561696e746c79 +1.3.6.1.4.1.9.9.117.1.2.2.1.2.11|4|Jaded +1.3.6.1.4.1.9.9.117.1.2.2.1.2.12|4x|627574204a6164656420616374656420666f727761726420717561696e746c79206163746564 +1.3.6.1.4.1.9.9.117.1.2.2.1.2.13|4x|7a6f6d62696573206b65707420666f7277617264206f78656e20717561696e746c79206f78656e204a6164656420627574 +1.3.6.1.4.1.9.9.117.1.2.2.1.2.23|4x|7468656972206f78656e20717561696e746c792062757420717561696e746c79207468656972206b657074 +1.3.6.1.4.1.9.9.117.1.2.2.1.2.27|4x|627574207468656972207a6f6d62696573 +1.3.6.1.4.1.9.9.117.1.2.2.1.2.30|4x|627574206f78656e +1.3.6.1.4.1.9.9.117.1.2.3.1.1.8|2|2 +1.3.6.1.4.1.9.9.117.1.2.3.1.1.10|2|1 +1.3.6.1.4.1.9.9.117.1.2.3.1.1.13|2|1 +1.3.6.1.4.1.9.9.117.1.2.3.1.1.14|2|2 +1.3.6.1.4.1.9.9.117.1.2.3.1.1.20|2|2 +1.3.6.1.4.1.9.9.117.1.2.3.1.1.22|2|2 +1.3.6.1.4.1.9.9.117.1.2.3.1.1.23|2|1 +1.3.6.1.4.1.9.9.117.1.2.3.1.1.29|2|2 +1.3.6.1.4.1.9.9.117.1.3.1.0|2|2 +1.3.6.1.4.1.9.9.117.1.3.2.0|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.1|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.2|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.4|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.5|2|2 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.6|2|4 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.7|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.8|2|4 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.9|2|2 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.11|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.14|2|2 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.18|2|4 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.19|2|2 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.21|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.25|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.26|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.26|2|4 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.27|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.30|2|4 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.31|2|1 +1.3.6.1.4.1.9.9.117.1.5.1.1.1.3|2|4 +1.3.6.1.4.1.9.9.117.1.5.1.1.1.13|2|1 +1.3.6.1.4.1.9.9.117.1.5.1.1.1.17|2|1 +1.3.6.1.4.1.9.9.117.1.5.1.1.1.18|2|4 +1.3.6.1.4.1.9.9.117.1.5.1.1.1.22|2|1 +1.3.6.1.4.1.9.9.117.1.5.1.1.1.24|2|2 +1.3.6.1.4.1.9.9.117.1.5.1.1.1.26|2|2 +1.3.6.1.4.1.9.9.117.1.5.1.1.1.31|2|1 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.1.20536|66|20536 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.1.24360|66|24360 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.2.60246|66|60246 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.8.21110|66|21110 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.10.18774|66|18774 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.18.34118|66|34118 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.20.24263|66|24263 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.21.5548|66|5548 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.25.27317|66|27317 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.30.41629|66|41629 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.1.20536|2|2 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.1.24360|2|4 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.2.60246|2|3 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.8.21110|2|3 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.10.18774|2|1 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.18.34118|2|4 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.20.24263|2|3 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.21.5548|2|2 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.25.27317|2|3 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.30.41629|2|1 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.2.53113|66|53113 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.10.13370|66|13370 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.10.58710|66|58710 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.12.1018|66|1018 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.15.21396|66|21396 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.21.21751|66|21751 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.24.63359|66|63359 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.25.65482|66|65482 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.27.18113|66|18113 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.27.48504|66|48504 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.2.53113|2|9 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.10.13370|2|5 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.10.58710|2|10 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.12.1018|2|23 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.15.21396|2|21 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.21.21751|2|22 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.24.63359|2|20 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.25.65482|2|19 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.27.18113|2|31 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.27.48504|2|19 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.2.53113|2|1 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.10.13370|2|1 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.10.58710|2|1 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.12.1018|2|1 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.15.21396|2|1 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.21.21751|2|1 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.24.63359|2|1 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.25.65482|2|2 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.27.18113|2|2 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.27.48504|2|1 +1.3.6.1.4.1.9.9.117.1.7.1.1.1.1|66|25441 +1.3.6.1.4.1.9.9.117.1.7.1.1.1.4|66|6818 +1.3.6.1.4.1.9.9.117.1.7.1.1.1.5|66|44851 +1.3.6.1.4.1.9.9.117.1.7.1.1.1.9|66|33852 +1.3.6.1.4.1.9.9.117.1.7.1.1.1.12|66|35360 +1.3.6.1.4.1.9.9.117.1.7.1.1.1.15|66|17917 +1.3.6.1.4.1.9.9.117.1.7.1.1.1.20|66|55389 +1.3.6.1.4.1.9.9.117.1.7.1.1.1.23|66|48174 +1.3.6.1.4.1.9.9.117.1.7.1.1.1.30|66|30688 +1.3.6.1.4.1.9.9.117.1.7.1.1.2.1|2|2 +1.3.6.1.4.1.9.9.117.1.7.1.1.2.4|2|1 +1.3.6.1.4.1.9.9.117.1.7.1.1.2.5|2|1 +1.3.6.1.4.1.9.9.117.1.7.1.1.2.9|2|1 +1.3.6.1.4.1.9.9.117.1.7.1.1.2.12|2|1 +1.3.6.1.4.1.9.9.117.1.7.1.1.2.15|2|1 +1.3.6.1.4.1.9.9.117.1.7.1.1.2.20|2|2 +1.3.6.1.4.1.9.9.117.1.7.1.1.2.23|2|2 +1.3.6.1.4.1.9.9.117.1.7.1.1.2.30|2|1 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.9|66|41370 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.14|66|52003 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.16|66|46889 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.18|66|11590 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.19|66|46437 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.22|66|63065 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.23|66|48410 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.24|66|53620 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.26|66|11023 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.29|66|10318 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.9|2|1 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.14|2|2 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.16|2|2 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.18|2|2 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.19|2|1 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.22|2|1 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.23|2|2 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.24|2|1 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.26|2|2 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.29|2|1 +1.3.6.1.4.1.9.9.117.1.7.3.1.1.2|66|51721 +1.3.6.1.4.1.9.9.117.1.7.3.1.1.3|66|17281 +1.3.6.1.4.1.9.9.117.1.7.3.1.1.4|66|43398 +1.3.6.1.4.1.9.9.117.1.7.3.1.1.8|66|29967 +1.3.6.1.4.1.9.9.117.1.7.3.1.1.9|66|51797 +1.3.6.1.4.1.9.9.117.1.7.3.1.1.15|66|54490 +1.3.6.1.4.1.9.9.117.1.7.3.1.1.16|66|42031 +1.3.6.1.4.1.9.9.117.1.7.3.1.1.23|66|39972 +1.3.6.1.4.1.9.9.117.1.7.3.1.2.2|2|2 +1.3.6.1.4.1.9.9.117.1.7.3.1.2.3|2|1 +1.3.6.1.4.1.9.9.117.1.7.3.1.2.4|2|2 +1.3.6.1.4.1.9.9.117.1.7.3.1.2.8|2|1 +1.3.6.1.4.1.9.9.117.1.7.3.1.2.9|2|1 +1.3.6.1.4.1.9.9.117.1.7.3.1.2.15|2|1 +1.3.6.1.4.1.9.9.117.1.7.3.1.2.16|2|1 +1.3.6.1.4.1.9.9.117.1.7.3.1.2.23|2|1 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.1.1267|66|1267 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.3.629|66|629 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.3.1733|66|1733 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.7.3612|66|3612 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.17.3132|66|3132 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.18.4038|66|4038 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.19.2397|66|2397 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.21.1323|66|1323 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.29.894|66|894 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.29.3094|66|3094 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.1.1267|4x|7a6f6d626965732064726976696e67206b657074 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.3.629|4x|7a6f6d62696573206163746564206163746564204a61646564 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.3.1733|4x|7a6f6d62696573206163746564206f78656e2064726976696e67 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.7.3612|4x|62757420627574206f78656e207a6f6d62696573206f78656e20717561696e746c792064726976696e672062757420717561696e746c79 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.17.3132|4x|6b657074204a616465642074686569722064726976696e67 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.18.4038|4x|4a6164656420746865697220666f7277617264207468656972204a61646564 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.19.2397|4x|627574204a6164656420746865697220666f7277617264206b657074 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.21.1323|4x|717561696e746c7920717561696e746c79207468656972204a61646564204a61646564206f78656e2064726976696e67 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.29.894|4x|666f7277617264207a6f6d62696573 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.29.3094|4x|6b657074204a61646564207a6f6d62696573206f78656e206f78656e207468656972 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.1.1267|66|27855 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.3.629|66|39251 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.3.1733|66|40348 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.7.3612|66|5443 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.17.3132|66|54303 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.18.4038|66|25212 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.19.2397|66|39539 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.21.1323|66|20445 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.29.894|66|23276 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.29.3094|66|2788 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.1.1267|2|3 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.3.629|2|15 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.3.1733|2|15 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.7.3612|2|1 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.17.3132|2|22 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.18.4038|2|10 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.19.2397|2|18 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.21.1323|2|9 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.29.894|2|26 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.29.3094|2|25 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.1.1267|2|1 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.3.629|2|1 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.3.1733|2|2 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.7.3612|2|2 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.17.3132|2|2 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.18.4038|2|2 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.19.2397|2|1 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.21.1323|2|2 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.29.894|2|1 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.29.3094|2|2 +1.3.6.1.4.1.9.9.117.1.8.1.1.1.2|2|29 +1.3.6.1.4.1.9.9.117.1.8.1.1.1.8|2|12 +1.3.6.1.4.1.9.9.117.1.8.1.1.1.10|2|20 +1.3.6.1.4.1.9.9.117.1.8.1.1.1.17|2|12 +1.3.6.1.4.1.9.9.117.1.8.1.1.1.19|2|19 +1.3.6.1.4.1.9.9.117.1.8.1.1.1.21|2|14 +1.3.6.1.4.1.9.9.117.1.8.1.1.1.24|2|24 +1.3.6.1.4.1.9.9.117.1.8.1.1.1.30|2|24 +1.3.6.1.4.1.9.9.117.1.8.1.1.1.31|2|19 +1.3.6.1.4.1.9.9.117.1.8.2.1.1.1|2|6 +1.3.6.1.4.1.9.9.117.1.8.2.1.1.4|2|28 +1.3.6.1.4.1.9.9.117.1.8.2.1.1.9|2|1 +1.3.6.1.4.1.9.9.117.1.8.2.1.1.10|2|20 +1.3.6.1.4.1.9.9.117.1.8.2.1.1.11|2|24 +1.3.6.1.4.1.9.9.117.1.8.2.1.1.13|2|9 +1.3.6.1.4.1.9.9.117.1.8.2.1.1.16|2|20 +1.3.6.1.4.1.9.9.117.1.8.2.1.1.19|2|16 +1.3.6.1.4.1.9.9.117.1.8.2.1.1.31|2|30 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.5|66|9 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.11|66|79 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.12|66|89 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.14|66|34 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.15|66|74 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.23|66|24 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.25|66|88 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.29|66|35 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.5|66|12 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.11|66|5 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.12|66|1 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.14|66|44 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.15|66|0 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.23|66|90 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.25|66|34 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.29|66|82 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.5|66|32 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.11|66|26 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.12|66|32 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.14|66|9 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.15|66|66 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.23|66|14 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.25|66|47 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.29|66|41 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.5|65|4052283384 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.11|65|480980367 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.12|65|3508786834 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.14|65|2019443519 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.15|65|1342830392 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.23|65|1001601252 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.25|65|4065517905 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.29|65|2444516430 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.5|65|2440735346 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.11|65|3835354025 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.12|65|942612100 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.14|65|82195730 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.15|65|2249357700 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.23|65|3542170101 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.25|65|4072544026 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.29|65|2640427379 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.5|65|3650575792 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.11|65|235730517 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.12|65|3647367127 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.14|65|216797306 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.15|65|2972949031 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.23|65|2018345924 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.25|65|3912317367 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.29|65|791649334 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.5|65|4007008744 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.11|65|267618974 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.12|65|802656157 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.14|65|3644678682 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.15|65|3081748391 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.23|65|4173505379 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.25|65|2349555014 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.29|65|1369139610 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.5|65|1848680438 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.11|65|1790263457 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.12|65|4286087546 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.14|65|3666898480 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.15|65|164051556 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.23|65|135332959 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.25|65|1559022063 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.29|65|1334628187 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.5|65|150802315 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.11|65|4007752308 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.12|65|2608136927 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.14|65|1609551714 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.15|65|19654709 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.23|65|2364930933 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.25|65|2131515074 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.29|65|1624161988 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.5|65|628727095 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.11|65|3009408111 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.12|65|84186513 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.14|65|4119672180 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.15|65|3992483911 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.23|65|4099430526 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.25|65|731955654 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.29|65|1803277624 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.5|65|3859014027 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.11|65|308797052 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.12|65|3277252804 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.14|65|45074466 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.15|65|449876318 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.23|65|1461377563 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.25|65|2869435659 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.29|65|972661753 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.5|67|978493077 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.11|67|308489210 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.12|67|330041448 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.14|67|2865645358 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.15|67|2556292449 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.23|67|2168609144 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.25|67|63056245 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.29|67|2745518699 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.2|65|0 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.13|65|0 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.20|65|0 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.22|65|0 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.23|65|0 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.25|65|0 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.29|65|0 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.30|65|0 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.5|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.6|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.12|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.17|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.21|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.22|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.23|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.25|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.30|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.3.5|4|acted +1.3.6.1.4.1.9.9.276.1.1.2.1.3.6|4x|7468656972206f78656e20666f7277617264 +1.3.6.1.4.1.9.9.276.1.1.2.1.3.12|4x|616374656420666f727761726420627574206b657074 +1.3.6.1.4.1.9.9.276.1.1.2.1.3.17|4x|4a61646564207a6f6d626965732064726976696e67207a6f6d626965732064726976696e6720746865697220666f727761726420627574207a6f6d62696573 +1.3.6.1.4.1.9.9.276.1.1.2.1.3.21|4x|6f78656e2061637465642074686569722064726976696e67 +1.3.6.1.4.1.9.9.276.1.1.2.1.3.22|4x|6f78656e20666f7277617264206b657074206163746564 +1.3.6.1.4.1.9.9.276.1.1.2.1.3.23|4x|6163746564206b657074 +1.3.6.1.4.1.9.9.276.1.1.2.1.3.25|4x|746865697220666f7277617264206b657074207a6f6d62696573207468656972206b65707420717561696e746c79206f78656e204a61646564 +1.3.6.1.4.1.9.9.276.1.1.2.1.3.30|4x|4a61646564206f78656e204a61646564206f78656e206b657074204a6164656420666f7277617264207468656972204a61646564 +1.3.6.1.4.1.9.9.276.1.1.2.1.4.5|65|1387081831 +1.3.6.1.4.1.9.9.276.1.1.2.1.4.6|65|2496136103 +1.3.6.1.4.1.9.9.276.1.1.2.1.4.12|65|3136594009 +1.3.6.1.4.1.9.9.276.1.1.2.1.4.17|65|2162916259 +1.3.6.1.4.1.9.9.276.1.1.2.1.4.21|65|4292195881 +1.3.6.1.4.1.9.9.276.1.1.2.1.4.22|65|128378014 +1.3.6.1.4.1.9.9.276.1.1.2.1.4.23|65|1214810007 +1.3.6.1.4.1.9.9.276.1.1.2.1.4.25|65|2878318125 +1.3.6.1.4.1.9.9.276.1.1.2.1.4.30|65|139833157 +1.3.6.1.4.1.9.9.276.1.1.2.1.5.5|67|3626823156 +1.3.6.1.4.1.9.9.276.1.1.2.1.5.6|67|3287886572 +1.3.6.1.4.1.9.9.276.1.1.2.1.5.12|67|2628828927 +1.3.6.1.4.1.9.9.276.1.1.2.1.5.17|67|1930554714 +1.3.6.1.4.1.9.9.276.1.1.2.1.5.21|67|177625006 +1.3.6.1.4.1.9.9.276.1.1.2.1.5.22|67|2500042606 +1.3.6.1.4.1.9.9.276.1.1.2.1.5.23|67|917039755 +1.3.6.1.4.1.9.9.276.1.1.2.1.5.25|67|2469951495 +1.3.6.1.4.1.9.9.276.1.1.2.1.5.30|67|652857983 +1.3.6.1.4.1.9.9.276.1.1.2.1.6.5|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.6.6|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.6.12|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.6.17|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.6.21|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.6.22|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.6.23|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.6.25|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.6.30|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.7.5|2|40 +1.3.6.1.4.1.9.9.276.1.1.2.1.7.6|2|40 +1.3.6.1.4.1.9.9.276.1.1.2.1.7.12|2|40 +1.3.6.1.4.1.9.9.276.1.1.2.1.7.17|2|40 +1.3.6.1.4.1.9.9.276.1.1.2.1.7.21|2|40 +1.3.6.1.4.1.9.9.276.1.1.2.1.7.22|2|40 +1.3.6.1.4.1.9.9.276.1.1.2.1.7.23|2|40 +1.3.6.1.4.1.9.9.276.1.1.2.1.7.25|2|40 +1.3.6.1.4.1.9.9.276.1.1.2.1.7.30|2|40 +1.3.6.1.4.1.9.9.276.1.1.2.1.8.5|4x|7468656972207468656972207a6f6d62696573207a6f6d62696573206b657074 +1.3.6.1.4.1.9.9.276.1.1.2.1.8.6|4|zombies +1.3.6.1.4.1.9.9.276.1.1.2.1.8.12|4|Jaded +1.3.6.1.4.1.9.9.276.1.1.2.1.8.17|4x|7a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.9.9.276.1.1.2.1.8.21|4x|64726976696e67206b6570742064726976696e67 +1.3.6.1.4.1.9.9.276.1.1.2.1.8.22|4x|666f727761726420717561696e746c79206b6570742064726976696e67 +1.3.6.1.4.1.9.9.276.1.1.2.1.8.23|4x|616374656420666f7277617264204a61646564 +1.3.6.1.4.1.9.9.276.1.1.2.1.8.25|4|oxen +1.3.6.1.4.1.9.9.276.1.1.2.1.8.30|4x|6f78656e2064726976696e67206b657074206163746564206163746564 +1.3.6.1.4.1.9.9.276.1.1.2.1.9.5|2|10 +1.3.6.1.4.1.9.9.276.1.1.2.1.9.6|2|15 +1.3.6.1.4.1.9.9.276.1.1.2.1.9.12|2|16 +1.3.6.1.4.1.9.9.276.1.1.2.1.9.17|2|28 +1.3.6.1.4.1.9.9.276.1.1.2.1.9.21|2|14 +1.3.6.1.4.1.9.9.276.1.1.2.1.9.22|2|27 +1.3.6.1.4.1.9.9.276.1.1.2.1.9.23|2|11 +1.3.6.1.4.1.9.9.276.1.1.2.1.9.25|2|18 +1.3.6.1.4.1.9.9.276.1.1.2.1.9.30|2|29 +1.3.6.1.4.1.9.9.276.1.1.2.1.10.5|4x|6b657074206163746564204a61646564206163746564206f78656e +1.3.6.1.4.1.9.9.276.1.1.2.1.10.6|4x|4a61646564206163746564206b6570742064726976696e672062757420627574206b657074 +1.3.6.1.4.1.9.9.276.1.1.2.1.10.12|4x|6f78656e204a616465642064726976696e67207a6f6d62696573206b657074 +1.3.6.1.4.1.9.9.276.1.1.2.1.10.17|4x|61637465642064726976696e6720666f7277617264 +1.3.6.1.4.1.9.9.276.1.1.2.1.10.21|4|Jaded +1.3.6.1.4.1.9.9.276.1.1.2.1.10.22|4x|6b657074204a61646564206f78656e206f78656e20616374656420666f7277617264207a6f6d62696573207a6f6d62696573206f78656e +1.3.6.1.4.1.9.9.276.1.1.2.1.10.23|4x|64726976696e672064726976696e6720717561696e746c79 +1.3.6.1.4.1.9.9.276.1.1.2.1.10.25|4x|64726976696e67207a6f6d62696573 +1.3.6.1.4.1.9.9.276.1.1.2.1.10.30|4x|7a6f6d62696573206b65707420717561696e746c7920627574206163746564 +1.3.6.1.4.1.9.9.276.1.1.2.1.11.5|66|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.11.6|66|20 +1.3.6.1.4.1.9.9.276.1.1.2.1.11.12|66|0 +1.3.6.1.4.1.9.9.276.1.1.2.1.11.17|66|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.11.21|66|72 +1.3.6.1.4.1.9.9.276.1.1.2.1.11.22|66|87 +1.3.6.1.4.1.9.9.276.1.1.2.1.11.23|66|3 +1.3.6.1.4.1.9.9.276.1.1.2.1.11.25|66|95 +1.3.6.1.4.1.9.9.276.1.1.2.1.11.30|66|96 +1.3.6.1.4.1.9.9.276.1.1.2.1.12.5|66|97 +1.3.6.1.4.1.9.9.276.1.1.2.1.12.6|66|50 +1.3.6.1.4.1.9.9.276.1.1.2.1.12.12|66|59 +1.3.6.1.4.1.9.9.276.1.1.2.1.12.17|66|76 +1.3.6.1.4.1.9.9.276.1.1.2.1.12.21|66|51 +1.3.6.1.4.1.9.9.276.1.1.2.1.12.22|66|48 +1.3.6.1.4.1.9.9.276.1.1.2.1.12.23|66|86 +1.3.6.1.4.1.9.9.276.1.1.2.1.12.25|66|60 +1.3.6.1.4.1.9.9.276.1.1.2.1.12.30|66|13 +1.3.6.1.4.1.9.9.276.1.1.2.1.13.5|4x|627574207a6f6d62696573204a6164656420717561696e746c7920666f7277617264204a61646564 +1.3.6.1.4.1.9.9.276.1.1.2.1.13.6|4x|6f78656e206f78656e204a6164656420717561696e746c79206b657074 +1.3.6.1.4.1.9.9.276.1.1.2.1.13.12|4x|7a6f6d6269657320717561696e746c792064726976696e67207468656972204a6164656420717561696e746c79 +1.3.6.1.4.1.9.9.276.1.1.2.1.13.17|4x|627574204a61646564204a61646564206b657074204a61646564207a6f6d62696573206b657074 +1.3.6.1.4.1.9.9.276.1.1.2.1.13.21|4x|6f78656e206f78656e207a6f6d62696573 +1.3.6.1.4.1.9.9.276.1.1.2.1.13.22|4x|7a6f6d62696573206b65707420666f7277617264 +1.3.6.1.4.1.9.9.276.1.1.2.1.13.23|4x|6b65707420666f727761726420717561696e746c79 +1.3.6.1.4.1.9.9.276.1.1.2.1.13.25|4x|627574206f78656e206163746564206b6570742064726976696e672064726976696e67 +1.3.6.1.4.1.9.9.276.1.1.2.1.13.30|4x|666f727761726420746865697220627574206f78656e20666f727761726420666f7277617264206b65707420746865697220717561696e746c79 +1.3.6.1.4.1.9.9.276.1.1.2.1.14.5|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.14.6|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.14.12|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.14.17|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.14.21|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.14.22|2|4 +1.3.6.1.4.1.9.9.276.1.1.2.1.14.23|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.14.25|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.14.30|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.15.5|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.15.6|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.15.12|2|3 +1.3.6.1.4.1.9.9.276.1.1.2.1.15.17|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.15.21|2|4 +1.3.6.1.4.1.9.9.276.1.1.2.1.15.22|2|3 +1.3.6.1.4.1.9.9.276.1.1.2.1.15.23|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.15.25|2|4 +1.3.6.1.4.1.9.9.276.1.1.2.1.15.30|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.16.5|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.16.6|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.16.12|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.16.17|2|3 +1.3.6.1.4.1.9.9.276.1.1.2.1.16.21|2|3 +1.3.6.1.4.1.9.9.276.1.1.2.1.16.22|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.16.23|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.16.25|2|3 +1.3.6.1.4.1.9.9.276.1.1.2.1.16.30|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.17.5|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.17.6|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.17.12|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.17.17|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.17.21|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.17.22|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.17.23|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.17.25|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.17.30|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.18.5|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.18.6|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.18.12|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.18.17|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.18.21|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.18.22|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.18.23|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.18.25|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.18.30|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.19.5|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.19.6|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.19.12|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.19.17|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.19.21|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.19.22|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.19.23|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.19.25|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.19.30|2|2 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.1.16719|66|16719 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.1.39424|66|39424 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.4.45280|66|45280 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.7.95|66|95 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.10.52561|66|52561 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.12.14466|66|14466 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.13.56581|66|56581 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.17.63266|66|63266 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.18.7326|66|7326 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.20.26270|66|26270 +1.3.6.1.4.1.9.9.276.1.1.3.1.2.1.16719|4x|4a61646564206b65707420616374656420717561696e746c792064726976696e672064726976696e67207468656972206163746564206163746564 +1.3.6.1.4.1.9.9.276.1.1.3.1.2.1.39424|4x|6163746564206b657074204a61646564206163746564204a61646564204a6164656420616374656420717561696e746c79 +1.3.6.1.4.1.9.9.276.1.1.3.1.2.4.45280|4x|64726976696e6720666f7277617264 +1.3.6.1.4.1.9.9.276.1.1.3.1.2.7.95|4x|6b657074207468656972206163746564 +1.3.6.1.4.1.9.9.276.1.1.3.1.2.10.52561|4x|62757420666f7277617264206b6570742064726976696e6720717561696e746c79206b657074207468656972206b657074204a61646564 +1.3.6.1.4.1.9.9.276.1.1.3.1.2.12.14466|4x|627574206f78656e206f78656e204a616465642064726976696e67206b65707420666f727761726420717561696e746c79204a61646564 +1.3.6.1.4.1.9.9.276.1.1.3.1.2.13.56581|4x|7a6f6d62696573206f78656e +1.3.6.1.4.1.9.9.276.1.1.3.1.2.17.63266|4x|74686569722064726976696e6720666f7277617264207a6f6d62696573 +1.3.6.1.4.1.9.9.276.1.1.3.1.2.18.7326|4x|7a6f6d62696573206f78656e206163746564 +1.3.6.1.4.1.9.9.276.1.1.3.1.2.20.26270|4|kept +1.3.6.1.4.1.9.9.276.1.1.3.1.3.1.16719|4x|7468656972206163746564206f78656e2064726976696e67207468656972 +1.3.6.1.4.1.9.9.276.1.1.3.1.3.1.39424|4|Jaded +1.3.6.1.4.1.9.9.276.1.1.3.1.3.4.45280|4|acted +1.3.6.1.4.1.9.9.276.1.1.3.1.3.7.95|4x|64726976696e67206163746564206b6570742074686569722064726976696e67206f78656e +1.3.6.1.4.1.9.9.276.1.1.3.1.3.10.52561|4|forward +1.3.6.1.4.1.9.9.276.1.1.3.1.3.12.14466|4x|6b657074207a6f6d6269657320627574 +1.3.6.1.4.1.9.9.276.1.1.3.1.3.13.56581|4x|4a61646564206f78656e206163746564206163746564 +1.3.6.1.4.1.9.9.276.1.1.3.1.3.17.63266|4x|6b657074206f78656e206b6570742064726976696e6720666f7277617264206b657074 +1.3.6.1.4.1.9.9.276.1.1.3.1.3.18.7326|4|Jaded +1.3.6.1.4.1.9.9.276.1.1.3.1.3.20.26270|4x|666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.1.16719|4x|666f7277617264204a6164656420717561696e746c79 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.1.39424|4x|7a6f6d62696573204a6164656420666f72776172642064726976696e67207468656972206f78656e20666f7277617264 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.4.45280|4x|717561696e746c79204a61646564204a61646564206163746564 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.7.95|4x|717561696e746c7920627574206f78656e204a61646564206f78656e20746865697220666f7277617264207a6f6d62696573 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.10.52561|4x|6f78656e2061637465642064726976696e67206b657074206b657074206b6570742061637465642064726976696e67 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.12.14466|4x|64726976696e67206f78656e206f78656e207a6f6d62696573204a6164656420717561696e746c79206b657074207468656972 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.13.56581|4x|7a6f6d6269657320666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.17.63266|4x|666f72776172642064726976696e672062757420666f7277617264207468656972204a616465642064726976696e672064726976696e67 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.18.7326|4x|627574207a6f6d626965732064726976696e67207468656972206b6570742064726976696e6720746865697220666f7277617264 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.20.26270|4x|746865697220627574 +1.3.6.1.4.1.9.9.276.1.1.3.1.5.1.16719|4|acted +1.3.6.1.4.1.9.9.276.1.1.3.1.5.1.39424|4|zombies +1.3.6.1.4.1.9.9.276.1.1.3.1.5.4.45280|4|kept +1.3.6.1.4.1.9.9.276.1.1.3.1.5.7.95|4|kept +1.3.6.1.4.1.9.9.276.1.1.3.1.5.10.52561|4|Jaded +1.3.6.1.4.1.9.9.276.1.1.3.1.5.12.14466|4|zombies +1.3.6.1.4.1.9.9.276.1.1.3.1.5.13.56581|4|acted +1.3.6.1.4.1.9.9.276.1.1.3.1.5.17.63266|4|acted +1.3.6.1.4.1.9.9.276.1.1.3.1.5.18.7326|4|quaintly +1.3.6.1.4.1.9.9.276.1.1.3.1.5.20.26270|4|quaintly +1.3.6.1.4.1.9.9.276.1.1.4.1.1.15|70|6515459484201652903 +1.3.6.1.4.1.9.9.276.1.1.4.1.1.20|70|6525228104465243106 +1.3.6.1.4.1.9.9.276.1.1.4.1.1.21|70|8074084556062809507 +1.3.6.1.4.1.9.9.276.1.1.4.1.1.22|70|3879828243818155564 +1.3.6.1.4.1.9.9.276.1.1.4.1.1.24|70|8254895130039056501 +1.3.6.1.4.1.9.9.276.1.1.4.1.1.26|70|12603496095441413057 +1.3.6.1.4.1.9.9.276.1.1.4.1.1.30|70|10909634483436674430 +1.3.6.1.4.1.9.9.276.1.1.4.1.2.15|70|17560370720518583073 +1.3.6.1.4.1.9.9.276.1.1.4.1.2.20|70|14771198156831440445 +1.3.6.1.4.1.9.9.276.1.1.4.1.2.21|70|4516615649348040507 +1.3.6.1.4.1.9.9.276.1.1.4.1.2.22|70|5398256853253084550 +1.3.6.1.4.1.9.9.276.1.1.4.1.2.24|70|12234278304657512290 +1.3.6.1.4.1.9.9.276.1.1.4.1.2.26|70|5542681715530028671 +1.3.6.1.4.1.9.9.276.1.1.4.1.2.30|70|7628466436218350687 +1.3.6.1.4.1.9.9.276.1.1.4.1.3.15|70|8177103286894496983 +1.3.6.1.4.1.9.9.276.1.1.4.1.3.20|70|12130035877430502410 +1.3.6.1.4.1.9.9.276.1.1.4.1.3.21|70|11868242152478329003 +1.3.6.1.4.1.9.9.276.1.1.4.1.3.22|70|17611012933324514101 +1.3.6.1.4.1.9.9.276.1.1.4.1.3.24|70|14387955517091274482 +1.3.6.1.4.1.9.9.276.1.1.4.1.3.26|70|12736718849002214539 +1.3.6.1.4.1.9.9.276.1.1.4.1.3.30|70|11254183245162288544 +1.3.6.1.4.1.9.9.276.1.1.4.1.4.15|70|13985360553412293610 +1.3.6.1.4.1.9.9.276.1.1.4.1.4.20|70|3367143004283872827 +1.3.6.1.4.1.9.9.276.1.1.4.1.4.21|70|12488196907822745031 +1.3.6.1.4.1.9.9.276.1.1.4.1.4.22|70|8001376348978922169 +1.3.6.1.4.1.9.9.276.1.1.4.1.4.24|70|18394891919657574353 +1.3.6.1.4.1.9.9.276.1.1.4.1.4.26|70|46777343186426235 +1.3.6.1.4.1.9.9.276.1.1.4.1.4.30|70|12772949408748318645 +1.3.6.1.4.1.9.9.276.1.1.4.1.5.15|70|15911958525521007897 +1.3.6.1.4.1.9.9.276.1.1.4.1.5.20|70|4658975256539769435 +1.3.6.1.4.1.9.9.276.1.1.4.1.5.21|70|16870543779188523898 +1.3.6.1.4.1.9.9.276.1.1.4.1.5.22|70|2933302758620621634 +1.3.6.1.4.1.9.9.276.1.1.4.1.5.24|70|10920144256388106712 +1.3.6.1.4.1.9.9.276.1.1.4.1.5.26|70|4188203579231500517 +1.3.6.1.4.1.9.9.276.1.1.4.1.5.30|70|5630120856472611172 +1.3.6.1.4.1.9.9.276.1.1.4.1.6.15|70|726189341999283452 +1.3.6.1.4.1.9.9.276.1.1.4.1.6.20|70|14885206523225807307 +1.3.6.1.4.1.9.9.276.1.1.4.1.6.21|70|17183558753808646342 +1.3.6.1.4.1.9.9.276.1.1.4.1.6.22|70|13449113140515066127 +1.3.6.1.4.1.9.9.276.1.1.4.1.6.24|70|11727141470103305940 +1.3.6.1.4.1.9.9.276.1.1.4.1.6.26|70|6877703282565992678 +1.3.6.1.4.1.9.9.276.1.1.4.1.6.30|70|3715117028720478102 +1.3.6.1.4.1.9.9.276.1.1.4.1.7.15|70|16539956966645395556 +1.3.6.1.4.1.9.9.276.1.1.4.1.7.20|70|6753588002541984324 +1.3.6.1.4.1.9.9.276.1.1.4.1.7.21|70|1921495791084456864 +1.3.6.1.4.1.9.9.276.1.1.4.1.7.22|70|216319505008223941 +1.3.6.1.4.1.9.9.276.1.1.4.1.7.24|70|14594123502315176499 +1.3.6.1.4.1.9.9.276.1.1.4.1.7.26|70|4597017118903375793 +1.3.6.1.4.1.9.9.276.1.1.4.1.7.30|70|18185946407597153850 +1.3.6.1.4.1.9.9.276.1.1.4.1.8.15|70|3135026258998182869 +1.3.6.1.4.1.9.9.276.1.1.4.1.8.20|70|6488324158989841839 +1.3.6.1.4.1.9.9.276.1.1.4.1.8.21|70|11605005648862390544 +1.3.6.1.4.1.9.9.276.1.1.4.1.8.22|70|8767339550959985057 +1.3.6.1.4.1.9.9.276.1.1.4.1.8.24|70|14965930179802757449 +1.3.6.1.4.1.9.9.276.1.1.4.1.8.26|70|17432541913022086602 +1.3.6.1.4.1.9.9.276.1.1.4.1.8.30|70|12385348985836041022 +1.3.6.1.4.1.9.9.276.1.2.1.0|2|4 +1.3.6.1.4.1.9.9.276.1.2.2.0|4x|6275742064726976696e6720666f7277617264204a6164656420666f727761726420666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.276.1.2.3.0|2|2 +1.3.6.1.4.1.9.9.276.1.2.4.0|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.2|2|2 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.5|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.6|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.14|2|2 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.18|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.22|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.23|2|2 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.27|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.29|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.31|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.2|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.5|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.6|2|3 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.14|2|3 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.18|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.22|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.23|2|3 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.27|2|3 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.29|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.31|2|2 +1.3.6.1.4.1.9.9.276.1.2.6.0|2|1 +1.3.6.1.4.1.9.9.276.1.2.7.0|66|43 +1.3.6.1.4.1.9.9.276.1.2.8.0|2|2 +1.3.6.1.4.1.9.9.276.1.2.9.0|4x|4a61646564204a61646564 +1.3.6.1.4.1.9.9.276.1.3.1.1.1.1|2|1 +1.3.6.1.4.1.9.9.276.1.3.1.1.1.6|2|13 +1.3.6.1.4.1.9.9.276.1.3.1.1.1.9|2|29 +1.3.6.1.4.1.9.9.276.1.3.1.1.1.11|2|23 +1.3.6.1.4.1.9.9.276.1.3.1.1.1.12|2|31 +1.3.6.1.4.1.9.9.276.1.3.1.1.1.14|2|19 +1.3.6.1.4.1.9.9.276.1.3.1.1.1.18|2|31 +1.3.6.1.4.1.9.9.276.1.3.1.1.1.29|2|19 +1.3.6.1.4.1.9.9.276.1.3.1.1.1.31|2|2 +1.3.6.1.4.1.9.9.276.1.3.1.1.2.1|2|23 +1.3.6.1.4.1.9.9.276.1.3.1.1.2.6|2|2 +1.3.6.1.4.1.9.9.276.1.3.1.1.2.9|2|3 +1.3.6.1.4.1.9.9.276.1.3.1.1.2.11|2|5 +1.3.6.1.4.1.9.9.276.1.3.1.1.2.12|2|10 +1.3.6.1.4.1.9.9.276.1.3.1.1.2.14|2|18 +1.3.6.1.4.1.9.9.276.1.3.1.1.2.18|2|13 +1.3.6.1.4.1.9.9.276.1.3.1.1.2.29|2|29 +1.3.6.1.4.1.9.9.276.1.3.1.1.2.31|2|18 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.3|70|14350934316156695507 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.4|70|2899666167006496292 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.7|70|16520444618565274613 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.12|70|2503702512586709136 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.18|70|999601313714508681 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.19|70|325588263630070068 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.21|70|15658081660018889484 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.22|70|11313059572521385948 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.25|70|721808147740263798 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.29|70|13072506015753748026 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.3|70|1866100775927682747 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.4|70|11376707929224250202 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.7|70|1825740447988070510 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.12|70|16138138532883603793 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.18|70|5408896337953193119 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.19|70|8765660358579533533 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.21|70|5522890384384570706 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.22|70|13168151856250529687 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.25|70|5558637931265655328 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.29|70|1752008300868790087 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.3|70|451276363799057835 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.4|70|15367612972855483638 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.7|70|10866699429225037486 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.12|70|15853691834443554039 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.18|70|13279325565138533181 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.19|70|13883603126490830873 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.21|70|5638722143760747417 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.22|70|8135053447474485528 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.25|70|340101174908480024 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.29|70|17802470503176288153 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.3|70|7701097226247683469 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.4|70|1499530274839182910 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.7|70|2346263121132498383 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.12|70|8760181703613327264 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.18|70|12686097106151010628 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.19|70|1275600082320266218 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.21|70|1028341336639671774 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.22|70|120349320811901336 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.25|70|9750928792210739924 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.29|70|7865402135610317416 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.3|66|27705 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.4|66|48090 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.7|66|15587 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.12|66|9082 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.18|66|13183 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.19|66|55318 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.21|66|36553 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.22|66|24631 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.25|66|30253 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.29|66|4976 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.1|2|25 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.5|2|25 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.9|2|26 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.12|2|14 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.13|2|17 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.17|2|21 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.26|2|1 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.28|2|29 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.29|2|30 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.30|2|18 +1.3.6.1.4.1.9.9.276.1.6.1.1.1.7.100.114.105.118.105.110.103|4|driving +1.3.6.1.4.1.9.9.276.1.6.1.1.1.7.102.111.114.119.97.114.100|4|forward +1.3.6.1.4.1.9.9.276.1.6.1.1.1.21.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110|4x|7468656972206163746564206f78656e206f78656e +1.3.6.1.4.1.9.9.276.1.6.1.1.1.23.102.111.114.119.97.114.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103|4x|666f727761726420627574206275742064726976696e67 +1.3.6.1.4.1.9.9.276.1.6.1.1.1.26.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|4x|746865697220717561696e746c79207468656972207468656972 +1.3.6.1.4.1.9.9.276.1.6.1.1.1.33.100.114.105.118.105.110.103.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116|4x|64726976696e6720627574206163746564206163746564204a6164656420627574 +1.3.6.1.4.1.9.9.276.1.6.1.1.1.39.111.120.101.110.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.116.104.101.105.114|4x|6f78656e204a6164656420717561696e746c7920666f7277617264204a61646564207468656972 +1.3.6.1.4.1.9.9.276.1.6.1.1.1.41.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110|4x|64726976696e6720717561696e746c79206163746564204a616465642064726976696e67206f78656e +1.3.6.1.4.1.9.9.276.1.6.1.1.1.51.102.111.114.119.97.114.100.32.107.101.112.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.97.99.116.101.100|4x|666f7277617264206b657074206f78656e207a6f6d62696573207468656972207a6f6d62696573204a61646564206163746564 +1.3.6.1.4.1.9.9.276.1.6.1.1.1.54.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|4x|717561696e746c79206f78656e20746865697220666f7277617264206f78656e20616374656420666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.7.100.114.105.118.105.110.103|2|28 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.7.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.21.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110|2|16 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.23.102.111.114.119.97.114.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103|2|13 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.26.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|12 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.33.100.114.105.118.105.110.103.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116|2|3 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.39.111.120.101.110.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.116.104.101.105.114|2|26 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.41.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110|2|30 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.51.102.111.114.119.97.114.100.32.107.101.112.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.97.99.116.101.100|2|17 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.54.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|2|9 +1.3.6.1.4.1.9.9.500.1.2.1.1.1.21|66|23989 +1.3.6.1.4.1.9.9.500.1.2.1.1.2.21|66|64612 +1.3.6.1.4.1.9.9.500.1.2.1.1.3.21|2|4 +1.3.6.1.4.1.9.9.500.1.2.1.1.4.21|66|33053 +1.3.6.1.4.1.9.9.500.1.2.1.1.5.21|66|55695 +1.3.6.1.4.1.9.9.500.1.2.1.1.6.21|2|8 +1.3.6.1.4.1.9.9.500.1.2.1.1.7.21|4x|ffffffffffff +1.3.6.1.4.1.9.9.500.1.2.2.1.1.2|2|3 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.47.19.214.176.95.83.210 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.98.57.138.20 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.217 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.9.140.70.113.243.98 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.27.35.213.125 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.69.182.170.137.149.52.235.31 +1.3.6.1.6.3.1.1.6.1.0|2|7 +1.3.6.1.6.3.1.1.6.1.0|2|18 +1.3.6.1.6.3.1.1.6.1.0|2|22 +1.3.6.1.6.3.10.2.1.1.0|4x|4a6164656420666f7277617264 +1.3.6.1.6.3.10.2.1.1.0|4x|6b657074206f78656e206f78656e20666f7277617264207a6f6d62696573 +1.3.6.1.6.3.10.2.1.1.0|4x|627574207a6f6d62696573206f78656e +1.3.6.1.6.3.10.2.1.1.0|4|driving +1.3.6.1.6.3.10.2.1.2.0|2|6 +1.3.6.1.6.3.10.2.1.2.0|2|9 +1.3.6.1.6.3.10.2.1.2.0|2|23 +1.3.6.1.6.3.10.2.1.2.0|2|27 +1.3.6.1.6.3.10.2.1.3.0|2|9 +1.3.6.1.6.3.10.2.1.3.0|2|13 +1.3.6.1.6.3.10.2.1.3.0|2|16 +1.3.6.1.6.3.10.2.1.3.0|2|29 +1.3.6.1.6.3.10.2.1.4.0|2|484 diff --git a/test/new-e2e/ndm/snmp/compose/data/cisco_icm.snmprec b/test/new-e2e/ndm/snmp/compose/data/cisco_icm.snmprec new file mode 100644 index 00000000000000..5c15e492e6870a --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/cisco_icm.snmprec @@ -0,0 +1,230 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.9.1.693 +1.3.6.1.2.1.1.3.0|67|1727368662 +1.3.6.1.2.1.1.5.0|4|test +1.3.6.1.2.1.10.21.1.2.2.1.1.7.3|66|32218 +1.3.6.1.2.1.10.21.1.2.2.1.2.7.3|66|5771 +1.3.6.1.2.1.10.21.1.2.2.1.3.7.3|66|46229 +1.3.6.1.2.1.10.21.1.2.2.1.4.7.3|66|42716 +1.3.6.1.2.1.10.21.1.2.2.1.5.7.3|66|4034 +1.3.6.1.2.1.10.21.1.2.2.1.6.7.3|66|17225 +1.3.6.1.2.1.25.4.2.1.1.8|2|18 +1.3.6.1.2.1.25.4.2.1.1.11|2|30 +1.3.6.1.2.1.25.4.2.1.1.14|2|10 +1.3.6.1.2.1.25.4.2.1.1.16|2|24 +1.3.6.1.2.1.25.4.2.1.1.19|2|8 +1.3.6.1.2.1.25.4.2.1.1.20|2|29 +1.3.6.1.2.1.25.4.2.1.1.23|2|7 +1.3.6.1.2.1.25.4.2.1.1.24|2|9 +1.3.6.1.2.1.25.4.2.1.1.27|2|4 +1.3.6.1.2.1.25.4.2.1.2.8|4|test +1.3.6.1.2.1.25.4.2.1.2.11|4|test +1.3.6.1.2.1.25.4.2.1.2.14|4|test +1.3.6.1.2.1.25.4.2.1.2.16|4|test +1.3.6.1.2.1.25.4.2.1.2.19|4|test +1.3.6.1.2.1.25.4.2.1.2.20|4|test +1.3.6.1.2.1.25.4.2.1.2.23|4|test +1.3.6.1.2.1.25.4.2.1.2.24|4|test +1.3.6.1.2.1.25.4.2.1.2.27|4|test +1.3.6.1.2.1.25.4.2.1.3.8|6|1.3.6.1.3.241.163.109.38.226.117 +1.3.6.1.2.1.25.4.2.1.3.11|6|1.3.6.1.3 +1.3.6.1.2.1.25.4.2.1.3.14|6|1.3.6.1.3.178.68.218.160.30 +1.3.6.1.2.1.25.4.2.1.3.16|6|1.3.6.1.3.97.233.247.97.19 +1.3.6.1.2.1.25.4.2.1.3.19|6|1.3.6.1.3.1.246.15.177.61.207 +1.3.6.1.2.1.25.4.2.1.3.20|6|1.3.6.1.3.237.85.224.239.104.112.55.36 +1.3.6.1.2.1.25.4.2.1.3.23|6|1.3.6.1.3.148.213.221.68.159.92 +1.3.6.1.2.1.25.4.2.1.3.24|6|1.3.6.1.3.23.53.58.26 +1.3.6.1.2.1.25.4.2.1.3.27|6|1.3.6.1.3.20.217.100.30.122.3.26.13 +1.3.6.1.2.1.25.4.2.1.4.8|4x|717561696e746c7920717561696e746c79204a6164656420666f7277617264204a61646564206b657074206f78656e206f78656e +1.3.6.1.2.1.25.4.2.1.4.11|4x|6275742064726976696e67206b657074204a6164656420616374656420746865697220666f72776172642064726976696e67206f78656e +1.3.6.1.2.1.25.4.2.1.4.14|4x|616374656420717561696e746c79204a61646564204a61646564206f78656e204a6164656420746865697220746865697220666f7277617264 +1.3.6.1.2.1.25.4.2.1.4.16|4x|6b657074207468656972 +1.3.6.1.2.1.25.4.2.1.4.19|4x|7a6f6d62696573207468656972 +1.3.6.1.2.1.25.4.2.1.4.20|4x|666f7277617264206b65707420627574207468656972 +1.3.6.1.2.1.25.4.2.1.4.23|4x|64726976696e6720666f727761726420717561696e746c79206b65707420666f7277617264 +1.3.6.1.2.1.25.4.2.1.4.24|4x|6163746564207a6f6d626965732064726976696e67207a6f6d6269657320666f7277617264206b65707420666f727761726420717561696e746c7920627574 +1.3.6.1.2.1.25.4.2.1.4.27|4x|746865697220666f72776172642064726976696e672064726976696e67206275742064726976696e67206163746564206f78656e +1.3.6.1.2.1.25.4.2.1.5.8|4|zombies +1.3.6.1.2.1.25.4.2.1.5.11|4x|4a61646564206b65707420717561696e746c79 +1.3.6.1.2.1.25.4.2.1.5.14|4x|7468656972207468656972207468656972206f78656e206f78656e206163746564 +1.3.6.1.2.1.25.4.2.1.5.16|4x|6b65707420666f727761726420717561696e746c7920616374656420717561696e746c7920616374656420666f7277617264 +1.3.6.1.2.1.25.4.2.1.5.19|4|oxen +1.3.6.1.2.1.25.4.2.1.5.20|4x|7a6f6d6269657320666f7277617264 +1.3.6.1.2.1.25.4.2.1.5.23|4x|6275742061637465642074686569722064726976696e67207468656972 +1.3.6.1.2.1.25.4.2.1.5.24|4x|717561696e746c79207a6f6d62696573 +1.3.6.1.2.1.25.4.2.1.5.27|4x|6163746564206f78656e206b6570742061637465642064726976696e67 +1.3.6.1.2.1.25.4.2.1.6.8|2|2 +1.3.6.1.2.1.25.4.2.1.6.11|2|3 +1.3.6.1.2.1.25.4.2.1.6.14|2|3 +1.3.6.1.2.1.25.4.2.1.6.16|2|3 +1.3.6.1.2.1.25.4.2.1.6.19|2|4 +1.3.6.1.2.1.25.4.2.1.6.20|2|2 +1.3.6.1.2.1.25.4.2.1.6.23|2|1 +1.3.6.1.2.1.25.4.2.1.6.24|2|3 +1.3.6.1.2.1.25.4.2.1.6.27|2|2 +1.3.6.1.2.1.25.4.2.1.7.8|2|3 +1.3.6.1.2.1.25.4.2.1.7.11|2|4 +1.3.6.1.2.1.25.4.2.1.7.14|2|4 +1.3.6.1.2.1.25.4.2.1.7.16|2|3 +1.3.6.1.2.1.25.4.2.1.7.19|2|1 +1.3.6.1.2.1.25.4.2.1.7.20|2|2 +1.3.6.1.2.1.25.4.2.1.7.23|2|4 +1.3.6.1.2.1.25.4.2.1.7.24|2|3 +1.3.6.1.2.1.25.4.2.1.7.27|2|1 +1.3.6.1.2.1.25.5.1.1.1.1|2|5 +1.3.6.1.2.1.25.5.1.1.1.5|2|0 +1.3.6.1.2.1.25.5.1.1.1.7|2|10 +1.3.6.1.2.1.25.5.1.1.1.8|2|23 +1.3.6.1.2.1.25.5.1.1.1.13|2|9 +1.3.6.1.2.1.25.5.1.1.1.15|2|20 +1.3.6.1.2.1.25.5.1.1.1.21|2|0 +1.3.6.1.2.1.25.5.1.1.1.23|2|0 +1.3.6.1.2.1.25.5.1.1.1.28|2|15 +1.3.6.1.2.1.25.5.1.1.2.1|2|2 +1.3.6.1.2.1.25.5.1.1.2.5|2|5 +1.3.6.1.2.1.25.5.1.1.2.7|2|18 +1.3.6.1.2.1.25.5.1.1.2.8|2|18 +1.3.6.1.2.1.25.5.1.1.2.13|2|21 +1.3.6.1.2.1.25.5.1.1.2.15|2|30 +1.3.6.1.2.1.25.5.1.1.2.21|2|16 +1.3.6.1.2.1.25.5.1.1.2.23|2|12 +1.3.6.1.2.1.25.5.1.1.2.28|2|1 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.1.4|66|6 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.1.13|66|5 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.1.14|66|1 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.1.17|66|42127 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.1.18|66|5 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.1.22|66|43 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.1.25|66|5 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.1.30|66|3 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.1.31|66|3 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.2.4|66|7 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.2.13|66|34 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.2.14|66|4 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.2.17|66|7 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.2.18|66|6 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.2.22|66|5 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.2.25|66|4 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.2.30|66|343 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.2.31|66|2 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.1|66|4 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.2|66|2 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.4|66|7 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.14|66|4 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.18|66|5 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.25|66|43 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.27|66|54 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.29|66|23 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.30|66|45 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.31|66|567 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.1|66|2 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.2|66|34 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.4|66|2 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.14|66|34 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.18|66|6 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.25|66|45 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.27|66|34 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.29|66|34 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.30|66|6 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.31|66|65 +1.3.6.1.4.1.9.9.156.1.5.5.0|65|1194392220 +1.3.6.1.4.1.9.9.156.1.5.6.0|65|788063609 +1.3.6.1.4.1.9.9.156.1.5.7.0|65|2492003767 +1.3.6.1.4.1.9.9.156.1.5.8.0|65|401932234 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.4446|66|4446 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.5179|66|5179 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.12093|66|12093 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.19363|66|19363 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.25033|66|25033 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.37738|66|37738 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.42562|66|42562 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.51845|66|51845 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.62906|66|62906 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.63361|66|63361 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.4446.18326|66|7469 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.5179.31658|66|5462 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.12093.24948|66|3953 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.19363.31336|66|7284 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.25033.57438|66|6013 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.37738.59634|66|9518 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.42562.46865|66|1371 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.51845.48063|66|9727 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.62906.5310|66|891 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.63361.46518|66|8988 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.4446.18326|66|7137 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.5179.31658|66|330 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.12093.24948|66|3652 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.19363.31336|66|2456 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.25033.57438|66|8461 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.37738.59634|66|5291 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.42562.46865|66|940 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.51845.48063|66|8616 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.62906.5310|66|6023 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.63361.46518|66|8797 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.4446.18326|66|815 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.5179.31658|66|5483 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.12093.24948|66|1936 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.19363.31336|66|772 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.25033.57438|66|7890 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.37738.59634|66|237 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.42562.46865|66|8766 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.51845.48063|66|4003 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.62906.5310|66|9754 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.63361.46518|66|7024 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.4351.29722.31|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.16469.37169.2|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.18917.14469.5|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.20734.59281.32|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.31487.42819.17|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.36228.63314.4|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.37463.17761.14|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.50909.47402.7|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.57906.47038.21|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.59011.25332.2|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.2.4351.29722.31|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.2.16469.37169.2|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.2.18917.14469.5|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.2.20734.59281.32|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.2.31487.42819.17|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.2.36228.63314.4|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.2.37463.17761.14|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.2.50909.47402.7|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.2.57906.47038.21|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.2.59011.25332.2|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.3.4351.29722.31|2|17 +1.3.6.1.4.1.9.9.473.1.3.6.1.3.16469.37169.2|2|15 +1.3.6.1.4.1.9.9.473.1.3.6.1.3.18917.14469.5|2|12 +1.3.6.1.4.1.9.9.473.1.3.6.1.3.20734.59281.32|2|5 +1.3.6.1.4.1.9.9.473.1.3.6.1.3.31487.42819.17|2|16 +1.3.6.1.4.1.9.9.473.1.3.6.1.3.36228.63314.4|2|10 +1.3.6.1.4.1.9.9.473.1.3.6.1.3.37463.17761.14|2|18 +1.3.6.1.4.1.9.9.473.1.3.6.1.3.50909.47402.7|2|15 +1.3.6.1.4.1.9.9.473.1.3.6.1.3.57906.47038.21|2|5 +1.3.6.1.4.1.9.9.473.1.3.6.1.3.59011.25332.2|2|14 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.4351.29722.31|2|4 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.16469.37169.2|2|7 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.18917.14469.5|2|7 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.20734.59281.32|2|8 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.31487.42819.17|2|3 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.36228.63314.4|2|1 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.37463.17761.14|2|4 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.50909.47402.7|2|1 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.57906.47038.21|2|7 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.59011.25332.2|2|9 +1.3.6.1.4.1.9.9.473.1.3.6.1.5.4351.29722.31|4|test +1.3.6.1.4.1.9.9.473.1.3.6.1.5.16469.37169.2|4|test +1.3.6.1.4.1.9.9.473.1.3.6.1.5.18917.14469.5|4|test +1.3.6.1.4.1.9.9.473.1.3.6.1.5.20734.59281.32|4|test +1.3.6.1.4.1.9.9.473.1.3.6.1.5.31487.42819.17|4|test +1.3.6.1.4.1.9.9.473.1.3.6.1.5.36228.63314.4|4|test +1.3.6.1.4.1.9.9.473.1.3.6.1.5.37463.17761.14|4|test +1.3.6.1.4.1.9.9.473.1.3.6.1.5.50909.47402.7|4|test +1.3.6.1.4.1.9.9.473.1.3.6.1.5.57906.47038.21|4|test +1.3.6.1.4.1.9.9.473.1.3.6.1.5.59011.25332.2|4|test +1.3.6.1.4.1.9.9.590.1.2.2.0|66|951185694 +1.3.6.1.4.1.9.9.590.1.2.12.0|70|4641130472909277500 +1.3.6.1.4.1.9.9.590.1.6.1.1.1.33274|66|2756470189 +1.3.6.1.4.1.9.9.590.1.6.1.1.2.33274|66|2431416299 +1.3.6.1.4.1.9.9.590.1.6.1.1.3.33274|66|700781135 +1.3.6.1.4.1.9.9.590.1.6.1.1.4.33274|66|4286492019 +1.3.6.1.4.1.9.9.590.1.6.1.1.5.33274|66|2842971250 +1.3.6.1.4.1.9.9.590.1.6.1.1.6.33274|66|2149197955 diff --git a/test/new-e2e/ndm/snmp/compose/data/constraint.snmprec b/test/new-e2e/ndm/snmp/compose/data/constraint.snmprec new file mode 100644 index 00000000000000..60f8c29c95cfe9 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/constraint.snmprec @@ -0,0 +1,2 @@ +1.3.6.1.2.1.6.1|2|10 +# (tcpRtoAlgorithm) OID with value breaking constraint 1 <= value <= 4 diff --git a/test/new-e2e/ndm/snmp/compose/data/dell-poweredge.snmprec b/test/new-e2e/ndm/snmp/compose/data/dell-poweredge.snmprec new file mode 100644 index 00000000000000..49b4f08b522757 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/dell-poweredge.snmprec @@ -0,0 +1,3487 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.674.10892.1.2 +1.3.6.1.4.1.343.2.7.2.1.1.0|4|kept +1.3.6.1.4.1.343.2.7.2.1.2.0|4x|7a6f6d6269657320717561696e746c792061637465642064726976696e6720627574 +1.3.6.1.4.1.343.2.7.2.1.3.0|4x|666f727761726420717561696e746c79206f78656e206163746564 +1.3.6.1.4.1.343.2.7.2.1.4.0|4x|62757420666f727761726420627574 +1.3.6.1.4.1.343.2.7.2.1.5.0|4x|64726976696e67206b657074204a61646564 +1.3.6.1.4.1.343.2.7.2.1.6.0|4x|666f7277617264204a61646564207468656972206b657074 +1.3.6.1.4.1.343.2.7.2.1.7.0|2|1 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.1.8|2|8 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.1.18|2|18 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.2.8|4x|65746830 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.2.18|4x|656e31 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.3.8|2|1 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.3.18|2|2 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.4.8|2|1 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.4.18|2|0 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.1.18|4x|666f7277617264207a6f6d62696573207468656972 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.1.22|4x|717561696e746c79204a61646564206f78656e207a6f6d62696573206f78656e2064726976696e67206f78656e +1.3.6.1.4.1.343.2.7.2.2.1.2.1.2.18|4x|4a61646564207a6f6d62696573206f78656e207468656972206b6570742064726976696e67206163746564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.2.22|4x|61637465642064726976696e6720666f7277617264206163746564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.3.18|4x|6b657074206163746564204a61646564204a6164656420746865697220666f7277617264207a6f6d62696573 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.3.22|4x|6f78656e206163746564204a6164656420717561696e746c79206163746564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.4.18|4x|627574206f78656e207468656972206f78656e206b6570742064726976696e672064726976696e6720627574 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.4.22|4x|717561696e746c79206f78656e2062757420717561696e746c792064726976696e67207a6f6d62696573206f78656e204a61646564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.5.18|4x|4a61646564206f78656e +1.3.6.1.4.1.343.2.7.2.2.1.2.1.5.22|4x|717561696e746c792074686569722064726976696e67207a6f6d62696573 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.6.18|4x|6b657074204a61646564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.6.22|4|driving +1.3.6.1.4.1.343.2.7.2.2.1.2.1.7.18|4x|4a616465642064726976696e67206b657074207468656972206f78656e20627574 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.7.22|4x|4a616465642064726976696e67206b65707420627574 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.1.8|65|26212581 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.1.18|65|918782676 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.2.8|65|2561191324 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.2.18|65|4290482129 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.3.8|65|3900533769 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.3.18|65|564767165 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.4.8|65|3058685355 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.4.18|65|3837029910 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.5.8|65|1958861748 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.5.18|65|2421785564 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.6.8|65|2377289710 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.6.18|65|4015875170 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.7.8|65|4079823523 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.7.18|65|577740315 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.8.8|65|3885573357 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.8.18|65|1559311203 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.9.8|65|1208244969 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.9.18|65|736603272 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.10.8|65|1397338420 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.10.18|65|3150855068 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.1.4|2|4 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.1.29|2|29 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.2.4|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.2.29|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.3.4|65|1467360873 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.3.29|65|3891936190 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.4.4|66|1428003748 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.4.29|66|3467694198 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.5.4|2|2 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.5.29|2|2 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.6.4|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.6.29|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.7.4|2|9 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.7.29|2|29 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.8.4|2|13 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.8.29|2|28 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.9.4|2|15 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.9.29|2|24 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.10.4|4x|42010aa40033 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.10.29|4x|42010aa40033 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.11.4|4x|42010aa40033 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.11.29|4x|42010aa40033 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.12.4|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.12.29|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.13.4|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.13.29|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.14.4|2|13 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.14.29|2|30 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.1.3|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.1.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.2.3|65|906870219 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.2.11|65|3854133097 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.3.3|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.3.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.4.3|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.4.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.5.3|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.5.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.6.3|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.6.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.3.1.1.1.2|2|2 +1.3.6.1.4.1.343.2.7.2.2.3.1.1.1.11|2|11 +1.3.6.1.4.1.343.2.7.2.2.3.1.1.2.2|2|11 +1.3.6.1.4.1.343.2.7.2.2.3.1.1.2.11|2|22 +1.3.6.1.4.1.343.2.7.2.2.3.2.1.1.7|2|0 +1.3.6.1.4.1.343.2.7.2.2.3.2.1.1.23|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.1.22|2|22 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.1.30|2|30 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.2.22|2|29 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.2.30|2|19 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.3.22|2|16 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.3.30|2|12 +1.3.6.1.4.1.343.2.7.2.2.4.2.1.1.7|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.1.5|4x|6f78656e2061637465642064726976696e6720666f72776172642064726976696e67 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.1.11|4x|4a61646564206163746564 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.2.5|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.2.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.3.5|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.3.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.4.5|66|1949733254 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.4.11|66|2070885352 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.5.5|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.5.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.6.5|2|2 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.6.11|2|2 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.7.5|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.7.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.8.5|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.8.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.9.5|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.9.11|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.10.5|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.10.11|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.11.5|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.11.11|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.12.5|65|2997670242 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.12.11|65|2131631262 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.13.5|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.13.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.14.5|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.14.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.15.5|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.15.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.5.1.1.1.26|2|26 +1.3.6.1.4.1.343.2.7.2.2.5.1.1.1.27|2|27 +1.3.6.1.4.1.343.2.7.2.2.5.1.1.2.26|2|15 +1.3.6.1.4.1.343.2.7.2.2.5.1.1.2.27|2|1 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.1.19|2|3 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.1.31|2|2 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.2.19|65|706719367 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.2.31|65|1306335671 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.3.19|2|2 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.3.31|2|2 +1.3.6.1.4.1.343.2.7.2.3.1.2.0|2|0 +1.3.6.1.4.1.343.2.7.2.3.1.3.0|2|1 +1.3.6.1.4.1.343.2.7.2.3.1.4.0|2|1 +1.3.6.1.4.1.343.2.7.2.3.2.2.0|2|1 +1.3.6.1.4.1.343.2.7.2.3.3.2.0|2|1 +1.3.6.1.4.1.343.2.7.2.3.4.2.0|2|0 +1.3.6.1.4.1.674.10892.1.200.10.1.1.26|2|26 +1.3.6.1.4.1.674.10892.1.200.10.1.1.29|2|29 +1.3.6.1.4.1.674.10892.1.200.10.1.2.26|2|3 +1.3.6.1.4.1.674.10892.1.200.10.1.2.29|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.3.26|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.3.29|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.4.26|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.4.29|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.5.26|4x|7a6f6d62696573206f78656e206b657074206b657074206163746564207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.200.10.1.5.29|4x|6275742062757420746865697220666f7277617264207a6f6d62696573206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.1.200.10.1.6.26|2|4 +1.3.6.1.4.1.674.10892.1.200.10.1.6.29|2|4 +1.3.6.1.4.1.674.10892.1.200.10.1.7.26|4x|64726976696e67206b65707420616374656420627574 +1.3.6.1.4.1.674.10892.1.200.10.1.7.29|4|kept +1.3.6.1.4.1.674.10892.1.200.10.1.8.26|4x|6b65707420627574207a6f6d6269657320666f7277617264204a61646564206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.1.200.10.1.8.29|4|zombies +1.3.6.1.4.1.674.10892.1.200.10.1.9.26|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.9.29|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.10.26|4x|6b657074206163746564 +1.3.6.1.4.1.674.10892.1.200.10.1.10.29|4x|666f727761726420717561696e746c79204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.1.200.10.1.11.26|4x|666f7277617264204a61646564206f78656e20666f7277617264207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.200.10.1.11.29|4x|64726976696e6720666f727761726420666f727761726420717561696e746c79207a6f6d626965732064726976696e67 +1.3.6.1.4.1.674.10892.1.200.10.1.12.26|2|6 +1.3.6.1.4.1.674.10892.1.200.10.1.12.29|2|6 +1.3.6.1.4.1.674.10892.1.200.10.1.13.26|4x|4a6164656420666f7277617264207a6f6d6269657320746865697220717561696e746c79207468656972204a61646564206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.1.200.10.1.13.29|4x|717561696e746c7920627574 +1.3.6.1.4.1.674.10892.1.200.10.1.14.26|4x|6163746564207a6f6d62696573204a61646564204a61646564 +1.3.6.1.4.1.674.10892.1.200.10.1.14.29|4x|6b657074206163746564206b65707420666f7277617264207a6f6d6269657320717561696e746c7920746865697220666f7277617264 +1.3.6.1.4.1.674.10892.1.200.10.1.15.26|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.15.29|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.16.26|4x|666f7277617264204a6164656420717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.1.200.10.1.16.29|4|quaintly +1.3.6.1.4.1.674.10892.1.200.10.1.17.26|4x|627574207468656972206b65707420717561696e746c7920717561696e746c7920746865697220666f7277617264204a61646564 +1.3.6.1.4.1.674.10892.1.200.10.1.17.29|4x|64726976696e67207468656972 +1.3.6.1.4.1.674.10892.1.200.10.1.18.26|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.18.29|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.19.26|4x|6f78656e207468656972206f78656e +1.3.6.1.4.1.674.10892.1.200.10.1.19.29|4x|717561696e746c7920717561696e746c79206f78656e204a61646564206f78656e +1.3.6.1.4.1.674.10892.1.200.10.1.20.26|4x|6b65707420666f72776172642074686569722062757420627574 +1.3.6.1.4.1.674.10892.1.200.10.1.20.29|4x|6b65707420746865697220717561696e746c792064726976696e67207a6f6d62696573204a6164656420627574 +1.3.6.1.4.1.674.10892.1.200.10.1.21.26|2|1 +1.3.6.1.4.1.674.10892.1.200.10.1.21.29|2|1 +1.3.6.1.4.1.674.10892.1.200.10.1.22.26|4x|6b6570742062757420717561696e746c79206f78656e20717561696e746c79 +1.3.6.1.4.1.674.10892.1.200.10.1.22.29|4x|61637465642074686569722064726976696e67 +1.3.6.1.4.1.674.10892.1.200.10.1.23.26|4|acted +1.3.6.1.4.1.674.10892.1.200.10.1.23.29|4|their +1.3.6.1.4.1.674.10892.1.200.10.1.24.26|2|3 +1.3.6.1.4.1.674.10892.1.200.10.1.24.29|2|3 +1.3.6.1.4.1.674.10892.1.200.10.1.25.26|4x|616374656420666f72776172642061637465642064726976696e672064726976696e6720746865697220627574204a61646564 +1.3.6.1.4.1.674.10892.1.200.10.1.25.29|4x|62757420666f7277617264 +1.3.6.1.4.1.674.10892.1.200.10.1.26.26|4x|6f78656e206f78656e207a6f6d62696573207a6f6d62696573204a61646564206163746564 +1.3.6.1.4.1.674.10892.1.200.10.1.26.29|4x|666f72776172642064726976696e6720666f7277617264206b657074207a6f6d62696573204a6164656420627574206163746564206b657074 +1.3.6.1.4.1.674.10892.1.200.10.1.27.26|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.27.29|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.28.26|4x|7a6f6d6269657320746865697220717561696e746c79206163746564206b657074207468656972 +1.3.6.1.4.1.674.10892.1.200.10.1.28.29|4x|4a61646564207a6f6d62696573206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.1.200.10.1.29.26|4x|746865697220666f7277617264206b6570742064726976696e6720717561696e746c79206163746564 +1.3.6.1.4.1.674.10892.1.200.10.1.29.29|4x|64726976696e6720666f727761726420627574206163746564 +1.3.6.1.4.1.674.10892.1.200.10.1.30.26|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.30.29|2|6 +1.3.6.1.4.1.674.10892.1.200.10.1.31.26|4x|627574206f78656e207468656972206f78656e2064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.1.200.10.1.31.29|4|acted +1.3.6.1.4.1.674.10892.1.200.10.1.42.26|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.42.29|2|4 +1.3.6.1.4.1.674.10892.1.200.10.1.43.26|4x|627574207a6f6d6269657320666f7277617264206163746564 +1.3.6.1.4.1.674.10892.1.200.10.1.43.29|4x|64726976696e6720616374656420666f727761726420666f7277617264 +1.3.6.1.4.1.674.10892.1.200.10.1.44.26|2|1 +1.3.6.1.4.1.674.10892.1.200.10.1.44.29|2|1 +1.3.6.1.4.1.674.10892.1.200.10.1.45.26|4x|6f78656e20666f7277617264207468656972 +1.3.6.1.4.1.674.10892.1.200.10.1.45.29|4x|6f78656e206b657074206b657074 +1.3.6.1.4.1.674.10892.1.200.10.1.50.26|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.50.29|2|4 +1.3.6.1.4.1.674.10892.1.200.10.1.51.26|4x|7a6f6d62696573206b657074206b65707420616374656420627574 +1.3.6.1.4.1.674.10892.1.200.10.1.51.29|4x|666f727761726420666f7277617264207468656972 +1.3.6.1.4.1.674.10892.1.200.10.1.52.26|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.52.29|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.53.26|4x|7a6f6d62696573206f78656e20627574 +1.3.6.1.4.1.674.10892.1.200.10.1.53.29|4x|7468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.200.10.1.54.26|2|1 +1.3.6.1.4.1.674.10892.1.200.10.1.54.29|2|6 +1.3.6.1.4.1.674.10892.1.200.10.1.55.26|4x|64726976696e6720627574206f78656e204a61646564206275742074686569722064726976696e67 +1.3.6.1.4.1.674.10892.1.200.10.1.55.29|4x|64726976696e672074686569722064726976696e67 +1.3.6.1.4.1.674.10892.1.200.10.1.56.26|2|6 +1.3.6.1.4.1.674.10892.1.200.10.1.56.29|2|4 +1.3.6.1.4.1.674.10892.1.200.10.1.57.26|4x|717561696e746c792064726976696e6720746865697220616374656420666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.1.200.10.1.57.29|4x|717561696e746c7920717561696e746c79206b65707420666f7277617264206275742064726976696e67206b657074207468656972207468656972 +1.3.6.1.4.1.674.10892.1.200.10.1.58.26|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.58.29|2|3 +1.3.6.1.4.1.674.10892.1.200.10.1.59.26|4x|6f78656e2074686569722064726976696e67207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.200.10.1.59.29|4x|4a61646564206163746564207468656972206163746564207a6f6d62696573206f78656e207468656972 +1.3.6.1.4.1.674.10892.1.200.10.1.60.26|2|1 +1.3.6.1.4.1.674.10892.1.200.10.1.60.29|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.61.26|4x|6b657074207a6f6d62696573206163746564207a6f6d62696573207a6f6d6269657320616374656420746865697220627574207468656972 +1.3.6.1.4.1.674.10892.1.200.10.1.61.29|4x|666f7277617264207a6f6d6269657320717561696e746c7920717561696e746c79204a6164656420627574204a61646564206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.1.200.10.1.62.26|4x|7468656972207a6f6d62696573204a61646564204a61646564 +1.3.6.1.4.1.674.10892.1.200.10.1.62.29|4x|4a6164656420666f7277617264206b6570742064726976696e67206f78656e206163746564 +1.3.6.1.4.1.674.10892.1.200.10.1.63.26|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.63.29|2|6 +1.3.6.1.4.1.674.10892.1.200.10.1.64.26|4x|6163746564206b657074204a61646564206f78656e +1.3.6.1.4.1.674.10892.1.200.10.1.64.29|4x|4a616465642064726976696e6720717561696e746c79206275742064726976696e67 +1.3.6.1.4.1.674.10892.1.300.50.1.1.3.26|2|3 +1.3.6.1.4.1.674.10892.1.300.50.1.1.31.19|2|31 +1.3.6.1.4.1.674.10892.1.300.50.1.2.3.26|2|26 +1.3.6.1.4.1.674.10892.1.300.50.1.2.31.19|2|19 +1.3.6.1.4.1.674.10892.1.300.50.1.3.3.26|2|2 +1.3.6.1.4.1.674.10892.1.300.50.1.3.31.19|2|6 +1.3.6.1.4.1.674.10892.1.300.50.1.4.3.26|2|4 +1.3.6.1.4.1.674.10892.1.300.50.1.4.31.19|2|1 +1.3.6.1.4.1.674.10892.1.300.50.1.5.3.26|2|6 +1.3.6.1.4.1.674.10892.1.300.50.1.5.31.19|2|4 +1.3.6.1.4.1.674.10892.1.300.50.1.7.3.26|4x|61637465642061637465642064726976696e67206163746564 +1.3.6.1.4.1.674.10892.1.300.50.1.7.31.19|4x|666f7277617264207a6f6d62696573206b657074206b657074 +1.3.6.1.4.1.674.10892.1.300.50.1.8.3.26|4x|6f78656e206163746564204a6164656420666f7277617264207a6f6d626965732064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.1.300.50.1.8.31.19|4x|666f7277617264206b657074206f78656e +1.3.6.1.4.1.674.10892.1.300.50.1.11.3.26|4x|6f78656e2064726976696e6720717561696e746c79204a61646564207468656972 +1.3.6.1.4.1.674.10892.1.300.50.1.11.31.19|4x|64726976696e6720666f7277617264207a6f6d62696573204a61646564206b657074206b657074204a61646564204a61646564204a61646564 +1.3.6.1.4.1.674.10892.1.300.70.1.1.18.23|2|18 +1.3.6.1.4.1.674.10892.1.300.70.1.1.29.21|2|29 +1.3.6.1.4.1.674.10892.1.300.70.1.2.18.23|2|23 +1.3.6.1.4.1.674.10892.1.300.70.1.2.29.21|2|21 +1.3.6.1.4.1.674.10892.1.300.70.1.3.18.23|2|1 +1.3.6.1.4.1.674.10892.1.300.70.1.3.29.21|2|4 +1.3.6.1.4.1.674.10892.1.300.70.1.4.18.23|2|2 +1.3.6.1.4.1.674.10892.1.300.70.1.4.29.21|2|2 +1.3.6.1.4.1.674.10892.1.300.70.1.5.18.23|2|4 +1.3.6.1.4.1.674.10892.1.300.70.1.5.29.21|2|2 +1.3.6.1.4.1.674.10892.1.300.70.1.6.18.23|2|3 +1.3.6.1.4.1.674.10892.1.300.70.1.6.29.21|2|1 +1.3.6.1.4.1.674.10892.1.300.70.1.7.18.23|2|2 +1.3.6.1.4.1.674.10892.1.300.70.1.7.29.21|2|1 +1.3.6.1.4.1.674.10892.1.300.70.1.8.18.23|4x|4a61646564206f78656e2064726976696e67207a6f6d62696573206163746564206f78656e +1.3.6.1.4.1.674.10892.1.300.70.1.8.29.21|4x|6b657074207a6f6d62696573206f78656e206b6570742064726976696e6720666f7277617264206f78656e +1.3.6.1.4.1.674.10892.1.400.20.1.1.4|2|4 +1.3.6.1.4.1.674.10892.1.400.20.1.1.5|2|5 +1.3.6.1.4.1.674.10892.1.400.20.1.1.6|2|6 +1.3.6.1.4.1.674.10892.1.400.20.1.1.8|2|8 +1.3.6.1.4.1.674.10892.1.400.20.1.1.14|2|14 +1.3.6.1.4.1.674.10892.1.400.20.1.1.23|2|23 +1.3.6.1.4.1.674.10892.1.400.20.1.1.29|2|29 +1.3.6.1.4.1.674.10892.1.400.20.1.1.31|2|31 +1.3.6.1.4.1.674.10892.1.400.20.1.2.4|2|2 +1.3.6.1.4.1.674.10892.1.400.20.1.2.5|2|4 +1.3.6.1.4.1.674.10892.1.400.20.1.2.6|2|4 +1.3.6.1.4.1.674.10892.1.400.20.1.2.8|2|6 +1.3.6.1.4.1.674.10892.1.400.20.1.2.14|2|4 +1.3.6.1.4.1.674.10892.1.400.20.1.2.23|2|2 +1.3.6.1.4.1.674.10892.1.400.20.1.2.29|2|6 +1.3.6.1.4.1.674.10892.1.400.20.1.2.31|2|1 +1.3.6.1.4.1.674.10892.1.400.20.1.3.4|2|6 +1.3.6.1.4.1.674.10892.1.400.20.1.3.5|2|1 +1.3.6.1.4.1.674.10892.1.400.20.1.3.6|2|2 +1.3.6.1.4.1.674.10892.1.400.20.1.3.8|2|6 +1.3.6.1.4.1.674.10892.1.400.20.1.3.14|2|4 +1.3.6.1.4.1.674.10892.1.400.20.1.3.23|2|1 +1.3.6.1.4.1.674.10892.1.400.20.1.3.29|2|4 +1.3.6.1.4.1.674.10892.1.400.20.1.3.31|2|2 +1.3.6.1.4.1.674.10892.1.400.20.1.4.4|2|1 +1.3.6.1.4.1.674.10892.1.400.20.1.4.5|2|5 +1.3.6.1.4.1.674.10892.1.400.20.1.4.6|2|1 +1.3.6.1.4.1.674.10892.1.400.20.1.4.8|2|2 +1.3.6.1.4.1.674.10892.1.400.20.1.4.14|2|1 +1.3.6.1.4.1.674.10892.1.400.20.1.4.23|2|5 +1.3.6.1.4.1.674.10892.1.400.20.1.4.29|2|5 +1.3.6.1.4.1.674.10892.1.400.20.1.4.31|2|2 +1.3.6.1.4.1.674.10892.1.400.20.1.5.4|2|12 +1.3.6.1.4.1.674.10892.1.400.20.1.5.5|2|27 +1.3.6.1.4.1.674.10892.1.400.20.1.5.6|2|12 +1.3.6.1.4.1.674.10892.1.400.20.1.5.8|2|10 +1.3.6.1.4.1.674.10892.1.400.20.1.5.14|2|2 +1.3.6.1.4.1.674.10892.1.400.20.1.5.23|2|17 +1.3.6.1.4.1.674.10892.1.400.20.1.5.29|2|9 +1.3.6.1.4.1.674.10892.1.400.20.1.5.31|2|29 +1.3.6.1.4.1.674.10892.1.400.20.1.6.4|2|16 +1.3.6.1.4.1.674.10892.1.400.20.1.6.5|2|15 +1.3.6.1.4.1.674.10892.1.400.20.1.6.6|2|31 +1.3.6.1.4.1.674.10892.1.400.20.1.6.8|2|23 +1.3.6.1.4.1.674.10892.1.400.20.1.6.14|2|18 +1.3.6.1.4.1.674.10892.1.400.20.1.6.23|2|29 +1.3.6.1.4.1.674.10892.1.400.20.1.6.29|2|20 +1.3.6.1.4.1.674.10892.1.400.20.1.6.31|2|5 +1.3.6.1.4.1.674.10892.1.400.20.1.7.4|2|7 +1.3.6.1.4.1.674.10892.1.400.20.1.7.5|2|14 +1.3.6.1.4.1.674.10892.1.400.20.1.7.6|2|8 +1.3.6.1.4.1.674.10892.1.400.20.1.7.8|2|15 +1.3.6.1.4.1.674.10892.1.400.20.1.7.14|2|11 +1.3.6.1.4.1.674.10892.1.400.20.1.7.23|2|27 +1.3.6.1.4.1.674.10892.1.400.20.1.7.29|2|10 +1.3.6.1.4.1.674.10892.1.400.20.1.7.31|2|2 +1.3.6.1.4.1.674.10892.1.400.20.1.8.4|2|30 +1.3.6.1.4.1.674.10892.1.400.20.1.8.5|2|16 +1.3.6.1.4.1.674.10892.1.400.20.1.8.6|2|22 +1.3.6.1.4.1.674.10892.1.400.20.1.8.8|2|11 +1.3.6.1.4.1.674.10892.1.400.20.1.8.14|2|22 +1.3.6.1.4.1.674.10892.1.400.20.1.8.23|2|14 +1.3.6.1.4.1.674.10892.1.400.20.1.8.29|2|25 +1.3.6.1.4.1.674.10892.1.400.20.1.8.31|2|28 +1.3.6.1.4.1.674.10892.1.400.20.1.9.4|2|23 +1.3.6.1.4.1.674.10892.1.400.20.1.9.5|2|21 +1.3.6.1.4.1.674.10892.1.400.20.1.9.6|2|21 +1.3.6.1.4.1.674.10892.1.400.20.1.9.8|2|25 +1.3.6.1.4.1.674.10892.1.400.20.1.9.14|2|20 +1.3.6.1.4.1.674.10892.1.400.20.1.9.23|2|7 +1.3.6.1.4.1.674.10892.1.400.20.1.9.29|2|14 +1.3.6.1.4.1.674.10892.1.400.20.1.9.31|2|30 +1.3.6.1.4.1.674.10892.1.400.20.1.10.4|2|12 +1.3.6.1.4.1.674.10892.1.400.20.1.10.5|2|18 +1.3.6.1.4.1.674.10892.1.400.20.1.10.6|2|15 +1.3.6.1.4.1.674.10892.1.400.20.1.10.8|2|29 +1.3.6.1.4.1.674.10892.1.400.20.1.10.14|2|21 +1.3.6.1.4.1.674.10892.1.400.20.1.10.23|2|9 +1.3.6.1.4.1.674.10892.1.400.20.1.10.29|2|3 +1.3.6.1.4.1.674.10892.1.400.20.1.10.31|2|5 +1.3.6.1.4.1.674.10892.1.400.20.1.11.4|4|quaintly +1.3.6.1.4.1.674.10892.1.400.20.1.11.5|4|quaintly +1.3.6.1.4.1.674.10892.1.400.20.1.11.6|4|quaintly +1.3.6.1.4.1.674.10892.1.400.20.1.11.8|4|quaintly +1.3.6.1.4.1.674.10892.1.400.20.1.11.14|4x|627574206b657074 +1.3.6.1.4.1.674.10892.1.400.20.1.11.23|4|quaintly +1.3.6.1.4.1.674.10892.1.400.20.1.11.29|4|quaintly +1.3.6.1.4.1.674.10892.1.400.20.1.11.31|4|quaintly +1.3.6.1.4.1.674.10892.1.600.10.1.1.1.24|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.1.1.27|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.1.2.4|2|2 +1.3.6.1.4.1.674.10892.1.600.10.1.1.8.21|2|8 +1.3.6.1.4.1.674.10892.1.600.10.1.1.9.18|2|9 +1.3.6.1.4.1.674.10892.1.600.10.1.1.14.27|2|14 +1.3.6.1.4.1.674.10892.1.600.10.1.1.15.9|2|15 +1.3.6.1.4.1.674.10892.1.600.10.1.1.16.7|2|16 +1.3.6.1.4.1.674.10892.1.600.10.1.1.21.13|2|21 +1.3.6.1.4.1.674.10892.1.600.10.1.1.28.27|2|28 +1.3.6.1.4.1.674.10892.1.600.10.1.2.1.24|2|24 +1.3.6.1.4.1.674.10892.1.600.10.1.2.1.27|2|27 +1.3.6.1.4.1.674.10892.1.600.10.1.2.2.4|2|4 +1.3.6.1.4.1.674.10892.1.600.10.1.2.8.21|2|21 +1.3.6.1.4.1.674.10892.1.600.10.1.2.9.18|2|18 +1.3.6.1.4.1.674.10892.1.600.10.1.2.14.27|2|27 +1.3.6.1.4.1.674.10892.1.600.10.1.2.15.9|2|9 +1.3.6.1.4.1.674.10892.1.600.10.1.2.16.7|2|7 +1.3.6.1.4.1.674.10892.1.600.10.1.2.21.13|2|13 +1.3.6.1.4.1.674.10892.1.600.10.1.2.28.27|2|27 +1.3.6.1.4.1.674.10892.1.600.10.1.3.1.24|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.3.1.27|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.3.2.4|2|2 +1.3.6.1.4.1.674.10892.1.600.10.1.3.8.21|2|6 +1.3.6.1.4.1.674.10892.1.600.10.1.3.9.18|2|6 +1.3.6.1.4.1.674.10892.1.600.10.1.3.14.27|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.3.15.9|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.3.16.7|2|4 +1.3.6.1.4.1.674.10892.1.600.10.1.3.21.13|2|4 +1.3.6.1.4.1.674.10892.1.600.10.1.3.28.27|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.4.1.24|2|4 +1.3.6.1.4.1.674.10892.1.600.10.1.4.1.27|2|4 +1.3.6.1.4.1.674.10892.1.600.10.1.4.2.4|2|2 +1.3.6.1.4.1.674.10892.1.600.10.1.4.8.21|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.4.9.18|2|6 +1.3.6.1.4.1.674.10892.1.600.10.1.4.14.27|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.4.15.9|2|4 +1.3.6.1.4.1.674.10892.1.600.10.1.4.16.7|2|6 +1.3.6.1.4.1.674.10892.1.600.10.1.4.21.13|2|6 +1.3.6.1.4.1.674.10892.1.600.10.1.4.28.27|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.5.1.24|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.5.1.27|2|6 +1.3.6.1.4.1.674.10892.1.600.10.1.5.2.4|2|7 +1.3.6.1.4.1.674.10892.1.600.10.1.5.8.21|2|4 +1.3.6.1.4.1.674.10892.1.600.10.1.5.9.18|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.5.14.27|2|5 +1.3.6.1.4.1.674.10892.1.600.10.1.5.15.9|2|3 +1.3.6.1.4.1.674.10892.1.600.10.1.5.16.7|2|3 +1.3.6.1.4.1.674.10892.1.600.10.1.5.21.13|2|6 +1.3.6.1.4.1.674.10892.1.600.10.1.5.28.27|2|5 +1.3.6.1.4.1.674.10892.1.600.10.1.6.1.24|2|11 +1.3.6.1.4.1.674.10892.1.600.10.1.6.1.27|2|31 +1.3.6.1.4.1.674.10892.1.600.10.1.6.2.4|2|31 +1.3.6.1.4.1.674.10892.1.600.10.1.6.8.21|2|27 +1.3.6.1.4.1.674.10892.1.600.10.1.6.9.18|2|21 +1.3.6.1.4.1.674.10892.1.600.10.1.6.14.27|2|10 +1.3.6.1.4.1.674.10892.1.600.10.1.6.15.9|2|19 +1.3.6.1.4.1.674.10892.1.600.10.1.6.16.7|2|22 +1.3.6.1.4.1.674.10892.1.600.10.1.6.21.13|2|18 +1.3.6.1.4.1.674.10892.1.600.10.1.6.28.27|2|11 +1.3.6.1.4.1.674.10892.1.600.10.1.7.1.24|4x|6275742062757420627574 +1.3.6.1.4.1.674.10892.1.600.10.1.7.1.27|4|zombies +1.3.6.1.4.1.674.10892.1.600.10.1.7.2.4|4x|717561696e746c79206b65707420717561696e746c79206b65707420717561696e746c7920717561696e746c79206275742064726976696e67 +1.3.6.1.4.1.674.10892.1.600.10.1.7.8.21|4x|6163746564204a616465642064726976696e67207a6f6d626965732064726976696e67204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.1.600.10.1.7.9.18|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.1.600.10.1.7.14.27|4x|4a616465642064726976696e67 +1.3.6.1.4.1.674.10892.1.600.10.1.7.15.9|4|kept +1.3.6.1.4.1.674.10892.1.600.10.1.7.16.7|4x|4a61646564206f78656e20627574 +1.3.6.1.4.1.674.10892.1.600.10.1.7.21.13|4x|6f78656e20666f7277617264207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.600.10.1.7.28.27|4x|627574206b6570742064726976696e67206b657074 +1.3.6.1.4.1.674.10892.1.600.10.1.8.1.24|2|2 +1.3.6.1.4.1.674.10892.1.600.10.1.8.1.27|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.8.2.4|2|6 +1.3.6.1.4.1.674.10892.1.600.10.1.8.8.21|2|3 +1.3.6.1.4.1.674.10892.1.600.10.1.8.9.18|2|6 +1.3.6.1.4.1.674.10892.1.600.10.1.8.14.27|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.8.15.9|2|4 +1.3.6.1.4.1.674.10892.1.600.10.1.8.16.7|2|4 +1.3.6.1.4.1.674.10892.1.600.10.1.8.21.13|2|5 +1.3.6.1.4.1.674.10892.1.600.10.1.8.28.27|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.1.4.5|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.1.4.17|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.1.8.27|2|8 +1.3.6.1.4.1.674.10892.1.600.12.1.1.13.12|2|13 +1.3.6.1.4.1.674.10892.1.600.12.1.1.15.24|2|15 +1.3.6.1.4.1.674.10892.1.600.12.1.1.18.16|2|18 +1.3.6.1.4.1.674.10892.1.600.12.1.1.18.21|2|18 +1.3.6.1.4.1.674.10892.1.600.12.1.1.18.26|2|18 +1.3.6.1.4.1.674.10892.1.600.12.1.1.21.6|2|21 +1.3.6.1.4.1.674.10892.1.600.12.1.1.23.24|2|23 +1.3.6.1.4.1.674.10892.1.600.12.1.2.4.5|2|5 +1.3.6.1.4.1.674.10892.1.600.12.1.2.4.17|2|17 +1.3.6.1.4.1.674.10892.1.600.12.1.2.8.27|2|27 +1.3.6.1.4.1.674.10892.1.600.12.1.2.13.12|2|12 +1.3.6.1.4.1.674.10892.1.600.12.1.2.15.24|2|24 +1.3.6.1.4.1.674.10892.1.600.12.1.2.18.16|2|16 +1.3.6.1.4.1.674.10892.1.600.12.1.2.18.21|2|21 +1.3.6.1.4.1.674.10892.1.600.12.1.2.18.26|2|26 +1.3.6.1.4.1.674.10892.1.600.12.1.2.21.6|2|6 +1.3.6.1.4.1.674.10892.1.600.12.1.2.23.24|2|24 +1.3.6.1.4.1.674.10892.1.600.12.1.3.4.5|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.3.4.17|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.3.8.27|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.3.13.12|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.3.15.24|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.3.18.16|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.3.18.21|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.3.18.26|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.3.21.6|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.3.23.24|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.4.4.5|2|16 +1.3.6.1.4.1.674.10892.1.600.12.1.4.4.17|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.4.8.27|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.4.13.12|2|16 +1.3.6.1.4.1.674.10892.1.600.12.1.4.15.24|2|16 +1.3.6.1.4.1.674.10892.1.600.12.1.4.18.16|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.4.18.21|2|10 +1.3.6.1.4.1.674.10892.1.600.12.1.4.18.26|2|8 +1.3.6.1.4.1.674.10892.1.600.12.1.4.21.6|2|16 +1.3.6.1.4.1.674.10892.1.600.12.1.4.23.24|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.5.4.5|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.5.4.17|2|6 +1.3.6.1.4.1.674.10892.1.600.12.1.6.4.5|2|7 +1.3.6.1.4.1.674.10892.1.600.12.1.6.4.17|2|9 +1.3.6.1.4.1.674.10892.1.600.12.1.6.8.27|2|18 +1.3.6.1.4.1.674.10892.1.600.12.1.6.13.12|2|21 +1.3.6.1.4.1.674.10892.1.600.12.1.6.15.24|2|19 +1.3.6.1.4.1.674.10892.1.600.12.1.6.18.16|2|10 +1.3.6.1.4.1.674.10892.1.600.12.1.6.18.21|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.6.18.26|2|9 +1.3.6.1.4.1.674.10892.1.600.12.1.6.21.6|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.6.23.24|2|13 +1.3.6.1.4.1.674.10892.1.600.12.1.7.4.5|2|7 +1.3.6.1.4.1.674.10892.1.600.12.1.7.4.17|2|3 +1.3.6.1.4.1.674.10892.1.600.12.1.7.8.27|2|7 +1.3.6.1.4.1.674.10892.1.600.12.1.7.13.12|2|10 +1.3.6.1.4.1.674.10892.1.600.12.1.7.15.24|2|10 +1.3.6.1.4.1.674.10892.1.600.12.1.7.18.16|2|5 +1.3.6.1.4.1.674.10892.1.600.12.1.7.18.21|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.7.18.26|2|10 +1.3.6.1.4.1.674.10892.1.600.12.1.7.21.6|2|3 +1.3.6.1.4.1.674.10892.1.600.12.1.7.23.24|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.8.4.5|4x|627574206f78656e20616374656420717561696e746c79207468656972207a6f6d626965732062757420627574 +1.3.6.1.4.1.674.10892.1.600.12.1.8.4.17|4x|6b65707420717561696e746c79207468656972207a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.1.600.12.1.8.8.27|4x|666f7277617264206f78656e +1.3.6.1.4.1.674.10892.1.600.12.1.8.13.12|4x|6b6570742062757420666f7277617264206163746564 +1.3.6.1.4.1.674.10892.1.600.12.1.8.15.24|4x|6b657074204a6164656420717561696e746c79207a6f6d6269657320627574204a61646564206b657074204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.1.600.12.1.8.18.16|4x|6163746564206f78656e20717561696e746c79204a61646564204a61646564 +1.3.6.1.4.1.674.10892.1.600.12.1.8.18.21|4|zombies +1.3.6.1.4.1.674.10892.1.600.12.1.8.18.26|4x|7a6f6d62696573204a616465642062757420717561696e746c7920717561696e746c792064726976696e67204a61646564204a6164656420666f7277617264 +1.3.6.1.4.1.674.10892.1.600.12.1.8.21.6|4x|4a616465642064726976696e672062757420666f727761726420717561696e746c79206f78656e206f78656e207468656972206b657074 +1.3.6.1.4.1.674.10892.1.600.12.1.8.23.24|4x|64726976696e67207468656972207468656972204a616465642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.600.12.1.9.4.5|2|29 +1.3.6.1.4.1.674.10892.1.600.12.1.9.4.17|2|19 +1.3.6.1.4.1.674.10892.1.600.12.1.10.4.5|2|14 +1.3.6.1.4.1.674.10892.1.600.12.1.10.4.17|2|31 +1.3.6.1.4.1.674.10892.1.600.12.1.10.8.27|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.10.13.12|2|29 +1.3.6.1.4.1.674.10892.1.600.12.1.10.15.24|2|6 +1.3.6.1.4.1.674.10892.1.600.12.1.10.18.16|2|12 +1.3.6.1.4.1.674.10892.1.600.12.1.10.18.21|2|12 +1.3.6.1.4.1.674.10892.1.600.12.1.10.18.26|2|11 +1.3.6.1.4.1.674.10892.1.600.12.1.10.21.6|2|11 +1.3.6.1.4.1.674.10892.1.600.12.1.10.23.24|2|11 +1.3.6.1.4.1.674.10892.1.600.12.1.11.4.5|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.11.4.17|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.11.8.27|2|16 +1.3.6.1.4.1.674.10892.1.600.12.1.11.13.12|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.11.15.24|2|8 +1.3.6.1.4.1.674.10892.1.600.12.1.11.18.16|2|8 +1.3.6.1.4.1.674.10892.1.600.12.1.11.18.21|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.11.18.26|2|8 +1.3.6.1.4.1.674.10892.1.600.12.1.11.21.6|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.11.23.24|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.12.4.5|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.12.4.17|2|3 +1.3.6.1.4.1.674.10892.1.600.12.1.12.8.27|2|3 +1.3.6.1.4.1.674.10892.1.600.12.1.12.13.12|2|3 +1.3.6.1.4.1.674.10892.1.600.12.1.12.15.24|2|3 +1.3.6.1.4.1.674.10892.1.600.12.1.12.18.16|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.12.18.21|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.12.18.26|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.12.21.6|2|3 +1.3.6.1.4.1.674.10892.1.600.12.1.12.23.24|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.13.4.5|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.13.4.17|2|0 +1.3.6.1.4.1.674.10892.1.600.12.1.13.8.27|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.13.13.12|2|0 +1.3.6.1.4.1.674.10892.1.600.12.1.13.15.24|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.13.18.16|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.13.18.21|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.13.18.26|2|0 +1.3.6.1.4.1.674.10892.1.600.12.1.13.21.6|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.13.23.24|2|0 +1.3.6.1.4.1.674.10892.1.600.12.1.14.4.5|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.14.4.17|2|3 +1.3.6.1.4.1.674.10892.1.600.12.1.14.8.27|2|13 +1.3.6.1.4.1.674.10892.1.600.12.1.14.13.12|2|19 +1.3.6.1.4.1.674.10892.1.600.12.1.14.15.24|2|31 +1.3.6.1.4.1.674.10892.1.600.12.1.14.18.16|2|13 +1.3.6.1.4.1.674.10892.1.600.12.1.14.18.21|2|30 +1.3.6.1.4.1.674.10892.1.600.12.1.14.18.26|2|31 +1.3.6.1.4.1.674.10892.1.600.12.1.14.21.6|2|12 +1.3.6.1.4.1.674.10892.1.600.12.1.14.23.24|2|23 +1.3.6.1.4.1.674.10892.1.600.12.1.16.4.5|2|29 +1.3.6.1.4.1.674.10892.1.600.12.1.16.4.17|2|19 +1.3.6.1.4.1.674.10892.1.600.20.1.1.12.15|2|12 +1.3.6.1.4.1.674.10892.1.600.20.1.1.22.19|2|22 +1.3.6.1.4.1.674.10892.1.600.20.1.2.12.15|2|15 +1.3.6.1.4.1.674.10892.1.600.20.1.2.22.19|2|19 +1.3.6.1.4.1.674.10892.1.600.20.1.3.12.15|2|6 +1.3.6.1.4.1.674.10892.1.600.20.1.3.22.19|2|2 +1.3.6.1.4.1.674.10892.1.600.20.1.4.12.15|2|1 +1.3.6.1.4.1.674.10892.1.600.20.1.4.22.19|2|1 +1.3.6.1.4.1.674.10892.1.600.20.1.5.12.15|2|5 +1.3.6.1.4.1.674.10892.1.600.20.1.5.22.19|2|6 +1.3.6.1.4.1.674.10892.1.600.20.1.6.12.15|2|19 +1.3.6.1.4.1.674.10892.1.600.20.1.6.22.19|2|29 +1.3.6.1.4.1.674.10892.1.600.20.1.7.12.15|2|6 +1.3.6.1.4.1.674.10892.1.600.20.1.7.22.19|2|3 +1.3.6.1.4.1.674.10892.1.600.20.1.8.12.15|4x|6275742064726976696e6720616374656420666f7277617264 +1.3.6.1.4.1.674.10892.1.600.20.1.8.22.19|4x|4a61646564206275742062757420717561696e746c79206f78656e204a61646564206275742064726976696e67 +1.3.6.1.4.1.674.10892.1.600.20.1.9.12.15|2|0 +1.3.6.1.4.1.674.10892.1.600.20.1.9.22.19|2|11 +1.3.6.1.4.1.674.10892.1.600.20.1.10.12.15|2|25 +1.3.6.1.4.1.674.10892.1.600.20.1.10.22.19|2|21 +1.3.6.1.4.1.674.10892.1.600.20.1.11.12.15|2|6 +1.3.6.1.4.1.674.10892.1.600.20.1.11.22.19|2|11 +1.3.6.1.4.1.674.10892.1.600.20.1.12.12.15|2|10 +1.3.6.1.4.1.674.10892.1.600.20.1.12.22.19|2|1 +1.3.6.1.4.1.674.10892.1.600.20.1.13.12.15|2|25 +1.3.6.1.4.1.674.10892.1.600.20.1.13.22.19|2|21 +1.3.6.1.4.1.674.10892.1.600.20.1.14.12.15|2|22 +1.3.6.1.4.1.674.10892.1.600.20.1.14.22.19|2|15 +1.3.6.1.4.1.674.10892.1.600.20.1.15.12.15|2|4 +1.3.6.1.4.1.674.10892.1.600.20.1.15.22.19|2|8 +1.3.6.1.4.1.674.10892.1.600.20.1.16.12.15|2|2 +1.3.6.1.4.1.674.10892.1.600.20.1.16.22.19|2|2 +1.3.6.1.4.1.674.10892.1.600.30.1.1.9.28|2|9 +1.3.6.1.4.1.674.10892.1.600.30.1.1.18.4|2|18 +1.3.6.1.4.1.674.10892.1.600.30.1.2.9.28|2|28 +1.3.6.1.4.1.674.10892.1.600.30.1.2.18.4|2|4 +1.3.6.1.4.1.674.10892.1.600.30.1.3.9.28|2|6 +1.3.6.1.4.1.674.10892.1.600.30.1.3.18.4|2|1 +1.3.6.1.4.1.674.10892.1.600.30.1.4.9.28|2|1 +1.3.6.1.4.1.674.10892.1.600.30.1.4.18.4|2|6 +1.3.6.1.4.1.674.10892.1.600.30.1.5.9.28|2|2 +1.3.6.1.4.1.674.10892.1.600.30.1.5.18.4|2|5 +1.3.6.1.4.1.674.10892.1.600.30.1.6.9.28|2|16 +1.3.6.1.4.1.674.10892.1.600.30.1.6.18.4|2|10 +1.3.6.1.4.1.674.10892.1.600.30.1.7.9.28|2|26 +1.3.6.1.4.1.674.10892.1.600.30.1.7.18.4|2|26 +1.3.6.1.4.1.674.10892.1.600.30.1.8.9.28|4x|64726976696e67207a6f6d626965732064726976696e6720717561696e746c7920717561696e746c79206b657074206163746564 +1.3.6.1.4.1.674.10892.1.600.30.1.8.18.4|4x|4a61646564206b6570742062757420666f7277617264206163746564204a6164656420666f7277617264206b657074207468656972 +1.3.6.1.4.1.674.10892.1.600.30.1.9.9.28|2|1 +1.3.6.1.4.1.674.10892.1.600.30.1.9.18.4|2|14 +1.3.6.1.4.1.674.10892.1.600.30.1.10.9.28|2|2 +1.3.6.1.4.1.674.10892.1.600.30.1.10.18.4|2|19 +1.3.6.1.4.1.674.10892.1.600.30.1.11.9.28|2|25 +1.3.6.1.4.1.674.10892.1.600.30.1.11.18.4|2|13 +1.3.6.1.4.1.674.10892.1.600.30.1.12.9.28|2|12 +1.3.6.1.4.1.674.10892.1.600.30.1.12.18.4|2|10 +1.3.6.1.4.1.674.10892.1.600.30.1.13.9.28|2|19 +1.3.6.1.4.1.674.10892.1.600.30.1.13.18.4|2|19 +1.3.6.1.4.1.674.10892.1.600.30.1.14.9.28|2|31 +1.3.6.1.4.1.674.10892.1.600.30.1.14.18.4|2|23 +1.3.6.1.4.1.674.10892.1.600.30.1.15.9.28|2|8 +1.3.6.1.4.1.674.10892.1.600.30.1.15.18.4|2|8 +1.3.6.1.4.1.674.10892.1.600.30.1.16.9.28|2|2 +1.3.6.1.4.1.674.10892.1.600.30.1.16.18.4|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.1.5.9|2|5 +1.3.6.1.4.1.674.10892.1.600.40.1.1.9.5|2|9 +1.3.6.1.4.1.674.10892.1.600.40.1.1.11.16|2|11 +1.3.6.1.4.1.674.10892.1.600.40.1.1.15.28|2|15 +1.3.6.1.4.1.674.10892.1.600.40.1.1.19.3|2|19 +1.3.6.1.4.1.674.10892.1.600.40.1.1.19.16|2|19 +1.3.6.1.4.1.674.10892.1.600.40.1.1.21.31|2|21 +1.3.6.1.4.1.674.10892.1.600.40.1.1.25.26|2|25 +1.3.6.1.4.1.674.10892.1.600.40.1.1.29.7|2|29 +1.3.6.1.4.1.674.10892.1.600.40.1.1.30.13|2|30 +1.3.6.1.4.1.674.10892.1.600.40.1.2.5.9|2|9 +1.3.6.1.4.1.674.10892.1.600.40.1.2.9.5|2|5 +1.3.6.1.4.1.674.10892.1.600.40.1.2.11.16|2|16 +1.3.6.1.4.1.674.10892.1.600.40.1.2.15.28|2|28 +1.3.6.1.4.1.674.10892.1.600.40.1.2.19.3|2|3 +1.3.6.1.4.1.674.10892.1.600.40.1.2.19.16|2|16 +1.3.6.1.4.1.674.10892.1.600.40.1.2.21.31|2|31 +1.3.6.1.4.1.674.10892.1.600.40.1.2.25.26|2|26 +1.3.6.1.4.1.674.10892.1.600.40.1.2.29.7|2|7 +1.3.6.1.4.1.674.10892.1.600.40.1.2.30.13|2|13 +1.3.6.1.4.1.674.10892.1.600.40.1.3.5.9|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.3.9.5|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.3.11.16|2|4 +1.3.6.1.4.1.674.10892.1.600.40.1.3.15.28|2|14 +1.3.6.1.4.1.674.10892.1.600.40.1.3.19.3|2|30 +1.3.6.1.4.1.674.10892.1.600.40.1.3.19.16|2|4 +1.3.6.1.4.1.674.10892.1.600.40.1.3.21.31|2|16 +1.3.6.1.4.1.674.10892.1.600.40.1.3.25.26|2|16 +1.3.6.1.4.1.674.10892.1.600.40.1.3.29.7|2|8 +1.3.6.1.4.1.674.10892.1.600.40.1.3.30.13|2|8 +1.3.6.1.4.1.674.10892.1.600.40.1.4.5.9|2|8 +1.3.6.1.4.1.674.10892.1.600.40.1.4.9.5|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.4.11.16|2|8 +1.3.6.1.4.1.674.10892.1.600.40.1.4.15.28|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.4.19.3|2|8 +1.3.6.1.4.1.674.10892.1.600.40.1.4.19.16|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.4.21.31|2|16 +1.3.6.1.4.1.674.10892.1.600.40.1.4.25.26|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.4.29.7|2|4 +1.3.6.1.4.1.674.10892.1.600.40.1.4.30.13|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.5.5.9|2|6 +1.3.6.1.4.1.674.10892.1.600.40.1.5.9.5|2|7 +1.3.6.1.4.1.674.10892.1.600.40.1.5.11.16|2|4 +1.3.6.1.4.1.674.10892.1.600.40.1.5.15.28|2|7 +1.3.6.1.4.1.674.10892.1.600.40.1.5.19.3|2|3 +1.3.6.1.4.1.674.10892.1.600.40.1.5.19.16|2|4 +1.3.6.1.4.1.674.10892.1.600.40.1.5.21.31|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.5.25.26|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.5.29.7|2|6 +1.3.6.1.4.1.674.10892.1.600.40.1.5.30.13|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.6.5.9|2|29 +1.3.6.1.4.1.674.10892.1.600.40.1.6.9.5|2|18 +1.3.6.1.4.1.674.10892.1.600.40.1.6.11.16|2|22 +1.3.6.1.4.1.674.10892.1.600.40.1.6.15.28|2|28 +1.3.6.1.4.1.674.10892.1.600.40.1.6.19.3|2|4 +1.3.6.1.4.1.674.10892.1.600.40.1.6.19.16|2|13 +1.3.6.1.4.1.674.10892.1.600.40.1.6.21.31|2|4 +1.3.6.1.4.1.674.10892.1.600.40.1.6.25.26|2|16 +1.3.6.1.4.1.674.10892.1.600.40.1.6.29.7|2|8 +1.3.6.1.4.1.674.10892.1.600.40.1.6.30.13|2|19 +1.3.6.1.4.1.674.10892.1.600.40.1.7.5.9|4x|7468656972206163746564 +1.3.6.1.4.1.674.10892.1.600.40.1.7.9.5|4x|7a6f6d62696573207a6f6d6269657320666f7277617264206b657074204a616465642064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.1.600.40.1.7.11.16|4x|6f78656e2064726976696e6720666f7277617264206f78656e206b65707420666f7277617264206b657074204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.1.600.40.1.7.15.28|4x|7a6f6d6269657320666f727761726420746865697220666f7277617264206275742064726976696e67 +1.3.6.1.4.1.674.10892.1.600.40.1.7.19.3|4|kept +1.3.6.1.4.1.674.10892.1.600.40.1.7.19.16|4|quaintly +1.3.6.1.4.1.674.10892.1.600.40.1.7.21.31|4|Jaded +1.3.6.1.4.1.674.10892.1.600.40.1.7.25.26|4x|64726976696e67206163746564206b657074204a61646564206163746564204a61646564 +1.3.6.1.4.1.674.10892.1.600.40.1.7.29.7|4x|6b65707420717561696e746c79207468656972207468656972206b6570742064726976696e6720746865697220616374656420666f7277617264 +1.3.6.1.4.1.674.10892.1.600.40.1.7.30.13|4x|64726976696e6720616374656420627574206f78656e20666f727761726420666f7277617264206b657074204a61646564 +1.3.6.1.4.1.674.10892.1.600.40.1.8.5.9|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.8.9.5|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.8.11.16|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.8.15.28|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.8.19.3|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.8.19.16|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.8.21.31|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.8.25.26|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.8.29.7|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.8.30.13|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.9.5.9|2|4 +1.3.6.1.4.1.674.10892.1.600.40.1.9.9.5|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.9.11.16|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.9.15.28|2|5 +1.3.6.1.4.1.674.10892.1.600.40.1.9.19.3|2|6 +1.3.6.1.4.1.674.10892.1.600.40.1.9.19.16|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.9.21.31|2|6 +1.3.6.1.4.1.674.10892.1.600.40.1.9.25.26|2|4 +1.3.6.1.4.1.674.10892.1.600.40.1.9.29.7|2|6 +1.3.6.1.4.1.674.10892.1.600.40.1.9.30.13|2|1 +1.3.6.1.4.1.674.10892.1.600.42.1.1.2.18|2|2 +1.3.6.1.4.1.674.10892.1.600.42.1.1.3.3|2|3 +1.3.6.1.4.1.674.10892.1.600.42.1.1.3.18|2|3 +1.3.6.1.4.1.674.10892.1.600.42.1.1.8.6|2|8 +1.3.6.1.4.1.674.10892.1.600.42.1.1.15.4|2|15 +1.3.6.1.4.1.674.10892.1.600.42.1.1.16.11|2|16 +1.3.6.1.4.1.674.10892.1.600.42.1.1.17.25|2|17 +1.3.6.1.4.1.674.10892.1.600.42.1.1.21.22|2|21 +1.3.6.1.4.1.674.10892.1.600.42.1.1.26.9|2|26 +1.3.6.1.4.1.674.10892.1.600.42.1.1.30.30|2|30 +1.3.6.1.4.1.674.10892.1.600.42.1.2.2.18|2|18 +1.3.6.1.4.1.674.10892.1.600.42.1.2.3.3|2|3 +1.3.6.1.4.1.674.10892.1.600.42.1.2.3.18|2|18 +1.3.6.1.4.1.674.10892.1.600.42.1.2.8.6|2|6 +1.3.6.1.4.1.674.10892.1.600.42.1.2.15.4|2|4 +1.3.6.1.4.1.674.10892.1.600.42.1.2.16.11|2|11 +1.3.6.1.4.1.674.10892.1.600.42.1.2.17.25|2|25 +1.3.6.1.4.1.674.10892.1.600.42.1.2.21.22|2|22 +1.3.6.1.4.1.674.10892.1.600.42.1.2.26.9|2|9 +1.3.6.1.4.1.674.10892.1.600.42.1.2.30.30|2|30 +1.3.6.1.4.1.674.10892.1.600.42.1.3.2.18|2|2 +1.3.6.1.4.1.674.10892.1.600.42.1.3.3.3|2|1 +1.3.6.1.4.1.674.10892.1.600.42.1.3.3.18|2|4 +1.3.6.1.4.1.674.10892.1.600.42.1.3.8.6|2|1 +1.3.6.1.4.1.674.10892.1.600.42.1.3.15.4|2|2 +1.3.6.1.4.1.674.10892.1.600.42.1.3.16.11|2|2 +1.3.6.1.4.1.674.10892.1.600.42.1.3.17.25|2|4 +1.3.6.1.4.1.674.10892.1.600.42.1.3.21.22|2|2 +1.3.6.1.4.1.674.10892.1.600.42.1.3.26.9|2|1 +1.3.6.1.4.1.674.10892.1.600.42.1.3.30.30|2|1 +1.3.6.1.4.1.674.10892.1.600.42.1.4.2.18|2|16 +1.3.6.1.4.1.674.10892.1.600.42.1.4.3.3|2|10 +1.3.6.1.4.1.674.10892.1.600.42.1.4.3.18|2|16 +1.3.6.1.4.1.674.10892.1.600.42.1.4.8.6|2|16 +1.3.6.1.4.1.674.10892.1.600.42.1.4.15.4|2|4 +1.3.6.1.4.1.674.10892.1.600.42.1.4.16.11|2|2 +1.3.6.1.4.1.674.10892.1.600.42.1.4.17.25|2|26 +1.3.6.1.4.1.674.10892.1.600.42.1.4.21.22|2|10 +1.3.6.1.4.1.674.10892.1.600.42.1.4.26.9|2|1 +1.3.6.1.4.1.674.10892.1.600.42.1.4.30.30|2|8 +1.3.6.1.4.1.674.10892.1.600.42.1.5.2.18|2|4 +1.3.6.1.4.1.674.10892.1.600.42.1.5.3.3|2|4 +1.3.6.1.4.1.674.10892.1.600.42.1.5.3.18|2|6 +1.3.6.1.4.1.674.10892.1.600.42.1.5.8.6|2|1 +1.3.6.1.4.1.674.10892.1.600.42.1.5.15.4|2|5 +1.3.6.1.4.1.674.10892.1.600.42.1.5.16.11|2|2 +1.3.6.1.4.1.674.10892.1.600.42.1.5.17.25|2|3 +1.3.6.1.4.1.674.10892.1.600.42.1.5.21.22|2|3 +1.3.6.1.4.1.674.10892.1.600.42.1.5.26.9|2|2 +1.3.6.1.4.1.674.10892.1.600.42.1.5.30.30|2|5 +1.3.6.1.4.1.674.10892.1.600.42.1.6.2.18|2|17 +1.3.6.1.4.1.674.10892.1.600.42.1.6.3.3|2|22 +1.3.6.1.4.1.674.10892.1.600.42.1.6.3.18|2|30 +1.3.6.1.4.1.674.10892.1.600.42.1.6.8.6|2|5 +1.3.6.1.4.1.674.10892.1.600.42.1.6.15.4|2|14 +1.3.6.1.4.1.674.10892.1.600.42.1.6.16.11|2|31 +1.3.6.1.4.1.674.10892.1.600.42.1.6.17.25|2|28 +1.3.6.1.4.1.674.10892.1.600.42.1.6.21.22|2|3 +1.3.6.1.4.1.674.10892.1.600.42.1.6.26.9|2|22 +1.3.6.1.4.1.674.10892.1.600.42.1.6.30.30|2|5 +1.3.6.1.4.1.674.10892.1.600.42.1.7.2.18|4x|6b6570742062757420746865697220627574206f78656e204a61646564206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.1.600.42.1.7.3.3|4x|7468656972206f78656e204a6164656420627574 +1.3.6.1.4.1.674.10892.1.600.42.1.7.3.18|4x|7a6f6d6269657320746865697220616374656420666f727761726420666f7277617264206b657074207468656972 +1.3.6.1.4.1.674.10892.1.600.42.1.7.8.6|4x|74686569722064726976696e6720666f7277617264207468656972207468656972207a6f6d6269657320717561696e746c79204a6164656420666f7277617264 +1.3.6.1.4.1.674.10892.1.600.42.1.7.15.4|4x|61637465642064726976696e67206f78656e207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.600.42.1.7.16.11|4x|616374656420627574207468656972 +1.3.6.1.4.1.674.10892.1.600.42.1.7.17.25|4x|6b65707420627574206b65707420627574204a61646564 +1.3.6.1.4.1.674.10892.1.600.42.1.7.21.22|4x|64726976696e67206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.1.600.42.1.7.26.9|4x|717561696e746c79207a6f6d626965732064726976696e67207468656972207a6f6d626965732064726976696e67 +1.3.6.1.4.1.674.10892.1.600.42.1.7.30.30|4x|7a6f6d626965732064726976696e672064726976696e67207a6f6d6269657320627574204a61646564207468656972207a6f6d626965732064726976696e67 +1.3.6.1.4.1.674.10892.1.600.50.1.1.3.17|2|3 +1.3.6.1.4.1.674.10892.1.600.50.1.1.6.19|2|6 +1.3.6.1.4.1.674.10892.1.600.50.1.2.3.17|2|17 +1.3.6.1.4.1.674.10892.1.600.50.1.2.6.19|2|19 +1.3.6.1.4.1.674.10892.1.600.50.1.3.3.17|2|6 +1.3.6.1.4.1.674.10892.1.600.50.1.3.6.19|2|1 +1.3.6.1.4.1.674.10892.1.600.50.1.4.3.17|2|2 +1.3.6.1.4.1.674.10892.1.600.50.1.4.6.19|2|2 +1.3.6.1.4.1.674.10892.1.600.50.1.5.3.17|2|6 +1.3.6.1.4.1.674.10892.1.600.50.1.5.6.19|2|5 +1.3.6.1.4.1.674.10892.1.600.50.1.6.3.17|2|1 +1.3.6.1.4.1.674.10892.1.600.50.1.6.6.19|2|1 +1.3.6.1.4.1.674.10892.1.600.50.1.7.3.17|4x|7a6f6d62696573206b65707420746865697220717561696e746c7920627574 +1.3.6.1.4.1.674.10892.1.600.50.1.7.6.19|4|zombies +1.3.6.1.4.1.674.10892.1.600.60.1.1.12.14|2|12 +1.3.6.1.4.1.674.10892.1.600.60.1.1.22.22|2|22 +1.3.6.1.4.1.674.10892.1.600.60.1.2.12.14|2|14 +1.3.6.1.4.1.674.10892.1.600.60.1.2.22.22|2|22 +1.3.6.1.4.1.674.10892.1.600.60.1.3.12.14|2|2 +1.3.6.1.4.1.674.10892.1.600.60.1.3.22.22|2|2 +1.3.6.1.4.1.674.10892.1.600.60.1.4.12.14|2|6 +1.3.6.1.4.1.674.10892.1.600.60.1.4.22.22|2|6 +1.3.6.1.4.1.674.10892.1.600.60.1.5.12.14|2|4 +1.3.6.1.4.1.674.10892.1.600.60.1.5.22.22|2|3 +1.3.6.1.4.1.674.10892.1.600.60.1.6.12.14|4x|7a6f6d6269657320717561696e746c7920666f727761726420616374656420717561696e746c79206163746564204a61646564207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.600.60.1.6.22.22|4x|616374656420717561696e746c79207468656972204a61646564206f78656e20666f727761726420666f7277617264 +1.3.6.1.4.1.674.10892.1.600.60.1.7.12.14|2|20 +1.3.6.1.4.1.674.10892.1.600.60.1.7.22.22|2|7 +1.3.6.1.4.1.674.10892.1.600.60.1.8.12.14|4x|717561696e746c79206163746564206163746564206f78656e +1.3.6.1.4.1.674.10892.1.600.60.1.8.22.22|4x|746865697220717561696e746c79206b657074207468656972 +1.3.6.1.4.1.674.10892.1.600.60.1.9.12.14|2|15 +1.3.6.1.4.1.674.10892.1.600.60.1.9.22.22|2|26 +1.3.6.1.4.1.674.10892.1.600.60.1.10.12.14|4x|717561696e746c7920717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.600.60.1.10.22.22|4x|627574206f78656e20717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.1.600.60.1.11.12.14|4x|7a6f6d62696573206b657074206f78656e2064726976696e67 +1.3.6.1.4.1.674.10892.1.600.60.1.11.22.22|4x|6b657074206b657074206b657074207468656972206f78656e +1.3.6.1.4.1.674.10892.1.600.60.1.12.12.14|2|21 +1.3.6.1.4.1.674.10892.1.600.60.1.12.22.22|2|29 +1.3.6.1.4.1.674.10892.1.600.60.1.13.12.14|4x|7468656972207a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.674.10892.1.600.60.1.13.22.22|4x|64726976696e672064726976696e67204a6164656420627574 +1.3.6.1.4.1.674.10892.1.600.60.1.14.12.14|4x|717561696e746c7920717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.1.600.60.1.14.22.22|4x|6163746564207468656972204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.1.600.60.1.15.12.14|2|6 +1.3.6.1.4.1.674.10892.1.600.60.1.15.22.22|2|2 +1.3.6.1.4.1.674.10892.1.600.60.1.16.12.14|2|4 +1.3.6.1.4.1.674.10892.1.600.60.1.16.22.22|2|1 +1.3.6.1.4.1.674.10892.1.600.60.1.17.12.14|2|1 +1.3.6.1.4.1.674.10892.1.600.60.1.17.22.22|2|1 +1.3.6.1.4.1.674.10892.1.600.60.1.18.12.14|2|1 +1.3.6.1.4.1.674.10892.1.600.60.1.18.22.22|2|1 +1.3.6.1.4.1.674.10892.1.600.60.1.19.12.14|2|21 +1.3.6.1.4.1.674.10892.1.600.60.1.19.22.22|2|0 +1.3.6.1.4.1.674.10892.1.600.60.1.20.12.14|2|25 +1.3.6.1.4.1.674.10892.1.600.60.1.20.22.22|2|14 +1.3.6.1.4.1.674.10892.1.600.60.1.21.12.14|2|10 +1.3.6.1.4.1.674.10892.1.600.60.1.21.22.22|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.1.1.1|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.1.1.7|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.1.4.9|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.1.6.26|2|6 +1.3.6.1.4.1.674.10892.1.600.70.1.1.8.4|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.1.10.17|2|10 +1.3.6.1.4.1.674.10892.1.600.70.1.1.14.30|2|14 +1.3.6.1.4.1.674.10892.1.600.70.1.1.26.27|2|26 +1.3.6.1.4.1.674.10892.1.600.70.1.1.26.29|2|26 +1.3.6.1.4.1.674.10892.1.600.70.1.1.29.9|2|29 +1.3.6.1.4.1.674.10892.1.600.70.1.2.1.1|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.2.1.7|2|7 +1.3.6.1.4.1.674.10892.1.600.70.1.2.4.9|2|9 +1.3.6.1.4.1.674.10892.1.600.70.1.2.6.26|2|26 +1.3.6.1.4.1.674.10892.1.600.70.1.2.8.4|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.2.10.17|2|17 +1.3.6.1.4.1.674.10892.1.600.70.1.2.14.30|2|30 +1.3.6.1.4.1.674.10892.1.600.70.1.2.26.27|2|27 +1.3.6.1.4.1.674.10892.1.600.70.1.2.26.29|2|29 +1.3.6.1.4.1.674.10892.1.600.70.1.2.29.9|2|9 +1.3.6.1.4.1.674.10892.1.600.70.1.3.1.1|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.3.1.7|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.3.4.9|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.3.6.26|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.3.8.4|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.3.10.17|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.3.14.30|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.3.26.27|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.3.26.29|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.3.29.9|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.4.1.1|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.4.1.7|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.4.4.9|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.4.6.26|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.4.8.4|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.4.10.17|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.4.14.30|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.4.26.27|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.4.26.29|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.4.29.9|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.5.1.1|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.5.1.7|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.5.4.9|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.5.6.26|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.5.8.4|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.5.10.17|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.5.14.30|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.5.26.27|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.5.26.29|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.5.29.9|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.6.1.1|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.6.1.7|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.6.4.9|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.6.6.26|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.6.8.4|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.6.10.17|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.6.14.30|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.6.26.27|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.6.26.29|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.6.29.9|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.7.1.1|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.7.1.7|2|16 +1.3.6.1.4.1.674.10892.1.600.70.1.7.4.9|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.7.6.26|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.7.8.4|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.7.10.17|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.7.14.30|2|16 +1.3.6.1.4.1.674.10892.1.600.70.1.7.26.27|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.7.26.29|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.7.29.9|2|16 +1.3.6.1.4.1.674.10892.1.600.70.1.8.1.1|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.8.1.7|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.8.4.9|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.8.6.26|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.8.8.4|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.8.10.17|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.8.14.30|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.8.26.27|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.8.26.29|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.8.29.9|2|16 +1.3.6.1.4.1.674.10892.1.600.70.1.9.1.1|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.9.1.7|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.9.4.9|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.9.6.26|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.9.8.4|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.9.10.17|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.9.14.30|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.9.26.27|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.9.26.29|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.9.29.9|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.10.1.1|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.10.1.7|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.10.4.9|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.10.6.26|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.10.8.4|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.10.10.17|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.10.14.30|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.10.26.27|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.10.26.29|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.10.29.9|2|2 +1.3.6.1.4.1.674.10892.1.700.10.1.1.1.19|2|1 +1.3.6.1.4.1.674.10892.1.700.10.1.1.6.31|2|6 +1.3.6.1.4.1.674.10892.1.700.10.1.2.1.19|2|19 +1.3.6.1.4.1.674.10892.1.700.10.1.2.6.31|2|31 +1.3.6.1.4.1.674.10892.1.700.10.1.3.1.19|2|2 +1.3.6.1.4.1.674.10892.1.700.10.1.3.6.31|2|1 +1.3.6.1.4.1.674.10892.1.700.10.1.4.1.19|2|6 +1.3.6.1.4.1.674.10892.1.700.10.1.4.6.31|2|4 +1.3.6.1.4.1.674.10892.1.700.10.1.5.1.19|2|4 +1.3.6.1.4.1.674.10892.1.700.10.1.5.6.31|2|7 +1.3.6.1.4.1.674.10892.1.700.10.1.6.1.19|2|6 +1.3.6.1.4.1.674.10892.1.700.10.1.6.6.31|2|29 +1.3.6.1.4.1.674.10892.1.700.10.1.7.1.19|4x|64726976696e67206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.1.700.10.1.7.6.31|4x|7468656972204a6164656420717561696e746c79206275742062757420746865697220717561696e746c79206b657074206163746564 +1.3.6.1.4.1.674.10892.1.700.10.1.8.1.19|2|3 +1.3.6.1.4.1.674.10892.1.700.10.1.8.6.31|2|6 +1.3.6.1.4.1.674.10892.1.700.12.1.1.8.11|2|8 +1.3.6.1.4.1.674.10892.1.700.12.1.1.19.3|2|19 +1.3.6.1.4.1.674.10892.1.700.12.1.2.8.11|2|11 +1.3.6.1.4.1.674.10892.1.700.12.1.2.19.3|2|3 +1.3.6.1.4.1.674.10892.1.700.12.1.3.8.11|2|2 +1.3.6.1.4.1.674.10892.1.700.12.1.3.19.3|2|1 +1.3.6.1.4.1.674.10892.1.700.12.1.4.8.11|2|2 +1.3.6.1.4.1.674.10892.1.700.12.1.4.19.3|2|1 +1.3.6.1.4.1.674.10892.1.700.12.1.5.8.11|2|2 +1.3.6.1.4.1.674.10892.1.700.12.1.5.19.3|2|5 +1.3.6.1.4.1.674.10892.1.700.12.1.6.8.11|2|11 +1.3.6.1.4.1.674.10892.1.700.12.1.6.19.3|2|21 +1.3.6.1.4.1.674.10892.1.700.12.1.7.8.11|2|9 +1.3.6.1.4.1.674.10892.1.700.12.1.7.19.3|2|10 +1.3.6.1.4.1.674.10892.1.700.12.1.8.8.11|4|acted +1.3.6.1.4.1.674.10892.1.700.12.1.8.19.3|4x|6163746564206f78656e20627574207a6f6d626965732064726976696e67206163746564204a61646564 +1.3.6.1.4.1.674.10892.1.700.12.1.9.8.11|2|23 +1.3.6.1.4.1.674.10892.1.700.12.1.9.19.3|2|18 +1.3.6.1.4.1.674.10892.1.700.12.1.10.8.11|2|3 +1.3.6.1.4.1.674.10892.1.700.12.1.10.19.3|2|26 +1.3.6.1.4.1.674.10892.1.700.12.1.11.8.11|2|13 +1.3.6.1.4.1.674.10892.1.700.12.1.11.19.3|2|18 +1.3.6.1.4.1.674.10892.1.700.12.1.12.8.11|2|7 +1.3.6.1.4.1.674.10892.1.700.12.1.12.19.3|2|17 +1.3.6.1.4.1.674.10892.1.700.12.1.13.8.11|2|21 +1.3.6.1.4.1.674.10892.1.700.12.1.13.19.3|2|7 +1.3.6.1.4.1.674.10892.1.700.12.1.14.8.11|2|7 +1.3.6.1.4.1.674.10892.1.700.12.1.14.19.3|2|30 +1.3.6.1.4.1.674.10892.1.700.12.1.15.8.11|2|11 +1.3.6.1.4.1.674.10892.1.700.12.1.15.19.3|2|4 +1.3.6.1.4.1.674.10892.1.700.12.1.16.8.11|2|4 +1.3.6.1.4.1.674.10892.1.700.12.1.16.19.3|2|2 +1.3.6.1.4.1.674.10892.1.700.12.1.17.8.11|2|8 +1.3.6.1.4.1.674.10892.1.700.12.1.17.19.3|2|2 +1.3.6.1.4.1.674.10892.1.700.12.1.18.8.11|2|1 +1.3.6.1.4.1.674.10892.1.700.12.1.18.19.3|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.1.11.1|2|11 +1.3.6.1.4.1.674.10892.1.700.20.1.1.13.18|2|13 +1.3.6.1.4.1.674.10892.1.700.20.1.1.14.8|2|14 +1.3.6.1.4.1.674.10892.1.700.20.1.1.18.13|2|18 +1.3.6.1.4.1.674.10892.1.700.20.1.1.19.10|2|19 +1.3.6.1.4.1.674.10892.1.700.20.1.1.21.13|2|21 +1.3.6.1.4.1.674.10892.1.700.20.1.1.22.4|2|22 +1.3.6.1.4.1.674.10892.1.700.20.1.1.23.23|2|23 +1.3.6.1.4.1.674.10892.1.700.20.1.1.24.10|2|24 +1.3.6.1.4.1.674.10892.1.700.20.1.1.25.17|2|25 +1.3.6.1.4.1.674.10892.1.700.20.1.2.11.1|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.2.13.18|2|18 +1.3.6.1.4.1.674.10892.1.700.20.1.2.14.8|2|8 +1.3.6.1.4.1.674.10892.1.700.20.1.2.18.13|2|13 +1.3.6.1.4.1.674.10892.1.700.20.1.2.19.10|2|10 +1.3.6.1.4.1.674.10892.1.700.20.1.2.21.13|2|13 +1.3.6.1.4.1.674.10892.1.700.20.1.2.22.4|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.2.23.23|2|23 +1.3.6.1.4.1.674.10892.1.700.20.1.2.24.10|2|10 +1.3.6.1.4.1.674.10892.1.700.20.1.2.25.17|2|17 +1.3.6.1.4.1.674.10892.1.700.20.1.3.11.1|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.3.13.18|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.3.14.8|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.3.18.13|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.3.19.10|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.3.21.13|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.3.22.4|2|6 +1.3.6.1.4.1.674.10892.1.700.20.1.3.23.23|2|6 +1.3.6.1.4.1.674.10892.1.700.20.1.3.24.10|2|6 +1.3.6.1.4.1.674.10892.1.700.20.1.3.25.17|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.4.11.1|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.4.13.18|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.4.14.8|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.4.18.13|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.4.19.10|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.4.21.13|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.4.22.4|2|6 +1.3.6.1.4.1.674.10892.1.700.20.1.4.23.23|2|6 +1.3.6.1.4.1.674.10892.1.700.20.1.4.24.10|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.4.25.17|2|6 +1.3.6.1.4.1.674.10892.1.700.20.1.5.4.5|2|8 +1.3.6.1.4.1.674.10892.1.700.20.1.5.4.17|2|9 +1.3.6.1.4.1.674.10892.1.700.20.1.5.14.8|2|7 +1.3.6.1.4.1.674.10892.1.700.20.1.5.18.13|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.5.18.23|2|10 +1.3.6.1.4.1.674.10892.1.700.20.1.5.21.13|2|9 +1.3.6.1.4.1.674.10892.1.700.20.1.5.22.4|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.5.23.23|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.5.24.10|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.5.25.17|2|6 +1.3.6.1.4.1.674.10892.1.700.20.1.6.11.1|2|21 +1.3.6.1.4.1.674.10892.1.700.20.1.6.13.18|2|9 +1.3.6.1.4.1.674.10892.1.700.20.1.6.14.8|2|31 +1.3.6.1.4.1.674.10892.1.700.20.1.6.18.13|2|24 +1.3.6.1.4.1.674.10892.1.700.20.1.6.19.10|2|12 +1.3.6.1.4.1.674.10892.1.700.20.1.6.21.13|2|21 +1.3.6.1.4.1.674.10892.1.700.20.1.6.22.4|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.6.23.23|2|10 +1.3.6.1.4.1.674.10892.1.700.20.1.6.24.10|2|25 +1.3.6.1.4.1.674.10892.1.700.20.1.6.25.17|2|16 +1.3.6.1.4.1.674.10892.1.700.20.1.7.11.1|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.7.13.18|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.7.14.8|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.7.18.13|2|16 +1.3.6.1.4.1.674.10892.1.700.20.1.7.19.10|2|16 +1.3.6.1.4.1.674.10892.1.700.20.1.7.21.13|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.7.22.4|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.7.23.23|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.7.24.10|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.7.25.17|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.8.11.1|4x|62757420666f7277617264206f78656e2064726976696e67207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.700.20.1.8.13.18|4x|616374656420666f727761726420666f7277617264206275742064726976696e67 +1.3.6.1.4.1.674.10892.1.700.20.1.8.14.8|4x|62757420746865697220666f7277617264206f78656e206f78656e +1.3.6.1.4.1.674.10892.1.700.20.1.8.18.13|4x|6163746564204a61646564206b657074206b6570742062757420717561696e746c7920717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.700.20.1.8.19.10|4x|62757420666f727761726420627574 +1.3.6.1.4.1.674.10892.1.700.20.1.8.21.13|4x|6b657074206f78656e206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.1.700.20.1.8.22.4|4x|62757420627574206f78656e207a6f6d6269657320717561696e746c7920717561696e746c7920627574204a61646564 +1.3.6.1.4.1.674.10892.1.700.20.1.8.23.23|4x|6b6570742064726976696e672064726976696e67204a61646564207a6f6d6269657320666f727761726420717561696e746c79207a6f6d6269657320627574 +1.3.6.1.4.1.674.10892.1.700.20.1.8.24.10|4x|6163746564207468656972206b65707420666f727761726420666f7277617264 +1.3.6.1.4.1.674.10892.1.700.20.1.8.25.17|4x|6f78656e207468656972207468656972206f78656e +1.3.6.1.4.1.674.10892.1.700.20.1.9.11.1|2|0 +1.3.6.1.4.1.674.10892.1.700.20.1.9.13.18|2|14 +1.3.6.1.4.1.674.10892.1.700.20.1.9.14.8|2|17 +1.3.6.1.4.1.674.10892.1.700.20.1.9.18.13|2|8 +1.3.6.1.4.1.674.10892.1.700.20.1.9.19.10|2|12 +1.3.6.1.4.1.674.10892.1.700.20.1.9.21.13|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.9.22.4|2|31 +1.3.6.1.4.1.674.10892.1.700.20.1.9.23.23|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.9.24.10|2|9 +1.3.6.1.4.1.674.10892.1.700.20.1.9.25.17|2|5 +1.3.6.1.4.1.674.10892.1.700.20.1.10.11.1|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.10.13.18|2|14 +1.3.6.1.4.1.674.10892.1.700.20.1.10.14.8|2|11 +1.3.6.1.4.1.674.10892.1.700.20.1.10.18.13|2|6 +1.3.6.1.4.1.674.10892.1.700.20.1.10.19.10|2|9 +1.3.6.1.4.1.674.10892.1.700.20.1.10.21.13|2|14 +1.3.6.1.4.1.674.10892.1.700.20.1.10.22.4|2|27 +1.3.6.1.4.1.674.10892.1.700.20.1.10.23.23|2|7 +1.3.6.1.4.1.674.10892.1.700.20.1.10.24.10|2|18 +1.3.6.1.4.1.674.10892.1.700.20.1.10.25.17|2|21 +1.3.6.1.4.1.674.10892.1.700.20.1.11.11.1|2|10 +1.3.6.1.4.1.674.10892.1.700.20.1.11.13.18|2|27 +1.3.6.1.4.1.674.10892.1.700.20.1.11.14.8|2|26 +1.3.6.1.4.1.674.10892.1.700.20.1.11.18.13|2|12 +1.3.6.1.4.1.674.10892.1.700.20.1.11.19.10|2|5 +1.3.6.1.4.1.674.10892.1.700.20.1.11.21.13|2|19 +1.3.6.1.4.1.674.10892.1.700.20.1.11.22.4|2|30 +1.3.6.1.4.1.674.10892.1.700.20.1.11.23.23|2|25 +1.3.6.1.4.1.674.10892.1.700.20.1.11.24.10|2|5 +1.3.6.1.4.1.674.10892.1.700.20.1.11.25.17|2|29 +1.3.6.1.4.1.674.10892.1.700.20.1.12.11.1|2|0 +1.3.6.1.4.1.674.10892.1.700.20.1.12.13.18|2|9 +1.3.6.1.4.1.674.10892.1.700.20.1.12.14.8|2|11 +1.3.6.1.4.1.674.10892.1.700.20.1.12.18.13|2|21 +1.3.6.1.4.1.674.10892.1.700.20.1.12.19.10|2|30 +1.3.6.1.4.1.674.10892.1.700.20.1.12.21.13|2|30 +1.3.6.1.4.1.674.10892.1.700.20.1.12.22.4|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.12.23.23|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.12.24.10|2|5 +1.3.6.1.4.1.674.10892.1.700.20.1.12.25.17|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.13.11.1|2|24 +1.3.6.1.4.1.674.10892.1.700.20.1.13.13.18|2|10 +1.3.6.1.4.1.674.10892.1.700.20.1.13.14.8|2|25 +1.3.6.1.4.1.674.10892.1.700.20.1.13.18.13|2|16 +1.3.6.1.4.1.674.10892.1.700.20.1.13.19.10|2|16 +1.3.6.1.4.1.674.10892.1.700.20.1.13.21.13|2|7 +1.3.6.1.4.1.674.10892.1.700.20.1.13.22.4|2|11 +1.3.6.1.4.1.674.10892.1.700.20.1.13.23.23|2|31 +1.3.6.1.4.1.674.10892.1.700.20.1.13.24.10|2|18 +1.3.6.1.4.1.674.10892.1.700.20.1.13.25.17|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.14.11.1|2|27 +1.3.6.1.4.1.674.10892.1.700.20.1.14.13.18|2|21 +1.3.6.1.4.1.674.10892.1.700.20.1.14.14.8|2|31 +1.3.6.1.4.1.674.10892.1.700.20.1.14.18.13|2|0 +1.3.6.1.4.1.674.10892.1.700.20.1.14.19.10|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.14.21.13|2|26 +1.3.6.1.4.1.674.10892.1.700.20.1.14.22.4|2|26 +1.3.6.1.4.1.674.10892.1.700.20.1.14.23.23|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.14.24.10|2|17 +1.3.6.1.4.1.674.10892.1.700.20.1.14.25.17|2|21 +1.3.6.1.4.1.674.10892.1.700.20.1.15.11.1|2|8 +1.3.6.1.4.1.674.10892.1.700.20.1.15.13.18|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.15.14.8|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.15.18.13|2|8 +1.3.6.1.4.1.674.10892.1.700.20.1.15.19.10|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.15.21.13|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.15.22.4|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.15.23.23|2|8 +1.3.6.1.4.1.674.10892.1.700.20.1.15.24.10|2|8 +1.3.6.1.4.1.674.10892.1.700.20.1.15.25.17|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.16.11.1|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.16.13.18|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.16.14.8|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.16.18.13|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.16.19.10|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.16.21.13|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.16.22.4|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.16.23.23|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.16.24.10|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.16.25.17|2|2 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.3.20|2|3 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.4.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.5.21|2|5 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.7.27|2|7 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.8.4|2|8 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.19.23|2|19 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.23.3|2|23 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.26.2|2|26 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.26.10|2|26 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.27.22|2|27 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.3.20|2|20 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.4.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.5.21|2|21 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.7.27|2|27 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.8.4|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.19.23|2|23 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.23.3|2|3 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.26.2|2|2 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.26.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.27.22|2|22 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.3.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.4.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.5.21|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.7.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.8.4|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.19.23|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.23.3|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.26.2|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.26.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.27.22|2|1 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.3.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.4.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.5.21|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.7.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.8.4|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.19.23|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.23.3|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.26.2|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.26.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.27.22|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.3.20|2|3 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.4.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.5.21|2|1 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.7.27|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.8.4|2|2 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.19.23|2|2 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.23.3|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.26.2|2|5 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.26.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.27.22|2|5 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.3.20|2|22 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.4.8|2|17 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.5.21|2|25 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.7.27|2|23 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.8.4|2|5 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.19.23|2|2 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.23.3|2|25 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.26.2|2|1 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.26.10|2|9 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.27.22|2|13 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.3.20|2|5 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.4.8|2|3 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.5.21|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.7.27|2|2 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.8.4|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.19.23|2|3 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.23.3|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.26.2|2|5 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.26.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.27.22|2|5 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.3.20|2|20 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.4.8|2|17 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.5.21|2|20 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.7.27|2|25 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.8.4|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.19.23|2|9 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.23.3|2|2 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.26.2|2|25 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.26.10|2|5 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.27.22|2|28 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.4.24|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.5.6|2|5 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.7.31|2|7 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.8.24|2|8 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.10.7|2|10 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.10.27|2|10 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.12.16|2|12 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.12.19|2|12 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.18.24|2|18 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.26.20|2|26 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.4.24|2|24 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.5.6|2|6 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.7.31|2|31 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.8.24|2|24 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.10.7|2|7 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.10.27|2|27 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.12.16|2|16 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.12.19|2|19 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.18.24|2|24 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.26.20|2|20 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.4.24|2|2 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.5.6|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.7.31|2|2 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.8.24|2|1 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.10.7|2|1 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.10.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.12.16|2|6 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.12.19|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.18.24|2|1 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.26.20|2|6 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.4.24|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.5.6|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.7.31|2|2 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.8.24|2|6 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.10.7|2|6 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.10.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.12.16|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.12.19|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.18.24|2|2 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.26.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.4.24|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.5.6|2|1 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.7.31|2|1 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.8.24|2|2 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.10.7|2|6 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.10.27|2|2 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.12.16|2|3 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.12.19|2|5 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.18.24|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.26.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.4.24|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.5.6|2|16 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.7.31|2|16 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.8.24|2|19 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.10.7|2|16 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.10.27|2|24 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.12.16|2|11 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.12.19|2|11 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.18.24|2|30 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.26.20|2|17 +1.3.6.1.4.1.674.10892.1.1100.20.1.7.4.24|4x|64726976696e67204a61646564206b657074 +1.3.6.1.4.1.674.10892.1.1100.20.1.7.5.6|4x|616374656420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.20.1.7.7.31|4|but +1.3.6.1.4.1.674.10892.1.1100.20.1.7.8.24|4x|6f78656e20627574207468656972207468656972204a61646564204a6164656420717561696e746c79207468656972206b657074 +1.3.6.1.4.1.674.10892.1.1100.20.1.7.10.7|4x|717561696e746c7920746865697220717561696e746c7920627574206b657074 +1.3.6.1.4.1.674.10892.1.1100.20.1.7.10.27|4x|7a6f6d6269657320627574207a6f6d62696573206b657074206163746564206f78656e207468656972207468656972 +1.3.6.1.4.1.674.10892.1.1100.20.1.7.12.16|4x|6b65707420627574206b657074204a61646564206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.20.1.7.12.19|4x|64726976696e67204a6164656420627574206b657074206f78656e207a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.20.1.7.18.24|4x|64726976696e6720666f7277617264206275742064726976696e6720717561696e746c79206f78656e204a61646564 +1.3.6.1.4.1.674.10892.1.1100.20.1.7.26.20|4|Jaded +1.3.6.1.4.1.674.10892.1.1100.20.1.8.4.24|4x|6b6570742062757420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.20.1.8.5.6|4x|717561696e746c79206163746564206f78656e20717561696e746c79206f78656e20616374656420717561696e746c79206f78656e207468656972 +1.3.6.1.4.1.674.10892.1.1100.20.1.8.7.31|4x|4a61646564207468656972206b657074206f78656e +1.3.6.1.4.1.674.10892.1.1100.20.1.8.8.24|4x|6b65707420627574207a6f6d62696573204a61646564204a61646564206163746564 +1.3.6.1.4.1.674.10892.1.1100.20.1.8.10.7|4x|6f78656e2064726976696e67204a6164656420616374656420717561696e746c7920666f7277617264204a61646564207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.20.1.8.10.27|4|forward +1.3.6.1.4.1.674.10892.1.1100.20.1.8.12.16|4x|627574207a6f6d6269657320627574206163746564206163746564 +1.3.6.1.4.1.674.10892.1.1100.20.1.8.12.19|4|forward +1.3.6.1.4.1.674.10892.1.1100.20.1.8.18.24|4x|627574206b65707420616374656420717561696e746c7920666f7277617264207468656972207468656972 +1.3.6.1.4.1.674.10892.1.1100.20.1.8.26.20|4|but +1.3.6.1.4.1.674.10892.1.1100.30.1.1.5.17|2|5 +1.3.6.1.4.1.674.10892.1.1100.30.1.1.5.28|2|5 +1.3.6.1.4.1.674.10892.1.1100.30.1.2.5.17|2|17 +1.3.6.1.4.1.674.10892.1.1100.30.1.2.5.28|2|28 +1.3.6.1.4.1.674.10892.1.1100.30.1.3.5.17|2|2 +1.3.6.1.4.1.674.10892.1.1100.30.1.3.5.28|2|1 +1.3.6.1.4.1.674.10892.1.1100.30.1.4.5.17|2|2 +1.3.6.1.4.1.674.10892.1.1100.30.1.4.5.28|2|2 +1.3.6.1.4.1.674.10892.1.1100.30.1.5.5.17|2|3 +1.3.6.1.4.1.674.10892.1.1100.30.1.5.5.28|2|2 +1.3.6.1.4.1.674.10892.1.1100.30.1.5.31.4|2|1 +1.3.6.1.4.1.674.10892.1.1100.30.1.6.5.17|2|23 +1.3.6.1.4.1.674.10892.1.1100.30.1.6.5.28|2|21 +1.3.6.1.4.1.674.10892.1.1100.30.1.7.5.17|2|4 +1.3.6.1.4.1.674.10892.1.1100.30.1.7.5.28|2|6 +1.3.6.1.4.1.674.10892.1.1100.30.1.8.5.17|4x|7468656972206163746564 +1.3.6.1.4.1.674.10892.1.1100.30.1.8.5.28|4x|717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.30.1.9.5.17|2|5 +1.3.6.1.4.1.674.10892.1.1100.30.1.9.5.28|2|6 +1.3.6.1.4.1.674.10892.1.1100.30.1.10.5.17|2|11 +1.3.6.1.4.1.674.10892.1.1100.30.1.10.5.28|2|8 +1.3.6.1.4.1.674.10892.1.1100.30.1.10.31.4|2|6 +1.3.6.1.4.1.674.10892.1.1100.30.1.11.5.17|2|3 +1.3.6.1.4.1.674.10892.1.1100.30.1.11.5.28|2|10 +1.3.6.1.4.1.674.10892.1.1100.30.1.12.5.17|2|11 +1.3.6.1.4.1.674.10892.1.1100.30.1.12.5.28|2|28 +1.3.6.1.4.1.674.10892.1.1100.30.1.13.5.17|2|9 +1.3.6.1.4.1.674.10892.1.1100.30.1.13.5.28|2|19 +1.3.6.1.4.1.674.10892.1.1100.30.1.14.5.17|2|23 +1.3.6.1.4.1.674.10892.1.1100.30.1.14.5.28|2|29 +1.3.6.1.4.1.674.10892.1.1100.30.1.15.5.17|2|21 +1.3.6.1.4.1.674.10892.1.1100.30.1.15.5.28|2|12 +1.3.6.1.4.1.674.10892.1.1100.30.1.16.5.17|4x|7468656972206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.30.1.16.5.28|4x|627574204a61646564 +1.3.6.1.4.1.674.10892.1.1100.30.1.17.5.17|2|18 +1.3.6.1.4.1.674.10892.1.1100.30.1.17.5.28|2|30 +1.3.6.1.4.1.674.10892.1.1100.30.1.18.5.17|2|9 +1.3.6.1.4.1.674.10892.1.1100.30.1.18.5.28|2|21 +1.3.6.1.4.1.674.10892.1.1100.30.1.19.5.17|2|31 +1.3.6.1.4.1.674.10892.1.1100.30.1.19.5.28|2|25 +1.3.6.1.4.1.674.10892.1.1100.30.1.20.5.17|2|26 +1.3.6.1.4.1.674.10892.1.1100.30.1.20.5.28|2|10 +1.3.6.1.4.1.674.10892.1.1100.30.1.21.5.17|2|22 +1.3.6.1.4.1.674.10892.1.1100.30.1.21.5.28|2|18 +1.3.6.1.4.1.674.10892.1.1100.30.1.22.5.17|2|0 +1.3.6.1.4.1.674.10892.1.1100.30.1.22.5.28|2|24 +1.3.6.1.4.1.674.10892.1.1100.30.1.23.5.17|4x|616374656420666f727761726420717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.30.1.23.5.28|4x|6163746564207a6f6d62696573206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.30.1.24.5.17|4x|4a6164656420717561696e746c7920666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.30.1.24.5.28|4x|64726976696e67207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.30.1.25.5.17|4x|6f78656e206f78656e20666f727761726420627574207a6f6d62696573206b657074206163746564207a6f6d62696573206f78656e +1.3.6.1.4.1.674.10892.1.1100.30.1.25.5.28|4x|7468656972206b657074206f78656e206163746564 +1.3.6.1.4.1.674.10892.1.1100.32.1.1.3.11|2|3 +1.3.6.1.4.1.674.10892.1.1100.32.1.1.18.21|2|18 +1.3.6.1.4.1.674.10892.1.1100.32.1.2.3.11|2|11 +1.3.6.1.4.1.674.10892.1.1100.32.1.2.18.21|2|21 +1.3.6.1.4.1.674.10892.1.1100.32.1.3.3.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.32.1.3.18.21|2|4 +1.3.6.1.4.1.674.10892.1.1100.32.1.4.3.11|2|2 +1.3.6.1.4.1.674.10892.1.1100.32.1.4.18.21|2|4 +1.3.6.1.4.1.674.10892.1.1100.32.1.5.3.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.32.1.5.18.21|2|1 +1.3.6.1.4.1.674.10892.1.1100.32.1.6.3.11|2|2 +1.3.6.1.4.1.674.10892.1.1100.32.1.6.18.21|2|2 +1.3.6.1.4.1.674.10892.1.1100.32.1.7.3.11|4x|64726976696e67207a6f6d62696573206f78656e2064726976696e67206b657074204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.32.1.7.18.21|4x|6b657074206b657074 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.3.29|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.8.7|2|8 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.11.15|2|11 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.11.27|2|11 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.12.8|2|12 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.12.18|2|12 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.13.1|2|13 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.13.11|2|13 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.17.1|2|17 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.25.18|2|25 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.3.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.8.7|2|7 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.11.15|2|15 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.11.27|2|27 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.12.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.12.18|2|18 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.13.1|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.13.11|2|11 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.17.1|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.25.18|2|18 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.3.29|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.8.7|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.11.15|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.11.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.12.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.12.18|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.13.1|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.13.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.17.1|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.25.18|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.3.29|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.8.7|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.11.15|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.11.27|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.12.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.12.18|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.13.1|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.13.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.17.1|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.25.18|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.3.29|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.8.7|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.11.15|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.11.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.12.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.12.18|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.13.1|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.13.11|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.17.1|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.25.18|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.3.29|2|18 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.8.7|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.11.15|2|21 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.11.27|2|16 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.12.8|2|19 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.12.18|2|9 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.13.1|2|28 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.13.11|2|12 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.17.1|2|7 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.25.18|2|16 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.3.29|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.8.7|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.11.15|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.11.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.12.8|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.12.18|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.13.1|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.13.11|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.17.1|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.25.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.3.29|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.8.7|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.11.15|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.11.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.12.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.12.18|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.13.1|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.13.11|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.17.1|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.25.18|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.3.29|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.8.7|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.11.15|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.11.27|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.12.8|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.12.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.13.1|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.13.11|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.17.1|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.25.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.10.3.29|4x|4a616465642064726976696e672064726976696e6720627574 +1.3.6.1.4.1.674.10892.1.1100.40.1.10.8.7|4x|7468656972206f78656e20627574207a6f6d62696573206b657074204a61646564 +1.3.6.1.4.1.674.10892.1.1100.40.1.10.11.15|4x|61637465642064726976696e67207468656972 +1.3.6.1.4.1.674.10892.1.1100.40.1.10.11.27|4x|7a6f6d6269657320717561696e746c7920717561696e746c79206f78656e +1.3.6.1.4.1.674.10892.1.1100.40.1.10.12.8|4x|6f78656e20616374656420717561696e746c79204a61646564 +1.3.6.1.4.1.674.10892.1.1100.40.1.10.12.18|4x|4a61646564207468656972206f78656e206f78656e20627574207a6f6d62696573204a61646564206163746564206f78656e +1.3.6.1.4.1.674.10892.1.1100.40.1.10.13.1|4x|627574204a61646564 +1.3.6.1.4.1.674.10892.1.1100.40.1.10.13.11|4x|7a6f6d6269657320717561696e746c79206f78656e207a6f6d6269657320627574206b657074206f78656e20627574 +1.3.6.1.4.1.674.10892.1.1100.40.1.10.17.1|4x|666f727761726420746865697220627574 +1.3.6.1.4.1.674.10892.1.1100.40.1.10.25.18|4x|6f78656e20666f727761726420666f7277617264206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.3.29|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.8.7|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.11.15|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.11.27|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.12.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.12.18|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.13.1|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.13.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.17.1|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.25.18|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.3.29|2|13 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.8.7|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.11.15|2|10 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.11.27|2|8 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.12.8|2|0 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.12.18|2|20 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.13.1|2|15 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.13.11|2|20 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.17.1|2|21 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.25.18|2|22 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.3.29|2|27 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.8.7|2|15 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.11.15|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.11.27|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.12.8|2|24 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.12.18|2|19 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.13.1|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.13.11|2|28 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.17.1|2|26 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.25.18|2|7 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.3.29|2|25 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.8.7|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.11.15|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.11.27|2|18 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.12.8|2|23 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.12.18|2|24 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.13.1|2|8 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.13.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.17.1|2|13 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.25.18|2|16 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.3.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.8.7|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.11.15|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.11.27|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.12.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.12.18|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.13.1|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.13.11|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.17.1|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.25.18|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.3.29|2|0 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.8.7|2|0 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.11.15|2|0 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.11.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.12.8|2|0 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.12.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.13.1|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.13.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.17.1|2|0 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.25.18|2|0 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.3.29|2|7 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.8.7|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.11.15|2|7 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.11.27|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.12.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.12.18|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.13.1|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.13.11|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.17.1|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.25.18|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.3.29|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.8.7|2|9 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.11.15|2|13 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.11.27|2|8 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.12.8|2|7 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.12.18|2|12 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.13.1|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.13.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.17.1|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.25.18|2|11 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.3.29|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.8.7|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.11.15|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.11.27|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.12.8|2|7 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.12.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.13.1|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.13.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.17.1|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.25.18|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.3.29|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.8.7|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.11.15|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.11.27|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.12.8|2|7 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.12.18|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.13.1|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.13.11|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.17.1|2|7 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.25.18|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.1.6|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.1.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.4.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.6.9|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.14.8|2|14 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.16.14|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.19.11|2|19 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.26.10|2|26 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.29.10|2|29 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.29.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.1.6|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.1.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.4.20|2|20 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.6.9|2|9 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.14.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.16.14|2|14 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.19.11|2|11 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.26.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.29.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.29.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.1.6|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.1.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.4.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.6.9|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.14.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.16.14|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.19.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.26.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.29.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.29.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.1.6|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.1.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.4.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.6.9|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.14.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.16.14|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.19.11|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.26.10|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.29.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.29.29|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.1.6|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.1.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.4.20|2|3 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.6.9|2|3 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.14.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.16.14|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.19.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.26.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.29.10|2|5 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.29.29|2|3 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.1.6|2|9 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.1.10|2|28 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.4.20|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.6.9|2|7 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.14.8|2|7 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.16.14|2|22 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.19.11|2|24 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.26.10|2|7 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.29.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.29.29|2|18 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.1.6|2|20 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.1.10|2|12 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.4.20|2|15 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.6.9|2|25 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.14.8|2|24 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.16.14|2|10 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.19.11|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.26.10|2|13 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.29.10|2|24 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.29.29|2|18 +1.3.6.1.4.1.674.10892.1.1100.50.1.8.1.6|4x|717561696e746c79206163746564207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.50.1.8.1.10|4x|6b657074206b65707420666f727761726420627574206163746564 +1.3.6.1.4.1.674.10892.1.1100.50.1.8.4.20|4x|6f78656e204a616465642062757420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.50.1.8.6.9|4x|717561696e746c792064726976696e6720616374656420717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.8.14.8|4x|64726976696e6720717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.50.1.8.16.14|4x|666f727761726420627574206f78656e2064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.8.19.11|4x|666f7277617264206b657074207a6f6d626965732064726976696e6720627574206f78656e +1.3.6.1.4.1.674.10892.1.1100.50.1.8.26.10|4x|717561696e746c7920616374656420746865697220666f7277617264207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.50.1.8.29.10|4x|666f727761726420717561696e746c792064726976696e6720616374656420627574207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.50.1.8.29.29|4x|666f7277617264206f78656e20717561696e746c79206163746564207a6f6d6269657320627574207468656972 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.1.6|2|18 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.1.10|2|14 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.4.20|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.6.9|2|17 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.14.8|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.16.14|2|11 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.19.11|2|21 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.26.10|2|15 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.29.10|2|0 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.29.29|2|9 +1.3.6.1.4.1.674.10892.1.1100.50.1.10.1.6|4x|666f7277617264206163746564206b65707420717561696e746c7920717561696e746c7920717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.10.1.10|4x|64726976696e672064726976696e672064726976696e6720717561696e746c792064726976696e67206f78656e +1.3.6.1.4.1.674.10892.1.1100.50.1.10.4.20|4x|64726976696e672064726976696e67206f78656e2061637465642061637465642064726976696e67206f78656e206f78656e +1.3.6.1.4.1.674.10892.1.1100.50.1.10.6.9|4x|64726976696e672061637465642064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.10.14.8|4x|62757420717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.50.1.10.16.14|4x|616374656420616374656420717561696e746c79207a6f6d6269657320717561696e746c792062757420717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.50.1.10.19.11|4x|717561696e746c79206b6570742064726976696e6720746865697220627574206f78656e207468656972207468656972206f78656e +1.3.6.1.4.1.674.10892.1.1100.50.1.10.26.10|4x|6275742062757420627574207468656972 +1.3.6.1.4.1.674.10892.1.1100.50.1.10.29.10|4x|4a61646564206f78656e20746865697220717561696e746c79206f78656e20746865697220666f7277617264206b657074204a61646564 +1.3.6.1.4.1.674.10892.1.1100.50.1.10.29.29|4x|7a6f6d626965732064726976696e672061637465642064726976696e6720627574206f78656e +1.3.6.1.4.1.674.10892.1.1100.50.1.11.1.6|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.11.1.10|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.11.4.20|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.11.6.9|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.11.14.8|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.11.16.14|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.11.19.11|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.11.26.10|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.11.29.10|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.11.29.29|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.1.6|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.1.10|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.4.20|2|13 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.6.9|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.14.8|2|13 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.16.14|2|15 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.19.11|2|11 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.26.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.29.10|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.29.29|2|3 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.1.6|2|19 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.1.10|2|22 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.4.20|2|10 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.6.9|2|27 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.14.8|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.16.14|2|28 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.19.11|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.26.10|2|30 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.29.10|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.29.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.1.6|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.1.10|2|26 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.4.20|2|21 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.6.9|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.14.8|2|10 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.16.14|2|27 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.19.11|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.26.10|2|20 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.29.10|2|23 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.29.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.1.6|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.1.10|2|11 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.4.20|2|11 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.6.9|2|27 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.14.8|2|23 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.16.14|2|26 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.19.11|2|31 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.26.10|2|27 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.29.10|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.29.29|2|18 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.1.6|2|27 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.1.10|2|21 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.4.20|2|28 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.6.9|2|22 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.14.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.16.14|2|5 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.19.11|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.26.10|2|21 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.29.10|2|5 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.29.29|2|5 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.1.6|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.1.10|2|30 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.4.20|2|22 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.6.9|2|11 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.14.8|2|31 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.16.14|2|28 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.19.11|2|12 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.26.10|2|3 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.29.10|2|27 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.29.29|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.1.6|2|29 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.1.10|2|18 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.4.20|2|25 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.6.9|2|22 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.14.8|2|10 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.16.14|2|27 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.19.11|2|13 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.26.10|2|24 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.29.10|2|7 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.29.29|2|17 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.1.6|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.1.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.4.20|2|12 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.6.9|2|21 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.14.8|2|26 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.16.14|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.19.11|2|7 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.26.10|2|27 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.29.10|2|26 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.29.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.1.6|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.1.10|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.4.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.6.9|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.14.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.16.14|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.19.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.26.10|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.29.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.29.29|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.21.1.6|4x|717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.21.1.10|4x|4a6164656420666f7277617264207a6f6d62696573207a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.1.1100.50.1.21.4.20|4|their +1.3.6.1.4.1.674.10892.1.1100.50.1.21.6.9|4x|666f7277617264207468656972206b657074 +1.3.6.1.4.1.674.10892.1.1100.50.1.21.14.8|4x|717561696e746c79206f78656e20666f7277617264206f78656e207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.50.1.21.16.14|4x|62757420666f7277617264206b657074206b6570742064726976696e67206163746564 +1.3.6.1.4.1.674.10892.1.1100.50.1.21.19.11|4x|64726976696e67206f78656e206163746564 +1.3.6.1.4.1.674.10892.1.1100.50.1.21.26.10|4|kept +1.3.6.1.4.1.674.10892.1.1100.50.1.21.29.10|4x|6f78656e206163746564206b657074207a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.1.1100.50.1.21.29.29|4x|64726976696e67206b65707420717561696e746c792064726976696e67206b657074204a61646564 +1.3.6.1.4.1.674.10892.1.1100.50.1.22.1.6|4|forward +1.3.6.1.4.1.674.10892.1.1100.50.1.22.1.10|4|acted +1.3.6.1.4.1.674.10892.1.1100.50.1.22.4.20|4x|61637465642064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.22.6.9|4x|666f727761726420627574204a6164656420627574204a6164656420666f727761726420666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.50.1.22.14.8|4x|627574206b657074 +1.3.6.1.4.1.674.10892.1.1100.50.1.22.16.14|4x|627574206f78656e20666f7277617264206b657074207a6f6d62696573207a6f6d6269657320627574206b657074 +1.3.6.1.4.1.674.10892.1.1100.50.1.22.19.11|4x|62757420666f7277617264204a6164656420627574204a616465642061637465642062757420666f727761726420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.50.1.22.26.10|4x|6f78656e206f78656e20627574204a61646564207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.50.1.22.29.10|4x|4a61646564207a6f6d6269657320616374656420746865697220666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.50.1.22.29.29|4x|666f7277617264206f78656e20717561696e746c79204a616465642064726976696e67206b65707420666f7277617264206b657074207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.50.1.23.1.6|4x|666f7277617264207a6f6d62696573206163746564204a61646564 +1.3.6.1.4.1.674.10892.1.1100.50.1.23.1.10|4x|6b657074206f78656e207468656972207468656972206f78656e206f78656e +1.3.6.1.4.1.674.10892.1.1100.50.1.23.4.20|4x|7468656972206b65707420717561696e746c792062757420666f7277617264206f78656e20627574206163746564 +1.3.6.1.4.1.674.10892.1.1100.50.1.23.6.9|4x|64726976696e67206f78656e20666f727761726420666f72776172642062757420717561696e746c79206f78656e2064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.23.14.8|4x|616374656420717561696e746c792062757420666f7277617264206b657074207a6f6d6269657320666f72776172642064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.23.16.14|4x|6275742064726976696e672064726976696e6720717561696e746c7920627574204a6164656420666f7277617264206b657074207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.50.1.23.19.11|4x|6b657074204a61646564206f78656e +1.3.6.1.4.1.674.10892.1.1100.50.1.23.26.10|4x|64726976696e67207a6f6d626965732064726976696e67206f78656e207468656972207a6f6d62696573204a61646564 +1.3.6.1.4.1.674.10892.1.1100.50.1.23.29.10|4x|746865697220717561696e746c79207a6f6d6269657320717561696e746c7920627574207a6f6d62696573206163746564204a61646564 +1.3.6.1.4.1.674.10892.1.1100.50.1.23.29.29|4x|4a61646564204a61646564207468656972207468656972206b657074206163746564206f78656e207468656972 +1.3.6.1.4.1.674.10892.1.1100.50.1.24.1.6|4x|62757420717561696e746c79207a6f6d626965732062757420616374656420627574 +1.3.6.1.4.1.674.10892.1.1100.50.1.24.1.10|4x|64726976696e67206b65707420666f7277617264206b657074206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.50.1.24.4.20|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.50.1.24.6.9|4|their +1.3.6.1.4.1.674.10892.1.1100.50.1.24.14.8|4x|4a6164656420746865697220717561696e746c79206b65707420746865697220717561696e746c79206163746564207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.50.1.24.16.14|4x|627574206f78656e2064726976696e672064726976696e67204a61646564 +1.3.6.1.4.1.674.10892.1.1100.50.1.24.19.11|4x|64726976696e6720627574 +1.3.6.1.4.1.674.10892.1.1100.50.1.24.26.10|4x|627574206f78656e +1.3.6.1.4.1.674.10892.1.1100.50.1.24.29.10|4x|666f7277617264206b65707420717561696e746c792064726976696e6720627574207468656972204a61646564204a61646564 +1.3.6.1.4.1.674.10892.1.1100.50.1.24.29.29|4x|6b65707420616374656420666f72776172642064726976696e67206163746564 +1.3.6.1.4.1.674.10892.1.1100.50.1.25.1.6|4x|717561696e746c7920666f7277617264204a61646564206163746564206b65707420627574206163746564 +1.3.6.1.4.1.674.10892.1.1100.50.1.25.1.10|4x|64726976696e67206b657074206b65707420717561696e746c7920627574206b657074206b657074206f78656e206163746564 +1.3.6.1.4.1.674.10892.1.1100.50.1.25.4.20|4x|6f78656e206b657074206163746564207468656972207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.50.1.25.6.9|4x|7a6f6d62696573204a616465642064726976696e67207468656972206f78656e207a6f6d62696573207468656972204a61646564 +1.3.6.1.4.1.674.10892.1.1100.50.1.25.14.8|4x|61637465642074686569722064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.25.16.14|4x|746865697220717561696e746c79207a6f6d6269657320666f7277617264207468656972206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.25.19.11|4|acted +1.3.6.1.4.1.674.10892.1.1100.50.1.25.26.10|4x|717561696e746c79204a6164656420627574207a6f6d6269657320627574207468656972 +1.3.6.1.4.1.674.10892.1.1100.50.1.25.29.10|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.50.1.25.29.29|4x|7a6f6d62696573206b657074206f78656e207a6f6d6269657320627574207468656972 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.1.6|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.1.10|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.4.20|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.6.9|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.14.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.16.14|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.19.11|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.26.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.29.10|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.29.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.1.6|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.1.10|2|12 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.4.20|2|26 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.6.9|2|24 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.14.8|2|3 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.16.14|2|14 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.19.11|2|19 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.26.10|2|0 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.29.10|2|29 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.29.29|2|20 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.1.23|2|1 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.5.29|2|5 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.6.11|2|6 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.9.10|2|9 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.9.16|2|9 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.12.18|2|12 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.12.23|2|12 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.16.27|2|16 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.22.15|2|22 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.31.28|2|31 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.1.23|2|23 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.5.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.6.11|2|11 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.9.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.9.16|2|16 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.12.18|2|18 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.12.23|2|23 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.16.27|2|27 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.22.15|2|15 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.31.28|2|28 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.1.23|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.5.29|2|6 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.6.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.9.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.9.16|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.12.18|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.12.23|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.16.27|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.22.15|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.31.28|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.1.23|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.5.29|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.6.11|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.9.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.9.16|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.12.18|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.12.23|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.16.27|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.22.15|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.31.28|2|1 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.1.23|2|6 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.5.29|2|3 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.6.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.9.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.9.16|2|1 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.12.18|2|5 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.12.23|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.16.27|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.22.15|2|1 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.31.28|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.1.23|2|8 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.5.29|2|14 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.6.11|2|21 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.9.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.9.16|2|17 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.12.18|2|22 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.12.23|2|17 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.16.27|2|5 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.22.15|2|20 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.31.28|2|23 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.1.23|2|11 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.5.29|2|25 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.6.11|2|29 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.9.10|2|23 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.9.16|2|27 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.12.18|2|27 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.12.23|2|15 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.16.27|2|26 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.22.15|2|3 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.31.28|2|5 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.1.23|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.5.29|2|27 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.6.11|2|15 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.9.10|2|8 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.9.16|2|0 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.12.18|2|3 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.12.23|2|19 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.16.27|2|25 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.22.15|2|8 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.31.28|2|23 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.1.23|2|17 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.5.29|2|6 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.6.11|2|0 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.9.10|2|14 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.9.16|2|6 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.12.18|2|3 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.12.23|2|23 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.16.27|2|15 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.22.15|2|27 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.31.28|2|19 +1.3.6.1.4.1.674.10892.1.1100.60.1.10.1.23|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.10.5.29|4x|6b65707420627574 +1.3.6.1.4.1.674.10892.1.1100.60.1.10.6.11|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.10.9.10|4x|6b65707420627574 +1.3.6.1.4.1.674.10892.1.1100.60.1.10.9.16|4x|6b65707420627574 +1.3.6.1.4.1.674.10892.1.1100.60.1.10.12.18|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.10.12.23|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.10.16.27|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.10.22.15|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.10.31.28|4x|627574206f78656e +1.3.6.1.4.1.674.10892.1.1100.60.1.11.1.23|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.11.5.29|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.11.6.11|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.11.9.10|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.11.9.16|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.11.12.18|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.11.12.23|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.11.16.27|4x|627574206f78656e +1.3.6.1.4.1.674.10892.1.1100.60.1.11.22.15|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.11.31.28|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.70.1.1.7.27|2|7 +1.3.6.1.4.1.674.10892.1.1100.70.1.1.10.29|2|10 +1.3.6.1.4.1.674.10892.1.1100.70.1.1.12.18|2|12 +1.3.6.1.4.1.674.10892.1.1100.70.1.1.17.6|2|17 +1.3.6.1.4.1.674.10892.1.1100.70.1.1.23.22|2|23 +1.3.6.1.4.1.674.10892.1.1100.70.1.1.23.28|2|23 +1.3.6.1.4.1.674.10892.1.1100.70.1.1.27.29|2|27 +1.3.6.1.4.1.674.10892.1.1100.70.1.1.27.30|2|27 +1.3.6.1.4.1.674.10892.1.1100.70.1.1.31.21|2|31 +1.3.6.1.4.1.674.10892.1.1100.70.1.2.7.27|2|27 +1.3.6.1.4.1.674.10892.1.1100.70.1.2.10.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.70.1.2.12.18|2|18 +1.3.6.1.4.1.674.10892.1.1100.70.1.2.17.6|2|6 +1.3.6.1.4.1.674.10892.1.1100.70.1.2.23.22|2|22 +1.3.6.1.4.1.674.10892.1.1100.70.1.2.23.28|2|28 +1.3.6.1.4.1.674.10892.1.1100.70.1.2.27.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.70.1.2.27.30|2|30 +1.3.6.1.4.1.674.10892.1.1100.70.1.2.31.21|2|21 +1.3.6.1.4.1.674.10892.1.1100.70.1.3.7.27|2|6 +1.3.6.1.4.1.674.10892.1.1100.70.1.3.10.29|2|2 +1.3.6.1.4.1.674.10892.1.1100.70.1.3.12.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.3.17.6|2|4 +1.3.6.1.4.1.674.10892.1.1100.70.1.3.23.22|2|2 +1.3.6.1.4.1.674.10892.1.1100.70.1.3.23.28|2|2 +1.3.6.1.4.1.674.10892.1.1100.70.1.3.27.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.3.27.30|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.3.31.21|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.4.7.27|2|6 +1.3.6.1.4.1.674.10892.1.1100.70.1.4.10.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.4.12.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.4.17.6|2|6 +1.3.6.1.4.1.674.10892.1.1100.70.1.4.23.22|2|6 +1.3.6.1.4.1.674.10892.1.1100.70.1.4.23.28|2|6 +1.3.6.1.4.1.674.10892.1.1100.70.1.4.27.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.4.27.30|2|2 +1.3.6.1.4.1.674.10892.1.1100.70.1.4.31.21|2|2 +1.3.6.1.4.1.674.10892.1.1100.70.1.5.7.27|2|3 +1.3.6.1.4.1.674.10892.1.1100.70.1.5.10.29|2|6 +1.3.6.1.4.1.674.10892.1.1100.70.1.5.12.18|2|3 +1.3.6.1.4.1.674.10892.1.1100.70.1.5.17.6|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.5.23.22|2|5 +1.3.6.1.4.1.674.10892.1.1100.70.1.5.23.28|2|2 +1.3.6.1.4.1.674.10892.1.1100.70.1.5.27.29|2|6 +1.3.6.1.4.1.674.10892.1.1100.70.1.5.27.30|2|2 +1.3.6.1.4.1.674.10892.1.1100.70.1.5.31.21|2|3 +1.3.6.1.4.1.674.10892.1.1100.70.1.6.7.27|2|22 +1.3.6.1.4.1.674.10892.1.1100.70.1.6.10.29|2|13 +1.3.6.1.4.1.674.10892.1.1100.70.1.6.12.18|2|25 +1.3.6.1.4.1.674.10892.1.1100.70.1.6.17.6|2|16 +1.3.6.1.4.1.674.10892.1.1100.70.1.6.23.22|2|28 +1.3.6.1.4.1.674.10892.1.1100.70.1.6.23.28|2|31 +1.3.6.1.4.1.674.10892.1.1100.70.1.6.27.29|2|9 +1.3.6.1.4.1.674.10892.1.1100.70.1.6.27.30|2|31 +1.3.6.1.4.1.674.10892.1.1100.70.1.6.31.21|2|3 +1.3.6.1.4.1.674.10892.1.1100.70.1.7.7.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.7.10.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.7.12.18|2|3 +1.3.6.1.4.1.674.10892.1.1100.70.1.7.17.6|2|4 +1.3.6.1.4.1.674.10892.1.1100.70.1.7.23.22|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.7.23.28|2|6 +1.3.6.1.4.1.674.10892.1.1100.70.1.7.27.29|2|4 +1.3.6.1.4.1.674.10892.1.1100.70.1.7.27.30|2|2 +1.3.6.1.4.1.674.10892.1.1100.70.1.7.31.21|2|5 +1.3.6.1.4.1.674.10892.1.1100.70.1.8.7.27|4x|64726976696e672064726976696e67206f78656e206b657074207468656972206f78656e207468656972206163746564 +1.3.6.1.4.1.674.10892.1.1100.70.1.8.10.29|4x|6f78656e206163746564 +1.3.6.1.4.1.674.10892.1.1100.70.1.8.12.18|4x|6b657074207468656972 +1.3.6.1.4.1.674.10892.1.1100.70.1.8.17.6|4x|7468656972206b6570742064726976696e6720746865697220627574206b65707420616374656420616374656420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.70.1.8.23.22|4x|64726976696e67206b657074204a61646564207a6f6d6269657320627574204a6164656420666f7277617264204a61646564206b657074 +1.3.6.1.4.1.674.10892.1.1100.70.1.8.23.28|4x|6f78656e206f78656e +1.3.6.1.4.1.674.10892.1.1100.70.1.8.27.29|4x|4a61646564206f78656e2062757420717561696e746c79206f78656e20666f7277617264206b657074206163746564206b657074 +1.3.6.1.4.1.674.10892.1.1100.70.1.8.27.30|4x|6f78656e207468656972204a61646564204a61646564 +1.3.6.1.4.1.674.10892.1.1100.70.1.8.31.21|4x|6b6570742064726976696e672064726976696e6720616374656420717561696e746c79206f78656e +1.3.6.1.4.1.674.10892.1.1100.80.1.1.2.24|2|2 +1.3.6.1.4.1.674.10892.1.1100.80.1.1.7.10|2|7 +1.3.6.1.4.1.674.10892.1.1100.80.1.2.2.24|2|24 +1.3.6.1.4.1.674.10892.1.1100.80.1.2.7.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.80.1.3.2.24|2|2 +1.3.6.1.4.1.674.10892.1.1100.80.1.3.7.10|2|2 +1.3.6.1.4.1.674.10892.1.1100.80.1.4.2.24|2|2 +1.3.6.1.4.1.674.10892.1.1100.80.1.4.7.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.80.1.5.2.24|2|6 +1.3.6.1.4.1.674.10892.1.1100.80.1.5.7.10|2|8 +1.3.6.1.4.1.674.10892.1.1100.80.1.6.2.24|2|11 +1.3.6.1.4.1.674.10892.1.1100.80.1.6.7.10|2| +1.3.6.1.4.1.674.10892.1.1100.80.1.7.2.24|2|4 +1.3.6.1.4.1.674.10892.1.1100.80.1.7.7.10|2|30 +1.3.6.1.4.1.674.10892.1.1100.80.1.8.2.24|4x|666f7277617264207a6f6d626965732064726976696e6720666f727761726420666f7277617264206f78656e20666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.80.1.8.7.10|4x|4a61646564206163746564206b65707420666f7277617264207a6f6d62696573206b657074207468656972 +1.3.6.1.4.1.674.10892.1.1100.80.1.9.2.24|4x|64726976696e67206f78656e206f78656e20627574 +1.3.6.1.4.1.674.10892.1.1100.80.1.9.7.10|4x|6b65707420627574204a61646564206f78656e20717561696e746c79204a61646564207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.80.1.10.2.24|2|11 +1.3.6.1.4.1.674.10892.1.1100.80.1.10.7.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.80.1.11.2.24|2|1 +1.3.6.1.4.1.674.10892.1.1100.80.1.11.7.10|2|0 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.1.30|2|1 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.9.20|2|9 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.13.8|2|13 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.14.29|2|14 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.22.8|2|22 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.23.9|2|23 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.23.13|2|23 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.27.22|2|27 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.27.29|2|27 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.29.13|2|29 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.1.30|2|30 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.9.20|2|20 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.13.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.14.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.22.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.23.9|2|9 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.23.13|2|13 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.27.22|2|22 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.27.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.29.13|2|13 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.1.30|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.9.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.13.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.14.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.22.8|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.23.9|2|2 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.23.13|2|2 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.27.22|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.27.29|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.29.13|2|2 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.1.30|2|2 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.9.20|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.13.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.14.29|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.22.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.23.9|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.23.13|2|4 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.27.22|2|4 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.27.29|2|4 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.29.13|2|2 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.1.30|2|2 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.9.20|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.13.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.14.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.22.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.23.9|2|5 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.23.13|2|5 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.27.22|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.27.29|2|3 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.29.13|2|2 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.1.30|2|11 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.9.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.13.8|2|12 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.14.29|2|9 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.22.8|2|23 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.23.9|2|29 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.23.13|2|7 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.27.22|2|3 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.27.29|2|27 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.29.13|2|27 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.1.30|2|29 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.9.20|2|18 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.13.8|2|20 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.14.29|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.22.8|2|9 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.23.9|2|21 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.23.13|2|14 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.27.22|2|9 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.27.29|2|8 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.29.13|2|3 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.1.30|2|28 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.9.20|2|7 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.13.8|2|21 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.14.29|2|10 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.22.8|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.23.9|2|4 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.23.13|2|7 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.27.22|2|11 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.27.29|2|24 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.29.13|2|25 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.1.30|2|24 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.9.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.13.8|2|25 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.14.29|2|31 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.22.8|2|21 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.23.9|2|24 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.23.13|2|3 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.27.22|2|5 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.27.29|2|3 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.29.13|2|25 +1.3.6.1.4.1.674.10892.1.1100.82.1.10.1.30|4x|4a61646564207468656972204a6164656420666f727761726420666f72776172642061637465642064726976696e67206163746564 +1.3.6.1.4.1.674.10892.1.1100.82.1.10.9.20|4x|64726976696e6720717561696e746c792062757420717561696e746c79207468656972207468656972206f78656e +1.3.6.1.4.1.674.10892.1.1100.82.1.10.13.8|4x|717561696e746c79207a6f6d62696573206163746564 +1.3.6.1.4.1.674.10892.1.1100.82.1.10.14.29|4x|6f78656e206163746564206b657074207a6f6d62696573204a6164656420717561696e746c7920666f7277617264207468656972 +1.3.6.1.4.1.674.10892.1.1100.82.1.10.22.8|4x|4a61646564204a61646564 +1.3.6.1.4.1.674.10892.1.1100.82.1.10.23.9|4x|7a6f6d6269657320666f7277617264207a6f6d6269657320717561696e746c79204a61646564204a6164656420717561696e746c792062757420717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.82.1.10.23.13|4x|7a6f6d62696573206163746564 +1.3.6.1.4.1.674.10892.1.1100.82.1.10.27.22|4x|6275742064726976696e6720717561696e746c7920666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.82.1.10.27.29|4x|627574207468656972 +1.3.6.1.4.1.674.10892.1.1100.82.1.10.29.13|4x|627574207a6f6d62696573206f78656e204a61646564206f78656e20666f7277617264206163746564206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.2.20|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.5.29|2|5 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.5.31|2|5 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.11.16|2|11 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.13.10|2|13 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.14.18|2|14 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.22.28|2|22 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.23.10|2|23 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.27.8|2|27 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.29.5|2|29 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.2.20|2|20 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.5.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.5.31|2|31 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.11.16|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.13.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.14.18|2|18 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.22.28|2|28 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.23.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.27.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.29.5|2|5 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.2.20|2|3 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.5.29|2|5 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.5.31|2|6 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.11.16|2|5 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.13.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.14.18|2|3 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.22.28|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.23.10|2|3 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.27.8|2|3 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.29.5|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.2.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.5.29|2|11 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.5.31|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.11.16|2|12 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.13.10|2|12 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.14.18|2|12 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.22.28|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.23.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.27.8|2|12 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.29.5|2|12 +1.3.6.1.4.1.674.10892.1.1100.90.1.5.2.20|4x|6f78656e206b657074 +1.3.6.1.4.1.674.10892.1.1100.90.1.5.5.29|4x|4a6164656420717561696e746c79207a6f6d62696573207468656972206f78656e204a61646564206f78656e +1.3.6.1.4.1.674.10892.1.1100.90.1.5.5.31|4x|616374656420666f7277617264206f78656e206b65707420717561696e746c7920717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.1.1100.90.1.5.11.16|4x|627574204a61646564207a6f6d62696573206163746564204a6164656420717561696e746c792064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.90.1.5.13.10|4x|717561696e746c792062757420717561696e746c7920666f7277617264206f78656e204a61646564204a616465642061637465642064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.90.1.5.14.18|4x|6f78656e207a6f6d62696573204a61646564204a61646564206b657074206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.90.1.5.22.28|4x|64726976696e6720666f727761726420746865697220666f7277617264206163746564207a6f6d6269657320717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.90.1.5.23.10|4x|64726976696e6720746865697220666f727761726420627574 +1.3.6.1.4.1.674.10892.1.1100.90.1.5.27.8|4x|746865697220717561696e746c79206b657074207468656972207468656972206b6570742064726976696e67207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.90.1.5.29.5|4x|7468656972206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.90.1.6.2.20|4x|717561696e746c7920717561696e746c79207468656972206b65707420627574 +1.3.6.1.4.1.674.10892.1.1100.90.1.6.5.29|4x|6b65707420717561696e746c7920616374656420717561696e746c79204a61646564207468656972 +1.3.6.1.4.1.674.10892.1.1100.90.1.6.5.31|4x|666f7277617264206f78656e206b657074206f78656e20627574206f78656e206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.90.1.6.11.16|4x|74686569722062757420666f7277617264204a61646564207a6f6d62696573207468656972206f78656e20666f7277617264207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.90.1.6.13.10|4x|6b65707420717561696e746c792061637465642064726976696e67204a61646564204a61646564204a6164656420717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.1.1100.90.1.6.14.18|4x|7a6f6d62696573206f78656e +1.3.6.1.4.1.674.10892.1.1100.90.1.6.22.28|4x|4a61646564206163746564206f78656e204a61646564204a6164656420666f7277617264204a61646564206f78656e +1.3.6.1.4.1.674.10892.1.1100.90.1.6.23.10|4x|64726976696e6720717561696e746c79206275742062757420627574206b657074 +1.3.6.1.4.1.674.10892.1.1100.90.1.6.27.8|4x|666f727761726420666f7277617264206f78656e +1.3.6.1.4.1.674.10892.1.1100.90.1.6.29.5|4|their +1.3.6.1.4.1.674.10892.1.1100.90.1.7.2.20|4x|666f7277617264206275742064726976696e67204a61646564206f78656e20717561696e746c7920717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.90.1.7.5.29|4x|6b65707420627574206f78656e206b657074206163746564 +1.3.6.1.4.1.674.10892.1.1100.90.1.7.5.31|4|Jaded +1.3.6.1.4.1.674.10892.1.1100.90.1.7.11.16|4x|7468656972206f78656e2064726976696e67204a61646564 +1.3.6.1.4.1.674.10892.1.1100.90.1.7.13.10|4x|7468656972206f78656e +1.3.6.1.4.1.674.10892.1.1100.90.1.7.14.18|4x|6163746564206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.90.1.7.22.28|4x|7a6f6d6269657320616374656420627574206b657074206f78656e207468656972206163746564 +1.3.6.1.4.1.674.10892.1.1100.90.1.7.23.10|4|acted +1.3.6.1.4.1.674.10892.1.1100.90.1.7.27.8|4x|7a6f6d6269657320627574207468656972206163746564206b65707420717561696e746c79206f78656e +1.3.6.1.4.1.674.10892.1.1100.90.1.7.29.5|4|acted +1.3.6.1.4.1.674.10892.1.1100.90.1.8.2.20|4x|717561696e746c792064726976696e67204a61646564207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.90.1.8.5.29|4x|64726976696e6720746865697220717561696e746c79206163746564207a6f6d62696573204a61646564206163746564 +1.3.6.1.4.1.674.10892.1.1100.90.1.8.5.31|4x|7468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.90.1.8.11.16|4|driving +1.3.6.1.4.1.674.10892.1.1100.90.1.8.13.10|4x|746865697220666f727761726420666f7277617264204a61646564206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.90.1.8.14.18|4x|746865697220717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.90.1.8.22.28|4x|7a6f6d6269657320717561696e746c7920616374656420717561696e746c792064726976696e6720627574 +1.3.6.1.4.1.674.10892.1.1100.90.1.8.23.10|4x|6163746564206275742074686569722064726976696e6720666f727761726420627574 +1.3.6.1.4.1.674.10892.1.1100.90.1.8.27.8|4x|6b657074204a616465642062757420717561696e746c79204a616465642062757420717561696e746c7920627574207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.90.1.8.29.5|4x|7a6f6d6269657320746865697220666f7277617264206f78656e2064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.90.1.9.2.20|4x|64726976696e67206163746564207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.90.1.9.5.29|4|their +1.3.6.1.4.1.674.10892.1.1100.90.1.9.5.31|4x|6f78656e206163746564206b65707420717561696e746c79206f78656e204a61646564206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.90.1.9.11.16|4x|6163746564206f78656e206163746564207468656972206b657074206b65707420666f7277617264206b657074 +1.3.6.1.4.1.674.10892.1.1100.90.1.9.13.10|4x|7a6f6d626965732064726976696e6720717561696e746c79206f78656e20666f72776172642074686569722064726976696e67207468656972 +1.3.6.1.4.1.674.10892.1.1100.90.1.9.14.18|4x|64726976696e672064726976696e6720616374656420666f7277617264206163746564207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.90.1.9.22.28|4x|666f7277617264207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.90.1.9.23.10|4x|74686569722064726976696e67206f78656e207468656972 +1.3.6.1.4.1.674.10892.1.1100.90.1.9.27.8|4x|6f78656e207468656972206163746564207a6f6d626965732064726976696e67206b657074207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.90.1.9.29.5|4x|7a6f6d62696573206163746564207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.90.1.10.2.20|4x|717561696e746c7920666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.90.1.10.5.29|4x|6f78656e206f78656e206b65707420616374656420717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.90.1.10.5.31|4x|4a6164656420666f7277617264206f78656e20627574204a61646564206f78656e206f78656e206163746564 +1.3.6.1.4.1.674.10892.1.1100.90.1.10.11.16|4x|6275742062757420717561696e746c79206163746564 +1.3.6.1.4.1.674.10892.1.1100.90.1.10.13.10|4x|6163746564207a6f6d62696573207468656972206b65707420666f727761726420717561696e746c79204a61646564 +1.3.6.1.4.1.674.10892.1.1100.90.1.10.14.18|4|forward +1.3.6.1.4.1.674.10892.1.1100.90.1.10.22.28|4x|4a616465642064726976696e6720666f727761726420627574 +1.3.6.1.4.1.674.10892.1.1100.90.1.10.23.10|4|acted +1.3.6.1.4.1.674.10892.1.1100.90.1.10.27.8|4x|6b65707420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.90.1.10.29.5|4|but +1.3.6.1.4.1.674.10892.1.1100.90.1.11.2.20|64x|85f6a05e +1.3.6.1.4.1.674.10892.1.1100.90.1.11.5.29|64x|9b24b7c1 +1.3.6.1.4.1.674.10892.1.1100.90.1.11.5.31|64x|06b6dd9f +1.3.6.1.4.1.674.10892.1.1100.90.1.11.11.16|64x|74e47488 +1.3.6.1.4.1.674.10892.1.1100.90.1.11.13.10|64x|2d03f39b +1.3.6.1.4.1.674.10892.1.1100.90.1.11.14.18|64x|c73fe9bd +1.3.6.1.4.1.674.10892.1.1100.90.1.11.22.28|64x|3e944c20 +1.3.6.1.4.1.674.10892.1.1100.90.1.11.23.10|64x|dd469461 +1.3.6.1.4.1.674.10892.1.1100.90.1.11.27.8|64x|bff6d3c5 +1.3.6.1.4.1.674.10892.1.1100.90.1.11.29.5|64x|42610167 +1.3.6.1.4.1.674.10892.1.1100.90.1.12.2.20|64x|573a73c3 +1.3.6.1.4.1.674.10892.1.1100.90.1.12.5.29|64x|aaa560f9 +1.3.6.1.4.1.674.10892.1.1100.90.1.12.5.31|64x|1f1395be +1.3.6.1.4.1.674.10892.1.1100.90.1.12.11.16|64x|69ed21b5 +1.3.6.1.4.1.674.10892.1.1100.90.1.12.13.10|64x|810dc7d2 +1.3.6.1.4.1.674.10892.1.1100.90.1.12.14.18|64x|f6832024 +1.3.6.1.4.1.674.10892.1.1100.90.1.12.22.28|64x|493c8253 +1.3.6.1.4.1.674.10892.1.1100.90.1.12.23.10|64x|1ba3a6c2 +1.3.6.1.4.1.674.10892.1.1100.90.1.12.27.8|64x|3bf350c6 +1.3.6.1.4.1.674.10892.1.1100.90.1.12.29.5|64x|f4db8f30 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.2.20|64x|63167384 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.5.29|64x|ed9f4617 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.5.31|64x|69accc18 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.11.16|64x|6b1a6bb3 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.13.10|64x|20fb07a2 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.14.18|64x|c0dc0432 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.22.28|64x|07c2cb42 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.23.10|64x|a9d42443 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.27.8|64x|be92b504 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.29.5|64x|f7d79fd8 +1.3.6.1.4.1.674.10892.1.1100.90.1.14.2.20|64x|b45d7d92 +1.3.6.1.4.1.674.10892.1.1100.90.1.14.5.29|64x|ecd178ae +1.3.6.1.4.1.674.10892.1.1100.90.1.14.5.31|64x|2808b770 +1.3.6.1.4.1.674.10892.1.1100.90.1.14.11.16|64x|ff9098dd +1.3.6.1.4.1.674.10892.1.1100.90.1.14.13.10|64x|b3ac9fed +1.3.6.1.4.1.674.10892.1.1100.90.1.14.14.18|64x|f164ac6b +1.3.6.1.4.1.674.10892.1.1100.90.1.14.22.28|64x|1d96bc8d +1.3.6.1.4.1.674.10892.1.1100.90.1.14.23.10|64x|6cdf4842 +1.3.6.1.4.1.674.10892.1.1100.90.1.14.27.8|64x|48d2370a +1.3.6.1.4.1.674.10892.1.1100.90.1.14.29.5|64x|323cfaf8 +1.3.6.1.4.1.674.10892.1.1100.90.1.15.2.20|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.15.5.29|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.15.5.31|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.15.11.16|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.15.13.10|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.15.14.18|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.15.22.28|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.15.23.10|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.15.27.8|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.15.29.5|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.2.20|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.5.29|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.5.31|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.11.16|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.13.10|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.14.18|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.22.28|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.23.10|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.27.8|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.29.5|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.17.2.20|2|22 +1.3.6.1.4.1.674.10892.1.1100.90.1.17.5.29|2|14 +1.3.6.1.4.1.674.10892.1.1100.90.1.17.5.31|2|30 +1.3.6.1.4.1.674.10892.1.1100.90.1.17.11.16|2|7 +1.3.6.1.4.1.674.10892.1.1100.90.1.17.13.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.90.1.17.14.18|2|9 +1.3.6.1.4.1.674.10892.1.1100.90.1.17.22.28|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.17.23.10|2|19 +1.3.6.1.4.1.674.10892.1.1100.90.1.17.27.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.17.29.5|2|26 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.2.20|2|22 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.5.29|2|23 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.5.31|2|15 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.11.16|2|7 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.13.10|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.14.18|2|10 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.22.28|2|19 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.23.10|2|30 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.27.8|2|23 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.29.5|2|7 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.2.20|2|11 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.5.29|2|11 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.5.31|2|21 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.11.16|2|11 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.13.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.14.18|2|19 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.22.28|2|26 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.23.10|2|26 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.27.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.29.5|2|18 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.2.20|2|26 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.5.29|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.5.31|2|25 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.11.16|2|30 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.13.10|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.14.18|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.22.28|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.23.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.27.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.29.5|2|30 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.2.20|2|7 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.5.29|2|18 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.5.31|2|6 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.11.16|2|6 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.13.10|2|14 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.14.18|2|15 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.22.28|2|14 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.23.10|2|20 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.27.8|2|13 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.29.5|2|21 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.2.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.5.29|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.5.31|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.11.16|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.13.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.14.18|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.22.28|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.23.10|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.27.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.29.5|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.2.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.5.29|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.5.31|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.11.16|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.13.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.14.18|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.22.28|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.23.10|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.27.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.29.5|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.2.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.5.29|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.5.31|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.11.16|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.13.10|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.14.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.22.28|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.23.10|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.27.8|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.29.5|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.2.20|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.5.29|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.5.31|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.11.16|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.13.10|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.14.18|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.22.28|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.23.10|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.27.8|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.29.5|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.2.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.5.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.5.31|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.11.16|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.13.10|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.14.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.22.28|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.23.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.27.8|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.29.5|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.2.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.5.29|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.5.31|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.11.16|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.13.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.14.18|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.22.28|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.23.10|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.27.8|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.29.5|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.2.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.5.29|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.5.31|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.11.16|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.13.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.14.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.22.28|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.23.10|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.27.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.29.5|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.2.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.5.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.5.31|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.11.16|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.13.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.14.18|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.22.28|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.23.10|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.27.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.29.5|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.1.13|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.7.26|2|7 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.11.12|2|11 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.11.20|2|11 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.17.23|2|17 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.19.3|2|19 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.20.10|2|20 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.24.23|2|24 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.27.7|2|27 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.28.19|2|28 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.1.13|2|13 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.7.26|2|26 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.11.12|2|12 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.11.20|2|20 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.17.23|2|23 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.19.3|2|3 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.20.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.24.23|2|23 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.27.7|2|7 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.28.19|2|19 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.1.13|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.7.26|2|2 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.11.12|2|4 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.11.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.17.23|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.19.3|2|2 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.20.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.24.23|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.27.7|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.28.19|2|4 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.1.13|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.7.26|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.11.12|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.11.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.17.23|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.19.3|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.20.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.24.23|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.27.7|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.28.19|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.1.13|2|0 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.7.26|2|0 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.11.12|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.11.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.17.23|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.19.3|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.20.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.24.23|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.27.7|2|0 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.28.19|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.1.13|2|12 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.7.26|2|21 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.11.12|2|8 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.11.20|2|8 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.17.23|2|14 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.19.3|2|28 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.20.10|2|25 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.24.23|2|9 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.27.7|2|15 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.28.19|2|12 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.1.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.3.2|2|3 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.9.14|2|9 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.18.23|2|18 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.21.26|2|21 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.22.26|2|22 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.23.16|2|23 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.24.10|2|24 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.26.18|2|26 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.31.10|2|31 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.1.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.3.2|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.9.14|2|14 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.18.23|2|23 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.21.26|2|26 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.22.26|2|26 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.23.16|2|16 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.24.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.26.18|2|18 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.31.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.1.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.3.2|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.9.14|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.18.23|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.21.26|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.22.26|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.23.16|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.24.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.26.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.31.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.1.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.3.2|2|1 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.9.14|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.18.23|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.21.26|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.22.26|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.23.16|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.24.10|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.26.18|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.31.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.1.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.3.2|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.9.14|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.18.23|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.21.26|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.22.26|2|3 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.23.16|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.24.10|2|5 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.26.18|2|5 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.31.10|2|3 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.1.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.3.2|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.9.14|2|23 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.18.23|2|19 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.21.26|2|9 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.22.26|2|5 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.23.16|2|13 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.24.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.26.18|2|19 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.31.10|2|14 +1.3.6.1.4.1.674.10892.1.1100.110.1.7.1.8|4x|746865697220666f7277617264207468656972206f78656e +1.3.6.1.4.1.674.10892.1.1100.110.1.7.3.2|4x|717561696e746c7920627574207468656972207a6f6d62696573206b6570742061637465642064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.110.1.7.9.14|4x|6f78656e204a61646564204a61646564206f78656e20627574204a61646564207a6f6d62696573206163746564 +1.3.6.1.4.1.674.10892.1.1100.110.1.7.18.23|4x|627574207468656972206163746564206b657074 +1.3.6.1.4.1.674.10892.1.1100.110.1.7.21.26|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.110.1.7.22.26|4x|6b6570742064726976696e67206b657074 +1.3.6.1.4.1.674.10892.1.1100.110.1.7.23.16|4|Jaded +1.3.6.1.4.1.674.10892.1.1100.110.1.7.24.10|4x|61637465642064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.110.1.7.26.18|4x|64726976696e67206f78656e206b65707420666f7277617264206b657074 +1.3.6.1.4.1.674.10892.1.1100.110.1.7.31.10|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.110.1.8.1.8|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.8.3.2|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.8.9.14|2|1 +1.3.6.1.4.1.674.10892.1.1100.110.1.8.18.23|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.8.21.26|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.8.22.26|2|5 +1.3.6.1.4.1.674.10892.1.1100.110.1.8.23.16|2|3 +1.3.6.1.4.1.674.10892.1.1100.110.1.8.24.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.8.26.18|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.8.31.10|2|3 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.6.11|2|6 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.8.19|2|8 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.9.5|2|9 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.9.21|2|9 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.11.17|2|11 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.20.15|2|20 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.25.11|2|25 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.25.13|2|25 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.25.19|2|25 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.28.6|2|28 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.6.11|2|11 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.8.19|2|19 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.9.5|2|5 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.9.21|2|21 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.11.17|2|17 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.20.15|2|15 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.25.11|2|11 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.25.13|2|13 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.25.19|2|19 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.28.6|2|6 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.6.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.8.19|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.9.5|2|6 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.9.21|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.11.17|2|6 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.20.15|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.25.11|2|5 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.25.13|2|5 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.25.19|2|4 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.28.6|2|5 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.6.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.8.19|2|4 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.9.5|2|3 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.9.21|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.11.17|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.20.15|2|4 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.25.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.25.13|2|4 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.25.19|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.28.6|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.6.11|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.8.19|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.9.5|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.9.21|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.11.17|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.20.15|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.25.11|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.25.13|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.25.19|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.28.6|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.6.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.8.19|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.9.5|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.9.21|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.11.17|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.20.15|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.25.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.25.13|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.25.19|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.28.6|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.7.6.11|4x|666f7277617264207a6f6d626965732064726976696e672064726976696e67207468656972 +1.3.6.1.4.1.674.10892.1.1100.112.1.7.8.19|4x|6b65707420717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.1.1100.112.1.7.9.5|4x|7a6f6d62696573204a61646564207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.112.1.7.9.21|4x|4a6164656420666f72776172642064726976696e6720746865697220666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.112.1.7.11.17|4x|61637465642064726976696e67206275742064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.112.1.7.20.15|4x|7a6f6d62696573206f78656e2064726976696e67206163746564206f78656e +1.3.6.1.4.1.674.10892.1.1100.112.1.7.25.11|4x|6163746564206f78656e20627574204a61646564 +1.3.6.1.4.1.674.10892.1.1100.112.1.7.25.13|4x|64726976696e67204a61646564207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.112.1.7.25.19|4x|7a6f6d6269657320627574204a616465642064726976696e67206b65707420717561696e746c7920666f727761726420627574 +1.3.6.1.4.1.674.10892.1.1100.112.1.7.28.6|4|acted +1.3.6.1.4.1.674.10892.1.1100.112.1.8.6.11|2|0 +1.3.6.1.4.1.674.10892.1.1100.112.1.8.8.19|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.8.9.5|2|0 +1.3.6.1.4.1.674.10892.1.1100.112.1.8.9.21|2|0 +1.3.6.1.4.1.674.10892.1.1100.112.1.8.11.17|2|0 +1.3.6.1.4.1.674.10892.1.1100.112.1.8.20.15|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.8.25.11|2|0 +1.3.6.1.4.1.674.10892.1.1100.112.1.8.25.13|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.8.25.19|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.8.28.6|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.6.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.8.19|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.9.5|2|4 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.9.21|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.11.17|2|4 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.20.15|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.25.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.25.13|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.25.19|2|4 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.28.6|2|16 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.6.11|2|13 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.8.19|2|14 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.9.5|2|10 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.9.21|2|5 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.11.17|2|12 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.20.15|2|28 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.25.11|2|28 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.25.13|2|17 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.25.19|2|24 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.28.6|2|17 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.6.11|2|25 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.8.19|2|30 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.9.5|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.9.21|2|7 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.11.17|2|12 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.20.15|2|22 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.25.11|2|13 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.25.13|2|23 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.25.19|2|8 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.28.6|2|31 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.6.11|2|12 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.8.19|2|16 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.9.5|2|19 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.9.21|2|19 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.11.17|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.20.15|2|31 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.25.11|2|18 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.25.13|2|31 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.25.19|2|18 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.28.6|2|13 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.6.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.8.19|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.9.5|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.9.21|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.11.17|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.20.15|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.25.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.25.13|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.25.19|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.28.6|2|1 +1.3.6.1.4.1.674.10892.1.1200.10.1.1.19.17|2|19 +1.3.6.1.4.1.674.10892.1.1200.10.1.1.21.21|2|21 +1.3.6.1.4.1.674.10892.1.1200.10.1.2.19.17|2|17 +1.3.6.1.4.1.674.10892.1.1200.10.1.2.21.21|2|21 +1.3.6.1.4.1.674.10892.1.1200.10.1.3.19.17|2|4 +1.3.6.1.4.1.674.10892.1.1200.10.1.3.21.21|2|2 +1.3.6.1.4.1.674.10892.1.1200.10.1.4.19.17|2|2 +1.3.6.1.4.1.674.10892.1.1200.10.1.4.21.21|2|8 +1.3.6.1.4.1.674.10892.1.1200.10.1.5.19.17|2|3 +1.3.6.1.4.1.674.10892.1.1200.10.1.5.21.21|2|1 +1.3.6.1.4.1.674.10892.1.1200.10.1.6.19.17|2|1 +1.3.6.1.4.1.674.10892.1.1200.10.1.6.21.21|2|1 +1.3.6.1.4.1.674.10892.1.1200.10.1.7.19.17|2|13 +1.3.6.1.4.1.674.10892.1.1200.10.1.7.21.21|2|10 +1.3.6.1.4.1.674.10892.1.1200.10.1.8.19.17|4x|7468656972206b657074206b657074207a6f6d62696573206b657074207a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.1.1200.10.1.8.21.21|4x|7a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.1.1200.10.1.11.19.17|2|5 +1.3.6.1.4.1.674.10892.1.1200.10.1.11.21.21|2|3 +1.3.6.1.4.1.674.10892.1.2000.10.1.1.2.11|2|2 +1.3.6.1.4.1.674.10892.1.2000.10.1.1.8.3|2|8 +1.3.6.1.4.1.674.10892.1.2000.10.1.2.2.11|2|11 +1.3.6.1.4.1.674.10892.1.2000.10.1.2.8.3|2|3 +1.3.6.1.4.1.674.10892.1.2000.10.1.3.2.11|2|1 +1.3.6.1.4.1.674.10892.1.2000.10.1.3.8.3|2|2 +1.3.6.1.4.1.674.10892.1.2000.10.1.6.2.11|4x|666f7277617264206b6570742062757420717561696e746c79206b657074207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.2000.10.1.6.8.3|4x|6b657074204a61646564 +1.3.6.1.4.1.674.10892.1.2000.10.1.7.2.11|4x|6f78656e20717561696e746c79204a61646564207a6f6d6269657320627574207468656972 +1.3.6.1.4.1.674.10892.1.2000.10.1.7.8.3|4x|6f78656e2064726976696e67206b657074207a6f6d62696573207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.2000.10.1.8.2.11|4x|627574207a6f6d6269657320627574206f78656e206163746564206163746564 +1.3.6.1.4.1.674.10892.1.2000.10.1.8.8.3|4x|666f727761726420666f72776172642061637465642064726976696e67206b6570742064726976696e672064726976696e67204a61646564206f78656e +1.3.6.1.4.1.674.10892.1.2000.10.1.9.2.11|4x|666f72776172642062757420746865697220627574207a6f6d6269657320717561696e746c79207a6f6d62696573204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.1.2000.10.1.9.8.3|4x|7468656972207468656972204a6164656420627574206163746564204a6164656420616374656420666f72776172642064726976696e67 +1.3.6.1.4.1.674.10892.2.4.1.1.1.1|2|2 +1.3.6.1.4.1.674.10892.2.4.1.1.1.2|2|83 +1.3.6.1.4.1.674.10892.2.4.1.1.6.1|2|2803 +1.3.6.1.4.1.674.10892.2.4.1.1.6.2|2|191739 +1.3.6.1.4.1.674.10892.2.4.1.1.13.1|2|1219 +1.3.6.1.4.1.674.10892.2.4.1.1.13.2|2|113 +1.3.6.1.4.1.674.10892.2.4.1.1.14.1|2|111 +1.3.6.1.4.1.674.10892.2.4.1.1.14.2|2|827 +1.3.6.1.4.1.674.10892.2.4.2.1.2.1|2|27 +1.3.6.1.4.1.674.10892.2.4.2.1.2.2|2|86 +1.3.6.1.4.1.674.10892.5.1.1.1.0|4x|717561696e746c79204a61646564207468656972 +1.3.6.1.4.1.674.10892.5.1.1.2.0|4|acted +1.3.6.1.4.1.674.10892.5.1.1.3.0|4x|6f78656e204a61646564206275742064726976696e67206163746564206f78656e +1.3.6.1.4.1.674.10892.5.1.1.4.0|4x|6163746564207a6f6d62696573207a6f6d6269657320717561696e746c792064726976696e67207468656972 +1.3.6.1.4.1.674.10892.5.1.1.5.0|4x|7a6f6d62696573206b65707420616374656420627574207468656972204a61646564 +1.3.6.1.4.1.674.10892.5.1.1.6.0|4x|717561696e746c79206f78656e2062757420746865697220666f727761726420627574 +1.3.6.1.4.1.674.10892.5.1.1.7.0|2|17 +1.3.6.1.4.1.674.10892.5.1.1.8.0|4x|616374656420666f7277617264206f78656e20717561696e746c7920627574 +1.3.6.1.4.1.674.10892.5.1.2.1.0|4x|7468656972206163746564206b65707420627574204a61646564 +1.3.6.1.4.1.674.10892.5.1.2.2.0|4x|6f78656e206163746564206b657074204a61646564207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.1.2.3.0|4x|746865697220666f727761726420666f72776172642064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.5.1.3.1.0|4x|7a6f6d62696573204a61646564206b65707420746865697220627574207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.1.3.2.0|4x|616374656420717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.5.1.3.3.0|4x|7468656972206b657074207468656972206f78656e206163746564 +1.3.6.1.4.1.674.10892.5.1.3.4.0|4x|62757420627574 +1.3.6.1.4.1.674.10892.5.1.3.5.0|4|forward +1.3.6.1.4.1.674.10892.5.1.3.6.0|4x|666f727761726420616374656420666f7277617264206f78656e20717561696e746c79206f78656e20746865697220666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.5.1.3.7.0|2|3 +1.3.6.1.4.1.674.10892.5.1.3.8.0|4x|4a6164656420666f727761726420717561696e746c79204a61646564206f78656e204a6164656420627574206f78656e +1.3.6.1.4.1.674.10892.5.1.3.9.0|4x|6163746564206163746564 +1.3.6.1.4.1.674.10892.5.1.3.10.0|4x|6f78656e206b6570742064726976696e67206163746564206b657074206b657074206163746564 +1.3.6.1.4.1.674.10892.5.1.3.11.0|4x|7468656972207a6f6d62696573204a6164656420666f7277617264206f78656e207a6f6d62696573206b657074207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.1.3.12.0|4x|6f78656e207a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.5.1.3.13.0|2|20 +1.3.6.1.4.1.674.10892.5.1.3.14.0|4x|4a616465642064726976696e67207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.1.3.15.0|4x|4a6164656420627574207468656972 +1.3.6.1.4.1.674.10892.5.1.3.16.0|2|28 +1.3.6.1.4.1.674.10892.5.1.3.17.0|2|9 +1.3.6.1.4.1.674.10892.5.1.3.18.0|4x|6163746564207468656972206163746564207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.2.1.0|2|1 +1.3.6.1.4.1.674.10892.5.2.2.0|2|2 +1.3.6.1.4.1.674.10892.5.2.3.0|2|6 +1.3.6.1.4.1.674.10892.5.2.4.0|2|4 +1.3.6.1.4.1.674.10892.5.2.5.0|2|21 +1.3.6.1.4.1.674.10892.5.3.1.1.0|4|driving +1.3.6.1.4.1.674.10892.5.3.1.2.0|4x|6f78656e206b657074206163746564206f78656e207a6f6d62696573206f78656e +1.3.6.1.4.1.674.10892.5.3.1.3.0|2|1 +1.3.6.1.4.1.674.10892.5.3.1.4.0|4x|7468656972206b657074206f78656e +1.3.6.1.4.1.674.10892.5.3.1.5.0|4x|717561696e746c79206b65707420616374656420666f7277617264206f78656e206f78656e206b657074206b657074 +1.3.6.1.4.1.674.10892.5.3.1.6.0|4x|717561696e746c792064726976696e67206f78656e20666f7277617264207a6f6d62696573206f78656e206f78656e20717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.5.3.1.7.0|4x|616374656420616374656420746865697220666f7277617264 +1.3.6.1.4.1.674.10892.5.3.1.8.0|4x|666f7277617264206163746564 +1.3.6.1.4.1.674.10892.5.3.1.9.0|4|Jaded +1.3.6.1.4.1.674.10892.5.3.1.10.0|4x|6163746564207a6f6d62696573207468656972206f78656e207a6f6d6269657320666f7277617264206b657074204a61646564207468656972 +1.3.6.1.4.1.674.10892.5.3.1.11.0|4x|627574204a6164656420746865697220666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1.1.0|2|15 +1.3.6.1.4.1.674.10892.5.4.1.2.0|2|20 +1.3.6.1.4.1.674.10892.5.4.1.3.0|2|12 +1.3.6.1.4.1.674.10892.5.4.300.1.0|2|17 +1.3.6.1.4.1.674.10892.5.4.300.2.0|2|19 +1.3.6.1.4.1.674.10892.5.4.300.10.1.1.22|2|22 +1.3.6.1.4.1.674.10892.5.4.300.10.1.1.28|2|28 +1.3.6.1.4.1.674.10892.5.4.300.10.1.2.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.2.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.3.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.3.28|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.4.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.4.28|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.5.22|2|3 +1.3.6.1.4.1.674.10892.5.4.300.10.1.5.28|2|21 +1.3.6.1.4.1.674.10892.5.4.300.10.1.6.22|2|23 +1.3.6.1.4.1.674.10892.5.4.300.10.1.6.28|2|17 +1.3.6.1.4.1.674.10892.5.4.300.10.1.7.22|4x|6163746564207468656972207468656972207a6f6d6269657320666f7277617264207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.300.10.1.7.28|4|their +1.3.6.1.4.1.674.10892.5.4.300.10.1.8.22|4x|6b657074206b657074206f78656e +1.3.6.1.4.1.674.10892.5.4.300.10.1.8.28|4x|7a6f6d6269657320616374656420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.300.10.1.9.22|4x|666f727761726420746865697220666f7277617264207468656972206f78656e206275742064726976696e67206f78656e +1.3.6.1.4.1.674.10892.5.4.300.10.1.9.28|4x|64726976696e67207468656972204a61646564206f78656e2064726976696e67207a6f6d62696573204a616465642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.300.10.1.10.22|4x|6f78656e204a61646564 +1.3.6.1.4.1.674.10892.5.4.300.10.1.10.28|4|driving +1.3.6.1.4.1.674.10892.5.4.300.10.1.11.22|4|kept +1.3.6.1.4.1.674.10892.5.4.300.10.1.11.28|4|acted +1.3.6.1.4.1.674.10892.5.4.300.10.1.12.22|2|18 +1.3.6.1.4.1.674.10892.5.4.300.10.1.12.28|2|18 +1.3.6.1.4.1.674.10892.5.4.300.10.1.13.22|2|27 +1.3.6.1.4.1.674.10892.5.4.300.10.1.13.28|2|14 +1.3.6.1.4.1.674.10892.5.4.300.10.1.14.22|2|7 +1.3.6.1.4.1.674.10892.5.4.300.10.1.14.28|2|5 +1.3.6.1.4.1.674.10892.5.4.300.10.1.15.22|4|oxen +1.3.6.1.4.1.674.10892.5.4.300.10.1.15.28|4|but +1.3.6.1.4.1.674.10892.5.4.300.10.1.24.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.24.28|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.25.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.25.28|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.28.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.28.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.29.22|2|10 +1.3.6.1.4.1.674.10892.5.4.300.10.1.29.28|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.30.22|2|0 +1.3.6.1.4.1.674.10892.5.4.300.10.1.30.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.31.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.31.28|2|8 +1.3.6.1.4.1.674.10892.5.4.300.10.1.32.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.32.28|2|9 +1.3.6.1.4.1.674.10892.5.4.300.10.1.33.22|2|31 +1.3.6.1.4.1.674.10892.5.4.300.10.1.33.28|2|16 +1.3.6.1.4.1.674.10892.5.4.300.10.1.34.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.34.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.35.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.35.28|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.36.22|2|19 +1.3.6.1.4.1.674.10892.5.4.300.10.1.36.28|2|25 +1.3.6.1.4.1.674.10892.5.4.300.10.1.38.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.38.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.39.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.39.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.44.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.44.28|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.45.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.45.28|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.46.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.46.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.47.22|2|22 +1.3.6.1.4.1.674.10892.5.4.300.10.1.47.28|2|18 +1.3.6.1.4.1.674.10892.5.4.300.10.1.48.22|4x|7468656972206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.4.300.10.1.48.28|4x|6b657074204a61646564207468656972206163746564 +1.3.6.1.4.1.674.10892.5.4.300.10.1.49.22|4x|7a6f6d62696573207a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.674.10892.5.4.300.10.1.49.28|4x|616374656420627574204a61646564207a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.5.4.300.40.1.1.10.22|2|10 +1.3.6.1.4.1.674.10892.5.4.300.40.1.1.16.20|2|16 +1.3.6.1.4.1.674.10892.5.4.300.40.1.2.10.22|2|22 +1.3.6.1.4.1.674.10892.5.4.300.40.1.2.16.20|2|20 +1.3.6.1.4.1.674.10892.5.4.300.40.1.3.10.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.40.1.3.16.20|2|8 +1.3.6.1.4.1.674.10892.5.4.300.40.1.4.10.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.40.1.4.16.20|2|8 +1.3.6.1.4.1.674.10892.5.4.300.40.1.5.10.22|4x|666f7277617264204a616465642064726976696e672061637465642064726976696e67 +1.3.6.1.4.1.674.10892.5.4.300.40.1.5.16.20|4x|717561696e746c792064726976696e67204a6164656420717561696e746c79206163746564206b657074207a6f6d62696573207a6f6d6269657320627574 +1.3.6.1.4.1.674.10892.5.4.300.40.1.6.10.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.40.1.6.16.20|2|1 +1.3.6.1.4.1.674.10892.5.4.300.40.1.7.10.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.40.1.7.16.20|2|4 +1.3.6.1.4.1.674.10892.5.4.300.40.1.8.10.22|4x|4a616465642074686569722074686569722064726976696e67 +1.3.6.1.4.1.674.10892.5.4.300.40.1.8.16.20|4x|62757420627574206b6570742062757420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.300.60.1.1.3.10|2|3 +1.3.6.1.4.1.674.10892.5.4.300.60.1.1.23.26|2|23 +1.3.6.1.4.1.674.10892.5.4.300.60.1.2.3.10|2|10 +1.3.6.1.4.1.674.10892.5.4.300.60.1.2.23.26|2|26 +1.3.6.1.4.1.674.10892.5.4.300.60.1.3.3.10|2|6 +1.3.6.1.4.1.674.10892.5.4.300.60.1.3.23.26|2|1 +1.3.6.1.4.1.674.10892.5.4.300.60.1.4.3.10|2|4 +1.3.6.1.4.1.674.10892.5.4.300.60.1.4.23.26|2|6 +1.3.6.1.4.1.674.10892.5.4.300.60.1.5.3.10|2|4 +1.3.6.1.4.1.674.10892.5.4.300.60.1.5.23.26|2|5 +1.3.6.1.4.1.674.10892.5.4.300.60.1.6.3.10|2|14 +1.3.6.1.4.1.674.10892.5.4.300.60.1.6.23.26|2|4 +1.3.6.1.4.1.674.10892.5.4.300.60.1.7.3.10|2|21 +1.3.6.1.4.1.674.10892.5.4.300.60.1.7.23.26|2|22 +1.3.6.1.4.1.674.10892.5.4.300.60.1.8.3.10|4x|6163746564206163746564204a61646564206f78656e206f78656e207a6f6d6269657320627574206b657074207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.300.60.1.8.23.26|4x|64726976696e67207468656972206163746564207468656972206f78656e20666f7277617264204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.300.60.1.9.3.10|2|1 +1.3.6.1.4.1.674.10892.5.4.300.60.1.9.23.26|2|26 +1.3.6.1.4.1.674.10892.5.4.300.60.1.11.3.10|4x|616374656420616374656420746865697220717561696e746c79206f78656e207a6f6d626965732064726976696e67206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.300.60.1.11.23.26|4x|746865697220627574206163746564206f78656e20627574206b657074 +1.3.6.1.4.1.674.10892.5.4.300.70.1.1.18.23|2|18 +1.3.6.1.4.1.674.10892.5.4.300.70.1.1.29.21|2|29 +1.3.6.1.4.1.674.10892.5.4.300.70.1.2.18.23|2|23 +1.3.6.1.4.1.674.10892.5.4.300.70.1.2.29.21|2|21 +1.3.6.1.4.1.674.10892.5.4.300.70.1.3.18.23|2|1 +1.3.6.1.4.1.674.10892.5.4.300.70.1.3.29.21|2|4 +1.3.6.1.4.1.674.10892.5.4.300.70.1.4.18.23|2|2 +1.3.6.1.4.1.674.10892.5.4.300.70.1.4.29.21|2|2 +1.3.6.1.4.1.674.10892.5.4.300.70.1.5.18.23|2|4 +1.3.6.1.4.1.674.10892.5.4.300.70.1.5.29.21|2|2 +1.3.6.1.4.1.674.10892.5.4.300.70.1.6.18.23|2|3 +1.3.6.1.4.1.674.10892.5.4.300.70.1.6.29.21|2|1 +1.3.6.1.4.1.674.10892.5.4.300.70.1.7.18.23|2|2 +1.3.6.1.4.1.674.10892.5.4.300.70.1.7.29.21|2|1 +1.3.6.1.4.1.674.10892.5.4.300.70.1.8.18.23|4x|4a61646564206f78656e2064726976696e67207a6f6d62696573206163746564206f78656e +1.3.6.1.4.1.674.10892.5.4.300.70.1.8.29.21|4x|6b657074207a6f6d62696573206f78656e206b6570742064726976696e6720666f7277617264206f78656e +1.3.6.1.4.1.674.10892.5.4.300.90.1.1.2.16|2|2 +1.3.6.1.4.1.674.10892.5.4.300.90.1.1.6.30|2|6 +1.3.6.1.4.1.674.10892.5.4.300.90.1.2.2.16|2|16 +1.3.6.1.4.1.674.10892.5.4.300.90.1.2.6.30|2|30 +1.3.6.1.4.1.674.10892.5.4.300.90.1.3.2.16|2|10 +1.3.6.1.4.1.674.10892.5.4.300.90.1.3.6.30|2|13 +1.3.6.1.4.1.674.10892.5.4.300.90.1.4.2.16|2|2 +1.3.6.1.4.1.674.10892.5.4.300.90.1.4.6.30|2|3 +1.3.6.1.4.1.674.10892.5.4.300.90.1.5.2.16|2|3 +1.3.6.1.4.1.674.10892.5.4.300.90.1.5.6.30|2|2 +1.3.6.1.4.1.674.10892.5.4.300.90.1.6.2.16|4x|74686569722061637465642064726976696e67204a61646564 +1.3.6.1.4.1.674.10892.5.4.300.90.1.6.6.30|4x|717561696e746c7920717561696e746c7920666f7277617264 +1.3.6.1.4.1.674.10892.5.4.300.90.1.7.2.16|4x|746865697220666f7277617264206b657074206163746564 +1.3.6.1.4.1.674.10892.5.4.300.90.1.7.6.30|4x|7468656972206f78656e206b65707420746865697220627574206163746564 +1.3.6.1.4.1.674.10892.5.4.300.90.1.8.2.16|4|their +1.3.6.1.4.1.674.10892.5.4.300.90.1.8.6.30|4|Jaded +1.3.6.1.4.1.674.10892.5.4.300.90.1.9.2.16|4x|4a61646564206f78656e204a6164656420717561696e746c7920627574207468656972206275742064726976696e67207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.300.90.1.9.6.30|4x|4a61646564206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.4.300.90.1.10.2.16|4x|616374656420627574 +1.3.6.1.4.1.674.10892.5.4.300.90.1.10.6.30|4x|666f72776172642064726976696e67204a61646564206b657074207468656972206b6570742062757420627574206b657074 +1.3.6.1.4.1.674.10892.5.4.300.90.1.11.2.16|4|kept +1.3.6.1.4.1.674.10892.5.4.300.90.1.11.6.30|4x|6b657074206b65707420666f7277617264207a6f6d6269657320666f7277617264206b657074204a61646564206163746564206b657074 +1.3.6.1.4.1.674.10892.5.4.300.90.1.12.2.16|4x|7a6f6d62696573206b657074207a6f6d62696573207a6f6d6269657320616374656420627574207468656972 +1.3.6.1.4.1.674.10892.5.4.300.90.1.12.6.30|4|their +1.3.6.1.4.1.674.10892.5.4.600.10.1.1.5.22|2|5 +1.3.6.1.4.1.674.10892.5.4.600.10.1.1.26.20|2|26 +1.3.6.1.4.1.674.10892.5.4.600.10.1.2.5.22|2|22 +1.3.6.1.4.1.674.10892.5.4.600.10.1.2.26.20|2|20 +1.3.6.1.4.1.674.10892.5.4.600.10.1.3.5.22|2|2 +1.3.6.1.4.1.674.10892.5.4.600.10.1.3.26.20|2|4 +1.3.6.1.4.1.674.10892.5.4.600.10.1.4.5.22|2|2 +1.3.6.1.4.1.674.10892.5.4.600.10.1.4.26.20|2|1 +1.3.6.1.4.1.674.10892.5.4.600.10.1.5.5.22|2|5 +1.3.6.1.4.1.674.10892.5.4.600.10.1.5.26.20|2|6 +1.3.6.1.4.1.674.10892.5.4.600.10.1.6.5.22|2|2 +1.3.6.1.4.1.674.10892.5.4.600.10.1.6.26.20|2|9 +1.3.6.1.4.1.674.10892.5.4.600.10.1.7.5.22|4x|717561696e746c7920717561696e746c79206f78656e206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.600.10.1.7.26.20|4x|6b657074207a6f6d62696573204a616465642064726976696e67207a6f6d62696573204a61646564204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.600.10.1.8.5.22|2|4 +1.3.6.1.4.1.674.10892.5.4.600.10.1.8.26.20|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.1.16.26|2|16 +1.3.6.1.4.1.674.10892.5.4.600.12.1.1.17.15|2|17 +1.3.6.1.4.1.674.10892.5.4.600.12.1.2.16.26|2|26 +1.3.6.1.4.1.674.10892.5.4.600.12.1.2.17.15|2|15 +1.3.6.1.4.1.674.10892.5.4.600.12.1.3.16.26|2|4 +1.3.6.1.4.1.674.10892.5.4.600.12.1.3.17.15|2|2 +1.3.6.1.4.1.674.10892.5.4.600.12.1.4.16.26|2|10 +1.3.6.1.4.1.674.10892.5.4.600.12.1.4.17.15|2|10 +1.3.6.1.4.1.674.10892.5.4.600.12.1.5.16.26|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.5.17.15|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.6.16.26|2|7 +1.3.6.1.4.1.674.10892.5.4.600.12.1.6.17.15|2|4 +1.3.6.1.4.1.674.10892.5.4.600.12.1.7.16.26|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.7.17.15|2|1 +1.3.6.1.4.1.674.10892.5.4.600.12.1.8.16.26|4x|7a6f6d626965732064726976696e672064726976696e67206f78656e206163746564 +1.3.6.1.4.1.674.10892.5.4.600.12.1.8.17.15|4x|7a6f6d62696573207468656972207a6f6d62696573207468656972206163746564204a61646564204a61646564 +1.3.6.1.4.1.674.10892.5.4.600.12.1.9.16.26|2|26 +1.3.6.1.4.1.674.10892.5.4.600.12.1.9.17.15|2|19 +1.3.6.1.4.1.674.10892.5.4.600.12.1.10.16.26|2|6 +1.3.6.1.4.1.674.10892.5.4.600.12.1.10.17.15|2|11 +1.3.6.1.4.1.674.10892.5.4.600.12.1.11.16.26|2|16 +1.3.6.1.4.1.674.10892.5.4.600.12.1.11.17.15|2|2 +1.3.6.1.4.1.674.10892.5.4.600.12.1.12.16.26|2|1 +1.3.6.1.4.1.674.10892.5.4.600.12.1.12.17.15|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.13.16.26|2|0 +1.3.6.1.4.1.674.10892.5.4.600.12.1.13.17.15|2|1 +1.3.6.1.4.1.674.10892.5.4.600.12.1.14.16.26|2|2 +1.3.6.1.4.1.674.10892.5.4.600.12.1.14.17.15|2|4 +1.3.6.1.4.1.674.10892.5.4.600.12.1.15.16.26|4x|7a6f6d626965732064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.12.1.15.17.15|4|zombies +1.3.6.1.4.1.674.10892.5.4.600.12.1.16.16.26|2|19 +1.3.6.1.4.1.674.10892.5.4.600.12.1.16.17.15|2|12 +1.3.6.1.4.1.674.10892.5.4.600.50.1.1.20.31|2|20 +1.3.6.1.4.1.674.10892.5.4.600.50.1.1.21.13|2|21 +1.3.6.1.4.1.674.10892.5.4.600.50.1.2.20.31|2|31 +1.3.6.1.4.1.674.10892.5.4.600.50.1.2.21.13|2|13 +1.3.6.1.4.1.674.10892.5.4.600.50.1.3.20.31|2|1 +1.3.6.1.4.1.674.10892.5.4.600.50.1.3.21.13|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.4.20.31|2|6 +1.3.6.1.4.1.674.10892.5.4.600.50.1.4.21.13|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.5.20.31|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.5.21.13|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.6.20.31|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.6.21.13|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.7.20.31|4x|717561696e746c7920627574206f78656e204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.50.1.7.21.13|4x|6b657074206b6570742074686569722062757420717561696e746c79206b65707420717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.5.4.700.20.1.1.7.28|2|7 +1.3.6.1.4.1.674.10892.5.4.700.20.1.1.15.28|2|15 +1.3.6.1.4.1.674.10892.5.4.700.20.1.2.7.28|2|28 +1.3.6.1.4.1.674.10892.5.4.700.20.1.2.15.28|2|28 +1.3.6.1.4.1.674.10892.5.4.700.20.1.3.7.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.3.15.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.4.7.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.4.15.28|2|6 +1.3.6.1.4.1.674.10892.5.4.700.20.1.5.7.28|2|6 +1.3.6.1.4.1.674.10892.5.4.700.20.1.5.15.28|2|3 +1.3.6.1.4.1.674.10892.5.4.700.20.1.6.7.28|2|12 +1.3.6.1.4.1.674.10892.5.4.700.20.1.6.15.28|2|14 +1.3.6.1.4.1.674.10892.5.4.700.20.1.7.7.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.7.15.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.8.7.28|4x|717561696e746c792074686569722062757420666f7277617264206163746564206163746564206b657074204a6164656420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.700.20.1.8.15.28|4x|6275742064726976696e6720717561696e746c79206b657074204a61646564 +1.3.6.1.4.1.674.10892.5.4.700.20.1.9.7.28|2|9 +1.3.6.1.4.1.674.10892.5.4.700.20.1.9.15.28|2|24 +1.3.6.1.4.1.674.10892.5.4.700.20.1.10.7.28|2|14 +1.3.6.1.4.1.674.10892.5.4.700.20.1.10.15.28|2|22 +1.3.6.1.4.1.674.10892.5.4.700.20.1.11.7.28|2|27 +1.3.6.1.4.1.674.10892.5.4.700.20.1.11.15.28|2|1 +1.3.6.1.4.1.674.10892.5.4.700.20.1.12.7.28|2|12 +1.3.6.1.4.1.674.10892.5.4.700.20.1.12.15.28|2|25 +1.3.6.1.4.1.674.10892.5.4.700.20.1.13.7.28|2|24 +1.3.6.1.4.1.674.10892.5.4.700.20.1.13.15.28|2|7 +1.3.6.1.4.1.674.10892.5.4.700.20.1.14.7.28|2|31 +1.3.6.1.4.1.674.10892.5.4.700.20.1.14.15.28|2|22 +1.3.6.1.4.1.674.10892.5.4.700.20.1.15.7.28|2|4 +1.3.6.1.4.1.674.10892.5.4.700.20.1.15.15.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.16.7.28|2|1 +1.3.6.1.4.1.674.10892.5.4.700.20.1.16.15.28|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.1.4.24|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.1.19.1|2|19 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.2.4.24|2|24 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.2.19.1|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.3.4.24|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.3.19.1|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.4.4.24|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.4.19.1|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.5.4.24|2|3 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.5.19.1|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.7.4.24|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.7.19.1|2|3 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.8.4.24|4x|4a61646564206b6570742064726976696e672064726976696e6720666f7277617264207468656972206163746564 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.8.19.1|4|driving +1.3.6.1.4.1.674.10892.5.4.1100.30.1.9.4.24|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.9.19.1|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.10.4.24|2|17 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.10.19.1|2|18 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.11.4.24|2|27 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.11.19.1|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.12.4.24|2|20 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.12.19.1|2|9 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.13.4.24|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.13.19.1|2|0 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.14.4.24|2|15 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.14.19.1|2|7 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.16.4.24|4x|7a6f6d6269657320717561696e746c792064726976696e6720717561696e746c7920666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.16.19.1|4x|717561696e746c7920627574206b657074 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.17.4.24|2|25 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.17.19.1|2|30 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.18.4.24|2|16 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.18.19.1|2|17 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.19.4.24|2|19 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.19.19.1|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.20.4.24|2|17 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.20.19.1|2|29 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.21.4.24|2|8 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.21.19.1|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.22.4.24|2|19 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.22.19.1|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.23.4.24|4x|627574206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.23.19.1|4x|6275742064726976696e67206f78656e206275742064726976696e67206f78656e206f78656e206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.26.4.24|4x|746865697220666f7277617264206f78656e +1.3.6.1.4.1.674.10892.5.4.1100.30.1.26.19.1|4x|7a6f6d6269657320717561696e746c79204a6164656420627574204a616465642064726976696e6720616374656420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.1.22.21|2|22 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.1.29.4|2|29 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.2.22.21|2|21 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.2.29.4|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.3.22.21|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.3.29.4|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.4.22.21|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.4.29.4|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.5.22.21|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.5.29.4|2|3 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.7.22.21|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.7.29.4|2|26 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.8.22.21|4x|717561696e746c7920666f72776172642074686569722064726976696e67 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.8.29.4|4x|6b657074207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.10.22.21|4|forward +1.3.6.1.4.1.674.10892.5.4.1100.50.1.10.29.4|4x|6f78656e207468656972204a61646564 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.14.22.21|2|7 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.14.29.4|2|28 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.15.22.21|2|30 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.15.29.4|2|30 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.21.22.21|4x|666f7277617264207a6f6d62696573204a61646564206b65707420717561696e746c79206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.21.29.4|4|driving +1.3.6.1.4.1.674.10892.5.4.1100.50.1.22.22.21|4x|4a61646564206163746564207468656972204a61646564207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.22.29.4|4x|7468656972206f78656e20666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.23.22.21|4x|6163746564204a61646564206163746564206f78656e2061637465642064726976696e67 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.23.29.4|4x|4a61646564207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.26.22.21|4x|6f78656e20627574206163746564207468656972206f78656e206b6570742061637465642064726976696e67204a61646564 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.26.29.4|4|kept +1.3.6.1.4.1.674.10892.5.4.1100.50.1.27.22.21|2|17 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.27.29.4|2|23 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.1.10.9|2|10 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.1.20.20|2|20 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.2.10.9|2|9 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.2.20.20|2|20 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.3.10.9|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.3.20.20|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.4.10.9|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.4.20.20|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.5.10.9|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.5.20.20|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.7.10.9|2|21 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.7.20.20|2|10 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.8.10.9|4|acted +1.3.6.1.4.1.674.10892.5.4.1100.80.1.8.20.20|4x|4a61646564204a61646564204a61646564206b657074204a61646564 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.9.10.9|4x|4a616465642074686569722064726976696e67207468656972206f78656e206b657074207468656972207a6f6d62696573206163746564 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.9.20.20|4x|6163746564206b6570742062757420627574 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.12.10.9|4|kept +1.3.6.1.4.1.674.10892.5.4.1100.80.1.12.20.20|4x|7468656972206b6570742064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.1.3.23|2|3 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.1.29.25|2|29 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.2.3.23|2|23 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.2.29.25|2|25 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.3.3.23|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.3.29.25|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.4.3.23|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.4.29.25|2|11 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.6.3.23|4x|7a6f6d62696573207468656972207a6f6d62696573206163746564206163746564207468656972206275742062757420627574 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.6.29.25|4x|7468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.7.3.23|4x|7a6f6d626965732064726976696e67206f78656e +1.3.6.1.4.1.674.10892.5.4.1100.90.1.7.29.25|4x|7468656972206b657074206b657074207468656972206b657074204a6164656420666f727761726420616374656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.15.3.23|4x|9e00e0291401 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.15.29.25|4x|9e00e0291401 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.16.3.23|4x|9e00e0291401 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.16.29.25|4x|9e00e0291401 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.17.3.23|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.17.29.25|2|22 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.18.3.23|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.18.29.25|2|22 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.19.3.23|2|12 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.19.29.25|2|21 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.23.3.23|2|16 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.23.29.25|2|16 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.27.3.23|2|16 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.27.29.25|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.28.3.23|2|0 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.28.29.25|2|0 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.29.3.23|2|8 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.29.29.25|2|8 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.30.3.23|4x|64726976696e67206f78656e20666f72776172642064726976696e67207a6f6d62696573206163746564204a61646564207a6f6d6269657320627574 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.30.29.25|4|zombies +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.1.4|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.1.21|2|21 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.2.4|4x|7a6f6d62696573207a6f6d62696573206b657074206b65707420717561696e746c792064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.2.21|4x|4a616465642062757420616374656420666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.7.4|2|10 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.7.21|2|21 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.8.4|4x|616374656420627574206b65707420717561696e746c79206f78656e207a6f6d6269657320717561696e746c7920666f7277617264206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.8.21|4x|6f78656e206b6570742064726976696e6720746865697220616374656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.9.4|2|20 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.9.21|2|30 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.37.4|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.37.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.38.4|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.38.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.41.4|4x|6b657074207a6f6d62696573207468656972207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.41.21|4x|4a61646564206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.42.4|4x|717561696e746c79206b65707420616374656420616374656420627574206163746564207a6f6d6269657320717561696e746c7920666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.42.21|4|acted +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.48.4|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.48.21|2|20 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.49.4|2|22 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.49.21|2|17 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.50.4|2|18 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.50.21|2|27 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.51.4|2|23 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.51.21|2|22 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.52.4|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.52.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.53.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.53.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.59.4|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.59.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.60.4|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.60.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.61.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.61.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.62.4|2|31 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.62.21|2|31 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.69.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.69.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.70.4|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.70.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.71.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.71.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.72.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.72.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.73.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.73.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.74.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.74.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.75.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.75.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.76.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.76.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.77.4|4x|717561696e746c79206f78656e2064726976696e6720717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.77.21|4x|4a6164656420666f7277617264204a6164656420717561696e746c79206f78656e207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.78.4|4x|717561696e746c79207a6f6d626965732061637465642064726976696e67206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.78.21|4x|64726976696e6720717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.79.4|4x|6b65707420717561696e746c792064726976696e672064726976696e6720627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.79.21|4x|717561696e746c7920717561696e746c79207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.80.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.80.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.81.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.81.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.82.4|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.82.21|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.83.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.83.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.84.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.84.21|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.1.7|2|7 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.1.26|2|26 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.2.7|4x|717561696e746c7920717561696e746c79207a6f6d6269657320666f727761726420616374656420717561696e746c79206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.2.26|4x|666f72776172642064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.4.7|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.4.26|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.8.7|4|their +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.8.26|4|Jaded +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.9.7|4x|6f78656e20627574206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.9.26|4x|6b65707420627574206b657074206f78656e207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.19.7|4|kept +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.19.26|4x|6b657074207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.23.7|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.23.26|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.24.7|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.24.26|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.26.7|4x|4a616465642064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.26.26|4x|4a61646564206f78656e2064726976696e67204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.30.7|4x|666f7277617264207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.30.26|4x|6f78656e206f78656e2064726976696e67206275742064726976696e67207468656972206f78656e207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.31.7|2|15 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.31.26|2|23 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.32.7|2|28 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.32.26|2|28 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.40.7|4x|7468656972206f78656e207468656972206163746564204a6164656420666f727761726420666f72776172642064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.40.26|4x|6275742074686569722074686569722062757420666f72776172642062757420616374656420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.41.7|4x|6163746564207468656972207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.41.26|4x|717561696e746c79207a6f6d6269657320717561696e746c79204a61646564206f78656e2064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.42.7|4x|666f7277617264204a61646564206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.42.26|4x|64726976696e67206b65707420717561696e746c79204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.43.7|4x|7468656972206f78656e20666f7277617264206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.43.26|4x|6b657074206b65707420627574206b657074206b657074206f78656e206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.44.7|4x|666f7277617264204a6164656420717561696e746c7920666f72776172642061637465642064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.44.26|4x|61637465642074686569722064726976696e67206b6570742064726976696e67206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.45.7|4x|64726976696e6720717561696e746c792064726976696e6720627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.45.26|4x|717561696e746c79204a61646564206275742064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.46.7|4|acted +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.46.26|4|but +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.47.7|4|their +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.47.26|4x|6b65707420666f7277617264204a6164656420666f7277617264206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.48.7|4x|7468656972204a61646564206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.48.26|4x|64726976696e67207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.49.7|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.49.26|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.1.8|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.1.21|2|21 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.2.8|4x|6469736b31 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.2.21|4x|6469736b32 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.3.8|4x|4a61646564204a61646564206f78656e204a61646564206b657074206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.3.21|4x|666f7277617264206f78656e2062757420627574204a6164656420666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.4.8|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.4.21|2|9 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.6.8|4x|717561696e746c7920717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.6.21|4x|6163746564206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.7.8|4x|666f727761726420616374656420616374656420666f7277617264207a6f6d62696573206163746564206f78656e207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.7.21|4x|6b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.8.8|4|driving +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.8.21|4x|627574206b657074204a61646564207a6f6d6269657320616374656420627574206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.11.8|2|20 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.11.21|2|9 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.17.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.17.21|2|14 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.19.8|2|30 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.19.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.21.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.21.21|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.22.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.22.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.24.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.24.21|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.27.8|4x|74686569722064726976696e67206f78656e207a6f6d6269657320746865697220666f727761726420746865697220717561696e746c7920717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.27.21|4x|666f727761726420666f7277617264207a6f6d62696573206b65707420717561696e746c79206f78656e207a6f6d62696573206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.28.8|4x|6f78656e206163746564204a6164656420717561696e746c79207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.28.21|4|but +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.29.8|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.29.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.30.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.30.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.31.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.31.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.32.8|4x|64726976696e67206f78656e206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.32.21|4x|717561696e746c7920666f727761726420746865697220627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.33.8|4|forward +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.33.21|4|but +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.34.8|4x|4a61646564206f78656e206f78656e206163746564204a61646564207a6f6d62696573206275742062757420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.34.21|4x|717561696e746c792064726976696e6720666f7277617264207a6f6d62696573206b657074207a6f6d62696573206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.35.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.35.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.42.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.42.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.49.8|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.49.21|2|19 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.50.8|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.50.21|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.51.8|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.51.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.52.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.52.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.53.8|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.53.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.54.8|4x|666f7277617264206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.54.21|4x|6b657074206f78656e206f78656e2064726976696e67206163746564204a61646564207a6f6d62696573206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.55.8|4x|6f78656e20666f7277617264206f78656e206f78656e20666f727761726420627574207a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.55.21|4x|627574207a6f6d626965732062757420746865697220717561696e746c7920746865697220717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.57.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.57.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.58.8|2|29 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.58.21|2|9 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.59.8|4x|666f7277617264204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.59.21|4|acted +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.60.8|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.60.21|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.61.8|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.61.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.1.19|2|19 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.1.24|2|24 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.2.19|4x|64726976696e6720717561696e746c792062757420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.2.24|4|their +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.4.19|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.4.24|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.11.19|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.11.24|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.15.19|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.15.24|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.20.19|4|zombies +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.20.24|4|but +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.21.19|4|driving +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.21.24|4x|666f7277617264207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.1.13|2|13 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.1.16|2|16 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.2.13|4x|737570706c7931 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.2.16|4x|737570706c7932 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.4.13|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.4.16|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.7.13|4x|7468656972206275742064726976696e67207a6f6d62696573206b65707420666f727761726420717561696e746c7920666f7277617264204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.7.16|4x|717561696e746c7920717561696e746c7920666f72776172642074686569722064726976696e6720717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.9.13|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.9.16|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.15.13|4x|666f7277617264207468656972206f78656e206163746564206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.15.16|4x|717561696e746c7920627574206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.16.13|4x|4a6164656420627574206b65707420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.16.16|4x|62757420717561696e746c7920627574207a6f6d62696573204a61646564206163746564207468656972204a6164656420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.1.6|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.1.8|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.2.6|4x|7a6f6d62696573206b657074204a61646564206f78656e2064726976696e67207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.2.8|4x|6b65707420627574207a6f6d626965732061637465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.4.6|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.4.8|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.7.6|2|24 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.7.8|2|25 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.8.6|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.8.8|2|22 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.9.6|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.9.8|2|17 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.10.6|2|21 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.10.8|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.11.6|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.11.8|2|14 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.13.6|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.13.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.15.6|4|Jaded +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.15.8|4x|64726976696e6720717561696e746c79204a6164656420717561696e746c79206f78656e20717561696e746c7920627574207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.16.6|4x|7a6f6d626965732064726976696e67204a6164656420616374656420717561696e746c7920627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.16.8|4x|6b657074204a6164656420627574207a6f6d626965732064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.1.14|2|14 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.1.30|2|30 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.2.14|4x|6163746564207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.2.30|4x|6b657074204a616465642064726976696e67204a61646564207a6f6d62696573206f78656e20627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.4.14|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.4.30|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.6.14|4x|64726976696e67204a616465642062757420627574206163746564204a6164656420717561696e746c7920627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.6.30|4x|666f7277617264206163746564206f78656e20666f7277617264204a6164656420666f727761726420666f72776172642064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.8.14|4x|6f78656e2064726976696e672062757420717561696e746c79206f78656e204a6164656420666f7277617264206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.8.30|4x|4a6164656420616374656420627574206b657074206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.11.14|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.11.30|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.15.14|4x|717561696e746c79207a6f6d626965732061637465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.15.30|4x|746865697220627574206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.16.14|4x|7a6f6d626965732064726976696e67207468656972204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.16.30|4|zombies +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.1.17|2|17 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.1.18|2|18 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.4.17|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.4.18|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.6.17|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.6.18|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.10.17|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.10.18|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.20.17|4x|627574206275742061637465642064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.20.18|4x|6f78656e206163746564204a6164656420717561696e746c79206b65707420666f727761726420717561696e746c7920666f7277617264204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.21.17|4x|6163746564204a6164656420717561696e746c7920746865697220717561696e746c7920717561696e746c79204a6164656420666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.21.18|4x|7468656972206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.1.2|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.1.8|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.2.2|4x|64726976696e6720717561696e746c79206b657074204a6164656420666f72776172642062757420666f7277617264206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.2.8|4x|7a6f6d6269657320717561696e746c79206b657074206b6570742062757420717561696e746c7920666f727761726420717561696e746c79206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.4.2|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.4.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.6.2|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.6.8|2|25 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.10.2|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.10.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.11.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.11.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.13.2|2|7 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.13.8|2|10 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.14.2|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.14.8|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.20.2|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.20.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.23.2|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.23.8|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.24.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.24.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.25.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.25.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.26.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.26.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.30.2|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.30.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.31.2|2|12 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.31.8|2|17 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.32.2|4x|4a6164656420717561696e746c7920717561696e746c792064726976696e67206b657074207468656972206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.32.8|4x|6f78656e206b6570742064726976696e6720717561696e746c79207a6f6d62696573204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.33.2|4x|6f78656e2064726976696e67204a61646564206f78656e206f78656e204a61646564204a616465642062757420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.33.8|4x|62757420746865697220666f7277617264206b65707420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.34.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.34.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.35.2|4x|4a6164656420627574204a61646564207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.35.8|4x|6f78656e20616374656420746865697220746865697220666f727761726420627574204a61646564207a6f6d62696573206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.36.2|4x|6163746564206f78656e206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.36.8|4x|4a61646564207468656972207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.37.2|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.37.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.38.2|2|31 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.38.8|2|27 diff --git a/test/new-e2e/ndm/snmp/compose/data/dummy.snmprec b/test/new-e2e/ndm/snmp/compose/data/dummy.snmprec new file mode 100644 index 00000000000000..3c0c255574c3ff --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/dummy.snmprec @@ -0,0 +1,5 @@ +1.3.6.1.4.1.123456789.1.0|2|10 +1.3.6.1.4.1.123456789.2.0|4x|3930 +1.3.6.1.4.1.123456789.3.0|4x|313230 +1.3.6.1.4.1.123456789.4.0|4|22C +1.3.6.1.4.1.123456789.5.0|4|1.5 diff --git a/test/new-e2e/ndm/snmp/compose/data/entity.snmprec b/test/new-e2e/ndm/snmp/compose/data/entity.snmprec new file mode 100644 index 00000000000000..2d22231069c29e --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/entity.snmprec @@ -0,0 +1,67 @@ +1.3.6.1.2.1.47.1.1.1.1.1.14|2|14 +1.3.6.1.2.1.47.1.1.1.1.2.14|4x|7468656972206b6570742074686569722064726976696e6720717561696e746c7920666f7277617264206163746564206b657074 +1.3.6.1.2.1.47.1.1.1.1.3.14|6|1.3.6.1.3.188.55.250.82.5.91.149.89.39 +1.3.6.1.2.1.47.1.1.1.1.4.14|2|13 +1.3.6.1.2.1.47.1.1.1.1.5.14|2|6 +1.3.6.1.2.1.47.1.1.1.1.6.14|2|1 +1.3.6.1.2.1.47.1.1.1.1.7.14|4x|717561696e746c79206f78656e20616374656420717561696e746c7920666f7277617264206275742064726976696e672064726976696e67 +1.3.6.1.2.1.47.1.1.1.1.8.14|4x|62757420666f7277617264206f78656e204a616465642064726976696e67206b65707420627574 +1.3.6.1.2.1.47.1.1.1.1.9.14|4x|4a6164656420627574 +1.3.6.1.2.1.47.1.1.1.1.10.14|4x|717561696e746c79207468656972206163746564207468656972206163746564206163746564207468656972206163746564206163746564 +1.3.6.1.2.1.47.1.1.1.1.11.14|4x|64726976696e67206b657074 +1.3.6.1.2.1.47.1.1.1.1.12.14|4x|6163746564206b65707420746865697220666f7277617264204a61646564 +1.3.6.1.2.1.47.1.1.1.1.13.14|4x|7a6f6d62696573207a6f6d62696573204a6164656420627574206163746564204a6164656420627574207a6f6d62696573 +1.3.6.1.2.1.47.1.1.1.1.14.14|4x|7a6f6d626965732061637465642064726976696e67206f78656e +1.3.6.1.2.1.47.1.1.1.1.15.14|4x|666f7277617264207468656972207a6f6d6269657320717561696e746c79 +1.3.6.1.2.1.47.1.1.1.1.16.14|2|1 +1.3.6.1.2.1.47.1.1.1.1.17.14|4x|07d209150d352003 +1.3.6.1.2.1.47.1.1.1.1.18.14|4x|717561696e746c792064726976696e67 +1.3.6.1.2.1.47.1.1.1.1.19.14|4| +1.3.6.1.2.1.47.1.2.1.1.1.5|2|5 +1.3.6.1.2.1.47.1.2.1.1.1.17|2|17 +1.3.6.1.2.1.47.1.2.1.1.2.5|4x|4a6164656420717561696e746c79206b65707420666f7277617264206b657074206f78656e207a6f6d62696573207a6f6d62696573 +1.3.6.1.2.1.47.1.2.1.1.2.17|4x|64726976696e67206163746564 +1.3.6.1.2.1.47.1.2.1.1.3.5|6|1.3.6.1.3.64.213.26.118.121 +1.3.6.1.2.1.47.1.2.1.1.3.17|6|1.3.6.1.3.98 +1.3.6.1.2.1.47.1.2.1.1.4.5|4x|6f78656e20627574206f78656e +1.3.6.1.2.1.47.1.2.1.1.4.17|4x|64726976696e6720627574206163746564206f78656e2062757420746865697220717561696e746c79 +1.3.6.1.2.1.47.1.2.1.1.5.5|4x|666f7277617264206f78656e20616374656420717561696e746c79206b65707420746865697220666f7277617264206f78656e +1.3.6.1.2.1.47.1.2.1.1.5.17|4x|6b657074204a6164656420717561696e746c79207a6f6d62696573 +1.3.6.1.2.1.47.1.2.1.1.6.5|6|1.3.6.1.3.186.48.80.241.211.233.121.131 +1.3.6.1.2.1.47.1.2.1.1.6.17|6|1.3.6.1.3.8 +1.3.6.1.2.1.47.1.2.1.1.7.5|4x|6b657074207a6f6d62696573204a6164656420666f7277617264206163746564 +1.3.6.1.2.1.47.1.2.1.1.7.17|4x|6f78656e207468656972 +1.3.6.1.2.1.47.1.2.1.1.8.5|4x|717561696e746c79206f78656e20717561696e746c7920717561696e746c79 +1.3.6.1.2.1.47.1.2.1.1.8.17|4x|64726976696e6720717561696e746c79207a6f6d62696573207a6f6d6269657320666f7277617264206b657074 +1.3.6.1.2.1.47.1.3.1.1.1.16.29|2|29 +1.3.6.1.2.1.47.1.3.1.1.1.27.9|2|9 +1.3.6.1.2.1.47.1.3.2.1.1.13.23|2|23 +1.3.6.1.2.1.47.1.3.2.1.1.25.23|2|23 +1.3.6.1.2.1.47.1.3.2.1.2.13.23|6|1.3.6.1.3.96.235.172.158.104.173 +1.3.6.1.2.1.47.1.3.2.1.2.25.23|6|1.3.6.1.3.166.89.181.51.175 +1.3.6.1.2.1.47.1.3.3.1.1.5.22|2|22 +1.3.6.1.2.1.47.1.3.3.1.1.14.6|2|6 +1.3.6.1.2.1.47.1.4.1.0|67|3122888737 +1.3.6.1.2.1.99.1.1.1.1.5|2|8 +1.3.6.1.2.1.99.1.1.1.1.17|2|2 +1.3.6.1.2.1.99.1.1.1.2.5|2|2 +1.3.6.1.2.1.99.1.1.1.2.17|2|15 +1.3.6.1.2.1.99.1.1.1.3.5|2|1 +1.3.6.1.2.1.99.1.1.1.3.17|2|4 +1.3.6.1.2.1.99.1.1.1.4.5|2|15 +1.3.6.1.2.1.99.1.1.1.4.17|2|21 +1.3.6.1.2.1.99.1.1.1.5.5|2|3 +1.3.6.1.2.1.99.1.1.1.5.17|2|1 +1.3.6.1.2.1.99.1.1.1.6.5|4x|61637465642064726976696e67207a6f6d62696573206b657074207468656972207a6f6d626965732064726976696e67206b657074 +1.3.6.1.2.1.99.1.1.1.6.17|4x|64726976696e67206b657074207468656972206f78656e2064726976696e6720627574204a61646564 +1.3.6.1.2.1.99.1.1.1.7.5|67|2030232691 +1.3.6.1.2.1.99.1.1.1.7.17|67|963254584 +1.3.6.1.2.1.99.1.1.1.8.5|66|25995 +1.3.6.1.2.1.99.1.1.1.8.17|66|52278 +1.3.6.1.6.3.10.2.1.1.0|4x|616374656420666f7277617264206f78656e +1.3.6.1.6.3.10.2.1.1.0|4x|62757420746865697220746865697220746865697220627574206f78656e +1.3.6.1.6.3.10.2.1.2.0|2|6 +1.3.6.1.6.3.10.2.1.2.0|2|12 +1.3.6.1.6.3.10.2.1.3.0|2|4 +1.3.6.1.6.3.10.2.1.3.0|2|7 +1.3.6.1.6.3.10.2.1.4.0|2|500 diff --git a/test/new-e2e/ndm/snmp/compose/data/f5-big-ip.snmprec b/test/new-e2e/ndm/snmp/compose/data/f5-big-ip.snmprec new file mode 100644 index 00000000000000..d1cc8416b126f7 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/f5-big-ip.snmprec @@ -0,0 +1,34555 @@ +1.3.6.1.2.1.1.1.0|4x|4249472d4950205669727475616c2045646974696f6e203a204c696e757820332e31302e302d3836322e31342e342e656c372e76652e7838365f3634203a204249472d495020736f6674776172652072656c656173652031352e302e312c206275696c6420302e302e3131 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.3375.2.1.3.4.43 +1.3.6.1.2.1.1.3.0|67|181235303 +1.3.6.1.2.1.1.4.0|4x|437573746f6d6572204e616d65203c61646d696e40637573746f6d65722e636f6d3e +1.3.6.1.2.1.1.5.0|4x|66352d6269672d69702d6164632d676f6f642d62796f6c2d312d766d2e632e64617461646f672d696e746567726174696f6e732d6c61622e696e7465726e616c +1.3.6.1.2.1.1.6.0|4x|4e6574776f726b20436c6f7365742031 +1.3.6.1.2.1.1.7.0|2|78 +1.3.6.1.2.1.1.8.0|67|8266 +1.3.6.1.2.1.1.9.1.2.1|6|1.3.6.1.6.3.11.3.1.1 +1.3.6.1.2.1.1.9.1.2.2|6|1.3.6.1.6.3.15.2.1.1 +1.3.6.1.2.1.1.9.1.2.3|6|1.3.6.1.6.3.10.3.1.1 +1.3.6.1.2.1.1.9.1.2.4|6|1.3.6.1.6.3.1 +1.3.6.1.2.1.1.9.1.2.5|6|1.3.6.1.6.3.16.2.2.1 +1.3.6.1.2.1.1.9.1.2.6|6|1.3.6.1.6.3.13.3.1.3 +1.3.6.1.2.1.1.9.1.2.7|6|1.3.6.1.2.1.92 +1.3.6.1.2.1.1.9.1.2.8|6|1.3.6.1.2.1.31 +1.3.6.1.2.1.1.9.1.2.9|6|1.3.6.1.2.1.48 +1.3.6.1.2.1.1.9.1.3.1|4x|546865204d494220666f72204d6573736167652050726f63657373696e6720616e64204469737061746368696e672e +1.3.6.1.2.1.1.9.1.3.2|4x|546865206d616e6167656d656e7420696e666f726d6174696f6e20646566696e6974696f6e7320666f722074686520534e4d5020557365722d6261736564205365637572697479204d6f64656c2e +1.3.6.1.2.1.1.9.1.3.3|4x|54686520534e4d50204d616e6167656d656e7420417263686974656374757265204d49422e +1.3.6.1.2.1.1.9.1.3.4|4x|546865204d4942206d6f64756c6520666f7220534e4d50763220656e746974696573 +1.3.6.1.2.1.1.9.1.3.5|4x|566965772d62617365642041636365737320436f6e74726f6c204d6f64656c20666f7220534e4d502e +1.3.6.1.2.1.1.9.1.3.6|4x|546865204d4942206d6f64756c657320666f72206d616e6167696e6720534e4d50204e6f74696669636174696f6e2c20706c75732066696c746572696e672e +1.3.6.1.2.1.1.9.1.3.7|4x|546865204d4942206d6f64756c6520666f72206c6f6767696e6720534e4d50204e6f74696669636174696f6e732e +1.3.6.1.2.1.1.9.1.3.8|4x|546865204d4942206d6f64756c6520746f2064657363726962652067656e65726963206f626a6563747320666f72206e6574776f726b20696e74657266616365207375622d6c6179657273 +1.3.6.1.2.1.1.9.1.3.9|4x|546865204d4942206d6f64756c6520666f72206d616e6167696e6720495020696d706c656d656e746174696f6e73 +1.3.6.1.2.1.1.9.1.4.1|67|92 +1.3.6.1.2.1.1.9.1.4.2|67|92 +1.3.6.1.2.1.1.9.1.4.3|67|92 +1.3.6.1.2.1.1.9.1.4.4|67|96 +1.3.6.1.2.1.1.9.1.4.5|67|96 +1.3.6.1.2.1.1.9.1.4.6|67|108 +1.3.6.1.2.1.1.9.1.4.7|67|108 +1.3.6.1.2.1.1.9.1.4.8|67|8261 +1.3.6.1.2.1.1.9.1.4.9|67|8266 +1.3.6.1.2.1.2.1.0|2|5 +1.3.6.1.2.1.2.2.1.1.32|2|32 +1.3.6.1.2.1.2.2.1.1.48|2|48 +1.3.6.1.2.1.2.2.1.1.80|2|80 +1.3.6.1.2.1.2.2.1.1.96|2|96 +1.3.6.1.2.1.2.2.1.1.112|2|112 +1.3.6.1.2.1.2.2.1.2.32|4|mgmt +1.3.6.1.2.1.2.2.1.2.48|4x|312e30 +1.3.6.1.2.1.2.2.1.2.80|4x|2f436f6d6d6f6e2f687474702d74756e6e656c +1.3.6.1.2.1.2.2.1.2.96|4x|2f436f6d6d6f6e2f736f636b732d74756e6e656c +1.3.6.1.2.1.2.2.1.2.112|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.2.1.2.2.1.3.32|2|6 +1.3.6.1.2.1.2.2.1.3.48|2|6 +1.3.6.1.2.1.2.2.1.3.80|2|0 +1.3.6.1.2.1.2.2.1.3.96|2|0 +1.3.6.1.2.1.2.2.1.3.112|2|6 +1.3.6.1.2.1.2.2.1.4.32|2|1460 +1.3.6.1.2.1.2.2.1.4.48|2|1460 +1.3.6.1.2.1.2.2.1.4.80|2|0 +1.3.6.1.2.1.2.2.1.4.96|2|0 +1.3.6.1.2.1.2.2.1.4.112|2|1460 +1.3.6.1.2.1.2.2.1.5.32|66|100000000 +1.3.6.1.2.1.2.2.1.5.48|66|4294967295 +1.3.6.1.2.1.2.2.1.5.80|66|0 +1.3.6.1.2.1.2.2.1.5.96|66|0 +1.3.6.1.2.1.2.2.1.5.112|66|4294967295 +1.3.6.1.2.1.2.2.1.6.32|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.48|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.80|4x|42010aa40034 +1.3.6.1.2.1.2.2.1.6.96|4x|42010aa40034 +1.3.6.1.2.1.2.2.1.6.112|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.7.32|2|1 +1.3.6.1.2.1.2.2.1.7.48|2|1 +1.3.6.1.2.1.2.2.1.7.80|2|1 +1.3.6.1.2.1.2.2.1.7.96|2|1 +1.3.6.1.2.1.2.2.1.7.112|2|1 +1.3.6.1.2.1.2.2.1.8.32|2|1 +1.3.6.1.2.1.2.2.1.8.48|2|1 +1.3.6.1.2.1.2.2.1.8.80|2|4 +1.3.6.1.2.1.2.2.1.8.96|2|4 +1.3.6.1.2.1.2.2.1.8.112|2|1 +1.3.6.1.2.1.2.2.1.9.32|67|0 +1.3.6.1.2.1.2.2.1.9.48|67|0 +1.3.6.1.2.1.2.2.1.9.80|67|0 +1.3.6.1.2.1.2.2.1.9.96|67|0 +1.3.6.1.2.1.2.2.1.9.112|67|0 +1.3.6.1.2.1.2.2.1.10.32|65|457067217 +1.3.6.1.2.1.2.2.1.10.48|65|601487263 +1.3.6.1.2.1.2.2.1.10.80|65|0 +1.3.6.1.2.1.2.2.1.10.96|65|0 +1.3.6.1.2.1.2.2.1.10.112|65|392203366 +1.3.6.1.2.1.2.2.1.11.32|65|893580 +1.3.6.1.2.1.2.2.1.11.48|65|762482 +1.3.6.1.2.1.2.2.1.11.80|65|0 +1.3.6.1.2.1.2.2.1.11.96|65|0 +1.3.6.1.2.1.2.2.1.11.112|65|861050 +1.3.6.1.2.1.2.2.1.12.32|65|0 +1.3.6.1.2.1.2.2.1.12.48|65|0 +1.3.6.1.2.1.2.2.1.12.80|65|0 +1.3.6.1.2.1.2.2.1.12.96|65|0 +1.3.6.1.2.1.2.2.1.12.112|65|0 +1.3.6.1.2.1.2.2.1.13.32|65|0 +1.3.6.1.2.1.2.2.1.13.48|65|0 +1.3.6.1.2.1.2.2.1.13.80|65|0 +1.3.6.1.2.1.2.2.1.13.96|65|0 +1.3.6.1.2.1.2.2.1.13.112|65|226244 +1.3.6.1.2.1.2.2.1.14.32|65|0 +1.3.6.1.2.1.2.2.1.14.48|65|0 +1.3.6.1.2.1.2.2.1.14.80|65|0 +1.3.6.1.2.1.2.2.1.14.96|65|0 +1.3.6.1.2.1.2.2.1.14.112|65|0 +1.3.6.1.2.1.2.2.1.15.32|65|0 +1.3.6.1.2.1.2.2.1.15.48|65|0 +1.3.6.1.2.1.2.2.1.15.80|65|0 +1.3.6.1.2.1.2.2.1.15.96|65|0 +1.3.6.1.2.1.2.2.1.15.112|65|0 +1.3.6.1.2.1.2.2.1.16.32|65|308158529 +1.3.6.1.2.1.2.2.1.16.48|65|63659219 +1.3.6.1.2.1.2.2.1.16.80|65|0 +1.3.6.1.2.1.2.2.1.16.96|65|0 +1.3.6.1.2.1.2.2.1.16.112|65|401424438 +1.3.6.1.2.1.2.2.1.17.32|65|736668 +1.3.6.1.2.1.2.2.1.17.48|65|487183 +1.3.6.1.2.1.2.2.1.17.80|65|0 +1.3.6.1.2.1.2.2.1.17.96|65|0 +1.3.6.1.2.1.2.2.1.17.112|65|842310 +1.3.6.1.2.1.2.2.1.18.32|65|0 +1.3.6.1.2.1.2.2.1.18.48|65|0 +1.3.6.1.2.1.2.2.1.18.80|65|0 +1.3.6.1.2.1.2.2.1.18.96|65|0 +1.3.6.1.2.1.2.2.1.18.112|65|0 +1.3.6.1.2.1.2.2.1.19.32|65|0 +1.3.6.1.2.1.2.2.1.19.48|65|0 +1.3.6.1.2.1.2.2.1.19.80|65|0 +1.3.6.1.2.1.2.2.1.19.96|65|0 +1.3.6.1.2.1.2.2.1.19.112|65|0 +1.3.6.1.2.1.2.2.1.20.32|65|0 +1.3.6.1.2.1.2.2.1.20.48|65|0 +1.3.6.1.2.1.2.2.1.20.80|65|0 +1.3.6.1.2.1.2.2.1.20.96|65|0 +1.3.6.1.2.1.2.2.1.20.112|65|0 +1.3.6.1.2.1.2.2.1.21.32|66|0 +1.3.6.1.2.1.2.2.1.21.48|66|0 +1.3.6.1.2.1.2.2.1.21.80|66|0 +1.3.6.1.2.1.2.2.1.21.96|66|0 +1.3.6.1.2.1.2.2.1.21.112|66|0 +1.3.6.1.2.1.2.2.1.22.32|6|0.0 +1.3.6.1.2.1.2.2.1.22.48|6|0.0 +1.3.6.1.2.1.2.2.1.22.80|6|0.0 +1.3.6.1.2.1.2.2.1.22.96|6|0.0 +1.3.6.1.2.1.2.2.1.22.112|6|0.0 +1.3.6.1.2.1.4.1.0|2|2 +1.3.6.1.2.1.4.2.0|2|64 +1.3.6.1.2.1.4.13.0|2|30 +1.3.6.1.2.1.4.20.1.1.10.164.0.51|64x|0aa40033 +1.3.6.1.2.1.4.20.1.2.10.164.0.51|2|32 +1.3.6.1.2.1.4.20.1.3.10.164.0.51|64x|ffffffff +1.3.6.1.2.1.4.20.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.25.0|2|2 +1.3.6.1.2.1.4.26.0|2|64 +1.3.6.1.2.1.4.31.1.1.1.1|2|1 +1.3.6.1.2.1.4.31.1.1.1.2|2|2 +1.3.6.1.2.1.4.31.1.1.3.1|65|8543642 +1.3.6.1.2.1.4.31.1.1.3.2|65|15102 +1.3.6.1.2.1.4.31.1.1.4.1|70|8543642 +1.3.6.1.2.1.4.31.1.1.4.2|70|15102 +1.3.6.1.2.1.4.31.1.1.7.1|65|0 +1.3.6.1.2.1.4.31.1.1.7.2|65|0 +1.3.6.1.2.1.4.31.1.1.14.1|65|0 +1.3.6.1.2.1.4.31.1.1.14.2|65|0 +1.3.6.1.2.1.4.31.1.1.16.1|65|0 +1.3.6.1.2.1.4.31.1.1.16.2|65|0 +1.3.6.1.2.1.4.31.1.1.26.1|65|0 +1.3.6.1.2.1.4.31.1.1.26.2|65|0 +1.3.6.1.2.1.4.31.1.1.28.1|65|0 +1.3.6.1.2.1.4.31.1.1.28.2|65|0 +1.3.6.1.2.1.4.31.1.1.30.1|65|8533411 +1.3.6.1.2.1.4.31.1.1.30.2|65|0 +1.3.6.1.2.1.4.31.1.1.31.1|70|8533411 +1.3.6.1.2.1.4.31.1.1.31.2|70|0 +1.3.6.1.2.1.4.31.1.1.34.1|65|0 +1.3.6.1.2.1.4.31.1.1.34.2|65|15102 +1.3.6.1.2.1.4.31.1.1.35.1|70|0 +1.3.6.1.2.1.4.31.1.1.35.2|70|15102 +1.3.6.1.2.1.4.31.1.1.38.1|65|0 +1.3.6.1.2.1.4.31.1.1.38.2|65|0 +1.3.6.1.2.1.4.31.1.1.39.1|70|0 +1.3.6.1.2.1.4.31.1.1.39.2|70|0 +1.3.6.1.2.1.4.31.1.1.47.1|66|2000 +1.3.6.1.2.1.4.31.1.1.47.2|66|2000 +1.3.6.1.2.1.4.32.1.5.32.1.4.10.164.0.51.32|2|2 +1.3.6.1.2.1.4.32.1.5.112.1.4.10.164.0.51.32|2|2 +1.3.6.1.2.1.4.32.1.6.32.1.4.10.164.0.51.32|2|1 +1.3.6.1.2.1.4.32.1.6.112.1.4.10.164.0.51.32|2|1 +1.3.6.1.2.1.4.32.1.7.32.1.4.10.164.0.51.32|2|2 +1.3.6.1.2.1.4.32.1.7.112.1.4.10.164.0.51.32|2|2 +1.3.6.1.2.1.4.32.1.8.32.1.4.10.164.0.51.32|66|4294967295 +1.3.6.1.2.1.4.32.1.8.112.1.4.10.164.0.51.32|66|4294967295 +1.3.6.1.2.1.4.32.1.9.32.1.4.10.164.0.51.32|66|4294967295 +1.3.6.1.2.1.4.32.1.9.112.1.4.10.164.0.51.32|66|4294967295 +1.3.6.1.2.1.4.33.0|2|459515095 +1.3.6.1.2.1.4.34.1.3.1.4.10.164.0.51|2|32 +1.3.6.1.2.1.4.34.1.4.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.34.1.5.1.4.10.164.0.51|6|1.3.6.1.2.1.4.32.1.5.32.1.4.10.164.0.51.32 +1.3.6.1.2.1.4.34.1.6.1.4.10.164.0.51|2|2 +1.3.6.1.2.1.4.34.1.7.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.34.1.8.1.4.10.164.0.51|67|0 +1.3.6.1.2.1.4.34.1.9.1.4.10.164.0.51|67|0 +1.3.6.1.2.1.4.34.1.10.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.34.1.11.1.4.10.164.0.51|2|3 +1.3.6.1.2.1.4.35.1.4.32.1.4.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.4.35.1.4.112.1.4.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.4.35.1.5.32.1.4.10.164.0.51|67|0 +1.3.6.1.2.1.4.35.1.5.112.1.4.10.164.0.51|67|0 +1.3.6.1.2.1.4.35.1.6.32.1.4.10.164.0.51|2|4 +1.3.6.1.2.1.4.35.1.6.112.1.4.10.164.0.51|2|4 +1.3.6.1.2.1.4.35.1.7.32.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.35.1.7.112.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.35.1.8.32.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.35.1.8.112.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.5.29.1.2.1|65|0 +1.3.6.1.2.1.5.29.1.2.2|65|15 +1.3.6.1.2.1.5.29.1.3.1|65|0 +1.3.6.1.2.1.5.29.1.3.2|65|35 +1.3.6.1.2.1.5.29.1.4.1|65|0 +1.3.6.1.2.1.5.29.1.4.2|65|30 +1.3.6.1.2.1.5.29.1.5.1|65|0 +1.3.6.1.2.1.5.29.1.5.2|65|0 +1.3.6.1.2.1.11.1.0|65|140759 +1.3.6.1.2.1.11.2.0|65|140662 +1.3.6.1.2.1.11.3.0|65|0 +1.3.6.1.2.1.11.4.0|65|0 +1.3.6.1.2.1.11.5.0|65|0 +1.3.6.1.2.1.11.6.0|65|0 +1.3.6.1.2.1.11.8.0|65|0 +1.3.6.1.2.1.11.9.0|65|0 +1.3.6.1.2.1.11.10.0|65|0 +1.3.6.1.2.1.11.11.0|65|0 +1.3.6.1.2.1.11.12.0|65|0 +1.3.6.1.2.1.11.13.0|65|761321 +1.3.6.1.2.1.11.14.0|65|0 +1.3.6.1.2.1.11.15.0|65|5815 +1.3.6.1.2.1.11.16.0|65|113502 +1.3.6.1.2.1.11.17.0|65|0 +1.3.6.1.2.1.11.18.0|65|0 +1.3.6.1.2.1.11.19.0|65|0 +1.3.6.1.2.1.11.20.0|65|0 +1.3.6.1.2.1.11.21.0|65|0 +1.3.6.1.2.1.11.22.0|65|0 +1.3.6.1.2.1.11.24.0|65|0 +1.3.6.1.2.1.11.25.0|65|0 +1.3.6.1.2.1.11.26.0|65|0 +1.3.6.1.2.1.11.27.0|65|0 +1.3.6.1.2.1.11.28.0|65|140686 +1.3.6.1.2.1.11.29.0|65|0 +1.3.6.1.2.1.11.30.0|2|2 +1.3.6.1.2.1.11.31.0|65|0 +1.3.6.1.2.1.11.32.0|65|0 +1.3.6.1.2.1.25.1.1.0|67|181580115 +1.3.6.1.2.1.25.1.2.0|4x|07e30a15022208002d0700 +1.3.6.1.2.1.25.1.3.0|2|393216 +1.3.6.1.2.1.25.1.4.0|4x|726f20726f6f743d555549443d37313463316461302d646562372d346230332d383830642d34636564383531313965333520636f6e736f6c653d747479302020636f6e736f6c653d74747953302070616e69633d3120706c6174666f726d3d5a3130302064656661756c745f6370755f6f726465722071756965740a +1.3.6.1.2.1.25.1.5.0|66|0 +1.3.6.1.2.1.25.1.6.0|66|190 +1.3.6.1.2.1.25.1.7.0|2|0 +1.3.6.1.2.1.25.2.2.0|2|7660752 +1.3.6.1.2.1.25.2.3.1.1.1|2|1 +1.3.6.1.2.1.25.2.3.1.1.3|2|3 +1.3.6.1.2.1.25.2.3.1.1.6|2|6 +1.3.6.1.2.1.25.2.3.1.1.7|2|7 +1.3.6.1.2.1.25.2.3.1.1.8|2|8 +1.3.6.1.2.1.25.2.3.1.1.10|2|10 +1.3.6.1.2.1.25.2.3.1.1.31|2|31 +1.3.6.1.2.1.25.2.3.1.1.32|2|32 +1.3.6.1.2.1.25.2.3.1.1.37|2|37 +1.3.6.1.2.1.25.2.3.1.1.39|2|39 +1.3.6.1.2.1.25.2.3.1.1.40|2|40 +1.3.6.1.2.1.25.2.3.1.1.44|2|44 +1.3.6.1.2.1.25.2.3.1.1.50|2|50 +1.3.6.1.2.1.25.2.3.1.1.51|2|51 +1.3.6.1.2.1.25.2.3.1.1.52|2|52 +1.3.6.1.2.1.25.2.3.1.1.53|2|53 +1.3.6.1.2.1.25.2.3.1.1.54|2|54 +1.3.6.1.2.1.25.2.3.1.1.55|2|55 +1.3.6.1.2.1.25.2.3.1.1.56|2|56 +1.3.6.1.2.1.25.2.3.1.1.57|2|57 +1.3.6.1.2.1.25.2.3.1.1.58|2|58 +1.3.6.1.2.1.25.2.3.1.1.59|2|59 +1.3.6.1.2.1.25.2.3.1.2.1|6|1.3.6.1.2.1.25.2.1.2 +1.3.6.1.2.1.25.2.3.1.2.3|6|1.3.6.1.2.1.25.2.1.3 +1.3.6.1.2.1.25.2.3.1.2.6|6|1.3.6.1.2.1.25.2.1.1 +1.3.6.1.2.1.25.2.3.1.2.7|6|1.3.6.1.2.1.25.2.1.1 +1.3.6.1.2.1.25.2.3.1.2.8|6|1.3.6.1.2.1.25.2.1.1 +1.3.6.1.2.1.25.2.3.1.2.10|6|1.3.6.1.2.1.25.2.1.3 +1.3.6.1.2.1.25.2.3.1.2.31|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.32|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.37|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.39|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.40|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.44|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.50|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.51|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.52|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.53|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.54|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.55|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.56|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.57|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.58|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.59|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.3.1|4x|506879736963616c206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.3|4x|5669727475616c206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.6|4x|4d656d6f72792062756666657273 +1.3.6.1.2.1.25.2.3.1.3.7|4x|436163686564206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.8|4x|536861726564206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.10|4x|53776170207370616365 +1.3.6.1.2.1.25.2.3.1.3.31|4x|2f +1.3.6.1.2.1.25.2.3.1.3.32|4x|2f766172 +1.3.6.1.2.1.25.2.3.1.3.37|4x|2f6465762f73686d +1.3.6.1.2.1.25.2.3.1.3.39|4x|2f72756e +1.3.6.1.2.1.25.2.3.1.3.40|4x|2f7379732f66732f6367726f7570 +1.3.6.1.2.1.25.2.3.1.3.44|4x|2f757372 +1.3.6.1.2.1.25.2.3.1.3.50|4x|2f736861726564 +1.3.6.1.2.1.25.2.3.1.3.51|4x|2f7368617265642f7272642e312e32 +1.3.6.1.2.1.25.2.3.1.3.52|4x|2f61707064617461 +1.3.6.1.2.1.25.2.3.1.3.53|4x|2f636f6e666967 +1.3.6.1.2.1.25.2.3.1.3.54|4x|2f7661722f70726f6d7074 +1.3.6.1.2.1.25.2.3.1.3.55|4x|2f7661722f746d73746174 +1.3.6.1.2.1.25.2.3.1.3.56|4x|2f7661722f6c6f67 +1.3.6.1.2.1.25.2.3.1.3.57|4x|2f7661722f6c6f697063 +1.3.6.1.2.1.25.2.3.1.3.58|4x|2f72756e2f757365722f3931 +1.3.6.1.2.1.25.2.3.1.3.59|4x|2f7661722f6e616d65642f6c6962 +1.3.6.1.2.1.25.2.3.1.4.1|2|1024 +1.3.6.1.2.1.25.2.3.1.4.3|2|1024 +1.3.6.1.2.1.25.2.3.1.4.6|2|1024 +1.3.6.1.2.1.25.2.3.1.4.7|2|1024 +1.3.6.1.2.1.25.2.3.1.4.8|2|1024 +1.3.6.1.2.1.25.2.3.1.4.10|2|1024 +1.3.6.1.2.1.25.2.3.1.4.31|2|1024 +1.3.6.1.2.1.25.2.3.1.4.32|2|4096 +1.3.6.1.2.1.25.2.3.1.4.37|2|4096 +1.3.6.1.2.1.25.2.3.1.4.39|2|4096 +1.3.6.1.2.1.25.2.3.1.4.40|2|4096 +1.3.6.1.2.1.25.2.3.1.4.44|2|4096 +1.3.6.1.2.1.25.2.3.1.4.50|2|4096 +1.3.6.1.2.1.25.2.3.1.4.51|2|4096 +1.3.6.1.2.1.25.2.3.1.4.52|2|1024 +1.3.6.1.2.1.25.2.3.1.4.53|2|1024 +1.3.6.1.2.1.25.2.3.1.4.54|2|4096 +1.3.6.1.2.1.25.2.3.1.4.55|2|4096 +1.3.6.1.2.1.25.2.3.1.4.56|2|4096 +1.3.6.1.2.1.25.2.3.1.4.57|2|4096 +1.3.6.1.2.1.25.2.3.1.4.58|2|4096 +1.3.6.1.2.1.25.2.3.1.4.59|2|4096 +1.3.6.1.2.1.25.2.3.1.5.1|2|7660752 +1.3.6.1.2.1.25.2.3.1.5.3|2|8684748 +1.3.6.1.2.1.25.2.3.1.5.6|2|7660752 +1.3.6.1.2.1.25.2.3.1.5.7|2|424284 +1.3.6.1.2.1.25.2.3.1.5.8|2|54064 +1.3.6.1.2.1.25.2.3.1.5.10|2|1023996 +1.3.6.1.2.1.25.2.3.1.5.31|2|428150 +1.3.6.1.2.1.25.2.3.1.5.32|2|235782 +1.3.6.1.2.1.25.2.3.1.5.37|2|957594 +1.3.6.1.2.1.25.2.3.1.5.39|2|957594 +1.3.6.1.2.1.25.2.3.1.5.40|2|957594 +1.3.6.1.2.1.25.2.3.1.5.44|2|1296662 +1.3.6.1.2.1.25.2.3.1.5.50|2|3837692 +1.3.6.1.2.1.25.2.3.1.5.51|2|957594 +1.3.6.1.2.1.25.2.3.1.5.52|2|31729 +1.3.6.1.2.1.25.2.3.1.5.53|2|479716 +1.3.6.1.2.1.25.2.3.1.5.54|2|1024 +1.3.6.1.2.1.25.2.3.1.5.55|2|957594 +1.3.6.1.2.1.25.2.3.1.5.56|2|247878 +1.3.6.1.2.1.25.2.3.1.5.57|2|957594 +1.3.6.1.2.1.25.2.3.1.5.58|2|191519 +1.3.6.1.2.1.25.2.3.1.5.59|2|235782 +1.3.6.1.2.1.25.2.3.1.6.1|2|7572748 +1.3.6.1.2.1.25.2.3.1.6.3|2|8033292 +1.3.6.1.2.1.25.2.3.1.6.6|2|70956 +1.3.6.1.2.1.25.2.3.1.6.7|2|424284 +1.3.6.1.2.1.25.2.3.1.6.8|2|54064 +1.3.6.1.2.1.25.2.3.1.6.10|2|460544 +1.3.6.1.2.1.25.2.3.1.6.31|2|78704 +1.3.6.1.2.1.25.2.3.1.6.32|2|90615 +1.3.6.1.2.1.25.2.3.1.6.37|2|569 +1.3.6.1.2.1.25.2.3.1.6.39|2|511 +1.3.6.1.2.1.25.2.3.1.6.40|2|0 +1.3.6.1.2.1.25.2.3.1.6.44|2|1040421 +1.3.6.1.2.1.25.2.3.1.6.50|2|43151 +1.3.6.1.2.1.25.2.3.1.6.51|2|7937 +1.3.6.1.2.1.25.2.3.1.6.52|2|4516 +1.3.6.1.2.1.25.2.3.1.6.53|2|14722 +1.3.6.1.2.1.25.2.3.1.6.54|2|7 +1.3.6.1.2.1.25.2.3.1.6.55|2|4360 +1.3.6.1.2.1.25.2.3.1.6.56|2|105253 +1.3.6.1.2.1.25.2.3.1.6.57|2|0 +1.3.6.1.2.1.25.2.3.1.6.58|2|0 +1.3.6.1.2.1.25.2.3.1.6.59|2|90615 +1.3.6.1.2.1.25.3.2.1.1.196608|2|196608 +1.3.6.1.2.1.25.3.2.1.1.196609|2|196609 +1.3.6.1.2.1.25.3.2.1.1.786432|2|786432 +1.3.6.1.2.1.25.3.2.1.2.196608|6|1.3.6.1.2.1.25.3.1.3 +1.3.6.1.2.1.25.3.2.1.2.196609|6|1.3.6.1.2.1.25.3.1.3 +1.3.6.1.2.1.25.3.2.1.2.786432|6|1.3.6.1.2.1.25.3.1.12 +1.3.6.1.2.1.25.3.2.1.3.196608|4x|47656e75696e65496e74656c3a20496e74656c2852292058656f6e28522920435055204020322e303047487a +1.3.6.1.2.1.25.3.2.1.3.196609|4x|47656e75696e65496e74656c3a20496e74656c2852292058656f6e28522920435055204020322e303047487a +1.3.6.1.2.1.25.3.2.1.3.786432|4x|4775657373696e6720746861742074686572652773206120666c6f6174696e6720706f696e7420636f2d70726f636573736f72 +1.3.6.1.2.1.25.3.2.1.4.196608|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.196609|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.786432|6|0.0 +1.3.6.1.2.1.25.3.2.1.5.196608|2|2 +1.3.6.1.2.1.25.3.2.1.5.196609|2|2 +1.3.6.1.2.1.25.3.3.1.1.196608|6|0.0 +1.3.6.1.2.1.25.3.3.1.1.196609|6|0.0 +1.3.6.1.2.1.25.3.3.1.2.196608|2|7 +1.3.6.1.2.1.25.3.3.1.2.196609|2|7 +1.3.6.1.2.1.25.3.8.1.1.1|2|1 +1.3.6.1.2.1.25.3.8.1.1.2|2|2 +1.3.6.1.2.1.25.3.8.1.1.7|2|7 +1.3.6.1.2.1.25.3.8.1.1.9|2|9 +1.3.6.1.2.1.25.3.8.1.1.10|2|10 +1.3.6.1.2.1.25.3.8.1.1.14|2|14 +1.3.6.1.2.1.25.3.8.1.1.20|2|20 +1.3.6.1.2.1.25.3.8.1.1.21|2|21 +1.3.6.1.2.1.25.3.8.1.1.22|2|22 +1.3.6.1.2.1.25.3.8.1.1.23|2|23 +1.3.6.1.2.1.25.3.8.1.1.24|2|24 +1.3.6.1.2.1.25.3.8.1.1.25|2|25 +1.3.6.1.2.1.25.3.8.1.1.26|2|26 +1.3.6.1.2.1.25.3.8.1.1.27|2|27 +1.3.6.1.2.1.25.3.8.1.1.28|2|28 +1.3.6.1.2.1.25.3.8.1.1.29|2|29 +1.3.6.1.2.1.25.3.8.1.2.1|4x|2f +1.3.6.1.2.1.25.3.8.1.2.2|4x|2f766172 +1.3.6.1.2.1.25.3.8.1.2.7|4x|2f6465762f73686d +1.3.6.1.2.1.25.3.8.1.2.9|4x|2f72756e +1.3.6.1.2.1.25.3.8.1.2.10|4x|2f7379732f66732f6367726f7570 +1.3.6.1.2.1.25.3.8.1.2.14|4x|2f757372 +1.3.6.1.2.1.25.3.8.1.2.20|4x|2f736861726564 +1.3.6.1.2.1.25.3.8.1.2.21|4x|2f7368617265642f7272642e312e32 +1.3.6.1.2.1.25.3.8.1.2.22|4x|2f61707064617461 +1.3.6.1.2.1.25.3.8.1.2.23|4x|2f636f6e666967 +1.3.6.1.2.1.25.3.8.1.2.24|4x|2f7661722f70726f6d7074 +1.3.6.1.2.1.25.3.8.1.2.25|4x|2f7661722f746d73746174 +1.3.6.1.2.1.25.3.8.1.2.26|4x|2f7661722f6c6f67 +1.3.6.1.2.1.25.3.8.1.2.27|4x|2f7661722f6c6f697063 +1.3.6.1.2.1.25.3.8.1.2.28|4x|2f72756e2f757365722f3931 +1.3.6.1.2.1.25.3.8.1.2.29|4x|2f7661722f6e616d65642f6c6962 +1.3.6.1.2.1.25.3.8.1.3.1|4| +1.3.6.1.2.1.25.3.8.1.3.2|4| +1.3.6.1.2.1.25.3.8.1.3.7|4| +1.3.6.1.2.1.25.3.8.1.3.9|4| +1.3.6.1.2.1.25.3.8.1.3.10|4| +1.3.6.1.2.1.25.3.8.1.3.14|4| +1.3.6.1.2.1.25.3.8.1.3.20|4| +1.3.6.1.2.1.25.3.8.1.3.21|4| +1.3.6.1.2.1.25.3.8.1.3.22|4| +1.3.6.1.2.1.25.3.8.1.3.23|4| +1.3.6.1.2.1.25.3.8.1.3.24|4| +1.3.6.1.2.1.25.3.8.1.3.25|4| +1.3.6.1.2.1.25.3.8.1.3.26|4| +1.3.6.1.2.1.25.3.8.1.3.27|4| +1.3.6.1.2.1.25.3.8.1.3.28|4| +1.3.6.1.2.1.25.3.8.1.3.29|4| +1.3.6.1.2.1.25.3.8.1.4.1|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.2|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.7|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.9|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.10|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.14|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.20|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.21|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.22|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.23|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.24|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.25|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.26|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.27|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.28|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.29|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.5.1|2|1 +1.3.6.1.2.1.25.3.8.1.5.2|2|1 +1.3.6.1.2.1.25.3.8.1.5.7|2|1 +1.3.6.1.2.1.25.3.8.1.5.9|2|1 +1.3.6.1.2.1.25.3.8.1.5.10|2|2 +1.3.6.1.2.1.25.3.8.1.5.14|2|2 +1.3.6.1.2.1.25.3.8.1.5.20|2|1 +1.3.6.1.2.1.25.3.8.1.5.21|2|1 +1.3.6.1.2.1.25.3.8.1.5.22|2|1 +1.3.6.1.2.1.25.3.8.1.5.23|2|1 +1.3.6.1.2.1.25.3.8.1.5.24|2|1 +1.3.6.1.2.1.25.3.8.1.5.25|2|1 +1.3.6.1.2.1.25.3.8.1.5.26|2|1 +1.3.6.1.2.1.25.3.8.1.5.27|2|1 +1.3.6.1.2.1.25.3.8.1.5.28|2|1 +1.3.6.1.2.1.25.3.8.1.5.29|2|1 +1.3.6.1.2.1.25.3.8.1.6.1|2|1 +1.3.6.1.2.1.25.3.8.1.6.2|2|2 +1.3.6.1.2.1.25.3.8.1.6.7|2|2 +1.3.6.1.2.1.25.3.8.1.6.9|2|2 +1.3.6.1.2.1.25.3.8.1.6.10|2|2 +1.3.6.1.2.1.25.3.8.1.6.14|2|2 +1.3.6.1.2.1.25.3.8.1.6.20|2|2 +1.3.6.1.2.1.25.3.8.1.6.21|2|2 +1.3.6.1.2.1.25.3.8.1.6.22|2|2 +1.3.6.1.2.1.25.3.8.1.6.23|2|2 +1.3.6.1.2.1.25.3.8.1.6.24|2|2 +1.3.6.1.2.1.25.3.8.1.6.25|2|2 +1.3.6.1.2.1.25.3.8.1.6.26|2|2 +1.3.6.1.2.1.25.3.8.1.6.27|2|2 +1.3.6.1.2.1.25.3.8.1.6.28|2|2 +1.3.6.1.2.1.25.3.8.1.6.29|2|2 +1.3.6.1.2.1.25.3.8.1.7.1|2|31 +1.3.6.1.2.1.25.3.8.1.7.2|2|32 +1.3.6.1.2.1.25.3.8.1.7.7|2|37 +1.3.6.1.2.1.25.3.8.1.7.9|2|39 +1.3.6.1.2.1.25.3.8.1.7.10|2|40 +1.3.6.1.2.1.25.3.8.1.7.14|2|44 +1.3.6.1.2.1.25.3.8.1.7.20|2|50 +1.3.6.1.2.1.25.3.8.1.7.21|2|51 +1.3.6.1.2.1.25.3.8.1.7.22|2|52 +1.3.6.1.2.1.25.3.8.1.7.23|2|53 +1.3.6.1.2.1.25.3.8.1.7.24|2|54 +1.3.6.1.2.1.25.3.8.1.7.25|2|55 +1.3.6.1.2.1.25.3.8.1.7.26|2|56 +1.3.6.1.2.1.25.3.8.1.7.27|2|57 +1.3.6.1.2.1.25.3.8.1.7.28|2|58 +1.3.6.1.2.1.25.3.8.1.7.29|2|59 +1.3.6.1.2.1.25.3.8.1.8.1|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.2|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.7|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.9|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.10|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.14|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.20|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.21|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.22|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.23|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.24|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.25|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.26|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.27|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.28|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.29|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.1|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.2|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.7|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.9|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.10|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.14|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.20|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.21|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.22|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.23|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.24|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.25|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.26|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.27|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.28|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.29|4x|0000010100000000 +1.3.6.1.2.1.25.4.2.1.1.1|2|1 +1.3.6.1.2.1.25.4.2.1.1.415|2|415 +1.3.6.1.2.1.25.4.2.1.1.440|2|440 +1.3.6.1.2.1.25.4.2.1.1.447|2|447 +1.3.6.1.2.1.25.4.2.1.1.921|2|921 +1.3.6.1.2.1.25.4.2.1.1.951|2|951 +1.3.6.1.2.1.25.4.2.1.1.977|2|977 +1.3.6.1.2.1.25.4.2.1.1.979|2|979 +1.3.6.1.2.1.25.4.2.1.1.982|2|982 +1.3.6.1.2.1.25.4.2.1.1.984|2|984 +1.3.6.1.2.1.25.4.2.1.1.1038|2|1038 +1.3.6.1.2.1.25.4.2.1.1.1826|2|1826 +1.3.6.1.2.1.25.4.2.1.1.2851|2|2851 +1.3.6.1.2.1.25.4.2.1.1.2852|2|2852 +1.3.6.1.2.1.25.4.2.1.1.2919|2|2919 +1.3.6.1.2.1.25.4.2.1.1.3773|2|3773 +1.3.6.1.2.1.25.4.2.1.1.4068|2|4068 +1.3.6.1.2.1.25.4.2.1.1.4085|2|4085 +1.3.6.1.2.1.25.4.2.1.1.4119|2|4119 +1.3.6.1.2.1.25.4.2.1.1.4122|2|4122 +1.3.6.1.2.1.25.4.2.1.1.4212|2|4212 +1.3.6.1.2.1.25.4.2.1.1.4213|2|4213 +1.3.6.1.2.1.25.4.2.1.1.4214|2|4214 +1.3.6.1.2.1.25.4.2.1.1.4215|2|4215 +1.3.6.1.2.1.25.4.2.1.1.4216|2|4216 +1.3.6.1.2.1.25.4.2.1.1.4217|2|4217 +1.3.6.1.2.1.25.4.2.1.1.4218|2|4218 +1.3.6.1.2.1.25.4.2.1.1.4219|2|4219 +1.3.6.1.2.1.25.4.2.1.1.4220|2|4220 +1.3.6.1.2.1.25.4.2.1.1.4221|2|4221 +1.3.6.1.2.1.25.4.2.1.1.4222|2|4222 +1.3.6.1.2.1.25.4.2.1.1.4224|2|4224 +1.3.6.1.2.1.25.4.2.1.1.4226|2|4226 +1.3.6.1.2.1.25.4.2.1.1.4434|2|4434 +1.3.6.1.2.1.25.4.2.1.1.4435|2|4435 +1.3.6.1.2.1.25.4.2.1.1.4436|2|4436 +1.3.6.1.2.1.25.4.2.1.1.4437|2|4437 +1.3.6.1.2.1.25.4.2.1.1.4438|2|4438 +1.3.6.1.2.1.25.4.2.1.1.4439|2|4439 +1.3.6.1.2.1.25.4.2.1.1.4440|2|4440 +1.3.6.1.2.1.25.4.2.1.1.4441|2|4441 +1.3.6.1.2.1.25.4.2.1.1.4442|2|4442 +1.3.6.1.2.1.25.4.2.1.1.4443|2|4443 +1.3.6.1.2.1.25.4.2.1.1.4451|2|4451 +1.3.6.1.2.1.25.4.2.1.1.4773|2|4773 +1.3.6.1.2.1.25.4.2.1.1.4774|2|4774 +1.3.6.1.2.1.25.4.2.1.1.4775|2|4775 +1.3.6.1.2.1.25.4.2.1.1.4776|2|4776 +1.3.6.1.2.1.25.4.2.1.1.4777|2|4777 +1.3.6.1.2.1.25.4.2.1.1.4778|2|4778 +1.3.6.1.2.1.25.4.2.1.1.4779|2|4779 +1.3.6.1.2.1.25.4.2.1.1.4780|2|4780 +1.3.6.1.2.1.25.4.2.1.1.4781|2|4781 +1.3.6.1.2.1.25.4.2.1.1.4782|2|4782 +1.3.6.1.2.1.25.4.2.1.1.4784|2|4784 +1.3.6.1.2.1.25.4.2.1.1.4786|2|4786 +1.3.6.1.2.1.25.4.2.1.1.4787|2|4787 +1.3.6.1.2.1.25.4.2.1.1.5137|2|5137 +1.3.6.1.2.1.25.4.2.1.1.5138|2|5138 +1.3.6.1.2.1.25.4.2.1.1.5139|2|5139 +1.3.6.1.2.1.25.4.2.1.1.5140|2|5140 +1.3.6.1.2.1.25.4.2.1.1.5141|2|5141 +1.3.6.1.2.1.25.4.2.1.1.5142|2|5142 +1.3.6.1.2.1.25.4.2.1.1.5143|2|5143 +1.3.6.1.2.1.25.4.2.1.1.5144|2|5144 +1.3.6.1.2.1.25.4.2.1.1.5145|2|5145 +1.3.6.1.2.1.25.4.2.1.1.5146|2|5146 +1.3.6.1.2.1.25.4.2.1.1.5148|2|5148 +1.3.6.1.2.1.25.4.2.1.1.5151|2|5151 +1.3.6.1.2.1.25.4.2.1.1.5155|2|5155 +1.3.6.1.2.1.25.4.2.1.1.5159|2|5159 +1.3.6.1.2.1.25.4.2.1.1.5501|2|5501 +1.3.6.1.2.1.25.4.2.1.1.5502|2|5502 +1.3.6.1.2.1.25.4.2.1.1.5503|2|5503 +1.3.6.1.2.1.25.4.2.1.1.5504|2|5504 +1.3.6.1.2.1.25.4.2.1.1.5505|2|5505 +1.3.6.1.2.1.25.4.2.1.1.5506|2|5506 +1.3.6.1.2.1.25.4.2.1.1.5507|2|5507 +1.3.6.1.2.1.25.4.2.1.1.5508|2|5508 +1.3.6.1.2.1.25.4.2.1.1.5509|2|5509 +1.3.6.1.2.1.25.4.2.1.1.5510|2|5510 +1.3.6.1.2.1.25.4.2.1.1.5516|2|5516 +1.3.6.1.2.1.25.4.2.1.1.5522|2|5522 +1.3.6.1.2.1.25.4.2.1.1.5861|2|5861 +1.3.6.1.2.1.25.4.2.1.1.5862|2|5862 +1.3.6.1.2.1.25.4.2.1.1.5863|2|5863 +1.3.6.1.2.1.25.4.2.1.1.5864|2|5864 +1.3.6.1.2.1.25.4.2.1.1.5865|2|5865 +1.3.6.1.2.1.25.4.2.1.1.5866|2|5866 +1.3.6.1.2.1.25.4.2.1.1.5867|2|5867 +1.3.6.1.2.1.25.4.2.1.1.5868|2|5868 +1.3.6.1.2.1.25.4.2.1.1.5869|2|5869 +1.3.6.1.2.1.25.4.2.1.1.5870|2|5870 +1.3.6.1.2.1.25.4.2.1.1.5872|2|5872 +1.3.6.1.2.1.25.4.2.1.1.5875|2|5875 +1.3.6.1.2.1.25.4.2.1.1.5878|2|5878 +1.3.6.1.2.1.25.4.2.1.1.5879|2|5879 +1.3.6.1.2.1.25.4.2.1.1.5884|2|5884 +1.3.6.1.2.1.25.4.2.1.1.6344|2|6344 +1.3.6.1.2.1.25.4.2.1.1.6345|2|6345 +1.3.6.1.2.1.25.4.2.1.1.6346|2|6346 +1.3.6.1.2.1.25.4.2.1.1.6347|2|6347 +1.3.6.1.2.1.25.4.2.1.1.6348|2|6348 +1.3.6.1.2.1.25.4.2.1.1.6349|2|6349 +1.3.6.1.2.1.25.4.2.1.1.6350|2|6350 +1.3.6.1.2.1.25.4.2.1.1.6351|2|6351 +1.3.6.1.2.1.25.4.2.1.1.6352|2|6352 +1.3.6.1.2.1.25.4.2.1.1.6353|2|6353 +1.3.6.1.2.1.25.4.2.1.1.6358|2|6358 +1.3.6.1.2.1.25.4.2.1.1.6366|2|6366 +1.3.6.1.2.1.25.4.2.1.1.6763|2|6763 +1.3.6.1.2.1.25.4.2.1.1.6764|2|6764 +1.3.6.1.2.1.25.4.2.1.1.6765|2|6765 +1.3.6.1.2.1.25.4.2.1.1.6766|2|6766 +1.3.6.1.2.1.25.4.2.1.1.6767|2|6767 +1.3.6.1.2.1.25.4.2.1.1.6768|2|6768 +1.3.6.1.2.1.25.4.2.1.1.6769|2|6769 +1.3.6.1.2.1.25.4.2.1.1.6770|2|6770 +1.3.6.1.2.1.25.4.2.1.1.6771|2|6771 +1.3.6.1.2.1.25.4.2.1.1.6772|2|6772 +1.3.6.1.2.1.25.4.2.1.1.6782|2|6782 +1.3.6.1.2.1.25.4.2.1.1.6784|2|6784 +1.3.6.1.2.1.25.4.2.1.1.7174|2|7174 +1.3.6.1.2.1.25.4.2.1.1.7175|2|7175 +1.3.6.1.2.1.25.4.2.1.1.7176|2|7176 +1.3.6.1.2.1.25.4.2.1.1.7177|2|7177 +1.3.6.1.2.1.25.4.2.1.1.7178|2|7178 +1.3.6.1.2.1.25.4.2.1.1.7179|2|7179 +1.3.6.1.2.1.25.4.2.1.1.7180|2|7180 +1.3.6.1.2.1.25.4.2.1.1.7181|2|7181 +1.3.6.1.2.1.25.4.2.1.1.7182|2|7182 +1.3.6.1.2.1.25.4.2.1.1.7183|2|7183 +1.3.6.1.2.1.25.4.2.1.1.7188|2|7188 +1.3.6.1.2.1.25.4.2.1.1.7192|2|7192 +1.3.6.1.2.1.25.4.2.1.1.7194|2|7194 +1.3.6.1.2.1.25.4.2.1.1.7196|2|7196 +1.3.6.1.2.1.25.4.2.1.1.7523|2|7523 +1.3.6.1.2.1.25.4.2.1.1.7524|2|7524 +1.3.6.1.2.1.25.4.2.1.1.7525|2|7525 +1.3.6.1.2.1.25.4.2.1.1.7526|2|7526 +1.3.6.1.2.1.25.4.2.1.1.7527|2|7527 +1.3.6.1.2.1.25.4.2.1.1.7528|2|7528 +1.3.6.1.2.1.25.4.2.1.1.7529|2|7529 +1.3.6.1.2.1.25.4.2.1.1.7530|2|7530 +1.3.6.1.2.1.25.4.2.1.1.7531|2|7531 +1.3.6.1.2.1.25.4.2.1.1.7532|2|7532 +1.3.6.1.2.1.25.4.2.1.1.7535|2|7535 +1.3.6.1.2.1.25.4.2.1.1.7539|2|7539 +1.3.6.1.2.1.25.4.2.1.1.7543|2|7543 +1.3.6.1.2.1.25.4.2.1.1.7544|2|7544 +1.3.6.1.2.1.25.4.2.1.1.7949|2|7949 +1.3.6.1.2.1.25.4.2.1.1.7950|2|7950 +1.3.6.1.2.1.25.4.2.1.1.7951|2|7951 +1.3.6.1.2.1.25.4.2.1.1.7952|2|7952 +1.3.6.1.2.1.25.4.2.1.1.7953|2|7953 +1.3.6.1.2.1.25.4.2.1.1.7954|2|7954 +1.3.6.1.2.1.25.4.2.1.1.9526|2|9526 +1.3.6.1.2.1.25.4.2.1.1.9602|2|9602 +1.3.6.1.2.1.25.4.2.1.1.11784|2|11784 +1.3.6.1.2.1.25.4.2.1.1.13563|2|13563 +1.3.6.1.2.1.25.4.2.1.1.13565|2|13565 +1.3.6.1.2.1.25.4.2.1.1.13566|2|13566 +1.3.6.1.2.1.25.4.2.1.1.15387|2|15387 +1.3.6.1.2.1.25.4.2.1.1.15921|2|15921 +1.3.6.1.2.1.25.4.2.1.1.16645|2|16645 +1.3.6.1.2.1.25.4.2.1.1.16646|2|16646 +1.3.6.1.2.1.25.4.2.1.1.16648|2|16648 +1.3.6.1.2.1.25.4.2.1.1.16651|2|16651 +1.3.6.1.2.1.25.4.2.1.1.16652|2|16652 +1.3.6.1.2.1.25.4.2.1.1.16653|2|16653 +1.3.6.1.2.1.25.4.2.1.1.16654|2|16654 +1.3.6.1.2.1.25.4.2.1.1.17900|2|17900 +1.3.6.1.2.1.25.4.2.1.1.18651|2|18651 +1.3.6.1.2.1.25.4.2.1.1.23175|2|23175 +1.3.6.1.2.1.25.4.2.1.1.23330|2|23330 +1.3.6.1.2.1.25.4.2.1.1.24570|2|24570 +1.3.6.1.2.1.25.4.2.1.1.25514|2|25514 +1.3.6.1.2.1.25.4.2.1.1.25517|2|25517 +1.3.6.1.2.1.25.4.2.1.1.25518|2|25518 +1.3.6.1.2.1.25.4.2.1.1.25522|2|25522 +1.3.6.1.2.1.25.4.2.1.1.25524|2|25524 +1.3.6.1.2.1.25.4.2.1.1.25531|2|25531 +1.3.6.1.2.1.25.4.2.1.1.25946|2|25946 +1.3.6.1.2.1.25.4.2.1.1.27567|2|27567 +1.3.6.1.2.1.25.4.2.1.1.29431|2|29431 +1.3.6.1.2.1.25.4.2.1.1.29439|2|29439 +1.3.6.1.2.1.25.4.2.1.1.29440|2|29440 +1.3.6.1.2.1.25.4.2.1.1.30092|2|30092 +1.3.6.1.2.1.25.4.2.1.1.30120|2|30120 +1.3.6.1.2.1.25.4.2.1.1.31793|2|31793 +1.3.6.1.2.1.25.4.2.1.2.1|4|systemd +1.3.6.1.2.1.25.4.2.1.2.415|4x|73797374656d642d6a6f75726e616c +1.3.6.1.2.1.25.4.2.1.2.440|4|lvmetad +1.3.6.1.2.1.25.4.2.1.2.447|4x|73797374656d642d7564657664 +1.3.6.1.2.1.25.4.2.1.2.921|4x|6a6974746572656e74726f70792d72 +1.3.6.1.2.1.25.4.2.1.2.951|4|auditd +1.3.6.1.2.1.25.4.2.1.2.977|4x|646275732d6461656d6f6e +1.3.6.1.2.1.25.4.2.1.2.979|4|acpid +1.3.6.1.2.1.25.4.2.1.2.982|4|irqbalance +1.3.6.1.2.1.25.4.2.1.2.984|4x|73797374656d642d6c6f67696e64 +1.3.6.1.2.1.25.4.2.1.2.1038|4x|696e6372656173655f656e74726f70 +1.3.6.1.2.1.25.4.2.1.2.1826|4x|7379736c6f672d6e67 +1.3.6.1.2.1.25.4.2.1.2.2851|4|crond +1.3.6.1.2.1.25.4.2.1.2.2852|4|promptstatusd +1.3.6.1.2.1.25.4.2.1.2.2919|4|overdog +1.3.6.1.2.1.25.4.2.1.2.3773|4|sshd +1.3.6.1.2.1.25.4.2.1.2.4068|4|httpd +1.3.6.1.2.1.25.4.2.1.2.4085|4|runsvdir +1.3.6.1.2.1.25.4.2.1.2.4119|4|agetty +1.3.6.1.2.1.25.4.2.1.2.4122|4|agetty +1.3.6.1.2.1.25.4.2.1.2.4212|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4213|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4214|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4215|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4216|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4217|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4218|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4219|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4220|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4221|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4222|4|eventd +1.3.6.1.2.1.25.4.2.1.2.4224|4x|72756e736d315f6e616d6564 +1.3.6.1.2.1.25.4.2.1.2.4226|4|wccpd +1.3.6.1.2.1.25.4.2.1.2.4434|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4435|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4436|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4437|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4438|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4439|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4440|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4441|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4442|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4443|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4451|4|scriptd +1.3.6.1.2.1.25.4.2.1.2.4773|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4774|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4775|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4776|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4777|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4778|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4779|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4780|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4781|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4782|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4784|4|tmrouted +1.3.6.1.2.1.25.4.2.1.2.4786|4|tamd +1.3.6.1.2.1.25.4.2.1.2.4787|4|alertd +1.3.6.1.2.1.25.4.2.1.2.5137|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5138|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5139|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5140|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5141|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5142|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5143|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5144|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5145|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5146|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5148|4|evrouted +1.3.6.1.2.1.25.4.2.1.2.5151|4|big3d +1.3.6.1.2.1.25.4.2.1.2.5155|4|csyncd +1.3.6.1.2.1.25.4.2.1.2.5159|4|syscalld +1.3.6.1.2.1.25.4.2.1.2.5501|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5502|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5503|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5504|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5505|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5506|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5507|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5508|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5509|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5510|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5516|4|errdefsd +1.3.6.1.2.1.25.4.2.1.2.5522|4|logstatd +1.3.6.1.2.1.25.4.2.1.2.5861|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5862|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5863|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5864|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5865|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5866|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5867|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5868|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5869|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5870|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5872|4|chmand +1.3.6.1.2.1.25.4.2.1.2.5875|4x|6963725f6576656e7464 +1.3.6.1.2.1.25.4.2.1.2.5878|4|mcpd +1.3.6.1.2.1.25.4.2.1.2.5879|4|statsd +1.3.6.1.2.1.25.4.2.1.2.5884|4|zxfrd +1.3.6.1.2.1.25.4.2.1.2.6344|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6345|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6346|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6347|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6348|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6349|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6350|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6351|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6352|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6353|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6358|4|merged +1.3.6.1.2.1.25.4.2.1.2.6366|4|dynconfd +1.3.6.1.2.1.25.4.2.1.2.6763|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6764|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6765|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6766|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6767|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6768|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6769|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6770|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6771|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6772|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6782|4x|676f6f676c655f6163636f756e7473 +1.3.6.1.2.1.25.4.2.1.2.6784|4|keymgmtd +1.3.6.1.2.1.25.4.2.1.2.7174|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7175|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7176|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7177|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7178|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7179|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7180|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7181|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7182|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7183|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7188|4|java +1.3.6.1.2.1.25.4.2.1.2.7192|4|lacpd +1.3.6.1.2.1.25.4.2.1.2.7194|4|devmgmtd +1.3.6.1.2.1.25.4.2.1.2.7196|4|cbrd +1.3.6.1.2.1.25.4.2.1.2.7523|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7524|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7525|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7526|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7527|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7528|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7529|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7530|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7531|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7532|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7535|4|lind +1.3.6.1.2.1.25.4.2.1.2.7539|4|sod +1.3.6.1.2.1.25.4.2.1.2.7543|4x|73666c6f775f6167656e74 +1.3.6.1.2.1.25.4.2.1.2.7544|4x|66352d726573742d6e6f6465 +1.3.6.1.2.1.25.4.2.1.2.7949|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7950|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7951|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7952|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7953|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7954|4|runsv +1.3.6.1.2.1.25.4.2.1.2.9526|4|dhclient +1.3.6.1.2.1.25.4.2.1.2.9602|4|dhclient +1.3.6.1.2.1.25.4.2.1.2.11784|4|su +1.3.6.1.2.1.25.4.2.1.2.13563|4|httpd +1.3.6.1.2.1.25.4.2.1.2.13565|4|httpd +1.3.6.1.2.1.25.4.2.1.2.13566|4|httpd +1.3.6.1.2.1.25.4.2.1.2.15387|4|ntpd +1.3.6.1.2.1.25.4.2.1.2.15921|4|java +1.3.6.1.2.1.25.4.2.1.2.16645|4|logger +1.3.6.1.2.1.25.4.2.1.2.16646|4|logger +1.3.6.1.2.1.25.4.2.1.2.16648|4|httpd +1.3.6.1.2.1.25.4.2.1.2.16651|4|mcpq +1.3.6.1.2.1.25.4.2.1.2.16652|4|rrdstats +1.3.6.1.2.1.25.4.2.1.2.16653|4|rtstats +1.3.6.1.2.1.25.4.2.1.2.16654|4x|69436f6e74726f6c506f7274616c2e +1.3.6.1.2.1.25.4.2.1.2.17900|4|named +1.3.6.1.2.1.25.4.2.1.2.18651|4x|696372645f6368696c64 +1.3.6.1.2.1.25.4.2.1.2.23175|4|rrdshim +1.3.6.1.2.1.25.4.2.1.2.23330|4|snmpd +1.3.6.1.2.1.25.4.2.1.2.24570|4|agetty +1.3.6.1.2.1.25.4.2.1.2.25514|4|pccd +1.3.6.1.2.1.25.4.2.1.2.25517|4|tmipsecd +1.3.6.1.2.1.25.4.2.1.2.25518|4x|746d6d2e7374617274 +1.3.6.1.2.1.25.4.2.1.2.25522|4x|6d676d745f61636c64 +1.3.6.1.2.1.25.4.2.1.2.25524|4|vxland +1.3.6.1.2.1.25.4.2.1.2.25531|4|iprepd +1.3.6.1.2.1.25.4.2.1.2.25946|4|bigd +1.3.6.1.2.1.25.4.2.1.2.27567|4|ntlmconnpool +1.3.6.1.2.1.25.4.2.1.2.29431|4|httpd +1.3.6.1.2.1.25.4.2.1.2.29439|4|httpd +1.3.6.1.2.1.25.4.2.1.2.29440|4|httpd +1.3.6.1.2.1.25.4.2.1.2.30092|4x|746d6d2e30 +1.3.6.1.2.1.25.4.2.1.2.30120|4|racoon +1.3.6.1.2.1.25.4.2.1.2.31793|4x|61756469745f666f72776172646572 +1.3.6.1.2.1.25.4.2.1.3.1|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.415|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.440|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.447|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.921|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.951|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.977|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.979|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.982|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.984|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.1038|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.1826|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.2851|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.2852|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.2919|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.3773|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4068|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4085|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4119|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4122|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4212|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4213|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4214|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4215|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4216|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4217|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4218|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4219|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4220|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4221|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4222|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4224|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4226|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4434|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4435|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4436|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4437|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4438|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4439|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4440|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4441|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4442|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4443|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4451|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4773|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4774|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4775|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4776|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4777|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4778|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4779|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4780|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4781|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4782|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4784|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4786|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4787|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5137|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5138|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5139|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5140|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5141|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5142|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5143|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5144|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5145|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5146|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5148|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5151|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5155|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5159|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5501|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5502|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5503|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5504|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5505|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5506|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5507|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5508|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5509|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5510|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5516|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5522|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5861|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5862|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5863|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5864|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5865|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5866|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5867|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5868|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5869|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5870|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5872|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5875|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5878|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5879|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5884|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6344|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6345|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6346|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6347|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6348|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6349|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6350|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6351|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6352|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6353|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6358|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6366|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6763|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6764|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6765|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6766|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6767|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6768|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6769|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6770|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6771|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6772|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6782|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6784|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7174|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7175|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7176|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7177|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7178|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7179|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7180|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7181|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7182|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7183|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7188|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7192|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7194|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7196|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7523|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7524|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7525|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7526|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7527|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7528|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7529|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7530|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7531|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7532|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7535|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7539|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7543|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7544|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7949|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7950|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7951|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7952|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7953|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7954|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.9526|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.9602|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.11784|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.13563|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.13565|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.13566|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.15387|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.15921|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16645|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16646|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16648|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16651|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16652|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16653|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16654|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.17900|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.18651|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.23175|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.23330|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.24570|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25514|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25517|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25518|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25522|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25524|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25531|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25946|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.27567|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.29431|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.29439|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.29440|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.30092|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.30120|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.31793|6|0.0 +1.3.6.1.2.1.25.4.2.1.4.1|4x|2f7573722f6c69622f73797374656d642f73797374656d64 +1.3.6.1.2.1.25.4.2.1.4.415|4x|2f7573722f6c69622f73797374656d642f73797374656d642d6a6f75726e616c64 +1.3.6.1.2.1.25.4.2.1.4.440|4x|2f7573722f7362696e2f6c766d65746164 +1.3.6.1.2.1.25.4.2.1.4.447|4x|2f7573722f6c69622f73797374656d642f73797374656d642d7564657664 +1.3.6.1.2.1.25.4.2.1.4.921|4x|2f7573722f7362696e2f6a6974746572656e74726f70792d726e6764 +1.3.6.1.2.1.25.4.2.1.4.951|4x|2f7362696e2f617564697464 +1.3.6.1.2.1.25.4.2.1.4.977|4x|2f62696e2f646275732d6461656d6f6e +1.3.6.1.2.1.25.4.2.1.4.979|4x|2f7573722f7362696e2f6163706964 +1.3.6.1.2.1.25.4.2.1.4.982|4x|2f7573722f7362696e2f69727162616c616e6365 +1.3.6.1.2.1.25.4.2.1.4.984|4x|2f7573722f6c69622f73797374656d642f73797374656d642d6c6f67696e64 +1.3.6.1.2.1.25.4.2.1.4.1038|4x|696e6372656173655f656e74726f7079 +1.3.6.1.2.1.25.4.2.1.4.1826|4x|2f7573722f7362696e2f7379736c6f672d6e67 +1.3.6.1.2.1.25.4.2.1.4.2851|4x|2f7573722f7362696e2f63726f6e64 +1.3.6.1.2.1.25.4.2.1.4.2852|4x|2f62696e2f70726f6d707473746174757364 +1.3.6.1.2.1.25.4.2.1.4.2919|4x|2f7573722f62696e2f6f766572646f67 +1.3.6.1.2.1.25.4.2.1.4.3773|4x|2f7573722f7362696e2f73736864 +1.3.6.1.2.1.25.4.2.1.4.4068|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.4085|4|runsvdir +1.3.6.1.2.1.25.4.2.1.4.4119|4x|2f7362696e2f616765747479 +1.3.6.1.2.1.25.4.2.1.4.4122|4x|2f7362696e2f616765747479 +1.3.6.1.2.1.25.4.2.1.4.4212|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4213|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4214|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4215|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4216|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4217|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4218|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4219|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4220|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4221|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4222|4x|2f7573722f62696e2f6576656e7464 +1.3.6.1.2.1.25.4.2.1.4.4224|4x|2f7362696e2f72756e736d315f6e616d6564 +1.3.6.1.2.1.25.4.2.1.4.4226|4x|2f7573722f62696e2f7763637064 +1.3.6.1.2.1.25.4.2.1.4.4434|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4435|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4436|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4437|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4438|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4439|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4440|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4441|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4442|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4443|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4451|4x|2f7573722f62696e2f73637269707464 +1.3.6.1.2.1.25.4.2.1.4.4773|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4774|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4775|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4776|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4777|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4778|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4779|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4780|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4781|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4782|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4784|4x|2f7573722f62696e2f746d726f75746564 +1.3.6.1.2.1.25.4.2.1.4.4786|4x|2f7573722f62696e2f74616d64 +1.3.6.1.2.1.25.4.2.1.4.4787|4x|2f7573722f7362696e2f616c65727464 +1.3.6.1.2.1.25.4.2.1.4.5137|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5138|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5139|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5140|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5141|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5142|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5143|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5144|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5145|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5146|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5148|4x|2f7573722f62696e2f6576726f75746564 +1.3.6.1.2.1.25.4.2.1.4.5151|4x|2f7368617265642f62696e2f6269673364 +1.3.6.1.2.1.25.4.2.1.4.5155|4x|2f7573722f62696e2f6373796e6364 +1.3.6.1.2.1.25.4.2.1.4.5159|4x|2f7573722f62696e2f73797363616c6c64 +1.3.6.1.2.1.25.4.2.1.4.5501|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5502|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5503|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5504|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5505|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5506|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5507|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5508|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5509|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5510|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5516|4x|2f7573722f62696e2f6572726465667364 +1.3.6.1.2.1.25.4.2.1.4.5522|4x|2f7573722f7362696e2f6c6f677374617464 +1.3.6.1.2.1.25.4.2.1.4.5861|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5862|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5863|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5864|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5865|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5866|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5867|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5868|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5869|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5870|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5872|4x|2f7573722f62696e2f63686d616e64 +1.3.6.1.2.1.25.4.2.1.4.5875|4x|2f7573722f62696e2f6963725f6576656e7464 +1.3.6.1.2.1.25.4.2.1.4.5878|4x|2f7573722f62696e2f6d637064 +1.3.6.1.2.1.25.4.2.1.4.5879|4x|2f7573722f62696e2f737461747364 +1.3.6.1.2.1.25.4.2.1.4.5884|4x|2f7573722f62696e2f7a78667264 +1.3.6.1.2.1.25.4.2.1.4.6344|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6345|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6346|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6347|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6348|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6349|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6350|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6351|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6352|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6353|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6358|4x|2f7573722f62696e2f6d6572676564 +1.3.6.1.2.1.25.4.2.1.4.6366|4x|2f7573722f62696e2f64796e636f6e6664 +1.3.6.1.2.1.25.4.2.1.4.6763|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6764|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6765|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6766|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6767|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6768|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6769|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6770|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6771|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6772|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6782|4x|2f7573722f62696e2f707974686f6e +1.3.6.1.2.1.25.4.2.1.4.6784|4x|2f7573722f62696e2f6b65796d676d7464 +1.3.6.1.2.1.25.4.2.1.4.7174|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7175|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7176|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7177|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7178|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7179|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7180|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7181|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7182|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7183|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7188|4x|2f7573722f6c69622f6a766d2f6a72652f62696e2f6a617661 +1.3.6.1.2.1.25.4.2.1.4.7192|4x|2f7573722f62696e2f6c61637064 +1.3.6.1.2.1.25.4.2.1.4.7194|4x|2f7573722f62696e2f6465766d676d7464 +1.3.6.1.2.1.25.4.2.1.4.7196|4x|2f7573722f73686172652f6362722f62696e2f63627264 +1.3.6.1.2.1.25.4.2.1.4.7523|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7524|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7525|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7526|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7527|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7528|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7529|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7530|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7531|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7532|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7535|4x|2f7573722f62696e2f6c696e64 +1.3.6.1.2.1.25.4.2.1.4.7539|4x|2f7573722f62696e2f736f64 +1.3.6.1.2.1.25.4.2.1.4.7543|4x|2f7573722f7362696e2f73666c6f775f6167656e74 +1.3.6.1.2.1.25.4.2.1.4.7544|4x|2f7573722f62696e2f66352d726573742d6e6f6465 +1.3.6.1.2.1.25.4.2.1.4.7949|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7950|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7951|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7952|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7953|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7954|4|runsv +1.3.6.1.2.1.25.4.2.1.4.9526|4x|2f7362696e2f6468636c69656e74 +1.3.6.1.2.1.25.4.2.1.4.9602|4x|2f7362696e2f6468636c69656e74 +1.3.6.1.2.1.25.4.2.1.4.11784|4|su +1.3.6.1.2.1.25.4.2.1.4.13563|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.13565|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.13566|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.15387|4|ntpd +1.3.6.1.2.1.25.4.2.1.4.15921|4x|2f7573722f6c69622f6a766d2f6a72652f62696e2f6a617661 +1.3.6.1.2.1.25.4.2.1.4.16645|4x|2f7573722f62696e2f6c6f67676572 +1.3.6.1.2.1.25.4.2.1.4.16646|4x|2f7573722f62696e2f6c6f67676572 +1.3.6.1.2.1.25.4.2.1.4.16648|4x|2f7573722f7362696e2f666367692d +1.3.6.1.2.1.25.4.2.1.4.16651|4x|2f7573722f6c6f63616c2f7777772f6d6370712f6d637071 +1.3.6.1.2.1.25.4.2.1.4.16652|4x|2f7573722f6c6f63616c2f7777772f72726473746174732f7272647374617473 +1.3.6.1.2.1.25.4.2.1.4.16653|4x|2f7573722f6c6f63616c2f7777772f727473746174732f72747374617473 +1.3.6.1.2.1.25.4.2.1.4.16654|4x|2f7573722f6c6f63616c2f7777772f69436f6e74726f6c2f69436f6e74726f6c506f7274616c2e636769 +1.3.6.1.2.1.25.4.2.1.4.17900|4x|2f7573722f7362696e2f6e616d6564 +1.3.6.1.2.1.25.4.2.1.4.18651|4x|696372645f6368696c64 +1.3.6.1.2.1.25.4.2.1.4.23175|4x|2f7573722f7362696e2f7272647368696d +1.3.6.1.2.1.25.4.2.1.4.23330|4x|2f7573722f7362696e2f736e6d7064 +1.3.6.1.2.1.25.4.2.1.4.24570|4x|2f7362696e2f616765747479 +1.3.6.1.2.1.25.4.2.1.4.25514|4x|2f7573722f62696e2f70636364 +1.3.6.1.2.1.25.4.2.1.4.25517|4x|2f7573722f62696e2f746d697073656364 +1.3.6.1.2.1.25.4.2.1.4.25518|4x|2f6574632f62696773746172742f736372697074732f746d6d2e7374617274 +1.3.6.1.2.1.25.4.2.1.4.25522|4x|2f7573722f62696e2f6d676d745f61636c64 +1.3.6.1.2.1.25.4.2.1.4.25524|4x|2f7573722f62696e2f76786c616e64 +1.3.6.1.2.1.25.4.2.1.4.25531|4x|2f7573722f73686172652f6970726570642f62696e2f697072657064 +1.3.6.1.2.1.25.4.2.1.4.25946|4|bigd +1.3.6.1.2.1.25.4.2.1.4.27567|4x|2f7573722f7362696e2f6e746c6d636f6e6e706f6f6c +1.3.6.1.2.1.25.4.2.1.4.29431|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.29439|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.29440|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.30092|4x|746d6d2e30 +1.3.6.1.2.1.25.4.2.1.4.30120|4x|2f7573722f7362696e2f7261636f6f6e +1.3.6.1.2.1.25.4.2.1.4.31793|4x|2f7573722f62696e2f61756469745f666f72776172646572 +1.3.6.1.2.1.25.4.2.1.5.1|4x|2d2d73776974636865642d726f6f74202d2d73797374656d202d2d646573657269616c697a65203230 +1.3.6.1.2.1.25.4.2.1.5.415|4| +1.3.6.1.2.1.25.4.2.1.5.440|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.447|4| +1.3.6.1.2.1.25.4.2.1.5.921|4| +1.3.6.1.2.1.25.4.2.1.5.951|4x|2d6e +1.3.6.1.2.1.25.4.2.1.5.977|4x|2d2d73797374656d202d2d616464726573733d73797374656d643a202d2d6e6f666f726b202d2d6e6f70696466696c65202d2d73797374656d642d61637469766174696f6e +1.3.6.1.2.1.25.4.2.1.5.979|4| +1.3.6.1.2.1.25.4.2.1.5.982|4x|2d2d666f726567726f756e64 +1.3.6.1.2.1.25.4.2.1.5.984|4| +1.3.6.1.2.1.25.4.2.1.5.1038|4x|2d64202d652034303030202d72202d712038 +1.3.6.1.2.1.25.4.2.1.5.1826|4x|2d46202d70202f7661722f72756e2f7379736c6f67642e706964 +1.3.6.1.2.1.25.4.2.1.5.2851|4x|2d6e +1.3.6.1.2.1.25.4.2.1.5.2852|4| +1.3.6.1.2.1.25.4.2.1.5.2919|4| +1.3.6.1.2.1.25.4.2.1.5.3773|4x|2d44 +1.3.6.1.2.1.25.4.2.1.5.4068|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.4085|4x|2f7661722f73657276696365206c6f673a202e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e +1.3.6.1.2.1.25.4.2.1.5.4119|4x|2d2d6e6f636c6561722074747931206c696e7578 +1.3.6.1.2.1.25.4.2.1.5.4122|4x|2d2d6b6565702d62617564203131353230302c33383430302c39363030207474795330207674323230 +1.3.6.1.2.1.25.4.2.1.5.4212|4|datastor +1.3.6.1.2.1.25.4.2.1.5.4213|4|eventd +1.3.6.1.2.1.25.4.2.1.5.4214|4|named +1.3.6.1.2.1.25.4.2.1.5.4215|4|sdmd +1.3.6.1.2.1.25.4.2.1.5.4216|4x|6f767364622d736572766572 +1.3.6.1.2.1.25.4.2.1.5.4217|4|wocd +1.3.6.1.2.1.25.4.2.1.5.4218|4|nlad +1.3.6.1.2.1.25.4.2.1.5.4219|4|wccpd +1.3.6.1.2.1.25.4.2.1.5.4220|4|dnscached +1.3.6.1.2.1.25.4.2.1.5.4221|4|rba +1.3.6.1.2.1.25.4.2.1.5.4222|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.4224|4x|2f7573722f7362696e2f6e616d6564202d66202d74202f7661722f6e616d6564202d75206e616d6564202d63202f636f6e6669672f6e616d65642e636f6e66202d6e2031 +1.3.6.1.2.1.25.4.2.1.5.4226|4| +1.3.6.1.2.1.25.4.2.1.5.4434|4|tmipsecd +1.3.6.1.2.1.25.4.2.1.5.4435|4|ntlmconnpool +1.3.6.1.2.1.25.4.2.1.5.4436|4|pgadmind +1.3.6.1.2.1.25.4.2.1.5.4437|4|antserver +1.3.6.1.2.1.25.4.2.1.5.4438|4x|64656475705f61646d696e +1.3.6.1.2.1.25.4.2.1.5.4439|4x|61706d5f77656273736f +1.3.6.1.2.1.25.4.2.1.5.4440|4|samlidpd +1.3.6.1.2.1.25.4.2.1.5.4441|4|eca +1.3.6.1.2.1.25.4.2.1.5.4442|4|autodosd +1.3.6.1.2.1.25.4.2.1.5.4443|4|scriptd +1.3.6.1.2.1.25.4.2.1.5.4451|4| +1.3.6.1.2.1.25.4.2.1.5.4773|4|tmrouted +1.3.6.1.2.1.25.4.2.1.5.4774|4|vdi +1.3.6.1.2.1.25.4.2.1.5.4775|4|alertd +1.3.6.1.2.1.25.4.2.1.5.4776|4|fpuserd +1.3.6.1.2.1.25.4.2.1.5.4777|4|bdosd +1.3.6.1.2.1.25.4.2.1.5.4778|4|pccd +1.3.6.1.2.1.25.4.2.1.5.4779|4|asm +1.3.6.1.2.1.25.4.2.1.5.4780|4|eam +1.3.6.1.2.1.25.4.2.1.5.4781|4|tamd +1.3.6.1.2.1.25.4.2.1.5.4782|4|rtconfd +1.3.6.1.2.1.25.4.2.1.5.4784|4x|2d642030202d6f202f7661722f746d702f746d726f757465642e6f7574 +1.3.6.1.2.1.25.4.2.1.5.4786|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.4787|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.5137|4|evrouted +1.3.6.1.2.1.25.4.2.1.5.5138|4|syscalld +1.3.6.1.2.1.25.4.2.1.5.5139|4|csyncd +1.3.6.1.2.1.25.4.2.1.5.5140|4|natstatsd +1.3.6.1.2.1.25.4.2.1.5.5141|4x|6d676d745f61636c64 +1.3.6.1.2.1.25.4.2.1.5.5142|4x|616466735f70726f7879 +1.3.6.1.2.1.25.4.2.1.5.5143|4|rewrite +1.3.6.1.2.1.25.4.2.1.5.5144|4|big3d +1.3.6.1.2.1.25.4.2.1.5.5145|4|omapd +1.3.6.1.2.1.25.4.2.1.5.5146|4|updated +1.3.6.1.2.1.25.4.2.1.5.5148|4| +1.3.6.1.2.1.25.4.2.1.5.5151|4x|2d746c7320544c537631202d636970686572732041455347434d3a4145533a214144483a2141454344483a2150534b3a2161454344483a214453533a2145434453413a214145533132383a2d534841313a4145533235362d534841202d72656e6567203836343030 +1.3.6.1.2.1.25.4.2.1.5.5155|4| +1.3.6.1.2.1.25.4.2.1.5.5159|4| +1.3.6.1.2.1.25.4.2.1.5.5501|4|botd +1.3.6.1.2.1.25.4.2.1.5.5502|4|clusterd +1.3.6.1.2.1.25.4.2.1.5.5503|4|bigd +1.3.6.1.2.1.25.4.2.1.5.5504|4|urldb +1.3.6.1.2.1.25.4.2.1.5.5505|4|logstatd +1.3.6.1.2.1.25.4.2.1.5.5506|4|errdefsd +1.3.6.1.2.1.25.4.2.1.5.5507|4|mysql +1.3.6.1.2.1.25.4.2.1.5.5508|4|logmysqld +1.3.6.1.2.1.25.4.2.1.5.5509|4|flowspecd +1.3.6.1.2.1.25.4.2.1.5.5510|4|ecmd +1.3.6.1.2.1.25.4.2.1.5.5516|4| +1.3.6.1.2.1.25.4.2.1.5.5522|4| +1.3.6.1.2.1.25.4.2.1.5.5861|4x|6963725f6576656e7464 +1.3.6.1.2.1.25.4.2.1.5.5862|4|debugd +1.3.6.1.2.1.25.4.2.1.5.5863|4|statsd +1.3.6.1.2.1.25.4.2.1.5.5864|4|mcpd +1.3.6.1.2.1.25.4.2.1.5.5865|4|zxfrd +1.3.6.1.2.1.25.4.2.1.5.5866|4x|646f736c37645f61747461636b5f6d6f6e69746f72 +1.3.6.1.2.1.25.4.2.1.5.5867|4|chmand +1.3.6.1.2.1.25.4.2.1.5.5868|4|autodiscd +1.3.6.1.2.1.25.4.2.1.5.5869|4|mdmsyncmgr +1.3.6.1.2.1.25.4.2.1.5.5870|4|apmd +1.3.6.1.2.1.25.4.2.1.5.5872|4x|2d66202d2d76617269616e7420316e6963 +1.3.6.1.2.1.25.4.2.1.5.5875|4| +1.3.6.1.2.1.25.4.2.1.5.5878|4x|2d64626d656d20353132202d6c697374656e203132372e302e302e31202d666f7263656c6f6164202d66 +1.3.6.1.2.1.25.4.2.1.5.5879|4x|2d532030202d66 +1.3.6.1.2.1.25.4.2.1.5.5884|4| +1.3.6.1.2.1.25.4.2.1.5.6344|4|gtmd +1.3.6.1.2.1.25.4.2.1.5.6345|4|dynconfd +1.3.6.1.2.1.25.4.2.1.5.6346|4|sshplugin +1.3.6.1.2.1.25.4.2.1.5.6347|4|tmm +1.3.6.1.2.1.25.4.2.1.5.6348|4|avrd +1.3.6.1.2.1.25.4.2.1.5.6349|4x|70696e675f6163636573735f6167656e74 +1.3.6.1.2.1.25.4.2.1.5.6350|4|dwbld +1.3.6.1.2.1.25.4.2.1.5.6351|4|merged +1.3.6.1.2.1.25.4.2.1.5.6352|4|wamd +1.3.6.1.2.1.25.4.2.1.5.6353|4|tomcat +1.3.6.1.2.1.25.4.2.1.5.6358|4x|2d532030202d66 +1.3.6.1.2.1.25.4.2.1.5.6366|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.6763|4|vxland +1.3.6.1.2.1.25.4.2.1.5.6764|4|hwpd +1.3.6.1.2.1.25.4.2.1.5.6765|4|tasd +1.3.6.1.2.1.25.4.2.1.5.6766|4|pkcs11d +1.3.6.1.2.1.25.4.2.1.5.6767|4|admd +1.3.6.1.2.1.25.4.2.1.5.6768|4|iprepd +1.3.6.1.2.1.25.4.2.1.5.6769|4x|676f6f676c655f6163636f756e74735f6461656d6f6e +1.3.6.1.2.1.25.4.2.1.5.6770|4|snmpd +1.3.6.1.2.1.25.4.2.1.5.6771|4|keymgmtd +1.3.6.1.2.1.25.4.2.1.5.6772|4|oauth +1.3.6.1.2.1.25.4.2.1.5.6782|4x|2f7573722f62696e2f676f6f676c655f6163636f756e74735f6461656d6f6e +1.3.6.1.2.1.25.4.2.1.5.6784|4| +1.3.6.1.2.1.25.4.2.1.5.7174|4|captured +1.3.6.1.2.1.25.4.2.1.5.7175|4|cbrd +1.3.6.1.2.1.25.4.2.1.5.7176|4|zrd +1.3.6.1.2.1.25.4.2.1.5.7177|4|lacpd +1.3.6.1.2.1.25.4.2.1.5.7178|4|monpd +1.3.6.1.2.1.25.4.2.1.5.7179|4|restjavad +1.3.6.1.2.1.25.4.2.1.5.7180|4|shmmapd +1.3.6.1.2.1.25.4.2.1.5.7181|4|websso +1.3.6.1.2.1.25.4.2.1.5.7182|4|devmgmtd +1.3.6.1.2.1.25.4.2.1.5.7183|4x|68747470645f61706d +1.3.6.1.2.1.25.4.2.1.5.7188|4x|2d446a6176612e7574696c2e6c6f6767696e672e6d616e616765723d636f6d2e66352e726573742e636f6d6d6f6e2e526573744c6f674d616e61676572202d446a6176612e7574696c2e6c6f6767696e672e636f6e6669672e66696c653d2f6574632f726573746a617661642e6c6f672e636f6e66202d446c6f67346a2e6465 +1.3.6.1.2.1.25.4.2.1.5.7192|4| +1.3.6.1.2.1.25.4.2.1.5.7194|4x|2d6c206e6f74696365 +1.3.6.1.2.1.25.4.2.1.5.7196|4x|2d2d746872656164733d32202d2d686f73742d6d656d6f72793d343032363533313834202d2d756d755f7468726573686f6c643d3930202d2d70656e64696e675f7472616e733d35303030202d2d726571756573745f73697a653d3130323430202d2d6269675f726571756573745f73697a652031303438353736202d2d6d61 +1.3.6.1.2.1.25.4.2.1.5.7523|4|sod +1.3.6.1.2.1.25.4.2.1.5.7524|4|wocplugin +1.3.6.1.2.1.25.4.2.1.5.7525|4x|73666c6f775f6167656e74 +1.3.6.1.2.1.25.4.2.1.5.7526|4|urldbmgrd +1.3.6.1.2.1.25.4.2.1.5.7527|4x|66355f7570646174655f636865636b6572 +1.3.6.1.2.1.25.4.2.1.5.7528|4|nsyncd +1.3.6.1.2.1.25.4.2.1.5.7529|4|lind +1.3.6.1.2.1.25.4.2.1.5.7530|4|aced +1.3.6.1.2.1.25.4.2.1.5.7531|4|restnoded +1.3.6.1.2.1.25.4.2.1.5.7532|4|datasyncd +1.3.6.1.2.1.25.4.2.1.5.7535|4| +1.3.6.1.2.1.25.4.2.1.5.7539|4| +1.3.6.1.2.1.25.4.2.1.5.7543|4x|2d66202d4c462035202f7661722f6c6f672f73666c6f775f6167656e742e6c6f67 +1.3.6.1.2.1.25.4.2.1.5.7544|4x|2f7573722f73686172652f726573742f6e6f64652f7372632f726573746e6f64652e6a73202d702038313035202d2d6c6f674c6576656c2066696e657374202d69202f7661722f6c6f672f726573746e6f6465642f726573746e6f6465642e6c6f67202d73206e6f6e65 +1.3.6.1.2.1.25.4.2.1.5.7949|4|fslogd +1.3.6.1.2.1.25.4.2.1.5.7950|4|ipsd +1.3.6.1.2.1.25.4.2.1.5.7951|4|nokiasnmpd +1.3.6.1.2.1.25.4.2.1.5.7952|4|dosl7d +1.3.6.1.2.1.25.4.2.1.5.7953|4|localdbmgr +1.3.6.1.2.1.25.4.2.1.5.7954|4x|77725f75726c646264 +1.3.6.1.2.1.25.4.2.1.5.9526|4x|2d6e77206d676d74202d6366202f6574632f6468636c69656e742e636f6e66202d6c66202f7661722f6c69622f6468636c69656e742f6468636c69656e742e6c6561736573202d7066202f7661722f72756e2f6468636c69656e742e706964 +1.3.6.1.2.1.25.4.2.1.5.9602|4x|2d36202d6e77206d676d74202d6366202f6574632f6468636c69656e742e636f6e66202d6c66202f7661722f6c69622f6468636c69656e742f6468636c69656e74362d6d676d742e6c6561736573202d7066202f7661722f72756e2f6468636c69656e74362d6d676d742e706964 +1.3.6.1.2.1.25.4.2.1.5.11784|4x|746f6d636174202d73202f62696e2f62617368202d63206578706f7274204a4156415f4f5054533d272d4468747470732e70726f746f636f6c733d544c5376312e312c544c5376312e32202d44707974686f6e2e63616368656469723d2f7661722f746d70202d446a6176612e6c6962726172792e706174683d2f7573722f6c +1.3.6.1.2.1.25.4.2.1.5.13563|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.13565|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.13566|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.15387|4x|2d67 +1.3.6.1.2.1.25.4.2.1.5.15921|4x|2d4468747470732e70726f746f636f6c733d544c5376312e312c544c5376312e32202d44707974686f6e2e63616368656469723d2f7661722f746d70202d446a6176612e6c6962726172792e706174683d2f7573722f6c6962202d4466696c652e656e636f64696e673d5554462d38202d636c69656e74202d586d783133306d +1.3.6.1.2.1.25.4.2.1.5.16645|4x|2d70206c6f63616c362e696e666f +1.3.6.1.2.1.25.4.2.1.5.16646|4x|2d70206c6f63616c362e696e666f +1.3.6.1.2.1.25.4.2.1.5.16648|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.16651|4| +1.3.6.1.2.1.25.4.2.1.5.16652|4| +1.3.6.1.2.1.25.4.2.1.5.16653|4| +1.3.6.1.2.1.25.4.2.1.5.16654|4| +1.3.6.1.2.1.25.4.2.1.5.17900|4x|2d66202d74202f7661722f6e616d6564202d75206e616d6564202d63202f636f6e6669672f6e616d65642e636f6e66202d6e2031 +1.3.6.1.2.1.25.4.2.1.5.18651|4x|2d702038313030202d6c2032202d692034343038353361662d376362352d346530302d393631632d373133303033336265613235 +1.3.6.1.2.1.25.4.2.1.5.23175|4| +1.3.6.1.2.1.25.4.2.1.5.23330|4x|2d66202d63202f636f6e6669672f736e6d702f736e6d70642e636f6e66202d4c7364202d4c462036202f7661722f6c6f672f736e6d70642e6c6f67202d70202f7661722f72756e2f736e6d70642e706964 +1.3.6.1.2.1.25.4.2.1.5.24570|4x|2d2d6e6f636c6561722074747930207474795330207674323230 +1.3.6.1.2.1.25.4.2.1.5.25514|4| +1.3.6.1.2.1.25.4.2.1.5.25517|4x|2d2d746d6d636f756e742032 +1.3.6.1.2.1.25.4.2.1.5.25518|4x|2f7661722f72756e203220322030202d2d706c6174666f726d205a313030202d6d202d732035393434 +1.3.6.1.2.1.25.4.2.1.5.25522|4| +1.3.6.1.2.1.25.4.2.1.5.25524|4| +1.3.6.1.2.1.25.4.2.1.5.25531|4| +1.3.6.1.2.1.25.4.2.1.5.25946|4x|2d53 +1.3.6.1.2.1.25.4.2.1.5.27567|4x|2d63206d656d3a2f2f6e746c6d +1.3.6.1.2.1.25.4.2.1.5.29431|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.29439|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.29440|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.30092|4x|2d542032202d2d746d69642030202d2d6e7075732032202d2d706c6174666f726d205a313030202d6d202d732035393434 +1.3.6.1.2.1.25.4.2.1.5.30120|4x|2d6c202f7661722f6c6f672f7261636f6f6e2e6c6f67202d66202f6574632f7261636f6f6e2f7261636f6f6e2e636f6e66 +1.3.6.1.2.1.25.4.2.1.5.31793|4| +1.3.6.1.2.1.25.4.2.1.6.1|2|4 +1.3.6.1.2.1.25.4.2.1.6.415|2|4 +1.3.6.1.2.1.25.4.2.1.6.440|2|4 +1.3.6.1.2.1.25.4.2.1.6.447|2|4 +1.3.6.1.2.1.25.4.2.1.6.921|2|4 +1.3.6.1.2.1.25.4.2.1.6.951|2|4 +1.3.6.1.2.1.25.4.2.1.6.977|2|4 +1.3.6.1.2.1.25.4.2.1.6.979|2|4 +1.3.6.1.2.1.25.4.2.1.6.982|2|4 +1.3.6.1.2.1.25.4.2.1.6.984|2|4 +1.3.6.1.2.1.25.4.2.1.6.1038|2|4 +1.3.6.1.2.1.25.4.2.1.6.1826|2|4 +1.3.6.1.2.1.25.4.2.1.6.2851|2|4 +1.3.6.1.2.1.25.4.2.1.6.2852|2|4 +1.3.6.1.2.1.25.4.2.1.6.2919|2|4 +1.3.6.1.2.1.25.4.2.1.6.3773|2|4 +1.3.6.1.2.1.25.4.2.1.6.4068|2|4 +1.3.6.1.2.1.25.4.2.1.6.4085|2|4 +1.3.6.1.2.1.25.4.2.1.6.4119|2|4 +1.3.6.1.2.1.25.4.2.1.6.4122|2|4 +1.3.6.1.2.1.25.4.2.1.6.4212|2|4 +1.3.6.1.2.1.25.4.2.1.6.4213|2|4 +1.3.6.1.2.1.25.4.2.1.6.4214|2|4 +1.3.6.1.2.1.25.4.2.1.6.4215|2|4 +1.3.6.1.2.1.25.4.2.1.6.4216|2|4 +1.3.6.1.2.1.25.4.2.1.6.4217|2|4 +1.3.6.1.2.1.25.4.2.1.6.4218|2|4 +1.3.6.1.2.1.25.4.2.1.6.4219|2|4 +1.3.6.1.2.1.25.4.2.1.6.4220|2|4 +1.3.6.1.2.1.25.4.2.1.6.4221|2|4 +1.3.6.1.2.1.25.4.2.1.6.4222|2|4 +1.3.6.1.2.1.25.4.2.1.6.4224|2|4 +1.3.6.1.2.1.25.4.2.1.6.4226|2|4 +1.3.6.1.2.1.25.4.2.1.6.4434|2|4 +1.3.6.1.2.1.25.4.2.1.6.4435|2|4 +1.3.6.1.2.1.25.4.2.1.6.4436|2|4 +1.3.6.1.2.1.25.4.2.1.6.4437|2|4 +1.3.6.1.2.1.25.4.2.1.6.4438|2|4 +1.3.6.1.2.1.25.4.2.1.6.4439|2|4 +1.3.6.1.2.1.25.4.2.1.6.4440|2|4 +1.3.6.1.2.1.25.4.2.1.6.4441|2|4 +1.3.6.1.2.1.25.4.2.1.6.4442|2|4 +1.3.6.1.2.1.25.4.2.1.6.4443|2|4 +1.3.6.1.2.1.25.4.2.1.6.4451|2|4 +1.3.6.1.2.1.25.4.2.1.6.4773|2|4 +1.3.6.1.2.1.25.4.2.1.6.4774|2|4 +1.3.6.1.2.1.25.4.2.1.6.4775|2|4 +1.3.6.1.2.1.25.4.2.1.6.4776|2|4 +1.3.6.1.2.1.25.4.2.1.6.4777|2|4 +1.3.6.1.2.1.25.4.2.1.6.4778|2|4 +1.3.6.1.2.1.25.4.2.1.6.4779|2|4 +1.3.6.1.2.1.25.4.2.1.6.4780|2|4 +1.3.6.1.2.1.25.4.2.1.6.4781|2|4 +1.3.6.1.2.1.25.4.2.1.6.4782|2|4 +1.3.6.1.2.1.25.4.2.1.6.4784|2|4 +1.3.6.1.2.1.25.4.2.1.6.4786|2|4 +1.3.6.1.2.1.25.4.2.1.6.4787|2|4 +1.3.6.1.2.1.25.4.2.1.6.5137|2|4 +1.3.6.1.2.1.25.4.2.1.6.5138|2|4 +1.3.6.1.2.1.25.4.2.1.6.5139|2|4 +1.3.6.1.2.1.25.4.2.1.6.5140|2|4 +1.3.6.1.2.1.25.4.2.1.6.5141|2|4 +1.3.6.1.2.1.25.4.2.1.6.5142|2|4 +1.3.6.1.2.1.25.4.2.1.6.5143|2|4 +1.3.6.1.2.1.25.4.2.1.6.5144|2|4 +1.3.6.1.2.1.25.4.2.1.6.5145|2|4 +1.3.6.1.2.1.25.4.2.1.6.5146|2|4 +1.3.6.1.2.1.25.4.2.1.6.5148|2|4 +1.3.6.1.2.1.25.4.2.1.6.5151|2|4 +1.3.6.1.2.1.25.4.2.1.6.5155|2|4 +1.3.6.1.2.1.25.4.2.1.6.5159|2|4 +1.3.6.1.2.1.25.4.2.1.6.5501|2|4 +1.3.6.1.2.1.25.4.2.1.6.5502|2|4 +1.3.6.1.2.1.25.4.2.1.6.5503|2|4 +1.3.6.1.2.1.25.4.2.1.6.5504|2|4 +1.3.6.1.2.1.25.4.2.1.6.5505|2|4 +1.3.6.1.2.1.25.4.2.1.6.5506|2|4 +1.3.6.1.2.1.25.4.2.1.6.5507|2|4 +1.3.6.1.2.1.25.4.2.1.6.5508|2|4 +1.3.6.1.2.1.25.4.2.1.6.5509|2|4 +1.3.6.1.2.1.25.4.2.1.6.5510|2|4 +1.3.6.1.2.1.25.4.2.1.6.5516|2|4 +1.3.6.1.2.1.25.4.2.1.6.5522|2|4 +1.3.6.1.2.1.25.4.2.1.6.5861|2|4 +1.3.6.1.2.1.25.4.2.1.6.5862|2|4 +1.3.6.1.2.1.25.4.2.1.6.5863|2|4 +1.3.6.1.2.1.25.4.2.1.6.5864|2|4 +1.3.6.1.2.1.25.4.2.1.6.5865|2|4 +1.3.6.1.2.1.25.4.2.1.6.5866|2|4 +1.3.6.1.2.1.25.4.2.1.6.5867|2|4 +1.3.6.1.2.1.25.4.2.1.6.5868|2|4 +1.3.6.1.2.1.25.4.2.1.6.5869|2|4 +1.3.6.1.2.1.25.4.2.1.6.5870|2|4 +1.3.6.1.2.1.25.4.2.1.6.5872|2|4 +1.3.6.1.2.1.25.4.2.1.6.5875|2|4 +1.3.6.1.2.1.25.4.2.1.6.5878|2|4 +1.3.6.1.2.1.25.4.2.1.6.5879|2|4 +1.3.6.1.2.1.25.4.2.1.6.5884|2|4 +1.3.6.1.2.1.25.4.2.1.6.6344|2|4 +1.3.6.1.2.1.25.4.2.1.6.6345|2|4 +1.3.6.1.2.1.25.4.2.1.6.6346|2|4 +1.3.6.1.2.1.25.4.2.1.6.6347|2|4 +1.3.6.1.2.1.25.4.2.1.6.6348|2|4 +1.3.6.1.2.1.25.4.2.1.6.6349|2|4 +1.3.6.1.2.1.25.4.2.1.6.6350|2|4 +1.3.6.1.2.1.25.4.2.1.6.6351|2|4 +1.3.6.1.2.1.25.4.2.1.6.6352|2|4 +1.3.6.1.2.1.25.4.2.1.6.6353|2|4 +1.3.6.1.2.1.25.4.2.1.6.6358|2|4 +1.3.6.1.2.1.25.4.2.1.6.6366|2|4 +1.3.6.1.2.1.25.4.2.1.6.6763|2|4 +1.3.6.1.2.1.25.4.2.1.6.6764|2|4 +1.3.6.1.2.1.25.4.2.1.6.6765|2|4 +1.3.6.1.2.1.25.4.2.1.6.6766|2|4 +1.3.6.1.2.1.25.4.2.1.6.6767|2|4 +1.3.6.1.2.1.25.4.2.1.6.6768|2|4 +1.3.6.1.2.1.25.4.2.1.6.6769|2|4 +1.3.6.1.2.1.25.4.2.1.6.6770|2|4 +1.3.6.1.2.1.25.4.2.1.6.6771|2|4 +1.3.6.1.2.1.25.4.2.1.6.6772|2|4 +1.3.6.1.2.1.25.4.2.1.6.6782|2|4 +1.3.6.1.2.1.25.4.2.1.6.6784|2|4 +1.3.6.1.2.1.25.4.2.1.6.7174|2|4 +1.3.6.1.2.1.25.4.2.1.6.7175|2|4 +1.3.6.1.2.1.25.4.2.1.6.7176|2|4 +1.3.6.1.2.1.25.4.2.1.6.7177|2|4 +1.3.6.1.2.1.25.4.2.1.6.7178|2|4 +1.3.6.1.2.1.25.4.2.1.6.7179|2|4 +1.3.6.1.2.1.25.4.2.1.6.7180|2|4 +1.3.6.1.2.1.25.4.2.1.6.7181|2|4 +1.3.6.1.2.1.25.4.2.1.6.7182|2|4 +1.3.6.1.2.1.25.4.2.1.6.7183|2|4 +1.3.6.1.2.1.25.4.2.1.6.7188|2|4 +1.3.6.1.2.1.25.4.2.1.6.7192|2|4 +1.3.6.1.2.1.25.4.2.1.6.7194|2|4 +1.3.6.1.2.1.25.4.2.1.6.7196|2|4 +1.3.6.1.2.1.25.4.2.1.6.7523|2|4 +1.3.6.1.2.1.25.4.2.1.6.7524|2|4 +1.3.6.1.2.1.25.4.2.1.6.7525|2|4 +1.3.6.1.2.1.25.4.2.1.6.7526|2|4 +1.3.6.1.2.1.25.4.2.1.6.7527|2|4 +1.3.6.1.2.1.25.4.2.1.6.7528|2|4 +1.3.6.1.2.1.25.4.2.1.6.7529|2|4 +1.3.6.1.2.1.25.4.2.1.6.7530|2|4 +1.3.6.1.2.1.25.4.2.1.6.7531|2|4 +1.3.6.1.2.1.25.4.2.1.6.7532|2|4 +1.3.6.1.2.1.25.4.2.1.6.7535|2|4 +1.3.6.1.2.1.25.4.2.1.6.7539|2|4 +1.3.6.1.2.1.25.4.2.1.6.7543|2|4 +1.3.6.1.2.1.25.4.2.1.6.7544|2|4 +1.3.6.1.2.1.25.4.2.1.6.7949|2|4 +1.3.6.1.2.1.25.4.2.1.6.7950|2|4 +1.3.6.1.2.1.25.4.2.1.6.7951|2|4 +1.3.6.1.2.1.25.4.2.1.6.7952|2|4 +1.3.6.1.2.1.25.4.2.1.6.7953|2|4 +1.3.6.1.2.1.25.4.2.1.6.7954|2|4 +1.3.6.1.2.1.25.4.2.1.6.9526|2|4 +1.3.6.1.2.1.25.4.2.1.6.9602|2|4 +1.3.6.1.2.1.25.4.2.1.6.11784|2|4 +1.3.6.1.2.1.25.4.2.1.6.13563|2|4 +1.3.6.1.2.1.25.4.2.1.6.13565|2|4 +1.3.6.1.2.1.25.4.2.1.6.13566|2|4 +1.3.6.1.2.1.25.4.2.1.6.15387|2|4 +1.3.6.1.2.1.25.4.2.1.6.15921|2|4 +1.3.6.1.2.1.25.4.2.1.6.16645|2|4 +1.3.6.1.2.1.25.4.2.1.6.16646|2|4 +1.3.6.1.2.1.25.4.2.1.6.16648|2|4 +1.3.6.1.2.1.25.4.2.1.6.16651|2|4 +1.3.6.1.2.1.25.4.2.1.6.16652|2|4 +1.3.6.1.2.1.25.4.2.1.6.16653|2|4 +1.3.6.1.2.1.25.4.2.1.6.16654|2|4 +1.3.6.1.2.1.25.4.2.1.6.17900|2|4 +1.3.6.1.2.1.25.4.2.1.6.18651|2|4 +1.3.6.1.2.1.25.4.2.1.6.23175|2|4 +1.3.6.1.2.1.25.4.2.1.6.23330|2|4 +1.3.6.1.2.1.25.4.2.1.6.24570|2|4 +1.3.6.1.2.1.25.4.2.1.6.25514|2|4 +1.3.6.1.2.1.25.4.2.1.6.25517|2|4 +1.3.6.1.2.1.25.4.2.1.6.25518|2|4 +1.3.6.1.2.1.25.4.2.1.6.25522|2|4 +1.3.6.1.2.1.25.4.2.1.6.25524|2|4 +1.3.6.1.2.1.25.4.2.1.6.25531|2|4 +1.3.6.1.2.1.25.4.2.1.6.25946|2|4 +1.3.6.1.2.1.25.4.2.1.6.27567|2|4 +1.3.6.1.2.1.25.4.2.1.6.29431|2|4 +1.3.6.1.2.1.25.4.2.1.6.29439|2|4 +1.3.6.1.2.1.25.4.2.1.6.29440|2|4 +1.3.6.1.2.1.25.4.2.1.6.30092|2|4 +1.3.6.1.2.1.25.4.2.1.6.30120|2|4 +1.3.6.1.2.1.25.4.2.1.6.31793|2|4 +1.3.6.1.2.1.25.4.2.1.7.1|2|2 +1.3.6.1.2.1.25.4.2.1.7.415|2|2 +1.3.6.1.2.1.25.4.2.1.7.440|2|2 +1.3.6.1.2.1.25.4.2.1.7.447|2|2 +1.3.6.1.2.1.25.4.2.1.7.921|2|2 +1.3.6.1.2.1.25.4.2.1.7.951|2|2 +1.3.6.1.2.1.25.4.2.1.7.977|2|2 +1.3.6.1.2.1.25.4.2.1.7.979|2|2 +1.3.6.1.2.1.25.4.2.1.7.982|2|2 +1.3.6.1.2.1.25.4.2.1.7.984|2|2 +1.3.6.1.2.1.25.4.2.1.7.1038|2|2 +1.3.6.1.2.1.25.4.2.1.7.1826|2|2 +1.3.6.1.2.1.25.4.2.1.7.2851|2|2 +1.3.6.1.2.1.25.4.2.1.7.2852|2|2 +1.3.6.1.2.1.25.4.2.1.7.2919|2|2 +1.3.6.1.2.1.25.4.2.1.7.3773|2|2 +1.3.6.1.2.1.25.4.2.1.7.4068|2|2 +1.3.6.1.2.1.25.4.2.1.7.4085|2|2 +1.3.6.1.2.1.25.4.2.1.7.4119|2|2 +1.3.6.1.2.1.25.4.2.1.7.4122|2|2 +1.3.6.1.2.1.25.4.2.1.7.4212|2|2 +1.3.6.1.2.1.25.4.2.1.7.4213|2|2 +1.3.6.1.2.1.25.4.2.1.7.4214|2|2 +1.3.6.1.2.1.25.4.2.1.7.4215|2|2 +1.3.6.1.2.1.25.4.2.1.7.4216|2|2 +1.3.6.1.2.1.25.4.2.1.7.4217|2|2 +1.3.6.1.2.1.25.4.2.1.7.4218|2|2 +1.3.6.1.2.1.25.4.2.1.7.4219|2|2 +1.3.6.1.2.1.25.4.2.1.7.4220|2|2 +1.3.6.1.2.1.25.4.2.1.7.4221|2|2 +1.3.6.1.2.1.25.4.2.1.7.4222|2|2 +1.3.6.1.2.1.25.4.2.1.7.4224|2|2 +1.3.6.1.2.1.25.4.2.1.7.4226|2|2 +1.3.6.1.2.1.25.4.2.1.7.4434|2|2 +1.3.6.1.2.1.25.4.2.1.7.4435|2|2 +1.3.6.1.2.1.25.4.2.1.7.4436|2|2 +1.3.6.1.2.1.25.4.2.1.7.4437|2|2 +1.3.6.1.2.1.25.4.2.1.7.4438|2|2 +1.3.6.1.2.1.25.4.2.1.7.4439|2|2 +1.3.6.1.2.1.25.4.2.1.7.4440|2|2 +1.3.6.1.2.1.25.4.2.1.7.4441|2|2 +1.3.6.1.2.1.25.4.2.1.7.4442|2|2 +1.3.6.1.2.1.25.4.2.1.7.4443|2|2 +1.3.6.1.2.1.25.4.2.1.7.4451|2|2 +1.3.6.1.2.1.25.4.2.1.7.4773|2|2 +1.3.6.1.2.1.25.4.2.1.7.4774|2|2 +1.3.6.1.2.1.25.4.2.1.7.4775|2|2 +1.3.6.1.2.1.25.4.2.1.7.4776|2|2 +1.3.6.1.2.1.25.4.2.1.7.4777|2|2 +1.3.6.1.2.1.25.4.2.1.7.4778|2|2 +1.3.6.1.2.1.25.4.2.1.7.4779|2|2 +1.3.6.1.2.1.25.4.2.1.7.4780|2|2 +1.3.6.1.2.1.25.4.2.1.7.4781|2|2 +1.3.6.1.2.1.25.4.2.1.7.4782|2|2 +1.3.6.1.2.1.25.4.2.1.7.4784|2|2 +1.3.6.1.2.1.25.4.2.1.7.4786|2|2 +1.3.6.1.2.1.25.4.2.1.7.4787|2|2 +1.3.6.1.2.1.25.4.2.1.7.5137|2|2 +1.3.6.1.2.1.25.4.2.1.7.5138|2|2 +1.3.6.1.2.1.25.4.2.1.7.5139|2|2 +1.3.6.1.2.1.25.4.2.1.7.5140|2|2 +1.3.6.1.2.1.25.4.2.1.7.5141|2|2 +1.3.6.1.2.1.25.4.2.1.7.5142|2|2 +1.3.6.1.2.1.25.4.2.1.7.5143|2|2 +1.3.6.1.2.1.25.4.2.1.7.5144|2|2 +1.3.6.1.2.1.25.4.2.1.7.5145|2|2 +1.3.6.1.2.1.25.4.2.1.7.5146|2|2 +1.3.6.1.2.1.25.4.2.1.7.5148|2|2 +1.3.6.1.2.1.25.4.2.1.7.5151|2|2 +1.3.6.1.2.1.25.4.2.1.7.5155|2|2 +1.3.6.1.2.1.25.4.2.1.7.5159|2|2 +1.3.6.1.2.1.25.4.2.1.7.5501|2|2 +1.3.6.1.2.1.25.4.2.1.7.5502|2|2 +1.3.6.1.2.1.25.4.2.1.7.5503|2|2 +1.3.6.1.2.1.25.4.2.1.7.5504|2|2 +1.3.6.1.2.1.25.4.2.1.7.5505|2|2 +1.3.6.1.2.1.25.4.2.1.7.5506|2|2 +1.3.6.1.2.1.25.4.2.1.7.5507|2|2 +1.3.6.1.2.1.25.4.2.1.7.5508|2|2 +1.3.6.1.2.1.25.4.2.1.7.5509|2|2 +1.3.6.1.2.1.25.4.2.1.7.5510|2|2 +1.3.6.1.2.1.25.4.2.1.7.5516|2|2 +1.3.6.1.2.1.25.4.2.1.7.5522|2|2 +1.3.6.1.2.1.25.4.2.1.7.5861|2|2 +1.3.6.1.2.1.25.4.2.1.7.5862|2|2 +1.3.6.1.2.1.25.4.2.1.7.5863|2|2 +1.3.6.1.2.1.25.4.2.1.7.5864|2|2 +1.3.6.1.2.1.25.4.2.1.7.5865|2|2 +1.3.6.1.2.1.25.4.2.1.7.5866|2|2 +1.3.6.1.2.1.25.4.2.1.7.5867|2|2 +1.3.6.1.2.1.25.4.2.1.7.5868|2|2 +1.3.6.1.2.1.25.4.2.1.7.5869|2|2 +1.3.6.1.2.1.25.4.2.1.7.5870|2|2 +1.3.6.1.2.1.25.4.2.1.7.5872|2|2 +1.3.6.1.2.1.25.4.2.1.7.5875|2|2 +1.3.6.1.2.1.25.4.2.1.7.5878|2|2 +1.3.6.1.2.1.25.4.2.1.7.5879|2|2 +1.3.6.1.2.1.25.4.2.1.7.5884|2|2 +1.3.6.1.2.1.25.4.2.1.7.6344|2|2 +1.3.6.1.2.1.25.4.2.1.7.6345|2|2 +1.3.6.1.2.1.25.4.2.1.7.6346|2|2 +1.3.6.1.2.1.25.4.2.1.7.6347|2|2 +1.3.6.1.2.1.25.4.2.1.7.6348|2|2 +1.3.6.1.2.1.25.4.2.1.7.6349|2|2 +1.3.6.1.2.1.25.4.2.1.7.6350|2|2 +1.3.6.1.2.1.25.4.2.1.7.6351|2|2 +1.3.6.1.2.1.25.4.2.1.7.6352|2|2 +1.3.6.1.2.1.25.4.2.1.7.6353|2|2 +1.3.6.1.2.1.25.4.2.1.7.6358|2|2 +1.3.6.1.2.1.25.4.2.1.7.6366|2|2 +1.3.6.1.2.1.25.4.2.1.7.6763|2|2 +1.3.6.1.2.1.25.4.2.1.7.6764|2|2 +1.3.6.1.2.1.25.4.2.1.7.6765|2|2 +1.3.6.1.2.1.25.4.2.1.7.6766|2|2 +1.3.6.1.2.1.25.4.2.1.7.6767|2|2 +1.3.6.1.2.1.25.4.2.1.7.6768|2|2 +1.3.6.1.2.1.25.4.2.1.7.6769|2|2 +1.3.6.1.2.1.25.4.2.1.7.6770|2|2 +1.3.6.1.2.1.25.4.2.1.7.6771|2|2 +1.3.6.1.2.1.25.4.2.1.7.6772|2|2 +1.3.6.1.2.1.25.4.2.1.7.6782|2|2 +1.3.6.1.2.1.25.4.2.1.7.6784|2|2 +1.3.6.1.2.1.25.4.2.1.7.7174|2|2 +1.3.6.1.2.1.25.4.2.1.7.7175|2|2 +1.3.6.1.2.1.25.4.2.1.7.7176|2|2 +1.3.6.1.2.1.25.4.2.1.7.7177|2|2 +1.3.6.1.2.1.25.4.2.1.7.7178|2|2 +1.3.6.1.2.1.25.4.2.1.7.7179|2|2 +1.3.6.1.2.1.25.4.2.1.7.7180|2|2 +1.3.6.1.2.1.25.4.2.1.7.7181|2|2 +1.3.6.1.2.1.25.4.2.1.7.7182|2|2 +1.3.6.1.2.1.25.4.2.1.7.7183|2|2 +1.3.6.1.2.1.25.4.2.1.7.7188|2|2 +1.3.6.1.2.1.25.4.2.1.7.7192|2|2 +1.3.6.1.2.1.25.4.2.1.7.7194|2|2 +1.3.6.1.2.1.25.4.2.1.7.7196|2|2 +1.3.6.1.2.1.25.4.2.1.7.7523|2|2 +1.3.6.1.2.1.25.4.2.1.7.7524|2|2 +1.3.6.1.2.1.25.4.2.1.7.7525|2|2 +1.3.6.1.2.1.25.4.2.1.7.7526|2|2 +1.3.6.1.2.1.25.4.2.1.7.7527|2|2 +1.3.6.1.2.1.25.4.2.1.7.7528|2|2 +1.3.6.1.2.1.25.4.2.1.7.7529|2|2 +1.3.6.1.2.1.25.4.2.1.7.7530|2|2 +1.3.6.1.2.1.25.4.2.1.7.7531|2|2 +1.3.6.1.2.1.25.4.2.1.7.7532|2|2 +1.3.6.1.2.1.25.4.2.1.7.7535|2|2 +1.3.6.1.2.1.25.4.2.1.7.7539|2|2 +1.3.6.1.2.1.25.4.2.1.7.7543|2|2 +1.3.6.1.2.1.25.4.2.1.7.7544|2|2 +1.3.6.1.2.1.25.4.2.1.7.7949|2|2 +1.3.6.1.2.1.25.4.2.1.7.7950|2|2 +1.3.6.1.2.1.25.4.2.1.7.7951|2|2 +1.3.6.1.2.1.25.4.2.1.7.7952|2|2 +1.3.6.1.2.1.25.4.2.1.7.7953|2|2 +1.3.6.1.2.1.25.4.2.1.7.7954|2|2 +1.3.6.1.2.1.25.4.2.1.7.9526|2|2 +1.3.6.1.2.1.25.4.2.1.7.9602|2|2 +1.3.6.1.2.1.25.4.2.1.7.11784|2|2 +1.3.6.1.2.1.25.4.2.1.7.13563|2|2 +1.3.6.1.2.1.25.4.2.1.7.13565|2|2 +1.3.6.1.2.1.25.4.2.1.7.13566|2|2 +1.3.6.1.2.1.25.4.2.1.7.15387|2|2 +1.3.6.1.2.1.25.4.2.1.7.15921|2|2 +1.3.6.1.2.1.25.4.2.1.7.16645|2|2 +1.3.6.1.2.1.25.4.2.1.7.16646|2|2 +1.3.6.1.2.1.25.4.2.1.7.16648|2|2 +1.3.6.1.2.1.25.4.2.1.7.16651|2|2 +1.3.6.1.2.1.25.4.2.1.7.16652|2|2 +1.3.6.1.2.1.25.4.2.1.7.16653|2|2 +1.3.6.1.2.1.25.4.2.1.7.16654|2|2 +1.3.6.1.2.1.25.4.2.1.7.17900|2|2 +1.3.6.1.2.1.25.4.2.1.7.18651|2|2 +1.3.6.1.2.1.25.4.2.1.7.23175|2|2 +1.3.6.1.2.1.25.4.2.1.7.23330|2|1 +1.3.6.1.2.1.25.4.2.1.7.24620|2|2 +1.3.6.1.2.1.25.4.2.1.7.25514|2|2 +1.3.6.1.2.1.25.4.2.1.7.25517|2|2 +1.3.6.1.2.1.25.4.2.1.7.25518|2|2 +1.3.6.1.2.1.25.4.2.1.7.25522|2|2 +1.3.6.1.2.1.25.4.2.1.7.25524|2|2 +1.3.6.1.2.1.25.4.2.1.7.25531|2|2 +1.3.6.1.2.1.25.4.2.1.7.25946|2|2 +1.3.6.1.2.1.25.4.2.1.7.27567|2|2 +1.3.6.1.2.1.25.4.2.1.7.29431|2|2 +1.3.6.1.2.1.25.4.2.1.7.29439|2|2 +1.3.6.1.2.1.25.4.2.1.7.29440|2|2 +1.3.6.1.2.1.25.4.2.1.7.30092|2|2 +1.3.6.1.2.1.25.4.2.1.7.30120|2|2 +1.3.6.1.2.1.25.4.2.1.7.31793|2|2 +1.3.6.1.2.1.25.5.1.1.1.1|2|164793 +1.3.6.1.2.1.25.5.1.1.1.415|2|61212 +1.3.6.1.2.1.25.5.1.1.1.440|2|4 +1.3.6.1.2.1.25.5.1.1.1.447|2|39 +1.3.6.1.2.1.25.5.1.1.1.921|2|30296 +1.3.6.1.2.1.25.5.1.1.1.951|2|5675 +1.3.6.1.2.1.25.5.1.1.1.977|2|40364 +1.3.6.1.2.1.25.5.1.1.1.979|2|0 +1.3.6.1.2.1.25.5.1.1.1.982|2|12182 +1.3.6.1.2.1.25.5.1.1.1.984|2|25717 +1.3.6.1.2.1.25.5.1.1.1.1038|2|4453 +1.3.6.1.2.1.25.5.1.1.1.1826|2|48057 +1.3.6.1.2.1.25.5.1.1.1.2851|2|7041 +1.3.6.1.2.1.25.5.1.1.1.2852|2|17916 +1.3.6.1.2.1.25.5.1.1.1.2919|2|42140 +1.3.6.1.2.1.25.5.1.1.1.3773|2|6 +1.3.6.1.2.1.25.5.1.1.1.4068|2|8817 +1.3.6.1.2.1.25.5.1.1.1.4085|2|7800 +1.3.6.1.2.1.25.5.1.1.1.4119|2|1 +1.3.6.1.2.1.25.5.1.1.1.4122|2|0 +1.3.6.1.2.1.25.5.1.1.1.4212|2|8 +1.3.6.1.2.1.25.5.1.1.1.4213|2|7 +1.3.6.1.2.1.25.5.1.1.1.4214|2|6 +1.3.6.1.2.1.25.5.1.1.1.4215|2|7 +1.3.6.1.2.1.25.5.1.1.1.4216|2|13 +1.3.6.1.2.1.25.5.1.1.1.4217|2|7 +1.3.6.1.2.1.25.5.1.1.1.4218|2|7 +1.3.6.1.2.1.25.5.1.1.1.4219|2|6 +1.3.6.1.2.1.25.5.1.1.1.4220|2|6 +1.3.6.1.2.1.25.5.1.1.1.4221|2|6 +1.3.6.1.2.1.25.5.1.1.1.4222|2|6273 +1.3.6.1.2.1.25.5.1.1.1.4224|2|5518 +1.3.6.1.2.1.25.5.1.1.1.4226|2|7778 +1.3.6.1.2.1.25.5.1.1.1.4434|2|6 +1.3.6.1.2.1.25.5.1.1.1.4435|2|5 +1.3.6.1.2.1.25.5.1.1.1.4436|2|7 +1.3.6.1.2.1.25.5.1.1.1.4437|2|7 +1.3.6.1.2.1.25.5.1.1.1.4438|2|7 +1.3.6.1.2.1.25.5.1.1.1.4439|2|6 +1.3.6.1.2.1.25.5.1.1.1.4440|2|6 +1.3.6.1.2.1.25.5.1.1.1.4441|2|6 +1.3.6.1.2.1.25.5.1.1.1.4442|2|9 +1.3.6.1.2.1.25.5.1.1.1.4443|2|7 +1.3.6.1.2.1.25.5.1.1.1.4451|2|5329 +1.3.6.1.2.1.25.5.1.1.1.4773|2|6 +1.3.6.1.2.1.25.5.1.1.1.4774|2|6 +1.3.6.1.2.1.25.5.1.1.1.4775|2|14 +1.3.6.1.2.1.25.5.1.1.1.4776|2|6 +1.3.6.1.2.1.25.5.1.1.1.4777|2|6 +1.3.6.1.2.1.25.5.1.1.1.4778|2|8 +1.3.6.1.2.1.25.5.1.1.1.4779|2|10 +1.3.6.1.2.1.25.5.1.1.1.4780|2|6 +1.3.6.1.2.1.25.5.1.1.1.4781|2|6 +1.3.6.1.2.1.25.5.1.1.1.4782|2|6 +1.3.6.1.2.1.25.5.1.1.1.4784|2|24 +1.3.6.1.2.1.25.5.1.1.1.4786|2|6096 +1.3.6.1.2.1.25.5.1.1.1.4787|2|18120 +1.3.6.1.2.1.25.5.1.1.1.5137|2|8 +1.3.6.1.2.1.25.5.1.1.1.5138|2|6 +1.3.6.1.2.1.25.5.1.1.1.5139|2|289 +1.3.6.1.2.1.25.5.1.1.1.5140|2|8 +1.3.6.1.2.1.25.5.1.1.1.5141|2|6 +1.3.6.1.2.1.25.5.1.1.1.5142|2|7 +1.3.6.1.2.1.25.5.1.1.1.5143|2|7 +1.3.6.1.2.1.25.5.1.1.1.5144|2|231 +1.3.6.1.2.1.25.5.1.1.1.5145|2|6 +1.3.6.1.2.1.25.5.1.1.1.5146|2|6 +1.3.6.1.2.1.25.5.1.1.1.5148|2|10673 +1.3.6.1.2.1.25.5.1.1.1.5151|2|764 +1.3.6.1.2.1.25.5.1.1.1.5155|2|248494 +1.3.6.1.2.1.25.5.1.1.1.5159|2|19 +1.3.6.1.2.1.25.5.1.1.1.5501|2|6 +1.3.6.1.2.1.25.5.1.1.1.5502|2|6 +1.3.6.1.2.1.25.5.1.1.1.5503|2|252 +1.3.6.1.2.1.25.5.1.1.1.5504|2|6 +1.3.6.1.2.1.25.5.1.1.1.5505|2|6 +1.3.6.1.2.1.25.5.1.1.1.5506|2|231 +1.3.6.1.2.1.25.5.1.1.1.5507|2|7 +1.3.6.1.2.1.25.5.1.1.1.5508|2|6 +1.3.6.1.2.1.25.5.1.1.1.5509|2|6 +1.3.6.1.2.1.25.5.1.1.1.5510|2|5 +1.3.6.1.2.1.25.5.1.1.1.5516|2|6688 +1.3.6.1.2.1.25.5.1.1.1.5522|2|9286 +1.3.6.1.2.1.25.5.1.1.1.5861|2|7 +1.3.6.1.2.1.25.5.1.1.1.5862|2|7 +1.3.6.1.2.1.25.5.1.1.1.5863|2|6 +1.3.6.1.2.1.25.5.1.1.1.5864|2|253 +1.3.6.1.2.1.25.5.1.1.1.5865|2|254 +1.3.6.1.2.1.25.5.1.1.1.5866|2|6 +1.3.6.1.2.1.25.5.1.1.1.5867|2|8 +1.3.6.1.2.1.25.5.1.1.1.5868|2|8 +1.3.6.1.2.1.25.5.1.1.1.5869|2|6 +1.3.6.1.2.1.25.5.1.1.1.5870|2|6 +1.3.6.1.2.1.25.5.1.1.1.5872|2|88851 +1.3.6.1.2.1.25.5.1.1.1.5875|2|1574 +1.3.6.1.2.1.25.5.1.1.1.5878|2|314954 +1.3.6.1.2.1.25.5.1.1.1.5879|2|135525 +1.3.6.1.2.1.25.5.1.1.1.5884|2|124 +1.3.6.1.2.1.25.5.1.1.1.6344|2|8 +1.3.6.1.2.1.25.5.1.1.1.6345|2|225 +1.3.6.1.2.1.25.5.1.1.1.6346|2|7 +1.3.6.1.2.1.25.5.1.1.1.6347|2|7 +1.3.6.1.2.1.25.5.1.1.1.6348|2|6 +1.3.6.1.2.1.25.5.1.1.1.6349|2|6 +1.3.6.1.2.1.25.5.1.1.1.6350|2|7 +1.3.6.1.2.1.25.5.1.1.1.6351|2|7 +1.3.6.1.2.1.25.5.1.1.1.6352|2|6 +1.3.6.1.2.1.25.5.1.1.1.6353|2|6 +1.3.6.1.2.1.25.5.1.1.1.6358|2|1121128 +1.3.6.1.2.1.25.5.1.1.1.6366|2|24803 +1.3.6.1.2.1.25.5.1.1.1.6763|2|7 +1.3.6.1.2.1.25.5.1.1.1.6764|2|6 +1.3.6.1.2.1.25.5.1.1.1.6765|2|7 +1.3.6.1.2.1.25.5.1.1.1.6766|2|9 +1.3.6.1.2.1.25.5.1.1.1.6767|2|6 +1.3.6.1.2.1.25.5.1.1.1.6768|2|8 +1.3.6.1.2.1.25.5.1.1.1.6769|2|6 +1.3.6.1.2.1.25.5.1.1.1.6770|2|278 +1.3.6.1.2.1.25.5.1.1.1.6771|2|6 +1.3.6.1.2.1.25.5.1.1.1.6772|2|6 +1.3.6.1.2.1.25.5.1.1.1.6782|2|16886 +1.3.6.1.2.1.25.5.1.1.1.6784|2|13602 +1.3.6.1.2.1.25.5.1.1.1.7174|2|7 +1.3.6.1.2.1.25.5.1.1.1.7175|2|247 +1.3.6.1.2.1.25.5.1.1.1.7176|2|6 +1.3.6.1.2.1.25.5.1.1.1.7177|2|6 +1.3.6.1.2.1.25.5.1.1.1.7178|2|7 +1.3.6.1.2.1.25.5.1.1.1.7179|2|7 +1.3.6.1.2.1.25.5.1.1.1.7180|2|11 +1.3.6.1.2.1.25.5.1.1.1.7181|2|7 +1.3.6.1.2.1.25.5.1.1.1.7182|2|230 +1.3.6.1.2.1.25.5.1.1.1.7183|2|6 +1.3.6.1.2.1.25.5.1.1.1.7188|2|443110 +1.3.6.1.2.1.25.5.1.1.1.7192|2|58060 +1.3.6.1.2.1.25.5.1.1.1.7194|2|374 +1.3.6.1.2.1.25.5.1.1.1.7196|2|19690 +1.3.6.1.2.1.25.5.1.1.1.7523|2|25 +1.3.6.1.2.1.25.5.1.1.1.7524|2|7 +1.3.6.1.2.1.25.5.1.1.1.7525|2|5 +1.3.6.1.2.1.25.5.1.1.1.7526|2|9 +1.3.6.1.2.1.25.5.1.1.1.7527|2|6 +1.3.6.1.2.1.25.5.1.1.1.7528|2|7 +1.3.6.1.2.1.25.5.1.1.1.7529|2|7 +1.3.6.1.2.1.25.5.1.1.1.7530|2|6 +1.3.6.1.2.1.25.5.1.1.1.7531|2|7 +1.3.6.1.2.1.25.5.1.1.1.7532|2|6 +1.3.6.1.2.1.25.5.1.1.1.7535|2|12611 +1.3.6.1.2.1.25.5.1.1.1.7539|2|249329 +1.3.6.1.2.1.25.5.1.1.1.7543|2|1616 +1.3.6.1.2.1.25.5.1.1.1.7544|2|464 +1.3.6.1.2.1.25.5.1.1.1.7949|2|6 +1.3.6.1.2.1.25.5.1.1.1.7950|2|6 +1.3.6.1.2.1.25.5.1.1.1.7951|2|6 +1.3.6.1.2.1.25.5.1.1.1.7952|2|6 +1.3.6.1.2.1.25.5.1.1.1.7953|2|6 +1.3.6.1.2.1.25.5.1.1.1.7954|2|8 +1.3.6.1.2.1.25.5.1.1.1.9526|2|19 +1.3.6.1.2.1.25.5.1.1.1.9602|2|2900 +1.3.6.1.2.1.25.5.1.1.1.11784|2|5 +1.3.6.1.2.1.25.5.1.1.1.13563|2|8 +1.3.6.1.2.1.25.5.1.1.1.13565|2|19 +1.3.6.1.2.1.25.5.1.1.1.13566|2|164 +1.3.6.1.2.1.25.5.1.1.1.15387|2|1373 +1.3.6.1.2.1.25.5.1.1.1.15921|2|2400923 +1.3.6.1.2.1.25.5.1.1.1.16645|2|553 +1.3.6.1.2.1.25.5.1.1.1.16646|2|353 +1.3.6.1.2.1.25.5.1.1.1.16648|2|23 +1.3.6.1.2.1.25.5.1.1.1.16651|2|372 +1.3.6.1.2.1.25.5.1.1.1.16652|2|1145 +1.3.6.1.2.1.25.5.1.1.1.16653|2|4450 +1.3.6.1.2.1.25.5.1.1.1.16654|2|75 +1.3.6.1.2.1.25.5.1.1.1.17900|2|77 +1.3.6.1.2.1.25.5.1.1.1.18651|2|168616 +1.3.6.1.2.1.25.5.1.1.1.23175|2|39844 +1.3.6.1.2.1.25.5.1.1.1.23330|2|33915 +1.3.6.1.2.1.25.5.1.1.1.24620|2|0 +1.3.6.1.2.1.25.5.1.1.1.25514|2|213 +1.3.6.1.2.1.25.5.1.1.1.25517|2|1968 +1.3.6.1.2.1.25.5.1.1.1.25518|2|4 +1.3.6.1.2.1.25.5.1.1.1.25522|2|54954 +1.3.6.1.2.1.25.5.1.1.1.25524|2|1523 +1.3.6.1.2.1.25.5.1.1.1.25531|2|6683 +1.3.6.1.2.1.25.5.1.1.1.25946|2|105377 +1.3.6.1.2.1.25.5.1.1.1.27567|2|1 +1.3.6.1.2.1.25.5.1.1.1.29431|2|390 +1.3.6.1.2.1.25.5.1.1.1.29439|2|397 +1.3.6.1.2.1.25.5.1.1.1.29440|2|562 +1.3.6.1.2.1.25.5.1.1.1.30092|2|30637277 +1.3.6.1.2.1.25.5.1.1.1.30120|2|501 +1.3.6.1.2.1.25.5.1.1.1.31793|2|27 +1.3.6.1.2.1.25.5.1.1.2.1|2|4500 +1.3.6.1.2.1.25.5.1.1.2.415|2|1788 +1.3.6.1.2.1.25.5.1.1.2.440|2|220 +1.3.6.1.2.1.25.5.1.1.2.447|2|144 +1.3.6.1.2.1.25.5.1.1.2.921|2|40 +1.3.6.1.2.1.25.5.1.1.2.951|2|492 +1.3.6.1.2.1.25.5.1.1.2.977|2|1040 +1.3.6.1.2.1.25.5.1.1.2.979|2|48 +1.3.6.1.2.1.25.5.1.1.2.982|2|444 +1.3.6.1.2.1.25.5.1.1.2.984|2|1108 +1.3.6.1.2.1.25.5.1.1.2.1038|2|16 +1.3.6.1.2.1.25.5.1.1.2.1826|2|5136 +1.3.6.1.2.1.25.5.1.1.2.2851|2|436 +1.3.6.1.2.1.25.5.1.1.2.2852|2|15216 +1.3.6.1.2.1.25.5.1.1.2.2919|2|89012 +1.3.6.1.2.1.25.5.1.1.2.3773|2|140 +1.3.6.1.2.1.25.5.1.1.2.4068|2|6820 +1.3.6.1.2.1.25.5.1.1.2.4085|2|188 +1.3.6.1.2.1.25.5.1.1.2.4119|2|48 +1.3.6.1.2.1.25.5.1.1.2.4122|2|44 +1.3.6.1.2.1.25.5.1.1.2.4212|2|212 +1.3.6.1.2.1.25.5.1.1.2.4213|2|152 +1.3.6.1.2.1.25.5.1.1.2.4214|2|172 +1.3.6.1.2.1.25.5.1.1.2.4215|2|336 +1.3.6.1.2.1.25.5.1.1.2.4216|2|304 +1.3.6.1.2.1.25.5.1.1.2.4217|2|312 +1.3.6.1.2.1.25.5.1.1.2.4218|2|276 +1.3.6.1.2.1.25.5.1.1.2.4219|2|172 +1.3.6.1.2.1.25.5.1.1.2.4220|2|296 +1.3.6.1.2.1.25.5.1.1.2.4221|2|276 +1.3.6.1.2.1.25.5.1.1.2.4222|2|15716 +1.3.6.1.2.1.25.5.1.1.2.4224|2|2548 +1.3.6.1.2.1.25.5.1.1.2.4226|2|4060 +1.3.6.1.2.1.25.5.1.1.2.4434|2|312 +1.3.6.1.2.1.25.5.1.1.2.4435|2|348 +1.3.6.1.2.1.25.5.1.1.2.4436|2|280 +1.3.6.1.2.1.25.5.1.1.2.4437|2|304 +1.3.6.1.2.1.25.5.1.1.2.4438|2|272 +1.3.6.1.2.1.25.5.1.1.2.4439|2|296 +1.3.6.1.2.1.25.5.1.1.2.4440|2|296 +1.3.6.1.2.1.25.5.1.1.2.4441|2|280 +1.3.6.1.2.1.25.5.1.1.2.4442|2|300 +1.3.6.1.2.1.25.5.1.1.2.4443|2|164 +1.3.6.1.2.1.25.5.1.1.2.4451|2|16160 +1.3.6.1.2.1.25.5.1.1.2.4773|2|152 +1.3.6.1.2.1.25.5.1.1.2.4774|2|348 +1.3.6.1.2.1.25.5.1.1.2.4775|2|380 +1.3.6.1.2.1.25.5.1.1.2.4776|2|348 +1.3.6.1.2.1.25.5.1.1.2.4777|2|292 +1.3.6.1.2.1.25.5.1.1.2.4778|2|308 +1.3.6.1.2.1.25.5.1.1.2.4779|2|256 +1.3.6.1.2.1.25.5.1.1.2.4780|2|264 +1.3.6.1.2.1.25.5.1.1.2.4781|2|172 +1.3.6.1.2.1.25.5.1.1.2.4782|2|364 +1.3.6.1.2.1.25.5.1.1.2.4784|2|760 +1.3.6.1.2.1.25.5.1.1.2.4786|2|3064 +1.3.6.1.2.1.25.5.1.1.2.4787|2|5052 +1.3.6.1.2.1.25.5.1.1.2.5137|2|176 +1.3.6.1.2.1.25.5.1.1.2.5138|2|176 +1.3.6.1.2.1.25.5.1.1.2.5139|2|164 +1.3.6.1.2.1.25.5.1.1.2.5140|2|324 +1.3.6.1.2.1.25.5.1.1.2.5141|2|356 +1.3.6.1.2.1.25.5.1.1.2.5142|2|332 +1.3.6.1.2.1.25.5.1.1.2.5143|2|296 +1.3.6.1.2.1.25.5.1.1.2.5144|2|176 +1.3.6.1.2.1.25.5.1.1.2.5145|2|280 +1.3.6.1.2.1.25.5.1.1.2.5146|2|300 +1.3.6.1.2.1.25.5.1.1.2.5148|2|16600 +1.3.6.1.2.1.25.5.1.1.2.5151|2|1032 +1.3.6.1.2.1.25.5.1.1.2.5155|2|16436 +1.3.6.1.2.1.25.5.1.1.2.5159|2|16788 +1.3.6.1.2.1.25.5.1.1.2.5501|2|324 +1.3.6.1.2.1.25.5.1.1.2.5502|2|348 +1.3.6.1.2.1.25.5.1.1.2.5503|2|256 +1.3.6.1.2.1.25.5.1.1.2.5504|2|284 +1.3.6.1.2.1.25.5.1.1.2.5505|2|152 +1.3.6.1.2.1.25.5.1.1.2.5506|2|176 +1.3.6.1.2.1.25.5.1.1.2.5507|2|296 +1.3.6.1.2.1.25.5.1.1.2.5508|2|304 +1.3.6.1.2.1.25.5.1.1.2.5509|2|284 +1.3.6.1.2.1.25.5.1.1.2.5510|2|304 +1.3.6.1.2.1.25.5.1.1.2.5516|2|4252 +1.3.6.1.2.1.25.5.1.1.2.5522|2|4436 +1.3.6.1.2.1.25.5.1.1.2.5861|2|144 +1.3.6.1.2.1.25.5.1.1.2.5862|2|324 +1.3.6.1.2.1.25.5.1.1.2.5863|2|144 +1.3.6.1.2.1.25.5.1.1.2.5864|2|140 +1.3.6.1.2.1.25.5.1.1.2.5865|2|392 +1.3.6.1.2.1.25.5.1.1.2.5866|2|308 +1.3.6.1.2.1.25.5.1.1.2.5867|2|384 +1.3.6.1.2.1.25.5.1.1.2.5868|2|324 +1.3.6.1.2.1.25.5.1.1.2.5869|2|268 +1.3.6.1.2.1.25.5.1.1.2.5870|2|284 +1.3.6.1.2.1.25.5.1.1.2.5872|2|21036 +1.3.6.1.2.1.25.5.1.1.2.5875|2|17260 +1.3.6.1.2.1.25.5.1.1.2.5878|2|92724 +1.3.6.1.2.1.25.5.1.1.2.5879|2|22224 +1.3.6.1.2.1.25.5.1.1.2.5884|2|384 +1.3.6.1.2.1.25.5.1.1.2.6344|2|328 +1.3.6.1.2.1.25.5.1.1.2.6345|2|144 +1.3.6.1.2.1.25.5.1.1.2.6346|2|280 +1.3.6.1.2.1.25.5.1.1.2.6347|2|300 +1.3.6.1.2.1.25.5.1.1.2.6348|2|280 +1.3.6.1.2.1.25.5.1.1.2.6349|2|280 +1.3.6.1.2.1.25.5.1.1.2.6350|2|296 +1.3.6.1.2.1.25.5.1.1.2.6351|2|144 +1.3.6.1.2.1.25.5.1.1.2.6352|2|280 +1.3.6.1.2.1.25.5.1.1.2.6353|2|388 +1.3.6.1.2.1.25.5.1.1.2.6358|2|14944 +1.3.6.1.2.1.25.5.1.1.2.6366|2|832 +1.3.6.1.2.1.25.5.1.1.2.6763|2|328 +1.3.6.1.2.1.25.5.1.1.2.6764|2|356 +1.3.6.1.2.1.25.5.1.1.2.6765|2|268 +1.3.6.1.2.1.25.5.1.1.2.6766|2|356 +1.3.6.1.2.1.25.5.1.1.2.6767|2|268 +1.3.6.1.2.1.25.5.1.1.2.6768|2|320 +1.3.6.1.2.1.25.5.1.1.2.6769|2|144 +1.3.6.1.2.1.25.5.1.1.2.6770|2|340 +1.3.6.1.2.1.25.5.1.1.2.6771|2|144 +1.3.6.1.2.1.25.5.1.1.2.6772|2|296 +1.3.6.1.2.1.25.5.1.1.2.6782|2|7868 +1.3.6.1.2.1.25.5.1.1.2.6784|2|17968 +1.3.6.1.2.1.25.5.1.1.2.7174|2|292 +1.3.6.1.2.1.25.5.1.1.2.7175|2|144 +1.3.6.1.2.1.25.5.1.1.2.7176|2|332 +1.3.6.1.2.1.25.5.1.1.2.7177|2|144 +1.3.6.1.2.1.25.5.1.1.2.7178|2|332 +1.3.6.1.2.1.25.5.1.1.2.7179|2|144 +1.3.6.1.2.1.25.5.1.1.2.7180|2|320 +1.3.6.1.2.1.25.5.1.1.2.7181|2|268 +1.3.6.1.2.1.25.5.1.1.2.7182|2|136 +1.3.6.1.2.1.25.5.1.1.2.7183|2|292 +1.3.6.1.2.1.25.5.1.1.2.7188|2|171092 +1.3.6.1.2.1.25.5.1.1.2.7192|2|32956 +1.3.6.1.2.1.25.5.1.1.2.7194|2|17216 +1.3.6.1.2.1.25.5.1.1.2.7196|2|14212 +1.3.6.1.2.1.25.5.1.1.2.7523|2|140 +1.3.6.1.2.1.25.5.1.1.2.7524|2|300 +1.3.6.1.2.1.25.5.1.1.2.7525|2|144 +1.3.6.1.2.1.25.5.1.1.2.7526|2|280 +1.3.6.1.2.1.25.5.1.1.2.7527|2|336 +1.3.6.1.2.1.25.5.1.1.2.7528|2|288 +1.3.6.1.2.1.25.5.1.1.2.7529|2|136 +1.3.6.1.2.1.25.5.1.1.2.7530|2|296 +1.3.6.1.2.1.25.5.1.1.2.7531|2|144 +1.3.6.1.2.1.25.5.1.1.2.7532|2|276 +1.3.6.1.2.1.25.5.1.1.2.7535|2|15752 +1.3.6.1.2.1.25.5.1.1.2.7539|2|81804 +1.3.6.1.2.1.25.5.1.1.2.7543|2|1900 +1.3.6.1.2.1.25.5.1.1.2.7544|2|20220 +1.3.6.1.2.1.25.5.1.1.2.7949|2|288 +1.3.6.1.2.1.25.5.1.1.2.7950|2|284 +1.3.6.1.2.1.25.5.1.1.2.7951|2|280 +1.3.6.1.2.1.25.5.1.1.2.7952|2|276 +1.3.6.1.2.1.25.5.1.1.2.7953|2|284 +1.3.6.1.2.1.25.5.1.1.2.7954|2|328 +1.3.6.1.2.1.25.5.1.1.2.9526|2|896 +1.3.6.1.2.1.25.5.1.1.2.9602|2|560 +1.3.6.1.2.1.25.5.1.1.2.11784|2|68 +1.3.6.1.2.1.25.5.1.1.2.13563|2|5956 +1.3.6.1.2.1.25.5.1.1.2.13565|2|5788 +1.3.6.1.2.1.25.5.1.1.2.13566|2|5064 +1.3.6.1.2.1.25.5.1.1.2.15387|2|1948 +1.3.6.1.2.1.25.5.1.1.2.15921|2|226040 +1.3.6.1.2.1.25.5.1.1.2.16645|2|272 +1.3.6.1.2.1.25.5.1.1.2.16646|2|300 +1.3.6.1.2.1.25.5.1.1.2.16648|2|3144 +1.3.6.1.2.1.25.5.1.1.2.16651|2|18536 +1.3.6.1.2.1.25.5.1.1.2.16652|2|1256 +1.3.6.1.2.1.25.5.1.1.2.16653|2|1440 +1.3.6.1.2.1.25.5.1.1.2.16654|2|17096 +1.3.6.1.2.1.25.5.1.1.2.17900|2|1456 +1.3.6.1.2.1.25.5.1.1.2.18651|2|93160 +1.3.6.1.2.1.25.5.1.1.2.23175|2|1200 +1.3.6.1.2.1.25.5.1.1.2.23330|2|32636 +1.3.6.1.2.1.25.5.1.1.2.24620|2|832 +1.3.6.1.2.1.25.5.1.1.2.25514|2|21768 +1.3.6.1.2.1.25.5.1.1.2.25517|2|25124 +1.3.6.1.2.1.25.5.1.1.2.25518|2|584 +1.3.6.1.2.1.25.5.1.1.2.25522|2|25256 +1.3.6.1.2.1.25.5.1.1.2.25524|2|25460 +1.3.6.1.2.1.25.5.1.1.2.25531|2|25184 +1.3.6.1.2.1.25.5.1.1.2.25946|2|25848 +1.3.6.1.2.1.25.5.1.1.2.27567|2|1228 +1.3.6.1.2.1.25.5.1.1.2.29431|2|14544 +1.3.6.1.2.1.25.5.1.1.2.29439|2|8036 +1.3.6.1.2.1.25.5.1.1.2.29440|2|8220 +1.3.6.1.2.1.25.5.1.1.2.30092|2|108020 +1.3.6.1.2.1.25.5.1.1.2.30120|2|1132 +1.3.6.1.2.1.25.5.1.1.2.31793|2|23800 +1.3.6.1.2.1.31.1.1.1.1.32|4|mgmt +1.3.6.1.2.1.31.1.1.1.1.48|4x|312e30 +1.3.6.1.2.1.31.1.1.1.1.80|4x|2f436f6d6d6f6e2f687474702d74756e6e656c +1.3.6.1.2.1.31.1.1.1.1.96|4x|2f436f6d6d6f6e2f736f636b732d74756e6e656c +1.3.6.1.2.1.31.1.1.1.1.112|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.2.1.31.1.1.1.2.32|65|0 +1.3.6.1.2.1.31.1.1.1.2.48|65|0 +1.3.6.1.2.1.31.1.1.1.2.80|65|0 +1.3.6.1.2.1.31.1.1.1.2.96|65|0 +1.3.6.1.2.1.31.1.1.1.2.112|65|15088 +1.3.6.1.2.1.31.1.1.1.3.32|65|0 +1.3.6.1.2.1.31.1.1.1.3.48|65|0 +1.3.6.1.2.1.31.1.1.1.3.80|65|0 +1.3.6.1.2.1.31.1.1.1.3.96|65|0 +1.3.6.1.2.1.31.1.1.1.3.112|65|2918 +1.3.6.1.2.1.31.1.1.1.4.32|65|0 +1.3.6.1.2.1.31.1.1.1.4.48|65|0 +1.3.6.1.2.1.31.1.1.1.4.80|65|0 +1.3.6.1.2.1.31.1.1.1.4.96|65|0 +1.3.6.1.2.1.31.1.1.1.4.112|65|15103 +1.3.6.1.2.1.31.1.1.1.5.32|65|0 +1.3.6.1.2.1.31.1.1.1.5.48|65|0 +1.3.6.1.2.1.31.1.1.1.5.80|65|0 +1.3.6.1.2.1.31.1.1.1.5.96|65|0 +1.3.6.1.2.1.31.1.1.1.5.112|65|607 +1.3.6.1.2.1.31.1.1.1.6.32|70|457265376 +1.3.6.1.2.1.31.1.1.1.6.48|70|601695323 +1.3.6.1.2.1.31.1.1.1.6.80|70|0 +1.3.6.1.2.1.31.1.1.1.6.96|70|0 +1.3.6.1.2.1.31.1.1.1.6.112|70|392412410 +1.3.6.1.2.1.31.1.1.1.7.32|70|895729 +1.3.6.1.2.1.31.1.1.1.7.48|70|764742 +1.3.6.1.2.1.31.1.1.1.7.80|70|0 +1.3.6.1.2.1.31.1.1.1.7.96|70|0 +1.3.6.1.2.1.31.1.1.1.7.112|70|863320 +1.3.6.1.2.1.31.1.1.1.8.32|70|0 +1.3.6.1.2.1.31.1.1.1.8.48|70|0 +1.3.6.1.2.1.31.1.1.1.8.80|70|0 +1.3.6.1.2.1.31.1.1.1.8.96|70|0 +1.3.6.1.2.1.31.1.1.1.8.112|70|15088 +1.3.6.1.2.1.31.1.1.1.9.32|70|0 +1.3.6.1.2.1.31.1.1.1.9.48|70|0 +1.3.6.1.2.1.31.1.1.1.9.80|70|0 +1.3.6.1.2.1.31.1.1.1.9.96|70|0 +1.3.6.1.2.1.31.1.1.1.9.112|70|2918 +1.3.6.1.2.1.31.1.1.1.10.32|70|308353370 +1.3.6.1.2.1.31.1.1.1.10.48|70|63858761 +1.3.6.1.2.1.31.1.1.1.10.80|70|0 +1.3.6.1.2.1.31.1.1.1.10.96|70|0 +1.3.6.1.2.1.31.1.1.1.10.112|70|401634634 +1.3.6.1.2.1.31.1.1.1.11.32|70|738778 +1.3.6.1.2.1.31.1.1.1.11.48|70|489344 +1.3.6.1.2.1.31.1.1.1.11.80|70|0 +1.3.6.1.2.1.31.1.1.1.11.96|70|0 +1.3.6.1.2.1.31.1.1.1.11.112|70|844482 +1.3.6.1.2.1.31.1.1.1.12.32|70|0 +1.3.6.1.2.1.31.1.1.1.12.48|70|0 +1.3.6.1.2.1.31.1.1.1.12.80|70|0 +1.3.6.1.2.1.31.1.1.1.12.96|70|0 +1.3.6.1.2.1.31.1.1.1.12.112|70|15103 +1.3.6.1.2.1.31.1.1.1.13.32|70|0 +1.3.6.1.2.1.31.1.1.1.13.48|70|0 +1.3.6.1.2.1.31.1.1.1.13.80|70|0 +1.3.6.1.2.1.31.1.1.1.13.96|70|0 +1.3.6.1.2.1.31.1.1.1.13.112|70|607 +1.3.6.1.2.1.31.1.1.1.14.32|2|1 +1.3.6.1.2.1.31.1.1.1.14.48|2|1 +1.3.6.1.2.1.31.1.1.1.14.80|2|2 +1.3.6.1.2.1.31.1.1.1.14.96|2|2 +1.3.6.1.2.1.31.1.1.1.14.112|2|2 +1.3.6.1.2.1.31.1.1.1.15.32|66|100 +1.3.6.1.2.1.31.1.1.1.15.48|66|10000 +1.3.6.1.2.1.31.1.1.1.15.80|66|0 +1.3.6.1.2.1.31.1.1.1.15.96|66|0 +1.3.6.1.2.1.31.1.1.1.15.112|66|10000 +1.3.6.1.2.1.31.1.1.1.16.32|2|2 +1.3.6.1.2.1.31.1.1.1.16.48|2|2 +1.3.6.1.2.1.31.1.1.1.16.80|2|2 +1.3.6.1.2.1.31.1.1.1.16.96|2|2 +1.3.6.1.2.1.31.1.1.1.16.112|2|2 +1.3.6.1.2.1.31.1.1.1.17.32|2|1 +1.3.6.1.2.1.31.1.1.1.17.48|2|1 +1.3.6.1.2.1.31.1.1.1.17.80|2|2 +1.3.6.1.2.1.31.1.1.1.17.96|2|2 +1.3.6.1.2.1.31.1.1.1.17.112|2|2 +1.3.6.1.2.1.31.1.1.1.18.32|4|desc1 +1.3.6.1.2.1.31.1.1.1.18.48|4|desc2 +1.3.6.1.2.1.31.1.1.1.18.80|4|desc3 +1.3.6.1.2.1.31.1.1.1.18.96|4|desc4 +1.3.6.1.2.1.31.1.1.1.18.112|4|desc5 +1.3.6.1.2.1.31.1.1.1.19.32|67|0 +1.3.6.1.2.1.31.1.1.1.19.48|67|0 +1.3.6.1.2.1.31.1.1.1.19.80|67|0 +1.3.6.1.2.1.31.1.1.1.19.96|67|0 +1.3.6.1.2.1.31.1.1.1.19.112|67|0 +1.3.6.1.2.1.92.1.1.1.0|66|1000 +1.3.6.1.2.1.92.1.1.2.0|66|1440 +1.3.6.1.2.1.92.1.2.1.0|65|0 +1.3.6.1.2.1.92.1.2.2.0|65|0 +1.3.6.1.4.1.2021.2.1.1.1|2|1 +1.3.6.1.4.1.2021.2.1.1.2|2|2 +1.3.6.1.4.1.2021.2.1.1.3|2|3 +1.3.6.1.4.1.2021.2.1.1.4|2|4 +1.3.6.1.4.1.2021.2.1.1.5|2|5 +1.3.6.1.4.1.2021.2.1.1.6|2|6 +1.3.6.1.4.1.2021.2.1.2.1|4|bigd +1.3.6.1.4.1.2021.2.1.2.2|4|chmand +1.3.6.1.4.1.2021.2.1.2.3|4|httpd +1.3.6.1.4.1.2021.2.1.2.4|4|mcpd +1.3.6.1.4.1.2021.2.1.2.5|4|sod +1.3.6.1.4.1.2021.2.1.2.6|4|tmm +1.3.6.1.4.1.2021.2.1.3.1|2|1 +1.3.6.1.4.1.2021.2.1.3.2|2|1 +1.3.6.1.4.1.2021.2.1.3.3|2|1 +1.3.6.1.4.1.2021.2.1.3.4|2|1 +1.3.6.1.4.1.2021.2.1.3.5|2|1 +1.3.6.1.4.1.2021.2.1.3.6|2|1 +1.3.6.1.4.1.2021.2.1.4.1|2|0 +1.3.6.1.4.1.2021.2.1.4.2|2|1 +1.3.6.1.4.1.2021.2.1.4.3|2|0 +1.3.6.1.4.1.2021.2.1.4.4|2|1 +1.3.6.1.4.1.2021.2.1.4.5|2|1 +1.3.6.1.4.1.2021.2.1.4.6|2|0 +1.3.6.1.4.1.2021.2.1.5.1|2|1 +1.3.6.1.4.1.2021.2.1.5.2|2|1 +1.3.6.1.4.1.2021.2.1.5.3|2|8 +1.3.6.1.4.1.2021.2.1.5.4|2|1 +1.3.6.1.4.1.2021.2.1.5.5|2|1 +1.3.6.1.4.1.2021.2.1.5.6|2|1 +1.3.6.1.4.1.2021.2.1.100.1|2|0 +1.3.6.1.4.1.2021.2.1.100.2|2|0 +1.3.6.1.4.1.2021.2.1.100.3|2|0 +1.3.6.1.4.1.2021.2.1.100.4|2|0 +1.3.6.1.4.1.2021.2.1.100.5|2|0 +1.3.6.1.4.1.2021.2.1.100.6|2|0 +1.3.6.1.4.1.2021.2.1.101.1|4| +1.3.6.1.4.1.2021.2.1.101.2|4| +1.3.6.1.4.1.2021.2.1.101.3|4| +1.3.6.1.4.1.2021.2.1.101.4|4| +1.3.6.1.4.1.2021.2.1.101.5|4| +1.3.6.1.4.1.2021.2.1.101.6|4| +1.3.6.1.4.1.2021.2.1.102.1|2|0 +1.3.6.1.4.1.2021.2.1.102.2|2|0 +1.3.6.1.4.1.2021.2.1.102.3|2|0 +1.3.6.1.4.1.2021.2.1.102.4|2|0 +1.3.6.1.4.1.2021.2.1.102.5|2|0 +1.3.6.1.4.1.2021.2.1.102.6|2|0 +1.3.6.1.4.1.2021.2.1.103.1|4| +1.3.6.1.4.1.2021.2.1.103.2|4| +1.3.6.1.4.1.2021.2.1.103.3|4| +1.3.6.1.4.1.2021.2.1.103.4|4| +1.3.6.1.4.1.2021.2.1.103.5|4| +1.3.6.1.4.1.2021.2.1.103.6|4| +1.3.6.1.4.1.2021.4.1.0|2|0 +1.3.6.1.4.1.2021.4.2.0|4|swap +1.3.6.1.4.1.2021.4.3.0|2|1023996 +1.3.6.1.4.1.2021.4.4.0|2|563452 +1.3.6.1.4.1.2021.4.5.0|2|7660752 +1.3.6.1.4.1.2021.4.6.0|2|86248 +1.3.6.1.4.1.2021.4.11.0|2|649700 +1.3.6.1.4.1.2021.4.12.0|2|16000 +1.3.6.1.4.1.2021.4.13.0|2|54036 +1.3.6.1.4.1.2021.4.14.0|2|71048 +1.3.6.1.4.1.2021.4.15.0|2|424332 +1.3.6.1.4.1.2021.4.100.0|2|0 +1.3.6.1.4.1.2021.4.101.0|4| +1.3.6.1.4.1.2021.9.1.1.1|2|1 +1.3.6.1.4.1.2021.9.1.1.2|2|2 +1.3.6.1.4.1.2021.9.1.2.1|4x|2f +1.3.6.1.4.1.2021.9.1.2.2|4x|2f766172 +1.3.6.1.4.1.2021.9.1.3.1|4x|2f6465762f6d61707065722f76672d2d64622d2d7664612d7365742e312e726f6f74 +1.3.6.1.4.1.2021.9.1.3.2|4x|2f6465762f6d61707065722f76672d2d64622d2d7664612d7365742e312e5f766172 +1.3.6.1.4.1.2021.9.1.4.1|2|2000 +1.3.6.1.4.1.2021.9.1.4.2|2|10000 +1.3.6.1.4.1.2021.9.1.5.1|2|-1 +1.3.6.1.4.1.2021.9.1.5.2|2|-1 +1.3.6.1.4.1.2021.9.1.6.1|2|428150 +1.3.6.1.4.1.2021.9.1.6.2|2|943128 +1.3.6.1.4.1.2021.9.1.7.1|2|322822 +1.3.6.1.4.1.2021.9.1.7.2|2|515544 +1.3.6.1.4.1.2021.9.1.8.1|2|78704 +1.3.6.1.4.1.2021.9.1.8.2|2|362460 +1.3.6.1.4.1.2021.9.1.9.1|2|18 +1.3.6.1.4.1.2021.9.1.9.2|2|38 +1.3.6.1.4.1.2021.9.1.10.1|2|4 +1.3.6.1.4.1.2021.9.1.10.2|2|17 +1.3.6.1.4.1.2021.9.1.11.1|66|428150 +1.3.6.1.4.1.2021.9.1.11.2|66|943128 +1.3.6.1.4.1.2021.9.1.12.1|66|0 +1.3.6.1.4.1.2021.9.1.12.2|66|0 +1.3.6.1.4.1.2021.9.1.13.1|66|322822 +1.3.6.1.4.1.2021.9.1.13.2|66|515544 +1.3.6.1.4.1.2021.9.1.14.1|66|0 +1.3.6.1.4.1.2021.9.1.14.2|66|0 +1.3.6.1.4.1.2021.9.1.15.1|66|78704 +1.3.6.1.4.1.2021.9.1.15.2|66|362460 +1.3.6.1.4.1.2021.9.1.16.1|66|0 +1.3.6.1.4.1.2021.9.1.16.2|66|0 +1.3.6.1.4.1.2021.9.1.100.1|2|0 +1.3.6.1.4.1.2021.9.1.100.2|2|0 +1.3.6.1.4.1.2021.9.1.101.1|4| +1.3.6.1.4.1.2021.9.1.101.2|4| +1.3.6.1.4.1.2021.10.1.1.1|2|1 +1.3.6.1.4.1.2021.10.1.1.2|2|2 +1.3.6.1.4.1.2021.10.1.1.3|2|3 +1.3.6.1.4.1.2021.10.1.2.1|4x|4c6f61642d31 +1.3.6.1.4.1.2021.10.1.2.2|4x|4c6f61642d35 +1.3.6.1.4.1.2021.10.1.2.3|4x|4c6f61642d3135 +1.3.6.1.4.1.2021.10.1.3.1|4x|302e3237 +1.3.6.1.4.1.2021.10.1.3.2|4x|302e3234 +1.3.6.1.4.1.2021.10.1.3.3|4x|302e3233 +1.3.6.1.4.1.2021.10.1.4.1|4x|31322e3030 +1.3.6.1.4.1.2021.10.1.4.2|4x|31322e3030 +1.3.6.1.4.1.2021.10.1.4.3|4x|31322e3030 +1.3.6.1.4.1.2021.10.1.5.1|2|27 +1.3.6.1.4.1.2021.10.1.5.2|2|24 +1.3.6.1.4.1.2021.10.1.5.3|2|23 +1.3.6.1.4.1.2021.10.1.6.1|68x|9f78043e8a3d71 +1.3.6.1.4.1.2021.10.1.6.2|68x|9f78043e75c28f +1.3.6.1.4.1.2021.10.1.6.3|68x|9f78043e6b851f +1.3.6.1.4.1.2021.10.1.100.1|2|0 +1.3.6.1.4.1.2021.10.1.100.2|2|0 +1.3.6.1.4.1.2021.10.1.100.3|2|0 +1.3.6.1.4.1.2021.10.1.101.1|4| +1.3.6.1.4.1.2021.10.1.101.2|4| +1.3.6.1.4.1.2021.10.1.101.3|4| +1.3.6.1.4.1.2021.11.1.0|2|1 +1.3.6.1.4.1.2021.11.2.0|4|systemStats +1.3.6.1.4.1.2021.11.3.0|2|0 +1.3.6.1.4.1.2021.11.4.0|2|0 +1.3.6.1.4.1.2021.11.5.0|2|82 +1.3.6.1.4.1.2021.11.6.0|2|3 +1.3.6.1.4.1.2021.11.7.0|2|16467 +1.3.6.1.4.1.2021.11.8.0|2|31310 +1.3.6.1.4.1.2021.11.9.0|2|2 +1.3.6.1.4.1.2021.11.10.0|2|3 +1.3.6.1.4.1.2021.11.11.0|2|92 +1.3.6.1.4.1.2021.11.50.0|65|8458649 +1.3.6.1.4.1.2021.11.51.0|65|943954 +1.3.6.1.4.1.2021.11.52.0|65|11839421 +1.3.6.1.4.1.2021.11.53.0|65|318900977 +1.3.6.1.4.1.2021.11.54.0|65|869594 +1.3.6.1.4.1.2021.11.55.0|65|0 +1.3.6.1.4.1.2021.11.56.0|65|0 +1.3.6.1.4.1.2021.11.57.0|65|164771618 +1.3.6.1.4.1.2021.11.58.0|65|71445552 +1.3.6.1.4.1.2021.11.59.0|65|2356812896 +1.3.6.1.4.1.2021.11.60.0|65|1712163215 +1.3.6.1.4.1.2021.11.61.0|65|220796 +1.3.6.1.4.1.2021.11.62.0|65|79704 +1.3.6.1.4.1.2021.11.63.0|65|164009 +1.3.6.1.4.1.2021.11.64.0|65|0 +1.3.6.1.4.1.2021.11.65.0|65|0 +1.3.6.1.4.1.2021.11.66.0|65|0 +1.3.6.1.4.1.2021.13.14.1.0|2|31 +1.3.6.1.4.1.2021.13.14.2.1.2.30|4|bigipTrafficMgmt +1.3.6.1.4.1.2021.13.14.2.1.3.30|4x|2f7573722f6c696236342f6269676970547261666669634d676d742e736f +1.3.6.1.4.1.2021.13.14.2.1.4.30|4| +1.3.6.1.4.1.2021.13.14.2.1.5.30|2|1 +1.3.6.1.4.1.2021.16.1.0|2|250 +1.3.6.1.4.1.2021.100.1.0|2|1 +1.3.6.1.4.1.2021.100.2.0|4x|352e372e32 +1.3.6.1.4.1.2021.100.3.0|4x|244461746524 +1.3.6.1.4.1.2021.100.4.0|4x|4d6f6e204f63742032312030323a33353a30342032303139 +1.3.6.1.4.1.2021.100.5.0|4x|24496424 +1.3.6.1.4.1.2021.100.6.0|4x|20272d2d7072656669783d2f7573722720272d2d737973636f6e666469723d2f6574632720272d2d6c69626469723d2f7573722f6c696236342720272d2d776974682d6f70656e73736c3d2f686f6d652f6635636d2f636d2f626967697031352e302e312f313132383538372f66355f6275696c642f64657666735f7838365f36342f7573722720272d2d656e61626c652d7368617265643d7965732720272d2d656e61626c652d7374617469633d7965732720272d2d64697361626c652d656d6265646465642d7065726c2720272d2d776974682d64656661756c74732720272d2d776974682d6c6962777261702720272d2d776974682d6d6962646972733d2f7573722f73686172652f736e6d702f6d6962732720272d2d776974682d6d6962733d616c6c2720272d2d776974682d64656661756c742d736e6d702d76657273696f6e3d322720272d2d776974682d70657273697374656e742d6469726563746f72793d2f636f6e6669672f6e65742d736e6d702720272d2d776974682d7065726c2d6d6f64756c65733d5052454649583d2f686f6d652f6635636d2f636d2f626967697031352e302e312f313132383538372f66355f6275696c642f5f696e7374726f6f742f7838365f36342f6e65742d736e6d702d352e372e322f75737220494e5354414c4c444952533d76656e646f722720272d2d656e61626c652d697076362720272d2d776974682d656e74657270726973652d6f69643d333337352720272d2d776974682d656e74657270726973652d6e6f74696669636174696f6e2d6f69643d2e312e332e362e312e342e312e333337352e322e342720272d2d776974686f75742d72706d2720272d2d776974682d6f75742d6d69622d6d6f64756c65733d6167656e74206167656e745f6d696273206469736d616e2f6576656e74206469736d616e2f7363686564756c65206d696249492f69665461626c65206d696249492f746370206d696249492f7463705461626c65206d696249492f756470206d696249492f7564705461626c65206d696249492f6970206d696249492f69707636206d696249492f69636d70206d696249492f61742069662d6d69622f6966585461626c652069662d6d69622f69665461626c65207463702d6d69622f746370436f6e6e656374696f6e5461626c65207463702d6d69622f7463704c697374656e65725461626c65207564702d6d69622f756470456e64706f696e745461626c652069702d6d69622f6970416464726573735461626c652069702d6d69622f6970416464726573735072656669785461626c652069702d6d69622f696e65744e6574546f4d656469615461626c652069702d6d69622f697053797374656d53746174735461626c652069702d6d69622f697049665374617473 +1.3.6.1.4.1.2021.100.10.0|2|0 +1.3.6.1.4.1.2021.100.11.0|2|0 +1.3.6.1.4.1.2021.100.12.0|2|0 +1.3.6.1.4.1.2021.100.13.0|2|0 +1.3.6.1.4.1.2021.100.20.0|2|0 +1.3.6.1.4.1.2021.101.1.0|2|0 +1.3.6.1.4.1.2021.101.2.0|4|snmp +1.3.6.1.4.1.2021.101.100.0|2|0 +1.3.6.1.4.1.2021.101.101.0|4| +1.3.6.1.4.1.3375.2.1.1.1.1.1.0|66|8192 +1.3.6.1.4.1.3375.2.1.1.1.1.2.0|2|1 +1.3.6.1.4.1.3375.2.1.1.1.1.3.0|66|300 +1.3.6.1.4.1.3375.2.1.1.1.1.4.0|66|6 +1.3.6.1.4.1.3375.2.1.1.1.1.5.0|2|1 +1.3.6.1.4.1.3375.2.1.1.1.1.6.0|4| +1.3.6.1.4.1.3375.2.1.1.1.1.7.0|66|95 +1.3.6.1.4.1.3375.2.1.1.1.1.8.0|66|85 +1.3.6.1.4.1.3375.2.1.1.1.1.9.0|2|1 +1.3.6.1.4.1.3375.2.1.1.1.1.10.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.11.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.12.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.13.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.14.0|66|0 +1.3.6.1.4.1.3375.2.1.1.1.1.15.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.16.0|66|0 +1.3.6.1.4.1.3375.2.1.1.1.1.17.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.18.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.19.0|66|0 +1.3.6.1.4.1.3375.2.1.1.1.1.20.0|66|0 +1.3.6.1.4.1.3375.2.1.1.1.1.21.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.22.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.23.0|2|1 +1.3.6.1.4.1.3375.2.1.1.1.1.24.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.25.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.26.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.27.0|2|2 +1.3.6.1.4.1.3375.2.1.1.1.1.28.0|66|300 +1.3.6.1.4.1.3375.2.1.1.1.1.29.0|2|1 +1.3.6.1.4.1.3375.2.1.1.2.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.1.2.0|70|465922 +1.3.6.1.4.1.3375.2.1.1.2.1.3.0|70|45551151 +1.3.6.1.4.1.3375.2.1.1.2.1.4.0|70|481666 +1.3.6.1.4.1.3375.2.1.1.2.1.5.0|70|364502697 +1.3.6.1.4.1.3375.2.1.1.2.1.6.0|70|17 +1.3.6.1.4.1.3375.2.1.1.2.1.7.0|70|59597 +1.3.6.1.4.1.3375.2.1.1.2.1.8.0|66|4 +1.3.6.1.4.1.3375.2.1.1.2.1.9.0|70|453523 +1.3.6.1.4.1.3375.2.1.1.2.1.10.0|70|44851350 +1.3.6.1.4.1.3375.2.1.1.2.1.11.0|70|485042 +1.3.6.1.4.1.3375.2.1.1.2.1.12.0|70|364639481 +1.3.6.1.4.1.3375.2.1.1.2.1.13.0|70|17 +1.3.6.1.4.1.3375.2.1.1.2.1.14.0|70|59597 +1.3.6.1.4.1.3375.2.1.1.2.1.15.0|66|4 +1.3.6.1.4.1.3375.2.1.1.2.1.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.22.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.29.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.31.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.34.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.35.0|70|4803 +1.3.6.1.4.1.3375.2.1.1.2.1.36.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.37.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.38.0|70|2 +1.3.6.1.4.1.3375.2.1.1.2.1.39.0|70|2 +1.3.6.1.4.1.3375.2.1.1.2.1.40.0|2|1 +1.3.6.1.4.1.3375.2.1.1.2.1.41.0|70|7248386504413460 +1.3.6.1.4.1.3375.2.1.1.2.1.42.0|70|125154350310912 +1.3.6.1.4.1.3375.2.1.1.2.1.43.0|70|7080812734355185 +1.3.6.1.4.1.3375.2.1.1.2.1.44.0|70|6098518016 +1.3.6.1.4.1.3375.2.1.1.2.1.45.0|70|191364000 +1.3.6.1.4.1.3375.2.1.1.2.1.46.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.47.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.48.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.49.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.50.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.51.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.52.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.53.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.54.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.55.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.56.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.57.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.58.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.59.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.60.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.61.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.62.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.63.0|66|4 +1.3.6.1.4.1.3375.2.1.1.2.1.64.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.65.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.66.0|66|65 +1.3.6.1.4.1.3375.2.1.1.2.1.67.0|66|4790 +1.3.6.1.4.1.3375.2.1.1.2.1.68.0|66|65 +1.3.6.1.4.1.3375.2.1.1.2.1.69.0|66|4877 +1.3.6.1.4.1.3375.2.1.1.2.1.70.0|66|4 +1.3.6.1.4.1.3375.2.1.1.2.1.71.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.72.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.73.0|66|34 +1.3.6.1.4.1.3375.2.1.1.2.1.74.0|66|2524 +1.3.6.1.4.1.3375.2.1.1.2.1.75.0|66|34 +1.3.6.1.4.1.3375.2.1.1.2.1.76.0|66|2854 +1.3.6.1.4.1.3375.2.1.1.2.1.77.0|66|5 +1.3.6.1.4.1.3375.2.1.1.2.1.78.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.79.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.80.0|66|35 +1.3.6.1.4.1.3375.2.1.1.2.1.81.0|66|2587 +1.3.6.1.4.1.3375.2.1.1.2.1.82.0|66|35 +1.3.6.1.4.1.3375.2.1.1.2.1.83.0|66|2919 +1.3.6.1.4.1.3375.2.1.1.2.1.84.0|66|5 +1.3.6.1.4.1.3375.2.1.1.2.1.85.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.86.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.87.0|66|8 +1.3.6.1.4.1.3375.2.1.1.2.1.88.0|66|623 +1.3.6.1.4.1.3375.2.1.1.2.1.89.0|66|8 +1.3.6.1.4.1.3375.2.1.1.2.1.90.0|66|826 +1.3.6.1.4.1.3375.2.1.1.2.1.91.0|66|5 +1.3.6.1.4.1.3375.2.1.1.2.1.92.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.93.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.94.0|66|8 +1.3.6.1.4.1.3375.2.1.1.2.1.95.0|66|635 +1.3.6.1.4.1.3375.2.1.1.2.1.96.0|66|8 +1.3.6.1.4.1.3375.2.1.1.2.1.97.0|66|840 +1.3.6.1.4.1.3375.2.1.1.2.1.98.0|66|5 +1.3.6.1.4.1.3375.2.1.1.2.1.99.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.100.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.101.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.102.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.103.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.104.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.105.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.106.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.107.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.108.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.109.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.110.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.111.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.112.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.113.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.114.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.115.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.116.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.117.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.118.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.119.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.120.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.121.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.122.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.123.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.124.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.125.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.126.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.127.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.128.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.129.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.130.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.131.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.132.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.133.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.134.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.135.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.136.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.137.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.138.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.139.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.140.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.141.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.142.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.143.0|66|5955584 +1.3.6.1.4.1.3375.2.1.1.2.1.144.0|66|186878 +1.3.6.1.4.1.3375.2.1.1.2.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.2.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.2.3.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.2.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.2.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.2.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.2.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.2.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.3.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.3.2.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.3.3.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.3.4.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.3.5.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.4.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.4.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.29.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.34.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.35.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.36.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.37.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.38.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.39.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.40.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.41.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.42.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.43.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.44.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.45.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.46.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.47.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.48.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.49.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.50.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.51.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.52.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.53.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.54.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.55.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.5.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.6.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.6.2.0|70|30 +1.3.6.1.4.1.3375.2.1.1.2.6.3.0|70|15 +1.3.6.1.4.1.3375.2.1.1.2.6.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.6.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.6.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.6.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.6.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.6.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.6.10.0|70|35 +1.3.6.1.4.1.3375.2.1.1.2.6.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.6.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.7.2.0|70|8538932 +1.3.6.1.4.1.3375.2.1.1.2.7.3.0|70|8549205 +1.3.6.1.4.1.3375.2.1.1.2.7.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.17.0|70|69 +1.3.6.1.4.1.3375.2.1.1.2.7.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.8.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.3.0|70|15103 +1.3.6.1.4.1.3375.2.1.1.2.8.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.20.0|70|15103 +1.3.6.1.4.1.3375.2.1.1.2.8.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.9.2.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.9.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.4.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.9.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.7.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.9.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.21.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.9.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.29.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.34.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.35.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.36.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.37.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.38.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.39.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.40.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.41.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.42.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.43.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.44.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.45.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.46.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.47.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.48.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.49.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.50.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.51.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.52.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.9.53.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.9.54.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.9.55.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.56.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.57.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.58.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.59.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.60.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.61.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.62.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.63.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.64.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.65.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.66.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.67.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.68.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.69.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.70.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.71.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.72.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.73.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.74.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.75.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.76.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.77.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.78.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.79.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.80.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.81.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.82.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.83.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.84.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.85.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.86.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.87.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.88.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.89.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.90.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.91.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.92.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.93.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.94.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.95.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.96.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.97.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.98.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.99.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.100.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.101.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.102.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.103.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.104.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.105.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.10.2.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.10.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.4.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.10.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.7.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.10.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.21.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.10.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.29.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.34.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.35.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.36.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.37.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.38.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.39.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.40.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.41.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.42.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.43.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.44.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.45.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.46.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.47.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.48.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.49.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.50.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.51.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.52.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.53.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.54.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.55.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.56.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.57.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.58.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.59.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.60.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.61.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.62.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.63.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.64.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.65.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.66.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.67.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.68.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.69.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.70.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.71.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.72.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.73.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.74.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.75.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.76.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.77.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.78.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.79.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.80.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.81.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.82.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.83.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.84.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.85.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.86.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.87.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.88.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.89.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.90.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.91.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.92.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.93.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.94.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.11.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.11.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.12.2.0|66|8 +1.3.6.1.4.1.3375.2.1.1.2.12.3.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.12.4.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.12.5.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.12.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.8.0|70|8 +1.3.6.1.4.1.3375.2.1.1.2.12.9.0|70|2 +1.3.6.1.4.1.3375.2.1.1.2.12.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.20.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.13.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.13.2.0|66|6 +1.3.6.1.4.1.3375.2.1.1.2.13.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.13.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.13.5.0|70|6 +1.3.6.1.4.1.3375.2.1.1.2.13.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.13.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.13.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.13.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.13.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.13.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.13.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.13.13.0|70|60 +1.3.6.1.4.1.3375.2.1.1.2.14.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.14.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.5.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.14.6.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.14.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.17.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.17.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.17.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.17.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.17.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.18.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.12.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.18.13.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.18.14.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.18.15.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.18.16.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.18.17.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.19.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.19.2.0|66|4 +1.3.6.1.4.1.3375.2.1.1.2.19.3.0|70|59597 +1.3.6.1.4.1.3375.2.1.1.2.19.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.5.0|70|30820 +1.3.6.1.4.1.3375.2.1.1.2.19.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.7.0|70|2 +1.3.6.1.4.1.3375.2.1.1.2.19.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.20.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.20.2.0|70|7844610048 +1.3.6.1.4.1.3375.2.1.1.2.20.3.0|70|1341733792 +1.3.6.1.4.1.3375.2.1.1.2.20.4.0|70|2 +1.3.6.1.4.1.3375.2.1.1.2.20.5.0|70|2 +1.3.6.1.4.1.3375.2.1.1.2.20.6.0|70|4229365 +1.3.6.1.4.1.3375.2.1.1.2.20.7.0|70|471979 +1.3.6.1.4.1.3375.2.1.1.2.20.8.0|70|5919762 +1.3.6.1.4.1.3375.2.1.1.2.20.9.0|70|159451735 +1.3.6.1.4.1.3375.2.1.1.2.20.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.20.11.0|70|110399 +1.3.6.1.4.1.3375.2.1.1.2.20.12.0|70|434800 +1.3.6.1.4.1.3375.2.1.1.2.20.13.0|66|6 +1.3.6.1.4.1.3375.2.1.1.2.20.14.0|66|2 +1.3.6.1.4.1.3375.2.1.1.2.20.15.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.16.0|66|3 +1.3.6.1.4.1.3375.2.1.1.2.20.17.0|66|87 +1.3.6.1.4.1.3375.2.1.1.2.20.18.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.19.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.20.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.21.0|66|6 +1.3.6.1.4.1.3375.2.1.1.2.20.22.0|66|2 +1.3.6.1.4.1.3375.2.1.1.2.20.23.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.24.0|66|3 +1.3.6.1.4.1.3375.2.1.1.2.20.25.0|66|86 +1.3.6.1.4.1.3375.2.1.1.2.20.26.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.27.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.28.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.29.0|66|7 +1.3.6.1.4.1.3375.2.1.1.2.20.30.0|66|2 +1.3.6.1.4.1.3375.2.1.1.2.20.31.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.32.0|66|3 +1.3.6.1.4.1.3375.2.1.1.2.20.33.0|66|87 +1.3.6.1.4.1.3375.2.1.1.2.20.34.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.35.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.36.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.37.0|66|6 +1.3.6.1.4.1.3375.2.1.1.2.20.38.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.20.39.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.40.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.41.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.42.0|66|7660752 +1.3.6.1.4.1.3375.2.1.1.2.20.43.0|66|1310286 +1.3.6.1.4.1.3375.2.1.1.2.20.44.0|70|1746092032 +1.3.6.1.4.1.3375.2.1.1.2.20.45.0|70|1150369792 +1.3.6.1.4.1.3375.2.1.1.2.20.46.0|70|1048571904 +1.3.6.1.4.1.3375.2.1.1.2.20.47.0|70|428797952 +1.3.6.1.4.1.3375.2.1.1.2.20.48.0|66|1705168 +1.3.6.1.4.1.3375.2.1.1.2.20.49.0|66|1123408 +1.3.6.1.4.1.3375.2.1.1.2.20.50.0|66|1023996 +1.3.6.1.4.1.3375.2.1.1.2.20.51.0|66|418748 +1.3.6.1.4.1.3375.2.1.1.2.21.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.21.2.0|70|2 +1.3.6.1.4.1.3375.2.1.1.2.21.3.0|70|466559 +1.3.6.1.4.1.3375.2.1.1.2.21.4.0|70|45598995 +1.3.6.1.4.1.3375.2.1.1.2.21.5.0|70|482303 +1.3.6.1.4.1.3375.2.1.1.2.21.6.0|70|364552584 +1.3.6.1.4.1.3375.2.1.1.2.21.7.0|70|17 +1.3.6.1.4.1.3375.2.1.1.2.21.8.0|70|59597 +1.3.6.1.4.1.3375.2.1.1.2.21.9.0|66|4 +1.3.6.1.4.1.3375.2.1.1.2.21.10.0|70|454160 +1.3.6.1.4.1.3375.2.1.1.2.21.11.0|70|44899349 +1.3.6.1.4.1.3375.2.1.1.2.21.12.0|70|485679 +1.3.6.1.4.1.3375.2.1.1.2.21.13.0|70|364689511 +1.3.6.1.4.1.3375.2.1.1.2.21.14.0|70|17 +1.3.6.1.4.1.3375.2.1.1.2.21.15.0|70|59597 +1.3.6.1.4.1.3375.2.1.1.2.21.16.0|66|4 +1.3.6.1.4.1.3375.2.1.1.2.21.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.21.0|70|4803 +1.3.6.1.4.1.3375.2.1.1.2.21.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.28.0|70|6098518016 +1.3.6.1.4.1.3375.2.1.1.2.21.29.0|70|191364000 +1.3.6.1.4.1.3375.2.1.1.2.21.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.34.0|66|1 +1.3.6.1.4.1.3375.2.1.1.2.21.35.0|66|1 +1.3.6.1.4.1.3375.2.1.1.2.21.36.0|66|1 +1.3.6.1.4.1.3375.2.1.1.2.21.37.0|66|5955584 +1.3.6.1.4.1.3375.2.1.1.2.21.38.0|66|186878 +1.3.6.1.4.1.3375.2.1.1.2.21.39.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.40.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.41.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.42.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.43.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.44.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.45.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.46.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.47.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.22.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.23.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.24.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.29.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.34.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.35.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.36.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.37.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.38.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.39.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.40.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.41.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.42.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.43.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.44.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.45.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.46.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.47.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.48.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.49.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.50.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.51.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.52.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.53.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.54.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.55.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.56.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.57.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.58.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.25.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.25.0|4|0 +1.3.6.1.4.1.3375.2.1.1.2.26.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.26.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.26.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.26.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.26.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.26.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.26.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.26.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.26.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.26.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.26.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.27.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.27.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.27.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.27.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.27.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.28.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.29.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.30.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.30.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.30.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.30.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.30.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.31.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.32.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.32.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.32.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.32.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.33.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.33.2.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.34.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.34.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.34.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.34.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.34.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.34.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.35.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.29.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.34.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.35.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.36.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.37.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.38.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.39.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.40.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.41.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.42.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.43.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.44.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.45.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.36.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.29.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.34.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.35.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.36.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.37.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.36.38.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.36.39.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.36.40.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.37.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.37.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.29.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.34.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.35.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.36.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.37.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.38.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.39.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.40.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.41.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.42.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.43.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.44.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.45.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.46.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.47.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.48.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.49.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.50.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.51.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.52.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.53.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.54.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.55.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.56.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.57.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.58.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.59.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.38.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.29.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.34.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.35.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.36.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.37.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.38.38.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.38.39.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.38.40.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.38.41.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.38.42.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.38.43.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.39.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.39.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.12.0|4|0 +1.3.6.1.4.1.3375.2.1.1.2.39.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.29.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.40.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.40.2.0|2|0 +1.3.6.1.4.1.3375.2.1.2.1.1.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.1.1.2.1.1.1.4.10.164.0.51|2|1 +1.3.6.1.4.1.3375.2.1.2.1.1.2.1.2.1.4.10.164.0.51|4x|0aa40033 +1.3.6.1.4.1.3375.2.1.2.1.1.2.1.3.1.4.10.164.0.51|2|1 +1.3.6.1.4.1.3375.2.1.2.1.1.2.1.4.1.4.10.164.0.51|4x|ffffffff +1.3.6.1.4.1.3375.2.1.2.1.1.2.1.5.1.4.10.164.0.51|4x|31302e3136342e302e3531 +1.3.6.1.4.1.3375.2.1.2.2.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.3.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.3.1.3.0|2|0 +1.3.6.1.4.1.3375.2.1.2.3.1.4.0|2|0 +1.3.6.1.4.1.3375.2.1.2.3.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.1.0|2|2 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.1.3.49.46.48|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.1.4.109.103.109.116|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.2.3.49.46.48|66|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.2.4.109.103.109.116|66|100 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.3.3.49.46.48|2|2 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.3.4.109.103.109.116|2|2 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.4.3.49.46.48|66|10000 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.4.4.109.103.109.116|66|100 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.5.3.49.46.48|2|2 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.5.4.109.103.109.116|2|2 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.6.3.49.46.48|4x|42010aa40033 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.6.4.109.103.109.116|4x|42010aa40033 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.7.3.49.46.48|66|1460 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.7.4.109.103.109.116|66|1460 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.8.3.49.46.48|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.8.4.109.103.109.116|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.9.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.9.4.109.103.109.116|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.10.3.49.46.48|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.10.4.109.103.109.116|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.11.3.49.46.48|2|2 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.11.4.109.103.109.116|2|2 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.12.3.49.46.48|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.12.4.109.103.109.116|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.13.3.49.46.48|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.13.4.109.103.109.116|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.14.3.49.46.48|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.14.4.109.103.109.116|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.15.3.49.46.48|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.15.4.109.103.109.116|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.16.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.16.4.109.103.109.116|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.17.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.17.4.109.103.109.116|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.18.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.18.4.109.103.109.116|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.19.3.49.46.48|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.19.4.109.103.109.116|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.20.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.20.4.109.103.109.116|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.21.3.49.46.48|2|2 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.21.4.109.103.109.116|2|2 +1.3.6.1.4.1.3375.2.1.2.4.2.1.0|2|9 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.1.3.49.46.48.1|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.1.3.49.46.48.2|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.1.3.49.46.48.3|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.1.4.109.103.109.116.1|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.1.4.109.103.109.116.2|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.1.4.109.103.109.116.3|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.1.4.109.103.109.116.4|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.1.4.109.103.109.116.5|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.1.4.109.103.109.116.6|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.2.3.49.46.48.1|2|1 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.2.3.49.46.48.2|2|2 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.2.3.49.46.48.3|2|3 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.2.4.109.103.109.116.1|2|1 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.2.4.109.103.109.116.2|2|2 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.2.4.109.103.109.116.3|2|3 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.2.4.109.103.109.116.4|2|4 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.2.4.109.103.109.116.5|2|5 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.2.4.109.103.109.116.6|2|6 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.3.3.49.46.48.1|2|10 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.3.3.49.46.48.2|2|14 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.3.3.49.46.48.3|2|13 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.3.4.109.103.109.116.1|2|14 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.3.4.109.103.109.116.2|2|13 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.3.4.109.103.109.116.3|2|2 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.3.4.109.103.109.116.4|2|1 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.3.4.109.103.109.116.5|2|4 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.3.4.109.103.109.116.6|2|3 +1.3.6.1.4.1.3375.2.1.2.4.3.1.0|2|2 +1.3.6.1.4.1.3375.2.1.2.4.3.2.1.1.1|2|1 +1.3.6.1.4.1.3375.2.1.2.4.3.2.1.1.2|2|2 +1.3.6.1.4.1.3375.2.1.2.4.3.2.1.2.1|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.4.3.2.1.2.2|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.4.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.4.4.2.0|2|2 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.1.3.49.46.48|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.1.4.109.103.109.116|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.2.3.49.46.48|70|766261 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.2.4.109.103.109.116|70|897197 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.3.3.49.46.48|70|601841092 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.3.4.109.103.109.116|70|457405873 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.4.3.49.46.48|70|490862 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.4.4.109.103.109.116|70|740246 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.5.3.49.46.48|70|63998013 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.5.4.109.103.109.116|70|308487474 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.6.3.49.46.48|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.6.4.109.103.109.116|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.7.3.49.46.48|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.7.4.109.103.109.116|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.8.3.49.46.48|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.8.4.109.103.109.116|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.9.3.49.46.48|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.9.4.109.103.109.116|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.10.3.49.46.48|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.10.4.109.103.109.116|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.11.3.49.46.48|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.11.4.109.103.109.116|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.12.3.49.46.48|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.12.4.109.103.109.116|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.13.3.49.46.48|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.13.4.109.103.109.116|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.14.3.49.46.48|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.14.4.109.103.109.116|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.15.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.15.4.109.103.109.116|2|0 +1.3.6.1.4.1.3375.2.1.2.4.5.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.4.5.2.0|2|0 +1.3.6.1.4.1.3375.2.1.2.4.6.1.0|2|4 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.1.3.49.46.48.1|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.1.3.49.46.48.2|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.1.4.109.103.109.116.1|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.1.4.109.103.109.116.2|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.2.3.49.46.48.1|2|1 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.2.3.49.46.48.2|2|2 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.2.4.109.103.109.116.1|2|1 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.2.4.109.103.109.116.2|2|2 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.3.3.49.46.48.1|2|14 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.3.3.49.46.48.2|2|13 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.3.4.109.103.109.116.1|2|14 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.3.4.109.103.109.116.2|2|13 +1.3.6.1.4.1.3375.2.1.2.4.7.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.5.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.5.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.5.3.1.0|4|all +1.3.6.1.4.1.3375.2.1.2.6.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.6.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.6.3.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.6.4.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.6.5.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.6.5.2.0|2|0 +1.3.6.1.4.1.3375.2.1.2.7.1.1.0|2|2 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.1.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|1 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.1.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|1 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.2.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4x|00000000 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.2.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4x|0aa40001 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.3.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|1 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.3.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|1 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.4.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4x|00000000 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.4.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4x|ffffffff +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.5.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|0 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.5.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|2 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.6.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|1 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.6.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|2 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.7.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4x|0aa40001 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.7.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.8.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|0 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.8.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|0 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.9.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4x|2f436f6d6d6f6e2f64656661756c74 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.9.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4x|2f436f6d6d6f6e2f6468636c69656e745f726f75746531 +1.3.6.1.4.1.3375.2.1.2.7.2.1.0|2|2 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.1.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|1 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.1.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|1 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.2.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4x|00000000 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.2.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4x|0aa40001 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.3.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|1 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.3.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|1 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.4.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4x|00000000 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.4.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4x|ffffffff +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.5.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|0 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.5.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|2 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.6.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4| +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.6.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.7.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|1 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.7.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|2 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.8.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4x|0aa40001 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.8.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.9.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4| +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.9.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4| +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.10.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|0 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.10.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|0 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.11.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4x|2f436f6d6d6f6e2f64656661756c74 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.11.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4x|2f436f6d6d6f6e2f6468636c69656e745f726f75746531 +1.3.6.1.4.1.3375.2.1.2.8.1.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.8.1.2.1.1.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99|2|1 +1.3.6.1.4.1.3375.2.1.2.8.1.2.1.2.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99|4x|0aa40033 +1.3.6.1.4.1.3375.2.1.2.8.1.2.1.3.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99|2|1 +1.3.6.1.4.1.3375.2.1.2.8.1.2.1.4.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99|4x|ffffffff +1.3.6.1.4.1.3375.2.1.2.8.1.2.1.5.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99|66|0 +1.3.6.1.4.1.3375.2.1.2.8.1.2.1.6.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99|2|0 +1.3.6.1.4.1.3375.2.1.2.8.1.2.1.7.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.4.1.3375.2.1.2.8.1.2.1.8.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99|4x|2f436f6d6d6f6e2f73656c665f316e6963 +1.3.6.1.4.1.3375.2.1.2.9.1.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.9.1.2.1.1.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99.256.0|2|2 +1.3.6.1.4.1.3375.2.1.2.9.1.2.1.2.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99.256.0|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.1.2.9.1.2.1.3.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99.256.0|2|256 +1.3.6.1.4.1.3375.2.1.2.9.1.2.1.4.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99.256.0|66|0 +1.3.6.1.4.1.3375.2.1.2.9.1.2.1.5.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99.256.0|4x|2f436f6d6d6f6e2f73656c665f316e6963 +1.3.6.1.4.1.3375.2.1.2.9.2.1.0|2|13 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.2.0|2|2 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.22|2|6 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.53|2|6 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.161|2|6 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.4353|2|6 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.8443|2|6 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.53|2|17 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.161|2|17 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.520|2|17 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.1026|2|17 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.4353|2|17 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.89.0|2|89 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.103.0|2|103 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.2.0|66|0 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.22|66|22 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.53|66|53 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.161|66|161 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.4353|66|4353 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.8443|66|8443 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.53|66|53 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.161|66|161 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.520|66|520 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.1026|66|1026 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.4353|66|4353 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.89.0|66|0 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.103.0|66|0 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.2.0|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.22|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.53|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.161|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.4353|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.8443|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.53|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.161|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.520|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.1026|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.4353|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.89.0|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.103.0|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.10.1.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.10.1.2.1.1.12.47.67.111.109.109.111.110.47.99.105.115.116|66|0 +1.3.6.1.4.1.3375.2.1.2.10.1.2.1.2.12.47.67.111.109.109.111.110.47.99.105.115.116|2|61440 +1.3.6.1.4.1.3375.2.1.2.10.1.2.1.3.12.47.67.111.109.109.111.110.47.99.105.115.116|4x|000000000000 +1.3.6.1.4.1.3375.2.1.2.10.1.2.1.4.12.47.67.111.109.109.111.110.47.99.105.115.116|4x|000000000000 +1.3.6.1.4.1.3375.2.1.2.10.1.2.1.5.12.47.67.111.109.109.111.110.47.99.105.115.116|4x|2f436f6d6d6f6e2f63697374 +1.3.6.1.4.1.3375.2.1.2.10.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.2.2.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.2.3.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.2.4.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.2.5.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.2.6.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.2.7.0|4| +1.3.6.1.4.1.3375.2.1.2.10.2.8.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.3.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.10.3.2.1.1.12.47.67.111.109.109.111.110.47.99.105.115.116.3.49.46.48|66|0 +1.3.6.1.4.1.3375.2.1.2.10.3.2.1.2.12.47.67.111.109.109.111.110.47.99.105.115.116.3.49.46.48|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.10.3.2.1.3.12.47.67.111.109.109.111.110.47.99.105.115.116.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.10.3.2.1.4.12.47.67.111.109.109.111.110.47.99.105.115.116.3.49.46.48|2|5 +1.3.6.1.4.1.3375.2.1.2.10.3.2.1.5.12.47.67.111.109.109.111.110.47.99.105.115.116.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.10.3.2.1.6.12.47.67.111.109.109.111.110.47.99.105.115.116.3.49.46.48|2|128 +1.3.6.1.4.1.3375.2.1.2.10.3.2.1.7.12.47.67.111.109.109.111.110.47.99.105.115.116.3.49.46.48|66|500 +1.3.6.1.4.1.3375.2.1.2.10.3.2.1.8.12.47.67.111.109.109.111.110.47.99.105.115.116.3.49.46.48|2|5 +1.3.6.1.4.1.3375.2.1.2.10.3.2.1.9.12.47.67.111.109.109.111.110.47.99.105.115.116.3.49.46.48|4x|2f436f6d6d6f6e2f63697374 +1.3.6.1.4.1.3375.2.1.2.10.4.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.10.4.2.1.1.12.47.67.111.109.109.111.110.47.99.105.115.116.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|66|0 +1.3.6.1.4.1.3375.2.1.2.10.4.2.1.2.12.47.67.111.109.109.111.110.47.99.105.115.116.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.4.1.3375.2.1.2.10.4.2.1.3.12.47.67.111.109.109.111.110.47.99.105.115.116.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|4x|2f436f6d6d6f6e2f63697374 +1.3.6.1.4.1.3375.2.1.2.10.5.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.5.2.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.5.3.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.5.4.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.5.5.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.5.6.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.5.7.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.5.8.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.5.9.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.5.10.0|66|0 +1.3.6.1.4.1.3375.2.1.2.10.5.11.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.6.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.7.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.7.2.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.8.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.9.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.10.9.2.1.1.19.47.67.111.109.109.111.110.47.115.116.112.45.103.108.111.98.97.108.115|2|4 +1.3.6.1.4.1.3375.2.1.2.10.9.2.1.2.19.47.67.111.109.109.111.110.47.115.116.112.45.103.108.111.98.97.108.115|2|15 +1.3.6.1.4.1.3375.2.1.2.10.9.2.1.3.19.47.67.111.109.109.111.110.47.115.116.112.45.103.108.111.98.97.108.115|2|2 +1.3.6.1.4.1.3375.2.1.2.10.9.2.1.4.19.47.67.111.109.109.111.110.47.115.116.112.45.103.108.111.98.97.108.115|2|20 +1.3.6.1.4.1.3375.2.1.2.10.9.2.1.5.19.47.67.111.109.109.111.110.47.115.116.112.45.103.108.111.98.97.108.115|2|6 +1.3.6.1.4.1.3375.2.1.2.10.9.2.1.6.19.47.67.111.109.109.111.110.47.115.116.112.45.103.108.111.98.97.108.115|2|20 +1.3.6.1.4.1.3375.2.1.2.10.9.2.1.7.19.47.67.111.109.109.111.110.47.115.116.112.45.103.108.111.98.97.108.115|4| +1.3.6.1.4.1.3375.2.1.2.10.9.2.1.8.19.47.67.111.109.109.111.110.47.115.116.112.45.103.108.111.98.97.108.115|2|0 +1.3.6.1.4.1.3375.2.1.2.10.9.2.1.9.19.47.67.111.109.109.111.110.47.115.116.112.45.103.108.111.98.97.108.115|4x|2f436f6d6d6f6e2f7374702d676c6f62616c73 +1.3.6.1.4.1.3375.2.1.2.11.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.11.1.2.0|2|0 +1.3.6.1.4.1.3375.2.1.2.12.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.12.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.12.2.2.0|2|0 +1.3.6.1.4.1.3375.2.1.2.12.3.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.13.1.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.1.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.2.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|2|4094 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.3.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|2|0 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.4.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|4x|000000000000 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.5.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|4x|42010aa40033 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.6.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|2|0 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.7.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|2|0 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.8.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|2|1460 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.9.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|66|90 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.10.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|2|7 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.11.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|2|0 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.12.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|2|0 +1.3.6.1.4.1.3375.2.1.2.13.2.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.13.2.2.1.1.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108.3.49.46.48|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.13.2.2.1.2.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108.3.49.46.48|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.4.1.3375.2.1.2.13.2.2.1.3.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.13.2.2.1.4.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.13.3.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.13.4.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.13.5.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.13.6.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.1.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.2.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|766453 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.3.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|601860927 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.4.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|491054 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.5.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|64018584 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.6.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|0 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.7.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|0 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.8.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|0 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.9.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|0 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.10.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|0 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.11.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|0 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.12.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|0 +1.3.6.1.4.1.3375.2.1.2.13.7.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.14.1.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.1.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|2f436f6d6d6f6e2f626967697031 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.2.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|0aa40033 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.3.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|2|1 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.4.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|66352d6269672d69702d6164632d676f6f642d62796f6c2d312d766d2e632e64617461646f672d696e746567726174696f6e732d6c61622e696e7465726e616c +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.5.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.6.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|2|2 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.7.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.8.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|2|2 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.9.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4| +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.10.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.11.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|2|2 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.12.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|66|0 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.13.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|31352e302e31 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.14.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|4249472d4950 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.15.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4|Final +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.16.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|4249472d4950205669727475616c2045646974696f6e +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.17.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4|Z100 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.18.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|32366666346134642d313930652d313261632d643432353765643336626136 +1.3.6.1.4.1.3375.2.1.2.14.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.14.4.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.14.4.2.1.1.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49.1|4x|2f436f6d6d6f6e2f626967697031 +1.3.6.1.4.1.3375.2.1.2.14.4.2.1.2.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49.1|2|1 +1.3.6.1.4.1.3375.2.1.2.14.4.2.1.3.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49.1|4x|4249472d49502c20564520547269616c7c424f504a5743432d55454352574b4f7c526174652053686170696e677c45787465726e616c20496e7465726661636520616e64204e6574776f726b2048534d2c2056457c53444e2053657276696365732c2056457c53534c2c20466f72776172642050726f78792c2056457c4249472d49502056452c204d756c74696361737420526f7574696e677c41504d2c204c696d697465647c53534c2c2056457c444e532028314b20515053292c2056457c526f7574696e672042756e646c652c2056457c41534d2c2056457c43727974706f204f66666c6f61642c2056452c20546965722031202832354d202d203230304d297c4d617820436f6d7072657373696f6e2c2056457c41464d2c2056457c444e535345437c416e74692d566972757320436865636b737c4261736520456e64706f696e7420536563757269747920436865636b737c4669726577616c6c20436865636b737c4e6574776f726b204163636573737c536563757265205669727475616c204b6579626f6172647c41504d2c20576562204170706c69636174696f6e7c4d616368696e6520436572746966696361746520436865636b737c50726f74656374656420576f726b73706163657c52656d6f7465204465736b746f707c4170702054756e6e656c7c56452c2043617272696572204772616465204e4154202841464d204f4e4c59297c50534d2c205645 +1.3.6.1.4.1.3375.2.1.2.14.5.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.14.6.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.14.7.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.15.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.15.1.2.0|2|0 +1.3.6.1.4.1.3375.2.1.2.16.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.17.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.17.1.2.0|2|0 +1.3.6.1.4.1.3375.2.1.3.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.3.2.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.3.2.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.3.2.3.1.0|2|0 +1.3.6.1.4.1.3375.2.1.3.2.4.1.0|2|0 +1.3.6.1.4.1.3375.2.1.3.2.5.1.0|2|0 +1.3.6.1.4.1.3375.2.1.3.3.1.0|4|Z100 +1.3.6.1.4.1.3375.2.1.3.3.2.0|4|deprecated +1.3.6.1.4.1.3375.2.1.3.3.3.0|4x|32366666346134642d313930652d313261632d643432353765643336626136 +1.3.6.1.4.1.3375.2.1.3.5.1.0|4|Z100 +1.3.6.1.4.1.3375.2.1.3.5.2.0|4x|4249472d4950205669727475616c2045646974696f6e +1.3.6.1.4.1.3375.2.1.3.6.1.0|2|0 +1.3.6.1.4.1.3375.2.1.4.1.0|4x|4249472d4950 +1.3.6.1.4.1.3375.2.1.4.2.0|4x|31352e302e31 +1.3.6.1.4.1.3375.2.1.4.3.0|4x|302e302e3131 +1.3.6.1.4.1.3375.2.1.4.4.0|4|Final +1.3.6.1.4.1.3375.2.1.4.5.0|4x|467269204175672020322032313a33383a3033205044542032303139 +1.3.6.1.4.1.3375.2.1.4.6.0|4|deprecated +1.3.6.1.4.1.3375.2.1.5.1.0|2|0 +1.3.6.1.4.1.3375.2.1.5.2.0|2|0 +1.3.6.1.4.1.3375.2.1.6.1.0|4|Linux +1.3.6.1.4.1.3375.2.1.6.2.0|4x|66352d6269672d69702d6164632d676f6f642d62796f6c2d312d766d2e632e64617461646f672d696e746567726174696f6e732d6c61622e696e7465726e616c +1.3.6.1.4.1.3375.2.1.6.3.0|4x|332e31302e302d3836322e31342e342e656c372e76652e7838365f3634 +1.3.6.1.4.1.3375.2.1.6.4.0|4x|233120534d50204672692041756720322031393a33343a3135205044542032303139 +1.3.6.1.4.1.3375.2.1.6.5.0|4x|7838365f3634 +1.3.6.1.4.1.3375.2.1.6.6.0|67|181588900 +1.3.6.1.4.1.3375.2.1.6.7.0|66|1815889 +1.3.6.1.4.1.3375.2.1.7.1.1.0|70|7844610048 +1.3.6.1.4.1.3375.2.1.7.1.2.0|70|1341751080 +1.3.6.1.4.1.3375.2.1.7.1.3.0|66|7660752 +1.3.6.1.4.1.3375.2.1.7.1.4.0|66|1310303 +1.3.6.1.4.1.3375.2.1.7.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.7.3.1.0|2|8 +1.3.6.1.4.1.3375.2.1.7.3.2.1.1.1.47|4x|2f +1.3.6.1.4.1.3375.2.1.7.3.2.1.1.4.47.117.115.114|4x|2f757372 +1.3.6.1.4.1.3375.2.1.7.3.2.1.1.4.47.118.97.114|4x|2f766172 +1.3.6.1.4.1.3375.2.1.7.3.2.1.1.7.47.99.111.110.102.105.103|4x|2f636f6e666967 +1.3.6.1.4.1.3375.2.1.7.3.2.1.1.7.47.115.104.97.114.101.100|4x|2f736861726564 +1.3.6.1.4.1.3375.2.1.7.3.2.1.1.8.47.97.112.112.100.97.116.97|4x|2f61707064617461 +1.3.6.1.4.1.3375.2.1.7.3.2.1.1.8.47.118.97.114.47.108.111.103|4x|2f7661722f6c6f67 +1.3.6.1.4.1.3375.2.1.7.3.2.1.1.14.47.118.97.114.47.110.97.109.101.100.47.108.105.98|4x|2f7661722f6e616d65642f6c6962 +1.3.6.1.4.1.3375.2.1.7.3.2.1.2.1.47|66|1024 +1.3.6.1.4.1.3375.2.1.7.3.2.1.2.4.47.117.115.114|66|4096 +1.3.6.1.4.1.3375.2.1.7.3.2.1.2.4.47.118.97.114|66|4096 +1.3.6.1.4.1.3375.2.1.7.3.2.1.2.7.47.99.111.110.102.105.103|66|1024 +1.3.6.1.4.1.3375.2.1.7.3.2.1.2.7.47.115.104.97.114.101.100|66|4096 +1.3.6.1.4.1.3375.2.1.7.3.2.1.2.8.47.97.112.112.100.97.116.97|66|1024 +1.3.6.1.4.1.3375.2.1.7.3.2.1.2.8.47.118.97.114.47.108.111.103|66|4096 +1.3.6.1.4.1.3375.2.1.7.3.2.1.2.14.47.118.97.114.47.110.97.109.101.100.47.108.105.98|66|4096 +1.3.6.1.4.1.3375.2.1.7.3.2.1.3.1.47|66|428150 +1.3.6.1.4.1.3375.2.1.7.3.2.1.3.4.47.117.115.114|66|1296662 +1.3.6.1.4.1.3375.2.1.7.3.2.1.3.4.47.118.97.114|66|235782 +1.3.6.1.4.1.3375.2.1.7.3.2.1.3.7.47.99.111.110.102.105.103|66|479716 +1.3.6.1.4.1.3375.2.1.7.3.2.1.3.7.47.115.104.97.114.101.100|66|3837692 +1.3.6.1.4.1.3375.2.1.7.3.2.1.3.8.47.97.112.112.100.97.116.97|66|31729 +1.3.6.1.4.1.3375.2.1.7.3.2.1.3.8.47.118.97.114.47.108.111.103|66|247878 +1.3.6.1.4.1.3375.2.1.7.3.2.1.3.14.47.118.97.114.47.110.97.109.101.100.47.108.105.98|66|235782 +1.3.6.1.4.1.3375.2.1.7.3.2.1.4.1.47|66|322822 +1.3.6.1.4.1.3375.2.1.7.3.2.1.4.4.47.117.115.114|66|184613 +1.3.6.1.4.1.3375.2.1.7.3.2.1.4.4.47.118.97.114|66|128886 +1.3.6.1.4.1.3375.2.1.7.3.2.1.4.7.47.99.111.110.102.105.103|66|435708 +1.3.6.1.4.1.3375.2.1.7.3.2.1.4.7.47.115.104.97.114.101.100|66|3593837 +1.3.6.1.4.1.3375.2.1.7.3.2.1.4.8.47.97.112.112.100.97.116.97|66|25575 +1.3.6.1.4.1.3375.2.1.7.3.2.1.4.8.47.118.97.114.47.108.111.103|66|125719 +1.3.6.1.4.1.3375.2.1.7.3.2.1.4.14.47.118.97.114.47.110.97.109.101.100.47.108.105.98|66|128886 +1.3.6.1.4.1.3375.2.1.7.3.2.1.5.1.47|66|112640 +1.3.6.1.4.1.3375.2.1.7.3.2.1.5.4.47.117.115.114|66|338016 +1.3.6.1.4.1.3375.2.1.7.3.2.1.5.4.47.118.97.114|66|60928 +1.3.6.1.4.1.3375.2.1.7.3.2.1.5.7.47.99.111.110.102.105.103|66|125984 +1.3.6.1.4.1.3375.2.1.7.3.2.1.5.7.47.115.104.97.114.101.100|66|983040 +1.3.6.1.4.1.3375.2.1.7.3.2.1.5.8.47.97.112.112.100.97.116.97|66|8192 +1.3.6.1.4.1.3375.2.1.7.3.2.1.5.8.47.118.97.114.47.108.111.103|66|64000 +1.3.6.1.4.1.3375.2.1.7.3.2.1.5.14.47.118.97.114.47.110.97.109.101.100.47.108.105.98|66|60928 +1.3.6.1.4.1.3375.2.1.7.3.2.1.6.1.47|66|108402 +1.3.6.1.4.1.3375.2.1.7.3.2.1.6.4.47.117.115.114|66|253046 +1.3.6.1.4.1.3375.2.1.7.3.2.1.6.4.47.118.97.114|66|50550 +1.3.6.1.4.1.3375.2.1.7.3.2.1.6.7.47.99.111.110.102.105.103|66|125686 +1.3.6.1.4.1.3375.2.1.7.3.2.1.6.7.47.115.104.97.114.101.100|66|982681 +1.3.6.1.4.1.3375.2.1.7.3.2.1.6.8.47.97.112.112.100.97.116.97|66|8176 +1.3.6.1.4.1.3375.2.1.7.3.2.1.6.8.47.118.97.114.47.108.111.103|66|63760 +1.3.6.1.4.1.3375.2.1.7.3.2.1.6.14.47.118.97.114.47.110.97.109.101.100.47.108.105.98|66|50550 +1.3.6.1.4.1.3375.2.1.7.4.1.0|2|1 +1.3.6.1.4.1.3375.2.1.7.4.2.1.1.1.48|4|0 +1.3.6.1.4.1.3375.2.1.7.4.2.1.2.1.48|70|7844610048 +1.3.6.1.4.1.3375.2.1.7.4.2.1.3.1.48|70|1341877992 +1.3.6.1.4.1.3375.2.1.7.4.2.1.4.1.48|2|1 +1.3.6.1.4.1.3375.2.1.7.4.2.1.5.1.48|70|2 +1.3.6.1.4.1.3375.2.1.7.4.2.1.6.1.48|70|2 +1.3.6.1.4.1.3375.2.1.7.4.2.1.7.1.48|70|1746092032 +1.3.6.1.4.1.3375.2.1.7.4.2.1.8.1.48|70|1150513152 +1.3.6.1.4.1.3375.2.1.7.4.2.1.9.1.48|70|1048571904 +1.3.6.1.4.1.3375.2.1.7.4.2.1.10.1.48|70|428797952 +1.3.6.1.4.1.3375.2.1.7.4.2.1.11.1.48|66|7660752 +1.3.6.1.4.1.3375.2.1.7.4.2.1.12.1.48|66|1310427 +1.3.6.1.4.1.3375.2.1.7.4.2.1.13.1.48|66|1705168 +1.3.6.1.4.1.3375.2.1.7.4.2.1.14.1.48|66|1123548 +1.3.6.1.4.1.3375.2.1.7.4.2.1.15.1.48|66|1023996 +1.3.6.1.4.1.3375.2.1.7.4.2.1.16.1.48|66|418748 +1.3.6.1.4.1.3375.2.1.7.5.1.0|2|2 +1.3.6.1.4.1.3375.2.1.7.5.2.1.1.1.48.1|4|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.1.1.48.2|4|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.2.1.48.1|2|1 +1.3.6.1.4.1.3375.2.1.7.5.2.1.2.1.48.2|2|2 +1.3.6.1.4.1.3375.2.1.7.5.2.1.3.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.3.1.48.2|66|1 +1.3.6.1.4.1.3375.2.1.7.5.2.1.4.1.48.1|70|3990585 +1.3.6.1.4.1.3375.2.1.7.5.2.1.4.1.48.2|70|4468255 +1.3.6.1.4.1.3375.2.1.7.5.2.1.5.1.48.1|70|474468 +1.3.6.1.4.1.3375.2.1.7.5.2.1.5.1.48.2|70|469498 +1.3.6.1.4.1.3375.2.1.7.5.2.1.6.1.48.1|70|5873688 +1.3.6.1.4.1.3375.2.1.7.5.2.1.6.1.48.2|70|5965975 +1.3.6.1.4.1.3375.2.1.7.5.2.1.7.1.48.1|70|159394504 +1.3.6.1.4.1.3375.2.1.7.5.2.1.7.1.48.2|70|159512430 +1.3.6.1.4.1.3375.2.1.7.5.2.1.8.1.48.1|70|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.8.1.48.2|70|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.9.1.48.1|70|120654 +1.3.6.1.4.1.3375.2.1.7.5.2.1.9.1.48.2|70|100147 +1.3.6.1.4.1.3375.2.1.7.5.2.1.10.1.48.1|70|463951 +1.3.6.1.4.1.3375.2.1.7.5.2.1.10.1.48.2|70|405665 +1.3.6.1.4.1.3375.2.1.7.5.2.1.11.1.48.1|66|5 +1.3.6.1.4.1.3375.2.1.7.5.2.1.11.1.48.2|66|7 +1.3.6.1.4.1.3375.2.1.7.5.2.1.12.1.48.1|66|2 +1.3.6.1.4.1.3375.2.1.7.5.2.1.12.1.48.2|66|3 +1.3.6.1.4.1.3375.2.1.7.5.2.1.13.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.13.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.14.1.48.1|66|3 +1.3.6.1.4.1.3375.2.1.7.5.2.1.14.1.48.2|66|4 +1.3.6.1.4.1.3375.2.1.7.5.2.1.15.1.48.1|66|87 +1.3.6.1.4.1.3375.2.1.7.5.2.1.15.1.48.2|66|86 +1.3.6.1.4.1.3375.2.1.7.5.2.1.16.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.16.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.17.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.17.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.18.1.48.1|66|1 +1.3.6.1.4.1.3375.2.1.7.5.2.1.18.1.48.2|66|1 +1.3.6.1.4.1.3375.2.1.7.5.2.1.19.1.48.1|66|6 +1.3.6.1.4.1.3375.2.1.7.5.2.1.19.1.48.2|66|7 +1.3.6.1.4.1.3375.2.1.7.5.2.1.20.1.48.1|66|2 +1.3.6.1.4.1.3375.2.1.7.5.2.1.20.1.48.2|66|3 +1.3.6.1.4.1.3375.2.1.7.5.2.1.21.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.21.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.22.1.48.1|66|3 +1.3.6.1.4.1.3375.2.1.7.5.2.1.22.1.48.2|66|4 +1.3.6.1.4.1.3375.2.1.7.5.2.1.23.1.48.1|66|87 +1.3.6.1.4.1.3375.2.1.7.5.2.1.23.1.48.2|66|86 +1.3.6.1.4.1.3375.2.1.7.5.2.1.24.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.24.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.25.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.25.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.26.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.26.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.27.1.48.1|66|7 +1.3.6.1.4.1.3375.2.1.7.5.2.1.27.1.48.2|66|7 +1.3.6.1.4.1.3375.2.1.7.5.2.1.28.1.48.1|66|2 +1.3.6.1.4.1.3375.2.1.7.5.2.1.28.1.48.2|66|3 +1.3.6.1.4.1.3375.2.1.7.5.2.1.29.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.29.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.30.1.48.1|66|3 +1.3.6.1.4.1.3375.2.1.7.5.2.1.30.1.48.2|66|3 +1.3.6.1.4.1.3375.2.1.7.5.2.1.31.1.48.1|66|87 +1.3.6.1.4.1.3375.2.1.7.5.2.1.31.1.48.2|66|87 +1.3.6.1.4.1.3375.2.1.7.5.2.1.32.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.32.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.33.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.33.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.34.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.34.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.35.1.48.1|66|6 +1.3.6.1.4.1.3375.2.1.7.5.2.1.35.1.48.2|66|6 +1.3.6.1.4.1.3375.2.1.7.5.2.1.36.1.48.1|70|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.36.1.48.2|70|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.37.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.37.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.38.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.38.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.39.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.39.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.40.1.48.1|2|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.40.1.48.2|2|0 +1.3.6.1.4.1.3375.2.1.7.6.1.0|2|1 +1.3.6.1.4.1.3375.2.1.7.6.2.1.1.0.3.72.68.49|2|0 +1.3.6.1.4.1.3375.2.1.7.6.2.1.2.0.3.72.68.49|4|HD1 +1.3.6.1.4.1.3375.2.1.7.6.2.1.3.0.3.72.68.49|4|sda +1.3.6.1.4.1.3375.2.1.7.6.2.1.4.0.3.72.68.49|4|hd +1.3.6.1.4.1.3375.2.1.7.6.2.1.5.0.3.72.68.49|66|40960 +1.3.6.1.4.1.3375.2.1.7.6.2.1.6.0.3.72.68.49|4|volumes +1.3.6.1.4.1.3375.2.1.7.7.1.0|2|1 +1.3.6.1.4.1.3375.2.1.7.7.2.1.1.10.118.105.114.116.105.111.45.115.100.97|4x|76697274696f2d736461 +1.3.6.1.4.1.3375.2.1.7.7.2.1.2.10.118.105.114.116.105.111.45.115.100.97|2|0 +1.3.6.1.4.1.3375.2.1.7.7.2.1.3.10.118.105.114.116.105.111.45.115.100.97|4|HD1 +1.3.6.1.4.1.3375.2.1.7.7.2.1.4.10.118.105.114.116.105.111.45.115.100.97|2|0 +1.3.6.1.4.1.3375.2.1.7.7.2.1.5.10.118.105.114.116.105.111.45.115.100.97|2|0 +1.3.6.1.4.1.3375.2.1.7.8.1.0|2|0 +1.3.6.1.4.1.3375.2.1.7.9.1.0|2|1 +1.3.6.1.4.1.3375.2.1.7.9.2.1.1.3.115.100.97.10.118.105.114.116.105.111.45.115.100.97|4|sda +1.3.6.1.4.1.3375.2.1.7.9.2.1.2.3.115.100.97.10.118.105.114.116.105.111.45.115.100.97|4x|76697274696f2d736461 +1.3.6.1.4.1.3375.2.1.7.9.2.1.3.3.115.100.97.10.118.105.114.116.105.111.45.115.100.97|2|0 +1.3.6.1.4.1.3375.2.1.8.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.8.1.2.0|2|2 +1.3.6.1.4.1.3375.2.1.8.1.3.1.1.3.48.46.48|4x|302e30 +1.3.6.1.4.1.3375.2.1.8.1.3.1.1.3.48.46.49|4x|302e31 +1.3.6.1.4.1.3375.2.1.8.1.3.1.2.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.2.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.3.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.3.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.4.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.4.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.5.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.5.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.6.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.6.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.7.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.7.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.8.3.48.46.48|66|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.8.3.48.46.49|66|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.9.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.9.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.10.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.10.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.11.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.11.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.12.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.12.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.13.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.13.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.14.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.14.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.15.3.48.46.48|66|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.15.3.48.46.49|66|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.16.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.16.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.17.3.48.46.48|66|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.17.3.48.46.49|66|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.18.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.18.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.19.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.19.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.8.2.2.0|2|2 +1.3.6.1.4.1.3375.2.1.8.2.3.1.1.3.48.46.48|4x|302e30 +1.3.6.1.4.1.3375.2.1.8.2.3.1.1.3.48.46.49|4x|302e31 +1.3.6.1.4.1.3375.2.1.8.2.3.1.2.3.48.46.48|70|30092 +1.3.6.1.4.1.3375.2.1.8.2.3.1.2.3.48.46.49|70|30092 +1.3.6.1.4.1.3375.2.1.8.2.3.1.3.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.3.3.48.46.49|70|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.4.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.4.3.48.46.49|70|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.5.3.48.46.48|70|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.5.3.48.46.49|70|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.6.3.48.46.48|70|324182 +1.3.6.1.4.1.3375.2.1.8.2.3.1.6.3.48.46.49|70|143341 +1.3.6.1.4.1.3375.2.1.8.2.3.1.7.3.48.46.48|70|24129976 +1.3.6.1.4.1.3375.2.1.8.2.3.1.7.3.48.46.49|70|21545233 +1.3.6.1.4.1.3375.2.1.8.2.3.1.8.3.48.46.48|70|340082 +1.3.6.1.4.1.3375.2.1.8.2.3.1.8.3.48.46.49|70|143186 +1.3.6.1.4.1.3375.2.1.8.2.3.1.9.3.48.46.48|70|334863650 +1.3.6.1.4.1.3375.2.1.8.2.3.1.9.3.48.46.49|70|29776444 +1.3.6.1.4.1.3375.2.1.8.2.3.1.10.3.48.46.48|70|15 +1.3.6.1.4.1.3375.2.1.8.2.3.1.10.3.48.46.49|70|17 +1.3.6.1.4.1.3375.2.1.8.2.3.1.11.3.48.46.48|70|45009 +1.3.6.1.4.1.3375.2.1.8.2.3.1.11.3.48.46.49|70|14590 +1.3.6.1.4.1.3375.2.1.8.2.3.1.12.3.48.46.48|66|4 +1.3.6.1.4.1.3375.2.1.8.2.3.1.12.3.48.46.49|66|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.13.3.48.46.48|70|311782 +1.3.6.1.4.1.3375.2.1.8.2.3.1.13.3.48.46.49|70|143340 +1.3.6.1.4.1.3375.2.1.8.2.3.1.14.3.48.46.48|70|23430711 +1.3.6.1.4.1.3375.2.1.8.2.3.1.14.3.48.46.49|70|21545193 +1.3.6.1.4.1.3375.2.1.8.2.3.1.15.3.48.46.48|70|343457 +1.3.6.1.4.1.3375.2.1.8.2.3.1.15.3.48.46.49|70|143185 +1.3.6.1.4.1.3375.2.1.8.2.3.1.16.3.48.46.48|70|335001017 +1.3.6.1.4.1.3375.2.1.8.2.3.1.16.3.48.46.49|70|29776404 +1.3.6.1.4.1.3375.2.1.8.2.3.1.17.3.48.46.48|70|15 +1.3.6.1.4.1.3375.2.1.8.2.3.1.17.3.48.46.49|70|17 +1.3.6.1.4.1.3375.2.1.8.2.3.1.18.3.48.46.48|70|45009 +1.3.6.1.4.1.3375.2.1.8.2.3.1.18.3.48.46.49|70|14590 +1.3.6.1.4.1.3375.2.1.8.2.3.1.19.3.48.46.48|66|4 +1.3.6.1.4.1.3375.2.1.8.2.3.1.19.3.48.46.49|66|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.20.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.20.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.21.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.21.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.22.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.22.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.23.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.23.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.24.3.48.46.48|70|4803 +1.3.6.1.4.1.3375.2.1.8.2.3.1.24.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.25.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.25.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.26.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.26.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.27.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.27.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.28.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.28.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.29.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.29.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.30.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.30.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.31.3.48.46.48|70|6098518016 +1.3.6.1.4.1.3375.2.1.8.2.3.1.31.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.32.3.48.46.48|70|191364840 +1.3.6.1.4.1.3375.2.1.8.2.3.1.32.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.33.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.33.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.34.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.34.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.35.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.35.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.36.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.36.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.37.3.48.46.48|66|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.37.3.48.46.49|66|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.38.3.48.46.48|66|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.38.3.48.46.49|66|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.39.3.48.46.48|66|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.39.3.48.46.49|66|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.40.3.48.46.48|2|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.40.3.48.46.49|2|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.41.3.48.46.48|66|5955584 +1.3.6.1.4.1.3375.2.1.8.2.3.1.41.3.48.46.49|66|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.42.3.48.46.48|66|186879 +1.3.6.1.4.1.3375.2.1.8.2.3.1.42.3.48.46.49|66|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.43.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.43.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.44.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.44.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.45.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.45.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.46.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.46.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.47.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.47.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.48.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.48.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.49.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.49.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.50.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.50.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.51.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.51.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.52.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.52.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.53.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.53.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.54.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.54.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.55.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.55.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.3.1.0|2|1 +1.3.6.1.4.1.3375.2.1.8.3.2.1.1.0.30092|2|0 +1.3.6.1.4.1.3375.2.1.8.3.2.1.2.0.30092|2|30092 +1.3.6.1.4.1.3375.2.1.8.3.2.1.3.0.30092|66|5955584 +1.3.6.1.4.1.3375.2.1.8.3.2.1.4.0.30092|66|186879 +1.3.6.1.4.1.3375.2.1.9.1.1.0|2|1 +1.3.6.1.4.1.3375.2.1.9.1.2.1.1.0.5.72.68.49.46.49|2|0 +1.3.6.1.4.1.3375.2.1.9.1.2.1.2.0.5.72.68.49.46.49|4x|4844312e31 +1.3.6.1.4.1.3375.2.1.9.1.2.1.3.0.5.72.68.49.46.49|4|default +1.3.6.1.4.1.3375.2.1.9.1.2.1.4.0.5.72.68.49.46.49|2|1 +1.3.6.1.4.1.3375.2.1.9.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.9.3.1.0|2|0 +1.3.6.1.4.1.3375.2.1.9.4.1.0|2|1 +1.3.6.1.4.1.3375.2.1.9.4.2.1.1.0.5.72.68.49.46.49|2|0 +1.3.6.1.4.1.3375.2.1.9.4.2.1.2.0.5.72.68.49.46.49|4x|4844312e31 +1.3.6.1.4.1.3375.2.1.9.4.2.1.3.0.5.72.68.49.46.49|4x|4249472d4950 +1.3.6.1.4.1.3375.2.1.9.4.2.1.4.0.5.72.68.49.46.49|4x|31352e302e31 +1.3.6.1.4.1.3375.2.1.9.4.2.1.5.0.5.72.68.49.46.49|4x|302e302e3131 +1.3.6.1.4.1.3375.2.1.9.4.2.1.6.0.5.72.68.49.46.49|2|1 +1.3.6.1.4.1.3375.2.1.10.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.10.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.10.3.1.0|2|0 +1.3.6.1.4.1.3375.2.1.11.1.1.0|2|16 +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.2.97.109|4|am +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.2.108.99|4|lc +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.97.102.109|4|afm +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.97.112.109|4|apm +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.97.115.109|4|asm +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.97.118.114|4|avr +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.100.111.115|4|dos +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.102.112.115|4|fps +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.103.116.109|4|gtm +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.105.108.120|4|ilx +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.108.116.109|4|ltm +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.112.101.109|4|pem +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.115.119.103|4|swg +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.4.115.115.108.111|4|sslo +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.5.99.103.110.97.116|4|cgnat +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.5.117.114.108.100.98|4|urldb +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.2.97.109|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.2.108.99|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.97.102.109|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.97.112.109|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.97.115.109|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.97.118.114|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.100.111.115|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.102.112.115|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.103.116.109|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.105.108.120|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.108.116.109|2|3 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.112.101.109|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.115.119.103|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.4.115.115.108.111|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.5.99.103.110.97.116|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.5.117.114.108.100.98|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.2.97.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.2.108.99|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.97.102.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.97.112.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.97.115.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.97.118.114|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.100.111.115|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.102.112.115|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.103.116.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.105.108.120|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.108.116.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.112.101.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.115.119.103|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.4.115.115.108.111|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.5.99.103.110.97.116|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.5.117.114.108.100.98|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.2.97.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.2.108.99|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.97.102.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.97.112.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.97.115.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.97.118.114|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.100.111.115|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.102.112.115|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.103.116.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.105.108.120|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.108.116.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.112.101.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.115.119.103|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.4.115.115.108.111|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.5.99.103.110.97.116|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.5.117.114.108.100.98|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.2.97.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.2.108.99|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.97.102.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.97.112.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.97.115.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.97.118.114|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.100.111.115|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.102.112.115|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.103.116.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.105.108.120|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.108.116.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.112.101.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.115.119.103|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.4.115.115.108.111|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.5.99.103.110.97.116|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.5.117.114.108.100.98|2|0 +1.3.6.1.4.1.3375.2.1.12.1.1.0|2|280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1|2|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.2|2|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.3|2|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5|2|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7|2|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.8|2|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.9|2|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.10|2|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.11|2|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.12|2|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.13|2|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.14|2|14 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.16|2|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.18|2|18 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.19|2|19 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.20|2|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.21|2|21 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.22|2|22 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.23|2|23 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.24|2|24 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.25|2|25 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.26|2|26 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.27|2|27 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.34|2|34 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.35|2|35 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.36|2|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.49|2|49 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.51|2|51 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.52|2|52 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.53|2|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.55|2|55 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.68|2|68 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.99|2|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.219|2|219 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.220|2|220 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.221|2|221 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.286|2|286 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.287|2|287 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.288|2|288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.290|2|290 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.292|2|292 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.293|2|293 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.295|2|295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.298|2|298 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.299|2|299 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.300|2|300 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.302|2|302 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.304|2|304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.307|2|307 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.310|2|310 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.313|2|313 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.315|2|315 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.317|2|317 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.318|2|318 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.352|2|352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.353|2|353 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.381|2|381 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.382|2|382 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.415|2|415 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.440|2|440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.447|2|447 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.885|2|885 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.886|2|886 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.887|2|887 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.905|2|905 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.906|2|906 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.907|2|907 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.910|2|910 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.911|2|911 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.921|2|921 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.928|2|928 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.929|2|929 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.951|2|951 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.977|2|977 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.979|2|979 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.982|2|982 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.984|2|984 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1038|2|1038 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1130|2|1130 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1138|2|1138 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1139|2|1139 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1140|2|1140 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1142|2|1142 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1143|2|1143 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1212|2|1212 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1222|2|1222 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1826|2|1826 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.2031|2|2031 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.2851|2|2851 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.2852|2|2852 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.2919|2|2919 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.3773|2|3773 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4068|2|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4085|2|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4119|2|4119 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4122|2|4122 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4212|2|4212 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4213|2|4213 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4214|2|4214 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4215|2|4215 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4216|2|4216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4217|2|4217 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4218|2|4218 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4219|2|4219 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4220|2|4220 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4221|2|4221 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4222|2|4222 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4224|2|4224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4226|2|4226 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4434|2|4434 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4435|2|4435 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4436|2|4436 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4437|2|4437 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4438|2|4438 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4439|2|4439 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4440|2|4440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4441|2|4441 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4442|2|4442 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4443|2|4443 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4451|2|4451 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4773|2|4773 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4774|2|4774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4775|2|4775 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4776|2|4776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4777|2|4777 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4778|2|4778 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4779|2|4779 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4780|2|4780 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4781|2|4781 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4782|2|4782 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4784|2|4784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4786|2|4786 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4787|2|4787 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5137|2|5137 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5138|2|5138 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5139|2|5139 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5140|2|5140 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5141|2|5141 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5142|2|5142 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5143|2|5143 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5144|2|5144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5145|2|5145 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5146|2|5146 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5148|2|5148 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5151|2|5151 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5155|2|5155 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5159|2|5159 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5501|2|5501 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5502|2|5502 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5503|2|5503 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5504|2|5504 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5505|2|5505 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5506|2|5506 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5507|2|5507 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5508|2|5508 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5509|2|5509 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5510|2|5510 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5516|2|5516 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5522|2|5522 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5861|2|5861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5862|2|5862 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5863|2|5863 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5864|2|5864 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5865|2|5865 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5866|2|5866 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5867|2|5867 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5868|2|5868 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5869|2|5869 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5870|2|5870 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5872|2|5872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5875|2|5875 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5878|2|5878 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5879|2|5879 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5884|2|5884 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6344|2|6344 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6345|2|6345 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6346|2|6346 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6347|2|6347 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6348|2|6348 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6349|2|6349 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6350|2|6350 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6351|2|6351 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6352|2|6352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6353|2|6353 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6358|2|6358 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6366|2|6366 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6763|2|6763 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6764|2|6764 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6765|2|6765 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6766|2|6766 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6767|2|6767 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6768|2|6768 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6769|2|6769 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6770|2|6770 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6771|2|6771 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6772|2|6772 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6782|2|6782 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6784|2|6784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7174|2|7174 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7175|2|7175 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7176|2|7176 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7177|2|7177 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7178|2|7178 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7179|2|7179 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7180|2|7180 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7181|2|7181 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7182|2|7182 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7183|2|7183 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7188|2|7188 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7192|2|7192 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7194|2|7194 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7196|2|7196 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7523|2|7523 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7524|2|7524 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7525|2|7525 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7526|2|7526 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7527|2|7527 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7528|2|7528 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7529|2|7529 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7530|2|7530 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7531|2|7531 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7532|2|7532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7535|2|7535 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7539|2|7539 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7543|2|7543 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7544|2|7544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7949|2|7949 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7950|2|7950 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7951|2|7951 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7952|2|7952 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7953|2|7953 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7954|2|7954 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.9526|2|9526 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.9602|2|9602 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.11784|2|11784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.13563|2|13563 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.13565|2|13565 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.13566|2|13566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.14596|2|14596 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.15387|2|15387 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.15921|2|15921 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.16645|2|16645 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.16646|2|16646 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.16648|2|16648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.16651|2|16651 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.16652|2|16652 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.16653|2|16653 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.16654|2|16654 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.17900|2|17900 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.18651|2|18651 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.21085|2|21085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.23175|2|23175 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.23206|2|23206 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.23330|2|23330 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.23416|2|23416 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.23554|2|23554 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.23740|2|23740 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.23891|2|23891 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.24265|2|24265 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.24341|2|24341 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.24415|2|24415 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.24648|2|24648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.24673|2|24673 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.24686|2|24686 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.24697|2|24697 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.25514|2|25514 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.25517|2|25517 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.25518|2|25518 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.25522|2|25522 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.25524|2|25524 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.25531|2|25531 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.25946|2|25946 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.27567|2|27567 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.29431|2|29431 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.29439|2|29439 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.29440|2|29440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.29574|2|29574 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.30092|2|30092 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.30120|2|30120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.31793|2|31793 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1|4|systemd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.2|4|kthreadd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.3|4x|6b736f6674697271642f30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5|4x|6b776f726b65722f303a3048 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7|4x|6d6967726174696f6e2f30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.8|4x|7263755f6268 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.9|4x|7263755f7363686564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.10|4x|6c72752d6164642d647261696e +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.11|4x|7761746368646f672f30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.12|4x|7761746368646f672f31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.13|4x|6d6967726174696f6e2f31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.14|4x|6b736f6674697271642f31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.16|4x|6b776f726b65722f313a3048 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.18|4|kdevtmpfs +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.19|4|netns +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.20|4|khungtaskd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.21|4|writeback +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.22|4|kintegrityd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.23|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.24|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.25|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.26|4|kblockd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.27|4|md +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.34|4|kswapd0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.35|4|ksmd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.36|4|crypto +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.49|4|kthrotld +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.51|4x|6b6d706174685f7264616364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.52|4|kaluad +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.53|4|kpsmoused +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.55|4x|697076365f61646472636f6e66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.68|4|deferwq +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.99|4|kauditd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.219|4x|76697274736373692d7363616e +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.220|4x|736373695f65685f30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.221|4x|736373695f746d665f30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.286|4|kdmflush +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.287|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.288|4|kdmflush +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.290|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.292|4|kdmflush +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.293|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.295|4|kdmflush +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.298|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.299|4|kdmflush +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.300|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.302|4|kdmflush +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.304|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.307|4|kdmflush +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.310|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.313|4|kdmflush +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.315|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.317|4|kdmflush +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.318|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.352|4x|6a6264322f646d2d352d38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.353|4x|657874342d7273762d636f6e766572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.381|4x|6a6264322f646d2d362d38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.382|4x|657874342d7273762d636f6e766572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.415|4x|73797374656d642d6a6f75726e616c +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.440|4|lvmetad +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.447|4x|73797374656d642d7564657664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.885|4x|6b776f726b65722f303a3148 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.886|4x|6a6264322f646d2d312d38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.887|4x|657874342d7273762d636f6e766572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.905|4|kjournald +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.906|4x|6a6264322f646d2d372d38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.907|4x|657874342d7273762d636f6e766572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.910|4x|6a6264322f646d2d382d38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.911|4x|657874342d7273762d636f6e766572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.921|4x|6a6974746572656e74726f70792d72 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.928|4x|6a6264322f646d2d332d38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.929|4x|657874342d7273762d636f6e766572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.951|4|auditd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.977|4x|646275732d6461656d6f6e +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.979|4|acpid +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.982|4|irqbalance +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.984|4x|73797374656d642d6c6f67696e64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1038|4x|696e6372656173655f656e74726f70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1130|4|mlx4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1138|4x|69622d636f6d702d7771 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1139|4x|69625f6d63617374 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1140|4x|69625f6e6c5f73615f7771 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1142|4x|6d6c78345f6962 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1143|4x|6d6c78345f69625f6d6367 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1212|4x|69706f69625f666c757368 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1222|4x|72646d615f636d +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1826|4x|7379736c6f672d6e67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.2031|4x|6b776f726b65722f313a3148 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.2851|4|crond +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.2852|4|promptstatusd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.2919|4|overdog +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.3773|4|sshd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4068|4|httpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4085|4|runsvdir +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4119|4|agetty +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4122|4|agetty +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4212|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4213|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4214|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4215|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4216|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4217|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4218|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4219|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4220|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4221|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4222|4|eventd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4224|4x|72756e736d315f6e616d6564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4226|4|wccpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4434|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4435|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4436|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4437|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4438|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4439|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4440|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4441|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4442|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4443|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4451|4|scriptd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4773|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4774|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4775|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4776|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4777|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4778|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4779|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4780|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4781|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4782|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4784|4|tmrouted +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4786|4|tamd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4787|4|alertd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5137|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5138|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5139|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5140|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5141|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5142|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5143|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5144|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5145|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5146|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5148|4|evrouted +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5151|4|big3d +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5155|4|csyncd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5159|4|syscalld +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5501|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5502|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5503|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5504|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5505|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5506|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5507|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5508|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5509|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5510|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5516|4|errdefsd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5522|4|logstatd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5861|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5862|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5863|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5864|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5865|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5866|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5867|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5868|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5869|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5870|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5872|4|chmand +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5875|4x|6963725f6576656e7464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5878|4|mcpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5879|4|statsd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5884|4|zxfrd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6344|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6345|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6346|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6347|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6348|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6349|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6350|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6351|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6352|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6353|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6358|4|merged +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6366|4|dynconfd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6763|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6764|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6765|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6766|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6767|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6768|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6769|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6770|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6771|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6772|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6782|4x|676f6f676c655f6163636f756e7473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6784|4|keymgmtd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7174|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7175|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7176|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7177|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7178|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7179|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7180|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7181|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7182|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7183|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7188|4|java +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7192|4|lacpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7194|4|devmgmtd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7196|4|cbrd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7523|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7524|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7525|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7526|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7527|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7528|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7529|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7530|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7531|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7532|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7535|4|lind +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7539|4|sod +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7543|4x|73666c6f775f6167656e74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7544|4x|66352d726573742d6e6f6465 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7949|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7950|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7951|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7952|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7953|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7954|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.9526|4|dhclient +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.9602|4|dhclient +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.11784|4|su +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.13563|4|httpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.13565|4|httpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.13566|4|httpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.14596|4|systemctl +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.15387|4|ntpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.15921|4|java +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.16645|4|logger +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.16646|4|logger +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.16648|4|httpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.16651|4|mcpq +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.16652|4|rrdstats +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.16653|4|rtstats +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.16654|4x|69436f6e74726f6c506f7274616c2e +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.17900|4|named +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.18651|4x|696372645f6368696c64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.21085|4x|6b776f726b65722f75343a32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.23175|4|rrdshim +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.23206|4x|6b776f726b65722f313a32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.23330|4|snmpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.23416|4x|6b776f726b65722f303a30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.23554|4x|6b776f726b65722f75343a30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.23740|4x|6b776f726b65722f313a31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.23891|4x|6b776f726b65722f303a31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.24265|4x|6b776f726b65722f313a30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.24341|4x|6b776f726b65722f303a32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.24415|4x|6b776f726b65722f313a33 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.24648|4x|6b776f726b65722f75343a31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.24673|4|agetty +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.24686|4|agetty +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.24697|4|agetty +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.25514|4|pccd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.25517|4|tmipsecd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.25518|4x|746d6d2e7374617274 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.25522|4x|6d676d745f61636c64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.25524|4|vxland +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.25531|4|iprepd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.25946|4|bigd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.27567|4|ntlmconnpool +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.29431|4|httpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.29439|4|httpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.29440|4|httpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.29574|4|rm +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.30092|4x|746d6d2e30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.30120|4|racoon +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.31793|4x|61756469745f666f72776172646572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1|4x|2f7573722f6c69622f73797374656d642f73797374656d64202d2d73776974636865642d726f6f74202d2d73797374656d202d2d646573657269616c697a65 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.2|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.3|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.8|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.9|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.10|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.11|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.12|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.13|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.14|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.16|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.18|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.19|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.20|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.21|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.22|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.23|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.24|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.25|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.26|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.27|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.34|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.35|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.36|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.49|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.51|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.52|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.53|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.55|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.68|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.99|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.219|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.220|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.221|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.286|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.287|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.288|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.290|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.292|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.293|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.295|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.298|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.299|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.300|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.302|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.304|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.307|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.310|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.313|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.315|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.317|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.318|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.352|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.353|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.381|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.382|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.415|4x|2f7573722f6c69622f73797374656d642f73797374656d642d6a6f75726e616c64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.440|4x|2f7573722f7362696e2f6c766d65746164202d66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.447|4x|2f7573722f6c69622f73797374656d642f73797374656d642d7564657664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.885|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.886|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.887|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.905|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.906|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.907|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.910|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.911|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.921|4x|2f7573722f7362696e2f6a6974746572656e74726f70792d726e6764 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.928|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.929|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.951|4x|2f7362696e2f617564697464202d6e +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.977|4x|2f62696e2f646275732d6461656d6f6e202d2d73797374656d202d2d616464726573733d73797374656d643a202d2d6e6f666f726b202d2d6e6f7069646669 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.979|4x|2f7573722f7362696e2f6163706964 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.982|4x|2f7573722f7362696e2f69727162616c616e6365202d2d666f726567726f756e64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.984|4x|2f7573722f6c69622f73797374656d642f73797374656d642d6c6f67696e64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1038|4x|696e6372656173655f656e74726f7079202d64202d652034303030202d72202d712038 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1130|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1138|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1139|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1140|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1142|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1143|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1212|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1222|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1826|4x|2f7573722f7362696e2f7379736c6f672d6e67202d46202d70202f7661722f72756e2f7379736c6f67642e706964 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.2031|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.2851|4x|2f7573722f7362696e2f63726f6e64202d6e +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.2852|4x|2f62696e2f70726f6d707473746174757364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.2919|4x|2f7573722f62696e2f6f766572646f67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.3773|4x|2f7573722f7362696e2f73736864202d44 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4068|4x|2f7573722f7362696e2f6874747064202d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4085|4x|72756e7376646972202f7661722f73657276696365206c6f673a202e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4119|4x|2f7362696e2f616765747479202d2d6e6f636c6561722074747931206c696e7578 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4122|4x|2f7362696e2f616765747479202d2d6b6565702d62617564203131353230302c33383430302c39363030207474795330207674323230 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4212|4x|72756e7376206461746173746f72 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4213|4x|72756e7376206576656e7464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4214|4x|72756e7376206e616d6564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4215|4x|72756e73762073646d64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4216|4x|72756e7376206f767364622d736572766572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4217|4x|72756e737620776f6364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4218|4x|72756e7376206e6c6164 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4219|4x|72756e7376207763637064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4220|4x|72756e737620646e73636163686564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4221|4x|72756e737620726261 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4222|4x|2f7573722f62696e2f6576656e7464202d66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4224|4x|2f7362696e2f72756e736d315f6e616d6564202f7573722f7362696e2f6e616d6564202d66202d74202f7661722f6e616d6564202d75206e616d6564202d63 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4226|4x|2f7573722f62696e2f7763637064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4434|4x|72756e737620746d697073656364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4435|4x|72756e7376206e746c6d636f6e6e706f6f6c +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4436|4x|72756e737620706761646d696e64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4437|4x|72756e737620616e74736572766572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4438|4x|72756e73762064656475705f61646d696e +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4439|4x|72756e73762061706d5f77656273736f +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4440|4x|72756e73762073616d6c69647064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4441|4x|72756e737620656361 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4442|4x|72756e7376206175746f646f7364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4443|4x|72756e73762073637269707464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4451|4x|2f7573722f62696e2f73637269707464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4773|4x|72756e737620746d726f75746564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4774|4x|72756e737620766469 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4775|4x|72756e737620616c65727464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4776|4x|72756e73762066707573657264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4777|4x|72756e73762062646f7364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4778|4x|72756e73762070636364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4779|4x|72756e73762061736d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4780|4x|72756e73762065616d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4781|4x|72756e73762074616d64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4782|4x|72756e7376207274636f6e6664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4784|4x|2f7573722f62696e2f746d726f75746564202d642030202d6f202f7661722f746d702f746d726f757465642e6f7574 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4786|4x|2f7573722f62696e2f74616d64202d66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4787|4x|2f7573722f7362696e2f616c65727464202d66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5137|4x|72756e7376206576726f75746564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5138|4x|72756e73762073797363616c6c64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5139|4x|72756e7376206373796e6364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5140|4x|72756e7376206e6174737461747364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5141|4x|72756e7376206d676d745f61636c64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5142|4x|72756e737620616466735f70726f7879 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5143|4x|72756e73762072657772697465 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5144|4x|72756e7376206269673364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5145|4x|72756e7376206f6d617064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5146|4x|72756e73762075706461746564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5148|4x|2f7573722f62696e2f6576726f75746564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5151|4x|2f7368617265642f62696e2f6269673364202d746c7320544c537631202d636970686572732041455347434d3a4145533a214144483a2141454344483a2150 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5155|4x|2f7573722f62696e2f6373796e6364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5159|4x|2f7573722f62696e2f73797363616c6c64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5501|4x|72756e737620626f7464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5502|4x|72756e737620636c757374657264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5503|4x|72756e73762062696764 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5504|4x|72756e73762075726c6462 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5505|4x|72756e7376206c6f677374617464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5506|4x|72756e7376206572726465667364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5507|4x|72756e7376206d7973716c +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5508|4x|72756e7376206c6f676d7973716c64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5509|4x|72756e737620666c6f777370656364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5510|4x|72756e73762065636d64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5516|4x|2f7573722f62696e2f6572726465667364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5522|4x|2f7573722f7362696e2f6c6f677374617464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5861|4x|72756e7376206963725f6576656e7464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5862|4x|72756e737620646562756764 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5863|4x|72756e737620737461747364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5864|4x|72756e7376206d637064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5865|4x|72756e7376207a78667264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5866|4x|72756e737620646f736c37645f61747461636b5f6d6f6e69746f72 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5867|4x|72756e73762063686d616e64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5868|4x|72756e7376206175746f6469736364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5869|4x|72756e7376206d646d73796e636d6772 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5870|4x|72756e73762061706d64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5872|4x|2f7573722f62696e2f63686d616e64202d66202d2d76617269616e7420316e6963 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5875|4x|2f7573722f62696e2f6963725f6576656e7464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5878|4x|2f7573722f62696e2f6d637064202d64626d656d20353132202d6c697374656e203132372e302e302e31202d666f7263656c6f6164202d66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5879|4x|2f7573722f62696e2f737461747364202d532030202d66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5884|4x|2f7573722f62696e2f7a78667264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6344|4x|72756e73762067746d64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6345|4x|72756e73762064796e636f6e6664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6346|4x|72756e737620737368706c7567696e +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6347|4x|72756e737620746d6d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6348|4x|72756e73762061767264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6349|4x|72756e73762070696e675f6163636573735f6167656e74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6350|4x|72756e7376206477626c64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6351|4x|72756e7376206d6572676564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6352|4x|72756e73762077616d64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6353|4x|72756e737620746f6d636174 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6358|4x|2f7573722f62696e2f6d6572676564202d532030202d66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6366|4x|2f7573722f62696e2f64796e636f6e6664202d66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6763|4x|72756e73762076786c616e64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6764|4x|72756e73762068777064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6765|4x|72756e73762074617364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6766|4x|72756e737620706b6373313164 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6767|4x|72756e73762061646d64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6768|4x|72756e737620697072657064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6769|4x|72756e737620676f6f676c655f6163636f756e74735f6461656d6f6e +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6770|4x|72756e737620736e6d7064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6771|4x|72756e7376206b65796d676d7464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6772|4x|72756e7376206f61757468 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6782|4x|2f7573722f62696e2f707974686f6e202f7573722f62696e2f676f6f676c655f6163636f756e74735f6461656d6f6e +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6784|4x|2f7573722f62696e2f6b65796d676d7464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7174|4x|72756e7376206361707475726564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7175|4x|72756e73762063627264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7176|4x|72756e7376207a7264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7177|4x|72756e7376206c61637064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7178|4x|72756e7376206d6f6e7064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7179|4x|72756e737620726573746a61766164 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7180|4x|72756e73762073686d6d617064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7181|4x|72756e73762077656273736f +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7182|4x|72756e7376206465766d676d7464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7183|4x|72756e73762068747470645f61706d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7188|4x|2f7573722f6c69622f6a766d2f6a72652f62696e2f6a617661202d446a6176612e7574696c2e6c6f6767696e672e6d616e616765723d636f6d2e66352e7265 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7192|4x|2f7573722f62696e2f6c61637064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7194|4x|2f7573722f62696e2f6465766d676d7464202d6c206e6f74696365 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7196|4x|2f7573722f73686172652f6362722f62696e2f63627264202d2d746872656164733d32202d2d686f73742d6d656d6f72793d343032363533313834202d2d75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7523|4x|72756e737620736f64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7524|4x|72756e737620776f63706c7567696e +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7525|4x|72756e73762073666c6f775f6167656e74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7526|4x|72756e73762075726c64626d677264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7527|4x|72756e73762066355f7570646174655f636865636b6572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7528|4x|72756e7376206e73796e6364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7529|4x|72756e7376206c696e64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7530|4x|72756e73762061636564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7531|4x|72756e737620726573746e6f646564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7532|4x|72756e7376206461746173796e6364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7535|4x|2f7573722f62696e2f6c696e64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7539|4x|2f7573722f62696e2f736f64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7543|4x|2f7573722f7362696e2f73666c6f775f6167656e74202d66202d4c462035202f7661722f6c6f672f73666c6f775f6167656e742e6c6f67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7544|4x|2f7573722f62696e2f66352d726573742d6e6f6465202f7573722f73686172652f726573742f6e6f64652f7372632f726573746e6f64652e6a73202d702038 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7949|4x|72756e73762066736c6f6764 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7950|4x|72756e73762069707364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7951|4x|72756e7376206e6f6b6961736e6d7064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7952|4x|72756e737620646f736c3764 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7953|4x|72756e7376206c6f63616c64626d6772 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7954|4x|72756e73762077725f75726c646264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.9526|4x|2f7362696e2f6468636c69656e74202d6e77206d676d74202d6366202f6574632f6468636c69656e742e636f6e66202d6c66202f7661722f6c69622f646863 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.9602|4x|2f7362696e2f6468636c69656e74202d36202d6e77206d676d74202d6366202f6574632f6468636c69656e742e636f6e66202d6c66202f7661722f6c69622f +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.11784|4x|737520746f6d636174202d73202f62696e2f62617368202d63206578706f7274204a4156415f4f5054533d272d4468747470732e70726f746f636f6c733d54 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.13563|4x|2f7573722f7362696e2f6874747064202d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.13565|4x|2f7573722f7362696e2f6874747064202d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.13566|4x|2f7573722f7362696e2f6874747064202d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.14596|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.15387|4x|6e747064202d67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.15921|4x|2f7573722f6c69622f6a766d2f6a72652f62696e2f6a617661202d4468747470732e70726f746f636f6c733d544c5376312e312c544c5376312e32202d4470 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.16645|4x|2f7573722f62696e2f6c6f67676572202d70206c6f63616c362e696e666f +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.16646|4x|2f7573722f62696e2f6c6f67676572202d70206c6f63616c362e696e666f +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.16648|4x|2f7573722f7362696e2f666367692d202d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.16651|4x|2f7573722f6c6f63616c2f7777772f6d6370712f6d637071 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.16652|4x|2f7573722f6c6f63616c2f7777772f72726473746174732f7272647374617473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.16653|4x|2f7573722f6c6f63616c2f7777772f727473746174732f72747374617473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.16654|4x|2f7573722f6c6f63616c2f7777772f69436f6e74726f6c2f69436f6e74726f6c506f7274616c2e636769 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.17900|4x|2f7573722f7362696e2f6e616d6564202d66202d74202f7661722f6e616d6564202d75206e616d6564202d63202f636f6e6669672f6e616d65642e636f6e66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.18651|4x|696372645f6368696c64202d702038313030202d6c2032202d692034343038353361662d376362352d346530302d393631632d373133303033336265613235 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.21085|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.23175|4x|2f7573722f7362696e2f7272647368696d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.23206|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.23330|4x|2f7573722f7362696e2f736e6d7064202d66202d63202f636f6e6669672f736e6d702f736e6d70642e636f6e66202d4c7364202d4c462036202f7661722f6c +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.23416|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.23554|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.23740|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.23891|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.24265|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.24341|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.24415|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.24648|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.24673|4x|2f7362696e2f616765747479202d2d6e6f636c6561722074747930207474795330207674323230 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.24686|4x|2f7362696e2f616765747479202d2d6e6f636c6561722074747930207474795330207674323230 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.24697|4x|2f7362696e2f616765747479202d2d6e6f636c6561722074747930207474795330207674323230 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.25514|4x|2f7573722f62696e2f70636364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.25517|4x|2f7573722f62696e2f746d697073656364202d2d746d6d636f756e742032 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.25518|4x|2f6574632f62696773746172742f736372697074732f746d6d2e7374617274202f7661722f72756e203220322030202d2d706c6174666f726d205a31303020 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.25522|4x|2f7573722f62696e2f6d676d745f61636c64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.25524|4x|2f7573722f62696e2f76786c616e64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.25531|4x|2f7573722f73686172652f6970726570642f62696e2f697072657064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.25946|4x|62696764202d53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.27567|4x|2f7573722f7362696e2f6e746c6d636f6e6e706f6f6c202d63206d656d3a2f2f6e746c6d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.29431|4x|2f7573722f7362696e2f6874747064202d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.29439|4x|2f7573722f7362696e2f6874747064202d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.29440|4x|2f7573722f7362696e2f6874747064202d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.29574|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.30092|4x|746d6d2e30202d542032202d2d746d69642030202d2d6e7075732032202d2d706c6174666f726d205a313030202d6d202d732035393434 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.30120|4x|2f7573722f7362696e2f7261636f6f6e202d6c202f7661722f6c6f672f7261636f6f6e2e6c6f67202d66202f6574632f7261636f6f6e2f7261636f6f6e2e63 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.31793|4x|2f7573722f62696e2f61756469745f666f72776172646572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.2|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.3|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.8|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.9|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.10|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.11|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.12|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.13|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.14|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.16|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.18|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.19|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.20|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.21|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.22|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.23|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.24|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.25|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.26|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.27|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.34|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.35|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.36|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.49|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.51|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.52|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.53|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.55|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.68|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.99|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.219|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.220|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.221|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.286|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.287|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.288|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.290|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.292|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.293|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.295|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.298|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.299|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.300|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.302|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.304|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.307|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.310|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.313|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.315|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.317|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.318|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.352|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.353|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.381|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.382|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.415|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.440|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.447|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.885|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.886|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.887|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.905|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.906|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.907|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.910|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.911|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.921|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.928|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.929|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.951|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.977|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.979|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.982|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.984|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1038|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1130|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1138|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1139|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1140|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1142|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1143|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1212|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1222|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1826|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.2031|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.2851|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.2852|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.2919|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.3773|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4068|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4085|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4119|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4122|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4212|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4213|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4214|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4215|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4216|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4217|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4218|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4219|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4220|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4221|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4222|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4224|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4226|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4434|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4435|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4436|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4437|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4438|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4439|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4440|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4441|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4442|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4443|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4451|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4773|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4774|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4775|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4776|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4777|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4778|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4779|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4780|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4781|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4782|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4784|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4786|4|ltm +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4787|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5137|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5138|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5139|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5140|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5141|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5142|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5143|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5144|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5145|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5146|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5148|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5151|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5155|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5159|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5501|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5502|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5503|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5504|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5505|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5506|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5507|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5508|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5509|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5510|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5516|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5522|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5861|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5862|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5863|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5864|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5865|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5866|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5867|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5868|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5869|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5870|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5872|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5875|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5878|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5879|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5884|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6344|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6345|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6346|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6347|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6348|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6349|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6350|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6351|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6352|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6353|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6358|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6366|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6763|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6764|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6765|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6766|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6767|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6768|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6769|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6770|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6771|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6772|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6782|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6784|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7174|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7175|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7176|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7177|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7178|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7179|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7180|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7181|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7182|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7183|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7188|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7192|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7194|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7196|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7523|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7524|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7525|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7526|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7527|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7528|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7529|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7530|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7531|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7532|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7535|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7539|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7543|4|ltm +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7544|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7949|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7950|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7951|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7952|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7953|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7954|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.9526|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.9602|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.11784|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.13563|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.13565|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.13566|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.14596|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.15387|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.15921|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.16645|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.16646|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.16648|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.16651|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.16652|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.16653|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.16654|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.17900|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.18651|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.21085|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.23175|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.23206|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.23330|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.23416|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.23554|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.23740|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.23891|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.24265|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.24341|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.24415|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.24648|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.24673|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.24686|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.24697|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.25514|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.25517|4|ltm +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.25518|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.25522|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.25524|4|ltm +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.25531|4|ltm +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.25946|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.27567|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.29431|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.29439|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.29440|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.29574|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.30092|4|tmm +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.30120|4|ltm +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.31793|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.2|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.3|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.8|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.9|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.10|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.11|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.12|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.13|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.14|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.16|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.18|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.19|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.20|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.21|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.22|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.23|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.24|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.25|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.26|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.27|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.34|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.35|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.36|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.49|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.51|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.52|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.53|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.55|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.68|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.99|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.219|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.220|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.221|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.286|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.287|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.288|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.290|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.292|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.293|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.295|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.298|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.299|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.300|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.302|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.304|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.307|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.310|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.313|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.315|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.317|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.318|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.352|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.353|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.381|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.382|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.415|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.440|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.447|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.885|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.886|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.887|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.905|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.906|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.907|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.910|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.911|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.921|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.928|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.929|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.951|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.977|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.979|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.982|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.984|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1038|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1130|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1138|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1139|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1140|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1142|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1143|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1212|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1222|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1826|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.2031|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.2851|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.2852|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.2919|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.3773|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4068|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4085|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4119|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4122|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4212|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4213|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4214|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4215|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4216|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4217|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4218|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4219|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4220|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4221|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4222|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4224|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4226|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4434|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4435|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4436|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4437|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4438|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4439|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4440|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4441|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4442|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4443|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4451|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4773|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4774|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4775|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4776|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4777|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4778|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4779|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4780|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4781|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4782|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4784|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4786|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4787|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5137|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5138|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5139|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5140|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5141|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5142|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5143|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5144|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5145|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5146|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5148|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5151|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5155|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5159|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5501|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5502|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5503|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5504|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5505|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5506|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5507|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5508|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5509|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5510|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5516|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5522|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5861|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5862|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5863|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5864|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5865|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5866|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5867|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5868|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5869|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5870|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5872|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5875|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5878|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5879|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5884|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6344|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6345|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6346|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6347|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6348|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6349|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6350|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6351|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6352|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6353|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6358|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6366|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6763|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6764|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6765|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6766|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6767|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6768|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6769|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6770|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6771|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6772|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6782|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6784|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7174|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7175|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7176|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7177|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7178|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7179|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7180|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7181|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7182|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7183|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7188|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7192|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7194|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7196|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7523|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7524|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7525|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7526|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7527|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7528|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7529|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7530|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7531|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7532|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7535|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7539|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7543|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7544|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7949|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7950|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7951|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7952|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7953|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7954|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.9526|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.9602|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.11784|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.13563|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.13565|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.13566|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.14596|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.15387|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.15921|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.16645|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.16646|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.16648|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.16651|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.16652|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.16653|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.16654|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.17900|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.18651|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.21085|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.23175|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.23206|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.23330|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.23416|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.23554|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.23740|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.23891|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.24265|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.24341|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.24415|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.24648|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.24673|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.24686|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.24697|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.25514|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.25517|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.25518|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.25522|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.25524|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.25531|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.25946|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.27567|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.29431|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.29439|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.29440|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.29574|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.30092|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.30120|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.31793|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.8|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.12|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.13|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.14|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.16|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.19|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.20|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.22|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.24|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.25|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.27|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.34|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.49|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.51|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.52|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.53|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.68|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.220|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.221|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.286|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.292|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.293|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.295|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.298|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.299|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.300|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.302|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.304|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.315|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.318|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.353|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.382|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.447|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.887|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.905|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.907|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.910|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.982|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1038|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1138|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1139|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1140|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1142|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.2031|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.3773|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4068|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4216|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4217|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4219|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4220|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4221|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4224|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4438|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4440|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4442|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4443|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4451|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4774|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4778|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4779|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4780|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4784|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4786|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5137|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5141|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5142|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5144|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5145|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5146|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5148|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5502|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5506|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5507|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5510|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5522|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5861|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5862|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5863|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5864|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5865|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5867|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5868|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5869|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5870|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5872|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5884|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6349|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6350|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6352|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6353|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6358|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6366|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6766|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6772|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6782|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7175|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7177|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7178|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7179|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7181|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7194|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7525|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7527|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7529|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7532|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7535|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7544|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7951|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7952|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.9526|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.13563|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.15387|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.15921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.16645|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.16652|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.16653|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.16654|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.23206|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.23330|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.23554|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.23740|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.23891|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.24265|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.24415|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.24697|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.24706|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.24717|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.24734|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.25514|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.25946|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.27567|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.29431|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.29574|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.30092|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.30120|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.31793|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.2|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.3|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.8|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.9|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.10|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.11|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.12|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.13|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.14|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.16|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.18|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.19|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.20|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.21|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.22|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.23|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.24|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.25|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.26|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.27|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.34|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.35|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.36|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.49|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.51|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.52|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.53|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.55|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.68|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.99|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.219|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.220|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.221|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.286|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.287|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.288|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.290|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.292|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.293|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.295|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.298|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.299|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.300|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.302|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.304|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.307|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.310|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.313|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.315|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.317|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.318|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.352|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.353|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.381|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.382|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.415|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.440|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.447|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.885|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.886|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.887|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.905|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.906|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.907|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.910|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.911|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.921|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.928|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.929|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.951|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.977|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.979|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.982|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.984|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1038|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1130|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1138|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1139|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1140|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1142|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1143|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1212|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1222|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1826|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.2031|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.2851|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.2852|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.2919|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.3773|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4068|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4085|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4119|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4122|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4212|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4213|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4214|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4215|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4216|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4217|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4218|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4219|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4220|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4221|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4222|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4224|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4226|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4434|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4435|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4436|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4437|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4438|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4439|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4440|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4441|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4442|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4443|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4451|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4773|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4774|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4775|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4776|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4777|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4778|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4779|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4780|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4781|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4782|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4784|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4786|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4787|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5137|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5138|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5139|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5140|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5141|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5142|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5143|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5144|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5145|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5146|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5148|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5151|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5155|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5159|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5501|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5502|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5503|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5504|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5505|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5506|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5507|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5508|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5509|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5510|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5516|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5522|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5861|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5862|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5863|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5864|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5865|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5866|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5867|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5868|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5869|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5870|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5872|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5875|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5878|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5879|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5884|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6344|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6345|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6346|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6347|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6348|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6349|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6350|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6351|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6352|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6353|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6358|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6366|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6763|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6764|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6765|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6766|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6767|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6768|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6769|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6770|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6771|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6772|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6782|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6784|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7174|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7175|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7176|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7177|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7178|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7179|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7180|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7181|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7182|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7183|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7188|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7192|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7194|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7196|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7523|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7524|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7525|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7526|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7527|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7528|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7529|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7530|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7531|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7532|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7535|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7539|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7543|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7544|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7949|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7950|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7951|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7952|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7953|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7954|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.9526|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.9602|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.11784|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.13563|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.13565|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.13566|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.14596|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.15387|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.15921|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.16645|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.16646|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.16648|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.16651|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.16652|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.16653|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.16654|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.17900|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.18651|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.21085|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.23175|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.23206|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.23330|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.23416|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.23554|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.23740|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.23891|66|1571650560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.24265|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.24341|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.24415|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.24648|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.24717|66|1571650560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.24734|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.24745|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.25514|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.25517|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.25518|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.25522|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.25524|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.25531|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.25946|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.27567|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.29431|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.29439|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.29440|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.29574|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.30092|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.30120|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.31793|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6358|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.15921|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.23206|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.23330|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.23891|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.24717|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.24734|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.24745|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.30092|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6358|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.15921|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.23206|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.23330|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.23891|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.24717|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.24734|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.24745|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.30092|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6358|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.15921|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.23206|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.23330|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.23891|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.24717|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.24734|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.24745|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.30092|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6358|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.15921|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.23206|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.23330|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.23891|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.24717|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.24734|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.24745|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.30092|66|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6358|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.15921|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.23206|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.23330|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.24745|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.24758|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.24769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.24781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.30092|66|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6358|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.15921|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.23206|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.23330|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.24745|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.24758|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.24769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.24781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.30092|66|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.3|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.8|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.9|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.10|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.11|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.12|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.13|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.14|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.16|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.18|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.19|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.20|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.21|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.22|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.23|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.24|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.25|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.26|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.27|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.34|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.35|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.36|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.49|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.51|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.52|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.53|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.55|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.68|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.99|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.219|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.220|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.221|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.286|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.287|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.288|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.290|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.292|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.293|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.295|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.298|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.299|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.300|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.302|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.304|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.307|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.310|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.313|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.315|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.317|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.318|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.352|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.353|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.381|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.382|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.415|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.440|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.447|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.885|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.886|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.887|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.905|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.906|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.907|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.910|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.911|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.921|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.928|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.929|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.951|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.977|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.979|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.982|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.984|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1038|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1130|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1138|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1139|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1140|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1142|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1143|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1212|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1222|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1826|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.2031|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.2851|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.2852|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.2919|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.3773|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4068|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4085|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4119|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4122|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4212|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4213|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4214|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4215|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4216|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4217|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4218|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4219|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4220|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4221|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4222|66|4213 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4224|66|4214 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4226|66|4219 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4434|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4435|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4436|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4437|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4438|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4439|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4440|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4441|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4442|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4443|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4451|66|4443 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4773|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4774|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4775|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4776|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4777|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4778|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4779|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4780|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4781|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4782|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4784|66|4773 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4786|66|4781 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4787|66|4775 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5137|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5138|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5139|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5140|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5141|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5142|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5143|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5144|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5145|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5146|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5148|66|5137 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5151|66|5144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5155|66|5139 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5159|66|5138 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5501|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5502|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5503|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5504|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5505|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5506|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5507|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5508|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5509|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5510|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5516|66|5506 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5522|66|5505 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5861|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5862|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5863|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5864|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5865|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5866|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5867|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5868|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5869|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5870|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5872|66|5867 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5875|66|5861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5878|66|5864 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5879|66|5863 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5884|66|5865 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6344|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6345|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6346|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6347|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6348|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6349|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6350|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6351|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6352|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6353|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6358|66|6351 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6366|66|6345 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6763|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6764|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6765|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6766|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6767|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6768|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6769|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6770|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6771|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6772|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6782|66|6769 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6784|66|6771 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7174|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7175|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7176|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7177|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7178|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7179|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7180|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7181|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7182|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7183|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7188|66|7179 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7192|66|7177 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7194|66|7182 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7196|66|7175 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7523|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7524|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7525|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7526|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7527|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7528|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7529|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7530|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7531|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7532|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7535|66|7529 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7539|66|7523 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7543|66|7525 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7544|66|7531 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7949|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7950|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7951|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7952|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7953|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7954|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.9526|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.9602|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.11784|66|6353 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.13563|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.13565|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.13566|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.14596|66|5878 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.15387|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.15921|66|11784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.16645|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.16646|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.16648|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.16651|66|16648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.16652|66|16648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.16653|66|16648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.16654|66|16648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.17900|66|4224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.18651|66|7188 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.21085|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.23175|66|5879 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.23206|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.23330|66|6770 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.23416|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.23554|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.23740|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.24265|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.24341|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.24415|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.24648|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.24745|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.24758|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.24769|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.24781|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.25514|66|4778 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.25517|66|4434 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.25518|66|6347 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.25522|66|5141 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.25524|66|6763 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.25531|66|6768 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.25946|66|5503 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.27567|66|4435 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.29431|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.29439|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.29440|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.29574|66|25517 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.30092|66|25518 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.30120|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.31793|66|1826 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.415|66|415 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.440|66|440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.447|66|447 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.921|66|921 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.951|66|951 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.977|66|977 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.979|66|979 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.982|66|982 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.984|66|984 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1038|66|1038 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1826|66|1826 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.2851|66|2851 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.2852|66|2852 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.2919|66|2919 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.3773|66|3773 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4068|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4085|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4119|66|4119 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4122|66|4122 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4212|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4213|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4214|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4215|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4216|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4217|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4218|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4219|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4220|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4221|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4222|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4224|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4226|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4434|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4435|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4436|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4437|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4438|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4439|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4440|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4441|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4442|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4443|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4451|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4773|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4774|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4775|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4776|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4777|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4778|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4779|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4780|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4781|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4782|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4784|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4786|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4787|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5137|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5138|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5139|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5140|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5141|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5142|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5143|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5144|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5145|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5146|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5148|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5151|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5155|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5159|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5501|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5502|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5503|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5504|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5505|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5506|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5507|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5508|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5509|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5510|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5516|66|5516 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5522|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5861|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5862|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5863|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5864|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5865|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5866|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5867|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5868|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5869|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5870|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5872|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5875|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5878|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5879|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5884|66|5884 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6344|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6345|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6346|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6347|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6348|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6349|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6350|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6351|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6352|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6353|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6358|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6366|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6763|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6764|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6765|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6766|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6767|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6768|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6769|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6770|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6771|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6772|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6782|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6784|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7174|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7175|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7176|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7177|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7178|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7179|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7180|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7181|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7182|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7183|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7188|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7192|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7194|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7196|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7523|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7524|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7525|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7526|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7527|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7528|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7529|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7530|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7531|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7532|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7535|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7539|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7543|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7544|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7949|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7950|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7951|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7952|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7953|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7954|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.9526|66|9526 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.9602|66|9602 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.11784|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.13563|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.13565|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.13566|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.14596|66|14596 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.15387|66|15387 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.15921|66|15921 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.16645|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.16646|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.16648|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.16651|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.16652|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.16653|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.16654|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.17900|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.18651|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.23175|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.23206|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.23330|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.24745|66|24745 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.24758|66|24758 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.24769|66|24769 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.24781|66|24781 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.25514|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.25517|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.25518|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.25522|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.25524|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.25531|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.25946|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.27567|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.29431|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.29439|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.29440|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.29574|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.30092|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.30120|66|30120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.31793|66|31793 +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.2|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.3|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.8|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.9|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.10|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.11|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.12|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.13|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.14|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.16|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.18|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.19|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.20|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.21|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.22|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.23|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.24|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.25|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.26|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.27|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.34|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.35|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.36|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.49|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.51|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.52|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.53|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.55|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.68|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.99|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.219|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.220|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.221|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.286|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.287|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.288|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.290|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.292|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.293|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.295|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.298|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.299|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.300|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.302|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.304|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.307|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.310|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.313|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.315|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.317|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.318|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.352|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.353|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.381|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.382|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.415|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.440|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.447|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.885|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.886|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.887|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.905|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.906|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.907|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.910|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.911|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.921|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.928|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.929|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.951|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.977|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.979|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.982|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.984|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1038|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1130|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1138|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1139|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1140|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1142|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1143|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1212|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1222|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1826|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.2031|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.2851|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.2852|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.2919|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.3773|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4068|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4085|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4119|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4122|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4212|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4213|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4214|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4215|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4216|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4217|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4218|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4219|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4220|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4221|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4222|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4224|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4226|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4434|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4435|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4436|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4437|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4438|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4439|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4440|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4441|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4442|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4443|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4451|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4773|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4774|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4775|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4776|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4777|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4778|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4779|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4780|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4781|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4782|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4784|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4786|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4787|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5137|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5138|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5139|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5140|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5141|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5142|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5143|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5144|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5145|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5146|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5148|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5151|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5155|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5159|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5501|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5502|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5503|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5504|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5505|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5506|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5507|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5508|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5509|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5510|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5516|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5522|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5861|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5862|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5863|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5864|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5865|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5866|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5867|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5868|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5869|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5870|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5872|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5875|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5878|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5879|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5884|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6344|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6345|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6346|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6347|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6348|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6349|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6350|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6351|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6352|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6353|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6358|4|R +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6366|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6763|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6764|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6765|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6766|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6767|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6768|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6769|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6770|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6771|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6772|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6782|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6784|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7174|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7175|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7176|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7177|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7178|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7179|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7180|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7181|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7182|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7183|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7188|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7192|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7194|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7196|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7523|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7524|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7525|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7526|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7527|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7528|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7529|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7530|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7531|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7532|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7535|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7539|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7543|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7544|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7949|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7950|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7951|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7952|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7953|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7954|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.9526|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.9602|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.11784|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.13563|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.13565|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.13566|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.14596|4|Z +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.15387|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.15921|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.16645|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.16646|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.16648|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.16651|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.16652|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.16653|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.16654|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.17900|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.18651|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.21085|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.23175|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.23206|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.23330|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.23416|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.23554|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.23740|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.24265|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.24341|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.24415|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.24648|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.24745|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.24758|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.24769|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.24781|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.25514|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.25517|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.25518|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.25522|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.25524|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.25531|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.25946|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.27567|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.29431|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.29439|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.29440|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.29574|4|Z +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.30092|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.30120|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.31793|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.415|66|415 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.440|66|440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.447|66|447 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.921|66|921 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.951|66|951 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.977|66|977 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.979|66|979 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.982|66|982 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.984|66|984 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1038|66|1038 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1826|66|1826 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.2851|66|2851 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.2852|66|2852 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.2919|66|2919 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.3773|66|3773 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4068|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4085|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4119|66|4119 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4122|66|4122 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4212|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4213|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4214|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4215|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4216|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4217|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4218|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4219|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4220|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4221|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4222|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4224|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4226|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4434|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4435|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4436|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4437|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4438|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4439|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4440|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4441|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4442|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4443|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4451|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4773|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4774|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4775|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4776|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4777|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4778|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4779|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4780|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4781|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4782|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4784|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4786|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4787|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5137|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5138|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5139|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5140|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5141|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5142|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5143|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5144|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5145|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5146|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5148|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5151|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5155|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5159|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5501|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5502|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5503|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5504|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5505|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5506|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5507|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5508|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5509|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5510|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5516|66|5516 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5522|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5861|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5862|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5863|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5864|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5865|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5866|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5867|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5868|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5869|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5870|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5872|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5875|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5878|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5879|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5884|66|5884 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6344|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6345|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6346|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6347|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6348|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6349|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6350|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6351|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6352|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6353|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6358|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6366|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6763|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6764|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6765|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6766|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6767|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6768|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6769|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6770|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6771|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6772|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6782|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6784|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7174|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7175|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7176|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7177|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7178|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7179|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7180|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7181|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7182|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7183|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7188|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7192|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7194|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7196|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7523|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7524|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7525|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7526|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7527|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7528|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7529|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7530|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7531|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7532|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7535|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7539|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7543|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7544|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7949|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7950|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7951|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7952|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7953|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7954|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.9526|66|9526 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.9602|66|9602 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.11784|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.13563|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.13565|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.13566|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.14596|66|14596 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.15387|66|15387 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.15921|66|15921 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.16645|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.16646|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.16648|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.16651|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.16652|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.16653|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.16654|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.17900|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.18651|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.23175|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.23206|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.23330|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.24745|66|24745 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.24758|66|24758 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.24769|66|24769 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.24781|66|24781 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.25514|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.25517|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.25518|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.25522|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.25524|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.25531|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.25946|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.27567|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.29431|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.29439|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.29440|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.29574|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.30092|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.30120|66|30120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.31793|66|1826 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4119|66|1025 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4122|66|1088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6358|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.15921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.23206|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.23330|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.24792|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.24804|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.24816|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.30092|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.2|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.3|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.8|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.9|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.10|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.11|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.12|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.13|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.14|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.16|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.18|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.19|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.20|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.21|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.22|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.23|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.24|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.25|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.26|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.27|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.34|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.35|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.36|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.49|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.51|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.52|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.53|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.55|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.68|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.99|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.219|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.220|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.221|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.286|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.287|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.288|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.290|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.292|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.293|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.295|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.298|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.299|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.300|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.302|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.304|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.307|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.310|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.313|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.315|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.317|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.318|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.352|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.353|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.381|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.382|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.415|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.440|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.447|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.885|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.886|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.887|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.905|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.906|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.907|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.910|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.911|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.921|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.928|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.929|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.951|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.977|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.979|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.982|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.984|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1038|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1130|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1138|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1139|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1140|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1142|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1143|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1212|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1222|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1826|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.2031|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.2851|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.2852|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.2919|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.3773|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4068|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4085|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4119|66|4119 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4122|66|4122 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4212|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4213|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4214|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4215|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4216|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4217|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4218|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4219|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4220|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4221|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4222|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4224|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4226|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4434|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4435|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4436|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4437|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4438|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4439|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4440|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4441|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4442|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4443|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4451|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4773|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4774|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4775|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4776|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4777|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4778|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4779|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4780|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4781|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4782|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4784|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4786|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4787|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5137|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5138|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5139|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5140|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5141|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5142|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5143|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5144|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5145|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5146|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5148|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5151|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5155|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5159|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5501|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5502|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5503|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5504|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5505|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5506|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5507|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5508|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5509|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5510|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5516|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5522|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5861|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5862|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5863|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5864|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5865|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5866|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5867|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5868|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5869|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5870|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5872|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5875|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5878|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5879|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5884|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6344|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6345|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6346|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6347|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6348|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6349|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6350|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6351|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6352|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6353|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6358|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6366|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6763|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6764|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6765|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6766|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6767|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6768|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6769|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6770|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6771|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6772|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6782|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6784|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7174|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7175|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7176|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7177|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7178|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7179|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7180|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7181|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7182|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7183|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7188|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7192|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7194|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7196|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7523|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7524|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7525|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7526|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7527|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7528|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7529|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7530|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7531|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7532|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7535|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7539|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7543|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7544|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7949|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7950|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7951|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7952|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7953|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7954|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.9526|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.9602|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.11784|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.13563|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.13565|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.13566|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.14596|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.15387|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.15921|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.16645|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.16646|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.16648|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.16651|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.16652|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.16653|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.16654|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.17900|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.18651|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.21085|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.23175|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.23206|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.23330|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.23416|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.23554|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.23740|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.24265|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.24341|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.24415|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.24648|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.24792|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.24804|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.24816|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.25514|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.25517|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.25518|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.25522|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.25524|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.25531|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.25946|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.27567|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.29431|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.29439|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.29440|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.29574|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.30092|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.30120|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.31793|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.2|70|2138176 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.3|70|69247040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7|70|69247040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.8|70|2138176 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.9|70|2138176 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.10|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.11|70|69247296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.12|70|69247296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.13|70|69247040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.14|70|69247040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.16|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.18|70|2138432 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.19|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.20|70|2138176 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.21|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.22|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.23|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.24|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.25|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.26|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.27|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.34|70|10758208 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.35|70|1075847232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.36|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.49|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.51|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.52|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.53|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.55|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.68|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.99|70|2105408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.219|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.220|70|2138176 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.221|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.286|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.287|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.288|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.290|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.292|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.293|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.295|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.298|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.299|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.300|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.302|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.304|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.307|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.310|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.313|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.315|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.317|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.318|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.352|70|2105408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.353|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.381|70|2105408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.382|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.415|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.440|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.447|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.885|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.886|70|2105408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.887|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.905|70|2105408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.906|70|2105408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.907|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.910|70|2105408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.911|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.921|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.928|70|2105408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.929|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.951|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.977|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.979|70|1077944384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.982|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.984|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1038|70|1077944640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1130|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1138|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1139|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1140|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1142|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1143|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1212|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1222|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1826|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.2031|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.2851|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.2852|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.2919|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.3773|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4068|70|1077944640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4085|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4119|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4122|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4212|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4213|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4214|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4215|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4216|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4217|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4218|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4219|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4220|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4221|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4222|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4224|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4226|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4434|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4435|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4436|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4437|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4438|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4439|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4440|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4441|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4442|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4443|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4451|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4773|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4774|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4775|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4776|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4777|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4778|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4779|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4780|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4781|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4782|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4784|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4786|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4787|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5137|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5138|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5139|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5140|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5141|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5142|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5143|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5144|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5145|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5146|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5148|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5151|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5155|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5159|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5501|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5502|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5503|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5504|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5505|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5506|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5507|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5508|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5509|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5510|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5516|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5522|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5861|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5862|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5863|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5864|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5865|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5866|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5867|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5868|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5869|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5870|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5872|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5875|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5878|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5879|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5884|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6344|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6345|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6346|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6347|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6348|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6349|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6350|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6351|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6352|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6353|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6358|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6366|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6763|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6764|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6765|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6766|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6767|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6768|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6769|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6770|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6771|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6772|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6782|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6784|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7174|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7175|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7176|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7177|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7178|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7179|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7180|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7181|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7182|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7183|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7188|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7192|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7194|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7196|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7523|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7524|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7525|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7526|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7527|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7528|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7529|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7530|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7531|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7532|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7535|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7539|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7543|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7544|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7949|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7950|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7951|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7952|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7953|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7954|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.9526|70|1077944640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.9602|70|1077944384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.11784|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.13563|70|4202816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.13565|70|4202816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.13566|70|4202816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.14596|70|4227340 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.15387|70|1077944640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.15921|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.16645|70|4202496 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.16646|70|4202496 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.16648|70|1077944640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.16651|70|4202496 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.16652|70|4202496 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.16653|70|4202496 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.16654|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.17900|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.18651|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.21085|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.23175|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.23206|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.23330|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.23416|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.23554|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.23740|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.24265|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.24341|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.24415|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.24648|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.24792|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.24804|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.24816|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.25514|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.25517|70|4202496 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.25518|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.25522|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.25524|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.25531|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.25946|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.27567|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.29431|70|4202816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.29439|70|4202816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.29440|70|4202816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.29574|70|4227084 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.30092|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.30120|70|1077944640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.31793|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1|70|47815593 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.415|70|11704595 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.440|70|1641 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.447|70|2939 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.921|70|661 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.951|70|1988 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.977|70|42258 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.979|70|130 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.982|70|2183120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.984|70|609353 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1038|70|108 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1826|70|343860 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.2851|70|599691 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.2852|70|30429 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.2919|70|23150 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.3773|70|1799 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4068|70|8509 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4085|70|2084 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4119|70|412 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4122|70|408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4212|70|280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4213|70|240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4214|70|241 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4215|70|259 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4216|70|266 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4217|70|272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4218|70|277 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4219|70|241 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4220|70|273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4221|70|274 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4222|70|8067 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4224|70|2621 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4226|70|2804 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4434|70|268 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4435|70|259 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4436|70|275 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4437|70|275 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4438|70|277 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4439|70|276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4440|70|274 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4441|70|277 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4442|70|276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4443|70|239 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4451|70|45584 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4773|70|239 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4774|70|262 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4775|70|226 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4776|70|262 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4777|70|276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4778|70|269 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4779|70|281 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4780|70|276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4781|70|239 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4782|70|260 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4784|70|3791 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4786|70|2825 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4787|70|7117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5137|70|240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5138|70|239 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5139|70|239 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5140|70|270 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5141|70|258 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5142|70|262 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5143|70|272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5144|70|241 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5145|70|277 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5146|70|273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5148|70|10863 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5151|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5155|70|10970 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5159|70|10594 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5501|70|261 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5502|70|257 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5503|70|280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5504|70|278 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5505|70|244 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5506|70|239 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5507|70|270 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5508|70|273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5509|70|276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5510|70|273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5516|70|4836 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5522|70|21124 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5861|70|246 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5862|70|270 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5863|70|244 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5864|70|244 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5865|70|246 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5866|70|275 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5867|70|238 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5868|70|269 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5869|70|279 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5870|70|272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5872|70|41429 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5875|70|19365 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5878|70|46991648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5879|70|52821098 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5884|70|3435 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6344|70|267 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6345|70|243 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6346|70|276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6347|70|272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6348|70|280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6349|70|278 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6350|70|276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6351|70|244 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6352|70|280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6353|70|250 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6358|70|445561210 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6366|70|13054 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6763|70|266 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6764|70|261 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6765|70|282 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6766|70|260 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6767|70|280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6768|70|263 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6769|70|244 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6770|70|262 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6771|70|243 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6772|70|272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6782|70|58843 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6784|70|10064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7174|70|275 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7175|70|245 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7176|70|267 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7177|70|244 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7178|70|266 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7179|70|244 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7180|70|262 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7181|70|278 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7182|70|243 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7183|70|275 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7188|70|932720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7192|70|9561 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7194|70|9381 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7196|70|614030 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7523|70|244 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7524|70|273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7525|70|245 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7526|70|273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7527|70|258 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7528|70|277 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7529|70|247 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7530|70|274 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7531|70|243 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7532|70|281 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7535|70|9124 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7539|70|23453 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7543|70|18685 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7544|70|48354 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7949|70|276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7950|70|271 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7951|70|275 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7952|70|278 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7953|70|279 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7954|70|270 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.9526|70|3147 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.9602|70|1782 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.11784|70|3144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.13563|70|1155 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.13565|70|1111 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.13566|70|840 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.14596|70|576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.15387|70|7184 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.15921|70|428696 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.16645|70|398 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.16646|70|417 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.16648|70|452 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.16651|70|7854 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.16652|70|11563 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.16653|70|337047 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.16654|70|48671 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.17900|70|9419 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.18651|70|49729 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.23175|70|17447163 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.23206|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.23330|70|288617 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.24792|70|420 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.24804|70|420 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.24816|70|424 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.25514|70|14706 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.25517|70|9466 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.25518|70|3390 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.25522|70|21261189 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.25524|70|9292 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.25531|70|7991 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.25946|70|9042 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.27567|70|2019 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.29431|70|7802 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.29439|70|4630 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.29440|70|4717 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.29574|70|168 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.30092|70|48958 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.30120|70|298 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.31793|70|6593 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1|70|907472918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.447|70|211940 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.951|70|247 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1826|70|153898 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.2851|70|404783385 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.3773|70|58976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4068|70|213554 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4085|70|99544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4212|70|180175 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4215|70|46638 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4216|70|20835 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4217|70|39234 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4218|70|39314 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4220|70|40886 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4221|70|39287 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4222|70|6715 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4224|70|22797 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4226|70|9124 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4434|70|51688 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4435|70|38313 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4436|70|17535 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4437|70|71126 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4438|70|47536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4439|70|67988 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4440|70|39251 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4441|70|39284 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4442|70|50695 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4451|70|6777 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4774|70|20439 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4776|70|21515 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4777|70|47629 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4778|70|43156 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4779|70|275888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4780|70|39345 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4782|70|11007 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4784|70|13181 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4786|70|7538 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4787|70|9134 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5140|70|30041 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5141|70|178493 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5142|70|20444 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5143|70|79859 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5145|70|39283 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5146|70|42436 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5148|70|4870 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5151|70|36016 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5155|70|58150 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5159|70|1186216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5501|70|25576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5502|70|18927 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5503|70|97287 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5504|70|49110 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5507|70|270259 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5508|70|91707 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5509|70|48412 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5510|70|75707 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5516|70|6099 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5522|70|11911 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5862|70|26127 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5866|70|49264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5868|70|26087 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5869|70|39313 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5870|70|39330 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5872|70|117929 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5875|70|157340 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5878|70|2043571 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5879|70|15964 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5884|70|19762 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6344|70|78330 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6346|70|70555 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6347|70|751174 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6348|70|99836 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6349|70|41644 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6350|70|63325 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6352|70|80116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6353|70|7061 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6358|70|9773 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6366|70|8816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6763|70|37608 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6764|70|28410 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6765|70|39121 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6766|70|113498 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6767|70|52459 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6768|70|23267 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6770|70|22750 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6772|70|39275 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6782|70|88394 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6784|70|6706 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7174|70|52391 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7176|70|35904 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7178|70|102653 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7180|70|22668 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7181|70|68020 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7183|70|47585 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7188|70|237547 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7192|70|7853 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7194|70|6437 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7196|70|38537 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7524|70|39224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7526|70|198067 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7527|70|16238 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7528|70|49092 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7530|70|39285 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7532|70|63215 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7535|70|74317 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7539|70|18910 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7543|70|44737 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7544|70|14293 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7949|70|91353 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7950|70|34267 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7951|70|36861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7952|70|129112 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7953|70|39300 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7954|70|72025 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.9526|70|5403503 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.11784|70|18465 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.15921|70|2825516 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.16652|70|870295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.23330|70|7315 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24816|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24827|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24838|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.25514|70|9110 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.25517|70|21193 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.25518|70|426710 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.25522|70|58155066 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.25524|70|19364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.25531|70|6933 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.25946|70|32594 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.27567|70|30892 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.30092|70|16903 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1|70|2544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.415|70|5561 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.440|70|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.447|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.921|70|182 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.951|70|126 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.977|70|556 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.982|70|216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.984|70|696 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1038|70|32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1826|70|4218 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.2851|70|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.2852|70|455 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.2919|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.3773|70|44 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4068|70|300 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4085|70|172 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4119|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4212|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4215|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4216|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4217|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4218|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4220|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4221|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4222|70|218 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4224|70|263 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4226|70|148 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4434|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4435|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4436|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4437|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4438|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4439|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4441|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4442|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4443|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4451|70|373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4774|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4775|70|14 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4776|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4777|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4778|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4779|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4780|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4784|70|106 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4786|70|252 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4787|70|733 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5139|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5141|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5142|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5143|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5145|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5146|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5148|70|595 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5151|70|430 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5155|70|714 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5159|70|194 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5501|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5502|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5503|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5504|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5507|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5508|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5509|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5510|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5516|70|387 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5522|70|792 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5861|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5862|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5863|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5864|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5865|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5866|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5867|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5868|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5869|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5870|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5872|70|1264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5875|70|597 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5878|70|29412 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5879|70|427 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5884|70|111 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6344|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6345|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6346|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6347|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6348|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6349|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6350|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6351|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6352|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6353|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6358|70|929 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6366|70|137 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6763|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6764|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6765|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6766|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6767|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6768|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6769|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6770|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6771|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6772|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6782|70|463 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6784|70|967 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7174|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7175|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7176|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7177|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7178|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7179|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7180|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7181|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7182|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7183|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7188|70|43595 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7192|70|19 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7194|70|389 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7196|70|980 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7523|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7524|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7525|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7526|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7527|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7528|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7529|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7530|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7531|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7532|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7535|70|684 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7539|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7543|70|942 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7544|70|4227 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7949|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7950|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7951|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7952|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7953|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7954|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.9526|70|252 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.9602|70|159 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.11784|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.13563|70|19 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.14596|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.15387|70|101 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.15921|70|30006 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.16645|70|22 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.16646|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.16648|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.16651|70|174 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.16652|70|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.16653|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.16654|70|520 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.17900|70|490 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.18651|70|2671 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.23175|70|182 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.23330|70|3649 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24816|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24827|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24838|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.25514|70|298 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.25517|70|248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.25518|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.25522|70|466 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.25524|70|143 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.25531|70|97 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.25946|70|159 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.27567|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.29431|70|161 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.29439|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.29440|70|23 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.30092|70|100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.30120|70|87 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.31793|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1|70|18660 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.447|70|59 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.951|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1826|70|452 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.2851|70|22839 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.3773|70|2237 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4068|70|5574 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4085|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4212|70|303 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4215|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4216|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4217|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4218|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4220|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4224|70|43 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4226|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4434|70|1121 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4435|70|21 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4436|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4437|70|33 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4438|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4439|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4441|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4442|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4451|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4774|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4776|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4777|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4778|70|1027 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4779|70|250 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4780|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4782|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4784|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4786|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4787|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5140|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5141|70|4127 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5142|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5143|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5145|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5146|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5148|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5151|70|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5155|70|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5159|70|14440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5501|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5502|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5503|70|557 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5504|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5507|70|24 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5508|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5509|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5510|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5516|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5522|70|32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5862|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5866|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5868|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5869|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5870|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5872|70|795 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5875|70|2582 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5878|70|9135 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5879|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5884|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6344|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6346|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6347|70|1150 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6348|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6349|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6350|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6352|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6358|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6366|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6763|70|1109 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6764|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6765|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6766|70|648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6767|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6768|70|522 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6770|70|865 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6772|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6782|70|408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7174|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7176|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7178|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7180|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7181|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7183|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7188|70|6133 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7192|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7194|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7196|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7526|70|225 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7527|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7528|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7530|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7532|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7535|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7539|70|47 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7543|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7544|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7949|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7950|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7951|70|28 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7952|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7953|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7954|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.9526|70|41073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.11784|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.15921|70|1711 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.16652|70|197 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.23330|70|61 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24816|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24827|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24838|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.25514|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.25517|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.25518|70|1410 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.25522|70|1518 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.25524|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.25531|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.25946|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.27567|70|49 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.30092|70|158 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1|70|47039 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.9|70|40 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.11|70|245 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.12|70|311 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.20|70|14 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.415|70|13954 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.440|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.447|70|19 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.921|70|22489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.951|70|1732 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.977|70|24657 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.982|70|1100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.984|70|5582 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1038|70|331 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1826|70|32144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.2851|70|217 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.2852|70|1599 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.2919|70|35176 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.3773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4068|70|1660 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4085|70|210 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4212|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4213|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4215|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4216|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4217|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4218|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4219|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4220|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4222|70|2981 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4224|70|607 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4226|70|2862 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4434|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4435|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4436|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4437|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4438|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4439|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4440|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4441|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4442|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4443|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4451|70|2287 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4773|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4774|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4775|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4776|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4777|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4778|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4779|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4780|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4781|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4782|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4784|70|14 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4786|70|3993 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4787|70|11480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5137|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5138|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5139|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5140|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5141|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5142|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5143|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5144|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5145|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5146|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5148|70|5524 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5151|70|280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5155|70|97367 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5159|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5501|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5502|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5503|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5504|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5505|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5506|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5507|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5508|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5509|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5510|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5516|70|4198 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5522|70|6084 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5861|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5862|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5863|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5864|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5865|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5866|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5867|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5868|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5869|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5870|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5872|70|31159 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5875|70|822 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5878|70|195238 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5879|70|78077 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5884|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6344|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6345|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6346|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6347|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6348|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6349|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6350|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6351|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6352|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6353|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6358|70|686592 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6366|70|12776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6763|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6764|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6765|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6766|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6767|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6768|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6769|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6770|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6771|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6772|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6782|70|13772 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6784|70|6321 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7174|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7175|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7176|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7177|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7178|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7179|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7180|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7181|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7182|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7183|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7188|70|307921 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7192|70|18348 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7194|70|273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7196|70|3067 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7523|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7524|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7525|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7526|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7527|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7528|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7529|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7530|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7531|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7532|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7535|70|7094 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7539|70|50777 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7543|70|1066 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7544|70|364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7949|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7950|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7951|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7952|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7953|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7954|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.9526|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.9602|70|121 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.11784|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.13563|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.13565|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.13566|70|44 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.15387|70|54 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.15921|70|1378579 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.16645|70|234 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.16646|70|154 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.16648|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.16651|70|193 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.16652|70|1021 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.16653|70|3921 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.16654|70|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.17900|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.18651|70|95298 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.23175|70|14954 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.23330|70|19766 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24816|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24827|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24838|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.25514|70|92 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.25517|70|1219 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.25518|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.25522|70|9725 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.25524|70|882 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.25531|70|3647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.25946|70|71905 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.27567|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.29431|70|296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.29439|70|281 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.29440|70|340 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.30092|70|10383960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.30120|70|196 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.31793|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1|70|117771 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.2|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.3|70|10067 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7|70|6232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.9|70|165096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.11|70|172 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.13|70|6195 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.14|70|11539 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.20|70|83 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.34|70|1640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.99|70|1224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.352|70|1465 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.415|70|47264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.440|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.447|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.885|70|1852 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.886|70|2793 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.906|70|2684 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.910|70|2433 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.921|70|7808 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.928|70|3285 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.951|70|3945 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.977|70|15712 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.982|70|11084 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.984|70|20138 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1038|70|4123 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1826|70|15918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.2031|70|66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.2851|70|6824 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.2852|70|16319 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.2919|70|6967 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.3773|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4068|70|7158 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4085|70|7591 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4119|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4212|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4213|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4214|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4215|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4216|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4217|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4218|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4219|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4220|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4221|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4222|70|3293 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4224|70|4912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4226|70|4918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4434|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4435|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4436|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4437|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4438|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4439|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4440|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4441|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4442|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4443|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4451|70|3044 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4773|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4774|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4775|70|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4776|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4777|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4778|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4779|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4780|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4781|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4782|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4784|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4786|70|2105 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4787|70|6642 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5137|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5138|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5139|70|288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5140|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5141|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5142|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5143|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5144|70|230 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5145|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5146|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5148|70|5150 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5151|70|484 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5155|70|151153 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5159|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5501|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5502|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5503|70|251 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5504|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5505|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5506|70|230 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5507|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5508|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5509|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5510|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5516|70|2491 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5522|70|3204 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5861|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5862|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5863|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5864|70|252 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5865|70|253 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5866|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5867|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5868|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5869|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5870|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5872|70|57700 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5875|70|752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5878|70|119765 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5879|70|57462 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5884|70|109 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6344|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6345|70|224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6346|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6347|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6348|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6349|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6350|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6351|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6352|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6353|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6358|70|434649 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6366|70|12030 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6763|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6764|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6765|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6766|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6767|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6768|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6769|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6770|70|277 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6771|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6772|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6782|70|3117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6784|70|7283 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7174|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7175|70|246 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7176|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7177|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7178|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7179|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7180|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7181|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7182|70|228 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7183|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7188|70|135233 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7192|70|39719 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7194|70|101 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7196|70|16626 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7523|70|24 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7524|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7525|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7526|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7527|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7528|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7529|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7530|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7531|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7532|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7535|70|5517 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7539|70|198579 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7543|70|550 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7544|70|100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7949|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7950|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7951|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7952|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7953|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7954|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.9526|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.9602|70|2779 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.11784|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.13563|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.13565|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.13566|70|120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.14596|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.15387|70|1319 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.15921|70|1022608 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.16645|70|319 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.16646|70|199 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.16648|70|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.16651|70|179 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.16652|70|124 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.16653|70|529 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.16654|70|22 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.17900|70|60 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.18651|70|73337 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.21085|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.23175|70|24894 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.23330|70|14396 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.23416|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.23554|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.23740|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24816|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24827|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24838|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.25514|70|122 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.25517|70|749 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.25518|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.25522|70|45233 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.25524|70|641 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.25531|70|3036 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.25946|70|33483 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.27567|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.29431|70|94 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.29439|70|116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.29440|70|222 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.30092|70|20256468 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.30120|70|305 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.31793|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1|70|1006275 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.447|70|52 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1826|70|384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.2851|70|573116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.3773|70|54 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4068|70|9124 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4085|70|134 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4212|70|390 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4215|70|21 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4216|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4217|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4218|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4220|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4221|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4222|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4224|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4226|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4434|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4435|70|41 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4436|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4437|70|24 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4438|70|23 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4439|70|26 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4440|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4441|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4442|70|19 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4451|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4774|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4776|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4777|70|19 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4778|70|39 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4779|70|618 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4780|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4782|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4784|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4786|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4787|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5140|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5141|70|72 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5142|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5143|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5145|70|14 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5146|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5148|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5151|70|51 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5155|70|163 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5159|70|2336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5501|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5502|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5503|70|261 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5504|70|18 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5507|70|135 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5508|70|32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5509|70|18 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5510|70|27 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5516|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5522|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5862|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5866|70|19 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5868|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5869|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5870|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5872|70|61 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5875|70|190 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5878|70|2285 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5879|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5884|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6344|70|82 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6346|70|25 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6347|70|12397 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6348|70|35 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6349|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6350|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6352|70|78 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6353|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6358|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6366|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6763|70|39 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6764|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6765|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6766|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6767|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6768|70|42 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6770|70|156 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6772|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6782|70|18 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6784|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7174|70|19 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7176|70|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7178|70|34 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7180|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7181|70|26 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7183|70|18 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7188|70|287 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7192|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7194|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7196|70|25 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7524|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7526|70|457 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7527|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7528|70|18 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7530|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7532|70|22 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7535|70|72 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7539|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7543|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7544|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7949|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7950|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7951|70|14 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7952|70|101 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7953|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7954|70|47 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.9526|70|3775 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.11784|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.15921|70|7746 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.16652|70|404 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.23330|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24862|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24880|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24890|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.25514|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.25517|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.25518|70|327 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.25522|70|6389 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.25524|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.25531|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.25946|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.27567|70|34 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.30092|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1|70|354220 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.447|70|124 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1826|70|249 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.2851|70|177444 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.3773|70|243 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4068|70|3312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4085|70|42 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4212|70|144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4215|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4216|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4217|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4218|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4220|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4221|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4222|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4224|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4226|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4434|70|59 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4435|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4436|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4437|70|29 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4438|70|33 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4439|70|18 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4440|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4441|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4442|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4451|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4774|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4776|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4777|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4778|70|24 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4779|70|116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4780|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4782|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4784|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4786|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4787|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5140|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5141|70|251 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5142|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5143|70|21 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5145|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5146|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5148|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5151|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5155|70|26 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5159|70|717 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5501|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5502|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5503|70|122 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5504|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5507|70|83 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5508|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5509|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5510|70|18 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5516|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5522|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5862|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5866|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5868|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5869|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5870|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5872|70|48 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5875|70|76 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5878|70|1030 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5879|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5884|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6344|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6346|70|24 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6347|70|12442 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6348|70|22 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6349|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6350|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6352|70|32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6353|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6358|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6366|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6763|70|22 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6764|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6765|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6766|70|41 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6767|70|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6768|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6770|70|49 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6772|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6782|70|46 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6784|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7174|70|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7176|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7178|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7180|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7181|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7183|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7188|70|166 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7192|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7194|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7196|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7524|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7526|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7527|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7528|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7530|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7532|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7535|70|48 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7539|70|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7543|70|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7544|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7949|70|22 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7950|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7951|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7952|70|38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7953|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7954|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.9526|70|1954 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.11784|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.15921|70|1052 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.16652|70|431 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.23330|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24862|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24880|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24890|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.25514|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.25517|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.25518|70|337 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.25522|70|39081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.25524|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.25531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.25946|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.27567|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.30092|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.2|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.3|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7|66|4294967196 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.8|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.9|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.11|66|4294967196 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.12|66|4294967196 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.13|66|4294967196 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.14|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.18|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.20|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.34|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.35|66|25 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.99|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.220|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.352|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.381|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.415|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.440|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.447|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.886|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.905|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.906|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.910|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.921|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.928|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.951|66|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.977|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.979|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.982|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.984|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1038|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1826|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.2851|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.2852|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.3773|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4068|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4085|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4119|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4122|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4212|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4213|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4214|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4215|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4216|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4217|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4218|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4219|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4220|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4221|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4222|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4224|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4226|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4434|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4435|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4436|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4437|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4438|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4439|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4440|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4441|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4442|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4443|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4451|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4773|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4774|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4775|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4776|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4777|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4778|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4779|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4780|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4781|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4782|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4784|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4786|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4787|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5137|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5138|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5139|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5140|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5141|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5142|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5143|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5144|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5145|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5146|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5148|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5151|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5155|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5159|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5501|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5502|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5503|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5504|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5505|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5506|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5507|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5508|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5509|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5510|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5516|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5522|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5861|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5862|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5863|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5864|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5865|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5866|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5867|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5868|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5869|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5870|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5872|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5875|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5878|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5879|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5884|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6344|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6345|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6346|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6347|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6348|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6349|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6350|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6351|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6352|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6353|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6358|66|25 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6366|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6763|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6764|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6765|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6766|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6767|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6768|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6769|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6770|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6771|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6772|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6782|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6784|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7174|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7175|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7176|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7177|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7178|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7179|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7180|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7181|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7182|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7183|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7188|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7192|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7194|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7196|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7523|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7524|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7525|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7526|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7527|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7528|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7529|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7530|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7531|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7532|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7535|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7539|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7543|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7544|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7949|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7950|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7951|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7952|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7953|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7954|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.9526|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.9602|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.11784|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.13563|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.13565|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.13566|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.14596|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.15387|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.15921|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.16645|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.16646|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.16648|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.16651|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.16652|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.16653|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.16654|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.17900|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.18651|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.21085|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.23175|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.23330|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.23416|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.23554|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.23740|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24265|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24341|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24415|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24648|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24829|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24868|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24890|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24902|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24912|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.25514|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.25517|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.25518|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.25522|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.25524|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.25531|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.25946|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.27567|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.29431|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.29439|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.29440|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.29574|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.30092|66|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.30120|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.31793|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.10|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.16|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.19|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.21|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.22|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.23|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.25|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.26|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.27|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.35|66|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.36|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.49|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.51|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.52|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.53|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.55|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.68|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.219|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.221|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.286|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.287|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.288|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.290|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.292|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.293|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.295|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.298|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.299|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.300|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.302|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.304|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.307|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.310|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.313|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.315|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.317|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.318|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.353|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.382|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.885|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.887|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.907|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.911|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.929|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.951|66|4294967292 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1130|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1138|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1139|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1140|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1142|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1143|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1212|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1222|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.2031|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.2919|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6358|66|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.15921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.23330|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24829|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24890|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24902|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24912|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.30092|66|4294967283 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.2|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.3|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.8|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.9|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.10|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.11|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.12|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.13|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.14|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.16|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.18|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.19|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.20|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.21|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.22|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.23|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.25|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.26|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.27|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.34|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.35|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.36|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.49|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.51|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.52|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.53|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.55|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.68|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.99|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.219|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.220|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.221|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.286|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.287|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.288|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.290|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.292|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.293|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.295|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.298|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.299|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.300|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.302|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.304|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.307|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.310|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.313|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.315|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.317|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.318|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.352|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.353|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.381|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.382|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.415|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.440|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.447|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.885|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.886|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.887|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.905|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.906|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.907|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.910|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.911|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.921|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.928|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.929|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.951|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.977|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.979|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.982|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.984|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1038|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1130|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1138|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1139|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1140|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1142|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1143|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1212|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1222|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1826|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.2031|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.2851|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.2852|66|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.2919|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.3773|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4068|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4085|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4119|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4122|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4212|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4213|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4214|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4215|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4216|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4217|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4218|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4219|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4220|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4221|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4222|66|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4224|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4226|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4434|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4435|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4436|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4437|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4438|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4439|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4440|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4441|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4442|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4443|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4451|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4773|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4774|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4775|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4776|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4777|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4778|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4779|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4780|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4781|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4782|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4784|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4786|66|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4787|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5137|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5138|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5139|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5140|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5141|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5142|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5143|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5144|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5145|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5146|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5148|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5151|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5155|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5159|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5501|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5502|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5503|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5504|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5505|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5506|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5507|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5508|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5509|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5510|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5516|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5522|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5861|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5862|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5863|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5864|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5865|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5866|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5867|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5868|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5869|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5870|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5872|66|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5875|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5878|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5879|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5884|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6344|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6345|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6346|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6347|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6348|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6349|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6350|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6351|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6352|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6353|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6358|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6366|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6763|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6764|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6765|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6766|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6767|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6768|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6769|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6770|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6771|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6772|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6782|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6784|66|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7174|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7175|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7176|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7177|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7178|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7179|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7180|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7181|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7182|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7183|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7188|66|43 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7192|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7194|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7196|66|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7523|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7524|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7525|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7526|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7527|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7528|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7529|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7530|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7531|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7532|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7535|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7539|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7543|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7544|66|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7949|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7950|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7951|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7952|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7953|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7954|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.9526|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.9602|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.11784|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.13563|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.13565|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.13566|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.14596|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.15387|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.15921|66|49 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.16645|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.16646|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.16648|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.16651|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.16652|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.16653|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.16654|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.17900|66|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.18651|66|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.21085|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.23175|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.23330|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.23416|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.23554|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.23740|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24265|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24341|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24415|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24648|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24829|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24868|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24890|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24902|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24912|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.25514|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.25517|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.25518|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.25522|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.25524|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.25531|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.25946|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.27567|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.29431|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.29439|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.29440|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.29574|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.30092|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.30120|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.31793|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6358|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.15921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.23330|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24829|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24890|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24902|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24912|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.30092|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.2|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.3|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.8|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.9|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.10|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.11|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.12|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.13|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.14|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.16|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.18|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.19|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.20|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.21|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.22|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.23|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.25|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.26|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.27|70|14 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.34|70|43 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.35|70|43 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.36|70|43 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.49|70|44 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.51|70|52 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.52|70|52 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.53|70|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.55|70|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.68|70|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.99|70|58 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.219|70|79 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.220|70|79 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.221|70|79 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.286|70|98 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.287|70|98 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.288|70|98 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.290|70|98 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.292|70|98 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.293|70|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.295|70|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.298|70|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.299|70|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.300|70|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.302|70|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.304|70|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.307|70|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.310|70|100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.313|70|100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.315|70|101 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.317|70|101 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.318|70|101 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.352|70|116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.353|70|116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.381|70|125 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.382|70|125 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.415|70|234 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.440|70|290 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.447|70|315 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.885|70|478 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.886|70|478 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.887|70|478 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.905|70|501 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.906|70|502 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.907|70|502 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.910|70|505 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.911|70|505 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.921|70|514 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.928|70|547 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.929|70|547 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.951|70|592 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.977|70|610 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.979|70|612 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.982|70|620 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.984|70|620 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1038|70|645 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1130|70|722 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1138|70|730 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1139|70|730 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1140|70|730 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1142|70|732 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1143|70|732 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1212|70|812 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1222|70|821 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1826|70|1272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.2031|70|1872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.2851|70|3471 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.2852|70|3472 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.2919|70|3549 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.3773|70|5544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4068|70|5715 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4085|70|5736 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4119|70|5789 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4122|70|5791 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4212|70|5972 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4213|70|5972 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4214|70|5972 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4215|70|5972 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4216|70|5972 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4217|70|5972 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4218|70|5972 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4219|70|5972 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4220|70|5973 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4221|70|5973 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4222|70|5973 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4224|70|5973 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4226|70|5973 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4434|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4435|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4436|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4437|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4438|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4439|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4440|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4441|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4442|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4443|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4451|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4773|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4774|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4775|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4776|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4777|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4778|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4779|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4780|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4781|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4782|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4784|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4786|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4787|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5137|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5138|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5139|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5140|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5141|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5142|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5143|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5144|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5145|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5146|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5148|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5151|70|6274 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5155|70|6274 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5159|70|6275 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5501|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5502|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5503|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5504|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5505|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5506|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5507|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5508|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5509|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5510|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5516|70|6374 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5522|70|6375 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5861|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5862|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5863|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5864|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5865|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5866|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5867|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5868|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5869|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5870|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5872|70|6474 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5875|70|6474 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5878|70|6474 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5879|70|6474 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5884|70|6475 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6344|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6345|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6346|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6347|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6348|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6349|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6350|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6351|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6352|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6353|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6358|70|6574 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6366|70|6575 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6763|70|6673 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6764|70|6673 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6765|70|6673 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6766|70|6673 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6767|70|6673 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6768|70|6673 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6769|70|6674 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6770|70|6674 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6771|70|6674 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6772|70|6674 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6782|70|6675 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6784|70|6675 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7174|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7175|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7176|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7177|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7178|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7179|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7180|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7181|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7182|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7183|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7188|70|6775 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7192|70|6775 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7194|70|6775 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7196|70|6776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7523|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7524|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7525|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7526|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7527|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7528|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7529|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7530|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7531|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7532|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7535|70|6875 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7539|70|6876 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7543|70|6876 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7544|70|6876 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7949|70|6974 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7950|70|6974 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7951|70|6974 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7952|70|6974 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7953|70|6974 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7954|70|6974 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.9526|70|7966 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.9602|70|7993 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.11784|70|10074 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.13563|70|131991877 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.13565|70|131991978 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.13566|70|131991978 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.14596|70|10549 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.15387|70|3740161 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.15921|70|11089 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.16645|70|11973 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.16646|70|11973 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.16648|70|11976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.16651|70|11976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.16652|70|11977 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.16653|70|11977 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.16654|70|11977 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.17900|70|14608 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.18651|70|51135 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.21085|70|181345385 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.23175|70|340220 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.23330|70|342244 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.23416|70|181499095 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.23554|70|181505145 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.23740|70|181519405 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24265|70|181560701 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24341|70|181561468 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24415|70|181567387 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24648|70|181585424 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24829|70|181600077 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24868|70|181603386 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24890|70|181605125 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24902|70|181606134 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24912|70|181607143 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.25514|70|370941 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.25517|70|370941 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.25518|70|370941 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.25522|70|370942 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.25524|70|370943 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.25531|70|370946 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.25946|70|371401 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.27567|70|371629 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.29431|70|35645721 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.29439|70|35645821 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.29440|70|35645821 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.29574|70|371925 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.30092|70|375282 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.30120|70|376493 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.31793|70|173191645 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1|70|49713152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.415|70|33943552 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.440|70|141217792 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.447|70|47235072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.921|70|4435968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.951|70|57036800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.977|70|61444096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.979|70|4464640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.982|70|22003712 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.984|70|24870912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1038|70|8642560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1826|70|269340672 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.2851|70|129306624 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.2852|70|86798336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.2919|70|92344320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.3773|70|128389120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4068|70|123240448 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4085|70|2330624 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4119|70|112705536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4122|70|112705536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4212|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4213|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4214|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4215|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4216|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4217|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4218|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4219|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4220|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4221|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4222|70|54636544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4224|70|26431488 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4226|70|30048256 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4434|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4435|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4436|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4437|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4438|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4439|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4440|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4441|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4442|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4443|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4451|70|290471936 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4773|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4774|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4775|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4776|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4777|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4778|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4779|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4780|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4781|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4782|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4784|70|62533632 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4786|70|39739392 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4787|70|38821888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5137|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5138|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5139|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5140|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5141|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5142|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5143|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5144|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5145|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5146|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5148|70|33505280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5151|70|10104832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5155|70|33701888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5159|70|30638080 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5501|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5502|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5503|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5504|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5505|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5506|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5507|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5508|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5509|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5510|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5516|70|102584320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5522|70|131997696 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5861|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5862|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5863|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5864|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5865|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5866|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5867|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5868|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5869|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5870|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5872|70|153038848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5875|70|44605440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5878|70|263057408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5879|70|49266688 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5884|70|73691136 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6344|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6345|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6346|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6347|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6348|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6349|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6350|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6351|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6352|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6353|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6358|70|101949440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6366|70|99876864 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6763|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6764|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6765|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6766|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6767|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6768|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6769|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6770|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6771|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6772|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6782|70|17645568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6784|70|135647232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7174|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7175|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7176|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7177|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7178|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7179|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7180|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7181|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7182|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7183|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7188|70|480456704 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7192|70|33775616 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7194|70|39104512 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7196|70|59047936 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7523|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7524|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7525|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7526|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7527|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7528|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7529|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7530|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7531|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7532|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7535|70|30617600 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7539|70|84951040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7543|70|155557888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7544|70|1276493824 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7949|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7950|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7951|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7952|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7953|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7954|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.9526|70|105476096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.9602|70|105476096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.11784|70|117710848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.13563|70|124289024 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.13565|70|124289024 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.13566|70|124289024 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.15387|70|50196480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.15921|70|341299200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.16645|70|6615040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.16646|70|6615040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.16648|70|123240448 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.16651|70|64565248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.16652|70|4423680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.16653|70|4186112 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.16654|70|318685184 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.17900|70|67162112 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.18651|70|387264512 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.23175|70|10960896 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.23330|70|142557184 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24890|70|6631424 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24902|70|6631424 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24912|70|6631424 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.25514|70|131899392 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.25517|70|55631872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.25518|70|4431872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.25522|70|168435712 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.25524|70|34631680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.25531|70|33611776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.25946|70|60416000 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.27567|70|6381568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.29431|70|126652416 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.29439|70|124289024 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.29440|70|124289024 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.30092|70|6445785088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.30120|70|13733888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.31793|70|43233280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1|70|4608000 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.415|70|1953792 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.440|70|225280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.447|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.921|70|40960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.951|70|503808 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.977|70|1064960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.979|70|49152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.982|70|454656 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.984|70|1134592 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1038|70|16384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1826|70|5361664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.2851|70|446464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.2852|70|15581184 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.2919|70|91148288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.3773|70|143360 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4068|70|6983680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4085|70|192512 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4119|70|49152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4122|70|45056 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4212|70|217088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4213|70|155648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4214|70|176128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4215|70|344064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4216|70|311296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4217|70|319488 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4218|70|282624 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4219|70|176128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4220|70|303104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4221|70|282624 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4222|70|16093184 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4224|70|2609152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4226|70|4157440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4434|70|319488 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4435|70|356352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4436|70|286720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4437|70|311296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4438|70|278528 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4439|70|303104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4440|70|303104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4441|70|286720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4442|70|307200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4443|70|167936 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4451|70|16547840 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4773|70|155648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4774|70|356352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4775|70|389120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4776|70|356352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4777|70|299008 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4778|70|315392 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4779|70|262144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4780|70|270336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4781|70|176128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4782|70|372736 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4784|70|778240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4786|70|3137536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4787|70|5173248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5137|70|180224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5138|70|180224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5139|70|167936 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5140|70|331776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5141|70|364544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5142|70|339968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5143|70|303104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5144|70|180224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5145|70|286720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5146|70|307200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5148|70|16998400 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5151|70|1056768 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5155|70|16830464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5159|70|17190912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5501|70|331776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5502|70|356352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5503|70|262144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5504|70|290816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5505|70|155648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5506|70|180224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5507|70|303104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5508|70|311296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5509|70|290816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5510|70|311296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5516|70|4354048 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5522|70|4542464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5861|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5862|70|331776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5863|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5864|70|143360 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5865|70|401408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5866|70|315392 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5867|70|393216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5868|70|331776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5869|70|274432 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5870|70|290816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5872|70|21540864 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5875|70|17674240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5878|70|95326208 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5879|70|22757376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5884|70|393216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6344|70|335872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6345|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6346|70|286720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6347|70|307200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6348|70|286720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6349|70|286720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6350|70|303104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6351|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6352|70|286720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6353|70|397312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6358|70|15302656 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6366|70|851968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6763|70|335872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6764|70|364544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6765|70|274432 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6766|70|364544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6767|70|274432 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6768|70|327680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6769|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6770|70|348160 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6771|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6772|70|303104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6782|70|8056832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6784|70|18399232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7174|70|299008 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7175|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7176|70|339968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7177|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7178|70|339968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7179|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7180|70|327680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7181|70|274432 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7182|70|139264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7183|70|299008 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7188|70|175198208 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7192|70|33746944 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7194|70|17629184 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7196|70|14553088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7523|70|143360 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7524|70|307200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7525|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7526|70|286720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7527|70|344064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7528|70|294912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7529|70|139264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7530|70|303104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7531|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7532|70|282624 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7535|70|16130048 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7539|70|83767296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7543|70|1945600 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7544|70|20705280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7949|70|294912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7950|70|290816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7951|70|286720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7952|70|282624 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7953|70|290816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7954|70|335872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.9526|70|917504 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.9602|70|573440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.11784|70|69632 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.13563|70|6098944 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.13565|70|5926912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.13566|70|5185536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.15387|70|1994752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.15921|70|231464960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.16645|70|278528 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.16646|70|307200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.16648|70|3219456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.16651|70|18980864 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.16652|70|1286144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.16653|70|1474560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.16654|70|17506304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.17900|70|1490944 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.18651|70|95395840 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.23175|70|1228800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.23330|70|35278848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24912|70|856064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24925|70|851968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24937|70|851968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24949|70|864256 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.25514|70|22290432 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.25517|70|25726976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.25518|70|598016 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.25522|70|25862144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.25524|70|26071040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.25531|70|25788416 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.25946|70|26468352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.27567|70|1257472 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.29431|70|14893056 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.29439|70|8228864 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.29440|70|8417280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.30092|70|110612480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.30120|70|1159168 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.31793|70|24371200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.2|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.3|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.8|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.9|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.10|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.11|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.12|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.13|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.14|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.16|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.18|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.19|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.20|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.21|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.22|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.23|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.25|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.26|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.27|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.34|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.35|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.36|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.49|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.51|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.52|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.53|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.55|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.68|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.99|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.219|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.220|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.221|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.286|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.287|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.288|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.290|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.292|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.293|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.295|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.298|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.299|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.300|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.302|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.304|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.307|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.310|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.313|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.315|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.317|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.318|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.352|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.353|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.381|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.382|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.415|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.440|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.447|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.885|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.886|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.887|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.905|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.906|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.907|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.910|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.911|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.921|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.928|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.929|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.951|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.977|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.979|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.982|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.984|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1038|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1130|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1138|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1139|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1140|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1142|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1143|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1212|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1222|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1826|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.2031|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.2851|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.2852|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.2919|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.3773|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4068|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4085|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4119|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4122|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4212|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4213|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4214|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4215|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4216|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4217|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4218|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4219|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4220|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4221|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4222|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4224|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4226|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4434|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4435|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4436|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4437|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4438|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4439|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4440|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4441|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4442|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4443|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4451|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4773|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4774|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4775|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4776|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4777|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4778|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4779|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4780|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4781|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4782|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4784|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4786|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4787|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5137|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5138|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5139|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5140|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5141|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5142|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5143|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5144|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5145|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5146|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5148|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5151|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5155|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5159|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5501|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5502|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5503|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5504|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5505|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5506|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5507|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5508|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5509|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5510|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5516|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5522|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5861|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5862|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5863|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5864|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5865|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5866|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5867|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5868|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5869|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5870|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5872|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5875|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5878|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5879|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5884|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6344|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6345|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6346|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6347|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6348|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6349|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6350|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6351|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6352|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6353|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6358|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6366|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6763|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6764|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6765|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6766|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6767|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6768|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6769|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6770|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6771|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6772|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6782|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6784|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7174|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7175|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7176|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7177|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7178|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7179|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7180|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7181|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7182|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7183|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7188|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7192|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7194|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7196|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7523|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7524|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7525|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7526|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7527|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7528|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7529|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7530|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7531|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7532|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7535|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7539|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7543|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7544|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7949|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7950|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7951|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7952|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7953|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7954|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.9526|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.9602|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.11784|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.13563|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.13565|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.13566|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.14596|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.15387|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.15921|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.16645|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.16646|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.16648|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.16651|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.16652|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.16653|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.16654|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.17900|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.18651|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.21085|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.23175|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.23330|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.23416|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.23554|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.23740|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24265|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24341|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24415|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24648|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24829|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24868|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24912|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24925|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24937|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24949|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.25514|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.25517|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.25518|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.25522|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.25524|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.25531|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.25946|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.27567|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.29431|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.29439|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.29440|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.29574|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.30092|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.30120|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.31793|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1|70|94346280902656 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.415|70|94425133027328 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.440|70|94857912774656 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.447|70|94129310830592 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.921|70|94485268529152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.951|70|94098792108032 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.977|70|94355467161600 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.979|70|93976630431744 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.982|70|94107871502336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.984|70|93847942225920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1038|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1826|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.2851|70|94072984322048 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.2852|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.2919|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.3773|70|94745531465728 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4068|70|1449304064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4085|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4119|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4122|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4212|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4213|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4214|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4215|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4216|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4217|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4218|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4219|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4220|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4221|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4222|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4224|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4226|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4434|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4435|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4436|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4437|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4438|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4439|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4440|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4441|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4442|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4443|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4451|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4773|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4774|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4775|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4776|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4777|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4778|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4779|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4780|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4781|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4782|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4784|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4786|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4787|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5137|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5138|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5139|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5140|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5141|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5142|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5143|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5144|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5145|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5146|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5148|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5151|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5155|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5159|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5501|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5502|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5503|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5504|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5505|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5506|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5507|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5508|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5509|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5510|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5516|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5522|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5861|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5862|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5863|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5864|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5865|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5866|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5867|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5868|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5869|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5870|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5872|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5875|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5878|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5879|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5884|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6344|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6345|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6346|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6347|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6348|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6349|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6350|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6351|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6352|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6353|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6358|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6366|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6763|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6764|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6765|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6766|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6767|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6768|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6769|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6770|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6771|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6772|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6782|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6784|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7174|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7175|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7176|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7177|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7178|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7179|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7180|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7181|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7182|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7183|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7188|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7192|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7194|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7196|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7523|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7524|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7525|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7526|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7527|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7528|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7529|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7530|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7531|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7532|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7535|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7539|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7543|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7544|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7949|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7950|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7951|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7952|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7953|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7954|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.9526|70|94884366323712 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.9602|70|93935795552256 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.11784|70|94089056813056 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.13563|70|1449304064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.13565|70|1449304064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.13566|70|1449304064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.15387|70|94922591174656 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.15921|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.16645|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.16646|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.16648|70|1449304064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.16651|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.16652|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.16653|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.16654|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.17900|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.18651|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.23175|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.23330|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24937|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24949|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24959|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.25514|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.25517|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.25518|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.25522|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.25524|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.25531|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.25946|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.27567|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.29431|70|1449304064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.29439|70|1449304064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.29440|70|1449304064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.30092|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.30120|70|1448448000 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.31793|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1|70|94346282237616 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.415|70|94425133284104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.440|70|94857912837404 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.447|70|94129311134192 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.921|70|94485268545932 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.951|70|94098792218652 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.977|70|94355467578284 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.979|70|93976630475108 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.982|70|94107871543300 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.984|70|93847942756952 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1038|70|4206060 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1826|70|4202636 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.2851|70|94072984381548 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.2852|70|134919186 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.2919|70|134536564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.3773|70|94745532287748 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4068|70|1449782480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4085|70|134529492 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4119|70|4226284 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4122|70|4226284 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4212|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4213|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4214|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4215|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4216|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4217|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4218|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4219|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4220|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4221|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4222|70|134981023 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4224|70|134531971 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4226|70|134682980 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4434|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4435|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4436|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4437|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4438|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4439|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4440|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4441|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4442|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4443|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4451|70|135983196 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4773|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4774|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4775|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4776|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4777|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4778|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4779|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4780|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4781|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4782|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4784|70|4711036 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4786|70|134609472 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4787|70|134762383 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5137|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5138|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5139|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5140|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5141|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5142|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5143|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5144|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5145|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5146|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5148|70|135144380 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5151|70|139997850 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5155|70|135084855 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5159|70|134749296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5501|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5502|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5503|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5504|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5505|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5506|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5507|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5508|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5509|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5510|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5516|70|4384068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5522|70|4933648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5861|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5862|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5863|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5864|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5865|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5866|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5867|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5868|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5869|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5870|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5872|70|134891524 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5875|70|135202884 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5878|70|138002848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5879|70|134928616 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5884|70|4571836 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6344|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6345|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6346|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6347|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6348|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6349|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6350|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6351|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6352|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6353|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6358|70|135058942 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6366|70|4490669 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6763|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6764|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6765|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6766|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6767|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6768|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6769|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6770|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6771|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6772|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6782|70|134514660 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6784|70|135869367 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7174|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7175|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7176|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7177|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7178|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7179|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7180|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7181|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7182|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7183|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7188|70|134514716 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7192|70|134813894 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7194|70|135488239 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7196|70|136947495 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7523|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7524|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7525|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7526|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7527|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7528|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7529|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7530|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7531|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7532|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7535|70|136799079 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7539|70|135035883 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7543|70|4497788 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7544|70|31481328 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7949|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7950|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7951|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7952|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7953|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7954|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.9526|70|94884366724572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.9602|70|93935795953116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.11784|70|94089056838084 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.13563|70|1449782480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.13565|70|1449782480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.13566|70|1449782480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.15387|70|94922591840116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.15921|70|134514716 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.16645|70|4212076 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.16646|70|4212076 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.16648|70|1449782480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.16651|70|142468913 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.16652|70|134698152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.16653|70|134728030 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.16654|70|137412196 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.17900|70|135207764 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.18651|70|134633080 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.23175|70|134519412 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.23330|70|4219948 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24959|70|4226284 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24970|70|4226284 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24981|70|4226284 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.25514|70|4814432 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.25517|70|136199459 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.25518|70|4205412 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.25522|70|6216072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.25524|70|136080339 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.25531|70|135084667 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.25946|70|135897564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.27567|70|134534924 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.29431|70|1449782480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.29439|70|1449782480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.29440|70|1449782480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.30092|70|61374939 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.30120|70|1449459400 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.31793|70|134860908 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1|70|140732766786352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.415|70|140721758066368 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.440|70|140731499222656 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.447|70|140732891572384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.921|70|140733613925856 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.951|70|140730624358624 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.977|70|140724594581040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.979|70|140733472443312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.982|70|140733876277760 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.984|70|140720738944912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1038|70|140723899688240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1826|70|140722242821376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.2851|70|140734565503824 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.2852|70|4292325408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.2919|70|4294440720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.3773|70|140730125576880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4068|70|4286897968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4085|70|4293351552 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4119|70|140725382887920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4122|70|140723316694560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4212|70|4287489568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4213|70|4293986800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4214|70|4289328080 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4215|70|4294445600 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4216|70|4291935968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4217|70|4289703376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4218|70|4292756496 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4219|70|4294513744 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4220|70|4291117600 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4221|70|4292853408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4222|70|4286991808 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4224|70|4292363312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4226|70|4292525680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4434|70|4294832560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4435|70|4287015584 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4436|70|4288987344 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4437|70|4293374224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4438|70|4293846800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4439|70|4291522960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4440|70|4289794976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4441|70|4290656304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4442|70|4291588800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4443|70|4293195920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4451|70|4293533520 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4773|70|4294732944 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4774|70|4288887968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4775|70|4290211680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4776|70|4294483632 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4777|70|4291875184 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4778|70|4294880304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4779|70|4288679264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4780|70|4287485568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4781|70|4291050064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4782|70|4293145024 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4784|70|140730893949088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4786|70|4288706976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4787|70|4292692448 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5137|70|4292674880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5138|70|4291111088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5139|70|4289792752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5140|70|4292719184 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5141|70|4286929264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5142|70|4287505680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5143|70|4288357376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5144|70|4292965216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5145|70|4292314256 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5146|70|4291626272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5148|70|4293754320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5151|70|4289031952 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5155|70|4288322400 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5159|70|4290637504 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5501|70|4286645984 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5502|70|4289633248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5503|70|4289228672 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5504|70|4294403584 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5505|70|4286594496 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5506|70|4291186144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5507|70|4294411440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5508|70|4291913792 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5509|70|4288302880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5510|70|4288457536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5516|70|140735832122880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5522|70|140729354123712 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5861|70|4287136832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5862|70|4289574800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5863|70|4291120320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5864|70|4288947808 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5865|70|4290187952 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5866|70|4294212928 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5867|70|4293525072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5868|70|4292464192 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5869|70|4287035440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5870|70|4291962352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5872|70|4290437920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5875|70|4291297920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5878|70|4289252848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5879|70|4291265664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5884|70|140736910470784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6344|70|4287815904 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6345|70|4294724528 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6346|70|4290962032 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6347|70|4293920736 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6348|70|4292734080 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6349|70|4289813888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6350|70|4293015152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6351|70|4290208032 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6352|70|4292000672 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6353|70|4291706944 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6358|70|4293146112 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6366|70|140728188951872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6763|70|4294749072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6764|70|4288063232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6765|70|4289995312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6766|70|4293695712 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6767|70|4291392720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6768|70|4293346048 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6769|70|4287458816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6770|70|4286902272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6771|70|4293823984 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6772|70|4291579072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6782|70|4294855904 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6784|70|4293534512 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7174|70|4287874832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7175|70|4291819536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7176|70|4293358544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7177|70|4294355568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7178|70|4289270384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7179|70|4290711744 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7180|70|4293474160 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7181|70|4289841920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7182|70|4286670624 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7183|70|4287157424 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7188|70|4287091520 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7192|70|4294876576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7194|70|4288912144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7196|70|4291264960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7523|70|4293564304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7524|70|4290690160 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7525|70|4286817680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7526|70|4291985984 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7527|70|4289521808 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7528|70|4290590064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7529|70|4289720960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7530|70|4290056128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7531|70|4291370368 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7532|70|4291151152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7535|70|4293372912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7539|70|4293670848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7543|70|140732176812672 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7544|70|140735184362704 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7949|70|4287648544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7950|70|4294565152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7951|70|4290050880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7952|70|4294614016 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7953|70|4291006016 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7954|70|4293249616 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.9526|70|140726487098160 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.9602|70|140726560751680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.11784|70|140728703830320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.13563|70|4286897968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.13565|70|4286897968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.13566|70|4286897968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.15387|70|140724663555776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.15921|70|4286590512 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.16645|70|140725167277552 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.16646|70|140725725288096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.16648|70|4286897968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.16651|70|4292212240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.16652|70|4286632176 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.16653|70|4287934624 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.16654|70|4290916928 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.17900|70|4289663520 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.18651|70|4292495440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.23175|70|4289708384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.23330|70|140734326725328 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24959|70|140724777098784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24970|70|140726176479568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24981|70|140723622028160 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.25514|70|140722861115168 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.25517|70|4289440944 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.25518|70|140722276450480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.25522|70|140736876610384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.25524|70|4288663248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.25531|70|4288061104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.25946|70|4290285840 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.27567|70|4292665696 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.29431|70|4286897968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.29439|70|4286897968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.29440|70|4286897968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.30092|70|140721301273248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.30120|70|4291970640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.31793|70|4290252096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1|70|140732766782744 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.415|70|140721758064920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.440|70|140731499220544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.447|70|140732891569736 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.921|70|140733613925384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.951|70|140730624339344 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.977|70|140724594578896 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.979|70|140733472442376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.982|70|140733876276776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.984|70|140720738943960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1038|70|140723899687800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1826|70|140722242820352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.2851|70|140734565502536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.2852|70|4292322572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.2919|70|4294440236 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.3773|70|140730125574280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4068|70|4286897148 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4085|70|4293351080 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4119|70|140725382877256 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4122|70|140723316683896 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4212|70|4287488856 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4213|70|4293986088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4214|70|4289327368 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4215|70|4294444888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4216|70|4291935256 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4217|70|4289702664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4218|70|4292755784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4219|70|4294513032 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4220|70|4291116888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4221|70|4292852696 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4222|70|4286991448 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4224|70|4292361580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4226|70|4292524976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4434|70|4294831848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4435|70|4287014872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4436|70|4288986632 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4437|70|4293373512 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4438|70|4293846088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4439|70|4291522248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4440|70|4289794264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4441|70|4290655592 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4442|70|4291588088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4443|70|4293195208 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4451|70|4293529688 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4773|70|4294732232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4774|70|4288887256 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4775|70|4290210968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4776|70|4294482920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4777|70|4291874472 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4778|70|4294879592 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4779|70|4288678552 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4780|70|4287484856 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4781|70|4291049352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4782|70|4293144312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4784|70|140730893947920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4786|70|4288703544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4787|70|4292687440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5137|70|4292674168 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5138|70|4291110376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5139|70|4289792040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5140|70|4292718472 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5141|70|4286928552 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5142|70|4287504968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5143|70|4288356664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5144|70|4292964504 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5145|70|4292313544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5146|70|4291625560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5148|70|4293752012 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5151|70|4289030620 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5155|70|4288319948 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5159|70|4290636684 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5501|70|4286645272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5502|70|4289632536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5503|70|4289227960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5504|70|4294402872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5505|70|4286593784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5506|70|4291185432 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5507|70|4294410728 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5508|70|4291913080 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5509|70|4288302168 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5510|70|4288456824 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5516|70|140735832122368 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5522|70|140729354123128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5861|70|4287136120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5862|70|4289574088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5863|70|4291119608 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5864|70|4288947096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5865|70|4290187240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5866|70|4294212216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5867|70|4293524360 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5868|70|4292463480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5869|70|4287034728 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5870|70|4291961640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5872|70|4290435364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5875|70|4291297404 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5878|70|4289251740 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5879|70|4291264988 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5884|70|47493968305664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6344|70|4287815192 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6345|70|4294723816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6346|70|4290961320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6347|70|4293920024 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6348|70|4292733368 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6349|70|4289813176 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6350|70|4293014440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6351|70|4290207320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6352|70|4291999960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6353|70|4291706232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6358|70|4293132552 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6366|70|140728188949224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6763|70|4294748360 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6764|70|4288062520 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6765|70|4289994600 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6766|70|4293695000 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6767|70|4291392008 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6768|70|4293345336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6769|70|4287458104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6770|70|4286901560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6771|70|4293823272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6772|70|4291578360 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6782|70|4294848472 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6784|70|4293532236 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7174|70|4287874120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7175|70|4291818824 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7176|70|4293357832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7177|70|4294354856 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7178|70|4289269672 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7179|70|4290711032 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7180|70|4293473448 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7181|70|4289841208 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7182|70|4286669912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7183|70|4287156712 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7188|70|4287074272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7192|70|4294875964 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7194|70|4288909308 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7196|70|4291264492 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7523|70|4293563592 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7524|70|4290689448 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7525|70|4286816968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7526|70|4291985272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7527|70|4289521096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7528|70|4290589352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7529|70|4289720248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7530|70|4290055416 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7531|70|4291369656 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7532|70|4291150440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7535|70|4293370812 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7539|70|4293669900 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7543|70|140732176812040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7544|70|140735184345848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7949|70|4287647832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7950|70|4294564440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7951|70|4290050168 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7952|70|4294613304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7953|70|4291005304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7954|70|4293248904 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.9526|70|140726487097096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.9602|70|140726560750616 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.11784|70|140728703829384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.13563|70|4286896992 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.13565|70|4286896992 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.13566|70|4286896944 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.15387|70|140724663555288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.15921|70|4286573264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.16645|70|140725167275880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.16646|70|140725725286424 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.16648|70|4286896812 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.16651|70|4292209804 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.16652|70|4286627228 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.16653|70|4287929644 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.16654|70|4290912492 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.17900|70|4289662832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.18651|70|4292494880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.23175|70|4289703800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.23330|70|140734326723760 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24959|70|140724777087416 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24970|70|140726176468200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24981|70|140723622016792 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24992|70|140733967253416 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.25514|70|140722861110416 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.25517|70|4289437348 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.25518|70|140722276437528 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.25522|70|140736876606288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.25524|70|4288658604 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.25531|70|4288058524 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.25946|70|4290285236 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.27567|70|4292665240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.29431|70|4286896992 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.29439|70|4286896992 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.29440|70|4286896992 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.30092|70|94558004171520 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.30120|70|4291965888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.31793|70|4290242268 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1|70|47627409845491 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.415|70|47323536116979 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.440|70|46986588298131 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.447|70|47986283310323 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.921|70|47136718375795 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.951|70|47549278190867 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.977|70|47093558488339 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.979|70|47979494984563 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.982|70|47837183442928 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.984|70|47780355079411 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1038|70|47972738981392 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1826|70|47663091748115 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.2851|70|47067289817072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.2852|70|1457514643 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.2919|70|1431925808 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.3773|70|47160180738931 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4068|70|1432785968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4085|70|1432753200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4119|70|47897375533984 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4122|70|47118343572384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4212|70|1432523824 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4213|70|1432650800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4214|70|1432364080 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4215|70|1432220720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4216|70|1432278064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4217|70|1432626224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4218|70|1432245296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4219|70|1432396848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4220|70|1432577072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4221|70|1432597552 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4222|70|1432646704 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4224|70|1432200240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4226|70|1432163376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4434|70|1432024112 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4435|70|1432818736 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4436|70|1432237104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4437|70|1432421424 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4438|70|1432319024 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4439|70|1432568880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4440|70|1432310832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4441|70|1432052784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4442|70|1432192048 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4443|70|1432056880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4451|70|1432110128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4773|70|1432572976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4774|70|1432687664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4775|70|1432228912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4776|70|1432073264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4777|70|1431946288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4778|70|1432134704 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4779|70|1432245296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4780|70|1432491056 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4781|70|1432372272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4782|70|1432003632 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4784|70|47733961268235 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4786|70|1432507440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4787|70|1432499248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5137|70|1431807024 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5138|70|1432007728 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5139|70|1432310832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5140|70|1432171568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5141|70|1431843888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5142|70|1432593456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5143|70|1431921712 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5144|70|1432466480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5145|70|1432716336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5146|70|1432806448 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5148|70|1457031315 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5151|70|1434097811 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5155|70|1457875091 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5159|70|1432310832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5501|70|1431938096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5502|70|1432286256 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5503|70|1431925808 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5504|70|1432204336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5505|70|1432011824 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5506|70|1432425520 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5507|70|1432020016 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5508|70|1431999536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5509|70|1432548400 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5510|70|1432708144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5516|70|47642156997907 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5522|70|47306113899379 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5861|70|1432724528 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5862|70|1431852080 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5863|70|1432400944 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5864|70|1432110128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5865|70|1431798832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5866|70|1432618032 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5867|70|1431790640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5868|70|1431880752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5869|70|1432298544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5870|70|1431974960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5872|70|1431987248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5875|70|1432204336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5878|70|1545078931 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5879|70|1459964051 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5884|70|47493950430219 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6344|70|1431815216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6345|70|1431974960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6346|70|1432425520 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6347|70|1432679472 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6348|70|1431946288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6349|70|1432470576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6350|70|1432040496 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6351|70|1432618032 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6352|70|1432577072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6353|70|1432204336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6358|70|1432749104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6366|70|47119478271219 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6763|70|1431901232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6764|70|1431938096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6765|70|1431794736 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6766|70|1432106032 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6767|70|1432757296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6768|70|1431819312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6769|70|1432118320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6770|70|1432835120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6771|70|1431901232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6772|70|1432331312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6782|70|1432769584 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6784|70|1458915475 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7174|70|1431905328 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7175|70|1432138800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7176|70|1432118320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7177|70|1431962672 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7178|70|1432794160 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7179|70|1432171568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7180|70|1432413232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7181|70|1432507440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7182|70|1432663088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7183|70|1432532016 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7188|70|1432269872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7192|70|1459021971 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7194|70|1458845843 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7196|70|1432020016 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7523|70|1432593456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7524|70|1432818736 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7525|70|1432671280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7526|70|1431938096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7527|70|1432241200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7528|70|1432495152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7529|70|1432802352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7530|70|1432110128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7531|70|1431999536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7532|70|1432003632 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7535|70|1454700691 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7539|70|1480325267 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7543|70|47235317930867 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7544|70|48010185595881 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7949|70|1432200240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7950|70|1432626224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7951|70|1431839792 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7952|70|1432568880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7953|70|1432683568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7954|70|1432749104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.9526|70|47405977721715 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.9602|70|47670331878259 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.11784|70|47963304819740 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.13563|70|1432785968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.13565|70|1432785968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.13566|70|1432785968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.15387|70|47203279956851 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.15921|70|1432446000 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.16645|70|47677498370976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.16646|70|47021884324768 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.16648|70|1432785968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.16651|70|1432269872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.16652|70|1432007728 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.16653|70|1432736816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.16654|70|1432335408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.17900|70|1432658992 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.18651|70|1432683568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.23175|70|1432167472 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.23330|70|47740347538323 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.24981|70|47780493475824 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.24992|70|47661043736560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.25004|70|47149384757232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.25514|70|47796091816971 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.25517|70|1431888944 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.25518|70|47518685990800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.25522|70|47944454302731 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.25524|70|1457707155 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.25531|70|1457100947 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.25946|70|1432699952 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.27567|70|1432585264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.29431|70|1432785968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.29439|70|1432785968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.29440|70|1432785968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.30092|70|47952520835085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.30120|70|1432470576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.31793|70|1458043027 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.447|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1826|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.2851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.3773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4068|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4215|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4216|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4217|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4218|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4224|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4226|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4434|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4435|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4436|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4437|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4438|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4441|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4442|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4451|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4774|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4776|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4777|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4778|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4779|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4780|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4786|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4787|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5141|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5145|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5146|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5148|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5151|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5155|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5159|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5501|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5502|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5503|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5504|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5507|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5508|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5509|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5510|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5516|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5862|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5866|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5869|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5870|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5872|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5875|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5878|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5879|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5884|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6344|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6346|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6347|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6348|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6349|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6350|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6358|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6366|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6763|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6764|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6765|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6766|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6767|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6768|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6770|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6772|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7174|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7176|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7178|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7180|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7181|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7183|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7188|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7192|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7194|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7196|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7527|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7528|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7530|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7532|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7535|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7539|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7543|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7544|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7949|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7950|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7952|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7953|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7954|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.9526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.11784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.15921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.16652|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.23330|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.24981|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.24992|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.25004|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.25514|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.25517|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.25518|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.25522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.25524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.25531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.25946|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.27567|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.30092|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1|70|671173123 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.415|70|18946 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.447|70|2147221247 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1826|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.2851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.2852|70|2560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.3773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4068|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4085|70|65536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4215|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4216|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4217|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4218|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4224|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4226|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4434|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4435|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4436|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4437|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4438|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4441|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4442|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4451|70|524288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4774|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4776|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4777|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4778|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4779|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4780|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4786|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4787|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5141|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5145|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5146|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5148|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5151|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5155|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5159|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5501|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5502|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5503|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5504|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5507|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5508|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5509|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5510|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5516|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5862|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5866|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5869|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5870|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5872|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5875|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5878|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5879|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5884|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6344|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6346|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6347|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6348|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6349|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6350|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6358|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6366|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6763|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6764|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6765|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6766|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6767|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6768|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6770|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6772|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7174|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7176|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7178|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7180|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7181|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7183|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7188|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7192|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7194|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7196|70|16416 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7527|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7528|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7530|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7532|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7535|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7539|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7543|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7544|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7949|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7950|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7952|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7953|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7954|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.9526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.11784|70|2147196665 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.15921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.16648|70|16896 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.16652|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.18651|70|16390 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.23330|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.24981|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.24992|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.25004|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.25514|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.25517|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.25518|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.25522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.25524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.25531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.25946|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.27567|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.30092|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.2|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.3|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.8|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.9|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.10|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.11|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.12|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.13|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.14|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.16|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.18|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.19|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.20|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.21|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.22|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.23|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.24|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.25|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.26|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.27|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.34|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.35|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.36|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.49|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.51|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.52|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.53|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.55|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.68|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.99|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.219|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.220|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.221|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.286|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.287|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.288|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.290|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.292|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.293|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.295|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.298|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.299|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.300|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.302|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.304|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.307|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.310|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.313|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.315|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.317|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.318|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.352|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.353|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.381|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.382|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.415|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.440|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.447|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.885|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.886|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.887|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.905|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.906|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.907|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.910|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.911|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.921|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.928|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.929|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.951|70|2147136766 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.977|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.979|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.982|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.984|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1130|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1138|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1139|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1140|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1142|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1143|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1212|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1222|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1826|70|4198400 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.2031|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.2851|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.2852|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.2919|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.3773|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4068|70|16781312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4085|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4119|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4122|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4212|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4213|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4214|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4215|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4216|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4217|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4218|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4219|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4220|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4221|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4222|70|3676676 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4224|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4226|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4434|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4435|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4436|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4437|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4438|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4439|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4440|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4441|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4442|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4443|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4451|70|14848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4773|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4774|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4775|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4776|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4777|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4778|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4779|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4780|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4781|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4782|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4784|70|20451328 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4786|70|4102 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4787|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5137|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5138|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5139|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5140|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5141|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5142|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5143|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5144|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5145|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5146|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5148|70|4100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5151|70|4097 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5155|70|4100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5159|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5501|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5502|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5503|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5504|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5505|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5506|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5507|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5508|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5509|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5510|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5516|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5522|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5861|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5862|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5863|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5864|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5865|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5866|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5867|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5868|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5869|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5870|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5872|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5875|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5878|70|3676676 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5879|70|3674116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5884|70|4108 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6344|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6345|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6346|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6347|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6348|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6349|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6350|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6351|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6352|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6353|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6358|70|3674116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6366|70|4097 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6763|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6764|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6765|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6766|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6767|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6768|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6769|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6770|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6771|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6772|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6782|70|16781318 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6784|70|4100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7174|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7175|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7176|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7177|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7178|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7179|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7180|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7181|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7182|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7183|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7188|70|4098 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7192|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7194|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7196|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7523|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7524|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7525|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7526|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7527|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7528|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7529|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7530|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7531|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7532|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7535|70|4100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7539|70|6659 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7543|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7544|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7949|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7950|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7951|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7952|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7953|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7954|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.9526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.11784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.13563|70|16781314 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.13565|70|16781314 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.13566|70|16781314 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.14596|70|3676676 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.15387|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.15921|70|4098 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.16645|70|16781825 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.16646|70|16781825 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.16648|70|16781312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.16651|70|16781312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.16652|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.17900|70|16781312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.18651|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.21085|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.23175|70|3873431 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.23330|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.23416|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.23554|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.23740|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.24265|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.24341|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.24415|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.24648|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.24829|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.24868|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.24981|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.24992|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.25004|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.25514|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.25517|70|69632 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.25518|70|4103 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.25522|70|4100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.25524|70|4100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.25531|70|4100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.25946|70|4097 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.27567|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.29431|70|16781314 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.29439|70|16781314 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.29440|70|16781314 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.29574|70|4102 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.30092|70|4097 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.30120|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.31793|70|4198400 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1|70|1260 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.415|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.440|70|24583 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.447|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.921|70|24583 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.951|70|84481 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.977|70|16385 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.979|70|16391 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.982|70|18947 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1038|70|2560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1826|70|90115 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.2851|70|81923 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.2852|70|268454400 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.2919|70|84481 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.3773|70|81925 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4068|70|134235883 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4085|70|16385 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4212|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4213|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4214|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4215|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4216|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4217|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4218|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4219|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4220|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4221|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4222|70|16387 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4224|70|158215 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4226|70|545890 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4434|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4435|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4436|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4437|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4438|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4439|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4440|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4441|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4442|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4443|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4451|70|81926 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4773|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4774|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4775|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4776|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4777|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4778|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4779|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4780|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4781|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4782|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4784|70|12668671 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4786|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4787|70|16385 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5137|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5138|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5139|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5140|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5141|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5142|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5143|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5144|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5145|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5146|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5148|70|81922 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5151|70|25249022 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5155|70|268517379 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5159|70|512 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5501|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5502|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5503|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5504|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5505|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5506|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5507|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5508|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5509|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5510|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5516|70|65536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5522|70|16386 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5861|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5862|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5863|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5864|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5865|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5866|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5867|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5868|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5869|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5870|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5872|70|16897 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5875|70|16422 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5878|70|16387 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5879|70|84483 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5884|70|81922 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6344|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6345|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6346|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6347|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6348|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6349|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6350|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6351|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6352|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6353|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6358|70|84483 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6366|70|18950 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6763|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6764|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6765|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6766|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6767|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6768|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6769|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6770|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6771|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6772|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6784|70|81922 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7174|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7175|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7176|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7177|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7178|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7179|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7180|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7181|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7182|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7183|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7188|70|16796877 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7192|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7194|70|25249022 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7196|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7523|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7524|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7525|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7526|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7527|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7528|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7529|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7530|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7531|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7532|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7535|70|81923 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7539|70|25257212 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7543|70|16387 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7544|70|16899 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7949|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7950|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7951|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7952|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7953|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7954|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.9526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.11784|70|16390 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.13563|70|134235881 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.13565|70|134235881 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.13566|70|134235881 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.15387|70|19015 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.15921|70|16796877 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.16648|70|134309611 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.16651|70|512 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.16652|70|4608 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.16653|70|4608 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.16654|70|4608 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.17900|70|16387 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.18651|70|16390 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.23330|70|25183999 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.24981|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.24992|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.25004|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.25514|70|25249534 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.25517|70|16423 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.25518|70|81952 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.25522|70|81922 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.25524|70|81922 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.25531|70|81922 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.25946|70|25251582 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.27567|70|21610 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.29431|70|201344745 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.29439|70|134235881 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.29440|70|134235881 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.30092|70|25185534 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.30120|70|84519 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.31793|70|16386 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1|70|18446744071581287918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.2|70|18446744071579569973 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.3|70|18446744071579602226 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7|70|18446744071579602226 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.8|70|18446744071580134834 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.9|70|18446744071580135497 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.10|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.11|70|18446744071579602226 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.12|70|18446744071579602226 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.13|70|18446744071579602226 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.14|70|18446744071579602226 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.16|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.18|70|18446744071583417901 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.19|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.20|70|18446744071580084844 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.21|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.22|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.23|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.24|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.25|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.26|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.27|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.34|70|18446744071580525455 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.35|70|18446744071580804922 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.36|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.49|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.51|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.52|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.53|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.55|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.68|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.99|70|18446744071579988404 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.219|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.220|70|18446744071583547891 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.221|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.286|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.287|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.288|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.290|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.292|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.293|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.295|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.298|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.299|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.300|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.302|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.304|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.307|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.310|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.313|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.315|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.317|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.318|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.352|70|18446744072099523590 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.353|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.381|70|18446744072099523590 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.382|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.415|70|18446744071581287918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.440|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.447|70|18446744071581287918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.885|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.886|70|18446744072099523590 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.887|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.905|70|18446744072101159257 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.906|70|18446744072099523590 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.907|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.910|70|18446744072099523590 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.911|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.921|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.928|70|18446744072099523590 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.929|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.951|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.977|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.979|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.982|70|18446744071579587147 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.984|70|18446744071581287918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1038|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1130|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1138|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1139|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1140|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1142|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1143|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1212|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1222|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1826|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.2031|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.2851|70|18446744071579587147 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.2852|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.2919|70|18446744071579587147 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.3773|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4068|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4085|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4119|70|18446744071583072796 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4122|70|18446744071583072796 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4212|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4213|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4214|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4215|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4216|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4217|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4218|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4219|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4220|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4221|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4222|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4224|70|18446744071579587147 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4226|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4434|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4435|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4436|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4437|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4438|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4439|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4440|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4441|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4442|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4443|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4451|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4773|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4774|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4775|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4776|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4777|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4778|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4779|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4780|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4781|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4782|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4784|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4786|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4787|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5137|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5138|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5139|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5140|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5141|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5142|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5143|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5144|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5145|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5146|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5148|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5151|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5155|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5159|70|18446744071585490473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5501|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5502|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5503|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5504|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5505|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5506|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5507|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5508|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5509|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5510|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5516|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5522|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5861|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5862|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5863|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5864|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5865|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5866|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5867|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5868|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5869|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5870|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5872|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5875|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5878|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5879|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5884|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6344|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6345|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6346|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6347|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6348|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6349|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6350|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6351|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6352|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6353|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6358|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6366|70|18446744071581287918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6763|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6764|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6765|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6766|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6767|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6768|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6769|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6770|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6771|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6772|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6782|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6784|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7174|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7175|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7176|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7177|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7178|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7179|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7180|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7181|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7182|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7183|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7188|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7192|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7194|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7196|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7523|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7524|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7525|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7526|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7527|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7528|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7529|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7530|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7531|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7532|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7535|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7539|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7543|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7544|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7949|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7950|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7951|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7952|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7953|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7954|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.9526|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.9602|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.11784|70|18446744071579418806 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.13563|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.13565|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.13566|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.14596|70|18446744071579421451 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.15387|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.15921|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.16645|70|18446744071581011216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.16646|70|18446744071581011216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.16648|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.16651|70|18446744071584672976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.16652|70|18446744071584672976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.16653|70|18446744071584672976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.16654|70|18446744071584672976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.17900|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.18651|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.21085|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.23175|70|18446744071585490473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.23330|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.23416|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.23554|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.23740|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.24265|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.24341|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.24415|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.24648|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.24829|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.24868|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.24981|70|18446744071579587147 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.24992|70|18446744071579587147 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.25004|70|18446744071579587147 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.25514|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.25517|70|18446744071581287918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.25518|70|18446744071579500172 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.25522|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.25524|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.25531|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.25946|70|18446744071581287918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.27567|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.29431|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.29439|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.29440|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.29574|70|18446744071579421451 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.30092|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.30120|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.31793|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.447|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1826|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.2851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.3773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4068|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4215|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4216|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4217|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4218|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4224|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4226|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4434|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4435|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4436|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4437|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4438|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4441|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4442|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4451|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4774|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4776|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4777|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4778|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4779|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4780|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4786|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4787|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5141|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5145|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5146|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5148|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5151|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5155|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5159|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5501|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5502|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5503|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5504|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5507|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5508|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5509|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5510|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5516|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5862|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5866|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5869|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5870|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5872|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5875|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5878|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5879|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5884|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6344|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6346|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6347|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6348|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6349|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6350|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6358|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6366|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6763|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6764|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6765|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6766|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6767|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6768|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6770|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6772|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7174|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7176|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7178|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7180|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7181|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7183|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7188|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7192|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7194|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7196|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7527|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7528|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7530|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7532|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7535|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7539|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7543|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7544|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7949|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7950|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7952|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7953|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7954|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.9526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.11784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.15921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.16652|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.23330|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25004|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25050|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25051|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25063|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25073|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25514|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25517|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25518|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25946|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.27567|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.30092|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.447|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1826|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.2851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.3773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4068|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4215|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4216|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4217|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4218|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4224|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4226|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4434|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4435|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4436|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4437|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4438|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4441|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4442|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4451|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4774|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4776|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4777|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4778|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4779|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4780|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4786|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4787|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5141|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5145|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5146|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5148|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5151|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5155|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5159|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5501|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5502|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5503|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5504|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5507|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5508|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5509|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5510|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5516|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5862|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5866|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5869|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5870|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5872|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5875|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5878|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5879|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5884|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6344|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6346|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6347|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6348|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6349|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6350|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6358|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6366|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6763|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6764|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6765|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6766|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6767|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6768|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6770|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6772|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7174|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7176|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7178|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7180|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7181|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7183|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7188|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7192|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7194|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7196|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7527|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7528|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7530|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7532|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7535|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7539|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7543|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7544|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7949|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7950|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7952|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7953|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7954|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.9526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.11784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.15921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.16652|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.23330|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25050|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25051|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25063|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25073|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25514|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25517|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25518|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25946|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.27567|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.30092|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.3|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.8|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.9|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.10|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.11|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.12|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.13|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.14|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.16|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.18|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.19|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.20|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.21|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.22|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.23|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.24|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.26|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.27|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.34|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.35|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.36|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.49|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.51|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.52|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.53|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.55|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.68|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.99|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.219|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.220|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.221|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.286|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.287|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.288|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.290|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.292|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.293|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.295|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.298|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.299|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.300|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.302|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.304|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.307|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.310|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.313|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.315|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.317|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.318|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.352|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.353|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.381|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.382|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.415|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.440|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.447|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.885|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.886|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.887|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.905|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.906|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.907|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.910|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.911|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.921|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.928|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.929|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.951|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.977|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.979|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.982|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.984|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1038|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1130|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1138|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1139|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1140|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1142|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1143|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1212|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1222|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1826|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.2031|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.2851|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.2852|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.2919|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.3773|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4068|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4085|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4119|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4122|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4212|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4213|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4214|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4215|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4216|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4217|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4218|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4219|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4220|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4221|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4222|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4224|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4226|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4434|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4435|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4436|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4437|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4438|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4439|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4440|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4441|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4442|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4443|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4451|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4773|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4774|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4775|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4776|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4777|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4778|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4779|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4780|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4781|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4782|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4784|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4786|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4787|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5137|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5138|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5139|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5140|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5141|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5142|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5143|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5144|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5145|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5146|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5148|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5151|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5155|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5159|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5501|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5502|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5503|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5504|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5505|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5506|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5507|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5508|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5509|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5510|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5516|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5522|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5861|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5862|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5863|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5864|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5865|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5866|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5867|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5868|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5869|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5870|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5872|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5875|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5878|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5879|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5884|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6344|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6345|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6346|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6347|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6348|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6349|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6350|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6351|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6352|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6353|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6358|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6366|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6763|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6764|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6765|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6766|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6767|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6768|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6769|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6770|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6771|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6772|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6782|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6784|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7174|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7175|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7176|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7177|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7178|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7179|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7180|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7181|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7182|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7183|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7188|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7192|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7194|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7196|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7523|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7524|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7525|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7526|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7527|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7528|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7529|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7530|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7531|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7532|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7535|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7539|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7543|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7544|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7949|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7950|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7951|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7952|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7953|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7954|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.9526|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.9602|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.11784|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.13563|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.13565|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.13566|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.14596|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.15387|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.15921|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.16645|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.16646|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.16648|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.16651|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.16652|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.16653|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.16654|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.17900|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.18651|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.21085|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.23175|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.23330|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.23416|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.23740|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.24265|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.24341|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.24648|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.24829|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.24868|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25050|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25051|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25063|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25073|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25514|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25517|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25518|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25522|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25524|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25531|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25946|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.27567|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.29431|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.29439|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.29440|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.29574|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.30092|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.30120|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.31793|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7|66|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.11|66|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.12|66|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.13|66|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6358|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.15921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.23330|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.24829|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.24868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25050|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25051|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25063|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25073|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.30092|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.11|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.12|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.13|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6358|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.15921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.23330|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.24829|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.24868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25050|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25051|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25063|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25073|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.30092|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1|66|12137 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.415|66|8287 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.440|66|34477 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.447|66|11532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.921|66|1083 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.951|66|13925 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.977|66|15001 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.979|66|1090 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.982|66|5372 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.984|66|6072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1038|66|2110 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1826|66|65757 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.2851|66|31569 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.2852|66|21191 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.2919|66|22545 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.3773|66|31345 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4068|66|30088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4085|66|569 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4119|66|27516 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4122|66|27516 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4212|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4213|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4214|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4215|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4216|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4217|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4218|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4219|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4220|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4221|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4222|66|13339 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4224|66|6453 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4226|66|7336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4434|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4435|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4436|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4437|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4438|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4439|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4440|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4441|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4442|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4443|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4451|66|70916 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4773|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4774|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4775|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4776|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4777|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4778|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4779|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4780|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4781|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4782|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4784|66|15267 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4786|66|9702 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4787|66|9478 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5137|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5138|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5139|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5140|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5141|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5142|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5143|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5144|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5145|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5146|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5148|66|8180 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5151|66|2467 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5155|66|8228 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5159|66|7480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5501|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5502|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5503|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5504|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5505|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5506|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5507|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5508|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5509|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5510|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5516|66|25045 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5522|66|32226 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5861|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5862|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5863|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5864|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5865|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5866|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5867|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5868|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5869|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5870|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5872|66|37363 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5875|66|10890 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5878|66|64230 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5879|66|12028 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5884|66|17991 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6344|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6345|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6346|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6347|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6348|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6349|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6350|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6351|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6352|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6353|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6358|66|24890 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6366|66|24384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6763|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6764|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6765|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6766|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6767|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6768|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6769|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6770|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6771|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6772|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6782|66|4308 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6784|66|33117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7174|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7175|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7176|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7177|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7178|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7179|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7180|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7181|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7182|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7183|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7188|66|117299 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7192|66|8246 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7194|66|9547 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7196|66|14416 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7523|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7524|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7525|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7526|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7527|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7528|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7529|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7530|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7531|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7532|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7535|66|7475 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7539|66|20740 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7543|66|37978 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7544|66|311644 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7949|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7950|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7951|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7952|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7953|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7954|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.9526|66|25751 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.9602|66|25751 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.11784|66|28738 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.13563|66|30344 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.13565|66|30344 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.13566|66|30344 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.15387|66|12255 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.15921|66|83325 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.16645|66|1615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.16646|66|1615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.16648|66|30088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.16651|66|15763 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.16652|66|1080 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.16653|66|1022 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.16654|66|77804 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.17900|66|16397 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.18651|66|94547 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.23175|66|2676 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.23330|66|34804 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.24829|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.24868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25050|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25051|66|1619 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25063|66|1619 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25073|66|1619 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25514|66|32202 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25517|66|13582 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25518|66|1082 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25522|66|41122 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25524|66|8455 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25531|66|8206 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25946|66|14750 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.27567|66|1558 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.29431|66|30921 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.29439|66|30344 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.29440|66|30344 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.30092|66|1573678 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.30120|66|3353 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.31793|66|10555 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1|70|1125 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.415|70|488 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.440|70|55 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.447|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.921|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.951|70|123 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.977|70|260 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.979|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.982|70|111 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.984|70|277 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1038|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1826|70|1320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.2851|70|109 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.2852|70|3804 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.2919|70|22253 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.3773|70|35 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4068|70|1705 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4085|70|47 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4119|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4122|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4212|70|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4213|70|38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4214|70|43 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4215|70|84 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4216|70|76 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4217|70|78 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4218|70|69 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4219|70|43 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4220|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4221|70|69 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4222|70|3929 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4224|70|637 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4226|70|1015 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4434|70|78 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4435|70|87 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4436|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4437|70|76 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4438|70|68 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4439|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4440|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4441|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4442|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4443|70|41 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4451|70|4040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4773|70|38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4774|70|87 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4775|70|95 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4776|70|87 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4777|70|73 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4778|70|77 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4779|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4780|70|66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4781|70|43 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4782|70|91 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4784|70|190 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4786|70|766 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4787|70|1263 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5137|70|44 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5138|70|44 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5139|70|41 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5140|70|81 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5141|70|89 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5142|70|83 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5143|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5144|70|44 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5145|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5146|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5148|70|4150 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5151|70|258 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5155|70|4109 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5159|70|4197 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5501|70|81 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5502|70|87 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5503|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5504|70|71 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5505|70|38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5506|70|44 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5507|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5508|70|76 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5509|70|71 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5510|70|76 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5516|70|1063 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5522|70|1109 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5861|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5862|70|81 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5863|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5864|70|35 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5865|70|98 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5866|70|77 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5867|70|96 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5868|70|81 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5869|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5870|70|71 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5872|70|5259 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5875|70|4315 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5878|70|23315 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5879|70|5556 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5884|70|96 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6344|70|82 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6345|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6346|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6347|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6348|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6349|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6350|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6351|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6352|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6353|70|97 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6358|70|3736 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6366|70|208 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6763|70|82 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6764|70|89 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6765|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6766|70|89 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6767|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6768|70|80 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6769|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6770|70|85 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6771|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6772|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6782|70|1967 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6784|70|4492 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7174|70|73 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7175|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7176|70|83 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7177|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7178|70|83 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7179|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7180|70|80 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7181|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7182|70|34 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7183|70|73 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7188|70|42773 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7192|70|8239 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7194|70|4304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7196|70|3553 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7523|70|35 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7524|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7525|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7526|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7527|70|84 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7528|70|72 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7529|70|34 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7530|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7531|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7532|70|69 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7535|70|3938 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7539|70|20451 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7543|70|475 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7544|70|5055 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7949|70|72 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7950|70|71 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7951|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7952|70|69 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7953|70|71 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7954|70|82 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.9526|70|224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.9602|70|140 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.11784|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.13563|70|1489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.13565|70|1447 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.13566|70|1266 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.15387|70|487 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.15921|70|56510 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.16645|70|68 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.16646|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.16648|70|786 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.16651|70|4634 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.16652|70|314 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.16653|70|360 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.16654|70|4274 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.17900|70|364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.18651|70|23290 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.23175|70|300 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.23330|70|8613 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25050|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25096|70|211 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25182|70|211 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25195|70|210 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25514|70|5442 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25517|70|6281 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25518|70|146 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25522|70|6314 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25524|70|6365 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25531|70|6296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25946|70|6462 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.27567|70|307 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.29431|70|3636 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.29439|70|2009 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.29440|70|2055 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.30092|70|27005 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.30120|70|283 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.31793|70|5950 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1|70|612 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.415|70|436 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.440|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.447|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.951|70|89 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.977|70|171 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.979|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.982|70|83 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.984|70|205 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1826|70|693 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.2851|70|79 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.2852|70|3545 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.2919|70|19269 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.3773|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4068|70|1000 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4085|70|41 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4119|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4122|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4212|70|48 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4213|70|34 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4214|70|38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4215|70|79 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4216|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4217|70|72 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4218|70|63 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4219|70|38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4220|70|68 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4221|70|63 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4222|70|3890 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4224|70|631 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4226|70|988 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4434|70|71 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4435|70|81 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4436|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4437|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4438|70|62 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4439|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4440|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4441|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4442|70|69 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4443|70|37 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4451|70|3926 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4773|70|33 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4774|70|81 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4775|70|90 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4776|70|81 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4777|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4778|70|71 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4779|70|58 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4780|70|60 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4781|70|38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4782|70|85 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4784|70|68 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4786|70|740 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4787|70|853 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5137|70|39 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5138|70|39 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5139|70|37 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5140|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5141|70|84 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5142|70|76 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5143|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5144|70|38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5145|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5146|70|68 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5148|70|3611 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5151|70|227 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5155|70|3619 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5159|70|3441 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5501|70|76 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5502|70|77 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5503|70|57 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5504|70|65 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5505|70|34 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5506|70|39 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5507|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5508|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5509|70|65 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5510|70|71 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5516|70|84 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5522|70|187 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5861|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5862|70|73 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5863|70|32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5864|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5865|70|93 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5866|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5867|70|92 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5868|70|73 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5869|70|57 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5870|70|61 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5872|70|4931 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5875|70|3650 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5878|70|5279 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5879|70|833 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5884|70|59 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6344|70|76 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6345|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6346|70|61 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6347|70|65 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6348|70|60 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6349|70|60 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6350|70|69 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6351|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6352|70|60 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6353|70|92 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6358|70|2569 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6366|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6763|70|68 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6764|70|84 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6765|70|57 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6766|70|80 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6767|70|58 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6768|70|71 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6769|70|32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6770|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6771|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6772|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6782|70|754 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6784|70|3760 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7174|70|63 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7175|70|32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7176|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7177|70|32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7178|70|73 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7179|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7180|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7181|70|57 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7182|70|30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7183|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7188|70|559 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7192|70|7777 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7194|70|3784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7196|70|3553 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7523|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7524|70|65 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7525|70|32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7526|70|60 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7527|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7528|70|63 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7529|70|28 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7530|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7531|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7532|70|59 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7535|70|3431 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7539|70|17885 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7543|70|220 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7544|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7949|70|62 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7950|70|61 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7951|70|57 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7952|70|60 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7953|70|61 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7954|70|72 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.9526|70|160 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.9602|70|93 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.11784|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.13563|70|436 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.13565|70|414 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.13566|70|309 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.15387|70|288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.15921|70|450 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.16645|70|45 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.16646|70|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.16648|70|103 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.16651|70|3772 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.16652|70|272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.16653|70|284 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.16654|70|3889 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.17900|70|289 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.18651|70|4064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.23175|70|197 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.23330|70|2713 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25050|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25096|70|177 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25182|70|177 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25195|70|177 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25514|70|145 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25517|70|3867 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25518|70|121 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25522|70|874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25524|70|3662 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25531|70|3619 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25946|70|4008 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.27567|70|164 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.29431|70|834 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.29439|70|567 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.29440|70|612 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.30092|70|18904 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.30120|70|130 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.31793|70|3635 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1|70|326 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.415|70|63 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.440|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.447|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.921|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.951|70|28 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.977|70|102 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.979|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.982|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.984|70|130 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1038|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1826|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.2851|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.2852|70|100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.2919|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.3773|70|201 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4068|70|117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4085|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4119|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4122|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4212|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4213|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4214|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4215|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4216|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4217|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4218|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4219|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4220|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4221|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4222|70|115 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4224|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4226|70|42 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4434|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4435|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4436|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4437|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4438|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4439|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4440|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4441|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4442|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4443|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4451|70|360 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4773|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4774|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4775|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4776|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4777|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4778|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4779|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4780|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4781|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4782|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4784|70|127 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4786|70|24 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4787|70|61 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5137|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5138|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5139|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5140|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5141|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5142|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5143|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5144|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5145|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5146|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5148|70|155 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5151|70|1340 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5155|70|140 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5159|70|58 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5501|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5502|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5503|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5504|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5505|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5506|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5507|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5508|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5509|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5510|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5516|70|47 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5522|70|181 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5861|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5862|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5863|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5864|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5865|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5866|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5867|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5868|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5869|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5870|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5872|70|93 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5875|70|169 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5878|70|853 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5879|70|102 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5884|70|93 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6344|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6345|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6346|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6347|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6348|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6349|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6350|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6351|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6352|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6353|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6358|70|134 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6366|70|73 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6763|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6764|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6765|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6766|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6767|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6768|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6769|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6770|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6771|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6772|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6782|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6784|70|332 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7174|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7175|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7176|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7177|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7178|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7179|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7180|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7181|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7182|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7183|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7188|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7192|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7194|70|239 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7196|70|595 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7523|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7524|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7525|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7526|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7527|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7528|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7529|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7530|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7531|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7532|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7535|70|559 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7539|70|128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7543|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7544|70|6662 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7949|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7950|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7951|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7952|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7953|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7954|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.9526|70|98 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.9602|70|98 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.11784|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.13563|70|117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.13565|70|117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.13566|70|117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.15387|70|163 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.15921|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.16645|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.16646|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.16648|70|117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.16651|70|1943 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.16652|70|46 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.16653|70|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.16654|70|708 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.17900|70|170 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.18651|70|30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.23175|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.23330|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25050|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25096|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25182|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25195|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25206|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25514|70|152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25517|70|412 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25518|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25522|70|494 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25524|70|383 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25531|70|140 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25946|70|339 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.27567|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.29431|70|117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.29439|70|117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.29440|70|117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.30092|70|13961 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.30120|70|247 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.31793|70|86 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.447|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1826|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.2851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.3773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4068|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4215|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4216|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4217|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4218|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4224|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4226|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4434|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4435|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4436|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4437|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4438|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4441|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4442|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4451|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4774|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4776|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4777|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4778|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4779|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4780|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4786|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4787|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5141|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5145|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5146|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5148|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5151|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5155|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5159|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5501|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5502|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5503|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5504|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5507|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5508|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5509|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5510|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5516|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5862|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5866|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5869|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5870|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5872|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5875|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5878|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5879|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5884|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6344|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6346|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6347|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6348|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6349|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6350|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6358|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6366|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6763|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6764|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6765|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6766|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6767|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6768|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6770|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6772|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7174|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7176|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7178|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7180|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7181|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7183|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7188|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7192|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7194|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7196|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7527|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7528|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7530|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7532|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7535|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7539|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7543|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7544|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7949|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7950|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7952|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7953|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7954|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.9526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.11784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.15921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.16652|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.23330|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25050|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25096|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25195|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25206|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25514|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25517|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25518|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25946|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.27567|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.30092|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.447|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1826|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.2851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.3773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4068|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4215|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4216|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4217|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4218|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4224|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4226|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4434|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4435|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4436|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4437|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4438|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4441|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4442|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4451|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4774|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4776|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4777|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4778|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4779|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4780|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4786|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4787|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5141|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5145|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5146|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5148|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5151|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5155|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5159|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5501|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5502|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5503|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5504|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5507|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5508|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5509|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5510|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5516|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5862|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5866|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5869|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5870|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5872|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5875|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5878|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5879|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5884|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6344|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6346|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6347|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6348|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6349|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6350|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6358|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6366|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6763|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6764|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6765|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6766|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6767|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6768|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6770|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6772|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7174|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7176|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7178|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7180|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7181|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7183|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7188|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7192|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7194|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7196|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7527|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7528|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7530|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7532|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7535|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7539|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7543|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7544|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7949|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7950|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7952|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7953|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7954|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.9526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.11784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.15921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.16652|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.23330|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25050|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25096|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25195|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25206|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25514|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25517|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25518|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25946|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.27567|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.30092|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.447|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1826|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.2851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.3773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4068|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4215|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4216|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4217|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4218|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4224|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4226|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4434|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4435|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4436|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4437|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4438|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4441|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4442|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4451|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4774|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4776|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4777|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4778|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4779|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4780|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4786|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4787|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5141|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5145|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5146|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5148|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5151|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5155|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5159|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5501|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5502|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5503|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5504|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5507|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5508|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5509|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5510|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5516|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5862|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5866|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5869|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5870|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5872|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5875|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5878|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5879|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5884|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6344|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6346|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6347|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6348|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6349|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6350|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6358|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6366|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6763|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6764|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6765|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6766|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6767|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6768|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6770|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6772|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7174|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7176|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7178|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7180|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7181|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7183|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7188|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7192|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7194|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7196|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7527|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7528|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7530|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7532|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7535|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7539|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7543|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7544|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7949|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7950|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7952|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7953|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7954|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.9526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.11784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.15921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.16652|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.23330|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25050|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25096|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25195|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25206|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25514|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25517|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25518|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25946|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.27567|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.30092|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1|66|48548 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.415|66|33148 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.440|66|137908 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.447|66|46128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.921|66|4332 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.951|66|55700 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.977|66|60004 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.979|66|4360 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.982|66|21488 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.984|66|24288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1038|66|8440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1826|66|263028 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.2851|66|126276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.2852|66|84764 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.2919|66|90180 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.3773|66|125380 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4068|66|120352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4085|66|2276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4119|66|110064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4122|66|110064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4212|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4213|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4214|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4215|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4216|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4217|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4218|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4219|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4220|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4221|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4222|66|53356 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4224|66|25812 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4226|66|29344 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4434|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4435|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4436|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4437|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4438|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4439|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4440|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4441|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4442|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4443|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4451|66|283664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4773|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4774|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4775|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4776|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4777|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4778|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4779|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4780|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4781|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4782|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4784|66|61068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4786|66|38808 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4787|66|37912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5137|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5138|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5139|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5140|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5141|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5142|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5143|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5144|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5145|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5146|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5148|66|32720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5151|66|9868 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5155|66|32912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5159|66|29920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5501|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5502|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5503|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5504|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5505|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5506|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5507|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5508|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5509|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5510|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5516|66|100180 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5522|66|128904 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5861|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5862|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5863|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5864|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5865|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5866|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5867|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5868|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5869|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5870|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5872|66|149452 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5875|66|43560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5878|66|256788 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5879|66|48112 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5884|66|71964 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6344|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6345|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6346|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6347|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6348|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6349|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6350|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6351|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6352|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6353|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6358|66|99556 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6366|66|97536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6763|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6764|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6765|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6766|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6767|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6768|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6769|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6770|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6771|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6772|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6782|66|17232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6784|66|132468 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7174|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7175|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7176|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7177|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7178|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7179|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7180|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7181|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7182|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7183|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7188|66|469196 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7192|66|32984 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7194|66|38188 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7196|66|57664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7523|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7524|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7525|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7526|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7527|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7528|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7529|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7530|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7531|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7532|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7535|66|29900 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7539|66|82960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7543|66|151912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7544|66|1246576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7949|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7950|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7951|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7952|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7953|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7954|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.9526|66|103004 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.9602|66|103004 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.11784|66|114952 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.13563|66|121376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.13565|66|121376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.13566|66|121376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.15387|66|49020 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.15921|66|333300 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.16645|66|6460 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.16646|66|6460 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.16648|66|120352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.16651|66|63052 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.16652|66|4320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.16653|66|4088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.16654|66|311216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.17900|66|65588 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.18651|66|378188 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.23175|66|10704 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.23330|66|139216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.24829|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.24868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25050|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25210|66|6028 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25217|66|6476 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25228|66|6476 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25514|66|128808 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25517|66|54328 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25518|66|4328 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25522|66|164484 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25524|66|33820 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25531|66|32824 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25946|66|59000 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.27567|66|6232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.29431|66|123684 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.29439|66|121376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.29440|66|121376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.30092|66|6294712 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.30120|66|13412 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.31793|66|42220 +1.3.6.1.4.1.3375.2.1.12.2.1.0|2|3 +1.3.6.1.4.1.3375.2.1.12.2.2.1.1.4.100.97.116.97|4|data +1.3.6.1.4.1.3375.2.1.12.2.2.1.1.7.99.111.110.116.114.111.108|4|control +1.3.6.1.4.1.3375.2.1.12.2.2.1.1.8.97.110.97.108.121.115.105.115|4|analysis +1.3.6.1.4.1.3375.2.1.12.2.2.1.2.4.100.97.116.97|66|0 +1.3.6.1.4.1.3375.2.1.12.2.2.1.2.7.99.111.110.116.114.111.108|66|2 +1.3.6.1.4.1.3375.2.1.12.2.2.1.2.8.97.110.97.108.121.115.105.115|66|0 +1.3.6.1.4.1.3375.2.1.12.2.2.1.3.4.100.97.116.97|66|0 +1.3.6.1.4.1.3375.2.1.12.2.2.1.3.7.99.111.110.116.114.111.108|66|5 +1.3.6.1.4.1.3375.2.1.12.2.2.1.3.8.97.110.97.108.121.115.105.115|66|0 +1.3.6.1.4.1.3375.2.1.12.2.2.1.4.4.100.97.116.97|66|0 +1.3.6.1.4.1.3375.2.1.12.2.2.1.4.7.99.111.110.116.114.111.108|66|5 +1.3.6.1.4.1.3375.2.1.12.2.2.1.4.8.97.110.97.108.121.115.105.115|66|0 +1.3.6.1.4.1.3375.2.1.12.2.2.1.5.4.100.97.116.97|66|0 +1.3.6.1.4.1.3375.2.1.12.2.2.1.5.7.99.111.110.116.114.111.108|66|7 +1.3.6.1.4.1.3375.2.1.12.2.2.1.5.8.97.110.97.108.121.115.105.115|66|0 +1.3.6.1.4.1.3375.2.1.12.2.2.1.6.4.100.97.116.97|66|0 +1.3.6.1.4.1.3375.2.1.12.2.2.1.6.7.99.111.110.116.114.111.108|66|6 +1.3.6.1.4.1.3375.2.1.12.2.2.1.6.8.97.110.97.108.121.115.105.115|66|0 +1.3.6.1.4.1.3375.2.1.13.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.13.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.13.3.1.0|2|0 +1.3.6.1.4.1.3375.2.1.13.4.1.0|2|0 +1.3.6.1.4.1.3375.2.1.13.5.1.0|2|0 +1.3.6.1.4.1.3375.2.1.13.6.1.0|2|0 +1.3.6.1.4.1.3375.2.1.13.7.1.0|2|0 +1.3.6.1.4.1.3375.2.1.14.1.1.0|2|6 +1.3.6.1.4.1.3375.2.1.14.1.2.0|4|Standalone +1.3.6.1.4.1.3375.2.1.14.1.3.0|2|0 +1.3.6.1.4.1.3375.2.1.14.1.4.0|4| +1.3.6.1.4.1.3375.2.1.14.2.1.0|2|1 +1.3.6.1.4.1.3375.2.1.14.2.2.1.1.1|2|1 +1.3.6.1.4.1.3375.2.1.14.2.2.1.2.1|4x|4f7074696f6e616c20616374696f6e3a2041646420612064657669636520746f2074686520747275737420646f6d61696e +1.3.6.1.4.1.3375.2.1.14.3.1.0|2|4 +1.3.6.1.4.1.3375.2.1.14.3.2.0|4|ACTIVE +1.3.6.1.4.1.3375.2.1.14.3.3.0|2|0 +1.3.6.1.4.1.3375.2.1.14.3.4.0|4x|312f3120616374697665 +1.3.6.1.4.1.3375.2.1.14.4.1.0|2|1 +1.3.6.1.4.1.3375.2.1.14.4.2.1.1.1|2|1 +1.3.6.1.4.1.3375.2.1.14.4.2.1.2.1|4x|61637469766520666f72202f436f6d6d6f6e2f747261666669632d67726f75702d31 +1.3.6.1.4.1.3375.2.1.14.5.1.0|2|1 +1.3.6.1.4.1.3375.2.1.14.5.2.1.1.23.47.67.111.109.109.111.110.47.116.114.97.102.102.105.99.45.103.114.111.117.112.45.49.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|2f436f6d6d6f6e2f747261666669632d67726f75702d31 +1.3.6.1.4.1.3375.2.1.14.5.2.1.2.23.47.67.111.109.109.111.110.47.116.114.97.102.102.105.99.45.103.114.111.117.112.45.49.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|2f436f6d6d6f6e2f626967697031 +1.3.6.1.4.1.3375.2.1.14.5.2.1.3.23.47.67.111.109.109.111.110.47.116.114.97.102.102.105.99.45.103.114.111.117.112.45.49.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|2|4 +1.3.6.1.4.1.3375.2.1.15.1.1.0|2|4 +1.3.6.1.4.1.3375.2.1.15.1.2.1.1.19.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116.46.99.114.116|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.1.15.1.2.1.1.20.47.67.111.109.109.111.110.47.102.53.45.105.114.117.108.101.46.99.114.116|4x|2f436f6d6d6f6e2f66352d6972756c652e637274 +1.3.6.1.4.1.3375.2.1.15.1.2.1.1.21.47.67.111.109.109.111.110.47.99.97.45.98.117.110.100.108.101.46.99.114.116|4x|2f436f6d6d6f6e2f63612d62756e646c652e637274 +1.3.6.1.4.1.3375.2.1.15.1.2.1.1.24.47.67.111.109.109.111.110.47.102.53.45.99.97.45.98.117.110.100.108.101.46.99.114.116|4x|2f436f6d6d6f6e2f66352d63612d62756e646c652e637274 +1.3.6.1.4.1.3375.2.1.15.1.2.1.2.19.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116.46.99.114.116|4| +1.3.6.1.4.1.3375.2.1.15.1.2.1.2.20.47.67.111.109.109.111.110.47.102.53.45.105.114.117.108.101.46.99.114.116|4| +1.3.6.1.4.1.3375.2.1.15.1.2.1.2.21.47.67.111.109.109.111.110.47.99.97.45.98.117.110.100.108.101.46.99.114.116|4| +1.3.6.1.4.1.3375.2.1.15.1.2.1.2.24.47.67.111.109.109.111.110.47.102.53.45.99.97.45.98.117.110.100.108.101.46.99.114.116|4| +1.3.6.1.4.1.3375.2.1.15.1.2.1.3.19.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116.46.99.114.116|66|0 +1.3.6.1.4.1.3375.2.1.15.1.2.1.3.20.47.67.111.109.109.111.110.47.102.53.45.105.114.117.108.101.46.99.114.116|66|0 +1.3.6.1.4.1.3375.2.1.15.1.2.1.3.21.47.67.111.109.109.111.110.47.99.97.45.98.117.110.100.108.101.46.99.114.116|66|0 +1.3.6.1.4.1.3375.2.1.15.1.2.1.3.24.47.67.111.109.109.111.110.47.102.53.45.99.97.45.98.117.110.100.108.101.46.99.114.116|66|0 +1.3.6.1.4.1.3375.2.1.15.1.2.1.4.19.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116.46.99.114.116|4x|5365702032372030393a31313a3137203230323920474d54 +1.3.6.1.4.1.3375.2.1.15.1.2.1.4.20.47.67.111.109.109.111.110.47.102.53.45.105.114.117.108.101.46.99.114.116|4x|4a756c2031382032313a30303a3133203230323720474d54 +1.3.6.1.4.1.3375.2.1.15.1.2.1.4.21.47.67.111.109.109.111.110.47.99.97.45.98.117.110.100.108.101.46.99.114.116|4x|4465632033312032333a35393a3539203230323920474d54 +1.3.6.1.4.1.3375.2.1.15.1.2.1.4.24.47.67.111.109.109.111.110.47.102.53.45.99.97.45.98.117.110.100.108.101.46.99.114.116|4x|4465632020372031373a35353a3534203230333020474d54 +1.3.6.1.4.1.3375.2.1.15.1.2.1.5.19.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116.46.99.114.116|70|1885194677 +1.3.6.1.4.1.3375.2.1.15.1.2.1.5.20.47.67.111.109.109.111.110.47.102.53.45.105.114.117.108.101.46.99.114.116|70|1815944413 +1.3.6.1.4.1.3375.2.1.15.1.2.1.5.21.47.67.111.109.109.111.110.47.99.97.45.98.117.110.100.108.101.46.99.114.116|70|1893455999 +1.3.6.1.4.1.3375.2.1.15.1.2.1.5.24.47.67.111.109.109.111.110.47.102.53.45.99.97.45.98.117.110.100.108.101.46.99.114.116|70|1922896554 +1.3.6.1.4.1.3375.2.1.15.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.15.3.1.0|2|0 +1.3.6.1.4.1.3375.2.1.15.4.1.0|2|0 +1.3.6.1.4.1.3375.2.1.15.4.2.0|2|0 +1.3.6.1.4.1.3375.2.1.15.5.1.0|2|4 +1.3.6.1.4.1.3375.2.1.15.5.2.1.1.19.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116.46.99.114.116|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.1.15.5.2.1.1.20.47.67.111.109.109.111.110.47.102.53.45.105.114.117.108.101.46.99.114.116|4x|2f436f6d6d6f6e2f66352d6972756c652e637274 +1.3.6.1.4.1.3375.2.1.15.5.2.1.1.21.47.67.111.109.109.111.110.47.99.97.45.98.117.110.100.108.101.46.99.114.116|4x|2f436f6d6d6f6e2f63612d62756e646c652e637274 +1.3.6.1.4.1.3375.2.1.15.5.2.1.1.24.47.67.111.109.109.111.110.47.102.53.45.99.97.45.98.117.110.100.108.101.46.99.114.116|4x|2f436f6d6d6f6e2f66352d63612d62756e646c652e637274 +1.3.6.1.4.1.3375.2.1.15.5.2.1.2.19.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116.46.99.114.116|2|0 +1.3.6.1.4.1.3375.2.1.15.5.2.1.2.20.47.67.111.109.109.111.110.47.102.53.45.105.114.117.108.101.46.99.114.116|2|0 +1.3.6.1.4.1.3375.2.1.15.5.2.1.2.21.47.67.111.109.109.111.110.47.99.97.45.98.117.110.100.108.101.46.99.114.116|2|0 +1.3.6.1.4.1.3375.2.1.15.5.2.1.2.24.47.67.111.109.109.111.110.47.102.53.45.99.97.45.98.117.110.100.108.101.46.99.114.116|2|0 +1.3.6.1.4.1.3375.2.1.15.5.2.1.3.19.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116.46.99.114.116|2|0 +1.3.6.1.4.1.3375.2.1.15.5.2.1.3.20.47.67.111.109.109.111.110.47.102.53.45.105.114.117.108.101.46.99.114.116|2|0 +1.3.6.1.4.1.3375.2.1.15.5.2.1.3.21.47.67.111.109.109.111.110.47.99.97.45.98.117.110.100.108.101.46.99.114.116|2|0 +1.3.6.1.4.1.3375.2.1.15.5.2.1.3.24.47.67.111.109.109.111.110.47.102.53.45.99.97.45.98.117.110.100.108.101.46.99.114.116|2|0 +1.3.6.1.4.1.3375.2.1.15.6.1.0|2|0 +1.3.6.1.4.1.3375.2.1.15.7.1.0|2|0 +1.3.6.1.4.1.3375.2.1.15.7.2.0|2|0 +1.3.6.1.4.1.3375.2.1.15.8.1.0|2|0 +1.3.6.1.4.1.3375.2.1.15.9.1.0|2|0 +1.3.6.1.4.1.3375.2.1.15.9.2.0|2|0 +1.3.6.1.4.1.3375.2.2.1.1.1.0|66|0 +1.3.6.1.4.1.3375.2.2.1.1.2.0|2|1 +1.3.6.1.4.1.3375.2.2.1.1.3.0|2|0 +1.3.6.1.4.1.3375.2.2.1.1.4.0|66|2048 +1.3.6.1.4.1.3375.2.2.1.1.5.0|2|0 +1.3.6.1.4.1.3375.2.2.1.1.6.0|4x|3a3a +1.3.6.1.4.1.3375.2.2.1.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.1.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.1.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.1.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.1.4.2.0|2|0 +1.3.6.1.4.1.3375.2.2.1.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.1.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.2.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.2.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.3.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.3.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.3.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.3.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.4.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.4.1.1|2|3 +1.3.6.1.4.1.3375.2.2.4.1.2.1.1.1|2|0 +1.3.6.1.4.1.3375.2.2.4.1.2.1.1.2|2|16 +1.3.6.1.4.1.3375.2.2.4.1.2.1.1.3|2|1 +1.3.6.1.4.1.3375.2.2.4.1.2.1.2.1|4x|6275742062757420616374656420717561696e746c79207468656972206163746564206b65707420717561696e746c79 +1.3.6.1.4.1.3375.2.2.4.1.2.1.2.2|4x|62757420627574 +1.3.6.1.4.1.3375.2.2.4.1.2.1.2.3|4|forward +1.3.6.1.4.1.3375.2.2.4.1.2.1.3.1|2|0 +1.3.6.1.4.1.3375.2.2.4.1.2.1.3.2|2|30 +1.3.6.1.4.1.3375.2.2.4.1.2.1.3.3|2|20 +1.3.6.1.4.1.3375.2.2.4.1.2.1.4.1|2|30 +1.3.6.1.4.1.3375.2.2.4.1.2.1.4.2|2|28 +1.3.6.1.4.1.3375.2.2.4.1.2.1.4.3|2|19 +1.3.6.1.4.1.3375.2.2.4.1.2.1.5.1|2|15 +1.3.6.1.4.1.3375.2.2.4.1.2.1.5.2|2|0 +1.3.6.1.4.1.3375.2.2.4.1.2.1.5.3|2|31 +1.3.6.1.4.1.3375.2.2.4.1.2.1.6.1|2|0 +1.3.6.1.4.1.3375.2.2.4.1.2.1.6.2|2|23 +1.3.6.1.4.1.3375.2.2.4.1.2.1.6.3|2|22 +1.3.6.1.4.1.3375.2.2.4.1.2.1.7.1|2|24 +1.3.6.1.4.1.3375.2.2.4.1.2.1.7.2|2|23 +1.3.6.1.4.1.3375.2.2.4.1.2.1.7.3|2|3 +1.3.6.1.4.1.3375.2.2.4.1.2.1.8.1|4x|7a6f6d6269657320717561696e746c79206b65707420717561696e746c7920717561696e746c79206f78656e +1.3.6.1.4.1.3375.2.2.4.1.2.1.8.2|4|forward +1.3.6.1.4.1.3375.2.2.4.1.2.1.8.3|4x|6163746564207a6f6d62696573206f78656e2064726976696e672064726976696e672062757420666f7277617264204a61646564 +1.3.6.1.4.1.3375.2.2.4.1.2.1.9.1|2|3 +1.3.6.1.4.1.3375.2.2.4.1.2.1.9.2|2|2 +1.3.6.1.4.1.3375.2.2.4.1.2.1.9.3|2|2 +1.3.6.1.4.1.3375.2.2.4.1.2.1.10.1|2|4 +1.3.6.1.4.1.3375.2.2.4.1.2.1.10.2|2|2 +1.3.6.1.4.1.3375.2.2.4.1.2.1.10.3|2|3 +1.3.6.1.4.1.3375.2.2.4.1.2.1.11.1|2|7 +1.3.6.1.4.1.3375.2.2.4.1.2.1.11.2|2|6 +1.3.6.1.4.1.3375.2.2.4.1.2.1.11.3|2|27 +1.3.6.1.4.1.3375.2.2.4.1.2.1.12.1|4x|7468656972207a6f6d62696573207468656972207a6f6d62696573207a6f6d6269657320627574207468656972 +1.3.6.1.4.1.3375.2.2.4.1.2.1.12.2|4x|62757420717561696e746c79 +1.3.6.1.4.1.3375.2.2.4.1.2.1.12.3|4x|4a61646564207a6f6d6269657320627574206b657074 +1.3.6.1.4.1.3375.2.2.4.1.2.1.13.1|2|4 +1.3.6.1.4.1.3375.2.2.4.1.2.1.13.2|2|0 +1.3.6.1.4.1.3375.2.2.4.1.2.1.13.3|2|3 +1.3.6.1.4.1.3375.2.2.4.1.2.1.14.1|2|0 +1.3.6.1.4.1.3375.2.2.4.1.2.1.14.2|2|2 +1.3.6.1.4.1.3375.2.2.4.1.2.1.14.3|2|2 +1.3.6.1.4.1.3375.2.2.4.1.2.1.15.1|2|15 +1.3.6.1.4.1.3375.2.2.4.1.2.1.15.2|2|11 +1.3.6.1.4.1.3375.2.2.4.1.2.1.15.3|2|21 +1.3.6.1.4.1.3375.2.2.4.1.2.1.16.1|4|their +1.3.6.1.4.1.3375.2.2.4.1.2.1.16.2|4x|616374656420717561696e746c79 +1.3.6.1.4.1.3375.2.2.4.1.2.1.16.3|4x|627574204a6164656420666f7277617264 +1.3.6.1.4.1.3375.2.2.4.1.2.1.17.1|4x|6e6f646531 +1.3.6.1.4.1.3375.2.2.4.1.2.1.17.2|4x|6e6f646532 +1.3.6.1.4.1.3375.2.2.4.1.2.1.17.3|4x|6e6f646533 +1.3.6.1.4.1.3375.2.2.4.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.4.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.4.2.3.1.1.1|2|0 +1.3.6.1.4.1.3375.2.2.4.2.3.1.1.2|2|2 +1.3.6.1.4.1.3375.2.2.4.2.3.1.1.3|2|1 +1.3.6.1.4.1.3375.2.2.4.2.3.1.2.1|4x|627574204a6164656420717561696e746c79204a61646564206b657074206f78656e20717561696e746c792064726976696e67 +1.3.6.1.4.1.3375.2.2.4.2.3.1.2.2|4x|74686569722064726976696e67 +1.3.6.1.4.1.3375.2.2.4.2.3.1.2.3|4x|7a6f6d626965732074686569722062757420616374656420746865697220746865697220666f7277617264 +1.3.6.1.4.1.3375.2.2.4.2.3.1.3.1|70|4944872918648779327 +1.3.6.1.4.1.3375.2.2.4.2.3.1.3.2|70|8029375396251303915 +1.3.6.1.4.1.3375.2.2.4.2.3.1.3.3|70|13077172560709481671 +1.3.6.1.4.1.3375.2.2.4.2.3.1.4.1|70|4068229906985517548 +1.3.6.1.4.1.3375.2.2.4.2.3.1.4.2|70|8158617595607170573 +1.3.6.1.4.1.3375.2.2.4.2.3.1.4.3|70|8570216897735326644 +1.3.6.1.4.1.3375.2.2.4.2.3.1.5.1|70|8266159627953159227 +1.3.6.1.4.1.3375.2.2.4.2.3.1.5.2|70|6409527896954307095 +1.3.6.1.4.1.3375.2.2.4.2.3.1.5.3|70|11729448798088947091 +1.3.6.1.4.1.3375.2.2.4.2.3.1.6.1|70|6073838854401463636 +1.3.6.1.4.1.3375.2.2.4.2.3.1.6.2|70|8390897027300387699 +1.3.6.1.4.1.3375.2.2.4.2.3.1.6.3|70|10823245692376386274 +1.3.6.1.4.1.3375.2.2.4.2.3.1.7.1|70|1642226835677429374 +1.3.6.1.4.1.3375.2.2.4.2.3.1.7.2|70|6074301342335640587 +1.3.6.1.4.1.3375.2.2.4.2.3.1.7.3|70|17373143971219577691 +1.3.6.1.4.1.3375.2.2.4.2.3.1.8.1|70|4119264629154729857 +1.3.6.1.4.1.3375.2.2.4.2.3.1.8.2|70|7878249428133895665 +1.3.6.1.4.1.3375.2.2.4.2.3.1.8.3|70|7928254558377589981 +1.3.6.1.4.1.3375.2.2.4.2.3.1.9.1|66|1651920139 +1.3.6.1.4.1.3375.2.2.4.2.3.1.9.2|66|3038783190 +1.3.6.1.4.1.3375.2.2.4.2.3.1.9.3|66|591588210 +1.3.6.1.4.1.3375.2.2.4.2.3.1.10.1|70|14662592026588814360 +1.3.6.1.4.1.3375.2.2.4.2.3.1.10.2|70|3961661652095473285 +1.3.6.1.4.1.3375.2.2.4.2.3.1.10.3|70|12449952025922061878 +1.3.6.1.4.1.3375.2.2.4.2.3.1.11.1|70|15394562351003399313 +1.3.6.1.4.1.3375.2.2.4.2.3.1.11.2|70|1786591066820350842 +1.3.6.1.4.1.3375.2.2.4.2.3.1.11.3|70|12474830199603794536 +1.3.6.1.4.1.3375.2.2.4.2.3.1.12.1|70|14854644677157090730 +1.3.6.1.4.1.3375.2.2.4.2.3.1.12.2|70|4544871405060434280 +1.3.6.1.4.1.3375.2.2.4.2.3.1.12.3|70|5261739439469317107 +1.3.6.1.4.1.3375.2.2.4.2.3.1.13.1|70|361936506436156012 +1.3.6.1.4.1.3375.2.2.4.2.3.1.13.2|70|11356492468627532113 +1.3.6.1.4.1.3375.2.2.4.2.3.1.13.3|70|12051964844036690225 +1.3.6.1.4.1.3375.2.2.4.2.3.1.14.1|70|10820521555590319445 +1.3.6.1.4.1.3375.2.2.4.2.3.1.14.2|70|7272864848476956229 +1.3.6.1.4.1.3375.2.2.4.2.3.1.14.3|70|13359503625543215912 +1.3.6.1.4.1.3375.2.2.4.2.3.1.15.1|70|10907836064895621196 +1.3.6.1.4.1.3375.2.2.4.2.3.1.15.2|70|5009646550570838518 +1.3.6.1.4.1.3375.2.2.4.2.3.1.15.3|70|4529016329646344243 +1.3.6.1.4.1.3375.2.2.4.2.3.1.16.1|66|3003009877 +1.3.6.1.4.1.3375.2.2.4.2.3.1.16.2|66|782515544 +1.3.6.1.4.1.3375.2.2.4.2.3.1.16.3|66|3821721731 +1.3.6.1.4.1.3375.2.2.4.2.3.1.17.1|70|9543188708531228614 +1.3.6.1.4.1.3375.2.2.4.2.3.1.17.2|70|1982462802964786213 +1.3.6.1.4.1.3375.2.2.4.2.3.1.17.3|70|3503949068840085478 +1.3.6.1.4.1.3375.2.2.4.2.3.1.18.1|70|1538964337621885130 +1.3.6.1.4.1.3375.2.2.4.2.3.1.18.2|70|1655662892984174663 +1.3.6.1.4.1.3375.2.2.4.2.3.1.18.3|70|4318101150266803459 +1.3.6.1.4.1.3375.2.2.4.2.3.1.19.1|66|3000376368 +1.3.6.1.4.1.3375.2.2.4.2.3.1.19.2|66|3947013440 +1.3.6.1.4.1.3375.2.2.4.2.3.1.19.3|66|72658592 +1.3.6.1.4.1.3375.2.2.4.2.3.1.20.1|4x|6e6f646531 +1.3.6.1.4.1.3375.2.2.4.2.3.1.20.2|4x|6e6f646532 +1.3.6.1.4.1.3375.2.2.4.2.3.1.20.3|4x|6e6f646533 +1.3.6.1.4.1.3375.2.2.4.2.3.1.21.1|66|3550776537 +1.3.6.1.4.1.3375.2.2.4.2.3.1.21.2|66|1830868585 +1.3.6.1.4.1.3375.2.2.4.2.3.1.21.3|66|1703147893 +1.3.6.1.4.1.3375.2.2.4.2.3.1.22.1|66|3594307962 +1.3.6.1.4.1.3375.2.2.4.2.3.1.22.2|66|3313621335 +1.3.6.1.4.1.3375.2.2.4.2.3.1.22.3|66|3370950269 +1.3.6.1.4.1.3375.2.2.4.2.3.1.23.1|66|3834831533 +1.3.6.1.4.1.3375.2.2.4.2.3.1.23.2|66|3055589865 +1.3.6.1.4.1.3375.2.2.4.2.3.1.23.3|66|126963258 +1.3.6.1.4.1.3375.2.2.4.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.5.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.5.1.1|2|2 +1.3.6.1.4.1.3375.2.2.5.1.2.1.1.1|4x|706f6f6c31 +1.3.6.1.4.1.3375.2.2.5.1.2.1.1.2|4x|706f6f6c32 +1.3.6.1.4.1.3375.2.2.5.1.2.1.2.1|2|15 +1.3.6.1.4.1.3375.2.2.5.1.2.1.2.2|2|3 +1.3.6.1.4.1.3375.2.2.5.1.2.1.3.1|2|0 +1.3.6.1.4.1.3375.2.2.5.1.2.1.3.2|2|1 +1.3.6.1.4.1.3375.2.2.5.1.2.1.4.1|2|2 +1.3.6.1.4.1.3375.2.2.5.1.2.1.4.2|2|27 +1.3.6.1.4.1.3375.2.2.5.1.2.1.5.1|2|1 +1.3.6.1.4.1.3375.2.2.5.1.2.1.5.2|2|1 +1.3.6.1.4.1.3375.2.2.5.1.2.1.6.1|2|6 +1.3.6.1.4.1.3375.2.2.5.1.2.1.6.2|2|12 +1.3.6.1.4.1.3375.2.2.5.1.2.1.7.1|2|8 +1.3.6.1.4.1.3375.2.2.5.1.2.1.7.2|2|12 +1.3.6.1.4.1.3375.2.2.5.1.2.1.8.1|2|12 +1.3.6.1.4.1.3375.2.2.5.1.2.1.8.2|2|3 +1.3.6.1.4.1.3375.2.2.5.1.2.1.9.1|2|0 +1.3.6.1.4.1.3375.2.2.5.1.2.1.9.2|2|0 +1.3.6.1.4.1.3375.2.2.5.1.2.1.10.1|2|0 +1.3.6.1.4.1.3375.2.2.5.1.2.1.10.2|2|1 +1.3.6.1.4.1.3375.2.2.5.1.2.1.11.1|2|8 +1.3.6.1.4.1.3375.2.2.5.1.2.1.11.2|2|27 +1.3.6.1.4.1.3375.2.2.5.1.2.1.12.1|2|2 +1.3.6.1.4.1.3375.2.2.5.1.2.1.12.2|2|5 +1.3.6.1.4.1.3375.2.2.5.1.2.1.13.1|2|16 +1.3.6.1.4.1.3375.2.2.5.1.2.1.13.2|2|11 +1.3.6.1.4.1.3375.2.2.5.1.2.1.14.1|2|4 +1.3.6.1.4.1.3375.2.2.5.1.2.1.14.2|2|31 +1.3.6.1.4.1.3375.2.2.5.1.2.1.15.1|2|24 +1.3.6.1.4.1.3375.2.2.5.1.2.1.15.2|2|6 +1.3.6.1.4.1.3375.2.2.5.1.2.1.16.1|2|1 +1.3.6.1.4.1.3375.2.2.5.1.2.1.16.2|2|30 +1.3.6.1.4.1.3375.2.2.5.1.2.1.17.1|4x|6275742061637465642062757420746865697220717561696e746c79 +1.3.6.1.4.1.3375.2.2.5.1.2.1.17.2|4|acted +1.3.6.1.4.1.3375.2.2.5.1.2.1.18.1|2|4 +1.3.6.1.4.1.3375.2.2.5.1.2.1.18.2|2|1 +1.3.6.1.4.1.3375.2.2.5.1.2.1.19.1|2|1 +1.3.6.1.4.1.3375.2.2.5.1.2.1.19.2|2|2 +1.3.6.1.4.1.3375.2.2.5.1.2.1.20.1|2|24 +1.3.6.1.4.1.3375.2.2.5.1.2.1.20.2|2|23 +1.3.6.1.4.1.3375.2.2.5.1.2.1.21.1|4x|6b657074206f78656e206b657074206b657074 +1.3.6.1.4.1.3375.2.2.5.1.2.1.21.2|4x|62757420717561696e746c792064726976696e67207468656972207a6f6d62696573206b657074207a6f6d62696573204a61646564 +1.3.6.1.4.1.3375.2.2.5.1.2.1.22.1|2|29 +1.3.6.1.4.1.3375.2.2.5.1.2.1.22.2|2|31 +1.3.6.1.4.1.3375.2.2.5.1.2.1.23.1|2|18 +1.3.6.1.4.1.3375.2.2.5.1.2.1.23.2|2|13 +1.3.6.1.4.1.3375.2.2.5.1.2.1.24.1|2|1 +1.3.6.1.4.1.3375.2.2.5.1.2.1.24.2|2|1 +1.3.6.1.4.1.3375.2.2.5.1.2.1.25.1|2|0 +1.3.6.1.4.1.3375.2.2.5.1.2.1.25.2|2|25 +1.3.6.1.4.1.3375.2.2.5.1.2.1.26.1|2|15 +1.3.6.1.4.1.3375.2.2.5.1.2.1.26.2|2|14 +1.3.6.1.4.1.3375.2.2.5.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.5.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.5.2.3.1.1.1|4x|706f6f6c31 +1.3.6.1.4.1.3375.2.2.5.2.3.1.1.2|4x|706f6f6c32 +1.3.6.1.4.1.3375.2.2.5.2.3.1.2.1|70|4256553769388318370 +1.3.6.1.4.1.3375.2.2.5.2.3.1.2.2|70|13792863044069252701 +1.3.6.1.4.1.3375.2.2.5.2.3.1.3.1|70|1247857108542250490 +1.3.6.1.4.1.3375.2.2.5.2.3.1.3.2|70|2439768386565676696 +1.3.6.1.4.1.3375.2.2.5.2.3.1.4.1|70|13685798431063739945 +1.3.6.1.4.1.3375.2.2.5.2.3.1.4.2|70|8010152851446650287 +1.3.6.1.4.1.3375.2.2.5.2.3.1.5.1|70|12792963120883269730 +1.3.6.1.4.1.3375.2.2.5.2.3.1.5.2|70|4510088173493731928 +1.3.6.1.4.1.3375.2.2.5.2.3.1.6.1|70|14430847875818333591 +1.3.6.1.4.1.3375.2.2.5.2.3.1.6.2|70|1288344245168217259 +1.3.6.1.4.1.3375.2.2.5.2.3.1.7.1|70|14093027756920293176 +1.3.6.1.4.1.3375.2.2.5.2.3.1.7.2|70|6792874586505659276 +1.3.6.1.4.1.3375.2.2.5.2.3.1.8.1|66|2268921071 +1.3.6.1.4.1.3375.2.2.5.2.3.1.8.2|66|2797808131 +1.3.6.1.4.1.3375.2.2.5.2.3.1.9.1|70|14784730794774140792 +1.3.6.1.4.1.3375.2.2.5.2.3.1.9.2|70|7416951176019391429 +1.3.6.1.4.1.3375.2.2.5.2.3.1.10.1|70|17355194836665939296 +1.3.6.1.4.1.3375.2.2.5.2.3.1.10.2|70|12182868513869101472 +1.3.6.1.4.1.3375.2.2.5.2.3.1.11.1|70|6195382402846351570 +1.3.6.1.4.1.3375.2.2.5.2.3.1.11.2|70|11175052932718179982 +1.3.6.1.4.1.3375.2.2.5.2.3.1.12.1|70|13201653056011990257 +1.3.6.1.4.1.3375.2.2.5.2.3.1.12.2|70|3408578314658150822 +1.3.6.1.4.1.3375.2.2.5.2.3.1.13.1|70|9260687003378291011 +1.3.6.1.4.1.3375.2.2.5.2.3.1.13.2|70|15861637656764668687 +1.3.6.1.4.1.3375.2.2.5.2.3.1.14.1|70|15599209190275180986 +1.3.6.1.4.1.3375.2.2.5.2.3.1.14.2|70|11462228613215705267 +1.3.6.1.4.1.3375.2.2.5.2.3.1.15.1|66|1393706886 +1.3.6.1.4.1.3375.2.2.5.2.3.1.15.2|66|1661974926 +1.3.6.1.4.1.3375.2.2.5.2.3.1.16.1|70|12326970103109086788 +1.3.6.1.4.1.3375.2.2.5.2.3.1.16.2|70|3374152115876485407 +1.3.6.1.4.1.3375.2.2.5.2.3.1.17.1|66|4287949346 +1.3.6.1.4.1.3375.2.2.5.2.3.1.17.2|66|3795953038 +1.3.6.1.4.1.3375.2.2.5.2.3.1.18.1|2|26 +1.3.6.1.4.1.3375.2.2.5.2.3.1.18.2|2|21 +1.3.6.1.4.1.3375.2.2.5.2.3.1.19.1|2|30 +1.3.6.1.4.1.3375.2.2.5.2.3.1.19.2|2|5 +1.3.6.1.4.1.3375.2.2.5.2.3.1.20.1|2|23 +1.3.6.1.4.1.3375.2.2.5.2.3.1.20.2|2|12 +1.3.6.1.4.1.3375.2.2.5.2.3.1.21.1|2|25 +1.3.6.1.4.1.3375.2.2.5.2.3.1.21.2|2|12 +1.3.6.1.4.1.3375.2.2.5.2.3.1.22.1|2|7 +1.3.6.1.4.1.3375.2.2.5.2.3.1.22.2|2|1 +1.3.6.1.4.1.3375.2.2.5.2.3.1.23.1|70|1185517316256128603 +1.3.6.1.4.1.3375.2.2.5.2.3.1.23.2|70|1309485462824427150 +1.3.6.1.4.1.3375.2.2.5.2.3.1.24.1|2|25 +1.3.6.1.4.1.3375.2.2.5.2.3.1.24.2|2|16 +1.3.6.1.4.1.3375.2.2.5.2.3.1.25.1|2|22 +1.3.6.1.4.1.3375.2.2.5.2.3.1.25.2|2|1 +1.3.6.1.4.1.3375.2.2.5.2.3.1.26.1|2|1 +1.3.6.1.4.1.3375.2.2.5.2.3.1.26.2|2|5 +1.3.6.1.4.1.3375.2.2.5.2.3.1.27.1|2|1 +1.3.6.1.4.1.3375.2.2.5.2.3.1.27.2|2|18 +1.3.6.1.4.1.3375.2.2.5.2.3.1.28.1|2|27 +1.3.6.1.4.1.3375.2.2.5.2.3.1.28.2|2|10 +1.3.6.1.4.1.3375.2.2.5.2.3.1.29.1|70|9671521655276789662 +1.3.6.1.4.1.3375.2.2.5.2.3.1.29.2|70|5297673884035549156 +1.3.6.1.4.1.3375.2.2.5.2.3.1.30.1|70|830110198927418245 +1.3.6.1.4.1.3375.2.2.5.2.3.1.30.2|70|8485525847267957855 +1.3.6.1.4.1.3375.2.2.5.2.3.1.31.1|66|3031153578 +1.3.6.1.4.1.3375.2.2.5.2.3.1.31.2|66|716027177 +1.3.6.1.4.1.3375.2.2.5.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.5.3.1|2|3 +1.3.6.1.4.1.3375.2.2.5.3.2.1.1.1|4x|706f6f6c31 +1.3.6.1.4.1.3375.2.2.5.3.2.1.1.2|4x|706f6f6c31 +1.3.6.1.4.1.3375.2.2.5.3.2.1.1.3|4x|706f6f6c32 +1.3.6.1.4.1.3375.2.2.5.3.2.1.2.1|2|2 +1.3.6.1.4.1.3375.2.2.5.3.2.1.2.2|2|1 +1.3.6.1.4.1.3375.2.2.5.3.2.1.2.3|2|16 +1.3.6.1.4.1.3375.2.2.5.3.2.1.3.1|4x|6275742064726976696e6720627574 +1.3.6.1.4.1.3375.2.2.5.3.2.1.3.2|4x|6b6570742064726976696e67206163746564206f78656e204a61646564207a6f6d626965732064726976696e67207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.3375.2.2.5.3.2.1.3.3|4x|6275742064726976696e67 +1.3.6.1.4.1.3375.2.2.5.3.2.1.4.1|66|11453 +1.3.6.1.4.1.3375.2.2.5.3.2.1.4.2|66|61194 +1.3.6.1.4.1.3375.2.2.5.3.2.1.4.3|66|27571 +1.3.6.1.4.1.3375.2.2.5.3.2.1.5.1|2|16 +1.3.6.1.4.1.3375.2.2.5.3.2.1.5.2|2|12 +1.3.6.1.4.1.3375.2.2.5.3.2.1.5.3|2|3 +1.3.6.1.4.1.3375.2.2.5.3.2.1.6.1|2|4 +1.3.6.1.4.1.3375.2.2.5.3.2.1.6.2|2|11 +1.3.6.1.4.1.3375.2.2.5.3.2.1.6.3|2|16 +1.3.6.1.4.1.3375.2.2.5.3.2.1.7.1|2|10 +1.3.6.1.4.1.3375.2.2.5.3.2.1.7.2|2|23 +1.3.6.1.4.1.3375.2.2.5.3.2.1.7.3|2|6 +1.3.6.1.4.1.3375.2.2.5.3.2.1.8.1|2|21 +1.3.6.1.4.1.3375.2.2.5.3.2.1.8.2|2|9 +1.3.6.1.4.1.3375.2.2.5.3.2.1.8.3|2|12 +1.3.6.1.4.1.3375.2.2.5.3.2.1.9.1|2|4 +1.3.6.1.4.1.3375.2.2.5.3.2.1.9.2|2|0 +1.3.6.1.4.1.3375.2.2.5.3.2.1.9.3|2|7 +1.3.6.1.4.1.3375.2.2.5.3.2.1.10.1|2|19 +1.3.6.1.4.1.3375.2.2.5.3.2.1.10.2|2|24 +1.3.6.1.4.1.3375.2.2.5.3.2.1.10.3|2|1 +1.3.6.1.4.1.3375.2.2.5.3.2.1.11.1|2|20 +1.3.6.1.4.1.3375.2.2.5.3.2.1.11.2|2|4 +1.3.6.1.4.1.3375.2.2.5.3.2.1.11.3|2|18 +1.3.6.1.4.1.3375.2.2.5.3.2.1.12.1|2|4 +1.3.6.1.4.1.3375.2.2.5.3.2.1.12.2|2|1 +1.3.6.1.4.1.3375.2.2.5.3.2.1.12.3|2|2 +1.3.6.1.4.1.3375.2.2.5.3.2.1.13.1|2|2 +1.3.6.1.4.1.3375.2.2.5.3.2.1.13.2|2|5 +1.3.6.1.4.1.3375.2.2.5.3.2.1.13.3|2|4 +1.3.6.1.4.1.3375.2.2.5.3.2.1.14.1|4x|6f78656e2064726976696e67206163746564204a6164656420627574206163746564 +1.3.6.1.4.1.3375.2.2.5.3.2.1.14.2|4x|717561696e746c7920627574 +1.3.6.1.4.1.3375.2.2.5.3.2.1.14.3|4x|4a61646564206f78656e206b65707420627574 +1.3.6.1.4.1.3375.2.2.5.3.2.1.15.1|2|2 +1.3.6.1.4.1.3375.2.2.5.3.2.1.15.2|2|4 +1.3.6.1.4.1.3375.2.2.5.3.2.1.15.3|2|0 +1.3.6.1.4.1.3375.2.2.5.3.2.1.16.1|2|0 +1.3.6.1.4.1.3375.2.2.5.3.2.1.16.2|2|0 +1.3.6.1.4.1.3375.2.2.5.3.2.1.16.3|2|2 +1.3.6.1.4.1.3375.2.2.5.3.2.1.17.1|2|16 +1.3.6.1.4.1.3375.2.2.5.3.2.1.17.2|2|16 +1.3.6.1.4.1.3375.2.2.5.3.2.1.17.3|2|13 +1.3.6.1.4.1.3375.2.2.5.3.2.1.18.1|4x|616374656420627574 +1.3.6.1.4.1.3375.2.2.5.3.2.1.18.2|4|oxen +1.3.6.1.4.1.3375.2.2.5.3.2.1.18.3|4x|6163746564206b657074206b657074206f78656e20627574206b657074206b657074206f78656e +1.3.6.1.4.1.3375.2.2.5.3.2.1.19.1|4x|6e6f646531 +1.3.6.1.4.1.3375.2.2.5.3.2.1.19.2|4x|6e6f646532 +1.3.6.1.4.1.3375.2.2.5.3.2.1.19.3|4x|6e6f646533 +1.3.6.1.4.1.3375.2.2.5.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.5.4.2.0|2|0 +1.3.6.1.4.1.3375.2.2.5.4.3.1.1.1|4x|706f6f6c31 +1.3.6.1.4.1.3375.2.2.5.4.3.1.1.2|4x|706f6f6c31 +1.3.6.1.4.1.3375.2.2.5.4.3.1.1.3|4x|706f6f6c32 +1.3.6.1.4.1.3375.2.2.5.4.3.1.2.1|2|16 +1.3.6.1.4.1.3375.2.2.5.4.3.1.2.2|2|3 +1.3.6.1.4.1.3375.2.2.5.4.3.1.2.3|2|2 +1.3.6.1.4.1.3375.2.2.5.4.3.1.3.1|4x|6163746564206b657074206163746564206f78656e2062757420717561696e746c79 +1.3.6.1.4.1.3375.2.2.5.4.3.1.3.2|4x|4a6164656420666f727761726420666f727761726420666f727761726420627574204a6164656420666f7277617264 +1.3.6.1.4.1.3375.2.2.5.4.3.1.3.3|4x|64726976696e672064726976696e6720666f7277617264206163746564206f78656e207468656972204a61646564 +1.3.6.1.4.1.3375.2.2.5.4.3.1.4.1|66|20398 +1.3.6.1.4.1.3375.2.2.5.4.3.1.4.2|66|4985 +1.3.6.1.4.1.3375.2.2.5.4.3.1.4.3|66|56300 +1.3.6.1.4.1.3375.2.2.5.4.3.1.5.1|70|2873284505721733998 +1.3.6.1.4.1.3375.2.2.5.4.3.1.5.2|70|14270783585237366881 +1.3.6.1.4.1.3375.2.2.5.4.3.1.5.3|70|15682680367338516603 +1.3.6.1.4.1.3375.2.2.5.4.3.1.6.1|70|2063208377357646609 +1.3.6.1.4.1.3375.2.2.5.4.3.1.6.2|70|9942037616777823716 +1.3.6.1.4.1.3375.2.2.5.4.3.1.6.3|70|769481878289981685 +1.3.6.1.4.1.3375.2.2.5.4.3.1.7.1|70|11411203339993724679 +1.3.6.1.4.1.3375.2.2.5.4.3.1.7.2|70|5001137335017343208 +1.3.6.1.4.1.3375.2.2.5.4.3.1.7.3|70|3447939929195254599 +1.3.6.1.4.1.3375.2.2.5.4.3.1.8.1|70|6923370659660874655 +1.3.6.1.4.1.3375.2.2.5.4.3.1.8.2|70|6109106490701278125 +1.3.6.1.4.1.3375.2.2.5.4.3.1.8.3|70|11245438125243532220 +1.3.6.1.4.1.3375.2.2.5.4.3.1.9.1|70|555839854274537154 +1.3.6.1.4.1.3375.2.2.5.4.3.1.9.2|70|12084595149680519637 +1.3.6.1.4.1.3375.2.2.5.4.3.1.9.3|70|6827966006511803702 +1.3.6.1.4.1.3375.2.2.5.4.3.1.10.1|70|13744051120023251665 +1.3.6.1.4.1.3375.2.2.5.4.3.1.10.2|70|3445855454713090727 +1.3.6.1.4.1.3375.2.2.5.4.3.1.10.3|70|2832567909193568324 +1.3.6.1.4.1.3375.2.2.5.4.3.1.11.1|66|263232881 +1.3.6.1.4.1.3375.2.2.5.4.3.1.11.2|66|3622767247 +1.3.6.1.4.1.3375.2.2.5.4.3.1.11.3|66|2159532223 +1.3.6.1.4.1.3375.2.2.5.4.3.1.12.1|70|13225166919628318581 +1.3.6.1.4.1.3375.2.2.5.4.3.1.12.2|70|4343349396059039628 +1.3.6.1.4.1.3375.2.2.5.4.3.1.12.3|70|10913327605844057353 +1.3.6.1.4.1.3375.2.2.5.4.3.1.13.1|70|8083056369720634069 +1.3.6.1.4.1.3375.2.2.5.4.3.1.13.2|70|174353434991594275 +1.3.6.1.4.1.3375.2.2.5.4.3.1.13.3|70|7279687954640490954 +1.3.6.1.4.1.3375.2.2.5.4.3.1.14.1|70|17307719017620384345 +1.3.6.1.4.1.3375.2.2.5.4.3.1.14.2|70|1088230504663588150 +1.3.6.1.4.1.3375.2.2.5.4.3.1.14.3|70|18351016744712524042 +1.3.6.1.4.1.3375.2.2.5.4.3.1.15.1|70|15469407905940915899 +1.3.6.1.4.1.3375.2.2.5.4.3.1.15.2|70|14466119304285597253 +1.3.6.1.4.1.3375.2.2.5.4.3.1.15.3|70|12778844528206900286 +1.3.6.1.4.1.3375.2.2.5.4.3.1.16.1|70|10829126290726572990 +1.3.6.1.4.1.3375.2.2.5.4.3.1.16.2|70|14015592186250105992 +1.3.6.1.4.1.3375.2.2.5.4.3.1.16.3|70|7362635876654415560 +1.3.6.1.4.1.3375.2.2.5.4.3.1.17.1|70|15253976660678040104 +1.3.6.1.4.1.3375.2.2.5.4.3.1.17.2|70|5447560082343902862 +1.3.6.1.4.1.3375.2.2.5.4.3.1.17.3|70|10900456361966376214 +1.3.6.1.4.1.3375.2.2.5.4.3.1.18.1|66|1084714099 +1.3.6.1.4.1.3375.2.2.5.4.3.1.18.2|66|1255758041 +1.3.6.1.4.1.3375.2.2.5.4.3.1.18.3|66|3842923528 +1.3.6.1.4.1.3375.2.2.5.4.3.1.19.1|70|13037023619346591279 +1.3.6.1.4.1.3375.2.2.5.4.3.1.19.2|70|7941461199036912343 +1.3.6.1.4.1.3375.2.2.5.4.3.1.19.3|70|2938290648063178294 +1.3.6.1.4.1.3375.2.2.5.4.3.1.20.1|70|2075228672003575187 +1.3.6.1.4.1.3375.2.2.5.4.3.1.20.2|70|9615394599206193500 +1.3.6.1.4.1.3375.2.2.5.4.3.1.20.3|70|12646485798805777773 +1.3.6.1.4.1.3375.2.2.5.4.3.1.21.1|66|2120986942 +1.3.6.1.4.1.3375.2.2.5.4.3.1.21.2|66|2670664273 +1.3.6.1.4.1.3375.2.2.5.4.3.1.21.3|66|2340421060 +1.3.6.1.4.1.3375.2.2.5.4.3.1.22.1|2|14 +1.3.6.1.4.1.3375.2.2.5.4.3.1.22.2|2|5 +1.3.6.1.4.1.3375.2.2.5.4.3.1.22.3|2|11 +1.3.6.1.4.1.3375.2.2.5.4.3.1.23.1|2|26 +1.3.6.1.4.1.3375.2.2.5.4.3.1.23.2|2|15 +1.3.6.1.4.1.3375.2.2.5.4.3.1.23.3|2|31 +1.3.6.1.4.1.3375.2.2.5.4.3.1.24.1|2|4 +1.3.6.1.4.1.3375.2.2.5.4.3.1.24.2|2|21 +1.3.6.1.4.1.3375.2.2.5.4.3.1.24.3|2|19 +1.3.6.1.4.1.3375.2.2.5.4.3.1.25.1|2|5 +1.3.6.1.4.1.3375.2.2.5.4.3.1.25.2|2|29 +1.3.6.1.4.1.3375.2.2.5.4.3.1.25.3|2|7 +1.3.6.1.4.1.3375.2.2.5.4.3.1.26.1|2|16 +1.3.6.1.4.1.3375.2.2.5.4.3.1.26.2|2|0 +1.3.6.1.4.1.3375.2.2.5.4.3.1.26.3|2|14 +1.3.6.1.4.1.3375.2.2.5.4.3.1.27.1|70|54911224004933640 +1.3.6.1.4.1.3375.2.2.5.4.3.1.27.2|70|2959402702645471109 +1.3.6.1.4.1.3375.2.2.5.4.3.1.27.3|70|16889251434225586623 +1.3.6.1.4.1.3375.2.2.5.4.3.1.28.1|4x|6e6f646531 +1.3.6.1.4.1.3375.2.2.5.4.3.1.28.2|4x|6e6f646532 +1.3.6.1.4.1.3375.2.2.5.4.3.1.28.3|4x|6e6f646533 +1.3.6.1.4.1.3375.2.2.5.4.3.1.29.1|66|3469495677 +1.3.6.1.4.1.3375.2.2.5.4.3.1.29.2|66|1633506703 +1.3.6.1.4.1.3375.2.2.5.4.3.1.29.3|66|817635962 +1.3.6.1.4.1.3375.2.2.5.4.3.1.30.1|66|2354828424 +1.3.6.1.4.1.3375.2.2.5.4.3.1.30.2|66|2915755010 +1.3.6.1.4.1.3375.2.2.5.4.3.1.30.3|66|2415428730 +1.3.6.1.4.1.3375.2.2.5.4.3.1.31.1|66|1552461926 +1.3.6.1.4.1.3375.2.2.5.4.3.1.31.2|66|253721893 +1.3.6.1.4.1.3375.2.2.5.4.3.1.31.3|66|2223786572 +1.3.6.1.4.1.3375.2.2.5.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.5.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.1.1.1.0|2|7 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.1.12.47.67.111.109.109.111.110.47.108.100.97.112|4x|2f436f6d6d6f6e2f6c646170 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.1.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|4x|2f436f6d6d6f6e2f726164697573 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.1.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|4x|2f436f6d6d6f6e2f746163616373 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.1.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|4x|2f436f6d6d6f6e2f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.1.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|4x|2f436f6d6d6f6e2f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.1.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|4x|2f436f6d6d6f6e2f6b726264656c6567617465 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.1.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|4x|2f436f6d6d6f6e2f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.2.12.47.67.111.109.109.111.110.47.108.100.97.112|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.2.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.2.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.2.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.2.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.2.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.2.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.3.12.47.67.111.109.109.111.110.47.108.100.97.112|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.3.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.3.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.3.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.3.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.3.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.3.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.4.12.47.67.111.109.109.111.110.47.108.100.97.112|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.4.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.4.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.4.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.4.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.4.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.4.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.5.12.47.67.111.109.109.111.110.47.108.100.97.112|2|0 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.5.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.5.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|2|4 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.5.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|2|3 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.5.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|2|6 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.5.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|2|7 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.5.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|2|2 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.6.12.47.67.111.109.109.111.110.47.108.100.97.112|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.6.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.6.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.6.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.6.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.6.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.6.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.7.12.47.67.111.109.109.111.110.47.108.100.97.112|2|0 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.7.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|2|0 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.7.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|2|0 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.7.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|2|0 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.7.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.7.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|2|0 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.7.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|2|0 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.8.12.47.67.111.109.109.111.110.47.108.100.97.112|4x|2f436f6d6d6f6e2f5f7379735f617574685f6c646170 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.8.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|4x|2f436f6d6d6f6e2f5f7379735f617574685f726164697573 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.8.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|4x|2f436f6d6d6f6e2f5f7379735f617574685f746163616373 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.8.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.8.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.8.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.8.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.9.12.47.67.111.109.109.111.110.47.108.100.97.112|66|300 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.9.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|66|300 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.9.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|66|300 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.9.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|66|300 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.9.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|66|300 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.9.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|66|300 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.9.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|66|300 +1.3.6.1.4.1.3375.2.2.6.1.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.1.2.2.0|2|7 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.1.12.47.67.111.109.109.111.110.47.108.100.97.112|4x|2f436f6d6d6f6e2f6c646170 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.1.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|4x|2f436f6d6d6f6e2f726164697573 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.1.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|4x|2f436f6d6d6f6e2f746163616373 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.1.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|4x|2f436f6d6d6f6e2f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.1.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|4x|2f436f6d6d6f6e2f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.1.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|4x|2f436f6d6d6f6e2f6b726264656c6567617465 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.1.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|4x|2f436f6d6d6f6e2f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.2.12.47.67.111.109.109.111.110.47.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.2.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.2.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.2.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.2.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.2.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.2.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.3.12.47.67.111.109.109.111.110.47.108.100.97.112|66|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.3.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|66|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.3.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|66|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.3.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|66|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.3.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|66|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.3.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|66|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.3.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|66|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.4.12.47.67.111.109.109.111.110.47.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.4.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.4.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.4.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.4.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.4.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.4.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.5.12.47.67.111.109.109.111.110.47.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.5.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.5.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.5.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.5.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.5.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.5.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.6.12.47.67.111.109.109.111.110.47.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.6.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.6.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.6.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.6.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.6.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.6.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.7.12.47.67.111.109.109.111.110.47.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.7.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.7.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.7.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.7.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.7.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.7.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.8.12.47.67.111.109.109.111.110.47.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.8.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.8.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.8.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.8.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.8.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.8.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.2.1.1.0|2|6 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.1.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.1.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4x|2f436f6d6d6f6e2f636c69656e7473736c2d736563757265 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.1.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f776f6d2d64656661756c742d636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.1.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|2f436f6d6d6f6e2f636c69656e7473736c2d696e7365637572652d636f6d70617469626c65 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.1.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f73706c697473657373696f6e2d64656661756c742d636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.1.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f63727970746f2d7365727665722d64656661756c742d636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.2.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.2.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.2.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.2.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.2.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.2.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.3.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.3.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4x|2f436f6d6d6f6e2f636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.3.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.3.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|2f436f6d6d6f6e2f636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.3.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.3.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.4.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.4.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.4.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.4.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.4.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.4.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.5.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.5.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.5.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.5.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.5.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.5.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.6.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.6.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.6.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.6.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.6.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.6.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.7.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.7.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.7.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.7.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.7.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.7.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.8.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.8.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.8.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.8.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.8.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.8.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.9.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.9.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.9.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.9.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.9.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.9.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.10.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.10.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.10.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.10.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.10.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.10.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.11.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4|DEFAULT +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.11.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4x|65636468653a7273613a2173736c76333a217263343a216578703a21646573 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.11.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4|DEFAULT +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.11.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|414c4c3a2144483a214144483a214544483a405350454544 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.11.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4|DEFAULT +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.11.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|4448452d5253412d4145533235362d47434d2d534841333834 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.12.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.12.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.12.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.12.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.12.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.12.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.13.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.13.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|8192 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.13.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.13.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|34816 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.13.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.13.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.14.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.14.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.14.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.14.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.14.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.14.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.15.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|262144 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.15.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|262144 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.15.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|262144 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.15.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|262144 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.15.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|262144 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.15.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.16.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.16.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|3600 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.16.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.16.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|3600 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.16.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.16.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.17.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.17.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.17.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.17.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.17.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.17.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|21600 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.18.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.18.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.18.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.18.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.18.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.18.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.19.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.19.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.19.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.19.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.19.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.19.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.20.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.20.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.20.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.20.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.20.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.20.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.21.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.21.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.21.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.21.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.21.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.21.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.22.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.22.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.22.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.22.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.22.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.22.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.23.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.23.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.23.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.23.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.23.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.23.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.24.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.24.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|9 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.24.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.24.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|9 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.24.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.24.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.25.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.25.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.25.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.25.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.25.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.25.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.26.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.26.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.26.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.26.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.26.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.26.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.27.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.27.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.27.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.27.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.27.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.27.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.28.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.28.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.28.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.28.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.28.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.28.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.29.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.29.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.29.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.29.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.29.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.29.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.30.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.30.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.30.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.30.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.30.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.30.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.31.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.31.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.31.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.31.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.31.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.31.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.32.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.32.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.32.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.32.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.32.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.32.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.33.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|30 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.33.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|30 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.33.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|30 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.33.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|30 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.33.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|30 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.33.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|30 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.34.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|258 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.34.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|258 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.34.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|258 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.34.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|258 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.34.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|258 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.34.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|258 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.35.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.35.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.35.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.35.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.35.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.35.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.36.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.36.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.36.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.36.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.36.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.36.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.37.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.37.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.37.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.37.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.37.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.37.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.38.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.38.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.38.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.38.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.38.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.38.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.39.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.39.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.39.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.39.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.39.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.39.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.40.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.40.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.40.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.40.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.40.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.40.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.41.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.41.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.41.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.41.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.41.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.41.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.42.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.42.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.42.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.42.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.42.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.42.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.43.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.43.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.43.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.43.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.43.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.43.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.44.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.44.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.44.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.44.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.44.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.44.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.45.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.45.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.45.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.45.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.45.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.45.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.46.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.46.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.46.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.46.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.46.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.46.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.47.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.47.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.47.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.47.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.47.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.47.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.48.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|5 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.48.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|5 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.48.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|5 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.48.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|5 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.48.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|5 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.48.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|5 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.49.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.49.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.49.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.49.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.49.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.49.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.50.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.50.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.50.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.50.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.50.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.50.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.51.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.51.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.51.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.51.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.51.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.51.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.52.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.52.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.52.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.52.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.52.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.52.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.53.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.53.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.53.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.53.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.53.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.53.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.54.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.54.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.54.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.54.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.54.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.54.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.55.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|16384 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.55.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|16384 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.55.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|16384 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.55.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|16384 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.55.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|16384 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.55.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|16384 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.56.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.56.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.56.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.56.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.56.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.56.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.57.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.57.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.57.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.57.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.57.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.57.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.58.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.58.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.58.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.58.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.58.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.58.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.59.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.59.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.59.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.59.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.59.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.59.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.60.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.60.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.60.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.60.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.60.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.60.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.61.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.61.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.61.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.61.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.61.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.61.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.62.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.62.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.62.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.62.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.62.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.62.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.63.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.63.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.63.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.63.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.63.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.63.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.2.2.2.0|2|6 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.1.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.1.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4x|2f436f6d6d6f6e2f636c69656e7473736c2d736563757265 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.1.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f776f6d2d64656661756c742d636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.1.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|2f436f6d6d6f6e2f636c69656e7473736c2d696e7365637572652d636f6d70617469626c65 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.1.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f73706c697473657373696f6e2d64656661756c742d636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.1.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f63727970746f2d7365727665722d64656661756c742d636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.2.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.2.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.2.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.2.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.2.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.2.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.3.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.3.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.3.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.3.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.3.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.3.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.4.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.4.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.4.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.4.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.4.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.4.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.5.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.5.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.5.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.5.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.5.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.5.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.6.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.6.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.6.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.6.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.6.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.6.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.7.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.7.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.7.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.7.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.7.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.7.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.8.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.8.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.8.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.8.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.8.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.8.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.9.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.9.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.9.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.9.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.9.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.9.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.10.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.10.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.10.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.10.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.10.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.10.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.11.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.11.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.11.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.11.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.11.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.11.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.12.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.12.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.12.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.12.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.12.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.12.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.13.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.13.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.13.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.13.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.13.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.13.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.14.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.14.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.14.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.14.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.14.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.14.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.15.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.15.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.15.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.15.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.15.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.15.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.16.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.16.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.16.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.16.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.16.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.16.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.17.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.17.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.17.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.17.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.17.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.17.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.18.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.18.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.18.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.18.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.18.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.18.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.19.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.19.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.19.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.19.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.19.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.19.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.20.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.20.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.20.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.20.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.20.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.20.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.21.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.21.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.21.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.21.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.21.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.21.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.22.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.22.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.22.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.22.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.22.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.22.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.23.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.23.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.23.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.23.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.23.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.23.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.24.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.24.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.24.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.24.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.24.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.24.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.25.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.25.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.25.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.25.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.25.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.25.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.26.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.26.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.26.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.26.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.26.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.26.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.27.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.27.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.27.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.27.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.27.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.27.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.28.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.28.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.28.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.28.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.28.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.28.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.29.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.29.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.29.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.29.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.29.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.29.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.30.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.30.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.30.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.30.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.30.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.30.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.31.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.31.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.31.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.31.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.31.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.31.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.32.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.32.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.32.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.32.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.32.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.32.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.33.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.33.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.33.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.33.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.33.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.33.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.34.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.34.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.34.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.34.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.34.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.34.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.35.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.35.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.35.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.35.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.35.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.35.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.36.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.36.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.36.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.36.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.36.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.36.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.37.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.37.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.37.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.37.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.37.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.37.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.38.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.38.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.38.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.38.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.38.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.38.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.39.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.39.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.39.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.39.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.39.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.39.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.40.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.40.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.40.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.40.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.40.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.40.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.41.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.41.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.41.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.41.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.41.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.41.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.42.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.42.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.42.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.42.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.42.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.42.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.43.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.43.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.43.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.43.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.43.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.43.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.44.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.44.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.44.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.44.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.44.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.44.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.45.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.45.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.45.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.45.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.45.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.45.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.46.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.46.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.46.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.46.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.46.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.46.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.47.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.47.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.47.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.47.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.47.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.47.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.48.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.48.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.48.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.48.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.48.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.48.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.49.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.49.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.49.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.49.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.49.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.49.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.50.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.50.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.50.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.50.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.50.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.50.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.51.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.51.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.51.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.51.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.51.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.51.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.52.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.52.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.52.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.52.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.52.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.52.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.53.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.53.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.53.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.53.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.53.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.53.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.54.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.54.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.54.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.54.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.54.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.54.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.55.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.55.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.55.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.55.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.55.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.55.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.56.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.56.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.56.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.56.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.56.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.56.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.57.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.57.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.57.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.57.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.57.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.57.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.58.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.58.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.58.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.58.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.58.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.58.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.59.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.59.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.59.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.59.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.59.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.59.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.60.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.60.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.60.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.60.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.60.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.60.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.61.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.61.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.61.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.61.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.61.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.61.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.62.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.62.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.62.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.62.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.62.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.62.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.63.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.63.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.63.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.63.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.63.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.63.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.64.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.64.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.64.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.64.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.64.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.64.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.65.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.65.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.65.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.65.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.65.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.65.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.66.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.66.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.66.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.66.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.66.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.66.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.67.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.67.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.67.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.67.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.67.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.67.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.68.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.68.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.68.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.68.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.68.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.68.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.69.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.69.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.69.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.69.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.69.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.69.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.70.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.70.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.70.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.70.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.70.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.70.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.71.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.71.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.71.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.71.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.71.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.71.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.72.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.72.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.72.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.72.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.72.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.72.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.73.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.73.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.73.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.73.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.73.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.73.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.74.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.74.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.74.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.74.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.74.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.74.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.75.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.75.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.75.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.75.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.75.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.75.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.76.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.76.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.76.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.76.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.76.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.76.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.77.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.77.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.77.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.77.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.77.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.77.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.78.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.78.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.78.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.78.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.78.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.78.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.79.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.79.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.79.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.79.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.79.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.79.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.80.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.80.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.80.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.80.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.80.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.80.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.81.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.81.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.81.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.81.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.81.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.81.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.82.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.82.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.82.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.82.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.82.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.82.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.83.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.83.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.83.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.83.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.83.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.83.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.84.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.84.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.84.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.84.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.84.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.84.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.85.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.85.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.85.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.85.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.85.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.85.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.86.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.86.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.86.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.86.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.86.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.86.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.87.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.87.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.87.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.87.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.87.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.87.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.88.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.88.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.88.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.88.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.88.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.88.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.89.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.89.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.89.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.89.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.89.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.89.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.90.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.90.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.90.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.90.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.90.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.90.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.91.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.91.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.91.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.91.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.91.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.91.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.92.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.92.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.92.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.92.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.92.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.92.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.93.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.93.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.93.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.93.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.93.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.93.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.94.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.94.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.94.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.94.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.94.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.94.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.95.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.95.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.95.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.95.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.95.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.95.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.96.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.96.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.96.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.96.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.96.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.96.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.97.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.97.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.97.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.97.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.97.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.97.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.98.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.98.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.98.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.98.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.98.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.98.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.99.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.99.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.99.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.99.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.99.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.99.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.100.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.100.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.100.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.100.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.100.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.100.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.101.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.101.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.101.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.101.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.101.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.101.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.102.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.102.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.102.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.102.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.102.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.102.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.103.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.103.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.103.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.103.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.103.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.103.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.104.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.104.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.104.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.104.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.104.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.104.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.105.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.105.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.105.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.105.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.105.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.105.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.106.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.106.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.106.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.106.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.106.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.106.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.107.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.107.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.107.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.107.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.107.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.107.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.108.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.108.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.108.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.108.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.108.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.108.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.109.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.109.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.109.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.109.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.109.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.109.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.110.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.110.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.110.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.110.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.110.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.110.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.111.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.111.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.111.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.111.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.111.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.111.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.112.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.112.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.112.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.112.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.112.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.112.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.113.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.113.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.113.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.113.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.113.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.113.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.114.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.114.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.114.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.114.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.114.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.114.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.115.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.115.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.115.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.115.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.115.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.115.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.116.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.116.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.116.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.116.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.116.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.116.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.117.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.117.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.117.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.117.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.117.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.117.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.118.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.118.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.118.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.118.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.118.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.118.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.119.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.119.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.119.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.119.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.119.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.119.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.120.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.120.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.120.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.120.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.120.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.120.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.121.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.121.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.121.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.121.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.121.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.121.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.122.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.122.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.122.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.122.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.122.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.122.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.123.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.123.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.123.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.123.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.123.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.123.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.124.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.124.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.124.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.124.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.124.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.124.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.125.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.125.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.125.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.125.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.125.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.125.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.3.1.0|2|6 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.1.7.100.101.102.97.117.108.116.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4|default +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.1.7.100.101.102.97.117.108.116.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4|default +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.1.7.100.101.102.97.117.108.116.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4|default +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.1.7.100.101.102.97.117.108.116.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4|default +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.1.7.100.101.102.97.117.108.116.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4|default +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.1.7.100.101.102.97.117.108.116.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4|default +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.2.7.100.101.102.97.117.108.116.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.2.7.100.101.102.97.117.108.116.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4x|2f436f6d6d6f6e2f636c69656e7473736c2d736563757265 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.2.7.100.101.102.97.117.108.116.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f776f6d2d64656661756c742d636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.2.7.100.101.102.97.117.108.116.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|2f436f6d6d6f6e2f636c69656e7473736c2d696e7365637572652d636f6d70617469626c65 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.2.7.100.101.102.97.117.108.116.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f73706c697473657373696f6e2d64656661756c742d636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.2.7.100.101.102.97.117.108.116.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f63727970746f2d7365727665722d64656661756c742d636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.3.7.100.101.102.97.117.108.116.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.3.7.100.101.102.97.117.108.116.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.3.7.100.101.102.97.117.108.116.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.3.7.100.101.102.97.117.108.116.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.3.7.100.101.102.97.117.108.116.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.3.7.100.101.102.97.117.108.116.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.4.7.100.101.102.97.117.108.116.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e6b6579 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.4.7.100.101.102.97.117.108.116.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4x|2f436f6d6d6f6e2f64656661756c742e6b6579 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.4.7.100.101.102.97.117.108.116.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e6b6579 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.4.7.100.101.102.97.117.108.116.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|2f436f6d6d6f6e2f64656661756c742e6b6579 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.4.7.100.101.102.97.117.108.116.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e6b6579 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.4.7.100.101.102.97.117.108.116.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e6b6579 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.5.7.100.101.102.97.117.108.116.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.5.7.100.101.102.97.117.108.116.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.5.7.100.101.102.97.117.108.116.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.5.7.100.101.102.97.117.108.116.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.5.7.100.101.102.97.117.108.116.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.5.7.100.101.102.97.117.108.116.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.6.7.100.101.102.97.117.108.116.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.6.7.100.101.102.97.117.108.116.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.6.7.100.101.102.97.117.108.116.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.6.7.100.101.102.97.117.108.116.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.6.7.100.101.102.97.117.108.116.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.6.7.100.101.102.97.117.108.116.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.1.0|2|8 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.1.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.1.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4x|2f436f6d6d6f6e2f73657276657273736c2d736563757265 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.1.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f61706d2d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.1.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f776f6d2d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.1.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f70636f69702d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.1.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|2f436f6d6d6f6e2f73657276657273736c2d696e7365637572652d636f6d70617469626c65 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.1.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f73706c697473657373696f6e2d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.1.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f63727970746f2d636c69656e742d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.2.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.2.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.2.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.2.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.2.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.2.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.2.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.2.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.3.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.3.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4x|2f436f6d6d6f6e2f73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.3.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.3.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.3.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.3.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|2f436f6d6d6f6e2f73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.3.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.3.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.4.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.4.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.4.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.4.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.4.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.4.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.4.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.4.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.5.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.5.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.5.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.5.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e6b6579 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.5.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.5.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.5.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e6b6579 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.5.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.6.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.6.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.6.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.6.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.6.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.6.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.6.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.6.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.7.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.7.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.7.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.7.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.7.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.7.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.7.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.7.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.8.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.8.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.8.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f63612d62756e646c652e637274 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.8.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.8.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.8.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.8.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.8.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.9.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.9.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.9.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.9.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.9.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.9.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.9.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.9.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.10.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4|DEFAULT +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.10.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.10.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4|DEFAULT +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.10.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4|DEFAULT +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.10.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4|DEFAULT +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.10.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|214558504f52543a2144483a5253412b5243343a5253412b4145533a5253412b4445533a5253412b334445533a45434448452b4145533a45434448452b334445533a405350454544 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.10.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4|DEFAULT +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.10.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|4448452d5253412d4145533235362d47434d2d534841333834 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.11.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.11.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.11.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.11.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.11.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.11.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.11.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.11.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.12.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.12.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|8192 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.12.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.12.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.12.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.12.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|34816 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.12.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.12.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.13.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.13.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.13.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.13.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.13.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.13.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.13.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.13.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.14.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.14.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.14.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.14.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.14.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.14.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.14.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.14.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.15.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.15.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.15.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.15.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.15.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.15.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.15.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.15.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.16.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.16.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.16.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.16.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.16.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.16.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.16.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.16.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.17.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.17.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.17.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.17.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.17.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.17.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.17.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.17.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.18.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.18.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|9 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.18.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.18.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.18.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.18.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|9 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.18.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.18.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.19.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.19.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.19.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.19.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.19.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.19.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.19.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.19.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.20.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.20.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.20.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.20.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.20.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.20.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.20.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.20.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.21.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.21.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.21.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.21.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.21.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.21.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.21.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.21.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.22.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.22.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|10 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.22.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.22.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.22.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.22.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|10 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.22.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.22.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.23.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.23.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.23.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.23.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.23.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.23.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.23.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.23.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.24.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|262144 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.24.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|262144 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.24.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|262144 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.24.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|262144 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.24.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|262144 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.24.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|262144 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.24.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|262144 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.24.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.25.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.25.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|3600 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.25.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.25.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.25.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.25.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|3600 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.25.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.25.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.26.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.26.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.26.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.26.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.26.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.26.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.26.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.26.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.27.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.27.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.27.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.27.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.27.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.27.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.27.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.27.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.28.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.28.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.28.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.28.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.28.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.28.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.28.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.28.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.29.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.29.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.29.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.29.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.29.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.29.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.29.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.29.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.30.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.30.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.30.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.30.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.30.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.30.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.30.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.30.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.31.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.31.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.31.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.31.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.31.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.31.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.31.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.31.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.32.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.32.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.32.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.32.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.32.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.32.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.32.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.32.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.33.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.33.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.33.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.33.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.33.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.33.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.33.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.33.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.34.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.34.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.34.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.34.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.34.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.34.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.34.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.34.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.35.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.35.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.35.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.35.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.35.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.35.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.35.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.35.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.36.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.36.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.36.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.36.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.36.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.36.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.36.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.36.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.37.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.37.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.37.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.37.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.37.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.37.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.37.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.37.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.38.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.38.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.38.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.38.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.38.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.38.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.38.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.38.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.39.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.39.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.39.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.39.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.39.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.39.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.39.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.39.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.40.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.40.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.40.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.40.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.40.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.40.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.40.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.40.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.41.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.41.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.41.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.41.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.41.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.41.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.41.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.41.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.42.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.42.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.42.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.42.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.42.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.42.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.42.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.42.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.43.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.43.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.43.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.43.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.43.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.43.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.43.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.43.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.44.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.44.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.44.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.44.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.44.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.44.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.44.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.44.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.45.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|24 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.45.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|24 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.45.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|24 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.45.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|24 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.45.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|24 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.45.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|24 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.45.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|24 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.45.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|24 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.46.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|402 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.46.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|402 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.46.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|402 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.46.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|402 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.46.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|402 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.46.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|402 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.46.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|402 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.46.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|402 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.47.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.47.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.47.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.47.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.47.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.47.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.47.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.47.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.3.2.2.0|2|8 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.1.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.1.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4x|2f436f6d6d6f6e2f73657276657273736c2d736563757265 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.1.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f61706d2d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.1.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f776f6d2d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.1.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f70636f69702d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.1.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|2f436f6d6d6f6e2f73657276657273736c2d696e7365637572652d636f6d70617469626c65 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.1.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f73706c697473657373696f6e2d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.1.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f63727970746f2d636c69656e742d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.2.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.2.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.2.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.2.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.2.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.2.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.2.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.2.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.3.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.3.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.3.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.3.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.3.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.3.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.3.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.3.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.4.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.4.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.4.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.4.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.4.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.4.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.4.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.4.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.5.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.5.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.5.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.5.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.5.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.5.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.5.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.5.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.6.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.6.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.6.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.6.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.6.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.6.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.6.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.6.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.7.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.7.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.7.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.7.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.7.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.7.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.7.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.7.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.8.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.8.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.8.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.8.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.8.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.8.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.8.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.8.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.9.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.9.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.9.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.9.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.9.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.9.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.9.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.9.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.10.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.10.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.10.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.10.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.10.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.10.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.10.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.10.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.11.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.11.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.11.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.11.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.11.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.11.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.11.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.11.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.12.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.12.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.12.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.12.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.12.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.12.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.12.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.12.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.13.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.13.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.13.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.13.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.13.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.13.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.13.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.13.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.14.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.14.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.14.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.14.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.14.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.14.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.14.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.14.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.15.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.15.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.15.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.15.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.15.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.15.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.15.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.15.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.16.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.16.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.16.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.16.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.16.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.16.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.16.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.16.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.17.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.17.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.17.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.17.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.17.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.17.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.17.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.17.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.18.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.18.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.18.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.18.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.18.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.18.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.18.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.18.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.19.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.19.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.19.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.19.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.19.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.19.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.19.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.19.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.20.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.20.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.20.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.20.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.20.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.20.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.20.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.20.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.21.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.21.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.21.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.21.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.21.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.21.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.21.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.21.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.22.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.22.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.22.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.22.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.22.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.22.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.22.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.22.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.23.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.23.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.23.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.23.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.23.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.23.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.23.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.23.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.24.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.24.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.24.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.24.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.24.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.24.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.24.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.24.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.25.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.25.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.25.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.25.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.25.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.25.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.25.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.25.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.26.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.26.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.26.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.26.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.26.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.26.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.26.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.26.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.27.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.27.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.27.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.27.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.27.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.27.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.27.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.27.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.28.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.28.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.28.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.28.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.28.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.28.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.28.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.28.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.29.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.29.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.29.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.29.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.29.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.29.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.29.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.29.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.30.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.30.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.30.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.30.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.30.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.30.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.30.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.30.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.31.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.31.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.31.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.31.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.31.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.31.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.31.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.31.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.32.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.32.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.32.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.32.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.32.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.32.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.32.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.32.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.33.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.33.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.33.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.33.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.33.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.33.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.33.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.33.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.34.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.34.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.34.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.34.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.34.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.34.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.34.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.34.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.35.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.35.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.35.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.35.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.35.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.35.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.35.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.35.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.36.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.36.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.36.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.36.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.36.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.36.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.36.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.36.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.37.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.37.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.37.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.37.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.37.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.37.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.37.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.37.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.38.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.38.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.38.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.38.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.38.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.38.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.38.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.38.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.39.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.39.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.39.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.39.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.39.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.39.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.39.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.39.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.40.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.40.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.40.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.40.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.40.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.40.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.40.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.40.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.41.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.41.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.41.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.41.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.41.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.41.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.41.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.41.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.42.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.42.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.42.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.42.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.42.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.42.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.42.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.42.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.43.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.43.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.43.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.43.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.43.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.43.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.43.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.43.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.44.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.44.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.44.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.44.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.44.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.44.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.44.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.44.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.45.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.45.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.45.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.45.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.45.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.45.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.45.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.45.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.46.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.46.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.46.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.46.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.46.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.46.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.46.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.46.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.47.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.47.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.47.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.47.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.47.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.47.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.47.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.47.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.48.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.48.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.48.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.48.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.48.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.48.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.48.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.48.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.49.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.49.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.49.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.49.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.49.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.49.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.49.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.49.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.50.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.50.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.50.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.50.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.50.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.50.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.50.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.50.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.51.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.51.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.51.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.51.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.51.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.51.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.51.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.51.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.52.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.52.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.52.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.52.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.52.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.52.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.52.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.52.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.53.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.53.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.53.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.53.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.53.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.53.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.53.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.53.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.54.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.54.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.54.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.54.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.54.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.54.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.54.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.54.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.55.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.55.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.55.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.55.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.55.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.55.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.55.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.55.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.56.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.56.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.56.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.56.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.56.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.56.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.56.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.56.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.57.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.57.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.57.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.57.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.57.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.57.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.57.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.57.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.58.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.58.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.58.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.58.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.58.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.58.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.58.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.58.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.59.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.59.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.59.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.59.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.59.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.59.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.59.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.59.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.60.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.60.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.60.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.60.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.60.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.60.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.60.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.60.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.61.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.61.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.61.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.61.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.61.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.61.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.61.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.61.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.62.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.62.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.62.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.62.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.62.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.62.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.62.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.62.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.63.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.63.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.63.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.63.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.63.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.63.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.63.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.63.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.64.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.64.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.64.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.64.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.64.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.64.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.64.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.64.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.65.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.65.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.65.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.65.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.65.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.65.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.65.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.65.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.66.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.66.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.66.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.66.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.66.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.66.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.66.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.66.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.67.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.67.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.67.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.67.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.67.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.67.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.67.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.67.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.68.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.68.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.68.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.68.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.68.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.68.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.68.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.68.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.69.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.69.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.69.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.69.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.69.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.69.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.69.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.69.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.70.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.70.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.70.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.70.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.70.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.70.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.70.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.70.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.71.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.71.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.71.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.71.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.71.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.71.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.71.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.71.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.72.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.72.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.72.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.72.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.72.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.72.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.72.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.72.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.73.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.73.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.73.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.73.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.73.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.73.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.73.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.73.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.74.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.74.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.74.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.74.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.74.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.74.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.74.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.74.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.75.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.75.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.75.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.75.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.75.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.75.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.75.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.75.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.76.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.76.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.76.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.76.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.76.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.76.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.76.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.76.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.77.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.77.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.77.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.77.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.77.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.77.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.77.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.77.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.78.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.78.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.78.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.78.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.78.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.78.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.78.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.78.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.79.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.79.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.79.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.79.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.79.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.79.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.79.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.79.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.80.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.80.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.80.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.80.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.80.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.80.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.80.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.80.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.81.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.81.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.81.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.81.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.81.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.81.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.81.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.81.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.82.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.82.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.82.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.82.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.82.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.82.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.82.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.82.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.83.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.83.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.83.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.83.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.83.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.83.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.83.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.83.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.84.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.84.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.84.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.84.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.84.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.84.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.84.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.84.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.85.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.85.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.85.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.85.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.85.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.85.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.85.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.85.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.86.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.86.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.86.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.86.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.86.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.86.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.86.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.86.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.87.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.87.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.87.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.87.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.87.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.87.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.87.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.87.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.88.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.88.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.88.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.88.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.88.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.88.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.88.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.88.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.89.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.89.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.89.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.89.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.89.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.89.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.89.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.89.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.90.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.90.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.90.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.90.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.90.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.90.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.90.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.90.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.91.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.91.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.91.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.91.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.91.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.91.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.91.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.91.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.92.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.92.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.92.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.92.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.92.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.92.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.92.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.92.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.93.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.93.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.93.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.93.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.93.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.93.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.93.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.93.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.94.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.94.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.94.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.94.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.94.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.94.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.94.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.94.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.4.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.4.1.2.1.1.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|4x|2f436f6d6d6f6e2f6f6e65636f6e6e656374 +1.3.6.1.4.1.3375.2.2.6.4.1.2.1.2.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|2|1 +1.3.6.1.4.1.3375.2.2.6.4.1.2.1.3.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|4| +1.3.6.1.4.1.3375.2.2.6.4.1.2.1.4.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|2|1 +1.3.6.1.4.1.3375.2.2.6.4.1.2.1.5.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|4x|00000000 +1.3.6.1.4.1.3375.2.2.6.4.1.2.1.6.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|66|10000 +1.3.6.1.4.1.3375.2.2.6.4.1.2.1.7.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|66|86400 +1.3.6.1.4.1.3375.2.2.6.4.1.2.1.8.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|66|1000 +1.3.6.1.4.1.3375.2.2.6.4.1.2.1.9.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|66|0 +1.3.6.1.4.1.3375.2.2.6.4.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.4.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.4.2.3.1.1.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|4x|2f436f6d6d6f6e2f6f6e65636f6e6e656374 +1.3.6.1.4.1.3375.2.2.6.4.2.3.1.2.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|66|0 +1.3.6.1.4.1.3375.2.2.6.4.2.3.1.3.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|66|0 +1.3.6.1.4.1.3375.2.2.6.4.2.3.1.4.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|66|0 +1.3.6.1.4.1.3375.2.2.6.4.2.3.1.5.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|66|0 +1.3.6.1.4.1.3375.2.2.6.5.1.1.0|2|3 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.1.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|4x|2f436f6d6d6f6e2f666173744c34 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.1.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|4x|2f436f6d6d6f6e2f66756c6c2d616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.1.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|4x|2f436f6d6d6f6e2f61706d2d666f7277617264696e672d666173744c34 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.2.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|1 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.2.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.2.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|1 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.3.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|4| +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.3.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|4x|2f436f6d6d6f6e2f666173744c34 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.3.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|4x|2f436f6d6d6f6e2f666173744c34 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.4.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|1 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.4.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.4.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|1 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.5.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.5.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.5.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.6.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|66|300 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.6.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|66|300 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.6.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|66|7200 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.7.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|66|5 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.7.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|66|5 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.7.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|66|5 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.8.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|66|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.8.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.8.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|66|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.9.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.9.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.9.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.10.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.10.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.10.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.11.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.11.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.11.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.12.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.12.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.12.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.13.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.13.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.13.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.14.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.14.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.14.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.15.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.15.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.15.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.16.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.16.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.16.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.17.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.17.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.17.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.18.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.18.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.18.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.19.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.19.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.19.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.20.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|66|5 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.20.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|66|5 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.20.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|66|5 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.21.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.21.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.21.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.22.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.22.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.22.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.23.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.23.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.23.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.24.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.24.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.24.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.25.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.25.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.25.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.26.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.26.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.26.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.27.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|66|30 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.27.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|66|30 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.27.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|66|30 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.28.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.28.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.28.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.5.2.2.0|2|3 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.1.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|4x|2f436f6d6d6f6e2f666173744c34 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.1.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|4x|2f436f6d6d6f6e2f66756c6c2d616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.1.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|4x|2f436f6d6d6f6e2f61706d2d666f7277617264696e672d666173744c34 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.2.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|66|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.2.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.2.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|66|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.3.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.3.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.3.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.4.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.4.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.4.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.5.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.5.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.5.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.6.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.6.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.6.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.7.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.7.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.7.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.8.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.8.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.8.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.9.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.9.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.9.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.10.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.10.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.10.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.11.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.11.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.11.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.12.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.12.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.12.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.13.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.13.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.13.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.14.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.14.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.14.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.15.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.15.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.15.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.16.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.16.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.16.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.6.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.6.1.2.1.1.11.47.67.111.109.109.111.110.47.102.116.112|4x|2f436f6d6d6f6e2f667470 +1.3.6.1.4.1.3375.2.2.6.6.1.2.1.2.11.47.67.111.109.109.111.110.47.102.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.6.1.2.1.3.11.47.67.111.109.109.111.110.47.102.116.112|4| +1.3.6.1.4.1.3375.2.2.6.6.1.2.1.4.11.47.67.111.109.109.111.110.47.102.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.6.1.2.1.5.11.47.67.111.109.109.111.110.47.102.116.112|66|20 +1.3.6.1.4.1.3375.2.2.6.6.1.2.1.6.11.47.67.111.109.109.111.110.47.102.116.112|4| +1.3.6.1.4.1.3375.2.2.6.6.1.2.1.7.11.47.67.111.109.109.111.110.47.102.116.112|4| +1.3.6.1.4.1.3375.2.2.6.6.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.6.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.1.11.47.67.111.109.109.111.110.47.102.116.112|4x|2f436f6d6d6f6e2f667470 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.2.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.3.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.4.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.5.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.6.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.7.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.8.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.9.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.10.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.11.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.1.1.0|2|3 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.4.12.47.67.111.109.109.111.110.47.104.116.116.112|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.4.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.4.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.5.12.47.67.111.109.109.111.110.47.104.116.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.5.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.5.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.6.12.47.67.111.109.109.111.110.47.104.116.116.112|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.6.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.6.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.7.12.47.67.111.109.109.111.110.47.104.116.116.112|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.7.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.7.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.8.12.47.67.111.109.109.111.110.47.104.116.116.112|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.8.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.8.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.9.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.9.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.9.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.10.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.10.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.10.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.11.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.11.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.11.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.12.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.12.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.12.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.13.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.13.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.13.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.14.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.14.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.14.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.15.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.15.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.15.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.16.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.16.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.16.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.17.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.17.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.17.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.18.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.18.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.18.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.19.12.47.67.111.109.109.111.110.47.104.116.116.112|2|4 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.19.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|4 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.19.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|4 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.20.12.47.67.111.109.109.111.110.47.104.116.116.112|2|4 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.20.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|4 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.20.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|4 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.21.12.47.67.111.109.109.111.110.47.104.116.116.112|66|80 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.21.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|80 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.21.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|80 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.22.12.47.67.111.109.109.111.110.47.104.116.116.112|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.22.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.22.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.23.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.23.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.23.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.24.12.47.67.111.109.109.111.110.47.104.116.116.112|66|32768 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.24.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|32768 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.24.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|16384 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.25.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.25.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.25.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.26.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.26.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.26.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.27.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.27.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.27.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.28.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.28.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.28.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.29.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.29.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.29.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.30.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.30.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.30.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.31.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.31.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.31.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.32.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.32.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.32.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.33.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.33.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.33.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.34.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.34.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.34.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.35.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.35.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.35.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.36.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.36.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.36.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.37.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.37.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.37.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.38.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.38.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.38.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.39.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.39.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.39.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.40.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.40.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.40.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.41.12.47.67.111.109.109.111.110.47.104.116.116.112|4|BigIP +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.41.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4|BigIP +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.41.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4|BigIP +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.42.12.47.67.111.109.109.111.110.47.104.116.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.42.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.42.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.43.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.43.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.43.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.44.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.44.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.44.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.45.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.45.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.45.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.46.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.46.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.46.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.47.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.47.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.47.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.48.12.47.67.111.109.109.111.110.47.104.116.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.48.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.48.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.49.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.49.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.49.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.50.12.47.67.111.109.109.111.110.47.104.116.116.112|66|16070400 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.50.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|16070400 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.50.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|16070400 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.51.12.47.67.111.109.109.111.110.47.104.116.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.51.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.51.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.52.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.52.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.52.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.53.12.47.67.111.109.109.111.110.47.104.116.116.112|4x|32303020323036 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.53.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4x|32303020323036 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.53.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4x|32303020323036 +1.3.6.1.4.1.3375.2.2.6.7.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.6.2.0|2|3 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.4.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.4.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.4.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.5.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.5.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.5.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.6.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.6.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.6.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.7.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.7.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.7.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.8.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.8.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.8.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.9.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.9.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.9.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.10.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.10.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.10.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.11.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.11.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.11.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.12.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.12.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.12.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.13.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.13.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.13.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.14.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.14.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.14.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.15.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.15.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.15.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.16.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.16.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.16.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.17.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.17.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.17.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.18.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.18.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.18.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.19.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.19.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.19.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.20.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.20.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.20.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.21.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.21.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.21.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.22.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.22.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.22.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.23.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.23.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.23.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.24.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.24.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.24.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.25.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.25.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.25.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.26.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.26.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.26.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.27.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.27.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.27.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.28.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.28.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.28.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.29.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.29.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.29.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.30.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.30.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.30.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.31.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.31.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.31.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.32.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.32.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.32.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.33.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.33.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.33.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.34.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.34.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.34.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.35.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.35.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.35.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.36.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.36.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.36.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.37.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.37.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.37.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.38.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.38.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.38.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.39.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.39.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.39.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.40.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.40.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.40.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.41.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.41.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.41.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.42.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.42.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.42.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.43.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.43.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.43.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.44.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.44.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.44.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.45.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.45.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.45.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.46.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.46.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.46.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.47.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.47.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.47.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.48.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.48.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.48.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.49.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.49.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.49.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.50.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.50.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.50.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.51.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.51.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.51.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.52.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.52.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.52.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.53.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.53.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.53.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.54.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.54.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.54.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.55.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.55.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.55.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.56.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.56.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.56.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.57.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.57.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.57.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.58.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.58.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.58.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.59.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.59.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.59.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.60.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.60.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.60.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.61.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.61.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.61.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.62.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.62.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.62.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.63.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.63.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.63.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.64.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.64.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.64.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.7.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.8.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.9.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.10.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.11.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.12.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.13.1.0|2|33 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.1|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.2|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.3|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.4|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.5|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.6|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.7|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.8|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.9|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.10|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.11|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.1|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.2|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.3|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.4|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.5|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.6|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.7|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.8|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.9|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.10|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.11|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.1|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.2|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.3|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.4|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.5|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.6|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.7|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.8|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.9|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.10|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.11|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.1|2|1 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.2|2|2 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.3|2|3 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.4|2|4 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.5|2|5 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.6|2|6 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.7|2|7 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.8|2|8 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.9|2|9 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.10|2|10 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.11|2|11 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.1|2|1 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.2|2|2 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.3|2|3 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.4|2|4 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.5|2|5 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.6|2|6 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.7|2|7 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.8|2|8 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.9|2|9 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.10|2|10 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.11|2|11 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.1|2|1 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.2|2|2 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.3|2|3 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.4|2|4 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.5|2|5 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.6|2|6 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.7|2|7 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.8|2|8 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.9|2|9 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.10|2|10 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.11|2|11 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.1|4|CONNECT +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.2|4|DELETE +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.3|4|GET +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.4|4|HEAD +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.5|4|LOCK +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.6|4|OPTIONS +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.7|4|POST +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.8|4|PROPFIND +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.9|4|PUT +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.10|4|TRACE +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.11|4|UNLOCK +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.1|4|CONNECT +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.2|4|DELETE +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.3|4|GET +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.4|4|HEAD +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.5|4|LOCK +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.6|4|OPTIONS +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.7|4|POST +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.8|4|PROPFIND +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.9|4|PUT +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.10|4|TRACE +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.11|4|UNLOCK +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.1|4|CONNECT +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.2|4|DELETE +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.3|4|GET +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.4|4|HEAD +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.5|4|LOCK +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.6|4|OPTIONS +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.7|4|POST +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.8|4|PROPFIND +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.9|4|PUT +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.10|4|TRACE +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.11|4|UNLOCK +1.3.6.1.4.1.3375.2.2.6.8.1.1.0|2|9 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.1.11.47.67.111.109.109.111.110.47.115.115.108|4x|2f436f6d6d6f6e2f73736c +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.1.12.47.67.111.109.109.111.110.47.104.97.115.104|4x|2f436f6d6d6f6e2f68617368 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.1.12.47.67.111.109.109.111.110.47.104.111.115.116|4x|2f436f6d6d6f6e2f686f7374 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.1.13.47.67.111.109.109.111.110.47.109.115.114.100.112|4x|2f436f6d6d6f6e2f6d73726470 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.1.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|4x|2f436f6d6d6f6e2f636f6f6b6965 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.1.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|4x|2f436f6d6d6f6e2f7369705f696e666f +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.1.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|4x|2f436f6d6d6f6e2f646573745f61646472 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.1.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|4x|2f436f6d6d6f6e2f756e6976657273616c +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.1.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|4x|2f436f6d6d6f6e2f736f757263655f61646472 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.2.11.47.67.111.109.109.111.110.47.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.2.12.47.67.111.109.109.111.110.47.104.97.115.104|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.2.12.47.67.111.109.109.111.110.47.104.111.115.116|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.2.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.2.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.2.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.2.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.2.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.2.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.3.11.47.67.111.109.109.111.110.47.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.3.12.47.67.111.109.109.111.110.47.104.97.115.104|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.3.12.47.67.111.109.109.111.110.47.104.111.115.116|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.3.13.47.67.111.109.109.111.110.47.109.115.114.100.112|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.3.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.3.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.3.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.3.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.3.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.4.11.47.67.111.109.109.111.110.47.115.115.108|2|5 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.4.12.47.67.111.109.109.111.110.47.104.97.115.104|2|8 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.4.12.47.67.111.109.109.111.110.47.104.111.115.116|2|9 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.4.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|4 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.4.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|3 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.4.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|6 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.4.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.4.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|7 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.4.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.5.11.47.67.111.109.109.111.110.47.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.5.12.47.67.111.109.109.111.110.47.104.97.115.104|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.5.12.47.67.111.109.109.111.110.47.104.111.115.116|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.5.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.5.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.5.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.5.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.5.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.5.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.6.11.47.67.111.109.109.111.110.47.115.115.108|66|300 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.6.12.47.67.111.109.109.111.110.47.104.97.115.104|66|180 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.6.12.47.67.111.109.109.111.110.47.104.111.115.116|66|180 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.6.13.47.67.111.109.109.111.110.47.109.115.114.100.112|66|300 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.6.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|66|180 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.6.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|66|180 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.6.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|66|180 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.6.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|66|180 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.6.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|66|180 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.7.11.47.67.111.109.109.111.110.47.115.115.108|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.7.12.47.67.111.109.109.111.110.47.104.97.115.104|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.7.12.47.67.111.109.109.111.110.47.104.111.115.116|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.7.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.7.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.7.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.7.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.7.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.7.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.8.11.47.67.111.109.109.111.110.47.115.115.108|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.8.12.47.67.111.109.109.111.110.47.104.97.115.104|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.8.12.47.67.111.109.109.111.110.47.104.111.115.116|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.8.13.47.67.111.109.109.111.110.47.109.115.114.100.112|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.8.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.8.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.8.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.8.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.8.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.9.11.47.67.111.109.109.111.110.47.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.9.12.47.67.111.109.109.111.110.47.104.97.115.104|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.9.12.47.67.111.109.109.111.110.47.104.111.115.116|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.9.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.9.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.9.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.9.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.9.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.9.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.10.11.47.67.111.109.109.111.110.47.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.10.12.47.67.111.109.109.111.110.47.104.97.115.104|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.10.12.47.67.111.109.109.111.110.47.104.111.115.116|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.10.13.47.67.111.109.109.111.110.47.109.115.114.100.112|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.10.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.10.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.10.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.10.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.10.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.11.11.47.67.111.109.109.111.110.47.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.11.12.47.67.111.109.109.111.110.47.104.97.115.104|66|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.11.12.47.67.111.109.109.111.110.47.104.111.115.116|66|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.11.13.47.67.111.109.109.111.110.47.109.115.114.100.112|66|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.11.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|66|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.11.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|66|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.11.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|66|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.11.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|66|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.11.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|66|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.12.11.47.67.111.109.109.111.110.47.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.12.12.47.67.111.109.109.111.110.47.104.97.115.104|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.12.12.47.67.111.109.109.111.110.47.104.111.115.116|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.12.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.12.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.12.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.12.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.12.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.12.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.13.11.47.67.111.109.109.111.110.47.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.13.12.47.67.111.109.109.111.110.47.104.97.115.104|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.13.12.47.67.111.109.109.111.110.47.104.111.115.116|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.13.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.13.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.13.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.13.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.13.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.13.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.14.11.47.67.111.109.109.111.110.47.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.14.12.47.67.111.109.109.111.110.47.104.97.115.104|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.14.12.47.67.111.109.109.111.110.47.104.111.115.116|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.14.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.14.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.14.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.14.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.14.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.14.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.15.11.47.67.111.109.109.111.110.47.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.15.12.47.67.111.109.109.111.110.47.104.97.115.104|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.15.12.47.67.111.109.109.111.110.47.104.111.115.116|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.15.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.15.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.15.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.15.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.15.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.15.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.16.11.47.67.111.109.109.111.110.47.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.16.12.47.67.111.109.109.111.110.47.104.97.115.104|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.16.12.47.67.111.109.109.111.110.47.104.111.115.116|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.16.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.16.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.16.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.16.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.16.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.16.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.17.11.47.67.111.109.109.111.110.47.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.17.12.47.67.111.109.109.111.110.47.104.97.115.104|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.17.12.47.67.111.109.109.111.110.47.104.111.115.116|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.17.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.17.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.17.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.17.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.17.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.17.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.18.11.47.67.111.109.109.111.110.47.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.18.12.47.67.111.109.109.111.110.47.104.97.115.104|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.18.12.47.67.111.109.109.111.110.47.104.111.115.116|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.18.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.18.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.18.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.18.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.18.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.18.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.19.11.47.67.111.109.109.111.110.47.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.19.12.47.67.111.109.109.111.110.47.104.97.115.104|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.19.12.47.67.111.109.109.111.110.47.104.111.115.116|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.19.13.47.67.111.109.109.111.110.47.109.115.114.100.112|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.19.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.19.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.19.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.19.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.19.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.20.11.47.67.111.109.109.111.110.47.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.20.12.47.67.111.109.109.111.110.47.104.97.115.104|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.20.12.47.67.111.109.109.111.110.47.104.111.115.116|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.20.13.47.67.111.109.109.111.110.47.109.115.114.100.112|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.20.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.20.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.20.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.20.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.20.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.21.11.47.67.111.109.109.111.110.47.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.21.12.47.67.111.109.109.111.110.47.104.97.115.104|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.21.12.47.67.111.109.109.111.110.47.104.111.115.116|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.21.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.21.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.21.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.21.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.21.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.21.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.22.11.47.67.111.109.109.111.110.47.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.22.12.47.67.111.109.109.111.110.47.104.97.115.104|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.22.12.47.67.111.109.109.111.110.47.104.111.115.116|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.22.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.22.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.22.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.22.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.22.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.22.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|1 +1.3.6.1.4.1.3375.2.2.6.9.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.9.1.2.1.1.14.47.67.111.109.109.111.110.47.115.116.114.101.97.109|4x|2f436f6d6d6f6e2f73747265616d +1.3.6.1.4.1.3375.2.2.6.9.1.2.1.2.14.47.67.111.109.109.111.110.47.115.116.114.101.97.109|2|1 +1.3.6.1.4.1.3375.2.2.6.9.1.2.1.3.14.47.67.111.109.109.111.110.47.115.116.114.101.97.109|4| +1.3.6.1.4.1.3375.2.2.6.9.1.2.1.4.14.47.67.111.109.109.111.110.47.115.116.114.101.97.109|4| +1.3.6.1.4.1.3375.2.2.6.9.1.2.1.5.14.47.67.111.109.109.111.110.47.115.116.114.101.97.109|4| +1.3.6.1.4.1.3375.2.2.6.9.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.9.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.9.2.3.1.1.14.47.67.111.109.109.111.110.47.115.116.114.101.97.109|4x|2f436f6d6d6f6e2f73747265616d +1.3.6.1.4.1.3375.2.2.6.9.2.3.1.2.14.47.67.111.109.109.111.110.47.115.116.114.101.97.109|70|0 +1.3.6.1.4.1.3375.2.2.6.10.1.1.0|2|17 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.11.47.67.111.109.109.111.110.47.116.99.112|4x|2f436f6d6d6f6e2f746370 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|4x|2f436f6d6d6f6e2f66352d7463702d6c616e +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|4x|2f436f6d6d6f6e2f66352d7463702d77616e +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|4x|2f436f6d6d6f6e2f7463702d6c6567616379 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|4x|2f436f6d6d6f6e2f66352d7463702d6d6f62696c65 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6c616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d77616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|4x|2f436f6d6d6f6e2f66352d7463702d70726f6772657373697665 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6d6f62696c652d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f77616d2d7463702d6c616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f77616d2d7463702d77616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f776f6d2d7463702d6c616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f776f6d2d7463702d77616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f6d707463702d6d6f62696c652d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|4x|2f436f6d6d6f6e2f73706c697473657373696f6e2d64656661756c742d746370 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|4x|2f436f6d6d6f6e2f61706d2d666f7277617264696e672d636c69656e742d746370 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|4x|2f436f6d6d6f6e2f61706d2d666f7277617264696e672d7365727665722d746370 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.11.47.67.111.109.109.111.110.47.116.99.112|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|4x|2f436f6d6d6f6e2f746370 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|4x|2f436f6d6d6f6e2f746370 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|4x|2f436f6d6d6f6e2f746370 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|4x|2f436f6d6d6f6e2f746370 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6c6567616379 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6c6567616379 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|4x|2f436f6d6d6f6e2f746370 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6c6567616379 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6c616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d77616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6c616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d77616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6c6567616379 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|4x|2f436f6d6d6f6e2f7463702d77616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|4x|2f436f6d6d6f6e2f7463702d6c6567616379 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|4x|2f436f6d6d6f6e2f7463702d6c6567616379 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.11.47.67.111.109.109.111.110.47.116.99.112|66|32768 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|32768 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|196608 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|32768 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|196608 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|98304 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|196608 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|98304 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|98304 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|32768 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|32768 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.11.47.67.111.109.109.111.110.47.116.99.112|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|262144 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|49152 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|262144 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|262144 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|196608 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|196608 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|196608 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|49152 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|49152 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.11.47.67.111.109.109.111.110.47.116.99.112|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.11.47.67.111.109.109.111.110.47.116.99.112|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.11.47.67.111.109.109.111.110.47.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.11.47.67.111.109.109.111.110.47.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.11.47.67.111.109.109.111.110.47.116.99.112|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|262144 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|262144 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|262144 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|458752 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|458752 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|262144 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|458752 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.11.47.67.111.109.109.111.110.47.116.99.112|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|458752 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|458752 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.11.47.67.111.109.109.111.110.47.116.99.112|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|60 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|60 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.11.47.67.111.109.109.111.110.47.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.11.47.67.111.109.109.111.110.47.116.99.112|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|2 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|2 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|2 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|2 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.11.47.67.111.109.109.111.110.47.116.99.112|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.11.47.67.111.109.109.111.110.47.116.99.112|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|7 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|7 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|7 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.11.47.67.111.109.109.111.110.47.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|10000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|10000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|10000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.11.47.67.111.109.109.111.110.47.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.11.47.67.111.109.109.111.110.47.116.99.112|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|300000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|300000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|300000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.11.47.67.111.109.109.111.110.47.116.99.112|66|10 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|16 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|10 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|16 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|16 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|16 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|16 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|10 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|16 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.11.47.67.111.109.109.111.110.47.116.99.112|66|10 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|16 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|10 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|10 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|16 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|16 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.11.47.67.111.109.109.111.110.47.116.99.112|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.11.47.67.111.109.109.111.110.47.116.99.112|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|200 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|500 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.11.47.67.111.109.109.111.110.47.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.11.47.67.111.109.109.111.110.47.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.11.47.67.111.109.109.111.110.47.116.99.112|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.11.47.67.111.109.109.111.110.47.116.99.112|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.11.47.67.111.109.109.111.110.47.116.99.112|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.11.47.67.111.109.109.111.110.47.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.11.47.67.111.109.109.111.110.47.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.11.47.67.111.109.109.111.110.47.116.99.112|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.11.47.67.111.109.109.111.110.47.116.99.112|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.11.47.67.111.109.109.111.110.47.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.10.2.2.0|2|17 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.11.47.67.111.109.109.111.110.47.116.99.112|4x|2f436f6d6d6f6e2f746370 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|4x|2f436f6d6d6f6e2f66352d7463702d6c616e +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|4x|2f436f6d6d6f6e2f66352d7463702d77616e +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|4x|2f436f6d6d6f6e2f7463702d6c6567616379 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|4x|2f436f6d6d6f6e2f66352d7463702d6d6f62696c65 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6c616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d77616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|4x|2f436f6d6d6f6e2f66352d7463702d70726f6772657373697665 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6d6f62696c652d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f77616d2d7463702d6c616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f77616d2d7463702d77616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f776f6d2d7463702d6c616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f776f6d2d7463702d77616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f6d707463702d6d6f62696c652d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|4x|2f436f6d6d6f6e2f73706c697473657373696f6e2d64656661756c742d746370 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|4x|2f436f6d6d6f6e2f61706d2d666f7277617264696e672d636c69656e742d746370 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|4x|2f436f6d6d6f6e2f61706d2d666f7277617264696e672d7365727665722d746370 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.11.47.67.111.109.109.111.110.47.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.11.47.67.111.109.109.111.110.47.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.11.47.67.111.109.109.111.110.47.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.11.47.67.111.109.109.111.110.47.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.11.47.67.111.109.109.111.110.47.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.11.1.1.0|2|4 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.1.11.47.67.111.109.109.111.110.47.117.100.112|4x|2f436f6d6d6f6e2f756470 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.1.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|4x|2f436f6d6d6f6e2f7564705f67746d5f646e73 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.1.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|4x|2f436f6d6d6f6e2f7564705f70726573657276655f74746c +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.1.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|4x|2f436f6d6d6f6e2f7564705f64656372656d656e745f74746c +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.2.11.47.67.111.109.109.111.110.47.117.100.112|2|1 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.2.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|2|1 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.2.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|2|1 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.2.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|2|1 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.3.11.47.67.111.109.109.111.110.47.117.100.112|4| +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.3.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|4x|2f436f6d6d6f6e2f756470 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.3.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|4x|2f436f6d6d6f6e2f756470 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.3.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|4x|2f436f6d6d6f6e2f756470 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.4.11.47.67.111.109.109.111.110.47.117.100.112|66|60 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.4.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|66|5 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.4.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|66|60 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.4.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|66|60 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.5.11.47.67.111.109.109.111.110.47.117.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.5.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.5.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.5.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.6.11.47.67.111.109.109.111.110.47.117.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.6.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.6.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.6.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.7.11.47.67.111.109.109.111.110.47.117.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.7.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|2|1 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.7.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.7.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.8.11.47.67.111.109.109.111.110.47.117.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.8.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.8.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.8.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.9.11.47.67.111.109.109.111.110.47.117.100.112|66|655350 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.9.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|66|655350 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.9.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|66|655350 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.9.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|66|655350 +1.3.6.1.4.1.3375.2.2.6.11.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.11.2.2.0|2|4 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.1.11.47.67.111.109.109.111.110.47.117.100.112|4x|2f436f6d6d6f6e2f756470 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.1.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|4x|2f436f6d6d6f6e2f7564705f67746d5f646e73 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.1.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|4x|2f436f6d6d6f6e2f7564705f70726573657276655f74746c +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.1.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|4x|2f436f6d6d6f6e2f7564705f64656372656d656e745f74746c +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.2.11.47.67.111.109.109.111.110.47.117.100.112|66|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.2.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|66|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.2.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|66|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.2.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|66|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.3.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.3.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.3.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.3.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.4.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.4.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.4.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.4.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.5.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.5.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.5.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.5.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.6.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.6.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.6.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.6.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.7.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.7.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.7.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.7.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.8.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.8.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.8.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.8.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.9.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.9.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.9.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.9.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.10.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.10.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.10.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.10.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.11.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.11.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.11.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.11.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.12.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.12.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.12.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.12.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.13.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.13.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.13.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.13.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.12.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.1.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|4x|2f436f6d6d6f6e2f6661737468747470 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.2.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.3.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|4| +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.4.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.5.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|300 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.6.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.7.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|5 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.8.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|5 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.9.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|2048 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.10.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.11.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|4 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.12.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.13.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.14.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|32768 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.15.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.16.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.17.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.18.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|4| +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.19.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.20.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.21.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.22.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.12.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.12.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.1.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|4x|2f436f6d6d6f6e2f6661737468747470 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.2.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.3.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.4.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.5.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.6.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.7.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.8.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.9.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.10.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.11.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.12.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.13.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.14.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.15.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.16.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.17.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.18.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.19.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.20.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.21.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.22.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.23.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.24.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.13.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.13.1.2.1.1.11.47.67.111.109.109.111.110.47.120.109.108|4x|2f436f6d6d6f6e2f786d6c +1.3.6.1.4.1.3375.2.2.6.13.1.2.1.2.11.47.67.111.109.109.111.110.47.120.109.108|2|1 +1.3.6.1.4.1.3375.2.2.6.13.1.2.1.3.11.47.67.111.109.109.111.110.47.120.109.108|4| +1.3.6.1.4.1.3375.2.2.6.13.1.2.1.4.11.47.67.111.109.109.111.110.47.120.109.108|2|0 +1.3.6.1.4.1.3375.2.2.6.13.1.2.1.5.11.47.67.111.109.109.111.110.47.120.109.108|66|0 +1.3.6.1.4.1.3375.2.2.6.13.1.2.1.6.11.47.67.111.109.109.111.110.47.120.109.108|2|0 +1.3.6.1.4.1.3375.2.2.6.13.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.13.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.13.2.3.1.1.11.47.67.111.109.109.111.110.47.120.109.108|4x|2f436f6d6d6f6e2f786d6c +1.3.6.1.4.1.3375.2.2.6.13.2.3.1.2.11.47.67.111.109.109.111.110.47.120.109.108|70|0 +1.3.6.1.4.1.3375.2.2.6.13.2.3.1.3.11.47.67.111.109.109.111.110.47.120.109.108|70|0 +1.3.6.1.4.1.3375.2.2.6.13.2.3.1.4.11.47.67.111.109.109.111.110.47.120.109.108|70|0 +1.3.6.1.4.1.3375.2.2.6.13.2.3.1.5.11.47.67.111.109.109.111.110.47.120.109.108|70|0 +1.3.6.1.4.1.3375.2.2.6.13.2.3.1.6.11.47.67.111.109.109.111.110.47.120.109.108|70|0 +1.3.6.1.4.1.3375.2.2.6.13.2.3.1.7.11.47.67.111.109.109.111.110.47.120.109.108|70|0 +1.3.6.1.4.1.3375.2.2.6.13.2.3.1.8.11.47.67.111.109.109.111.110.47.120.109.108|70|0 +1.3.6.1.4.1.3375.2.2.6.13.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.13.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.14.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.1.11.47.67.111.109.109.111.110.47.100.110.115|4x|2f436f6d6d6f6e2f646e73 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.2.11.47.67.111.109.109.111.110.47.100.110.115|2|1 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.3.11.47.67.111.109.109.111.110.47.100.110.115|4| +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.4.11.47.67.111.109.109.111.110.47.100.110.115|2|1 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.5.11.47.67.111.109.109.111.110.47.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.6.11.47.67.111.109.109.111.110.47.100.110.115|2|2 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.7.11.47.67.111.109.109.111.110.47.100.110.115|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.8.11.47.67.111.109.109.111.110.47.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.9.11.47.67.111.109.109.111.110.47.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.10.11.47.67.111.109.109.111.110.47.100.110.115|2|1 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.11.11.47.67.111.109.109.111.110.47.100.110.115|2|1 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.12.11.47.67.111.109.109.111.110.47.100.110.115|2|1 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.13.11.47.67.111.109.109.111.110.47.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.14.11.47.67.111.109.109.111.110.47.100.110.115|4| +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.15.11.47.67.111.109.109.111.110.47.100.110.115|2|1 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.16.11.47.67.111.109.109.111.110.47.100.110.115|66|0 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.17.11.47.67.111.109.109.111.110.47.100.110.115|4| +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.18.11.47.67.111.109.109.111.110.47.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.19.11.47.67.111.109.109.111.110.47.100.110.115|4| +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.20.11.47.67.111.109.109.111.110.47.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.21.11.47.67.111.109.109.111.110.47.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.22.11.47.67.111.109.109.111.110.47.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.23.11.47.67.111.109.109.111.110.47.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.14.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.14.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.1.11.47.67.111.109.109.111.110.47.100.110.115|4x|2f436f6d6d6f6e2f646e73 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.2.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.3.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.4.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.5.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.6.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.7.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.8.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.9.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.10.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.11.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.12.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.13.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.14.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.15.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.16.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.17.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.18.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.19.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.20.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.21.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.22.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.23.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.24.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.25.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.26.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.27.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.28.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.29.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.30.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.31.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.32.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.33.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.34.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.35.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.36.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.37.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.38.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.39.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.40.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.41.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.42.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.43.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.44.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.45.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.46.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.47.11.47.67.111.109.109.111.110.47.100.110.115|70|1000 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.48.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.49.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.50.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.51.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.52.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.53.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.54.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.55.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.56.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.57.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.58.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.59.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.60.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.61.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.62.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.63.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.64.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.65.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.66.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.67.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.68.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.69.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.15.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.15.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.15.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.15.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.15.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.15.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.15.6.2.0|2|0 +1.3.6.1.4.1.3375.2.2.6.17.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.1.12.47.67.111.109.109.111.110.47.114.116.115.112|4x|2f436f6d6d6f6e2f72747370 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.2.12.47.67.111.109.109.111.110.47.114.116.115.112|2|1 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.3.12.47.67.111.109.109.111.110.47.114.116.115.112|4| +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.4.12.47.67.111.109.109.111.110.47.114.116.115.112|66|300 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.5.12.47.67.111.109.109.111.110.47.114.116.115.112|66|4096 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.6.12.47.67.111.109.109.111.110.47.114.116.115.112|66|32768 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.7.12.47.67.111.109.109.111.110.47.114.116.115.112|2|0 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.8.12.47.67.111.109.109.111.110.47.114.116.115.112|2|0 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.9.12.47.67.111.109.109.111.110.47.114.116.115.112|2|0 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.10.12.47.67.111.109.109.111.110.47.114.116.115.112|2|1 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.11.12.47.67.111.109.109.111.110.47.114.116.115.112|2|0 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.12.12.47.67.111.109.109.111.110.47.114.116.115.112|4| +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.13.12.47.67.111.109.109.111.110.47.114.116.115.112|66|0 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.14.12.47.67.111.109.109.111.110.47.114.116.115.112|66|0 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.15.12.47.67.111.109.109.111.110.47.114.116.115.112|4| +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.16.12.47.67.111.109.109.111.110.47.114.116.115.112|4| +1.3.6.1.4.1.3375.2.2.6.17.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.17.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.17.2.3.1.1.12.47.67.111.109.109.111.110.47.114.116.115.112|4x|2f436f6d6d6f6e2f72747370 +1.3.6.1.4.1.3375.2.2.6.17.2.3.1.2.12.47.67.111.109.109.111.110.47.114.116.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.17.2.3.1.3.12.47.67.111.109.109.111.110.47.114.116.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.17.2.3.1.4.12.47.67.111.109.109.111.110.47.114.116.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.17.2.3.1.5.12.47.67.111.109.109.111.110.47.114.116.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.1.12.47.67.111.109.109.111.110.47.115.99.116.112|4x|2f436f6d6d6f6e2f73637470 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.2.12.47.67.111.109.109.111.110.47.115.99.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.3.12.47.67.111.109.109.111.110.47.115.99.116.112|4| +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.4.12.47.67.111.109.109.111.110.47.115.99.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.5.12.47.67.111.109.109.111.110.47.115.99.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.6.12.47.67.111.109.109.111.110.47.115.99.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.7.12.47.67.111.109.109.111.110.47.115.99.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.8.12.47.67.111.109.109.111.110.47.115.99.116.112|66|1 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.9.12.47.67.111.109.109.111.110.47.115.99.116.112|66|1 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.10.12.47.67.111.109.109.111.110.47.115.99.116.112|66|65536 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.11.12.47.67.111.109.109.111.110.47.115.99.116.112|66|65535 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.12.12.47.67.111.109.109.111.110.47.115.99.116.112|66|256 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.13.12.47.67.111.109.109.111.110.47.115.99.116.112|66|256 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.14.12.47.67.111.109.109.111.110.47.115.99.116.112|66|60 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.15.12.47.67.111.109.109.111.110.47.115.99.116.112|66|8 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.16.12.47.67.111.109.109.111.110.47.115.99.116.112|66|10 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.17.12.47.67.111.109.109.111.110.47.115.99.116.112|66|4096 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.18.12.47.67.111.109.109.111.110.47.115.99.116.112|66|16384 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.19.12.47.67.111.109.109.111.110.47.115.99.116.112|66|300 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.20.12.47.67.111.109.109.111.110.47.115.99.116.112|66|30 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.21.12.47.67.111.109.109.111.110.47.115.99.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.22.12.47.67.111.109.109.111.110.47.115.99.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.23.12.47.67.111.109.109.111.110.47.115.99.116.112|4| +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.24.12.47.67.111.109.109.111.110.47.115.99.116.112|66|4 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.25.12.47.67.111.109.109.111.110.47.115.99.116.112|66|1 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.26.12.47.67.111.109.109.111.110.47.115.99.116.112|66|16 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.27.12.47.67.111.109.109.111.110.47.115.99.116.112|66|5 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.28.12.47.67.111.109.109.111.110.47.115.99.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.29.12.47.67.111.109.109.111.110.47.115.99.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.30.12.47.67.111.109.109.111.110.47.115.99.116.112|66|3000 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.31.12.47.67.111.109.109.111.110.47.115.99.116.112|66|1000 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.32.12.47.67.111.109.109.111.110.47.115.99.116.112|66|60000 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.33.12.47.67.111.109.109.111.110.47.115.99.116.112|66|200 +1.3.6.1.4.1.3375.2.2.6.18.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.18.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.1.12.47.67.111.109.109.111.110.47.115.99.116.112|4x|2f436f6d6d6f6e2f73637470 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.2.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.3.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.4.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.5.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.6.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.7.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.8.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.9.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.10.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.11.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.12.12.47.67.111.109.109.111.110.47.115.99.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.13.12.47.67.111.109.109.111.110.47.115.99.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.14.12.47.67.111.109.109.111.110.47.115.99.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.15.12.47.67.111.109.109.111.110.47.115.99.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.16.12.47.67.111.109.109.111.110.47.115.99.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.17.12.47.67.111.109.109.111.110.47.115.99.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.19.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.19.1.2.1.1.13.47.67.111.109.109.111.110.47.115.116.97.116.115|4x|2f436f6d6d6f6e2f7374617473 +1.3.6.1.4.1.3375.2.2.6.19.1.2.1.2.13.47.67.111.109.109.111.110.47.115.116.97.116.115|2|1 +1.3.6.1.4.1.3375.2.2.6.19.1.2.1.3.13.47.67.111.109.109.111.110.47.115.116.97.116.115|4| +1.3.6.1.4.1.3375.2.2.6.19.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.19.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.6.20.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.1.11.47.67.111.109.109.111.110.47.115.105.112|4x|2f436f6d6d6f6e2f736970 +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.2.11.47.67.111.109.109.111.110.47.115.105.112|2|1 +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.3.11.47.67.111.109.109.111.110.47.115.105.112|4| +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.4.11.47.67.111.109.109.111.110.47.115.105.112|66|65535 +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.5.11.47.67.111.109.109.111.110.47.115.105.112|2|1 +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.6.11.47.67.111.109.109.111.110.47.115.105.112|2|0 +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.7.11.47.67.111.109.109.111.110.47.115.105.112|2|0 +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.8.11.47.67.111.109.109.111.110.47.115.105.112|2|0 +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.9.11.47.67.111.109.109.111.110.47.115.105.112|2|0 +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.10.11.47.67.111.109.109.111.110.47.115.105.112|4| +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.11.11.47.67.111.109.109.111.110.47.115.105.112|4| +1.3.6.1.4.1.3375.2.2.6.20.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.20.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.20.2.3.1.1.11.47.67.111.109.109.111.110.47.115.105.112|4x|2f436f6d6d6f6e2f736970 +1.3.6.1.4.1.3375.2.2.6.20.2.3.1.2.11.47.67.111.109.109.111.110.47.115.105.112|70|0 +1.3.6.1.4.1.3375.2.2.6.20.2.3.1.3.11.47.67.111.109.109.111.110.47.115.105.112|70|0 +1.3.6.1.4.1.3375.2.2.6.20.2.3.1.4.11.47.67.111.109.109.111.110.47.115.105.112|70|0 +1.3.6.1.4.1.3375.2.2.6.20.2.3.1.5.11.47.67.111.109.109.111.110.47.115.105.112|70|0 +1.3.6.1.4.1.3375.2.2.6.21.1.1.0|2|4 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.1.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|4x|2f436f6d6d6f6e2f6973657373696f6e +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.1.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|4x|2f436f6d6d6f6e2f6973657373696f6e2d6d617069 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.1.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|4x|2f436f6d6d6f6e2f6973657373696f6e2d656e6372797074 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.1.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|4x|2f436f6d6d6f6e2f6973657373696f6e2d736f6674776f63 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.2.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.2.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.2.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.2.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.3.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.3.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.3.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.3.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.4.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.4.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.4.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.4.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.5.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.5.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.5.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.5.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.6.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.6.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.6.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.6.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.7.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.7.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.7.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.7.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.8.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.8.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.8.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.8.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.9.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.9.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.9.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.9.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.10.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|3 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.10.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|3 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.10.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|3 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.10.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|3 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.11.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.11.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|4| +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.11.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|4| +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.11.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|4| +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.12.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|66|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.12.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|66|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.12.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|66|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.12.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|66|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.13.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.13.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.13.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.13.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.14.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.14.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.14.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.14.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.15.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|4x|6465666c6174652c6c7a6f2c627a6970322c +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.15.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|4x|6465666c6174652c6c7a6f2c627a6970322c +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.15.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|4x|6465666c6174652c6c7a6f2c627a6970322c +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.15.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|4x|6465666c6174652c6c7a6f2c627a6970322c +1.3.6.1.4.1.3375.2.2.6.21.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.21.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.6.22.1.1.0|2|2 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.1.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|4x|2f436f6d6d6f6e2f68747470636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.1.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|4x|2f436f6d6d6f6e2f77616e2d6f7074696d697a65642d636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.2.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.2.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.3.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.3.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|4x|2f436f6d6d6f6e2f68747470636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.4.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.4.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.5.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|66|1024 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.5.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|66|1024 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.6.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|66|4096 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.6.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|66|131072 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.7.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.7.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.8.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.8.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.9.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|66|8192 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.9.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|66|16384 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.10.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|66|16384 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.10.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|66|65536 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.11.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|66|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.11.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|66|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.12.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.12.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.13.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.13.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.14.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.14.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.15.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|66|90 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.15.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|66|90 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.16.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|66|75 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.16.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|66|75 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.17.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.17.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.22.2.1.0|2|2 +1.3.6.1.4.1.3375.2.2.6.22.2.2.1.1.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110.1|4x|2f436f6d6d6f6e2f68747470636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.2.2.1.1.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110.1|4x|2f436f6d6d6f6e2f77616e2d6f7074696d697a65642d636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.2.2.1.2.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110.1|2|1 +1.3.6.1.4.1.3375.2.2.6.22.2.2.1.2.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110.1|2|1 +1.3.6.1.4.1.3375.2.2.6.22.2.2.1.3.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110.1|4x|2e2a +1.3.6.1.4.1.3375.2.2.6.22.2.2.1.3.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110.1|4x|2e2a +1.3.6.1.4.1.3375.2.2.6.22.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.22.4.1.0|2|4 +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.1.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110.1|4x|2f436f6d6d6f6e2f68747470636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.1.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110.2|4x|2f436f6d6d6f6e2f68747470636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.1.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110.1|4x|2f436f6d6d6f6e2f77616e2d6f7074696d697a65642d636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.1.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110.2|4x|2f436f6d6d6f6e2f77616e2d6f7074696d697a65642d636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.2.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110.1|2|1 +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.2.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110.2|2|2 +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.2.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110.1|2|1 +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.2.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110.2|2|2 +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.3.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110.1|4x|746578742f +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.3.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110.2|4x|6170706c69636174696f6e2f28786d6c7c782d6a61766173637269707429 +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.3.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110.1|4x|746578742f +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.3.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110.2|4x|6170706c69636174696f6e2f28786d6c7c782d6a61766173637269707429 +1.3.6.1.4.1.3375.2.2.6.22.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.22.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.22.6.2.0|2|2 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.1.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|4x|2f436f6d6d6f6e2f68747470636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.1.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|4x|2f436f6d6d6f6e2f77616e2d6f7074696d697a65642d636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.2.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.2.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.3.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.3.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.4.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.4.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.5.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.5.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.6.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.6.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.7.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.7.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.8.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.8.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.9.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.9.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.10.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.10.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.11.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.11.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.12.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.12.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.13.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.13.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.14.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.14.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.15.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.15.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.16.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.16.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.17.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.17.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.18.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.18.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.19.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.19.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.20.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.20.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.21.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.21.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.22.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.22.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.23.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.23.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.24.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.24.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.25.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.25.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.26.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.26.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.1.1.0|2|4 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.1.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|4x|2f436f6d6d6f6e2f776562616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.1.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|4x|2f436f6d6d6f6e2f6f7074696d697a65642d63616368696e67 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.1.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|4x|2f436f6d6d6f6e2f61706d2d656e64757365722d69662d6361636865 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.1.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|4x|2f436f6d6d6f6e2f6f7074696d697a65642d616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.2.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.2.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|2|1 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.2.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|2|1 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.2.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.3.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.3.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|4x|2f436f6d6d6f6e2f776562616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.3.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|4x|2f436f6d6d6f6e2f776562616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.3.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|4x|2f436f6d6d6f6e2f776562616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.4.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|66|100 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.4.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|66|10 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.4.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|66|50 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.4.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|66|6144 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.5.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|66|10000 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.5.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|66|10000 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.5.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|66|1000 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.5.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|66|10000 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.6.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|66|3600 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.6.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|66|86400 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.6.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|66|36000 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.6.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|66|3600 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.7.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|66|500 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.7.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|66|0 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.7.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|66|5 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.7.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.8.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|66|50000 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.8.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|66|2000000 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.8.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|66|12000000 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.8.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|66|67108864 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.9.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|2|2 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.9.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|2|2 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.9.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|2|2 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.9.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|2|2 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.10.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|66|9 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.10.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|66|9 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.10.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|66|9 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.10.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|66|9 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.11.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.11.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|2|1 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.11.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|2|1 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.11.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.23.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.23.3.1.0|2|4 +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.1.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110.1|4x|2f436f6d6d6f6e2f776562616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.1.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103.1|4x|2f436f6d6d6f6e2f6f7074696d697a65642d63616368696e67 +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.1.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101.1|4x|2f436f6d6d6f6e2f61706d2d656e64757365722d69662d6361636865 +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.1.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110.1|4x|2f436f6d6d6f6e2f6f7074696d697a65642d616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.2.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110.1|2|1 +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.2.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103.1|2|1 +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.2.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101.1|2|1 +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.2.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110.1|2|1 +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.3.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110.1|4x|2e2a +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.3.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103.1|4x|2e2a +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.3.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101.1|4x|2e2a +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.3.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110.1|4x|2e2a +1.3.6.1.4.1.3375.2.2.6.23.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.23.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.23.5.2.0|2|4 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.1.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|4x|2f436f6d6d6f6e2f776562616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.1.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|4x|2f436f6d6d6f6e2f6f7074696d697a65642d63616368696e67 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.1.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|4x|2f436f6d6d6f6e2f61706d2d656e64757365722d69662d6361636865 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.1.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|4x|2f436f6d6d6f6e2f6f7074696d697a65642d616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.2.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.2.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.2.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.2.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.3.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.3.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.3.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.3.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.4.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.4.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.4.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.4.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.5.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.5.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.5.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.5.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.6.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.6.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.6.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.6.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.7.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.7.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.7.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.7.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.8.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.8.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.8.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.8.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.9.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.9.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.9.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.9.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.10.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.10.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.10.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.10.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.11.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.11.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.11.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.11.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.12.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.12.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.12.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.12.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.13.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.13.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.13.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.13.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.14.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.14.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.14.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.14.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.15.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.15.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.15.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.15.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.16.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.16.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.16.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.16.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.17.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.17.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.17.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.17.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.18.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.18.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.18.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.18.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.19.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.19.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.19.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.19.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.24.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.24.1.2.1.1.11.47.67.111.109.109.111.110.47.100.111.115|4x|2f436f6d6d6f6e2f646f73 +1.3.6.1.4.1.3375.2.2.6.24.1.2.1.2.11.47.67.111.109.109.111.110.47.100.111.115|2|1 +1.3.6.1.4.1.3375.2.2.6.24.1.2.1.3.11.47.67.111.109.109.111.110.47.100.111.115|4| +1.3.6.1.4.1.3375.2.2.6.24.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.24.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.24.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.24.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.25.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.25.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.25.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.25.3.2.0|2|0 +1.3.6.1.4.1.3375.2.2.6.26.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.26.1.2.1.1.12.47.67.111.109.109.111.110.47.118.54.114.100|4x|2f436f6d6d6f6e2f76367264 +1.3.6.1.4.1.3375.2.2.6.26.1.2.1.2.12.47.67.111.109.109.111.110.47.118.54.114.100|2|1 +1.3.6.1.4.1.3375.2.2.6.26.1.2.1.3.12.47.67.111.109.109.111.110.47.118.54.114.100|4| +1.3.6.1.4.1.3375.2.2.6.26.1.2.1.4.12.47.67.111.109.109.111.110.47.118.54.114.100|2|1 +1.3.6.1.4.1.3375.2.2.6.26.1.2.1.5.12.47.67.111.109.109.111.110.47.118.54.114.100|4x|00000000 +1.3.6.1.4.1.3375.2.2.6.26.1.2.1.6.12.47.67.111.109.109.111.110.47.118.54.114.100|66|0 +1.3.6.1.4.1.3375.2.2.6.26.1.2.1.7.12.47.67.111.109.109.111.110.47.118.54.114.100|2|2 +1.3.6.1.4.1.3375.2.2.6.26.1.2.1.8.12.47.67.111.109.109.111.110.47.118.54.114.100|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.26.1.2.1.9.12.47.67.111.109.109.111.110.47.118.54.114.100|66|56 +1.3.6.1.4.1.3375.2.2.6.27.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.27.1.2.1.1.12.47.67.111.109.109.111.110.47.112.112.116.112|4x|2f436f6d6d6f6e2f70707470 +1.3.6.1.4.1.3375.2.2.6.27.1.2.1.2.12.47.67.111.109.109.111.110.47.112.112.116.112|4| +1.3.6.1.4.1.3375.2.2.6.27.1.2.1.3.12.47.67.111.109.109.111.110.47.112.112.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.27.1.2.1.4.12.47.67.111.109.109.111.110.47.112.112.116.112|4| +1.3.6.1.4.1.3375.2.2.6.27.1.2.1.5.12.47.67.111.109.109.111.110.47.112.112.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.27.1.2.1.6.12.47.67.111.109.109.111.110.47.112.112.116.112|4| +1.3.6.1.4.1.3375.2.2.6.27.1.2.1.7.12.47.67.111.109.109.111.110.47.112.112.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.27.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.27.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.1.12.47.67.111.109.109.111.110.47.112.112.116.112|4x|2f436f6d6d6f6e2f70707470 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.2.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.3.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.4.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.5.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.6.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.7.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.8.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.9.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.10.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.11.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.12.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.13.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.14.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.15.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.16.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.28.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.28.2.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.1.11.47.67.111.109.109.111.110.47.112.99.112|4x|2f436f6d6d6f6e2f706370 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.2.11.47.67.111.109.109.111.110.47.112.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.3.11.47.67.111.109.109.111.110.47.112.99.112|4| +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.4.11.47.67.111.109.109.111.110.47.112.99.112|66|5351 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.5.11.47.67.111.109.109.111.110.47.112.99.112|66|5350 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.6.11.47.67.111.109.109.111.110.47.112.99.112|66|600 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.7.11.47.67.111.109.109.111.110.47.112.99.112|66|86400 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.8.11.47.67.111.109.109.111.110.47.112.99.112|66|60 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.9.11.47.67.111.109.109.111.110.47.112.99.112|66|65535 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.10.11.47.67.111.109.109.111.110.47.112.99.112|66|1 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.11.11.47.67.111.109.109.111.110.47.112.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.12.11.47.67.111.109.109.111.110.47.112.99.112|4| +1.3.6.1.4.1.3375.2.2.6.28.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.28.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.28.4.2.0|2|0 +1.3.6.1.4.1.3375.2.2.6.29.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.1.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|4x|2f436f6d6d6f6e2f616c675f6c6f675f70726f66696c65 +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.2.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|4| +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.3.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.4.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|4| +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.5.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.6.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|2|2 +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.7.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.8.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|2|2 +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.9.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|2|2 +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.10.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.29.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.29.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.29.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.29.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.30.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.1.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|4x|2f436f6d6d6f6e2f6c736e5f6c6f675f70726f66696c65 +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.2.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|4| +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.3.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.4.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|4| +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.5.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.6.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|2|2 +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.7.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.8.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|2|2 +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.9.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|2|2 +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.10.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|2|2 +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.11.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.30.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.30.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.31.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.31.1.2.1.1.12.47.67.111.109.109.111.110.47.116.102.116.112|4x|2f436f6d6d6f6e2f74667470 +1.3.6.1.4.1.3375.2.2.6.31.1.2.1.2.12.47.67.111.109.109.111.110.47.116.102.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.31.1.2.1.3.12.47.67.111.109.109.111.110.47.116.102.116.112|4| +1.3.6.1.4.1.3375.2.2.6.31.1.2.1.4.12.47.67.111.109.109.111.110.47.116.102.116.112|66|30 +1.3.6.1.4.1.3375.2.2.6.31.1.2.1.5.12.47.67.111.109.109.111.110.47.116.102.116.112|4| +1.3.6.1.4.1.3375.2.2.6.31.1.2.1.6.12.47.67.111.109.109.111.110.47.116.102.116.112|4| +1.3.6.1.4.1.3375.2.2.6.31.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.31.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.31.2.3.1.1.12.47.67.111.109.109.111.110.47.116.102.116.112|4x|2f436f6d6d6f6e2f74667470 +1.3.6.1.4.1.3375.2.2.6.31.2.3.1.2.12.47.67.111.109.109.111.110.47.116.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.31.2.3.1.3.12.47.67.111.109.109.111.110.47.116.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.31.2.3.1.4.12.47.67.111.109.109.111.110.47.116.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.32.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.1.13.47.67.111.109.109.111.110.47.104.116.116.112.50|4x|2f436f6d6d6f6e2f6874747032 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.2.13.47.67.111.109.109.111.110.47.104.116.116.112.50|2|1 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.3.13.47.67.111.109.109.111.110.47.104.116.116.112.50|4| +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.4.13.47.67.111.109.109.111.110.47.104.116.116.112.50|2|0 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.5.13.47.67.111.109.109.111.110.47.104.116.116.112.50|4x|582d4854545032 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.6.13.47.67.111.109.109.111.110.47.104.116.116.112.50|66|10 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.7.13.47.67.111.109.109.111.110.47.104.116.116.112.50|66|300 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.8.13.47.67.111.109.109.111.110.47.104.116.116.112.50|66|32 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.9.13.47.67.111.109.109.111.110.47.104.116.116.112.50|66|2048 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.10.13.47.67.111.109.109.111.110.47.104.116.116.112.50|66|16384 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.11.13.47.67.111.109.109.111.110.47.104.116.116.112.50|66|4096 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.12.13.47.67.111.109.109.111.110.47.104.116.116.112.50|2|1 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.13.13.47.67.111.109.109.111.110.47.104.116.116.112.50|2|0 +1.3.6.1.4.1.3375.2.2.6.32.2.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.32.2.2.1.1.13.47.67.111.109.109.111.110.47.104.116.116.112.50.1|4x|2f436f6d6d6f6e2f6874747032 +1.3.6.1.4.1.3375.2.2.6.32.2.2.1.2.13.47.67.111.109.109.111.110.47.104.116.116.112.50.1|2|1 +1.3.6.1.4.1.3375.2.2.6.32.2.2.1.3.13.47.67.111.109.109.111.110.47.104.116.116.112.50.1|2|0 +1.3.6.1.4.1.3375.2.2.6.32.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.32.3.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.1.13.47.67.111.109.109.111.110.47.104.116.116.112.50|4x|2f436f6d6d6f6e2f6874747032 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.2.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.3.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.4.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.5.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.6.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.7.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.8.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.9.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.10.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.11.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.12.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.13.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.14.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.15.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.16.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.17.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.18.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.19.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.20.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.21.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.22.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.23.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.24.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.25.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.26.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.27.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.28.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.29.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.30.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.31.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.32.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.33.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.34.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.35.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.36.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.33.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.33.1.2.1.1.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|4x|2f436f6d6d6f6e2f776562736f636b6574 +1.3.6.1.4.1.3375.2.2.6.33.1.2.1.2.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|2|1 +1.3.6.1.4.1.3375.2.2.6.33.1.2.1.3.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|4| +1.3.6.1.4.1.3375.2.2.6.33.1.2.1.4.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|2|3 +1.3.6.1.4.1.3375.2.2.6.33.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.33.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.1.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|4x|2f436f6d6d6f6e2f776562736f636b6574 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.2.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.3.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.4.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.5.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.6.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.7.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.8.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.9.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.10.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.11.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.12.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.13.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.14.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.15.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.16.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.17.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.18.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.19.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.20.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.21.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.22.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.23.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.24.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.25.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.26.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.27.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.28.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.34.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.1.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|4x|2f436f6d6d6f6e2f7463702d616e616c7974696373 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.2.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|1 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.3.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|4| +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.4.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|1 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.5.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|0 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.6.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|0 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.7.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|1 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.8.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|1 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.9.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|0 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.10.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|0 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.11.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|0 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.12.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|0 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.13.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|1 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.14.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|1 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.15.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|0 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.16.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|4| +1.3.6.1.4.1.3375.2.2.6.35.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.35.1.2.1.1.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|4x|2f436f6d6d6f6e2f6970736563616c67 +1.3.6.1.4.1.3375.2.2.6.35.1.2.1.2.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|2|1 +1.3.6.1.4.1.3375.2.2.6.35.1.2.1.3.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|4| +1.3.6.1.4.1.3375.2.2.6.35.1.2.1.4.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|66|3600 +1.3.6.1.4.1.3375.2.2.6.35.1.2.1.5.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|66|5 +1.3.6.1.4.1.3375.2.2.6.35.1.2.1.6.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|66|3 +1.3.6.1.4.1.3375.2.2.6.35.1.2.1.7.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|4| +1.3.6.1.4.1.3375.2.2.6.35.1.2.1.8.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|4| +1.3.6.1.4.1.3375.2.2.6.35.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.35.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.35.2.3.1.1.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|4x|2f436f6d6d6f6e2f6970736563616c67 +1.3.6.1.4.1.3375.2.2.6.35.2.3.1.2.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|70|0 +1.3.6.1.4.1.3375.2.2.6.35.2.3.1.3.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|70|0 +1.3.6.1.4.1.3375.2.2.6.35.2.3.1.4.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|70|0 +1.3.6.1.4.1.3375.2.2.6.35.2.3.1.5.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|70|0 +1.3.6.1.4.1.3375.2.2.6.35.2.3.1.6.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|70|0 +1.3.6.1.4.1.3375.2.2.6.36.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.36.1.2.1.1.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|4x|2f436f6d6d6f6e2f73706c697473657373696f6e636c69656e74 +1.3.6.1.4.1.3375.2.2.6.36.1.2.1.2.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.36.1.2.1.3.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|4| +1.3.6.1.4.1.3375.2.2.6.36.1.2.1.4.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.36.1.2.1.5.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.36.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.36.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.36.2.3.1.1.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|4x|2f436f6d6d6f6e2f73706c697473657373696f6e636c69656e74 +1.3.6.1.4.1.3375.2.2.6.36.2.3.1.2.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.36.2.3.1.3.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.36.2.3.1.4.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.36.2.3.1.5.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.36.2.3.1.6.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.36.2.3.1.7.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.36.2.3.1.8.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.36.2.3.1.9.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.37.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.37.1.2.1.1.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|4x|2f436f6d6d6f6e2f73706c697473657373696f6e736572766572 +1.3.6.1.4.1.3375.2.2.6.37.1.2.1.2.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|2|1 +1.3.6.1.4.1.3375.2.2.6.37.1.2.1.3.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|4| +1.3.6.1.4.1.3375.2.2.6.37.1.2.1.4.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|2|0 +1.3.6.1.4.1.3375.2.2.6.37.1.2.1.5.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|66|0 +1.3.6.1.4.1.3375.2.2.6.37.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.37.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.37.2.3.1.1.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|4x|2f436f6d6d6f6e2f73706c697473657373696f6e736572766572 +1.3.6.1.4.1.3375.2.2.6.37.2.3.1.2.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.37.2.3.1.3.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.37.2.3.1.4.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.37.2.3.1.5.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.37.2.3.1.6.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.37.2.3.1.7.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.37.2.3.1.8.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.37.2.3.1.9.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.38.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.38.1.2.1.1.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|4x|2f436f6d6d6f6e2f687474702d70726f78792d636f6e6e656374 +1.3.6.1.4.1.3375.2.2.6.38.1.2.1.2.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|2|1 +1.3.6.1.4.1.3375.2.2.6.38.1.2.1.3.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|4| +1.3.6.1.4.1.3375.2.2.6.38.1.2.1.4.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|2|1 +1.3.6.1.4.1.3375.2.2.6.38.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.38.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.1.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|4x|2f436f6d6d6f6e2f687474702d70726f78792d636f6e6e656374 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.2.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|70|0 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.3.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|70|0 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.4.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|70|0 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.5.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|70|0 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.6.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|70|0 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.7.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|70|0 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.8.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|70|0 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.9.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|70|0 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.10.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|70|0 +1.3.6.1.4.1.3375.2.2.6.39.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.1.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4x|2f436f6d6d6f6e2f6469616d6574657273657373696f6e +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.2.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.3.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.4.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.5.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|10 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.6.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|1 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.7.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|1 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.8.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.9.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|5 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.10.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.11.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.12.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|1024 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.13.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|131072 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.14.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|90 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.15.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|60 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.16.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.17.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.18.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|30 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.19.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.20.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|1 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.21.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4x|53455353494f4e2d49445b305d +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.22.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|180 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.23.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.24.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.25.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.26.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.27.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.28.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.29.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.30.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|3375 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.31.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.32.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.33.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.34.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.35.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.36.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.37.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.38.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.39.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.40.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.41.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.42.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.43.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.44.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.45.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.46.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|300 +1.3.6.1.4.1.3375.2.2.6.39.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.39.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.1.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4x|2f436f6d6d6f6e2f6469616d6574657273657373696f6e +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.2.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.3.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.4.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.5.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.6.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.7.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.8.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.9.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.10.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.11.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.12.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.13.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.14.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.15.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.16.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.17.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.18.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.19.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.20.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.21.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.22.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.23.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.24.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.25.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.26.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.27.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.28.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.29.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.30.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.31.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.32.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.33.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.34.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.35.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.36.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.37.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.38.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.39.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.40.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.41.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.42.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.43.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.44.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.45.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.46.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.47.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.1.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|4x|2f436f6d6d6f6e2f6469616d65746572726f75746572 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.2.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|2|1 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.3.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|4| +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.4.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.5.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|4x|2f436f6d6d6f6e2f747261666669632d67726f75702d31 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.6.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.7.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.8.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.9.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.10.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.11.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.12.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.13.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.14.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.15.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|2|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.16.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|2|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.17.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|2|0 +1.3.6.1.4.1.3375.2.2.6.40.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.40.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.1.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|4x|2f436f6d6d6f6e2f6469616d65746572726f75746572 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.2.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|4| +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.3.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.4.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.5.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.6.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.7.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.8.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.9.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.10.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.11.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.12.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.13.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.14.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.15.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.16.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.17.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.18.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.19.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.20.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.21.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.22.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.23.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.24.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.25.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.26.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.27.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.28.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.29.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.30.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.31.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.32.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.33.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.34.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.35.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.36.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.37.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.38.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|66|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.39.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|66|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.40.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|66|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.41.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|66|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.42.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|66|0 +1.3.6.1.4.1.3375.2.2.6.41.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.41.1.2.0|2|0 +1.3.6.1.4.1.3375.2.2.6.41.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.41.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.6.42.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.42.1.2.0|2|2 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.1.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|4x|2f436f6d6d6f6e2f73697073657373696f6e +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.1.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|4x|2f436f6d6d6f6e2f73697073657373696f6e2d616c67 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.2.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|4| +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.2.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|4| +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.3.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.3.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.4.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.4.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.5.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.5.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.6.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.6.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.7.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.7.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.8.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.8.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.9.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.9.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.10.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.10.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.11.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.11.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.12.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.12.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.13.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.13.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.14.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.14.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.15.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.15.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.16.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.16.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.17.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.17.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.18.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.18.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.19.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.19.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.20.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.20.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.21.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.21.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.22.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.22.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.23.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.23.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.24.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.24.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.25.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.25.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.26.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.26.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.27.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.27.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.28.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.28.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.29.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.29.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.30.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.30.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.31.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.31.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.32.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.32.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.33.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.33.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.34.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.34.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.35.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.35.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.36.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.36.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.37.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.37.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.38.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.38.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.39.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.39.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.40.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.40.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.41.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.41.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.42.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.42.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.43.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.43.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.44.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.44.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.45.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.45.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.46.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.46.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.47.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.47.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.48.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.48.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.49.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.49.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.50.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.50.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.51.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.51.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.52.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.52.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.53.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.53.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.54.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.54.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.55.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.55.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.56.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.56.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.57.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.57.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.58.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.58.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.59.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.59.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.60.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.60.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.43.1.2.0|2|2 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.1.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|4x|2f436f6d6d6f6e2f736970726f75746572 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.1.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|4x|2f436f6d6d6f6e2f736970726f757465722d616c67 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.2.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|4| +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.2.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|4| +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.3.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.3.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.4.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.4.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.5.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.5.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.6.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.6.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.7.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.7.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.8.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.8.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.9.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.9.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.10.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.10.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.11.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.11.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.12.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.12.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.13.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.13.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.14.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.14.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.15.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.15.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.16.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.16.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.17.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.17.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.18.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.18.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.19.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.19.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.20.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.20.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.21.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.21.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.22.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.22.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.23.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.23.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.24.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.24.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.25.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.25.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.26.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.26.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.27.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.27.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.28.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.28.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.29.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.29.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.30.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.30.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.31.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.31.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.32.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.32.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.33.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.33.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.34.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.34.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.35.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.35.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.36.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.36.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.37.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.37.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.38.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.38.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.39.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.39.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.40.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.40.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.41.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.41.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.42.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.42.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.43.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.43.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.44.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.44.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|66|0 +1.3.6.1.4.1.3375.2.2.6.44.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.44.1.2.0|2|0 +1.3.6.1.4.1.3375.2.2.6.44.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.44.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.7.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.7.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.7.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.8.1.1.0|2|15 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112|4x|2f436f6d6d6f6e2f5f7379735f617574685f6c646170 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115|4x|2f436f6d6d6f6e2f5f7379735f617574685f726164697573 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115|4x|2f436f6d6d6f6e2f5f7379735f617574685f746163616373 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99|4x|2f436f6d6d6f6e2f5f7379735f41504d5f61637469766573796e63 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116|4x|2f436f6d6d6f6e2f5f7379735f68747470735f7265646972656374 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101|4x|2f436f6d6d6f6e2f5f7379735f617574685f6b726264656c6567617465 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f68656c706572 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4f66666963653336355f53414d4c5f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104|2|1 +1.3.6.1.4.1.3375.2.2.8.2.1.0|2|58 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6c646170 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6c646170 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f726164697573 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f726164697573 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f746163616373 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f746163616373 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f61637469766573796e63 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f61637469766573796e63 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f61637469766573796e63 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f61637469766573796e63 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f68747470735f7265646972656374 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6b726264656c6567617465 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6b726264656c6567617465 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6b726264656c6567617465 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f68656c706572 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f68656c706572 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4f66666963653336355f53414d4c5f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4f66666963653336355f53414d4c5f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4f66666963653336355f53414d4c5f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4f66666963653336355f53414d4c5f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|434c49454e545f4143434550544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|434c49454e5453534c5f48414e445348414b45 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|434c49454e5453534c5f434c49454e5443455254 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|4143434553535f504f4c4943595f434f4d504c45544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|434c49454e545f4143434550544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|434c49454e5453534c5f48414e445348414b45 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|434c49454e5453534c5f434c49454e5443455254 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|485454505f524553504f4e5345 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|434c49454e545f4143434550544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|434c49454e5453534c5f48414e445348414b45 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|434c49454e5453534c5f434c49454e5443455254 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|485454505f524553504f4e5345 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|4143434553535f41434c5f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|4x|485454505f524553504f4e53455f44415441 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|4143434553535f504f4c4943595f434f4d504c45544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|4x|485454505f524551554553545f44415441 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|485454505f524553504f4e5345 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|434c49454e545f4143434550544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|4143434553535f41434c5f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|485454505f524553504f4e5345 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|4143434553535f41434c5f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|4x|4543415f524551554553545f44454e494544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|4x|4543415f524551554553545f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|4x|485454505f524553504f4e53455f52454c45415345 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|4143434553535f504f4c4943595f434f4d504c45544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|4143434553535f41434c5f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|4143434553535f504f4c4943595f434f4d504c45544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.8.3.2.0|2|58 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6c646170 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6c646170 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f726164697573 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f726164697573 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f746163616373 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f746163616373 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f61637469766573796e63 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f61637469766573796e63 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f61637469766573796e63 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f61637469766573796e63 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f68747470735f7265646972656374 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6b726264656c6567617465 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6b726264656c6567617465 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6b726264656c6567617465 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f68656c706572 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f68656c706572 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4f66666963653336355f53414d4c5f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4f66666963653336355f53414d4c5f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4f66666963653336355f53414d4c5f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4f66666963653336355f53414d4c5f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|434c49454e545f4143434550544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|434c49454e5453534c5f48414e445348414b45 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|434c49454e5453534c5f434c49454e5443455254 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|4143434553535f504f4c4943595f434f4d504c45544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|434c49454e545f4143434550544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|434c49454e5453534c5f48414e445348414b45 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|434c49454e5453534c5f434c49454e5443455254 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|485454505f524553504f4e5345 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|434c49454e545f4143434550544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|434c49454e5453534c5f48414e445348414b45 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|434c49454e5453534c5f434c49454e5443455254 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|485454505f524553504f4e5345 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|4143434553535f41434c5f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|4x|485454505f524553504f4e53455f44415441 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|4143434553535f504f4c4943595f434f4d504c45544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|4x|485454505f524551554553545f44415441 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|485454505f524553504f4e5345 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|434c49454e545f4143434550544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|4143434553535f41434c5f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|485454505f524553504f4e5345 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|4143434553535f41434c5f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|4x|4543415f524551554553545f44454e494544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|4x|4543415f524551554553545f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|4x|485454505f524553504f4e53455f52454c45415345 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|4143434553535f504f4c4943595f434f4d504c45544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|4143434553535f41434c5f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|4143434553535f504f4c4943595f434f4d504c45544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|66|2 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|66|2 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|66|2 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|2 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|2 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|2 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|66|23274 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|66|73498 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|66|18894 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|10988 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|49644 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|27400 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|66|23274 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|66|73498 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|66|18894 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|10988 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|49644 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|27400 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|66|14118 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|66|41056 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|66|15918 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|3342 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|33224 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|17354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.9.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.9.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.9.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.9.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.9.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.9.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.9.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.9.6.2.0|2|0 +1.3.6.1.4.1.3375.2.2.9.7.1.0|2|0 +1.3.6.1.4.1.3375.2.2.9.8.1.0|2|0 +1.3.6.1.4.1.3375.2.2.9.8.2.0|2|0 +1.3.6.1.4.1.3375.2.2.9.9.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.1.1|2|3 +1.3.6.1.4.1.3375.2.2.10.1.2.1.1.1|4x|73657276657231 +1.3.6.1.4.1.3375.2.2.10.1.2.1.1.2|4x|73657276657232 +1.3.6.1.4.1.3375.2.2.10.1.2.1.1.3|4x|73657276657233 +1.3.6.1.4.1.3375.2.2.10.1.2.1.2.1|2|16 +1.3.6.1.4.1.3375.2.2.10.1.2.1.2.2|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.2.3|2|16 +1.3.6.1.4.1.3375.2.2.10.1.2.1.3.1|4x|4a61646564204a61646564207a6f6d62696573206b657074 +1.3.6.1.4.1.3375.2.2.10.1.2.1.3.2|4x|7468656972206163746564206b657074206275742064726976696e67206b657074207a6f6d626965732064726976696e6720627574 +1.3.6.1.4.1.3375.2.2.10.1.2.1.3.3|4x|627574206b657074204a61646564207a6f6d62696573206275742061637465642074686569722064726976696e67 +1.3.6.1.4.1.3375.2.2.10.1.2.1.4.1|2|3 +1.3.6.1.4.1.3375.2.2.10.1.2.1.4.2|2|16 +1.3.6.1.4.1.3375.2.2.10.1.2.1.4.3|2|4 +1.3.6.1.4.1.3375.2.2.10.1.2.1.5.1|4x|64726976696e67207468656972206275742064726976696e67206b657074206163746564206275742064726976696e67 +1.3.6.1.4.1.3375.2.2.10.1.2.1.5.2|4x|717561696e746c79206163746564204a61646564206b65707420627574204a61646564206163746564207a6f6d62696573 +1.3.6.1.4.1.3375.2.2.10.1.2.1.5.3|4x|62757420666f7277617264206b6570742064726976696e67204a61646564206163746564207a6f6d6269657320616374656420627574 +1.3.6.1.4.1.3375.2.2.10.1.2.1.6.1|66|38658 +1.3.6.1.4.1.3375.2.2.10.1.2.1.6.2|66|3512 +1.3.6.1.4.1.3375.2.2.10.1.2.1.6.3|66|55345 +1.3.6.1.4.1.3375.2.2.10.1.2.1.7.1|2|24 +1.3.6.1.4.1.3375.2.2.10.1.2.1.7.2|2|20 +1.3.6.1.4.1.3375.2.2.10.1.2.1.7.3|2|20 +1.3.6.1.4.1.3375.2.2.10.1.2.1.8.1|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.8.2|2|0 +1.3.6.1.4.1.3375.2.2.10.1.2.1.8.3|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.9.1|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.9.2|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.9.3|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.10.1|2|27 +1.3.6.1.4.1.3375.2.2.10.1.2.1.10.2|2|15 +1.3.6.1.4.1.3375.2.2.10.1.2.1.10.3|2|16 +1.3.6.1.4.1.3375.2.2.10.1.2.1.11.1|4|their +1.3.6.1.4.1.3375.2.2.10.1.2.1.11.2|4x|7468656972206b65707420717561696e746c79 +1.3.6.1.4.1.3375.2.2.10.1.2.1.11.3|4x|6b657074204a61646564207a6f6d62696573206f78656e207a6f6d62696573206163746564206b657074206163746564204a61646564 +1.3.6.1.4.1.3375.2.2.10.1.2.1.12.1|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.12.2|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.12.3|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.13.1|2|0 +1.3.6.1.4.1.3375.2.2.10.1.2.1.13.2|2|0 +1.3.6.1.4.1.3375.2.2.10.1.2.1.13.3|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.14.1|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.14.2|2|0 +1.3.6.1.4.1.3375.2.2.10.1.2.1.14.3|2|0 +1.3.6.1.4.1.3375.2.2.10.1.2.1.15.1|2|5 +1.3.6.1.4.1.3375.2.2.10.1.2.1.15.2|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.15.3|2|2 +1.3.6.1.4.1.3375.2.2.10.1.2.1.16.1|2|3 +1.3.6.1.4.1.3375.2.2.10.1.2.1.16.2|2|3 +1.3.6.1.4.1.3375.2.2.10.1.2.1.16.3|2|0 +1.3.6.1.4.1.3375.2.2.10.1.2.1.17.1|4x|64726976696e6720666f727761726420666f7277617264206b65707420666f727761726420627574 +1.3.6.1.4.1.3375.2.2.10.1.2.1.17.2|4x|746865697220627574207a6f6d6269657320666f72776172642064726976696e67207a6f6d62696573206f78656e +1.3.6.1.4.1.3375.2.2.10.1.2.1.17.3|4|kept +1.3.6.1.4.1.3375.2.2.10.1.2.1.18.1|4x|6275742064726976696e6720746865697220666f7277617264 +1.3.6.1.4.1.3375.2.2.10.1.2.1.18.2|4x|6f78656e206163746564 +1.3.6.1.4.1.3375.2.2.10.1.2.1.18.3|4x|717561696e746c79206163746564206f78656e206b657074 +1.3.6.1.4.1.3375.2.2.10.1.2.1.19.1|4x|746865697220616374656420627574206b65707420627574206f78656e207a6f6d62696573204a61646564207468656972 +1.3.6.1.4.1.3375.2.2.10.1.2.1.19.2|4x|6f78656e20666f7277617264207468656972 +1.3.6.1.4.1.3375.2.2.10.1.2.1.19.3|4|their +1.3.6.1.4.1.3375.2.2.10.1.2.1.20.1|4|forward +1.3.6.1.4.1.3375.2.2.10.1.2.1.20.2|4x|4a6164656420717561696e746c79206b657074 +1.3.6.1.4.1.3375.2.2.10.1.2.1.20.3|4x|4a61646564206f78656e206b657074207468656972204a61646564206b657074206b657074206f78656e +1.3.6.1.4.1.3375.2.2.10.1.2.1.21.1|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.21.2|2|2 +1.3.6.1.4.1.3375.2.2.10.1.2.1.21.3|2|2 +1.3.6.1.4.1.3375.2.2.10.1.2.1.22.1|2|2 +1.3.6.1.4.1.3375.2.2.10.1.2.1.22.2|2|3 +1.3.6.1.4.1.3375.2.2.10.1.2.1.22.3|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.23.1|2|3 +1.3.6.1.4.1.3375.2.2.10.1.2.1.23.2|2|3 +1.3.6.1.4.1.3375.2.2.10.1.2.1.23.3|2|0 +1.3.6.1.4.1.3375.2.2.10.1.2.1.24.1|2|19 +1.3.6.1.4.1.3375.2.2.10.1.2.1.24.2|2|23 +1.3.6.1.4.1.3375.2.2.10.1.2.1.24.3|2|22 +1.3.6.1.4.1.3375.2.2.10.1.2.1.25.1|4x|746865697220717561696e746c79206b657074206275742064726976696e6720616374656420666f7277617264 +1.3.6.1.4.1.3375.2.2.10.1.2.1.25.2|4x|6f78656e20666f7277617264206b65707420717561696e746c7920746865697220666f727761726420627574 +1.3.6.1.4.1.3375.2.2.10.1.2.1.25.3|4x|64726976696e67206163746564206163746564 +1.3.6.1.4.1.3375.2.2.10.1.2.1.26.1|2|5 +1.3.6.1.4.1.3375.2.2.10.1.2.1.26.2|2|22 +1.3.6.1.4.1.3375.2.2.10.1.2.1.26.3|2|17 +1.3.6.1.4.1.3375.2.2.10.1.2.1.27.1|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.27.2|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.27.3|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.28.1|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.28.2|2|2 +1.3.6.1.4.1.3375.2.2.10.1.2.1.28.3|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.29.1|4x|717561696e746c792064726976696e67204a61646564 +1.3.6.1.4.1.3375.2.2.10.1.2.1.29.2|4x|616374656420666f727761726420717561696e746c7920666f7277617264 +1.3.6.1.4.1.3375.2.2.10.1.2.1.29.3|4x|4a6164656420616374656420717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.3375.2.2.10.1.2.1.30.1|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.30.2|2|3 +1.3.6.1.4.1.3375.2.2.10.1.2.1.30.3|2|0 +1.3.6.1.4.1.3375.2.2.10.1.2.1.31.1|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.3375.2.2.10.1.2.1.31.2|4x|7a6f6d6269657320616374656420666f727761726420717561696e746c792064726976696e67206163746564204a61646564207a6f6d62696573204a61646564 +1.3.6.1.4.1.3375.2.2.10.1.2.1.31.3|4x|64726976696e67207a6f6d62696573 +1.3.6.1.4.1.3375.2.2.10.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.10.2.3.1.1.1|4x|73657276657231 +1.3.6.1.4.1.3375.2.2.10.2.3.1.1.2|4x|73657276657232 +1.3.6.1.4.1.3375.2.2.10.2.3.1.1.3|4x|73657276657233 +1.3.6.1.4.1.3375.2.2.10.2.3.1.2.1|70|2580586026032579311 +1.3.6.1.4.1.3375.2.2.10.2.3.1.2.2|70|11172384268660140173 +1.3.6.1.4.1.3375.2.2.10.2.3.1.2.3|70|2553084130791286975 +1.3.6.1.4.1.3375.2.2.10.2.3.1.3.1|70|15792062180538603785 +1.3.6.1.4.1.3375.2.2.10.2.3.1.3.2|70|15754815062660405643 +1.3.6.1.4.1.3375.2.2.10.2.3.1.3.3|70|12278313780530470535 +1.3.6.1.4.1.3375.2.2.10.2.3.1.4.1|70|5455173712922532263 +1.3.6.1.4.1.3375.2.2.10.2.3.1.4.2|70|8840963685073062340 +1.3.6.1.4.1.3375.2.2.10.2.3.1.4.3|70|5210751663333912746 +1.3.6.1.4.1.3375.2.2.10.2.3.1.5.1|70|1547624629512812205 +1.3.6.1.4.1.3375.2.2.10.2.3.1.5.2|70|5611498479154160049 +1.3.6.1.4.1.3375.2.2.10.2.3.1.5.3|70|7562156278071364496 +1.3.6.1.4.1.3375.2.2.10.2.3.1.6.1|70|11904678965118907281 +1.3.6.1.4.1.3375.2.2.10.2.3.1.6.2|70|12423310789449570600 +1.3.6.1.4.1.3375.2.2.10.2.3.1.6.3|70|9408615615154226361 +1.3.6.1.4.1.3375.2.2.10.2.3.1.7.1|70|11896327715836113592 +1.3.6.1.4.1.3375.2.2.10.2.3.1.7.2|70|10531590820499310087 +1.3.6.1.4.1.3375.2.2.10.2.3.1.7.3|70|3625339555017798429 +1.3.6.1.4.1.3375.2.2.10.2.3.1.8.1|70|6954252997748630202 +1.3.6.1.4.1.3375.2.2.10.2.3.1.8.2|70|1010745241446359894 +1.3.6.1.4.1.3375.2.2.10.2.3.1.8.3|70|13431017896535443743 +1.3.6.1.4.1.3375.2.2.10.2.3.1.9.1|70|1167353241621793737 +1.3.6.1.4.1.3375.2.2.10.2.3.1.9.2|70|12909311763102489665 +1.3.6.1.4.1.3375.2.2.10.2.3.1.9.3|70|16533040197473517198 +1.3.6.1.4.1.3375.2.2.10.2.3.1.10.1|70|10635963925216629400 +1.3.6.1.4.1.3375.2.2.10.2.3.1.10.2|70|8494103292982450244 +1.3.6.1.4.1.3375.2.2.10.2.3.1.10.3|70|8042290749796396792 +1.3.6.1.4.1.3375.2.2.10.2.3.1.11.1|70|6410999672064202998 +1.3.6.1.4.1.3375.2.2.10.2.3.1.11.2|70|3349618053620684874 +1.3.6.1.4.1.3375.2.2.10.2.3.1.11.3|70|2212534891855846905 +1.3.6.1.4.1.3375.2.2.10.2.3.1.12.1|66|3946087105 +1.3.6.1.4.1.3375.2.2.10.2.3.1.12.2|66|1436622959 +1.3.6.1.4.1.3375.2.2.10.2.3.1.12.3|66|3431368676 +1.3.6.1.4.1.3375.2.2.10.2.3.1.13.1|70|6853310783815423725 +1.3.6.1.4.1.3375.2.2.10.2.3.1.13.2|70|11831962685014470387 +1.3.6.1.4.1.3375.2.2.10.2.3.1.13.3|70|1099514653487860763 +1.3.6.1.4.1.3375.2.2.10.2.3.1.14.1|70|1563356245765348881 +1.3.6.1.4.1.3375.2.2.10.2.3.1.14.2|70|13293349144712173171 +1.3.6.1.4.1.3375.2.2.10.2.3.1.14.3|70|6796586915286827084 +1.3.6.1.4.1.3375.2.2.10.2.3.1.15.1|70|4216244675325337046 +1.3.6.1.4.1.3375.2.2.10.2.3.1.15.2|70|6760305275432328057 +1.3.6.1.4.1.3375.2.2.10.2.3.1.15.3|70|18295941540901000727 +1.3.6.1.4.1.3375.2.2.10.2.3.1.16.1|70|1856990584099225311 +1.3.6.1.4.1.3375.2.2.10.2.3.1.16.2|70|6745395210649643206 +1.3.6.1.4.1.3375.2.2.10.2.3.1.16.3|70|11905655143255909628 +1.3.6.1.4.1.3375.2.2.10.2.3.1.17.1|70|12196755595568264176 +1.3.6.1.4.1.3375.2.2.10.2.3.1.17.2|70|5457540154927269641 +1.3.6.1.4.1.3375.2.2.10.2.3.1.17.3|70|11074415824410376018 +1.3.6.1.4.1.3375.2.2.10.2.3.1.18.1|70|5898617446408699136 +1.3.6.1.4.1.3375.2.2.10.2.3.1.18.2|70|8041714224746929584 +1.3.6.1.4.1.3375.2.2.10.2.3.1.18.3|70|16182431002550700483 +1.3.6.1.4.1.3375.2.2.10.2.3.1.19.1|66|1857700894 +1.3.6.1.4.1.3375.2.2.10.2.3.1.19.2|66|2844129800 +1.3.6.1.4.1.3375.2.2.10.2.3.1.19.3|66|1038501472 +1.3.6.1.4.1.3375.2.2.10.2.3.1.20.1|70|2363576342980948065 +1.3.6.1.4.1.3375.2.2.10.2.3.1.20.2|70|11717927443651990072 +1.3.6.1.4.1.3375.2.2.10.2.3.1.20.3|70|6882134045911163708 +1.3.6.1.4.1.3375.2.2.10.2.3.1.21.1|70|13786017861635043472 +1.3.6.1.4.1.3375.2.2.10.2.3.1.21.2|70|7297620963115593822 +1.3.6.1.4.1.3375.2.2.10.2.3.1.21.3|70|1573870296780287764 +1.3.6.1.4.1.3375.2.2.10.2.3.1.22.1|70|18393328365973006250 +1.3.6.1.4.1.3375.2.2.10.2.3.1.22.2|70|17556577878145267364 +1.3.6.1.4.1.3375.2.2.10.2.3.1.22.3|70|12781457142813950719 +1.3.6.1.4.1.3375.2.2.10.2.3.1.23.1|70|17454088778896331207 +1.3.6.1.4.1.3375.2.2.10.2.3.1.23.2|70|9520194793073463464 +1.3.6.1.4.1.3375.2.2.10.2.3.1.23.3|70|6390989416270317085 +1.3.6.1.4.1.3375.2.2.10.2.3.1.24.1|70|18097926869262363750 +1.3.6.1.4.1.3375.2.2.10.2.3.1.24.2|70|10545995722585709224 +1.3.6.1.4.1.3375.2.2.10.2.3.1.24.3|70|16186099239249902953 +1.3.6.1.4.1.3375.2.2.10.2.3.1.25.1|70|9040310437613830590 +1.3.6.1.4.1.3375.2.2.10.2.3.1.25.2|70|13241652256958635623 +1.3.6.1.4.1.3375.2.2.10.2.3.1.25.3|70|15933946765037033473 +1.3.6.1.4.1.3375.2.2.10.2.3.1.26.1|66|1179249442 +1.3.6.1.4.1.3375.2.2.10.2.3.1.26.2|66|3999102161 +1.3.6.1.4.1.3375.2.2.10.2.3.1.26.3|66|3107383744 +1.3.6.1.4.1.3375.2.2.10.2.3.1.27.1|70|18051887574704858142 +1.3.6.1.4.1.3375.2.2.10.2.3.1.27.2|70|1472355937439517287 +1.3.6.1.4.1.3375.2.2.10.2.3.1.27.3|70|11519109541425045302 +1.3.6.1.4.1.3375.2.2.10.2.3.1.28.1|70|2351118743226345413 +1.3.6.1.4.1.3375.2.2.10.2.3.1.28.2|70|17339034100746590056 +1.3.6.1.4.1.3375.2.2.10.2.3.1.28.3|70|7894081204269303338 +1.3.6.1.4.1.3375.2.2.10.2.3.1.29.1|66|610210647 +1.3.6.1.4.1.3375.2.2.10.2.3.1.29.2|66|334284393 +1.3.6.1.4.1.3375.2.2.10.2.3.1.29.3|66|3223932671 +1.3.6.1.4.1.3375.2.2.10.2.3.1.30.1|70|3267903350213335055 +1.3.6.1.4.1.3375.2.2.10.2.3.1.30.2|70|8314689465581065799 +1.3.6.1.4.1.3375.2.2.10.2.3.1.30.3|70|3461167602433649282 +1.3.6.1.4.1.3375.2.2.10.2.3.1.31.1|66|1552348694 +1.3.6.1.4.1.3375.2.2.10.2.3.1.31.2|66|2791266744 +1.3.6.1.4.1.3375.2.2.10.2.3.1.31.3|66|2160004614 +1.3.6.1.4.1.3375.2.2.10.2.3.1.32.1|66|1313356533 +1.3.6.1.4.1.3375.2.2.10.2.3.1.32.2|66|161112621 +1.3.6.1.4.1.3375.2.2.10.2.3.1.32.3|66|2983257280 +1.3.6.1.4.1.3375.2.2.10.2.3.1.33.1|66|1271665 +1.3.6.1.4.1.3375.2.2.10.2.3.1.33.2|66|4279932656 +1.3.6.1.4.1.3375.2.2.10.2.3.1.33.3|66|3288475630 +1.3.6.1.4.1.3375.2.2.10.2.3.1.34.1|66|3431690411 +1.3.6.1.4.1.3375.2.2.10.2.3.1.34.2|66|3750787822 +1.3.6.1.4.1.3375.2.2.10.2.3.1.34.3|66|986384471 +1.3.6.1.4.1.3375.2.2.10.2.3.1.35.1|66|3549469545 +1.3.6.1.4.1.3375.2.2.10.2.3.1.35.2|66|2894852545 +1.3.6.1.4.1.3375.2.2.10.2.3.1.35.3|66|840685738 +1.3.6.1.4.1.3375.2.2.10.2.3.1.36.1|70|10486552149431810547 +1.3.6.1.4.1.3375.2.2.10.2.3.1.36.2|70|3711836186712418901 +1.3.6.1.4.1.3375.2.2.10.2.3.1.36.3|70|10641863315444780199 +1.3.6.1.4.1.3375.2.2.10.2.3.1.37.1|70|7376301973141724708 +1.3.6.1.4.1.3375.2.2.10.2.3.1.37.2|70|10274176580546164106 +1.3.6.1.4.1.3375.2.2.10.2.3.1.37.3|70|4564848346832334322 +1.3.6.1.4.1.3375.2.2.10.2.3.1.38.1|70|16193568503839840899 +1.3.6.1.4.1.3375.2.2.10.2.3.1.38.2|70|672041460910788479 +1.3.6.1.4.1.3375.2.2.10.2.3.1.38.3|70|705928104456245194 +1.3.6.1.4.1.3375.2.2.10.2.3.1.39.1|70|15084732081104670673 +1.3.6.1.4.1.3375.2.2.10.2.3.1.39.2|70|6864319675147449985 +1.3.6.1.4.1.3375.2.2.10.2.3.1.39.3|70|9626321255861958057 +1.3.6.1.4.1.3375.2.2.10.2.3.1.40.1|70|3426361594601433499 +1.3.6.1.4.1.3375.2.2.10.2.3.1.40.2|70|5214377143184129447 +1.3.6.1.4.1.3375.2.2.10.2.3.1.40.3|70|1517991149375241786 +1.3.6.1.4.1.3375.2.2.10.2.3.1.41.1|70|5003274961088843167 +1.3.6.1.4.1.3375.2.2.10.2.3.1.41.2|70|16215270448109783567 +1.3.6.1.4.1.3375.2.2.10.2.3.1.41.3|70|9591593966216159496 +1.3.6.1.4.1.3375.2.2.10.2.3.1.42.1|70|12185235582057905886 +1.3.6.1.4.1.3375.2.2.10.2.3.1.42.2|70|16854096751786027431 +1.3.6.1.4.1.3375.2.2.10.2.3.1.42.3|70|17691355834692394059 +1.3.6.1.4.1.3375.2.2.10.2.3.1.43.1|70|871171362435151199 +1.3.6.1.4.1.3375.2.2.10.2.3.1.43.2|70|4084164868006869894 +1.3.6.1.4.1.3375.2.2.10.2.3.1.43.3|70|5149252869214112432 +1.3.6.1.4.1.3375.2.2.10.2.3.1.44.1|70|16679303338660545854 +1.3.6.1.4.1.3375.2.2.10.2.3.1.44.2|70|18363262408418279750 +1.3.6.1.4.1.3375.2.2.10.2.3.1.44.3|70|4865543542526736536 +1.3.6.1.4.1.3375.2.2.10.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.7.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.8.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.9.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.10.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.11.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.11.2.0|2|0 +1.3.6.1.4.1.3375.2.2.10.12.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.13.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.14.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.15.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.16.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.16.2.0|2|0 +1.3.6.1.4.1.3375.2.2.10.17.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.17.2.0|2|0 +1.3.6.1.4.1.3375.2.2.11.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.11.1.2.0|2|3 +1.3.6.1.4.1.3375.2.2.11.1.3.1.1.1|2|1 +1.3.6.1.4.1.3375.2.2.11.1.3.1.1.2|2|2 +1.3.6.1.4.1.3375.2.2.11.1.3.1.1.3|2|3 +1.3.6.1.4.1.3375.2.2.11.1.3.1.2.1|4x|4e6f20666c6f7720666f756e6420666f722041434b +1.3.6.1.4.1.3375.2.2.11.1.3.1.2.2|4x|4e6f206c6f63616c206c697374656e6572 +1.3.6.1.4.1.3375.2.2.11.1.3.1.2.3|4x|544350205253542066726f6d2072656d6f74652073797374656d +1.3.6.1.4.1.3375.2.2.11.1.3.1.3.1|70|4 +1.3.6.1.4.1.3375.2.2.11.1.3.1.3.2|70|131 +1.3.6.1.4.1.3375.2.2.11.1.3.1.3.3|70|2 +1.3.6.1.4.1.3375.2.2.12.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.12.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.12.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.12.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.12.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.12.4.2.0|2|0 +1.3.6.1.4.1.3375.2.2.12.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.12.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.12.7.1.0|2|0 +1.3.6.1.4.1.3375.2.2.12.7.2.0|2|0 +1.3.6.1.4.1.3375.2.2.12.8.1.0|2|0 +1.3.6.1.4.1.3375.2.2.12.8.2.0|2|0 +1.3.6.1.4.1.3375.2.2.12.9.1.0|2|0 +1.3.6.1.4.1.3375.2.2.12.10.1.0|2|0 +1.3.6.1.4.1.3375.2.2.13.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.13.1.2.0|2|0 +1.3.6.1.4.1.3375.2.2.14.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.14.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.14.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.14.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.14.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.14.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.14.6.2.0|2|0 +1.3.6.1.4.1.3375.2.2.14.7.1.0|2|0 +1.3.6.1.4.1.3375.2.2.14.7.2.0|2|0 +1.3.6.1.4.1.3375.2.2.15.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.15.1.2.0|2|0 +1.3.6.1.4.1.3375.2.2.15.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.15.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.15.2.3.1.1.9.47.67.111.109.109.111.110.47.48|4x|2f436f6d6d6f6e2f30 +1.3.6.1.4.1.3375.2.2.15.2.3.1.2.9.47.67.111.109.109.111.110.47.48|66|0 +1.3.6.1.4.1.3375.2.2.15.2.3.1.3.9.47.67.111.109.109.111.110.47.48|70|0 +1.3.6.1.4.1.3375.2.2.15.2.3.1.4.9.47.67.111.109.109.111.110.47.48|70|479385 +1.3.6.1.4.1.3375.2.2.15.2.3.1.5.9.47.67.111.109.109.111.110.47.48|70|47074715 +1.3.6.1.4.1.3375.2.2.15.2.3.1.6.9.47.67.111.109.109.111.110.47.48|70|507385 +1.3.6.1.4.1.3375.2.2.15.2.3.1.7.9.47.67.111.109.109.111.110.47.48|70|366882150 +1.3.6.1.4.1.3375.2.2.15.2.3.1.8.9.47.67.111.109.109.111.110.47.48|70|32 +1.3.6.1.4.1.3375.2.2.15.2.3.1.9.9.47.67.111.109.109.111.110.47.48|70|59617 +1.3.6.1.4.1.3375.2.2.15.2.3.1.10.9.47.67.111.109.109.111.110.47.48|66|2 +1.3.6.1.4.1.3375.2.2.15.2.3.1.11.9.47.67.111.109.109.111.110.47.48|70|0 +1.3.6.1.4.1.3375.2.2.15.2.3.1.12.9.47.67.111.109.109.111.110.47.48|70|0 +1.3.6.1.4.1.3375.2.2.15.2.3.1.13.9.47.67.111.109.109.111.110.47.48|70|8121108 +1.3.6.1.4.1.3375.2.2.15.2.3.1.14.9.47.67.111.109.109.111.110.47.48|70|685758772 +1.3.6.1.4.1.3375.2.2.15.2.3.1.15.9.47.67.111.109.109.111.110.47.48|70|8085044 +1.3.6.1.4.1.3375.2.2.15.2.3.1.16.9.47.67.111.109.109.111.110.47.48|70|351315737 +1.3.6.1.4.1.3375.2.2.15.2.3.1.17.9.47.67.111.109.109.111.110.47.48|70|32 +1.3.6.1.4.1.3375.2.2.15.2.3.1.18.9.47.67.111.109.109.111.110.47.48|70|59617 +1.3.6.1.4.1.3375.2.2.15.2.3.1.19.9.47.67.111.109.109.111.110.47.48|66|2 +1.3.6.1.4.1.3375.2.2.15.2.3.1.20.9.47.67.111.109.109.111.110.47.48|70|0 +1.3.6.1.4.1.3375.2.2.15.2.3.1.21.9.47.67.111.109.109.111.110.47.48|70|0 +1.3.6.1.4.1.3375.2.2.16.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.16.1.2.0|2|0 +1.3.6.1.4.1.3375.2.2.16.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.17.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.18.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.18.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.18.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.18.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.18.3.2.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.2.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.3.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.4.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.5.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.6.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.7.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.8.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.9.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.10.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.11.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.12.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.13.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.14.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.15.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.16.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.17.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.18.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.19.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.20.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.21.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.22.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.23.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.24.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.25.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.26.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.27.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.28.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.29.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.30.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.31.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.32.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.33.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.34.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.35.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.36.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.37.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.38.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.39.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.40.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.41.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.42.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.43.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.44.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.45.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.46.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.47.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.48.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.49.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.50.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.51.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.52.0|4| +1.3.6.1.4.1.3375.2.3.1.1.1.53.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.54.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.55.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.56.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.57.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.58.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.59.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.60.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.61.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.62.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.63.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.2.1.0|2|1 +1.3.6.1.4.1.3375.2.3.1.1.2.2.1.1.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115.1|2|1 +1.3.6.1.4.1.3375.2.3.1.1.2.2.1.2.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115.1|2|0 +1.3.6.1.4.1.3375.2.3.1.1.2.2.1.3.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115.1|4x|2f436f6d6d6f6e2f67746d2d73657474696e6773 +1.3.6.1.4.1.3375.2.3.1.1.3.1.0|2|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.1.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.2.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.3.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.4.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.5.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.6.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.7.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.8.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.9.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.10.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|2 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.11.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.12.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.13.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.14.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.15.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|10000 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.16.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|25 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.17.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|10000 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.18.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|10000 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.19.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|1000000 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.20.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.21.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|10 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.22.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.23.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|120 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.24.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|30 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.25.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|3600 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.26.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|12 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.27.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.28.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.29.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|2400 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.30.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|604800 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.31.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|2419200 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.32.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|604800 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.33.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|3 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.34.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|64 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.35.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|3 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.36.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|20 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.37.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|33434 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.38.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.39.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.40.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|95 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.41.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|90 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.42.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|95 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.43.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.44.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.45.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.46.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.47.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.48.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.49.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.50.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.51.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.52.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|4|default +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.53.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|180 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.54.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|300 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.55.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|10 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.56.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.57.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.58.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|32 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.59.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|128 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.60.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.61.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|10 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.62.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.63.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.64.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|4x|2f436f6d6d6f6e2f67746d2d73657474696e6773 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.65.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.2.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.1.2.1.2.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.3.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.4.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.5.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.6.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.7.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.8.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.9.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.10.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.11.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.12.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.13.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.14.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.15.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.16.0|66|0 +1.3.6.1.4.1.3375.2.3.1.2.1.17.0|66|0 +1.3.6.1.4.1.3375.2.3.1.2.1.18.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.19.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.20.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.21.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.1.2.2.2.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.3.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.4.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.5.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.6.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.7.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.8.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.9.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.10.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.11.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.12.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.13.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.14.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.15.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.16.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.17.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.18.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.19.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.20.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.21.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.22.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.23.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.24.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.25.0|70|0 +1.3.6.1.4.1.3375.2.3.2.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.2.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.2.3.1.0|2|0 +1.3.6.1.4.1.3375.2.3.2.4.1.0|2|0 +1.3.6.1.4.1.3375.2.3.2.5.1.0|2|0 +1.3.6.1.4.1.3375.2.3.3.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.3.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.3.2.2.0|2|0 +1.3.6.1.4.1.3375.2.3.3.3.1.0|2|0 +1.3.6.1.4.1.3375.2.3.4.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.6.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.6.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.6.2.2.0|2|0 +1.3.6.1.4.1.3375.2.3.6.3.1.0|2|0 +1.3.6.1.4.1.3375.2.3.6.4.1.0|2|0 +1.3.6.1.4.1.3375.2.3.6.5.1.0|2|0 +1.3.6.1.4.1.3375.2.3.6.6.1.0|2|0 +1.3.6.1.4.1.3375.2.3.6.6.2.0|2|0 +1.3.6.1.4.1.3375.2.3.6.7.1.0|2|0 +1.3.6.1.4.1.3375.2.3.7.1.1.0|2|12 +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.11.47.67.111.109.109.111.110.47.65.79.76|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.11.47.67.111.109.109.111.110.47.67.78.67|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67|4x|2f436f6d6d6f6e2f5368616e67686169434e43 +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107|4x|2f436f6d6d6f6e2f4368696e614d6f62696c4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.11.47.67.111.109.109.111.110.47.65.79.76|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.11.47.67.111.109.109.111.110.47.67.78.67|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107|2|2 +1.3.6.1.4.1.3375.2.3.7.2.1.0|2|856 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.53.46.57.51.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.56.46.56.49.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.54.52.46.49.50.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.50.56.46.48.46.48.47.49.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.57.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.57.53.46.57.51.46.54.52.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.54.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.56.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.55.50.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.56.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.53.46.49.56.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.15.49.53.50.46.49.54.51.46.57.54.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.49.48.48.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.48.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.56.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.53.50.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.50.46.54.55.46.54.53.46.49.50.56.47.50.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.55.46.50.48.48.46.49.49.50.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.11.54.48.46.48.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.53.56.46.49.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.57.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.54.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.48.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.51.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.52.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.56.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.49.50.52.46.56.57.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.48.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.52.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.54.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.51.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.52.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.51.50.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.56.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.55.48.46.56.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.49.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.51.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.52.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.50.49.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.52.46.53.54.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.53.46.51.52.46.51.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.49.55.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.50.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.52.48.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.55.46.49.54.48.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.51.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.56.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.50.52.48.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.55.49.46.49.57.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.51.51.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.52.53.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.48.56.46.49.55.46.51.50.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.49.53.51.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.57.50.46.49.52.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.51.46.50.50.55.46.56.52.46.48.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.49.51.57.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.50.51.50.46.55.50.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.53.46.51.52.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.54.46.57.56.46.49.50.56.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.56.46.51.57.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.57.46.50.50.51.46.56.54.46.56.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.51.52.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.56.53.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.52.46.49.50.57.46.49.57.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.51.46.50.48.57.46.49.50.56.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.48.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.51.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.53.46.49.54.57.46.50.50.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.50.48.56.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.52.53.46.50.53.46.49.50.48.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.52.46.50.51.56.46.49.57.56.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.56.46.50.48.46.49.48.46.49.50.56.47.50.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.49.56.51.46.55.55.46.56.56.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.53.48.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.56.48.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.53.46.49.55.49.46.49.50.57.46.54.52.47.50.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.54.46.49.55.57.46.53.50.46.50.51.50.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.50.48.55.46.49.53.54.46.53.49.46.49.50.56.47.50.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.54.53.46.50.49.54.46.50.53.49.46.49.50.56.47.50.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.50.46.48.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.55.46.52.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.50.48.56.46.54.46.56.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.51.46.56.48.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.49.50.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.52.52.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.53.52.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.56.53.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.57.50.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.50.48.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.55.50.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.51.52.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.55.54.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.50.46.52.56.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.50.46.52.52.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.52.46.49.54.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.54.54.46.51.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.50.48.52.46.51.49.46.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.49.56.48.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.50.50.50.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.50.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.57.46.48.47.50.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.51.50.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.53.54.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.49.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.52.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.56.56.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.57.54.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.48.52.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.50.56.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.51.50.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.56.52.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.50.55.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.51.54.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.53.49.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.54.56.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.57.48.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.48.53.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.50.56.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.52.50.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.49.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.54.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.50.52.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.48.52.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.51.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.53.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.50.48.48.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.52.46.49.57.50.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.48.46.51.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.49.46.56.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.51.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.53.46.49.56.55.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.54.46.50.49.54.46.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.49.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.48.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.49.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.50.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.51.48.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.51.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.51.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.54.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.51.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.56.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.48.46.49.50.50.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.51.48.46.50.54.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.49.48.46.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.55.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.49.54.46.50.52.52.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.51.46.49.54.57.46.56.56.46.48.47.50.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.49.53.46.56.56.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.49.55.46.57.54.47.50.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.56.46.49.50.56.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.56.46.50.49.49.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.57.46.49.56.50.46.56.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.50.53.48.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.50.56.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.57.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.49.50.56.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.51.46.49.54.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.53.56.46.49.53.50.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.53.46.49.56.55.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.52.46.57.54.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.53.46.49.54.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.54.46.57.54.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.55.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.48.46.54.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.51.46.56.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.53.50.46.50.52.55.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.50.46.50.48.56.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.51.46.49.49.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.50.56.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.54.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.50.48.56.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.49.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.52.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.49.46.50.50.56.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.57.51.46.56.48.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.57.46.49.49.48.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.49.54.46.49.55.53.46.54.52.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.52.46.54.52.46.49.51.56.46.49.50.56.47.50.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.49.55.53.46.49.51.54.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.57.54.46.50.50.55.46.51.50.47.50.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.53.46.50.52.50.46.49.57.46.49.54.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.56.46.50.49.49.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.50.46.49.52.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.51.46.49.52.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.49.49.57.46.49.54.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.50.53.48.46.49.50.56.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.53.46.49.54.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.54.46.49.57.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.55.46.49.54.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.50.52.53.46.49.53.50.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.54.46.49.50.56.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.49.54.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.50.57.46.49.49.50.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.49.49.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.50.48.56.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.54.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.57.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.51.46.49.50.56.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.56.46.49.57.55.46.50.52.56.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.49.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.54.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.50.50.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.54.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.57.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.52.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.57.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.49.50.56.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.53.46.50.52.49.46.52.57.46.50.49.54.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.57.46.50.50.55.46.50.52.48.46.56.56.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.17.50.48.56.46.50.53.51.46.50.52.53.46.57.54.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.18.49.54.53.46.49.50.49.46.50.52.48.46.49.50.48.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.52.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.53.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.51.50.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.48.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.50.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.52.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.56.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.48.46.50.52.57.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.49.46.50.49.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.49.54.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.50.52.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.55.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.57.46.49.53.56.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.11.54.48.46.48.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.49.54.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.50.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.51.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.49.46.52.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.57.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.57.54.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.49.57.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.50.52.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.52.46.50.52.48.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.49.50.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.50.56.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.52.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.54.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.49.49.53.46.56.53.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.13.53.56.46.50.52.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.49.48.46.49.51.46.54.52.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.57.46.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.49.46.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.50.46.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.57.46.51.50.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.52.46.57.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.49.54.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.53.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.52.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.51.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.53.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.52.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.56.48.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.56.46.56.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.52.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.54.48.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.56.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.57.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.51.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.52.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.54.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.51.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.56.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.54.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.53.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.57.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.51.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.53.46.54.52.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.48.50.46.57.55.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.54.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.48.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.49.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.51.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.55.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.56.46.50.48.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.57.46.49.55.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.49.54.48.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.50.51.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.50.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.52.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.55.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.57.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.48.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.48.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.57.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.52.46.49.48.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.53.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.49.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.56.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.49.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.51.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.52.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.52.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.48.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.50.52.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.50.52.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.52.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.51.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.52.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.53.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.54.48.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.50.52.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.49.49.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.50.50.52.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.48.52.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.49.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.50.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.49.49.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.54.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.54.52.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.51.46.50.49.50.46.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.50.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.52.52.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.53.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.48.46.49.54.48.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.49.46.50.50.52.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.54.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.55.54.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.48.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.52.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.51.52.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.53.57.46.54.52.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.54.49.46.54.52.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.52.57.46.55.46.49.50.56.47.50.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.49.50.50.46.49.48.50.46.56.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.56.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.51.46.49.51.48.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.48.46.49.57.50.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.50.52.52.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.54.50.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.57.46.49.53.57.46.54.52.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.51.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.54.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.56.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.57.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.53.57.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.56.57.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.57.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.55.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.49.57.46.49.53.57.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.50.49.56.46.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.52.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.54.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.55.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.49.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.16.50.50.49.46.50.51.57.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.49.55.46.49.50.56.46.48.46.48.47.49.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.50.48.46.49.57.50.46.48.46.48.47.49.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.48.51.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.51.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.56.46.50.48.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.51.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.55.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.49.51.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.54.52.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.51.46.54.52.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.49.49.46.57.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.50.50.46.51.50.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.14.50.50.49.46.49.55.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.15.49.50.50.46.49.51.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.12.53.57.46.54.52.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.51.46.53.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.53.46.50.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.49.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.54.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.48.46.57.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.49.46.52.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.51.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.54.52.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.56.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.50.50.46.49.54.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.53.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.57.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.52.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.48.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.50.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.51.48.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.49.57.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.50.52.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.50.46.50.48.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.53.46.50.49.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.49.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.50.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.57.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.51.56.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.56.46.49.57.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.49.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.50.52.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.50.50.46.49.57.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.50.56.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.54.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.55.54.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.48.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.52.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.50.49.46.53.50.46.49.54.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.52.48.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.56.52.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.51.46.57.49.46.49.50.48.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.49.54.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.55.57.46.50.52.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.53.46.57.51.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.56.46.56.49.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.54.52.46.49.50.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.50.56.46.48.46.48.47.49.48|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.57.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.57.53.46.57.51.46.54.52.46.48.47.49.56|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.54.46.48.47.50.51|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.56.46.48.47.50.50|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.55.50.46.48.47.50.49|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.56.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.53.46.49.56.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.15.49.53.50.46.49.54.51.46.57.54.46.48.47.50.50|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.49.48.48.46.48.47.50.51|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.48.46.48.47.50.49|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.56.46.48.47.50.50|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.53.50.46.48.47.50.51|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.50.46.54.55.46.54.53.46.49.50.56.47.50.53|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.55.46.50.48.48.46.49.49.50.46.48.47.50.49|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.11.54.48.46.48.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.53.56.46.49.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.57.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.54.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.48.46.48.47.50.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.51.46.48.47.50.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.52.46.48.47.50.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.56.46.48.47.50.49|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.49.50.52.46.56.57.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.48.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.52.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.54.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.51.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.52.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.51.50.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.56.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.55.48.46.56.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.49.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.51.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.52.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.50.49.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.52.46.53.54.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.53.46.51.52.46.51.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.49.55.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.50.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.52.48.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.55.46.49.54.48.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.51.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.56.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.50.52.48.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.55.49.46.49.57.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.51.51.46.48.47.50.52|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.52.53.46.48.47.50.52|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.48.56.46.49.55.46.51.50.46.48.47.50.50|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.49.53.51.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.57.50.46.49.52.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.51.46.50.50.55.46.56.52.46.48.47.50.57|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.49.51.57.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.50.51.50.46.55.50.46.48.47.50.51|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.53.46.51.52.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.54.46.57.56.46.49.50.56.46.48.47.50.51|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.56.46.51.57.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.57.46.50.50.51.46.56.54.46.56.47.50.57|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.51.52.46.48.47.50.52|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.56.53.46.48.47.50.52|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.52.46.49.50.57.46.49.57.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.51.46.50.48.57.46.49.50.56.46.48.47.50.50|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.48.46.48.47.50.51|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.51.46.48.47.50.52|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.53.46.49.54.57.46.50.50.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.50.48.56.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.52.53.46.50.53.46.49.50.48.47.50.57|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.52.46.50.51.56.46.49.57.56.46.48.47.50.52|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.56.46.50.48.46.49.48.46.49.50.56.47.50.53|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.49.56.51.46.55.55.46.56.56.47.50.57|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.53.48.46.48.47.50.51|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.56.48.46.48.47.50.50|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.53.46.49.55.49.46.49.50.57.46.54.52.47.50.55|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.54.46.49.55.57.46.53.50.46.50.51.50.47.50.57|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.50.48.55.46.49.53.54.46.53.49.46.49.50.56.47.50.53|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.54.53.46.50.49.54.46.50.53.49.46.49.50.56.47.50.53|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.50.46.48.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.55.46.52.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.50.48.56.46.54.46.56.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.51.46.56.48.46.48.47.50.49|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.49.50.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.52.52.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.53.52.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.56.53.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.57.50.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.50.48.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.55.50.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.51.52.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.55.54.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.50.46.52.56.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.50.46.52.52.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.52.46.49.54.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.54.54.46.51.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.50.48.52.46.51.49.46.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.49.56.48.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.50.50.50.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.50.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.57.46.48.47.50.53|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.51.50.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.53.54.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.49.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.52.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.56.56.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.57.54.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.48.52.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.50.56.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.51.50.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.56.52.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.50.55.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.51.54.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.53.49.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.54.56.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.57.48.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.48.53.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.50.56.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.52.50.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.49.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.54.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.50.52.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.48.52.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.51.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.53.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.50.48.48.46.48.47.50.49|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.52.46.49.57.50.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.48.46.51.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.49.46.56.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.51.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.53.46.49.56.55.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.54.46.50.49.54.46.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.49.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.48.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.49.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.50.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.51.48.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.51.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.51.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.54.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.51.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.56.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.48.46.49.50.50.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.51.48.46.50.54.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.49.48.46.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.55.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.49.54.46.50.52.52.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.51.46.49.54.57.46.56.56.46.48.47.50.53|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.49.53.46.56.56.46.48.47.50.49|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.49.55.46.57.54.47.50.55|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.56.46.49.50.56.47.50.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.56.46.50.49.49.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.57.46.49.56.50.46.56.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.50.53.48.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.50.56.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.57.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.49.50.56.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.51.46.49.54.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.53.56.46.49.53.50.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.53.46.49.56.55.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.52.46.57.54.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.53.46.49.54.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.54.46.57.54.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.55.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.48.46.54.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.51.46.56.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.53.50.46.50.52.55.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.50.46.50.48.56.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.51.46.49.49.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.50.56.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.54.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.50.48.56.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.49.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.52.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.49.46.50.50.56.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.57.51.46.56.48.46.48.47.50.49|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.57.46.49.49.48.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.49.54.46.49.55.53.46.54.52.46.48.47.49.56|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.52.46.54.52.46.49.51.56.46.49.50.56.47.50.53|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.49.55.53.46.49.51.54.46.48.47.50.49|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.57.54.46.50.50.55.46.51.50.47.50.56|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.53.46.50.52.50.46.49.57.46.49.54.47.50.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.56.46.50.49.49.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.50.46.49.52.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.51.46.49.52.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.49.49.57.46.49.54.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.50.53.48.46.49.50.56.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.53.46.49.54.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.54.46.49.57.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.55.46.49.54.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.50.52.53.46.49.53.50.46.48.47.50.49|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.54.46.49.50.56.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.49.54.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.50.57.46.49.49.50.46.48.47.50.49|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.49.49.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.50.48.56.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.54.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.57.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.51.46.49.50.56.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.56.46.49.57.55.46.50.52.56.46.48.47.50.49|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.49.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.54.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.50.50.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.54.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.57.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.52.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.57.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.49.50.56.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.53.46.50.52.49.46.52.57.46.50.49.54.47.50.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.57.46.50.50.55.46.50.52.48.46.56.56.47.50.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.17.50.48.56.46.50.53.51.46.50.52.53.46.57.54.47.50.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.18.49.54.53.46.49.50.49.46.50.52.48.46.49.50.48.47.50.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.52.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.53.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.51.50.46.48.47.50.49|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.48.46.48.47.50.51|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.50.46.48.47.50.52|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.52.46.48.47.50.50|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.56.46.48.47.50.48|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.48.46.50.52.57.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.49.46.50.49.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.49.54.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.50.52.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.55.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.57.46.49.53.56.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.11.54.48.46.48.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.49.54.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.50.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.51.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.49.46.52.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.57.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.57.54.46.48.47.50.48|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.49.57.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.50.52.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.52.46.50.52.48.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.49.50.46.48.47.50.49|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.50.56.46.48.47.50.49|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.52.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.54.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.49.49.53.46.56.53.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.13.53.56.46.50.52.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f5368616e67686169434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.49.48.46.49.51.46.54.52.46.48.47.49.56|4x|2f436f6d6d6f6e2f5368616e67686169434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f5368616e67686169434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.57.46.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.49.46.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.50.46.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.57.46.51.50.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.52.46.57.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.49.54.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.53.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.52.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.51.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.53.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.52.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.56.48.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.56.46.56.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.52.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.54.48.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.56.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.57.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.51.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.52.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.54.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.51.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.56.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.54.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.53.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.57.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.51.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.53.46.54.52.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.48.50.46.57.55.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.54.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.48.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.49.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.51.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.55.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.56.46.50.48.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.57.46.49.55.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.49.54.48.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.50.51.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.50.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.52.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.55.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.57.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.48.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.48.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.57.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.52.46.49.48.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.53.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.49.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.56.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.49.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.51.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.52.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.52.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.48.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.50.52.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.50.52.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.52.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.51.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.52.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.53.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.54.48.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.50.52.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.49.49.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.50.50.52.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.48.52.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.49.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.50.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.49.49.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.54.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.54.52.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.51.46.50.49.50.46.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.50.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.52.52.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.53.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.48.46.49.54.48.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.49.46.50.50.52.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.54.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.55.54.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.48.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.52.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.51.52.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.53.57.46.54.52.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.54.49.46.54.52.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.52.57.46.55.46.49.50.56.47.50.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.49.50.50.46.49.48.50.46.56.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.56.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.51.46.49.51.48.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.48.46.49.57.50.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.50.52.52.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.54.50.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.57.46.49.53.57.46.54.52.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.51.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.54.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.56.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.57.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.53.57.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.56.57.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.57.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.55.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.49.57.46.49.53.57.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.50.49.56.46.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.52.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.54.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.55.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.49.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.16.50.50.49.46.50.51.57.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.49.55.46.49.50.56.46.48.46.48.47.49.48|4x|2f436f6d6d6f6e2f4368696e614d6f62696c4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.50.48.46.49.57.50.46.48.46.48.47.49.48|4x|2f436f6d6d6f6e2f4368696e614d6f62696c4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.48.51.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e614d6f62696c4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.51.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e614d6f62696c4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.56.46.50.48.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e614d6f62696c4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.51.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e614d6f62696c4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.55.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e614d6f62696c4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.49.51.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.54.52.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.51.46.54.52.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.49.49.46.57.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.50.50.46.51.50.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.14.50.50.49.46.49.55.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.15.49.50.50.46.49.51.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.12.53.57.46.54.52.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.51.46.53.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.53.46.50.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.49.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.54.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.48.46.57.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.49.46.52.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.51.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.54.52.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.56.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.50.50.46.49.54.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.53.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.57.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.52.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.48.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.50.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.51.48.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.49.57.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.50.52.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.50.46.50.48.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.53.46.50.49.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.49.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.50.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.57.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.51.56.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.56.46.49.57.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.49.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.50.52.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.50.50.46.49.57.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.50.56.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.54.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.55.54.46.48.47.50.51|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.48.46.48.47.50.50|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.52.46.48.47.50.49|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.50.49.46.53.50.46.49.54.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.52.48.46.48.47.50.51|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.56.52.46.48.47.50.49|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.51.46.57.49.46.49.50.48.46.48.47.50.49|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.49.54.46.48.47.50.49|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.55.57.46.50.52.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.53.46.57.51.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.56.46.56.49.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.54.52.46.49.50.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.50.56.46.48.46.48.47.49.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.57.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.57.53.46.57.51.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.54.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.55.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.53.46.49.56.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.15.49.53.50.46.49.54.51.46.57.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.49.48.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.53.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.50.46.54.55.46.54.53.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.55.46.50.48.48.46.49.49.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.11.54.48.46.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.53.56.46.49.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.54.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.51.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.49.50.52.46.56.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.48.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.51.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.52.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.51.50.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.56.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.55.48.46.56.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.49.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.51.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.52.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.50.49.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.52.46.53.54.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.53.46.51.52.46.51.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.49.55.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.50.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.52.48.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.55.46.49.54.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.51.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.56.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.50.52.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.55.49.46.49.57.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.51.51.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.52.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.48.56.46.49.55.46.51.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.49.53.51.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.57.50.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.51.46.50.50.55.46.56.52.46.48.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.49.51.57.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.50.51.50.46.55.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.53.46.51.52.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.54.46.57.56.46.49.50.56.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.56.46.51.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.57.46.50.50.51.46.56.54.46.56.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.51.52.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.56.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.52.46.49.50.57.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.51.46.50.48.57.46.49.50.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.51.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.53.46.49.54.57.46.50.50.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.50.48.56.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.52.53.46.50.53.46.49.50.48.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.52.46.50.51.56.46.49.57.56.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.56.46.50.48.46.49.48.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.49.56.51.46.55.55.46.56.56.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.53.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.56.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.53.46.49.55.49.46.49.50.57.46.54.52.47.50.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.54.46.49.55.57.46.53.50.46.50.51.50.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.50.48.55.46.49.53.54.46.53.49.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.54.53.46.50.49.54.46.50.53.49.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.50.46.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.55.46.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.50.48.56.46.54.46.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.51.46.56.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.49.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.52.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.53.52.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.56.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.57.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.50.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.55.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.51.52.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.55.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.50.46.52.56.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.50.46.52.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.52.46.49.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.54.54.46.51.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.50.48.52.46.51.49.46.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.49.56.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.50.50.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.57.46.48.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.51.50.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.53.54.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.49.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.52.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.56.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.57.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.48.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.50.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.51.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.56.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.50.55.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.51.54.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.53.49.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.54.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.57.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.48.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.50.56.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.52.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.49.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.50.52.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.48.52.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.51.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.50.48.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.52.46.49.57.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.48.46.51.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.49.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.51.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.53.46.49.56.55.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.54.46.50.49.54.46.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.49.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.48.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.49.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.50.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.51.48.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.51.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.51.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.54.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.51.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.48.46.49.50.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.51.48.46.50.54.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.49.48.46.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.55.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.49.54.46.50.52.52.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.51.46.49.54.57.46.56.56.46.48.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.49.53.46.56.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.49.55.46.57.54.47.50.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.56.46.49.50.56.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.56.46.50.49.49.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.57.46.49.56.50.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.50.53.48.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.51.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.53.56.46.49.53.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.53.46.49.56.55.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.52.46.57.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.53.46.49.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.54.46.57.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.55.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.48.46.54.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.51.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.53.50.46.50.52.55.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.50.46.50.48.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.51.46.49.49.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.50.48.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.49.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.49.46.50.50.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.57.51.46.56.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.57.46.49.49.48.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.49.54.46.49.55.53.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.52.46.54.52.46.49.51.56.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.49.55.53.46.49.51.54.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.57.54.46.50.50.55.46.51.50.47.50.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.53.46.50.52.50.46.49.57.46.49.54.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.56.46.50.49.49.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.50.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.51.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.49.49.57.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.50.53.48.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.53.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.54.46.49.57.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.55.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.50.52.53.46.49.53.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.54.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.50.57.46.49.49.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.49.49.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.50.48.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.51.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.56.46.49.57.55.46.50.52.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.49.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.50.50.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.57.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.53.46.50.52.49.46.52.57.46.50.49.54.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.57.46.50.50.55.46.50.52.48.46.56.56.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.17.50.48.56.46.50.53.51.46.50.52.53.46.57.54.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.18.49.54.53.46.49.50.49.46.50.52.48.46.49.50.48.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.53.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.51.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.50.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.48.46.50.52.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.49.46.50.49.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.50.52.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.55.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.57.46.49.53.56.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.11.54.48.46.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.49.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.50.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.49.46.52.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.57.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.49.57.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.52.46.50.52.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.49.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.50.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.49.49.53.46.56.53.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.13.53.56.46.50.52.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.49.48.46.49.51.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.57.46.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.49.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.50.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.57.46.51.50.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.52.46.57.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.49.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.53.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.51.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.53.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.56.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.56.46.56.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.52.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.54.48.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.56.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.57.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.51.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.52.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.54.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.51.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.56.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.53.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.51.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.53.46.54.52.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.48.50.46.57.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.48.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.49.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.51.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.56.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.57.46.49.55.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.49.54.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.50.51.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.50.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.52.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.48.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.48.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.57.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.52.46.49.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.53.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.56.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.51.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.52.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.52.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.52.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.53.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.54.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.50.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.48.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.49.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.49.49.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.54.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.51.46.50.49.50.46.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.50.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.52.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.53.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.48.46.49.54.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.49.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.54.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.55.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.52.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.51.52.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.53.57.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.54.49.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.52.57.46.55.46.49.50.56.47.50.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.49.50.50.46.49.48.50.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.56.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.51.46.49.51.48.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.48.46.49.57.50.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.50.52.52.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.54.50.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.57.46.49.53.57.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.51.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.54.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.56.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.57.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.53.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.56.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.49.57.46.49.53.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.50.49.56.46.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.52.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.55.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.49.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.16.50.50.49.46.50.51.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.49.55.46.49.50.56.46.48.46.48.47.49.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.50.48.46.49.57.50.46.48.46.48.47.49.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.48.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.51.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.56.46.50.48.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.51.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.55.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.49.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.54.52.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.51.46.54.52.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.49.49.46.57.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.50.50.46.51.50.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.14.50.50.49.46.49.55.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.15.49.50.50.46.49.51.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.12.53.57.46.54.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.51.46.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.53.46.50.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.48.46.57.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.49.46.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.51.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.54.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.56.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.50.50.46.49.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.57.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.48.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.50.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.51.48.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.50.46.50.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.53.46.50.49.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.50.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.57.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.51.56.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.56.46.49.57.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.49.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.50.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.50.50.46.49.57.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.55.54.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.52.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.50.49.46.53.50.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.52.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.56.52.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.51.46.57.49.46.49.50.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.49.54.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.55.57.46.50.52.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.53.46.57.51.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.56.46.56.49.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.54.52.46.49.50.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.50.56.46.48.46.48.47.49.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.57.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.57.53.46.57.51.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.54.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.55.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.53.46.49.56.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.15.49.53.50.46.49.54.51.46.57.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.49.48.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.53.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.50.46.54.55.46.54.53.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.55.46.50.48.48.46.49.49.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.11.54.48.46.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.53.56.46.49.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.54.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.51.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.49.50.52.46.56.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.48.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.51.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.52.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.51.50.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.56.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.55.48.46.56.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.49.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.51.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.52.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.50.49.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.52.46.53.54.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.53.46.51.52.46.51.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.49.55.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.50.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.52.48.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.55.46.49.54.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.51.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.56.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.50.52.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.55.49.46.49.57.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.51.51.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.52.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.48.56.46.49.55.46.51.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.49.53.51.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.57.50.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.51.46.50.50.55.46.56.52.46.48.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.49.51.57.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.50.51.50.46.55.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.53.46.51.52.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.54.46.57.56.46.49.50.56.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.56.46.51.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.57.46.50.50.51.46.56.54.46.56.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.51.52.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.56.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.52.46.49.50.57.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.51.46.50.48.57.46.49.50.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.51.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.53.46.49.54.57.46.50.50.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.50.48.56.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.52.53.46.50.53.46.49.50.48.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.52.46.50.51.56.46.49.57.56.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.56.46.50.48.46.49.48.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.49.56.51.46.55.55.46.56.56.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.53.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.56.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.53.46.49.55.49.46.49.50.57.46.54.52.47.50.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.54.46.49.55.57.46.53.50.46.50.51.50.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.50.48.55.46.49.53.54.46.53.49.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.54.53.46.50.49.54.46.50.53.49.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.50.46.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.55.46.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.50.48.56.46.54.46.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.51.46.56.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.49.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.52.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.53.52.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.56.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.57.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.50.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.55.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.51.52.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.55.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.50.46.52.56.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.50.46.52.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.52.46.49.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.54.54.46.51.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.50.48.52.46.51.49.46.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.49.56.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.50.50.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.57.46.48.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.51.50.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.53.54.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.49.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.52.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.56.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.57.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.48.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.50.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.51.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.56.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.50.55.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.51.54.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.53.49.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.54.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.57.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.48.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.50.56.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.52.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.49.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.50.52.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.48.52.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.51.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.50.48.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.52.46.49.57.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.48.46.51.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.49.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.51.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.53.46.49.56.55.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.54.46.50.49.54.46.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.49.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.48.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.49.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.50.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.51.48.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.51.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.51.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.54.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.51.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.48.46.49.50.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.51.48.46.50.54.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.49.48.46.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.55.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.49.54.46.50.52.52.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.51.46.49.54.57.46.56.56.46.48.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.49.53.46.56.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.49.55.46.57.54.47.50.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.56.46.49.50.56.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.56.46.50.49.49.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.57.46.49.56.50.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.50.53.48.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.51.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.53.56.46.49.53.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.53.46.49.56.55.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.52.46.57.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.53.46.49.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.54.46.57.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.55.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.48.46.54.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.51.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.53.50.46.50.52.55.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.50.46.50.48.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.51.46.49.49.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.50.48.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.49.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.49.46.50.50.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.57.51.46.56.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.57.46.49.49.48.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.49.54.46.49.55.53.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.52.46.54.52.46.49.51.56.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.49.55.53.46.49.51.54.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.57.54.46.50.50.55.46.51.50.47.50.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.53.46.50.52.50.46.49.57.46.49.54.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.56.46.50.49.49.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.50.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.51.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.49.49.57.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.50.53.48.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.53.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.54.46.49.57.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.55.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.50.52.53.46.49.53.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.54.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.50.57.46.49.49.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.49.49.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.50.48.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.51.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.56.46.49.57.55.46.50.52.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.49.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.50.50.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.57.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.53.46.50.52.49.46.52.57.46.50.49.54.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.57.46.50.50.55.46.50.52.48.46.56.56.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.17.50.48.56.46.50.53.51.46.50.52.53.46.57.54.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.18.49.54.53.46.49.50.49.46.50.52.48.46.49.50.48.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.53.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.51.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.50.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.48.46.50.52.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.49.46.50.49.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.50.52.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.55.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.57.46.49.53.56.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.11.54.48.46.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.49.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.50.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.49.46.52.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.57.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.49.57.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.52.46.50.52.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.49.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.50.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.49.49.53.46.56.53.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.13.53.56.46.50.52.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.49.48.46.49.51.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.57.46.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.49.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.50.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.57.46.51.50.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.52.46.57.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.49.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.53.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.51.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.53.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.56.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.56.46.56.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.52.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.54.48.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.56.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.57.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.51.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.52.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.54.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.51.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.56.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.53.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.51.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.53.46.54.52.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.48.50.46.57.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.48.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.49.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.51.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.56.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.57.46.49.55.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.49.54.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.50.51.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.50.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.52.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.48.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.48.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.57.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.52.46.49.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.53.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.56.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.51.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.52.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.52.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.52.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.53.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.54.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.50.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.48.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.49.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.49.49.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.54.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.51.46.50.49.50.46.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.50.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.52.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.53.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.48.46.49.54.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.49.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.54.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.55.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.52.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.51.52.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.53.57.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.54.49.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.52.57.46.55.46.49.50.56.47.50.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.49.50.50.46.49.48.50.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.56.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.51.46.49.51.48.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.48.46.49.57.50.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.50.52.52.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.54.50.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.57.46.49.53.57.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.51.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.54.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.56.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.57.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.53.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.56.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.49.57.46.49.53.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.50.49.56.46.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.52.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.55.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.49.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.16.50.50.49.46.50.51.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.49.55.46.49.50.56.46.48.46.48.47.49.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.50.48.46.49.57.50.46.48.46.48.47.49.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.48.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.51.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.56.46.50.48.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.51.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.55.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.49.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.54.52.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.51.46.54.52.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.49.49.46.57.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.50.50.46.51.50.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.14.50.50.49.46.49.55.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.15.49.50.50.46.49.51.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.12.53.57.46.54.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.51.46.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.53.46.50.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.48.46.57.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.49.46.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.51.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.54.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.56.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.50.50.46.49.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.57.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.48.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.50.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.51.48.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.50.46.50.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.53.46.50.49.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.50.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.57.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.51.56.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.56.46.49.57.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.49.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.50.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.50.50.46.49.57.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.55.54.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.52.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.50.49.46.53.50.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.52.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.56.52.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.51.46.57.49.46.49.50.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.49.54.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.55.57.46.50.52.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.53.46.57.51.46.48.46.48.47.49.56|4x|3139352e39332e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.56.46.56.49.46.48.46.48.47.49.57|4x|3139382e38312e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.54.52.46.49.50.46.57.54.46.48.47.49.57|4x|36342e31322e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.50.56.46.48.46.48.47.49.48|4x|3137322e3132382e302e302f3130 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.57.50.46.48.46.48.47.49.50|4x|3137322e3139322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.48.46.48.46.48.47.49.53|4x|3137322e3230302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.50.46.48.46.48.47.49.53|4x|3137322e3230322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.56.46.48.46.48.47.49.51|4x|3137322e3230382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.50.46.48.46.48.47.49.52|4x|3137322e3231322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.54.46.48.46.48.47.49.54|4x|3137322e3231362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.57.53.46.57.51.46.54.52.46.48.47.49.56|4x|3139352e39332e36342e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.54.46.48.47.50.51|4x|3230322e36372e36362e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.56.46.48.47.50.50|4x|3230322e36372e36382e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.55.50.46.48.47.50.49|4x|3230322e36372e37322e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.56.48.46.48.47.50.48|4x|3230322e36372e38302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.57.54.46.48.47.49.57|4x|3230322e36372e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.53.46.49.56.56.46.48.46.48.47.49.54|4x|3230352e3138382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.15.49.53.50.46.49.54.51.46.57.54.46.48.47.50.50|4x|3135322e3136332e39362e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.49.48.48.46.48.47.50.51|4x|3135322e3136332e3130302e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.48.46.48.47.50.49|4x|3135322e3136332e3234302e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.56.46.48.47.50.50|4x|3135322e3136332e3234382e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.53.50.46.48.47.50.51|4x|3135322e3136332e3235322e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.50.46.54.55.46.54.53.46.49.50.56.47.50.53|4x|3230322e36372e36352e3132382f3235 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.55.46.50.48.48.46.49.49.50.46.48.47.50.49|4x|3230372e3230302e3131322e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.11.54.48.46.48.46.48.46.48.47.49.49|4x|36302e302e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|4x|3131362e322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|4x|3131372e382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|4x|3131392e342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|4x|3132302e302e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|4x|3132332e342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|4x|3132332e382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|4x|3231382e372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|4x|3231382e382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|4x|3232312e302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|4x|3232312e382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.53.56.46.49.54.46.48.46.48.47.49.51|4x|35382e31362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|4x|36302e35352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|4x|36312e34382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|4x|36312e34392e302e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|4x|36312e34392e342e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|4x|36312e34392e362e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|4x|36312e34392e372e302f3235 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|4x|36312e34392e382e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|4x|36312e35302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.50.46.48.46.48.47.49.52|4x|36312e35322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|4x|3131362e39352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|4x|3131382e37322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|4x|3131382e38302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|4x|3131392e33362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|4x|3131392e33392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|4x|3131392e34382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|4x|3131392e36322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|4x|3132302e38302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|4x|3132312e31362e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|4x|3132322e39362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|4x|3132342e36342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|4x|3132342e36362e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|4x|3132342e36372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.54|4x|3132342e38382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.57.46.48.46.48.47.49.56|4x|3132342e38392e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.48.46.48.46.48.47.49.53|4x|3132342e39302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.50.46.48.46.48.47.49.52|4x|3132342e39322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|4x|3132352e33322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|4x|3230322e39362e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|4x|3230322e39382e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|4x|3230322e39392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|4x|3230332e39332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|4x|3231302e31322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|4x|3231302e31352e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|4x|3231302e32312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|4x|3231302e32322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|4x|3231302e35312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|4x|3231302e35322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|4x|3231302e37382e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|4x|3231302e38322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|4x|3231382e31322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|4x|3231382e32342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|4x|3231382e32382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|4x|3231382e35362e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|4x|3231382e36302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|4x|3231382e36322e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|4x|3231382e36382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|4x|3232312e31322e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|4x|3232312e31332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|4x|3232312e31342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|4x|35382e3134342e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|4x|35382e3234302e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|4x|36302e3230382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|4x|36312e3133332e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|4x|36312e3133352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|4x|36312e3133362e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|4x|36312e3133382e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|4x|36312e3134382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|4x|36312e3135362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|4x|36312e3135382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|4x|36312e3135392e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|4x|36312e3136312e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|4x|36312e3136322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|4x|36312e3136372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|4x|36312e3136382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|4x|36312e3137362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|4x|36312e3137392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|4x|36312e3138312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|4x|36312e3138322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|4x|36312e3138392e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|4x|36312e34392e31362e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|4x|36312e34392e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|4x|36312e34392e36342e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|4x|3131362e3131322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|4x|3131362e3131362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|4x|3131382e3231322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|4x|3131392e3130382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|4x|3131392e3131322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|4x|3131392e3136322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|4x|3131392e3136342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|4x|3131392e3137362e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|4x|3131392e3234382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|4x|3132322e3133362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|4x|3132322e3135362e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|4x|3132322e3139322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|4x|3132332e3131322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|4x|3132332e3132382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|4x|3132332e3133372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|4x|3132332e3133382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|4x|3132332e3134342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|4x|3132332e3134382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|4x|3132332e3135322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|4x|3132332e3138382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|4x|3132332e3233322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|4x|3132342e3132382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|4x|3132342e3136302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.54.52.46.48.47.50.48|4x|3132342e38392e36342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.48.46.48.47.50.51|4x|3132342e38392e38302e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.51.46.48.47.50.52|4x|3132342e38392e38332e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.52.46.48.47.50.50|4x|3132342e38392e38342e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.56.46.48.47.50.49|4x|3132342e38392e38382e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.57.54.46.48.47.49.57|4x|3132342e38392e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|4x|3132352e3231312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|4x|3230322e3130362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|4x|3230322e3130372e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|4x|3230322e3130382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|4x|3230322e3131302e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|4x|3230322e39362e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|4x|3231302e37342e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|4x|3231312e3134342e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|4x|3231312e3135382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|4x|3231382e3130342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|4x|3231392e3135342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|4x|3231392e3135362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|4x|3231392e3135382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|4x|3231392e3135392e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|4x|3231392e3233322e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|4x|3232302e3234382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|4x|3232302e3235322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|4x|3232312e3133362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|4x|3232312e3139322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|4x|3232312e3139362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|4x|3232312e3139382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|4x|3232312e3139392e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|4x|3232312e3230302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|4x|3232312e3230382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|4x|3232322e3132382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|4x|3232322e3136302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|4x|36312e3133342e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|4x|36312e34392e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|4x|36312e34392e372e3134342f3238 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|4x|36312e34392e372e3136302f3237 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|4x|36312e34392e372e3139322f3236 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.49.50.52.46.56.57.46.49.50.56.46.48.47.49.55|4x|3132342e38392e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|4x|3230322e39372e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|4x|3231302e31342e3136302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|4x|3231302e31342e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|4x|3231302e31352e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|4x|3231302e37342e3132382e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|4x|3231382e32312e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|4x|3231382e3234342e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|4x|3231382e36372e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|4x|3231392e3233352e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|4x|3232312e31322e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|4x|36312e3133342e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|4x|36312e3133372e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|4x|36312e3133382e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|4x|36312e3133392e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|4x|36312e3136312e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|4x|36312e3138302e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|4x|3230322e3130322e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|4x|3230322e3130322e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|4x|3230322e3131302e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|4x|3230322e3131312e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|4x|3230322e3133302e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|4x|3230332e3137352e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|4x|3231312e3135342e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|4x|3232312e3139392e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|4x|3232312e3139392e3139322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|4x|3232312e3139392e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.48.46.48.46.48.47.49.55|4x|32342e33302e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.52.46.48.46.48.47.49.54|4x|32342e33342e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.54.48.46.48.46.48.47.49.52|4x|32342e36302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.49.46.48.46.48.47.49.54|4x|32342e39312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.56.46.48.46.48.47.49.53|4x|32342e39382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.51.48.46.48.46.48.47.49.53|4x|36362e33302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.52.49.46.48.46.48.47.49.54|4x|36362e34312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.51.50.46.48.46.48.47.49.49|4x|36382e33322e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.56.48.46.48.46.48.47.49.51|4x|36382e38302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.55.48.46.56.56.46.48.46.48.47.49.53|4x|37302e38382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.49.56.46.48.46.48.47.49.54|4x|32342e3131382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.51.48.46.48.46.48.47.49.53|4x|32342e3133302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.52.55.46.48.46.48.47.49.54|4x|32342e3134372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.50.49.56.46.48.46.48.47.49.54|4x|32342e3231382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.52.46.53.54.46.51.50.46.48.47.49.57|4x|36342e35362e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.53.46.51.52.46.51.50.46.48.47.50.48|4x|36352e33342e33322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.49.55.54.46.48.46.48.47.49.53|4x|36362e3137362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.50.57.46.48.46.48.47.49.54|4x|36362e3232392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.52.48.46.48.46.48.47.49.56|4x|36362e3234302e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.55.46.49.54.48.46.48.46.48.47.49.49|4x|36372e3136302e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.51.54.46.48.46.48.47.49.51|4x|36392e3133362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.56.48.46.48.46.48.47.49.53|4x|36392e3138302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.50.52.48.46.48.46.48.47.49.50|4x|36392e3234302e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.55.49.46.49.57.50.46.48.46.48.47.49.51|4x|37312e3139322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.51.51.46.48.47.50.52|4x|3139382e372e3133332e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.52.53.46.48.47.50.52|4x|3139382e372e3134352e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.48.56.46.49.55.46.51.50.46.48.47.50.50|4x|3230382e31372e33322e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.49.53.51.46.54.52.46.48.47.49.57|4x|32342e3135332e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.57.50.46.49.52.52.46.48.47.50.48|4x|32342e39322e3134342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.51.46.50.50.55.46.56.52.46.48.47.50.57|4x|36332e3232372e38342e302f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.49.51.57.46.54.52.46.48.47.49.57|4x|36342e3133392e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.50.51.50.46.55.50.46.48.47.50.51|4x|36342e3233322e37322e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.53.46.51.52.46.49.50.56.46.48.47.49.55|4x|36352e33342e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.54.46.57.56.46.49.50.56.46.48.47.50.51|4x|3230362e39382e3132382e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.56.46.51.57.46.49.50.56.46.48.47.49.56|4x|3230382e33392e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.57.46.50.50.51.46.56.54.46.56.47.50.57|4x|3230392e3232332e38362e382f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.51.52.46.48.47.50.52|4x|3231362e3231362e33342e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.56.53.46.48.47.50.52|4x|3231362e3231362e38352e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.52.46.49.50.57.46.49.57.50.46.48.47.49.57|4x|32342e3132392e3139322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.51.46.50.48.57.46.49.50.56.46.48.47.50.50|4x|36332e3230392e3132382e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.48.46.48.47.50.51|4x|36342e3233322e3232302e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.51.46.48.47.50.52|4x|36342e3233322e3232332e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.53.46.49.54.57.46.50.50.52.46.48.47.50.48|4x|36352e3136392e3232342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.50.48.56.46.49.57.50.46.48.47.49.56|4x|36362e3230382e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.52.53.46.50.53.46.49.50.48.47.50.57|4x|36362e34352e32352e3132302f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.52.46.50.51.56.46.49.57.56.46.48.47.50.52|4x|3230342e3233382e3139382e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.56.46.50.48.46.49.48.46.49.50.56.47.50.53|4x|3230382e32302e31302e3132382f3235 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.49.56.51.46.55.55.46.56.56.47.50.57|4x|3230392e3138332e37372e38382f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.53.48.46.48.47.50.51|4x|3230392e3231392e3135302e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.56.48.46.48.47.50.50|4x|3230392e3231392e3138302e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.53.46.49.55.49.46.49.50.57.46.54.52.47.50.55|4x|36352e3137312e3132392e36342f3237 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.54.46.49.55.57.46.53.50.46.50.51.50.47.50.57|4x|36362e3137392e35322e3233322f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.50.48.55.46.49.53.54.46.53.49.46.49.50.56.47.50.53|4x|3230372e3135362e35312e3132382f3235 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.54.53.46.50.49.54.46.50.53.49.46.49.50.56.47.50.53|4x|36352e3231362e3235312e3132382f3235 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.50.46.48.46.48.47.50.51|4x|342e34322e302e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.55.46.52.46.48.47.50.50|4x|342e34372e342e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.50.48.56.46.54.46.56.46.48.47.50.50|4x|3230382e362e382e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.51.46.56.48.46.48.47.50.49|4x|342e33332e38302e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.49.50.46.48.47.50.50|4x|342e33352e31322e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.52.52.46.48.47.50.50|4x|342e33352e34342e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.53.52.46.48.47.50.51|4x|342e33352e35342e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.56.53.46.48.47.50.52|4x|342e33352e38352e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.57.50.46.48.47.50.50|4x|342e33352e39322e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.50.48.46.48.47.50.50|4x|342e34302e32302e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.55.50.46.48.47.50.50|4x|342e34302e37322e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.51.52.46.48.47.50.51|4x|342e34312e33342e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.55.54.46.48.47.50.50|4x|342e34312e37362e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.50.46.52.56.46.48.47.50.51|4x|342e34322e34382e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.50.46.52.52.46.48.47.50.50|4x|342e36322e34342e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.52.46.49.54.46.48.47.50.50|4x|342e36342e31362e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.54.54.46.51.50.46.48.46.48.47.49.54|4x|36362e33322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.50.48.52.46.51.49.46.48.46.48.47.50.48|4x|3230342e33312e302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.49.56.48.46.48.47.50.50|4x|342e33332e3138302e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.50.50.50.46.48.47.50.51|4x|342e33332e3232322e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.50.46.48.47.50.51|4x|342e33352e3131322e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.57.46.48.47.50.53|4x|342e33352e3131392e302f3235 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.51.50.46.48.47.50.52|4x|342e33352e3133322e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.53.54.46.48.47.50.52|4x|342e33352e3135362e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.49.46.48.47.50.52|4x|342e33352e3136312e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.52.46.48.47.50.52|4x|342e33352e3136342e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.56.56.46.48.47.50.50|4x|342e33352e3138382e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.57.54.46.48.47.50.50|4x|342e33352e3139362e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.48.52.46.48.47.50.50|4x|342e33352e3230342e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.50.56.46.48.47.50.50|4x|342e33352e3232382e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.51.50.46.48.47.50.51|4x|342e34302e3133322e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.56.52.46.48.47.50.50|4x|342e34302e3138342e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.50.55.46.48.47.50.52|4x|342e34312e3132372e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.51.54.46.48.47.50.52|4x|342e34312e3133362e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.53.49.46.48.47.50.52|4x|342e34312e3135312e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.54.56.46.48.47.50.50|4x|342e34312e3136382e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.57.48.46.48.47.50.51|4x|342e34312e3139302e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.48.53.46.48.47.50.52|4x|342e34312e3230352e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.50.56.46.48.47.50.51|4x|342e34312e3232382e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.52.50.46.48.47.50.51|4x|342e34312e3234322e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.49.46.48.47.50.52|4x|342e34332e3135312e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.54.46.48.47.50.50|4x|342e34332e3135362e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.50.52.48.46.48.47.50.48|4x|342e34332e3234302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.48.52.46.48.47.50.52|4x|342e36322e3130342e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.51.46.48.47.50.52|4x|342e36322e3131332e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.53.46.48.47.50.52|4x|342e36322e3131352e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.50.48.48.46.48.47.50.49|4x|342e36322e3230302e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.52.46.49.57.50.46.48.47.50.50|4x|342e36342e3139322e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.48.46.51.50.46.48.47.50.48|4x|3230342e33302e33322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.49.46.56.48.46.48.47.50.48|4x|3230342e33312e38302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.51.46.54.52.46.48.47.49.57|4x|3230342e33332e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.53.46.49.56.55.46.48.46.48.47.49.57|4x|3230352e3138372e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.54.46.50.49.54.46.48.46.48.47.50.48|4x|3230362e3231362e302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.49.55.46.48.46.48.47.49.54|4x|3230372e3231372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.48.46.48.46.48.47.49.57|4x|3230372e3232302e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.49.46.48.46.48.47.49.57|4x|3230372e3232312e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.50.46.48.46.48.47.49.56|4x|3230372e3232322e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.51.48.46.54.52.46.48.47.49.57|4x|3230372e33302e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.51.46.54.52.46.48.47.49.57|4x|3230372e39332e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.51.50.46.48.47.50.48|4x|3230372e39342e33322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.54.52.46.48.47.50.48|4x|3230372e39342e36342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.51.50.46.48.47.50.48|4x|3230372e39352e33322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.56.48.46.48.47.50.48|4x|3230372e39352e38302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.48.46.49.50.50.46.48.47.50.51|4x|3230382e302e3132322e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.51.48.46.50.54.46.48.47.50.51|4x|3230382e33302e32362e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.49.48.46.48.46.48.47.50.48|4x|3230392e3131302e302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.55.57.46.48.46.48.47.49.54|4x|3230392e3137392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.49.54.46.50.52.52.46.48.46.48.47.49.56|4x|3231362e3234342e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.51.46.49.54.57.46.56.56.46.48.47.50.53|4x|36332e3136392e38382e302f3235 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.49.53.46.56.56.46.48.47.50.49|4x|36342e3231352e38382e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.49.55.46.57.54.47.50.55|4x|36342e32332e31372e39362f3237 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.56.46.49.50.56.47.50.57|4x|36342e32332e382e3132382f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.56.46.50.49.49.46.54.52.46.48.47.49.57|4x|3139382e3231312e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.57.46.49.56.50.46.56.48.46.48.47.50.48|4x|3139392e3138322e38302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.50.53.48.46.51.50.46.48.47.49.57|4x|3230342e3235302e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.50.56.46.48.47.49.57|4x|3230342e33312e3132382e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.57.50.46.48.47.49.57|4x|3230342e33312e3139322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.49.50.56.46.48.47.50.48|4x|3230342e33322e3132382e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.50.50.52.46.48.47.49.57|4x|3230342e33322e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.51.46.49.54.48.46.48.47.50.48|4x|3230342e33332e3136302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.53.56.46.49.53.50.46.48.47.50.50|4x|3230342e35382e3135322e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.53.46.49.56.55.46.57.54.46.48.47.49.57|4x|3230352e3138372e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.52.46.57.54.46.48.47.50.48|4x|3230362e3231342e39362e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.53.46.49.54.46.48.47.50.48|4x|3230362e3231352e31362e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.54.46.57.54.46.48.47.50.48|4x|3230362e3231362e39362e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.55.46.51.50.46.48.47.49.57|4x|3230362e3231372e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.48.46.54.52.46.48.47.50.48|4x|3230372e3232302e36342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.51.46.56.48.46.48.47.50.48|4x|3230372e3232332e38302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.53.50.46.50.52.55.46.48.47.50.52|4x|3230372e35322e3234372e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.50.46.50.48.56.46.48.47.50.48|4x|3230372e39322e3230382e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.51.46.49.49.50.46.48.47.50.48|4x|3230372e39332e3131322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.50.56.46.48.47.50.48|4x|3230372e39342e3132382e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.54.48.46.48.47.50.48|4x|3230372e39342e3136302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.50.48.56.46.48.47.50.48|4x|3230372e39342e3230382e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.49.50.46.48.47.50.48|4x|3230372e39352e3131322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.52.52.46.48.47.50.48|4x|3230372e39352e3134342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.49.46.50.50.56.46.48.47.50.50|4x|3230382e31312e3232382e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.57.51.46.56.48.46.48.47.50.49|4x|3230382e3139332e38302e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.57.46.49.49.48.46.54.52.46.48.47.49.57|4x|3230392e3131302e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.49.54.46.49.55.53.46.54.52.46.48.47.49.56|4x|3231362e3137352e36342e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.52.46.54.52.46.49.51.56.46.49.50.56.47.50.53|4x|342e36342e3133382e3132382f3235 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.49.55.53.46.49.51.54.46.48.47.50.49|4x|36332e3137352e3133362e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.57.54.46.50.50.55.46.51.50.47.50.56|4x|36332e39362e3232372e33322f3238 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.53.46.50.52.50.46.49.57.46.49.54.47.50.57|4x|36352e3234322e31392e31362f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.56.46.50.49.49.46.50.50.52.46.48.47.49.57|4x|3139382e3231312e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.50.46.49.52.52.46.48.47.50.48|4x|3139392e3138322e3134342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.51.46.49.52.52.46.48.47.50.48|4x|3139392e3138332e3134342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.49.49.57.46.49.54.48.46.48.47.49.57|4x|3230342e3131392e3136302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.50.53.48.46.49.50.56.46.48.47.50.48|4x|3230342e3235302e3132382e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.53.46.49.54.48.46.48.47.49.57|4x|3230352e3138352e3136302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.54.46.49.57.50.46.48.47.50.48|4x|3230352e3138362e3139322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.55.46.49.54.48.46.48.47.50.48|4x|3230352e3138372e3136302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.50.52.53.46.49.53.50.46.48.47.50.49|4x|3230352e3234352e3135322e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.54.46.49.50.56.46.48.47.50.48|4x|3230362e3231362e3132382e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.49.54.48.46.48.47.49.57|4x|3230362e3231372e3136302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.50.50.52.46.48.47.49.57|4x|3230362e3231372e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.50.57.46.49.49.50.46.48.47.50.49|4x|3230362e3232392e3131322e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.49.49.50.46.48.47.50.48|4x|3230372e3232302e3131322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.50.48.56.46.48.47.50.48|4x|3230372e3232302e3230382e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.54.48.46.48.47.50.48|4x|3230372e3232322e3136302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.57.50.46.48.47.49.57|4x|3230372e3232322e3139322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.51.46.49.50.56.46.48.47.49.57|4x|3230372e3232332e3132382e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.56.46.49.57.55.46.50.52.56.46.48.47.50.49|4x|3230382e3139372e3234382e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.49.50.46.48.47.50.48|4x|3230392e3130382e3131322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.54.48.46.48.47.50.48|4x|3230392e3130382e3136302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.50.50.52.46.48.47.50.48|4x|3230392e3130382e3232342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.54.48.46.48.47.50.48|4x|3230392e3130392e3136302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.57.50.46.48.47.49.57|4x|3230392e3130392e3139322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.52.52.46.48.47.50.48|4x|3230392e3131302e3134342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.57.50.46.48.47.50.48|4x|3230392e3131302e3139322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.49.50.56.46.48.47.50.48|4x|3230392e3131312e3132382e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.50.50.52.46.48.47.49.57|4x|3230392e3131312e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.53.46.50.52.49.46.52.57.46.50.49.54.47.50.57|4x|36352e3234312e34392e3231362f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.57.46.50.50.55.46.50.52.48.46.56.56.47.50.57|4x|36392e3232372e3234302e38382f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.17.50.48.56.46.50.53.51.46.50.52.53.46.57.54.47.50.57|4x|3230382e3235332e3234352e39362f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.18.49.54.53.46.49.50.49.46.50.52.48.46.49.50.48.47.50.57|4x|3136352e3132312e3234302e3132302f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|4x|36312e34382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|4x|36312e34392e302e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|4x|36312e34392e342e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|4x|36312e34392e362e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|4x|36312e34392e372e302f3235 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|4x|36312e34392e382e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|4x|36312e35302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|4x|3132342e36342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.51.46.48.46.48.47.49.54|4x|3132352e33332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.52.46.48.46.48.47.49.54|4x|3132352e33342e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.53.46.48.46.48.47.49.55|4x|3132352e33352e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.57|4x|3230322e39362e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.56|4x|3230322e39392e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.55|4x|3231302e38322e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|4x|36312e3133352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|4x|36312e3134382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|4x|36312e34392e31362e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|4x|36312e34392e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|4x|36312e34392e36342e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|4x|3132332e3131322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|4x|3230322e3130362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|4x|3230322e3130382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.51.50.46.48.47.50.49|4x|3230322e39362e33322e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.48.46.48.47.50.51|4x|3230322e39362e34302e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.50.46.48.47.50.52|4x|3230322e39362e34322e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.52.46.48.47.50.50|4x|3230322e39362e34342e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.56.46.48.47.50.48|4x|3230322e39362e34382e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|4x|3231312e3134342e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|4x|3231392e3233322e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.48.46.50.52.57.46.48.46.48.47.49.56|4x|3232302e3234392e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.49.46.50.49.54.46.48.46.48.47.49.51|4x|3232312e3231362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.52|4x|3232322e3132382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|4x|36312e34392e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|4x|36312e34392e372e3134342f3238 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|4x|36312e34392e372e3136302f3237 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|4x|36312e34392e372e3139322f3236 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|4x|3231382e3234342e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|4x|3231392e3233352e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|4x|3230322e3133302e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|4x|3231312e3135342e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.49.54.48.46.48.47.49.57|4x|3231382e3130362e3136302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.50.52.48.46.48.47.50.48|4x|3231382e3130362e3234302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.55.46.49.50.56.46.48.47.49.56|4x|3231382e3130372e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.57.46.49.53.56.46.49.50.56.46.48.47.49.55|4x|3231392e3135382e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.11.54.48.46.48.46.48.46.48.47.49.49|4x|36302e302e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.48.46.48.46.48.47.49.51|4x|3131332e302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.56.46.48.46.48.47.49.53|4x|3131332e382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|4x|3131362e322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|4x|3131372e382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|4x|3131392e342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|4x|3132302e302e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|4x|3132332e342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|4x|3132332e382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|4x|3231382e372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|4x|3231382e382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|4x|3232312e302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|4x|3232312e382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.49.54.46.48.46.48.47.49.52|4x|35382e31362e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.48.46.48.46.48.47.49.53|4x|35382e32302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.50.46.48.46.48.47.49.56|4x|35382e32322e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.51.46.48.46.48.47.49.55|4x|35382e32332e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|4x|36302e35352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.49.46.52.56.46.48.46.48.47.49.51|4x|36312e34382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.54.46.48.46.48.47.49.53|4x|3131332e35362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.56.46.48.46.48.47.49.54|4x|3131332e35382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.57.46.48.46.48.47.49.55|4x|3131332e35392e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.54.46.48.46.48.47.49.54|4x|3131352e34362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.56.46.48.46.48.47.49.50|4x|3131352e34382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|4x|3131362e39352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|4x|3131382e37322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|4x|3131382e38302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|4x|3131392e33362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|4x|3131392e33392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|4x|3131392e34382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|4x|3131392e36322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|4x|3132302e38302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|4x|3132312e31362e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|4x|3132322e39362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|4x|3132342e36342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|4x|3132342e36362e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|4x|3132342e36372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.51|4x|3132342e38382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|4x|3132352e33322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|4x|3230322e39362e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|4x|3230322e39382e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|4x|3230322e39392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|4x|3230332e39332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|4x|3231302e31322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|4x|3231302e31352e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|4x|3231302e32312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|4x|3231302e32322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|4x|3231302e35312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|4x|3231302e35322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|4x|3231302e37382e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|4x|3231302e38322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|4x|3231382e31322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|4x|3231382e32342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|4x|3231382e32382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|4x|3231382e35362e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|4x|3231382e36302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|4x|3231382e36322e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|4x|3231382e36382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|4x|3232312e31322e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|4x|3232312e31332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|4x|3232312e31342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|4x|35382e3134342e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.54.52.46.48.47.49.57|4x|35382e32322e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.57.54.46.48.47.50.48|4x|35382e32322e39362e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|4x|35382e3234302e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|4x|36302e3230382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|4x|36312e3133332e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|4x|36312e3133352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|4x|36312e3133362e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|4x|36312e3133382e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|4x|36312e3134382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|4x|36312e3135362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|4x|36312e3135382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|4x|36312e3135392e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|4x|36312e3136312e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|4x|36312e3136322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|4x|36312e3136372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|4x|36312e3136382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|4x|36312e3137362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|4x|36312e3137392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|4x|36312e3138312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|4x|36312e3138322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|4x|36312e3138392e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.49.57.52.46.48.46.48.47.49.53|4x|3131332e3139342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.48.46.48.46.48.47.49.53|4x|3131332e3230302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.52.46.48.46.48.47.49.52|4x|3131332e3230342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.50.52.46.48.46.48.47.49.50|4x|3131332e3232342e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.52.46.50.52.48.46.48.46.48.47.49.50|4x|3131342e3234302e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|4x|3131362e3131322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|4x|3131362e3131362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|4x|3131382e3231322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|4x|3131392e3130382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|4x|3131392e3131322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|4x|3131392e3136322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|4x|3131392e3136342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|4x|3131392e3137362e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|4x|3131392e3234382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|4x|3132322e3133362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|4x|3132322e3135362e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|4x|3132322e3139322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|4x|3132332e3131322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|4x|3132332e3132382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|4x|3132332e3133372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|4x|3132332e3133382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|4x|3132332e3134342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|4x|3132332e3134382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|4x|3132332e3135322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|4x|3132332e3138382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|4x|3132332e3233322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|4x|3132342e3132382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|4x|3132342e3136302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|4x|3132352e3231312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|4x|3230322e3130362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|4x|3230322e3130372e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|4x|3230322e3130382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|4x|3230322e3131302e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|4x|3230322e39362e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|4x|3231302e37342e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|4x|3231312e3134342e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|4x|3231312e3135382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|4x|3231382e3130342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|4x|3231392e3135342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|4x|3231392e3135362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|4x|3231392e3135382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|4x|3231392e3135392e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|4x|3231392e3233322e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|4x|3232302e3234382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|4x|3232302e3235322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|4x|3232312e3133362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|4x|3232312e3139322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|4x|3232312e3139362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|4x|3232312e3139382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|4x|3232312e3139392e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|4x|3232312e3230302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|4x|3232312e3230382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|4x|3232322e3132382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|4x|3232322e3136302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.49.50.46.48.47.50.49|4x|35382e32322e3131322e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.50.56.46.48.47.49.55|4x|35382e32322e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.50.56.46.48.47.50.49|4x|35382e32332e3132382e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.52.52.46.48.47.50.48|4x|35382e32332e3134342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.54.48.46.48.47.49.57|4x|35382e32332e3136302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.57.50.46.48.47.49.56|4x|35382e32332e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|4x|36312e3133342e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.49.49.53.46.56.53.46.49.57.50.46.48.47.49.56|4x|3131352e38352e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|4x|3230322e39372e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|4x|3231302e31342e3136302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|4x|3231302e31342e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|4x|3231302e31352e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|4x|3231302e37342e3132382e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|4x|3231382e32312e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|4x|3231382e3234342e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|4x|3231382e36372e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|4x|3231392e3233352e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|4x|3232312e31322e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|4x|36312e3133342e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|4x|36312e3133372e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|4x|36312e3133382e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|4x|36312e3133392e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|4x|36312e3136312e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|4x|36312e3138302e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|4x|3230322e3130322e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|4x|3230322e3130322e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|4x|3230322e3131302e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|4x|3230322e3131312e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|4x|3230322e3133302e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|4x|3230332e3137352e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|4x|3231312e3135342e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|4x|3232312e3139392e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|4x|3232312e3139392e3139322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|4x|3232312e3139392e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.13.53.56.46.50.52.54.46.48.46.48.47.49.53|4x|35382e3234362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.49.48.46.49.51.46.54.52.46.48.47.49.56|4x|3231302e31332e36342e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.55|4x|3232302e3234382e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.49.46.48.46.48.47.49.54|4x|3131362e312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.52.46.48.46.48.47.49.52|4x|3131362e342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.56.46.48.46.48.47.49.52|4x|3131362e382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.57.46.48.46.48.46.48.47.49.53|4x|3131392e302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.49.46.56.46.48.46.48.47.49.51|4x|3132312e382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.50.46.52.46.48.46.48.47.49.52|4x|3132322e342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.48.46.48.46.48.47.49.52|4x|3231382e302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.52.46.48.46.48.47.49.53|4x|3231382e342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.54.46.48.46.48.47.49.54|4x|3231382e362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.49|4x|35382e33322e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.57.46.51.50.46.48.46.48.47.49.49|4x|35392e33322e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.52.46.57.54.46.48.46.48.47.49.51|4x|3131342e39362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.49.54.46.48.46.48.47.49.50|4x|3131362e31362e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.53.50.46.48.46.48.47.49.52|4x|3131362e35322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.49.46.48.46.48.47.49.54|4x|3131372e32312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.50.46.48.46.48.47.49.53|4x|3131372e32322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.52.46.48.46.48.47.49.51|4x|3131372e32342e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.51.50.46.48.46.48.47.49.51|4x|3131372e33322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.48.46.48.46.48.47.49.52|4x|3131372e34302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.52.46.48.46.48.47.49.53|4x|3131372e34342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.53.55.46.48.46.48.47.49.54|4x|3131372e35372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.48.46.48.46.48.47.49.52|4x|3131372e36302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.52.46.48.46.48.47.49.51|4x|3131372e36342e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.56.48.46.48.46.48.47.49.50|4x|3131372e38302e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.56.46.56.52.46.48.46.48.47.49.53|4x|3131382e38342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.52.49.46.48.46.48.47.49.54|4x|3131392e34312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.54.48.46.48.46.48.47.49.54|4x|3131392e36302e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.56.52.46.48.46.48.47.49.52|4x|3131392e38342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.57.54.46.48.46.48.47.49.51|4x|3131392e39362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.51.50.46.48.46.48.47.49.51|4x|3132302e33322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.52.48.46.48.46.48.47.49.52|4x|3132302e34302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.54.56.46.48.46.48.47.49.52|4x|3132302e36382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.51.50.46.48.46.48.47.49.52|4x|3132312e33322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.54.46.48.46.48.47.49.53|4x|3132312e35362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.56.46.48.46.48.47.49.55|4x|3132312e35382e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.57.46.48.46.48.47.49.54|4x|3132312e35392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.54.48.46.48.46.48.47.49.52|4x|3132312e36302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.53.50.46.48.46.48.47.49.52|4x|3132332e35322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.57.54.46.48.46.48.47.49.53|4x|3132332e39362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.51.49.46.48.46.48.47.49.54|4x|3132342e33312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.50.46.48.46.48.47.49.51|4x|3132342e37322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.53.46.54.52.46.48.46.48.47.49.49|4x|3132352e36342e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.48.50.46.57.55.46.48.46.48.47.49.55|4x|3230322e39372e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.51.46.48.46.48.47.49.54|4x|3231382e31332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.52.46.48.46.48.47.49.53|4x|3231382e31342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.54.46.48.46.48.47.49.52|4x|3231382e31362e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.48.46.48.46.48.47.49.54|4x|3231382e32302e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.49.46.48.46.48.47.49.55|4x|3231382e32312e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.50.46.48.46.48.47.49.53|4x|3231382e32322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.51.48.46.48.46.48.47.49.53|4x|3231382e33302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.51.46.48.46.48.47.49.54|4x|3231382e36332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.52.46.48.46.48.47.49.53|4x|3231382e36342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.54.46.48.46.48.47.49.54|4x|3231382e36362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.55.46.48.46.48.47.49.55|4x|3231382e36372e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.48.46.48.46.48.47.49.53|4x|3231382e37302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.50.46.48.46.48.47.49.51|4x|3231382e37322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.50|4x|3231382e38302e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.49|4x|3232322e36342e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.56.46.50.48.56.46.48.46.48.47.49.50|4x|35382e3230382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.57.46.49.55.50.46.48.46.48.47.49.52|4x|35392e3137322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.49.54.48.46.48.46.48.47.49.49|4x|36302e3136302e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.50.51.53.46.48.46.48.47.49.54|4x|36302e3233352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.50.56.46.48.46.48.47.49.52|4x|36312e3132382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.50.46.48.46.48.47.49.54|4x|36312e3133322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.52.46.48.46.48.47.49.56|4x|36312e3133342e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.55.46.48.46.48.47.49.55|4x|36312e3133372e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.57.46.48.46.48.47.49.55|4x|36312e3133392e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.48.46.48.46.48.47.49.52|4x|36312e3134302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.52.46.48.46.48.47.49.52|4x|36312e3134342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.48.46.48.46.48.47.49.53|4x|36312e3135302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.52|4x|36312e3135322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.55.46.48.46.48.47.49.54|4x|36312e3135372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.48.46.48.46.48.47.49.54|4x|36312e3136302e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.52.46.48.46.48.47.49.53|4x|36312e3136342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.54.46.48.46.48.47.49.54|4x|36312e3136362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|4x|36312e3136392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|4x|36312e3137302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.52|4x|36312e3137322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.55.46.48.46.48.47.49.54|4x|36312e3137372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.56.46.48.46.48.47.49.54|4x|36312e3137382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.48.46.48.46.48.47.49.55|4x|36312e3138302e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.51.46.48.46.48.47.49.54|4x|36312e3138332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.52.46.48.46.48.47.49.52|4x|36312e3138342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.56.46.48.46.48.47.49.54|4x|36312e3138382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.57.48.46.48.46.48.47.49.53|4x|36312e3139302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.52.46.49.48.52.46.48.46.48.47.49.52|4x|3131342e3130342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|4x|3131362e3139322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.55.46.48.46.48.47.49.54|4x|3131362e3230372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.56.46.48.46.48.47.49.52|4x|3131362e3230382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|4x|3131362e3232342e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|4x|3131362e3234362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.56.46.48.46.48.47.49.53|4x|3131362e3234382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.53.50.46.48.46.48.47.49.53|4x|3131362e3235322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.49.50.46.48.46.48.47.49.51|4x|3131382e3131322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.48.46.48.46.48.47.49.52|4x|3131382e3132302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.52.46.48.46.48.47.49.53|4x|3131382e3132342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.56.48.46.48.46.48.47.49.52|4x|3131382e3138302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.49.51.46.48.46.48.47.49.54|4x|3131382e3231332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.51.57.46.48.46.48.47.49.54|4x|3131382e3233392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.52.56.46.48.46.48.47.49.51|4x|3131382e3234382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.48.46.48.46.48.47.49.51|4x|3131392e3132302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.56.46.48.46.48.47.49.50|4x|3131392e3132382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.52.52.46.48.46.48.47.49.52|4x|3131392e3134342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.48.52.46.48.46.48.47.49.52|4x|3132312e3230342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.50.52.46.48.46.48.47.49.50|4x|3132312e3232342e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.50.52.46.48.46.48.47.49.50|4x|3132322e3232342e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.52.48.46.48.46.48.47.49.51|4x|3132322e3234302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.49.46.48.46.48.47.49.54|4x|3132332e3130312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.51.46.48.46.48.47.49.55|4x|3132332e3130332e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.52.57.46.48.46.48.47.49.54|4x|3132332e3134392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.53.48.46.48.46.48.47.49.53|4x|3132332e3135302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.54.48.46.48.46.48.47.49.50|4x|3132332e3136302e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.55.46.48.46.48.47.49.54|4x|3132332e3137372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.56.46.48.46.48.47.49.53|4x|3132332e3137382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.48.46.48.46.48.47.49.52|4x|3132332e3138302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.52.46.48.46.48.47.49.52|4x|3132332e3138342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.50.52.52.46.48.46.48.47.49.52|4x|3132332e3234342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.49.49.50.46.48.46.48.47.49.51|4x|3132342e3131322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.50.50.52.46.48.46.48.47.49.50|4x|3132342e3232342e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.48.52.46.48.46.48.47.49.51|4x|3132352e3130342e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.49.50.46.48.46.48.47.49.50|4x|3132352e3131322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.48.46.48.46.48.47.49.53|4x|3230322e3130302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.50.46.48.46.48.47.49.55|4x|3230322e3130322e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.51.46.48.46.48.47.49.54|4x|3230322e3130332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.52.46.48.46.48.47.49.53|4x|3230322e3130342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.54|4x|3230322e3130392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.49.49.46.48.46.48.47.49.55|4x|3230322e3131312e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.54.46.57.54.46.48.47.49.57|4x|3230322e39362e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.51.50.46.48.47.49.57|4x|3230322e39382e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.54.52.46.48.47.49.56|4x|3230322e39382e36342e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.51.46.50.49.50.46.48.46.48.47.50.48|4x|3230332e3231322e302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.50.56.46.48.46.48.47.49.50|4x|3231392e3132382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.52.52.46.48.46.48.47.49.51|4x|3231392e3134342e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.53.50.46.48.46.48.47.49.53|4x|3231392e3135322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.48.46.49.54.48.46.48.46.48.47.49.49|4x|3232302e3136302e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.49.46.50.50.52.46.48.46.48.47.49.50|4x|3232312e3232342e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.54.56.46.48.46.48.47.49.51|4x|3232322e3136382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.55.54.46.48.46.48.47.49.50|4x|3232322e3137362e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.48.56.46.48.46.48.47.49.50|4x|3232322e3230382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.52.48.46.48.46.48.47.49.51|4x|3232322e3234302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.51.52.46.54.52.46.48.47.49.57|4x|36312e3133342e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.53.57.46.54.52.46.48.47.49.56|4x|36312e3135392e36342e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.54.49.46.54.52.46.48.47.49.56|4x|36312e3136312e36342e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.52.57.46.55.46.49.50.56.47.50.56|4x|36312e34392e372e3132382f3238 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.49.50.50.46.49.48.50.46.56.48.46.48.47.50.48|4x|3132322e3130322e38302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.50.56.46.48.47.49.55|4x|3230322e39362e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.56.46.49.50.56.46.48.47.49.55|4x|3230322e39382e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.51.46.49.51.48.46.51.50.46.48.47.49.57|4x|3230332e3133302e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.48.46.49.57.50.46.57.54.46.48.47.49.57|4x|3231302e3139322e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.50.52.52.46.54.52.46.48.47.49.57|4x|3231382e3234342e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.54.50.46.49.50.56.46.48.47.49.55|4x|3231382e36322e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.57.46.49.53.57.46.54.52.46.48.47.49.56|4x|3231392e3135392e36342e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.51.46.49.50.56.46.48.47.49.55|4x|36312e3133332e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.54.46.49.50.56.46.48.47.49.55|4x|36312e3133362e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.56.46.49.57.50.46.48.47.49.56|4x|36312e3133382e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.57.46.49.57.50.46.48.47.49.56|4x|36312e3133392e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.53.57.46.49.50.56.46.48.47.49.55|4x|36312e3135392e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.56.57.46.49.50.56.46.48.47.49.55|4x|36312e3138392e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.57.50.46.48.47.49.57|4x|3230322e3130322e3139322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.55.46.49.50.56.46.48.47.49.55|4x|3230322e3130372e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.50.56.46.48.47.49.56|4x|3230322e3131302e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.57.50.46.48.47.49.56|4x|3230322e3131312e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.49.57.46.49.53.57.46.49.50.56.46.48.47.49.55|4x|3231392e3135392e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.50.49.56.46.49.46.48.46.48.47.49.54|4x|3231382e312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.51|4x|35382e33322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.52.48.46.48.46.48.47.49.53|4x|35382e34302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.52.46.48.46.48.47.49.53|4x|3132342e37342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.54.46.48.46.48.47.49.52|4x|3132342e37362e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.56.46.48.46.48.47.49.53|4x|3231382e37382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.52|4x|3231382e38302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.51|4x|3232322e36342e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.55.50.46.48.46.48.47.49.53|4x|3232322e37322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.49.46.48.46.48.47.49.54|4x|36312e3135312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.54|4x|36312e3135322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.53.46.48.46.48.47.49.54|4x|36312e3136352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|4x|36312e3136392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|4x|36312e3137302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.53|4x|36312e3137322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|4x|3131362e3139322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|4x|3131362e3232342e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|4x|3131362e3234362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.49.46.48.46.48.47.49.56|4x|3230322e3130312e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.55|4x|3230322e3130392e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.57.50.46.48.47.49.56|4x|3230322e39362e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.16.50.50.49.46.50.51.57.46.49.50.56.46.48.47.49.55|4x|3232312e3233392e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.49.55.46.49.50.56.46.48.46.48.47.49.48|4x|3131372e3132382e302e302f3130 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.50.48.46.49.57.50.46.48.46.48.47.49.48|4x|3132302e3139322e302e302f3130 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.48.51.46.48.46.48.47.49.55|4x|3231312e3130332e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.51.54.46.48.46.48.47.49.51|4x|3231312e3133362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.56.46.50.48.48.46.48.46.48.47.49.51|4x|3231382e3230302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.51.48.46.48.46.48.47.49.53|4x|3232312e3133302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.55.54.46.48.46.48.47.49.51|4x|3232312e3137362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.49.51.46.48.46.48.47.49.55|4x|3132322e31332e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.54.52.46.48.46.48.47.49.49|4x|3132322e36342e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.51.46.54.52.46.48.46.48.47.49.49|4x|3132332e36342e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.49.49.46.57.56.46.48.46.48.47.49.54|4x|3231312e39382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.50.50.46.51.50.46.48.46.48.47.49.49|4x|3232322e33322e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.50.46.48.46.48.47.49.52|4x|36312e3233322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.54.46.48.46.48.47.49.53|4x|36312e3233362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.14.50.50.49.46.49.55.50.46.48.46.48.47.49.52|4x|3232312e3137322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.15.49.50.50.46.49.51.46.49.50.56.46.48.47.49.56|4x|3132322e31332e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.12.53.57.46.54.52.46.48.46.48.47.49.50|4x|35392e36342e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.51.46.53.52.46.48.46.48.47.49.53|4x|3131332e35342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.53.46.50.52.46.48.46.48.47.49.52|4x|3131352e32342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.49.51.46.48.46.48.47.49.54|4x|3131362e31332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.54.46.48.46.48.47.49.55|4x|3131362e35362e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.55.46.48.46.48.47.49.54|4x|3131362e35372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.48.46.57.52.46.48.46.48.47.49.53|4x|3132302e39342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.49.46.52.56.46.48.46.48.47.49.53|4x|3132312e34382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.53.46.48.46.48.47.49.54|4x|3231302e32352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.54.46.48.46.48.47.49.53|4x|3231302e32362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.56.46.48.46.48.47.49.52|4x|3231302e32382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.51.50.46.48.46.48.47.49.50|4x|3231302e33322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.54.52.46.48.46.48.47.49.51|4x|3231312e36342e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.56.48.46.48.46.48.47.49.51|4x|3231312e38302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.50.50.46.49.54.46.48.46.48.47.49.50|4x|3232322e31362e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.53.52.46.48.46.48.47.49.53|4x|35382e3135342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.57.50.46.48.46.48.47.49.50|4x|35382e3139322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.50.46.48.46.48.47.49.53|4x|3131342e3231322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.52.46.48.46.48.47.49.54|4x|3131342e3231342e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.52.46.48.46.48.47.49.53|4x|3131352e3135342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.54.46.48.46.48.47.49.53|4x|3131352e3135362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.56.46.48.46.48.47.49.54|4x|3131352e3135382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.48.50.46.48.46.48.47.49.53|4x|3131382e3230322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.50.56.46.48.46.48.47.49.53|4x|3131382e3232382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.51.48.46.48.46.48.47.49.54|4x|3131382e3233302e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.49.57.50.46.48.46.48.47.49.52|4x|3132312e3139322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.50.52.56.46.48.46.48.47.49.52|4x|3132312e3234382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.50.46.50.48.52.46.48.46.48.47.49.52|4x|3132322e3230342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.53.46.50.49.54.46.48.46.48.47.49.51|4x|3132352e3231362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.49.50.46.48.46.48.47.49.51|4x|3230322e3131322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.50.48.46.48.46.48.47.49.53|4x|3230322e3132302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.57.50.46.48.46.48.47.49.50|4x|3230322e3139322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.51.56.46.57.54.46.48.47.49.57|4x|3230322e33382e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.56.46.49.57.50.46.48.46.48.47.49.51|4x|3231382e3139322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.49.54.46.48.46.48.47.49.51|4x|3231392e3231362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.50.52.46.48.46.48.47.49.51|4x|3231392e3232342e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.50.46.48.46.48.47.49.53|4x|3231392e3234322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.52.46.48.46.48.47.49.52|4x|3231392e3234342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.50.50.46.49.57.50.46.48.46.48.47.49.50|4x|3232322e3139322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.50.56.46.48.47.49.57|4x|3131362e35362e3132382e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.54.48.46.48.47.50.48|4x|3131362e35362e3136302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.55.54.46.48.47.50.51|4x|3131362e35362e3137362e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.48.46.48.47.50.50|4x|3131362e35362e3138302e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.52.46.48.47.50.49|4x|3131362e35362e3138342e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.57.50.46.48.47.49.56|4x|3131362e35362e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.50.49.46.53.50.46.49.54.48.46.48.47.49.57|4x|3132312e35322e3136302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.52.48.46.48.47.50.51|4x|3230322e33382e3134302e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.56.52.46.48.47.50.49|4x|3230322e33382e3138342e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.51.46.57.49.46.49.50.48.46.48.47.50.49|4x|3230332e39312e3132302e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.49.54.46.48.47.50.49|4x|3230322e3132372e3231362e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.50.52.46.48.47.49.57|4x|3230322e3132372e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.55.57.46.50.52.48.46.48.47.50.48|4x|3230322e3137392e3234302e302f3230 +1.3.6.1.4.1.3375.2.3.8.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.8.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.8.3.1.0|2|0 +1.3.6.1.4.1.3375.2.3.8.3.2.0|2|0 +1.3.6.1.4.1.3375.2.3.9.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.9.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.9.2.2.0|2|0 +1.3.6.1.4.1.3375.2.3.9.3.1.0|2|0 +1.3.6.1.4.1.3375.2.3.9.4.1.0|2|0 +1.3.6.1.4.1.3375.2.3.9.4.2.0|2|0 +1.3.6.1.4.1.3375.2.3.10.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.11.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.11.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.11.3.1.0|2|0 +1.3.6.1.4.1.3375.2.3.11.3.2.0|2|0 +1.3.6.1.4.1.3375.2.3.11.4.1.0|2|0 +1.3.6.1.4.1.3375.2.3.12.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.12.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.12.2.2.0|2|0 +1.3.6.1.4.1.3375.2.3.12.3.1.0|2|0 +1.3.6.1.4.1.3375.2.3.12.4.1.0|2|0 +1.3.6.1.4.1.3375.2.3.12.5.1.0|2|0 +1.3.6.1.4.1.3375.2.3.12.6.1.0|2|0 +1.3.6.1.4.1.3375.2.3.13.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.13.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.13.2.2.0|2|0 +1.3.6.1.4.1.3375.2.3.13.3.1.0|2|0 +1.3.6.1.4.1.3375.2.3.13.4.1.0|2|0 +1.3.6.1.4.1.3375.2.3.13.5.1.0|2|0 +1.3.6.1.4.1.3375.2.3.13.5.2.0|2|0 +1.3.6.1.4.1.3375.2.3.13.6.1.0|2|0 +1.3.6.1.4.1.3375.2.3.14.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.14.1.2.0|2|0 +1.3.6.1.4.1.3375.2.3.15.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.15.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.15.2.2.0|2|0 +1.3.6.1.4.1.3375.2.3.15.3.1.0|2|0 +1.3.6.1.4.1.3375.2.3.16.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.17.1.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.1.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.1.2.0|2|4 +1.3.6.1.4.1.3375.2.6.1.1.3.1.1.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|4|access +1.3.6.1.4.1.3375.2.6.1.1.3.1.1.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|4x|5f746d6d5f61706d5f61636c +1.3.6.1.4.1.3375.2.6.1.1.3.1.1.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|4x|5f746d6d5f61706d5f61636c +1.3.6.1.4.1.3375.2.6.1.1.3.1.1.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|4x|2f436f6d6d6f6e2f616363657373 +1.3.6.1.4.1.3375.2.6.1.1.3.1.2.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.2.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.2.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.2.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.3.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.3.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.3.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.3.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.4.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.4.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.4.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.4.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.5.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.5.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.5.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.5.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.6.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.6.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.6.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.6.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.7.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.7.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.7.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.7.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.8.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.8.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.8.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.8.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.9.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.9.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.9.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.9.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.10.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.10.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.10.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.10.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.11.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.11.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.11.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.11.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.12.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.12.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.12.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.12.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.13.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.13.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.13.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.13.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.14.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.14.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.14.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.14.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.15.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.15.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.15.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.15.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.16.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.16.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.16.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.16.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.17.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.17.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.17.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.17.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.18.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.18.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.18.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.18.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.19.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.19.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.19.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.19.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.20.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.20.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.20.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.20.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.21.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.21.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.21.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.21.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.22.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.22.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.22.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.22.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.23.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.23.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.23.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.23.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.24.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.24.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.24.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.24.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.25.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.25.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.25.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.25.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.26.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.26.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.26.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.26.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.27.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.27.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.27.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.27.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.28.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.28.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.28.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.28.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.29.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.29.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.29.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.29.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.30.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.30.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.30.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.30.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.31.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.31.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.31.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.31.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.32.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.32.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.32.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.32.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.33.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.33.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.33.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.33.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.34.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.34.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.34.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.34.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.35.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.35.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.35.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.35.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.36.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.36.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.36.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.36.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.37.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.37.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.37.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.37.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.38.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.38.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.38.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.38.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.39.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.39.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.39.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.39.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.40.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.40.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.40.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.40.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.41.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.41.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.41.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.41.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.42.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.42.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.42.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.42.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.43.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.43.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.43.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.43.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.44.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.44.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.44.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.44.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.45.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.45.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.45.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.45.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.46.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.46.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.46.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.46.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.47.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.47.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.47.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.47.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.48.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.48.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.48.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.48.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.49.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.49.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.49.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.49.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.50.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.50.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.50.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.50.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.51.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.51.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.51.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.51.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.52.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.52.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.52.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.52.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.53.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.53.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.53.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.53.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.54.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.54.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.54.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.54.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.55.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.55.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.55.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.55.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.56.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.56.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.56.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.56.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.57.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.57.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.57.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.57.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.58.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.58.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.58.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.58.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.59.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.59.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.59.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.59.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.60.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.60.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.60.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.60.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.61.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.61.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.61.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.61.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.62.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.62.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.62.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.62.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.63.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.63.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.63.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.63.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.64.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.64.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.64.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.64.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.65.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.65.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.65.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.65.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.66.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.66.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.66.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.66.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.67.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.67.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.67.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.67.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.68.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.68.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.68.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.68.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.69.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.69.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.69.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.69.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.70.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.70.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.70.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.70.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.71.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.71.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.71.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.71.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.72.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.72.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.72.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.72.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.73.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.73.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.73.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.73.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.74.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.74.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.74.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.74.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.75.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.75.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.75.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.75.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.76.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.76.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.76.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.76.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.77.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.77.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.77.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.77.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.78.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.78.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.78.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.78.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.79.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.79.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.79.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.79.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.80.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.80.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.80.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.80.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.81.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.81.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.81.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.81.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.82.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.82.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.82.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.82.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.83.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.83.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.83.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.83.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.84.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.84.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.84.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.84.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.85.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.85.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.85.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.85.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.86.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.86.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.86.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.86.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.87.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.87.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.87.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.87.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.88.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.88.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.88.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.88.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.89.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.89.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.89.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.89.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.90.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.90.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.90.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.90.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.91.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.91.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.91.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.91.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.92.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.92.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.92.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.92.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.93.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.93.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.93.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.93.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.94.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.94.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.94.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.94.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.95.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.95.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.95.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.95.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.96.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.96.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.96.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.96.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.97.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.97.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.97.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.97.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.98.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.98.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.98.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.98.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.99.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.99.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.99.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.99.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.100.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.100.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.100.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.100.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.101.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.101.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.101.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.101.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.102.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.102.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.102.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.102.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.103.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.103.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.103.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.103.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.104.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.104.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.104.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.104.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.105.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.105.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.105.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.105.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.106.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.106.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.106.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.106.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.107.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.107.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.107.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.107.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.108.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.108.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.108.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.108.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.109.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.109.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.109.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.109.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.110.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.110.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.110.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.110.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.111.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.111.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.111.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.111.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.112.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.112.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.112.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.112.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.113.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.113.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.113.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.113.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.114.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.114.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.114.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.114.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.115.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.115.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.115.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.115.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.116.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.116.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.116.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.116.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.117.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.117.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.117.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.117.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.118.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.118.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.118.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.118.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.119.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.119.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.119.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.119.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.120.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.120.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.120.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.120.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.121.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.121.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.121.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.121.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.122.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.122.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.122.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.122.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.123.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.123.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.123.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.123.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.124.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.124.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.124.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.124.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.125.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.125.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.125.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.125.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.126.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.126.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.126.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.126.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.127.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.127.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.127.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.127.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.128.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.128.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.128.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.128.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.129.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.129.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.129.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.129.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.130.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.130.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.130.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.130.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.131.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.131.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.131.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.131.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.132.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.132.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.132.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.132.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.133.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.133.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.133.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.133.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.134.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.134.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.134.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.134.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.135.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.135.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.135.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.135.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.136.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.136.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.136.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.136.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.137.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.137.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.137.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.137.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.138.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.138.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.138.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.138.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.139.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.139.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.139.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.139.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.140.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.140.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.140.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.140.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.141.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.141.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.141.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.141.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.142.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.142.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.142.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.142.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.143.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.143.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.143.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.143.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.144.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.144.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.144.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.144.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.145.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.145.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.145.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.145.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.146.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.146.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.146.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.146.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.147.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.147.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.147.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.147.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.148.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.148.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.148.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.148.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.149.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.149.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.149.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.149.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.150.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.150.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.150.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.150.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.151.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.151.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.151.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.151.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.152.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.152.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.152.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.152.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.153.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.153.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.153.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.153.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.154.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.154.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.154.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.154.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.155.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.155.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.155.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.155.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.156.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.156.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.156.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.156.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.157.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.157.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.157.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.157.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.158.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.158.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.158.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.158.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.159.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.159.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.159.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.159.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.160.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.160.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.160.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.160.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.161.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.161.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.161.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.161.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.162.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.162.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.162.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.162.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.163.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.163.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.163.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.163.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.164.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.164.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.164.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.164.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.165.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.165.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.165.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.165.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.166.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.166.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.166.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.166.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.167.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.167.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.167.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.167.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.168.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.168.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.168.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.168.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.169.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.169.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.169.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.169.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.170.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.170.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.170.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.170.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.171.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.171.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.171.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.171.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.172.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.172.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.172.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.172.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.173.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.173.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.173.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.173.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.174.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.174.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.174.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.174.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.175.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.175.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.175.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.175.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.176.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.176.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.176.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.176.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.177.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.177.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.177.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.177.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.178.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.178.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.178.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.178.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.179.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.179.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.179.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.179.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.180.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.180.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.180.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.180.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.181.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.181.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.181.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.181.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.182.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.182.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.182.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.182.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.183.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.183.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.183.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.183.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.184.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.184.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.184.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.184.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.185.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.185.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.185.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.185.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.186.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.186.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.186.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.186.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.187.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.187.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.187.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.187.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.188.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.188.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.188.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.188.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.189.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.189.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.189.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.189.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.190.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.190.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.190.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.190.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.191.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.191.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.191.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.191.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.192.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.192.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.192.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.192.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.193.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.193.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.193.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.193.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.194.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.194.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.194.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.194.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.195.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.195.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.195.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.195.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.196.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.196.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.196.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.196.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.197.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.197.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.197.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.197.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.198.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.198.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.198.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.198.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.199.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.199.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.199.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.199.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.200.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.200.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.200.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.200.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.201.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.201.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.201.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.201.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.202.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.202.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.202.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.202.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.203.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.203.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.203.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.203.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.204.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.204.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.204.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.204.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.205.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.205.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.205.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.205.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.206.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.206.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.206.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.206.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.207.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.207.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.207.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.207.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.208.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.208.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.208.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.208.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.209.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.209.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.209.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.209.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.210.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.210.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.210.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.210.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.211.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.211.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.211.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.211.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.212.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.212.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.212.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.212.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.213.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.213.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.213.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.213.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.214.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.214.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.214.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.214.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.215.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.215.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.215.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.215.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.216.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.216.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.216.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.216.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.217.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.217.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.217.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.217.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.218.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.218.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.218.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.218.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.219.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.219.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.219.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.219.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.220.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.220.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.220.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.220.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.221.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.221.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.221.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.221.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.222.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.222.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.222.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.222.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.223.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.223.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.223.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.223.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.224.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.224.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.224.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.224.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.225.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.225.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.225.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.225.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.226.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.226.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.226.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.226.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.227.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|4x|5f6c697374656e6572 +1.3.6.1.4.1.3375.2.6.1.1.3.1.227.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|4x|5f746d6d5f61706d5f6677645f7669705f68747470 +1.3.6.1.4.1.3375.2.6.1.1.3.1.227.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|4x|5f746d6d5f61706d5f6677645f7669705f687474705f69707636 +1.3.6.1.4.1.3375.2.6.1.1.3.1.227.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|4x|5f6c697374656e6572 +1.3.6.1.4.1.3375.2.6.1.1.3.1.228.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.228.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.228.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.228.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.229.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.229.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.229.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.229.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.2.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.2.2.0|2|1 +1.3.6.1.4.1.3375.2.6.1.2.3.1.1.20.47.67.111.109.109.111.110.47.99.111.110.110.101.99.116.105.118.105.116.121|4x|2f436f6d6d6f6e2f636f6e6e6563746976697479 +1.3.6.1.4.1.3375.2.6.1.2.3.1.2.20.47.67.111.109.109.111.110.47.99.111.110.110.101.99.116.105.118.105.116.121|70|0 +1.3.6.1.4.1.3375.2.6.1.2.3.1.3.20.47.67.111.109.109.111.110.47.99.111.110.110.101.99.116.105.118.105.116.121|70|0 +1.3.6.1.4.1.3375.2.6.1.2.3.1.4.20.47.67.111.109.109.111.110.47.99.111.110.110.101.99.116.105.118.105.116.121|70|0 +1.3.6.1.4.1.3375.2.6.1.2.3.1.5.20.47.67.111.109.109.111.110.47.99.111.110.110.101.99.116.105.118.105.116.121|70|0 +1.3.6.1.4.1.3375.2.6.1.2.3.1.6.20.47.67.111.109.109.111.110.47.99.111.110.110.101.99.116.105.118.105.116.121|70|0 +1.3.6.1.4.1.3375.2.6.1.2.3.1.7.20.47.67.111.109.109.111.110.47.99.111.110.110.101.99.116.105.118.105.116.121|70|0 +1.3.6.1.4.1.3375.2.6.1.2.3.1.8.20.47.67.111.109.109.111.110.47.99.111.110.110.101.99.116.105.118.105.116.121|70|0 +1.3.6.1.4.1.3375.2.6.1.3.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.3.2.0|2|3 +1.3.6.1.4.1.3375.2.6.1.3.3.1.1.15.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101|4x|2f436f6d6d6f6e2f72657772697465 +1.3.6.1.4.1.3375.2.6.1.3.3.1.1.22.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.112.111.114.116.97.108|4x|2f436f6d6d6f6e2f726577726974652d706f7274616c +1.3.6.1.4.1.3375.2.6.1.3.3.1.1.31.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.117.114.105.45.116.114.97.110.115.108.97.116.105.111.110|4x|2f436f6d6d6f6e2f726577726974652d7572692d7472616e736c6174696f6e +1.3.6.1.4.1.3375.2.6.1.3.3.1.2.15.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.2.22.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.112.111.114.116.97.108|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.2.31.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.117.114.105.45.116.114.97.110.115.108.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.3.15.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.3.22.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.112.111.114.116.97.108|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.3.31.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.117.114.105.45.116.114.97.110.115.108.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.4.15.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.4.22.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.112.111.114.116.97.108|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.4.31.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.117.114.105.45.116.114.97.110.115.108.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.5.15.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.5.22.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.112.111.114.116.97.108|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.5.31.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.117.114.105.45.116.114.97.110.115.108.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.6.15.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.6.22.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.112.111.114.116.97.108|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.6.31.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.117.114.105.45.116.114.97.110.115.108.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.7.15.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.7.22.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.112.111.114.116.97.108|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.7.31.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.117.114.105.45.116.114.97.110.115.108.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.8.15.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.8.22.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.112.111.114.116.97.108|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.8.31.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.117.114.105.45.116.114.97.110.115.108.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.9.15.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.9.22.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.112.111.114.116.97.108|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.9.31.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.117.114.105.45.116.114.97.110.115.108.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.6.1.4.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.4.2.0|66|0 +1.3.6.1.4.1.3375.2.6.1.4.3.0|66|0 +1.3.6.1.4.1.3375.2.6.1.4.4.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.5.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.6.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.7.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.8.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.9.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.10.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.11.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.12.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.13.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.14.0|70|0 +1.3.6.1.4.1.3375.2.6.1.5.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.5.2.0|70|0 +1.3.6.1.4.1.3375.2.6.1.5.3.0|66|0 +1.3.6.1.4.1.3375.2.6.1.5.4.0|70|0 +1.3.6.1.4.1.3375.2.6.1.5.5.0|70|0 +1.3.6.1.4.1.3375.2.6.1.5.6.0|70|0 +1.3.6.1.4.1.3375.2.6.1.5.7.0|70|0 +1.3.6.1.4.1.3375.2.6.1.5.8.0|70|0 +1.3.6.1.4.1.3375.2.6.1.6.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.6.2.0|70|0 +1.3.6.1.4.1.3375.2.6.1.6.3.0|70|0 +1.3.6.1.4.1.3375.2.6.1.6.4.0|70|0 +1.3.6.1.4.1.3375.2.6.1.6.5.0|70|0 +1.3.6.1.4.1.3375.2.6.1.6.6.0|70|0 +1.3.6.1.4.1.3375.2.6.1.6.7.0|70|0 +1.3.6.1.4.1.3375.2.6.1.6.8.0|70|0 +1.3.6.1.4.1.3375.2.6.1.6.9.0|70|0 +1.3.6.1.4.1.3375.2.6.1.7.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.7.2.0|2|0 +1.3.6.1.4.1.3375.2.6.1.8.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.8.2.0|2|0 +1.3.6.1.4.1.3375.2.6.1.9.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.9.2.0|66|10 +1.3.6.1.4.1.3375.2.6.1.9.3.0|66|10 +1.3.6.1.4.1.3375.2.6.1.9.4.0|66|0 +1.3.6.1.4.1.3375.2.6.1.9.5.0|66|10 +1.3.6.1.4.1.3375.2.6.2.1.1.0|2|0 +1.3.6.1.4.1.3375.2.6.2.1.2.0|2|0 +1.3.6.1.4.1.3375.2.6.3.1.1.0|2|0 +1.3.6.1.4.1.3375.2.6.3.1.2.0|2|0 +1.3.6.1.4.1.3375.2.6.4.1.1.0|2|0 +1.3.6.1.4.1.3375.2.6.4.1.2.0|2|0 +1.3.6.1.4.1.8072.1.3.2.1.0|2|0 +1.3.6.1.4.1.14706.1.1.1|4x|312e333b4635204e6574776f726b733b312e3000 +1.3.6.1.4.1.14706.1.1.2|2|1 +1.3.6.1.4.1.14706.1.1.3|4x|7f000001 +1.3.6.1.4.1.14706.1.1.4.1.1.1|2|1 +1.3.6.1.4.1.14706.1.1.4.1.1.2|2|2 +1.3.6.1.4.1.14706.1.1.4.1.1.3|2|3 +1.3.6.1.4.1.14706.1.1.4.1.1.4|2|4 +1.3.6.1.4.1.14706.1.1.4.1.1.5|2|5 +1.3.6.1.4.1.14706.1.1.4.1.1.6|2|6 +1.3.6.1.4.1.14706.1.1.4.1.1.7|2|7 +1.3.6.1.4.1.14706.1.1.4.1.1.8|2|8 +1.3.6.1.4.1.14706.1.1.4.1.1.9|2|9 +1.3.6.1.4.1.14706.1.1.4.1.1.10|2|10 +1.3.6.1.4.1.14706.1.1.4.1.2.1|4| +1.3.6.1.4.1.14706.1.1.4.1.2.2|4| +1.3.6.1.4.1.14706.1.1.4.1.2.3|4| +1.3.6.1.4.1.14706.1.1.4.1.2.4|4| +1.3.6.1.4.1.14706.1.1.4.1.2.5|4| +1.3.6.1.4.1.14706.1.1.4.1.2.6|4| +1.3.6.1.4.1.14706.1.1.4.1.2.7|4| +1.3.6.1.4.1.14706.1.1.4.1.2.8|4| +1.3.6.1.4.1.14706.1.1.4.1.2.9|4| +1.3.6.1.4.1.14706.1.1.4.1.2.10|4| +1.3.6.1.4.1.14706.1.1.4.1.3.1|2|0 +1.3.6.1.4.1.14706.1.1.4.1.3.2|2|0 +1.3.6.1.4.1.14706.1.1.4.1.3.3|2|0 +1.3.6.1.4.1.14706.1.1.4.1.3.4|2|0 +1.3.6.1.4.1.14706.1.1.4.1.3.5|2|0 +1.3.6.1.4.1.14706.1.1.4.1.3.6|2|0 +1.3.6.1.4.1.14706.1.1.4.1.3.7|2|0 +1.3.6.1.4.1.14706.1.1.4.1.3.8|2|0 +1.3.6.1.4.1.14706.1.1.4.1.3.9|2|0 +1.3.6.1.4.1.14706.1.1.4.1.3.10|2|0 +1.3.6.1.4.1.14706.1.1.4.1.4.1|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.4.2|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.4.3|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.4.4|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.4.5|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.4.6|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.4.7|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.4.8|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.4.9|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.4.10|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.5.1|2|1 +1.3.6.1.4.1.14706.1.1.4.1.5.2|2|1 +1.3.6.1.4.1.14706.1.1.4.1.5.3|2|1 +1.3.6.1.4.1.14706.1.1.4.1.5.4|2|1 +1.3.6.1.4.1.14706.1.1.4.1.5.5|2|1 +1.3.6.1.4.1.14706.1.1.4.1.5.6|2|1 +1.3.6.1.4.1.14706.1.1.4.1.5.7|2|1 +1.3.6.1.4.1.14706.1.1.4.1.5.8|2|1 +1.3.6.1.4.1.14706.1.1.4.1.5.9|2|1 +1.3.6.1.4.1.14706.1.1.4.1.5.10|2|1 +1.3.6.1.4.1.14706.1.1.4.1.6.1|4| +1.3.6.1.4.1.14706.1.1.4.1.6.2|4| +1.3.6.1.4.1.14706.1.1.4.1.6.3|4| +1.3.6.1.4.1.14706.1.1.4.1.6.4|4| +1.3.6.1.4.1.14706.1.1.4.1.6.5|4| +1.3.6.1.4.1.14706.1.1.4.1.6.6|4| +1.3.6.1.4.1.14706.1.1.4.1.6.7|4| +1.3.6.1.4.1.14706.1.1.4.1.6.8|4| +1.3.6.1.4.1.14706.1.1.4.1.6.9|4| +1.3.6.1.4.1.14706.1.1.4.1.6.10|4| +1.3.6.1.4.1.14706.1.1.4.1.7.1|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.7.2|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.7.3|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.7.4|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.7.5|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.7.6|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.7.7|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.7.8|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.7.9|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.7.10|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.8.1|2|5 +1.3.6.1.4.1.14706.1.1.4.1.8.2|2|5 +1.3.6.1.4.1.14706.1.1.4.1.8.3|2|5 +1.3.6.1.4.1.14706.1.1.4.1.8.4|2|5 +1.3.6.1.4.1.14706.1.1.4.1.8.5|2|5 +1.3.6.1.4.1.14706.1.1.4.1.8.6|2|5 +1.3.6.1.4.1.14706.1.1.4.1.8.7|2|5 +1.3.6.1.4.1.14706.1.1.4.1.8.8|2|5 +1.3.6.1.4.1.14706.1.1.4.1.8.9|2|5 +1.3.6.1.4.1.14706.1.1.4.1.8.10|2|5 +1.3.6.1.6.3.1.1.6.1.0|2|697276497 +1.3.6.1.6.3.10.2.1.1.0|4x|80001f88804a49c41225c7915d +1.3.6.1.6.3.10.2.1.2.0|2|31 +1.3.6.1.6.3.10.2.1.3.0|2|1813186 +1.3.6.1.6.3.10.2.1.4.0|2|1500 +1.3.6.1.6.3.11.2.1.1.0|65|0 +1.3.6.1.6.3.11.2.1.2.0|65|0 +1.3.6.1.6.3.11.2.1.3.0|65|0 +1.3.6.1.6.3.12.1.1.0|2|0 +1.3.6.1.6.3.12.1.4.0|65|0 +1.3.6.1.6.3.12.1.5.0|65|0 +1.3.6.1.6.3.15.1.1.1.0|65|0 +1.3.6.1.6.3.15.1.1.2.0|65|0 +1.3.6.1.6.3.15.1.1.3.0|65|0 +1.3.6.1.6.3.15.1.1.4.0|65|97 +1.3.6.1.6.3.15.1.1.5.0|65|0 +1.3.6.1.6.3.15.1.1.6.0|65|0 +1.3.6.1.6.3.15.1.2.1.0|2|0 +1.3.6.1.6.3.15.1.2.2.1.3.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|4|datadog +1.3.6.1.6.3.15.1.2.2.1.4.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|6|0.0 +1.3.6.1.6.3.15.1.2.2.1.5.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|6|1.3.6.1.6.3.10.1.1.3 +1.3.6.1.6.3.15.1.2.2.1.6.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|4| +1.3.6.1.6.3.15.1.2.2.1.7.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|4| +1.3.6.1.6.3.15.1.2.2.1.8.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|6|1.3.6.1.6.3.10.1.2.4 +1.3.6.1.6.3.15.1.2.2.1.9.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|4| +1.3.6.1.6.3.15.1.2.2.1.10.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|4| +1.3.6.1.6.3.15.1.2.2.1.11.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|4| +1.3.6.1.6.3.15.1.2.2.1.12.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|2|3 +1.3.6.1.6.3.15.1.2.2.1.13.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|2|1 +1.3.6.1.6.3.16.1.1.1.1.0|4| +1.3.6.1.6.3.16.1.2.1.3.1.6.99.111.109.109.53.56|4|grpcomm58 +1.3.6.1.6.3.16.1.2.1.3.2.6.99.111.109.109.53.56|4|grpcomm58 +1.3.6.1.6.3.16.1.2.1.3.3.7.100.97.116.97.100.111.103|4|grpdatadog +1.3.6.1.6.3.16.1.2.1.4.1.6.99.111.109.109.53.56|2|4 +1.3.6.1.6.3.16.1.2.1.4.2.6.99.111.109.109.53.56|2|4 +1.3.6.1.6.3.16.1.2.1.4.3.7.100.97.116.97.100.111.103|2|4 +1.3.6.1.6.3.16.1.2.1.5.1.6.99.111.109.109.53.56|2|1 +1.3.6.1.6.3.16.1.2.1.5.2.6.99.111.109.109.53.56|2|1 +1.3.6.1.6.3.16.1.2.1.5.3.7.100.97.116.97.100.111.103|2|1 +1.3.6.1.6.3.16.1.4.1.4.9.103.114.112.99.111.109.109.53.56.0.0.1|2|2 +1.3.6.1.6.3.16.1.4.1.4.10.103.114.112.100.97.116.97.100.111.103.0.3.3|2|2 +1.3.6.1.6.3.16.1.4.1.5.9.103.114.112.99.111.109.109.53.56.0.0.1|4x|5f616c6c5f +1.3.6.1.6.3.16.1.4.1.5.10.103.114.112.100.97.116.97.100.111.103.0.3.3|4|viewUSM59 +1.3.6.1.6.3.16.1.4.1.6.9.103.114.112.99.111.109.109.53.56.0.0.1|4|none +1.3.6.1.6.3.16.1.4.1.6.10.103.114.112.100.97.116.97.100.111.103.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.7.9.103.114.112.99.111.109.109.53.56.0.0.1|4|none +1.3.6.1.6.3.16.1.4.1.7.10.103.114.112.100.97.116.97.100.111.103.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.8.9.103.114.112.99.111.109.109.53.56.0.0.1|2|4 +1.3.6.1.6.3.16.1.4.1.8.10.103.114.112.100.97.116.97.100.111.103.0.3.3|2|4 +1.3.6.1.6.3.16.1.4.1.9.9.103.114.112.99.111.109.109.53.56.0.0.1|2|1 +1.3.6.1.6.3.16.1.4.1.9.10.103.114.112.100.97.116.97.100.111.103.0.3.3|2|1 +1.3.6.1.6.3.16.1.5.1.0|2|0 +1.3.6.1.6.3.16.1.5.2.1.3.5.95.97.108.108.95.1.0|4| +1.3.6.1.6.3.16.1.5.2.1.3.5.95.97.108.108.95.1.1|4| +1.3.6.1.6.3.16.1.5.2.1.3.5.95.97.108.108.95.1.2|4| +1.3.6.1.6.3.16.1.5.2.1.3.6.95.110.111.110.101.95.1.0|4| +1.3.6.1.6.3.16.1.5.2.1.3.6.95.110.111.110.101.95.1.1|4| +1.3.6.1.6.3.16.1.5.2.1.3.6.95.110.111.110.101.95.1.2|4| +1.3.6.1.6.3.16.1.5.2.1.3.9.118.105.101.119.85.83.77.53.57.4.1.3.6.1|4| +1.3.6.1.6.3.16.1.5.2.1.4.5.95.97.108.108.95.1.0|2|1 +1.3.6.1.6.3.16.1.5.2.1.4.5.95.97.108.108.95.1.1|2|1 +1.3.6.1.6.3.16.1.5.2.1.4.5.95.97.108.108.95.1.2|2|1 +1.3.6.1.6.3.16.1.5.2.1.4.6.95.110.111.110.101.95.1.0|2|2 +1.3.6.1.6.3.16.1.5.2.1.4.6.95.110.111.110.101.95.1.1|2|2 +1.3.6.1.6.3.16.1.5.2.1.4.6.95.110.111.110.101.95.1.2|2|2 +1.3.6.1.6.3.16.1.5.2.1.4.9.118.105.101.119.85.83.77.53.57.4.1.3.6.1|2|1 +1.3.6.1.6.3.16.1.5.2.1.5.5.95.97.108.108.95.1.0|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.5.95.97.108.108.95.1.1|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.5.95.97.108.108.95.1.2|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.6.95.110.111.110.101.95.1.0|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.6.95.110.111.110.101.95.1.1|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.6.95.110.111.110.101.95.1.2|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.9.118.105.101.119.85.83.77.53.57.4.1.3.6.1|2|4 +1.3.6.1.6.3.16.1.5.2.1.6.5.95.97.108.108.95.1.0|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.5.95.97.108.108.95.1.1|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.5.95.97.108.108.95.1.2|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.6.95.110.111.110.101.95.1.0|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.6.95.110.111.110.101.95.1.1|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.6.95.110.111.110.101.95.1.2|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.9.118.105.101.119.85.83.77.53.57.4.1.3.6.1|2|1 diff --git a/test/new-e2e/ndm/snmp/compose/data/fortinet-fortigate.snmprec b/test/new-e2e/ndm/snmp/compose/data/fortinet-fortigate.snmprec new file mode 100644 index 00000000000000..88f44b005c890f --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/fortinet-fortigate.snmprec @@ -0,0 +1,77 @@ +1.3.6.1.2.1.1.2.0|4|1.3.6.1.4.1.12356.101.1.1 +1.3.6.1.2.1.47.1.1.1.1.2.1|4|Fortinet FGT_501E, HW Serial#: FG5H1E5110000000 +1.3.6.1.2.1.47.1.1.1.1.3.1|6|1.3.6.1.4.1.12356.5006.5006.0 +1.3.6.1.2.1.47.1.1.1.1.4.1|2|0 +1.3.6.1.2.1.47.1.1.1.1.5.1|2|3 +1.3.6.1.2.1.47.1.1.1.1.6.1|2|-1 +1.3.6.1.2.1.47.1.1.1.1.7.1|4|FGT_501E +1.3.6.1.2.1.47.1.1.1.1.8.1|4| +1.3.6.1.2.1.47.1.1.1.1.9.1|4| +1.3.6.1.2.1.47.1.1.1.1.10.1|4|FortiGate-501E v5.6.4,build1575b1575,180425 (GA) +1.3.6.1.2.1.47.1.1.1.1.11.1|4|FG5H1E5110000000 +1.3.6.1.2.1.47.1.1.1.1.12.1|4|Fortinet +1.3.6.1.2.1.47.1.1.1.1.13.1|4|FGT_501E +1.3.6.1.2.1.47.1.1.1.1.14.1|4| +1.3.6.1.2.1.47.1.1.1.1.15.1|4| +1.3.6.1.2.1.47.1.1.1.1.16.1|2|1 +1.3.6.1.2.1.47.1.1.1.1.17.1|4| +1.3.6.1.2.1.47.1.1.1.1.18.1|4| +1.3.6.1.4.1.12356.101.3.1.1.0|2|26 +1.3.6.1.4.1.12356.101.3.1.2.0|2|4 +1.3.6.1.4.1.12356.101.3.1.3.0|2|2 +1.3.6.1.4.1.12356.101.3.2.1.1.1.4|2|4 +1.3.6.1.4.1.12356.101.3.2.1.1.2.4|4x|7468656972206f78656e20717561696e746c79 +1.3.6.1.4.1.12356.101.3.2.1.1.3.4|2|1 +1.3.6.1.4.1.12356.101.3.2.1.1.4.4|2|2 +1.3.6.1.4.1.12356.101.3.2.1.1.5.4|66|42 +1.3.6.1.4.1.12356.101.3.2.1.1.6.4|66|33 +1.3.6.1.4.1.12356.101.3.2.1.1.7.4|66|2989472966 +1.3.6.1.4.1.12356.101.3.2.1.1.8.4|66|1080381326 +1.3.6.1.4.1.12356.101.4.1.1.0|4|v5.6.4,build1575b1575,180425 (GA) +1.3.6.1.4.1.12356.101.4.1.2.0|2|26 +1.3.6.1.4.1.12356.101.4.1.3.0|66|10 +1.3.6.1.4.1.12356.101.4.1.4.0|66|29 +1.3.6.1.4.1.12356.101.4.1.5.0|66|2289080295 +1.3.6.1.4.1.12356.101.4.1.6.0|66|1268728682 +1.3.6.1.4.1.12356.101.4.1.7.0|66|4157079948 +1.3.6.1.4.1.12356.101.4.1.8.0|66|2483533213 +1.3.6.1.4.1.12356.101.4.1.9.0|66|38 +1.3.6.1.4.1.12356.101.4.1.10.0|66|4005490351 +1.3.6.1.4.1.12356.101.4.1.11.0|66|721053226 +1.3.6.1.4.1.12356.101.4.1.12.0|66|4201127826 +1.3.6.1.4.1.12356.101.4.1.13.0|66|285761508 +1.3.6.1.4.1.12356.101.4.1.14.0|66|1305300731 +1.3.6.1.4.1.12356.101.4.1.15.0|66|3930350334 +1.3.6.1.4.1.12356.101.4.1.16.0|66|490490644 +1.3.6.1.4.1.12356.101.4.1.17.0|66|3157833604 +1.3.6.1.4.1.12356.101.4.1.18.0|66|3500286743 +1.3.6.1.4.1.12356.101.4.1.19.0|66|1959290694 +1.3.6.1.4.1.12356.101.4.1.20.0|70|14789083134851123033 +1.3.6.1.4.1.12356.101.4.4.2.1.1.12|2|12 +1.3.6.1.4.1.12356.101.4.4.2.1.2.12|66|44 +1.3.6.1.4.1.12356.101.4.4.2.1.6.12|70|6053432544510993268 +1.3.6.1.4.1.12356.101.4.4.2.1.7.12|70|4558642640541757871 +1.3.6.1.4.1.12356.101.4.4.2.1.8.12|70|18335276119483080244 +1.3.6.1.4.1.12356.101.4.4.2.1.9.12|66|91 +1.3.6.1.4.1.12356.101.4.4.2.1.10.12|66|20 +1.3.6.1.4.1.12356.101.5.1.2.1.1.1.2.22|2|22 +1.3.6.1.4.1.12356.101.5.1.2.1.1.2.2.22|65|3921966751 +1.3.6.1.4.1.12356.101.5.1.2.1.1.3.2.22|65|59854764 +1.3.6.1.4.1.12356.101.5.1.2.1.1.4.2.22|4x|4a6164656420666f72776172642064726976696e6720746865697220717561696e746c7920717561696e746c79206b657074206b657074 +1.3.6.1.4.1.12356.101.5.1.2.1.1.5.2.22|70|10146562834102172440 +1.3.6.1.4.1.12356.101.5.1.2.1.1.6.2.22|70|4417853499527088953 +1.3.6.1.4.1.12356.101.5.1.2.2.1.1.5.29|2|29 +1.3.6.1.4.1.12356.101.5.1.2.2.1.2.5.29|70|13218909809640136190 +1.3.6.1.4.1.12356.101.5.1.2.2.1.3.5.29|70|9058397767704808189 +1.3.6.1.4.1.12356.101.5.1.2.2.1.4.5.29|4x|4a61646564204a61646564 +1.3.6.1.4.1.12356.101.7.2.1.1.1.1|2|19 +1.3.6.1.4.1.12356.101.10.100.4.0|66|25504 +1.3.6.1.4.1.12356.101.10.100.5.0|66|817 +1.3.6.1.4.1.12356.101.12.2.2.1.2.1|4|ESMAO-Lomtec +1.3.6.1.4.1.12356.101.12.2.2.1.2.2|4|ESMAO +1.3.6.1.4.1.12356.101.12.2.2.1.18.1|70|3896031866066683889 +1.3.6.1.4.1.12356.101.12.2.2.1.18.2|70|13218909809640136190 +1.3.6.1.4.1.12356.101.12.2.2.1.19.1|70|3518073560493506800 +1.3.6.1.4.1.12356.101.12.2.2.1.19.2|70|9058397767704808189 +1.3.6.1.4.1.12356.101.12.2.2.1.20.1|2|2 +1.3.6.1.4.1.12356.101.12.2.2.1.20.2|2|1 diff --git a/test/new-e2e/ndm/snmp/compose/data/generic-router.snmprec b/test/new-e2e/ndm/snmp/compose/data/generic-router.snmprec new file mode 100644 index 00000000000000..93f6cf7f4a30a2 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/generic-router.snmprec @@ -0,0 +1,1008 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.1.2.1.3.4 +1.3.6.1.2.1.2.1.0|2|2 +1.3.6.1.2.1.2.2.1.1.13|2|13 +1.3.6.1.2.1.2.2.1.1.15|2|15 +1.3.6.1.2.1.2.2.1.2.13|4x|65746830 +1.3.6.1.2.1.2.2.1.2.15|4x|65746831 +1.3.6.1.2.1.2.2.1.3.13|2|1 +1.3.6.1.2.1.2.2.1.3.15|2|25 +1.3.6.1.2.1.2.2.1.4.13|2|6 +1.3.6.1.2.1.2.2.1.4.15|2|17 +1.3.6.1.2.1.2.2.1.5.13|66|2331660664 +1.3.6.1.2.1.2.2.1.5.15|66|4163430592 +1.3.6.1.2.1.2.2.1.6.13|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.15|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.7.13|2|1 +1.3.6.1.2.1.2.2.1.7.15|2|3 +1.3.6.1.2.1.2.2.1.8.13|2|6 +1.3.6.1.2.1.2.2.1.8.15|2|4 +1.3.6.1.2.1.2.2.1.9.13|67|3458704566 +1.3.6.1.2.1.2.2.1.9.15|67|808281843 +1.3.6.1.2.1.2.2.1.10.13|65|1341952665 +1.3.6.1.2.1.2.2.1.10.15|65|4089479451 +1.3.6.1.2.1.2.2.1.11.13|65|2423700286 +1.3.6.1.2.1.2.2.1.11.15|65|3105545509 +1.3.6.1.2.1.2.2.1.12.13|65|2909048034 +1.3.6.1.2.1.2.2.1.12.15|65|3800287858 +1.3.6.1.2.1.2.2.1.13.13|65|3469490196 +1.3.6.1.2.1.2.2.1.13.15|65|1207715996 +1.3.6.1.2.1.2.2.1.14.13|65|3036907431 +1.3.6.1.2.1.2.2.1.14.15|65|2271913528 +1.3.6.1.2.1.2.2.1.15.13|65|1147964703 +1.3.6.1.2.1.2.2.1.15.15|65|32911865 +1.3.6.1.2.1.2.2.1.16.13|65|2182933189 +1.3.6.1.2.1.2.2.1.16.15|65|2122506434 +1.3.6.1.2.1.2.2.1.17.13|65|2459418639 +1.3.6.1.2.1.2.2.1.17.15|65|368059933 +1.3.6.1.2.1.2.2.1.18.13|65|4265068773 +1.3.6.1.2.1.2.2.1.18.15|65|1888961269 +1.3.6.1.2.1.2.2.1.19.13|65|883454404 +1.3.6.1.2.1.2.2.1.19.15|65|3019639136 +1.3.6.1.2.1.2.2.1.20.13|65|796620246 +1.3.6.1.2.1.2.2.1.20.15|65|265866093 +1.3.6.1.2.1.2.2.1.21.13|66|937466031 +1.3.6.1.2.1.2.2.1.21.15|66|2221236799 +1.3.6.1.2.1.2.2.1.22.13|6|1.3.6.1.3.107.152 +1.3.6.1.2.1.2.2.1.22.15|6|1.3.6.1.3.246.10.85.214 +1.3.6.1.2.1.4.1.0|2|2 +1.3.6.1.2.1.4.2.0|2|8 +1.3.6.1.2.1.4.3.0|65|3546637224 +1.3.6.1.2.1.4.4.0|65|2130923619 +1.3.6.1.2.1.4.5.0|65|1742824739 +1.3.6.1.2.1.4.6.0|65|1458658850 +1.3.6.1.2.1.4.7.0|65|1114590264 +1.3.6.1.2.1.4.8.0|65|3069832299 +1.3.6.1.2.1.4.9.0|65|2515896620 +1.3.6.1.2.1.4.10.0|65|3192933475 +1.3.6.1.2.1.4.11.0|65|1635654711 +1.3.6.1.2.1.4.12.0|65|158382596 +1.3.6.1.2.1.4.13.0|2|22 +1.3.6.1.2.1.4.14.0|65|128210379 +1.3.6.1.2.1.4.15.0|65|4215753440 +1.3.6.1.2.1.4.16.0|65|410770522 +1.3.6.1.2.1.4.17.0|65|443515482 +1.3.6.1.2.1.4.18.0|65|3687632801 +1.3.6.1.2.1.4.19.0|65|3948711557 +1.3.6.1.2.1.4.20.1.1.9.208.150.23|64x|09d09617 +1.3.6.1.2.1.4.20.1.1.200.11.80.108|64x|c80b506c +1.3.6.1.2.1.4.20.1.1.223.237.133.97|64x|dfed8561 +1.3.6.1.2.1.4.20.1.1.246.244.204.67|64x|f6f4cc43 +1.3.6.1.2.1.4.20.1.2.9.208.150.23|2|30 +1.3.6.1.2.1.4.20.1.2.200.11.80.108|2|1 +1.3.6.1.2.1.4.20.1.2.223.237.133.97|2|16 +1.3.6.1.2.1.4.20.1.2.246.244.204.67|2|28 +1.3.6.1.2.1.4.20.1.3.9.208.150.23|64x|4a909350 +1.3.6.1.2.1.4.20.1.3.200.11.80.108|64x|32a8da55 +1.3.6.1.2.1.4.20.1.3.223.237.133.97|64x|840e95c2 +1.3.6.1.2.1.4.20.1.3.246.244.204.67|64x|c0dc2c8d +1.3.6.1.2.1.4.20.1.4.9.208.150.23|2|1 +1.3.6.1.2.1.4.20.1.4.200.11.80.108|2|1 +1.3.6.1.2.1.4.20.1.4.223.237.133.97|2|1 +1.3.6.1.2.1.4.20.1.4.246.244.204.67|2|0 +1.3.6.1.2.1.4.20.1.5.9.208.150.23|2|1 +1.3.6.1.2.1.4.20.1.5.200.11.80.108|2|12 +1.3.6.1.2.1.4.20.1.5.223.237.133.97|2|7 +1.3.6.1.2.1.4.20.1.5.246.244.204.67|2|2 +1.3.6.1.2.1.4.22.1.1.6.169.28.142.191|2|6 +1.3.6.1.2.1.4.22.1.1.8.175.113.74.135|2|8 +1.3.6.1.2.1.4.22.1.1.25.126.182.179.115|2|25 +1.3.6.1.2.1.4.22.1.1.29.225.213.228.189|2|29 +1.3.6.1.2.1.4.22.1.2.6.169.28.142.191|4x|42010aa40033 +1.3.6.1.2.1.4.22.1.2.8.175.113.74.135|4x|42010aa40033 +1.3.6.1.2.1.4.22.1.2.25.126.182.179.115|4x|42010aa40033 +1.3.6.1.2.1.4.22.1.2.29.225.213.228.189|4x|42010aa40033 +1.3.6.1.2.1.4.22.1.3.6.169.28.142.191|64x|a91c8ebf +1.3.6.1.2.1.4.22.1.3.8.175.113.74.135|64x|af714a87 +1.3.6.1.2.1.4.22.1.3.25.126.182.179.115|64x|7eb6b373 +1.3.6.1.2.1.4.22.1.3.29.225.213.228.189|64x|e1d5e4bd +1.3.6.1.2.1.4.22.1.4.6.169.28.142.191|2|1 +1.3.6.1.2.1.4.22.1.4.8.175.113.74.135|2|2 +1.3.6.1.2.1.4.22.1.4.25.126.182.179.115|2|4 +1.3.6.1.2.1.4.22.1.4.29.225.213.228.189|2|2 +1.3.6.1.2.1.4.23.0|65|136816428 +1.3.6.1.2.1.4.25.0|2|2 +1.3.6.1.2.1.4.26.0|2|24 +1.3.6.1.2.1.4.27.0|67|3761728971 +1.3.6.1.2.1.4.28.1.1.1|2|1 +1.3.6.1.2.1.4.28.1.1.4|2|4 +1.3.6.1.2.1.4.28.1.1.8|2|8 +1.3.6.1.2.1.4.28.1.1.17|2|17 +1.3.6.1.2.1.4.28.1.2.1|2|21 +1.3.6.1.2.1.4.28.1.2.4|2|26 +1.3.6.1.2.1.4.28.1.2.8|2|28 +1.3.6.1.2.1.4.28.1.2.17|2|21 +1.3.6.1.2.1.4.28.1.3.1|2|2 +1.3.6.1.2.1.4.28.1.3.4|2|1 +1.3.6.1.2.1.4.28.1.3.8|2|2 +1.3.6.1.2.1.4.28.1.3.17|2|1 +1.3.6.1.2.1.4.28.1.4.1|66|812 +1.3.6.1.2.1.4.28.1.4.4|66|64486 +1.3.6.1.2.1.4.28.1.4.8|66|54467 +1.3.6.1.2.1.4.28.1.4.17|66|48432 +1.3.6.1.2.1.4.29.0|67|2362973703 +1.3.6.1.2.1.4.30.1.1.2|2|2 +1.3.6.1.2.1.4.30.1.1.17|2|17 +1.3.6.1.2.1.4.30.1.1.20|2|20 +1.3.6.1.2.1.4.30.1.1.22|2|22 +1.3.6.1.2.1.4.30.1.2.2|66|54933 +1.3.6.1.2.1.4.30.1.2.17|66|8984 +1.3.6.1.2.1.4.30.1.2.20|66|31294 +1.3.6.1.2.1.4.30.1.2.22|66|6797 +1.3.6.1.2.1.4.30.1.3.2|4x|a6b458008bf2baec +1.3.6.1.2.1.4.30.1.3.17|4x|a6b458008bf2baec +1.3.6.1.2.1.4.30.1.3.20|4x|a6b458008bf2baec +1.3.6.1.2.1.4.30.1.3.22|4x|a6b458008bf2baec +1.3.6.1.2.1.4.30.1.5.2|2|2 +1.3.6.1.2.1.4.30.1.5.17|2|1 +1.3.6.1.2.1.4.30.1.5.20|2|2 +1.3.6.1.2.1.4.30.1.5.22|2|1 +1.3.6.1.2.1.4.30.1.6.2|66|47619 +1.3.6.1.2.1.4.30.1.6.17|66|51660 +1.3.6.1.2.1.4.30.1.6.20|66|38999 +1.3.6.1.2.1.4.30.1.6.22|66|39635 +1.3.6.1.2.1.4.30.1.7.2|66|54160 +1.3.6.1.2.1.4.30.1.7.17|66|50062 +1.3.6.1.2.1.4.30.1.7.20|66|39585 +1.3.6.1.2.1.4.30.1.7.22|66|2062 +1.3.6.1.2.1.4.30.1.8.2|2|2 +1.3.6.1.2.1.4.30.1.8.17|2|1 +1.3.6.1.2.1.4.30.1.8.20|2|2 +1.3.6.1.2.1.4.30.1.8.22|2|1 +1.3.6.1.2.1.4.31.1.1.1.1|2|0 +1.3.6.1.2.1.4.31.1.1.1.2|2|1 +1.3.6.1.2.1.4.31.1.1.3.1|65|1282316752 +1.3.6.1.2.1.4.31.1.1.3.2|65|2931163933 +1.3.6.1.2.1.4.31.1.1.4.1|70|5783600227374381282 +1.3.6.1.2.1.4.31.1.1.4.2|70|7878841687722285205 +1.3.6.1.2.1.4.31.1.1.5.1|65|934018851 +1.3.6.1.2.1.4.31.1.1.5.2|65|1505478027 +1.3.6.1.2.1.4.31.1.1.6.1|70|3466652958807352799 +1.3.6.1.2.1.4.31.1.1.6.2|70|6846704842227960036 +1.3.6.1.2.1.4.31.1.1.7.1|65|3870134036 +1.3.6.1.2.1.4.31.1.1.7.2|65|603776157 +1.3.6.1.2.1.4.31.1.1.8.1|65|719375178 +1.3.6.1.2.1.4.31.1.1.8.2|65|3328353201 +1.3.6.1.2.1.4.31.1.1.9.1|65|3623879979 +1.3.6.1.2.1.4.31.1.1.9.2|65|1742598367 +1.3.6.1.2.1.4.31.1.1.10.1|65|3469512894 +1.3.6.1.2.1.4.31.1.1.10.2|65|4030917231 +1.3.6.1.2.1.4.31.1.1.11.1|65|3721065773 +1.3.6.1.2.1.4.31.1.1.11.2|65|3220804402 +1.3.6.1.2.1.4.31.1.1.12.1|65|2228913071 +1.3.6.1.2.1.4.31.1.1.12.2|65|506134763 +1.3.6.1.2.1.4.31.1.1.13.1|70|4072318956505567616 +1.3.6.1.2.1.4.31.1.1.13.2|70|16703760251682054234 +1.3.6.1.2.1.4.31.1.1.14.1|65|2629821608 +1.3.6.1.2.1.4.31.1.1.14.2|65|421955199 +1.3.6.1.2.1.4.31.1.1.15.1|65|2527685245 +1.3.6.1.2.1.4.31.1.1.15.2|65|1798858343 +1.3.6.1.2.1.4.31.1.1.16.1|65|1894065316 +1.3.6.1.2.1.4.31.1.1.16.2|65|1403953109 +1.3.6.1.2.1.4.31.1.1.17.1|65|1554498388 +1.3.6.1.2.1.4.31.1.1.17.2|65|194570689 +1.3.6.1.2.1.4.31.1.1.18.1|65|4086797048 +1.3.6.1.2.1.4.31.1.1.18.2|65|3394299994 +1.3.6.1.2.1.4.31.1.1.19.1|70|17920373517856541850 +1.3.6.1.2.1.4.31.1.1.19.2|70|4037738900336282162 +1.3.6.1.2.1.4.31.1.1.20.1|65|659216537 +1.3.6.1.2.1.4.31.1.1.20.2|65|2634142429 +1.3.6.1.2.1.4.31.1.1.21.1|70|17177900121309884840 +1.3.6.1.2.1.4.31.1.1.21.2|70|7492613728617028549 +1.3.6.1.2.1.4.31.1.1.22.1|65|2528551998 +1.3.6.1.2.1.4.31.1.1.22.2|65|892992587 +1.3.6.1.2.1.4.31.1.1.23.1|65|3481624357 +1.3.6.1.2.1.4.31.1.1.23.2|65|1680014673 +1.3.6.1.2.1.4.31.1.1.24.1|70|12177179272038917674 +1.3.6.1.2.1.4.31.1.1.24.2|70|9731262886757879750 +1.3.6.1.2.1.4.31.1.1.25.1|65|2358025353 +1.3.6.1.2.1.4.31.1.1.25.2|65|3917562466 +1.3.6.1.2.1.4.31.1.1.26.1|65|3747667050 +1.3.6.1.2.1.4.31.1.1.26.2|65|2310235615 +1.3.6.1.2.1.4.31.1.1.27.1|65|1890373924 +1.3.6.1.2.1.4.31.1.1.27.2|65|2255127251 +1.3.6.1.2.1.4.31.1.1.28.1|65|2860300133 +1.3.6.1.2.1.4.31.1.1.28.2|65|1458494545 +1.3.6.1.2.1.4.31.1.1.29.1|65|203139220 +1.3.6.1.2.1.4.31.1.1.29.2|65|1495544614 +1.3.6.1.2.1.4.31.1.1.30.1|65|3187405495 +1.3.6.1.2.1.4.31.1.1.30.2|65|2498299266 +1.3.6.1.2.1.4.31.1.1.31.1|70|14364224325252552480 +1.3.6.1.2.1.4.31.1.1.31.2|70|15579562295200870655 +1.3.6.1.2.1.4.31.1.1.32.1|65|1817172532 +1.3.6.1.2.1.4.31.1.1.32.2|65|3221638580 +1.3.6.1.2.1.4.31.1.1.33.1|70|17295591865016486147 +1.3.6.1.2.1.4.31.1.1.33.2|70|11593645523890791195 +1.3.6.1.2.1.4.31.1.1.34.1|65|3642660893 +1.3.6.1.2.1.4.31.1.1.34.2|65|2824375432 +1.3.6.1.2.1.4.31.1.1.35.1|70|1059496062163332352 +1.3.6.1.2.1.4.31.1.1.35.2|70|6779561539692407913 +1.3.6.1.2.1.4.31.1.1.36.1|65|1370217103 +1.3.6.1.2.1.4.31.1.1.36.2|65|414101783 +1.3.6.1.2.1.4.31.1.1.37.1|70|11808146763629487163 +1.3.6.1.2.1.4.31.1.1.37.2|70|199221492791940521 +1.3.6.1.2.1.4.31.1.1.38.1|65|3100959593 +1.3.6.1.2.1.4.31.1.1.38.2|65|1607946655 +1.3.6.1.2.1.4.31.1.1.39.1|70|5311911265536100817 +1.3.6.1.2.1.4.31.1.1.39.2|70|5796034691120619031 +1.3.6.1.2.1.4.31.1.1.40.1|65|727614759 +1.3.6.1.2.1.4.31.1.1.40.2|65|243788076 +1.3.6.1.2.1.4.31.1.1.41.1|70|10886034670150832037 +1.3.6.1.2.1.4.31.1.1.41.2|70|18081706296441551909 +1.3.6.1.2.1.4.31.1.1.42.1|65|2597626393 +1.3.6.1.2.1.4.31.1.1.42.2|65|1756902403 +1.3.6.1.2.1.4.31.1.1.43.1|70|3624977684937512266 +1.3.6.1.2.1.4.31.1.1.43.2|70|14241477518255792672 +1.3.6.1.2.1.4.31.1.1.44.1|65|1431813500 +1.3.6.1.2.1.4.31.1.1.44.2|65|822060041 +1.3.6.1.2.1.4.31.1.1.45.1|70|2377465159522396553 +1.3.6.1.2.1.4.31.1.1.45.2|70|17278067538447676831 +1.3.6.1.2.1.4.31.1.1.46.1|67|223104120 +1.3.6.1.2.1.4.31.1.1.46.2|67|2342974234 +1.3.6.1.2.1.4.31.1.1.47.1|66|38480 +1.3.6.1.2.1.4.31.1.1.47.2|66|40748 +1.3.6.1.2.1.4.31.2.0|67|1227405340 +1.3.6.1.2.1.4.31.3.1.1.1.17|2|0 +1.3.6.1.2.1.4.31.3.1.1.1.21|2|0 +1.3.6.1.2.1.4.31.3.1.1.2.17|2|1 +1.3.6.1.2.1.4.31.3.1.1.2.21|2|2 +1.3.6.1.2.1.4.31.3.1.2.1.17|2|17 +1.3.6.1.2.1.4.31.3.1.2.1.21|2|21 +1.3.6.1.2.1.4.31.3.1.2.2.17|2|27 +1.3.6.1.2.1.4.31.3.1.2.2.21|2|25 +1.3.6.1.2.1.4.31.3.1.3.1.17|65|866613297 +1.3.6.1.2.1.4.31.3.1.3.1.21|65|882617529 +1.3.6.1.2.1.4.31.3.1.3.2.17|65|4023831017 +1.3.6.1.2.1.4.31.3.1.3.2.21|65|2525818421 +1.3.6.1.2.1.4.31.3.1.4.1.17|70|16541259019565922139 +1.3.6.1.2.1.4.31.3.1.4.1.21|70|6488693863013666655 +1.3.6.1.2.1.4.31.3.1.4.2.17|70|17283542088757438702 +1.3.6.1.2.1.4.31.3.1.4.2.21|70|460141854202718217 +1.3.6.1.2.1.4.31.3.1.5.1.17|65|1351252213 +1.3.6.1.2.1.4.31.3.1.5.1.21|65|200152718 +1.3.6.1.2.1.4.31.3.1.5.2.17|65|2436057504 +1.3.6.1.2.1.4.31.3.1.5.2.21|65|2320669464 +1.3.6.1.2.1.4.31.3.1.6.1.17|70|6687352077047466084 +1.3.6.1.2.1.4.31.3.1.6.1.21|70|17902872121324216713 +1.3.6.1.2.1.4.31.3.1.6.2.17|70|18086586042523373768 +1.3.6.1.2.1.4.31.3.1.6.2.21|70|5918210585844939369 +1.3.6.1.2.1.4.31.3.1.7.1.17|65|828939801 +1.3.6.1.2.1.4.31.3.1.7.1.21|65|827041496 +1.3.6.1.2.1.4.31.3.1.7.2.17|65|2403042140 +1.3.6.1.2.1.4.31.3.1.7.2.21|65|2614144146 +1.3.6.1.2.1.4.31.3.1.8.1.17|65|3170610705 +1.3.6.1.2.1.4.31.3.1.8.1.21|65|2515427367 +1.3.6.1.2.1.4.31.3.1.8.2.17|65|1137784412 +1.3.6.1.2.1.4.31.3.1.8.2.21|65|1100196722 +1.3.6.1.2.1.4.31.3.1.9.1.17|65|2481076163 +1.3.6.1.2.1.4.31.3.1.9.1.21|65|3641344774 +1.3.6.1.2.1.4.31.3.1.9.2.17|65|2911509488 +1.3.6.1.2.1.4.31.3.1.9.2.21|65|3405124399 +1.3.6.1.2.1.4.31.3.1.10.1.17|65|1769506743 +1.3.6.1.2.1.4.31.3.1.10.1.21|65|1248224023 +1.3.6.1.2.1.4.31.3.1.10.2.17|65|3422838435 +1.3.6.1.2.1.4.31.3.1.10.2.21|65|3489136745 +1.3.6.1.2.1.4.31.3.1.11.1.17|65|3862632055 +1.3.6.1.2.1.4.31.3.1.11.1.21|65|2713908093 +1.3.6.1.2.1.4.31.3.1.11.2.17|65|476218303 +1.3.6.1.2.1.4.31.3.1.11.2.21|65|3698961401 +1.3.6.1.2.1.4.31.3.1.12.1.17|65|1359782321 +1.3.6.1.2.1.4.31.3.1.12.1.21|65|2241879983 +1.3.6.1.2.1.4.31.3.1.12.2.17|65|1183691998 +1.3.6.1.2.1.4.31.3.1.12.2.21|65|2063959814 +1.3.6.1.2.1.4.31.3.1.13.1.17|70|14347482721867749163 +1.3.6.1.2.1.4.31.3.1.13.1.21|70|7213536290436404267 +1.3.6.1.2.1.4.31.3.1.13.2.17|70|14469382783700684034 +1.3.6.1.2.1.4.31.3.1.13.2.21|70|1366907728168162104 +1.3.6.1.2.1.4.31.3.1.14.1.17|65|3317037142 +1.3.6.1.2.1.4.31.3.1.14.1.21|65|2862227008 +1.3.6.1.2.1.4.31.3.1.14.2.17|65|3323994287 +1.3.6.1.2.1.4.31.3.1.14.2.21|65|966431424 +1.3.6.1.2.1.4.31.3.1.15.1.17|65|2280556394 +1.3.6.1.2.1.4.31.3.1.15.1.21|65|3928591306 +1.3.6.1.2.1.4.31.3.1.15.2.17|65|2385065673 +1.3.6.1.2.1.4.31.3.1.15.2.21|65|1850469751 +1.3.6.1.2.1.4.31.3.1.16.1.17|65|1866916822 +1.3.6.1.2.1.4.31.3.1.16.1.21|65|647473452 +1.3.6.1.2.1.4.31.3.1.16.2.17|65|3661063266 +1.3.6.1.2.1.4.31.3.1.16.2.21|65|236639870 +1.3.6.1.2.1.4.31.3.1.17.1.17|65|3032320662 +1.3.6.1.2.1.4.31.3.1.17.1.21|65|678453899 +1.3.6.1.2.1.4.31.3.1.17.2.17|65|3967478828 +1.3.6.1.2.1.4.31.3.1.17.2.21|65|3875826723 +1.3.6.1.2.1.4.31.3.1.18.1.17|65|927115845 +1.3.6.1.2.1.4.31.3.1.18.1.21|65|3257624983 +1.3.6.1.2.1.4.31.3.1.18.2.17|65|3458426296 +1.3.6.1.2.1.4.31.3.1.18.2.21|65|2271164228 +1.3.6.1.2.1.4.31.3.1.19.1.17|70|7612831344874359679 +1.3.6.1.2.1.4.31.3.1.19.1.21|70|1029183689104183616 +1.3.6.1.2.1.4.31.3.1.19.2.17|70|6504169741601734200 +1.3.6.1.2.1.4.31.3.1.19.2.21|70|18010845534396597428 +1.3.6.1.2.1.4.31.3.1.20.1.17|65|2749255035 +1.3.6.1.2.1.4.31.3.1.20.1.21|65|289352940 +1.3.6.1.2.1.4.31.3.1.20.2.17|65|2642737967 +1.3.6.1.2.1.4.31.3.1.20.2.21|65|3817593854 +1.3.6.1.2.1.4.31.3.1.21.1.17|70|15554355085868323793 +1.3.6.1.2.1.4.31.3.1.21.1.21|70|753449946982882745 +1.3.6.1.2.1.4.31.3.1.21.2.17|70|5497439711304978459 +1.3.6.1.2.1.4.31.3.1.21.2.21|70|9375898839017839190 +1.3.6.1.2.1.4.31.3.1.23.1.17|65|1575381088 +1.3.6.1.2.1.4.31.3.1.23.1.21|65|303245646 +1.3.6.1.2.1.4.31.3.1.23.2.17|65|3378776420 +1.3.6.1.2.1.4.31.3.1.23.2.21|65|4127224866 +1.3.6.1.2.1.4.31.3.1.24.1.17|70|14237474042437363011 +1.3.6.1.2.1.4.31.3.1.24.1.21|70|18055252329989805762 +1.3.6.1.2.1.4.31.3.1.24.2.17|70|1899935865156339542 +1.3.6.1.2.1.4.31.3.1.24.2.21|70|8756817980611927920 +1.3.6.1.2.1.4.31.3.1.25.1.17|65|4145705697 +1.3.6.1.2.1.4.31.3.1.25.1.21|65|4284781511 +1.3.6.1.2.1.4.31.3.1.25.2.17|65|3138789772 +1.3.6.1.2.1.4.31.3.1.25.2.21|65|530428315 +1.3.6.1.2.1.4.31.3.1.26.1.17|65|756294558 +1.3.6.1.2.1.4.31.3.1.26.1.21|65|4068526151 +1.3.6.1.2.1.4.31.3.1.26.2.17|65|1358324308 +1.3.6.1.2.1.4.31.3.1.26.2.21|65|1093114005 +1.3.6.1.2.1.4.31.3.1.27.1.17|65|693160369 +1.3.6.1.2.1.4.31.3.1.27.1.21|65|1186174909 +1.3.6.1.2.1.4.31.3.1.27.2.17|65|957138868 +1.3.6.1.2.1.4.31.3.1.27.2.21|65|3062672417 +1.3.6.1.2.1.4.31.3.1.28.1.17|65|3201371121 +1.3.6.1.2.1.4.31.3.1.28.1.21|65|811270852 +1.3.6.1.2.1.4.31.3.1.28.2.17|65|2596548835 +1.3.6.1.2.1.4.31.3.1.28.2.21|65|3968817600 +1.3.6.1.2.1.4.31.3.1.29.1.17|65|1725960779 +1.3.6.1.2.1.4.31.3.1.29.1.21|65|836262327 +1.3.6.1.2.1.4.31.3.1.29.2.17|65|2090302675 +1.3.6.1.2.1.4.31.3.1.29.2.21|65|3056437053 +1.3.6.1.2.1.4.31.3.1.30.1.17|65|2462307539 +1.3.6.1.2.1.4.31.3.1.30.1.21|65|143447607 +1.3.6.1.2.1.4.31.3.1.30.2.17|65|979940532 +1.3.6.1.2.1.4.31.3.1.30.2.21|65|3759901776 +1.3.6.1.2.1.4.31.3.1.31.1.17|70|18386935594506712267 +1.3.6.1.2.1.4.31.3.1.31.1.21|70|10826640097040292960 +1.3.6.1.2.1.4.31.3.1.31.2.17|70|9098136257097188203 +1.3.6.1.2.1.4.31.3.1.31.2.21|70|8600810305645325346 +1.3.6.1.2.1.4.31.3.1.32.1.17|65|3155164358 +1.3.6.1.2.1.4.31.3.1.32.1.21|65|2960527631 +1.3.6.1.2.1.4.31.3.1.32.2.17|65|1940354889 +1.3.6.1.2.1.4.31.3.1.32.2.21|65|851907630 +1.3.6.1.2.1.4.31.3.1.33.1.17|70|7264860876229858683 +1.3.6.1.2.1.4.31.3.1.33.1.21|70|17313919040021973387 +1.3.6.1.2.1.4.31.3.1.33.2.17|70|13590379289280784730 +1.3.6.1.2.1.4.31.3.1.33.2.21|70|17707827503540412829 +1.3.6.1.2.1.4.31.3.1.34.1.17|65|655242562 +1.3.6.1.2.1.4.31.3.1.34.1.21|65|1288301790 +1.3.6.1.2.1.4.31.3.1.34.2.17|65|1849410165 +1.3.6.1.2.1.4.31.3.1.34.2.21|65|1279242570 +1.3.6.1.2.1.4.31.3.1.35.1.17|70|13853431729452045643 +1.3.6.1.2.1.4.31.3.1.35.1.21|70|12175899719023875618 +1.3.6.1.2.1.4.31.3.1.35.2.17|70|5746076581242596522 +1.3.6.1.2.1.4.31.3.1.35.2.21|70|11270454824911170838 +1.3.6.1.2.1.4.31.3.1.36.1.17|65|3609901991 +1.3.6.1.2.1.4.31.3.1.36.1.21|65|3366624678 +1.3.6.1.2.1.4.31.3.1.36.2.17|65|1920324642 +1.3.6.1.2.1.4.31.3.1.36.2.21|65|4209011130 +1.3.6.1.2.1.4.31.3.1.37.1.17|70|7895653252070651268 +1.3.6.1.2.1.4.31.3.1.37.1.21|70|12394260431406653224 +1.3.6.1.2.1.4.31.3.1.37.2.17|70|15299594081869997980 +1.3.6.1.2.1.4.31.3.1.37.2.21|70|5207569687615871054 +1.3.6.1.2.1.4.31.3.1.38.1.17|65|52943236 +1.3.6.1.2.1.4.31.3.1.38.1.21|65|3625273341 +1.3.6.1.2.1.4.31.3.1.38.2.17|65|2093962244 +1.3.6.1.2.1.4.31.3.1.38.2.21|65|2570094859 +1.3.6.1.2.1.4.31.3.1.39.1.17|70|12882822983962882497 +1.3.6.1.2.1.4.31.3.1.39.1.21|70|8407178083230479565 +1.3.6.1.2.1.4.31.3.1.39.2.17|70|18336009361507838044 +1.3.6.1.2.1.4.31.3.1.39.2.21|70|11666341087131274654 +1.3.6.1.2.1.4.31.3.1.40.1.17|65|2112237646 +1.3.6.1.2.1.4.31.3.1.40.1.21|65|1029360032 +1.3.6.1.2.1.4.31.3.1.40.2.17|65|735826687 +1.3.6.1.2.1.4.31.3.1.40.2.21|65|669567614 +1.3.6.1.2.1.4.31.3.1.41.1.17|70|15334443937769666109 +1.3.6.1.2.1.4.31.3.1.41.1.21|70|866200030929373579 +1.3.6.1.2.1.4.31.3.1.41.2.17|70|6052996953017774683 +1.3.6.1.2.1.4.31.3.1.41.2.21|70|8716473514490114253 +1.3.6.1.2.1.4.31.3.1.42.1.17|65|2322814508 +1.3.6.1.2.1.4.31.3.1.42.1.21|65|3327247243 +1.3.6.1.2.1.4.31.3.1.42.2.17|65|2727298329 +1.3.6.1.2.1.4.31.3.1.42.2.21|65|3246577319 +1.3.6.1.2.1.4.31.3.1.43.1.17|70|2034420164050050816 +1.3.6.1.2.1.4.31.3.1.43.1.21|70|13950647551966877873 +1.3.6.1.2.1.4.31.3.1.43.2.17|70|17473187917807218064 +1.3.6.1.2.1.4.31.3.1.43.2.21|70|14148731617561528442 +1.3.6.1.2.1.4.31.3.1.44.1.17|65|3367170860 +1.3.6.1.2.1.4.31.3.1.44.1.21|65|1801660866 +1.3.6.1.2.1.4.31.3.1.44.2.17|65|922612589 +1.3.6.1.2.1.4.31.3.1.44.2.21|65|886729780 +1.3.6.1.2.1.4.31.3.1.45.1.17|70|607792112682508330 +1.3.6.1.2.1.4.31.3.1.45.1.21|70|6397386343954789607 +1.3.6.1.2.1.4.31.3.1.45.2.17|70|2366567357642059143 +1.3.6.1.2.1.4.31.3.1.45.2.21|70|13236325206057337924 +1.3.6.1.2.1.4.31.3.1.46.1.17|67|1761560959 +1.3.6.1.2.1.4.31.3.1.46.1.21|67|2188904331 +1.3.6.1.2.1.4.31.3.1.46.2.17|67|3084605396 +1.3.6.1.2.1.4.31.3.1.46.2.21|67|3709080479 +1.3.6.1.2.1.4.31.3.1.47.1.17|66|36433 +1.3.6.1.2.1.4.31.3.1.47.1.21|66|6826 +1.3.6.1.2.1.4.31.3.1.47.2.17|66|61176 +1.3.6.1.2.1.4.31.3.1.47.2.21|66|15570 +1.3.6.1.2.1.4.32.1.1.2.2.7.122.111.109.98.105.101.115.912|2|2 +1.3.6.1.2.1.4.32.1.1.13.1.26.111.120.101.110.32.107.101.112.116.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.1974|2|13 +1.3.6.1.2.1.4.32.1.1.19.4.7.102.111.114.119.97.114.100.1523|2|19 +1.3.6.1.2.1.4.32.1.1.29.2.25.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.102.111.114.119.97.114.100.95|2|29 +1.3.6.1.2.1.4.32.1.2.2.2.7.122.111.109.98.105.101.115.912|2|2 +1.3.6.1.2.1.4.32.1.2.13.1.26.111.120.101.110.32.107.101.112.116.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.1974|2|1 +1.3.6.1.2.1.4.32.1.2.19.4.7.102.111.114.119.97.114.100.1523|2|4 +1.3.6.1.2.1.4.32.1.2.29.2.25.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.102.111.114.119.97.114.100.95|2|2 +1.3.6.1.2.1.4.32.1.3.2.2.7.122.111.109.98.105.101.115.912|4|zombies +1.3.6.1.2.1.4.32.1.3.13.1.26.111.120.101.110.32.107.101.112.116.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.1974|4x|6f78656e206b65707420666f727761726420717561696e746c79 +1.3.6.1.2.1.4.32.1.3.19.4.7.102.111.114.119.97.114.100.1523|4|forward +1.3.6.1.2.1.4.32.1.3.29.2.25.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.102.111.114.119.97.114.100.95|4x|4a6164656420746865697220616374656420666f7277617264 +1.3.6.1.2.1.4.32.1.4.2.2.7.122.111.109.98.105.101.115.912|66|912 +1.3.6.1.2.1.4.32.1.4.13.1.26.111.120.101.110.32.107.101.112.116.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.1974|66|1974 +1.3.6.1.2.1.4.32.1.4.19.4.7.102.111.114.119.97.114.100.1523|66|1523 +1.3.6.1.2.1.4.32.1.4.29.2.25.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.102.111.114.119.97.114.100.95|66|95 +1.3.6.1.2.1.4.32.1.5.2.2.7.122.111.109.98.105.101.115.912|2|3 +1.3.6.1.2.1.4.32.1.5.13.1.26.111.120.101.110.32.107.101.112.116.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.1974|2|1 +1.3.6.1.2.1.4.32.1.5.19.4.7.102.111.114.119.97.114.100.1523|2|2 +1.3.6.1.2.1.4.32.1.5.29.2.25.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.102.111.114.119.97.114.100.95|2|2 +1.3.6.1.2.1.4.32.1.6.2.2.7.122.111.109.98.105.101.115.912|2|1 +1.3.6.1.2.1.4.32.1.6.13.1.26.111.120.101.110.32.107.101.112.116.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.1974|2|2 +1.3.6.1.2.1.4.32.1.6.19.4.7.102.111.114.119.97.114.100.1523|2|1 +1.3.6.1.2.1.4.32.1.6.29.2.25.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.102.111.114.119.97.114.100.95|2|2 +1.3.6.1.2.1.4.32.1.7.2.2.7.122.111.109.98.105.101.115.912|2|2 +1.3.6.1.2.1.4.32.1.7.13.1.26.111.120.101.110.32.107.101.112.116.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.1974|2|1 +1.3.6.1.2.1.4.32.1.7.19.4.7.102.111.114.119.97.114.100.1523|2|2 +1.3.6.1.2.1.4.32.1.7.29.2.25.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.102.111.114.119.97.114.100.95|2|2 +1.3.6.1.2.1.4.32.1.8.2.2.7.122.111.109.98.105.101.115.912|66|40358 +1.3.6.1.2.1.4.32.1.8.13.1.26.111.120.101.110.32.107.101.112.116.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.1974|66|27032 +1.3.6.1.2.1.4.32.1.8.19.4.7.102.111.114.119.97.114.100.1523|66|425 +1.3.6.1.2.1.4.32.1.8.29.2.25.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.102.111.114.119.97.114.100.95|66|22520 +1.3.6.1.2.1.4.32.1.9.2.2.7.122.111.109.98.105.101.115.912|66|55055 +1.3.6.1.2.1.4.32.1.9.13.1.26.111.120.101.110.32.107.101.112.116.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.1974|66|45400 +1.3.6.1.2.1.4.32.1.9.19.4.7.102.111.114.119.97.114.100.1523|66|33958 +1.3.6.1.2.1.4.32.1.9.29.2.25.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.102.111.114.119.97.114.100.95|66|4822 +1.3.6.1.2.1.4.33.0|2|3 +1.3.6.1.2.1.4.34.1.1.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|2|1 +1.3.6.1.2.1.4.34.1.1.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|2|1 +1.3.6.1.2.1.4.34.1.1.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|2|2 +1.3.6.1.2.1.4.34.1.1.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|2|4 +1.3.6.1.2.1.4.34.1.2.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|4x|74686569722064726976696e67206f78656e +1.3.6.1.2.1.4.34.1.2.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|4x|627574207a6f6d62696573206163746564206b657074206f78656e +1.3.6.1.2.1.4.34.1.2.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|4x|6b65707420627574206b657074 +1.3.6.1.2.1.4.34.1.2.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|4x|7a6f6d62696573207a6f6d62696573207468656972 +1.3.6.1.2.1.4.34.1.3.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|2|4 +1.3.6.1.2.1.4.34.1.3.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|2|6 +1.3.6.1.2.1.4.34.1.3.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|2|13 +1.3.6.1.2.1.4.34.1.3.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|2|9 +1.3.6.1.2.1.4.34.1.4.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|2|1 +1.3.6.1.2.1.4.34.1.4.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|2|1 +1.3.6.1.2.1.4.34.1.4.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|2|3 +1.3.6.1.2.1.4.34.1.4.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|2|2 +1.3.6.1.2.1.4.34.1.5.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|6|1.3.6.1.3.192.97.56 +1.3.6.1.2.1.4.34.1.5.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|6|1.3.6.1.3.129.102.69.143.94.120.130.215 +1.3.6.1.2.1.4.34.1.5.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|6|1.3.6.1.3.238.149.98.96.109.170.231.221.192 +1.3.6.1.2.1.4.34.1.5.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|6|1.3.6.1.3.115.35.24 +1.3.6.1.2.1.4.34.1.6.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|2|1 +1.3.6.1.2.1.4.34.1.6.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|2|2 +1.3.6.1.2.1.4.34.1.6.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|2|6 +1.3.6.1.2.1.4.34.1.6.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|2|6 +1.3.6.1.2.1.4.34.1.7.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|2|7 +1.3.6.1.2.1.4.34.1.7.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|2|1 +1.3.6.1.2.1.4.34.1.7.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|2|3 +1.3.6.1.2.1.4.34.1.7.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|2|4 +1.3.6.1.2.1.4.34.1.8.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|67|4284183605 +1.3.6.1.2.1.4.34.1.8.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|67|4250460302 +1.3.6.1.2.1.4.34.1.8.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|67|147328146 +1.3.6.1.2.1.4.34.1.8.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|67|1025249295 +1.3.6.1.2.1.4.34.1.9.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|67|1279593731 +1.3.6.1.2.1.4.34.1.9.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|67|453203599 +1.3.6.1.2.1.4.34.1.9.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|67|3431328629 +1.3.6.1.2.1.4.34.1.9.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|67|2803136066 +1.3.6.1.2.1.4.34.1.10.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|2|5 +1.3.6.1.2.1.4.34.1.10.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|2|5 +1.3.6.1.2.1.4.34.1.10.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|2|5 +1.3.6.1.2.1.4.34.1.10.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|2|4 +1.3.6.1.2.1.4.34.1.11.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|2|4 +1.3.6.1.2.1.4.34.1.11.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|2|5 +1.3.6.1.2.1.4.34.1.11.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|2|5 +1.3.6.1.2.1.4.34.1.11.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|2|3 +1.3.6.1.2.1.4.35.1.1.5.2.52.111.120.101.110.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114|2|5 +1.3.6.1.2.1.4.35.1.1.9.1.30.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100|2|9 +1.3.6.1.2.1.4.35.1.1.19.1.40.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116|2|19 +1.3.6.1.2.1.4.35.1.1.27.3.31.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.32.98.117.116|2|27 +1.3.6.1.2.1.4.35.1.2.5.2.52.111.120.101.110.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114|2|2 +1.3.6.1.2.1.4.35.1.2.9.1.30.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100|2|1 +1.3.6.1.2.1.4.35.1.2.19.1.40.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116|2|1 +1.3.6.1.2.1.4.35.1.2.27.3.31.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.32.98.117.116|2|3 +1.3.6.1.2.1.4.35.1.3.5.2.52.111.120.101.110.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114|4x|6f78656e204a61646564207a6f6d626965732064726976696e67204a61646564207a6f6d62696573206163746564207468656972 +1.3.6.1.2.1.4.35.1.3.9.1.30.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100|4x|666f727761726420666f7277617264206b65707420627574206163746564 +1.3.6.1.2.1.4.35.1.3.19.1.40.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116|4x|666f7277617264206275742074686569722064726976696e6720616374656420627574206b657074 +1.3.6.1.2.1.4.35.1.3.27.3.31.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.32.98.117.116|4x|616374656420717561696e746c79206b65707420666f727761726420627574 +1.3.6.1.2.1.4.35.1.4.5.2.52.111.120.101.110.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114|4x|42010aa40033 +1.3.6.1.2.1.4.35.1.4.9.1.30.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100|4x|42010aa40033 +1.3.6.1.2.1.4.35.1.4.19.1.40.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116|4x|42010aa40033 +1.3.6.1.2.1.4.35.1.4.27.3.31.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.32.98.117.116|4x|42010aa40033 +1.3.6.1.2.1.4.35.1.5.5.2.52.111.120.101.110.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114|67|970411781 +1.3.6.1.2.1.4.35.1.5.9.1.30.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100|67|2506166029 +1.3.6.1.2.1.4.35.1.5.19.1.40.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116|67|2466243180 +1.3.6.1.2.1.4.35.1.5.27.3.31.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.32.98.117.116|67|2114863065 +1.3.6.1.2.1.4.35.1.6.5.2.52.111.120.101.110.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114|2|4 +1.3.6.1.2.1.4.35.1.6.9.1.30.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100|2|5 +1.3.6.1.2.1.4.35.1.6.19.1.40.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116|2|5 +1.3.6.1.2.1.4.35.1.6.27.3.31.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.32.98.117.116|2|5 +1.3.6.1.2.1.4.35.1.7.5.2.52.111.120.101.110.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114|2|2 +1.3.6.1.2.1.4.35.1.7.9.1.30.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100|2|4 +1.3.6.1.2.1.4.35.1.7.19.1.40.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116|2|6 +1.3.6.1.2.1.4.35.1.7.27.3.31.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.32.98.117.116|2|2 +1.3.6.1.2.1.4.35.1.8.5.2.52.111.120.101.110.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114|2|3 +1.3.6.1.2.1.4.35.1.8.9.1.30.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100|2|0 +1.3.6.1.2.1.4.35.1.8.19.1.40.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116|2|1 +1.3.6.1.2.1.4.35.1.8.27.3.31.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.32.98.117.116|2|2 +1.3.6.1.2.1.4.36.1.1.8|2|8 +1.3.6.1.2.1.4.36.1.1.11|2|11 +1.3.6.1.2.1.4.36.1.1.20|2|20 +1.3.6.1.2.1.4.36.1.1.23|2|23 +1.3.6.1.2.1.4.36.1.2.8|66|46355 +1.3.6.1.2.1.4.36.1.2.11|66|33267 +1.3.6.1.2.1.4.36.1.2.20|66|4839 +1.3.6.1.2.1.4.36.1.2.23|66|18 +1.3.6.1.2.1.4.36.1.3.8|66|12673 +1.3.6.1.2.1.4.36.1.3.11|66|46131 +1.3.6.1.2.1.4.36.1.3.20|66|1766 +1.3.6.1.2.1.4.36.1.3.23|66|57440 +1.3.6.1.2.1.4.36.1.4.8|66|15959 +1.3.6.1.2.1.4.36.1.4.11|66|40181 +1.3.6.1.2.1.4.36.1.4.20|66|11336 +1.3.6.1.2.1.4.36.1.4.23|66|23089 +1.3.6.1.2.1.4.36.1.5.8|66|10931 +1.3.6.1.2.1.4.36.1.5.11|66|5993 +1.3.6.1.2.1.4.36.1.5.20|66|20691 +1.3.6.1.2.1.4.36.1.5.23|66|30858 +1.3.6.1.2.1.4.36.1.6.8|66|25985 +1.3.6.1.2.1.4.36.1.6.11|66|24530 +1.3.6.1.2.1.4.36.1.6.20|66|6596 +1.3.6.1.2.1.4.36.1.6.23|66|19709 +1.3.6.1.2.1.4.36.1.7.8|66|56123 +1.3.6.1.2.1.4.36.1.7.11|66|29478 +1.3.6.1.2.1.4.36.1.7.20|66|60446 +1.3.6.1.2.1.4.36.1.7.23|66|45630 +1.3.6.1.2.1.4.36.1.8.8|66|6069 +1.3.6.1.2.1.4.36.1.8.11|66|33112 +1.3.6.1.2.1.4.36.1.8.20|66|37457 +1.3.6.1.2.1.4.36.1.8.23|66|11865 +1.3.6.1.2.1.4.36.1.9.8|66|31725 +1.3.6.1.2.1.4.36.1.9.11|66|13443 +1.3.6.1.2.1.4.36.1.9.20|66|44693 +1.3.6.1.2.1.4.36.1.9.23|66|43828 +1.3.6.1.2.1.4.36.1.10.8|66|51518 +1.3.6.1.2.1.4.36.1.10.11|66|25876 +1.3.6.1.2.1.4.36.1.10.20|66|26205 +1.3.6.1.2.1.4.36.1.10.23|66|63806 +1.3.6.1.2.1.4.36.1.11.8|66|64872 +1.3.6.1.2.1.4.36.1.11.11|66|38030 +1.3.6.1.2.1.4.36.1.11.20|66|40853 +1.3.6.1.2.1.4.36.1.11.23|66|25121 +1.3.6.1.2.1.4.36.1.12.8|66|60347 +1.3.6.1.2.1.4.36.1.12.11|66|12589 +1.3.6.1.2.1.4.36.1.12.20|66|55062 +1.3.6.1.2.1.4.36.1.12.23|66|49810 +1.3.6.1.2.1.4.36.1.13.8|66|38497 +1.3.6.1.2.1.4.36.1.13.11|66|46531 +1.3.6.1.2.1.4.36.1.13.20|66|1050 +1.3.6.1.2.1.4.36.1.13.23|66|23528 +1.3.6.1.2.1.4.37.1.1.0.17.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.31|2|0 +1.3.6.1.2.1.4.37.1.1.0.23.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.98.117.116.26|2|0 +1.3.6.1.2.1.4.37.1.1.0.41.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.27|2|0 +1.3.6.1.2.1.4.37.1.1.2.39.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.97.99.116.101.100.25|2|2 +1.3.6.1.2.1.4.37.1.2.0.17.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.31|4x|64726976696e67206f78656e206f78656e +1.3.6.1.2.1.4.37.1.2.0.23.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.98.117.116.26|4x|7a6f6d626965732062757420666f727761726420627574 +1.3.6.1.2.1.4.37.1.2.0.41.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.27|4x|7a6f6d626965732062757420717561696e746c7920616374656420616374656420717561696e746c79 +1.3.6.1.2.1.4.37.1.2.2.39.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.97.99.116.101.100.25|4x|666f727761726420627574207468656972207a6f6d626965732064726976696e67206163746564 +1.3.6.1.2.1.4.37.1.3.0.17.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.31|2|31 +1.3.6.1.2.1.4.37.1.3.0.23.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.98.117.116.26|2|26 +1.3.6.1.2.1.4.37.1.3.0.41.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.27|2|27 +1.3.6.1.2.1.4.37.1.3.2.39.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.97.99.116.101.100.25|2|25 +1.3.6.1.2.1.4.37.1.4.0.17.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.31|66|50687 +1.3.6.1.2.1.4.37.1.4.0.23.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.98.117.116.26|66|39157 +1.3.6.1.2.1.4.37.1.4.0.41.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.27|66|28911 +1.3.6.1.2.1.4.37.1.4.2.39.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.97.99.116.101.100.25|66|42738 +1.3.6.1.2.1.4.37.1.5.0.17.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.31|2|1 +1.3.6.1.2.1.4.37.1.5.0.23.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.98.117.116.26|2|0 +1.3.6.1.2.1.4.37.1.5.0.41.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.27|2|1 +1.3.6.1.2.1.4.37.1.5.2.39.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.97.99.116.101.100.25|2|0 +1.3.6.1.2.1.4.38.0|2|14 +1.3.6.1.2.1.4.39.1.1.3|2|3 +1.3.6.1.2.1.4.39.1.1.25|2|25 +1.3.6.1.2.1.4.39.1.2.3|2|2 +1.3.6.1.2.1.4.39.1.2.25|2|1 +1.3.6.1.2.1.4.39.1.3.3|66|913 +1.3.6.1.2.1.4.39.1.3.25|66|159 +1.3.6.1.2.1.4.39.1.4.3|66|853 +1.3.6.1.2.1.4.39.1.4.25|66|535 +1.3.6.1.2.1.4.39.1.5.3|2|1 +1.3.6.1.2.1.4.39.1.5.25|2|1 +1.3.6.1.2.1.4.39.1.6.3|2|2 +1.3.6.1.2.1.4.39.1.6.25|2|1 +1.3.6.1.2.1.4.39.1.7.3|66|52744 +1.3.6.1.2.1.4.39.1.7.25|66|37458 +1.3.6.1.2.1.4.39.1.8.3|66|1293 +1.3.6.1.2.1.4.39.1.8.25|66|17539 +1.3.6.1.2.1.4.39.1.9.3|66|47304 +1.3.6.1.2.1.4.39.1.9.25|66|495 +1.3.6.1.2.1.4.39.1.10.3|66|79 +1.3.6.1.2.1.4.39.1.10.25|66|62 +1.3.6.1.2.1.4.39.1.11.3|66|4877 +1.3.6.1.2.1.4.39.1.11.25|66|7874 +1.3.6.1.2.1.4.39.1.12.3|2|2 +1.3.6.1.2.1.4.39.1.12.25|2|1 +1.3.6.1.2.1.5.1.0|65|1492856794 +1.3.6.1.2.1.5.2.0|65|2680995039 +1.3.6.1.2.1.5.3.0|65|4140306666 +1.3.6.1.2.1.5.4.0|65|1455566903 +1.3.6.1.2.1.5.5.0|65|2923454834 +1.3.6.1.2.1.5.6.0|65|1765992285 +1.3.6.1.2.1.5.7.0|65|1458479575 +1.3.6.1.2.1.5.8.0|65|2868435403 +1.3.6.1.2.1.5.9.0|65|4079796073 +1.3.6.1.2.1.5.10.0|65|2637296057 +1.3.6.1.2.1.5.11.0|65|5459634 +1.3.6.1.2.1.5.12.0|65|829577661 +1.3.6.1.2.1.5.13.0|65|2226230237 +1.3.6.1.2.1.5.14.0|65|1208803990 +1.3.6.1.2.1.5.15.0|65|3986845943 +1.3.6.1.2.1.5.16.0|65|949279005 +1.3.6.1.2.1.5.17.0|65|558282089 +1.3.6.1.2.1.5.18.0|65|1890280040 +1.3.6.1.2.1.5.19.0|65|3593610629 +1.3.6.1.2.1.5.20.0|65|4209164054 +1.3.6.1.2.1.5.21.0|65|3450068052 +1.3.6.1.2.1.5.22.0|65|2076087352 +1.3.6.1.2.1.5.23.0|65|3945747872 +1.3.6.1.2.1.5.24.0|65|632957643 +1.3.6.1.2.1.5.25.0|65|1204976869 +1.3.6.1.2.1.5.26.0|65|3140552997 +1.3.6.1.2.1.5.29.1.1.0|2|0 +1.3.6.1.2.1.5.29.1.1.1|2|1 +1.3.6.1.2.1.5.29.1.2.0|65|964293789 +1.3.6.1.2.1.5.29.1.2.1|65|2959992059 +1.3.6.1.2.1.5.29.1.3.0|65|3562961320 +1.3.6.1.2.1.5.29.1.3.1|65|106025386 +1.3.6.1.2.1.5.29.1.4.0|65|3373096760 +1.3.6.1.2.1.5.29.1.4.1|65|114575088 +1.3.6.1.2.1.5.29.1.5.0|65|898661729 +1.3.6.1.2.1.5.29.1.5.1|65|3292995448 +1.3.6.1.2.1.5.30.1.1.0.7|2|0 +1.3.6.1.2.1.5.30.1.1.0.17|2|0 +1.3.6.1.2.1.5.30.1.1.2.6|2|2 +1.3.6.1.2.1.5.30.1.1.2.27|2|2 +1.3.6.1.2.1.5.30.1.2.0.7|2|7 +1.3.6.1.2.1.5.30.1.2.0.17|2|17 +1.3.6.1.2.1.5.30.1.2.2.6|2|6 +1.3.6.1.2.1.5.30.1.2.2.27|2|27 +1.3.6.1.2.1.5.30.1.3.0.7|65|2352636915 +1.3.6.1.2.1.5.30.1.3.0.17|65|297958128 +1.3.6.1.2.1.5.30.1.3.2.6|65|1839598222 +1.3.6.1.2.1.5.30.1.3.2.27|65|3555647664 +1.3.6.1.2.1.5.30.1.4.0.7|65|3608497094 +1.3.6.1.2.1.5.30.1.4.0.17|65|1630529615 +1.3.6.1.2.1.5.30.1.4.2.6|65|1437666952 +1.3.6.1.2.1.5.30.1.4.2.27|65|59772725 +1.3.6.1.2.1.6.1.0|2|5 +1.3.6.1.2.1.6.2.0|2|16 +1.3.6.1.2.1.6.3.0|2|15 +1.3.6.1.2.1.6.4.0|2|28 +1.3.6.1.2.1.6.5.0|65|65107228 +1.3.6.1.2.1.6.6.0|65|354971360 +1.3.6.1.2.1.6.7.0|65|3488211961 +1.3.6.1.2.1.6.8.0|65|3041227831 +1.3.6.1.2.1.6.9.0|66|3592371136 +1.3.6.1.2.1.6.10.0|65|2361355713 +1.3.6.1.2.1.6.11.0|65|1760250163 +1.3.6.1.2.1.6.12.0|65|3042947677 +1.3.6.1.2.1.6.13.1.1.56.87.155.48.25.56.13.181.134.10|2|8 +1.3.6.1.2.1.6.13.1.1.90.39.59.76.19.137.38.75.85.25|2|9 +1.3.6.1.2.1.6.13.1.1.92.87.203.150.31.64.252.45.189.14|2|11 +1.3.6.1.2.1.6.13.1.1.168.203.239.172.19.157.238.68.132.0|2|12 +1.3.6.1.2.1.6.13.1.1.180.226.46.184.24.239.9.226.80.27|2|2 +1.3.6.1.2.1.6.13.1.1.253.76.143.199.1.33.205.58.31.16|2|8 +1.3.6.1.2.1.6.13.1.2.56.87.155.48.25.56.13.181.134.10|64x|38579b30 +1.3.6.1.2.1.6.13.1.2.90.39.59.76.19.137.38.75.85.25|64x|5a273b4c +1.3.6.1.2.1.6.13.1.2.92.87.203.150.31.64.252.45.189.14|64x|5c57cb96 +1.3.6.1.2.1.6.13.1.2.168.203.239.172.19.157.238.68.132.0|64x|a8cbefac +1.3.6.1.2.1.6.13.1.2.180.226.46.184.24.239.9.226.80.27|64x|b4e22eb8 +1.3.6.1.2.1.6.13.1.2.253.76.143.199.1.33.205.58.31.16|64x|fd4c8fc7 +1.3.6.1.2.1.6.13.1.3.56.87.155.48.25.56.13.181.134.10|2|25 +1.3.6.1.2.1.6.13.1.3.90.39.59.76.19.137.38.75.85.25|2|19 +1.3.6.1.2.1.6.13.1.3.92.87.203.150.31.64.252.45.189.14|2|31 +1.3.6.1.2.1.6.13.1.3.168.203.239.172.19.157.238.68.132.0|2|19 +1.3.6.1.2.1.6.13.1.3.180.226.46.184.24.239.9.226.80.27|2|24 +1.3.6.1.2.1.6.13.1.3.253.76.143.199.1.33.205.58.31.16|2|1 +1.3.6.1.2.1.6.13.1.4.56.87.155.48.25.56.13.181.134.10|64x|380db586 +1.3.6.1.2.1.6.13.1.4.90.39.59.76.19.137.38.75.85.25|64x|89264b55 +1.3.6.1.2.1.6.13.1.4.92.87.203.150.31.64.252.45.189.14|64x|40fc2dbd +1.3.6.1.2.1.6.13.1.4.168.203.239.172.19.157.238.68.132.0|64x|9dee4484 +1.3.6.1.2.1.6.13.1.4.180.226.46.184.24.239.9.226.80.27|64x|ef09e250 +1.3.6.1.2.1.6.13.1.4.253.76.143.199.1.33.205.58.31.16|64x|21cd3a1f +1.3.6.1.2.1.6.13.1.5.56.87.155.48.25.56.13.181.134.10|2|10 +1.3.6.1.2.1.6.13.1.5.90.39.59.76.19.137.38.75.85.25|2|25 +1.3.6.1.2.1.6.13.1.5.92.87.203.150.31.64.252.45.189.14|2|14 +1.3.6.1.2.1.6.13.1.5.168.203.239.172.19.157.238.68.132.0|2|0 +1.3.6.1.2.1.6.13.1.5.180.226.46.184.24.239.9.226.80.27|2|27 +1.3.6.1.2.1.6.13.1.5.253.76.143.199.1.33.205.58.31.16|2|16 +1.3.6.1.2.1.6.14.0|65|3550559180 +1.3.6.1.2.1.6.15.0|65|122443261 +1.3.6.1.2.1.6.17.0|70|1739996722140638720 +1.3.6.1.2.1.6.18.0|70|11290994777553824436 +1.3.6.1.2.1.6.19.1.1.2.34.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114.15678.16.49.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.50024|2|2 +1.3.6.1.2.1.6.19.1.1.2.55.98.117.116.32.107.101.112.116.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.64360.4.43.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116.32.107.101.112.116.32.116.104.101.105.114.25342|2|2 +1.3.6.1.2.1.6.19.1.1.3.50.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.107.101.112.116.32.107.101.112.116.32.111.120.101.110.32.111.120.101.110.54616.4.5.74.97.100.101.100.29164|2|3 +1.3.6.1.2.1.6.19.1.1.4.7.102.111.114.119.97.114.100.42226.1.40.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.14011|2|4 +1.3.6.1.2.1.6.19.1.1.4.16.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.19020.1.33.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.64259|2|4 +1.3.6.1.2.1.6.19.1.1.16.33.111.120.101.110.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.116.104.101.105.114.52621.3.34.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.54864|2|16 +1.3.6.1.2.1.6.19.1.2.2.34.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114.15678.16.49.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.50024|4x|6f78656e207a6f6d62696573207a6f6d62696573207a6f6d62696573207468656972 +1.3.6.1.2.1.6.19.1.2.2.55.98.117.116.32.107.101.112.116.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.64360.4.43.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116.32.107.101.112.116.32.116.104.101.105.114.25342|4x|627574206b657074206b65707420717561696e746c79206f78656e207468656972207468656972207a6f6d6269657320666f7277617264 +1.3.6.1.2.1.6.19.1.2.3.50.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.107.101.112.116.32.107.101.112.116.32.111.120.101.110.32.111.120.101.110.54616.4.5.74.97.100.101.100.29164|4x|6163746564206275742064726976696e672064726976696e67206b657074206b657074206b657074206f78656e206f78656e +1.3.6.1.2.1.6.19.1.2.4.7.102.111.114.119.97.114.100.42226.1.40.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.14011|4|forward +1.3.6.1.2.1.6.19.1.2.4.16.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.19020.1.33.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.64259|4x|7468656972204a61646564206f78656e +1.3.6.1.2.1.6.19.1.2.16.33.111.120.101.110.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.116.104.101.105.114.52621.3.34.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.54864|4x|6f78656e20717561696e746c7920717561696e746c79206b657074207468656972 +1.3.6.1.2.1.6.19.1.3.2.34.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114.15678.16.49.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.50024|66|15678 +1.3.6.1.2.1.6.19.1.3.2.55.98.117.116.32.107.101.112.116.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.64360.4.43.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116.32.107.101.112.116.32.116.104.101.105.114.25342|66|64360 +1.3.6.1.2.1.6.19.1.3.3.50.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.107.101.112.116.32.107.101.112.116.32.111.120.101.110.32.111.120.101.110.54616.4.5.74.97.100.101.100.29164|66|54616 +1.3.6.1.2.1.6.19.1.3.4.7.102.111.114.119.97.114.100.42226.1.40.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.14011|66|42226 +1.3.6.1.2.1.6.19.1.3.4.16.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.19020.1.33.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.64259|66|19020 +1.3.6.1.2.1.6.19.1.3.16.33.111.120.101.110.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.116.104.101.105.114.52621.3.34.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.54864|66|52621 +1.3.6.1.2.1.6.19.1.4.2.34.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114.15678.16.49.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.50024|2|16 +1.3.6.1.2.1.6.19.1.4.2.55.98.117.116.32.107.101.112.116.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.64360.4.43.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116.32.107.101.112.116.32.116.104.101.105.114.25342|2|4 +1.3.6.1.2.1.6.19.1.4.3.50.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.107.101.112.116.32.107.101.112.116.32.111.120.101.110.32.111.120.101.110.54616.4.5.74.97.100.101.100.29164|2|4 +1.3.6.1.2.1.6.19.1.4.4.7.102.111.114.119.97.114.100.42226.1.40.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.14011|2|1 +1.3.6.1.2.1.6.19.1.4.4.16.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.19020.1.33.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.64259|2|1 +1.3.6.1.2.1.6.19.1.4.16.33.111.120.101.110.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.116.104.101.105.114.52621.3.34.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.54864|2|3 +1.3.6.1.2.1.6.19.1.5.2.34.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114.15678.16.49.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.50024|4x|616374656420746865697220717561696e746c79207468656972207468656972206163746564204a61646564206f78656e +1.3.6.1.2.1.6.19.1.5.2.55.98.117.116.32.107.101.112.116.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.64360.4.43.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116.32.107.101.112.116.32.116.104.101.105.114.25342|4x|6b6570742062757420666f7277617264206163746564204a6164656420627574206b657074207468656972 +1.3.6.1.2.1.6.19.1.5.3.50.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.107.101.112.116.32.107.101.112.116.32.111.120.101.110.32.111.120.101.110.54616.4.5.74.97.100.101.100.29164|4|Jaded +1.3.6.1.2.1.6.19.1.5.4.7.102.111.114.119.97.114.100.42226.1.40.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.14011|4x|6f78656e20627574204a616465642064726976696e672064726976696e67206f78656e206f78656e +1.3.6.1.2.1.6.19.1.5.4.16.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.19020.1.33.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.64259|4x|7468656972207468656972206b657074206163746564207468656972206b657074 +1.3.6.1.2.1.6.19.1.5.16.33.111.120.101.110.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.116.104.101.105.114.52621.3.34.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.54864|4x|7a6f6d6269657320717561696e746c79206b657074206f78656e20666f7277617264 +1.3.6.1.2.1.6.19.1.6.2.34.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114.15678.16.49.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.50024|66|50024 +1.3.6.1.2.1.6.19.1.6.2.55.98.117.116.32.107.101.112.116.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.64360.4.43.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116.32.107.101.112.116.32.116.104.101.105.114.25342|66|25342 +1.3.6.1.2.1.6.19.1.6.3.50.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.107.101.112.116.32.107.101.112.116.32.111.120.101.110.32.111.120.101.110.54616.4.5.74.97.100.101.100.29164|66|29164 +1.3.6.1.2.1.6.19.1.6.4.7.102.111.114.119.97.114.100.42226.1.40.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.14011|66|14011 +1.3.6.1.2.1.6.19.1.6.4.16.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.19020.1.33.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.64259|66|64259 +1.3.6.1.2.1.6.19.1.6.16.33.111.120.101.110.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.116.104.101.105.114.52621.3.34.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.54864|66|54864 +1.3.6.1.2.1.6.19.1.7.2.34.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114.15678.16.49.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.50024|2|10 +1.3.6.1.2.1.6.19.1.7.2.55.98.117.116.32.107.101.112.116.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.64360.4.43.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116.32.107.101.112.116.32.116.104.101.105.114.25342|2|3 +1.3.6.1.2.1.6.19.1.7.3.50.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.107.101.112.116.32.107.101.112.116.32.111.120.101.110.32.111.120.101.110.54616.4.5.74.97.100.101.100.29164|2|2 +1.3.6.1.2.1.6.19.1.7.4.7.102.111.114.119.97.114.100.42226.1.40.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.14011|2|1 +1.3.6.1.2.1.6.19.1.7.4.16.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.19020.1.33.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.64259|2|12 +1.3.6.1.2.1.6.19.1.7.16.33.111.120.101.110.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.116.104.101.105.114.52621.3.34.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.54864|2|8 +1.3.6.1.2.1.6.19.1.8.2.34.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114.15678.16.49.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.50024|66|6608 +1.3.6.1.2.1.6.19.1.8.2.55.98.117.116.32.107.101.112.116.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.64360.4.43.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116.32.107.101.112.116.32.116.104.101.105.114.25342|66|24034 +1.3.6.1.2.1.6.19.1.8.3.50.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.107.101.112.116.32.107.101.112.116.32.111.120.101.110.32.111.120.101.110.54616.4.5.74.97.100.101.100.29164|66|63973 +1.3.6.1.2.1.6.19.1.8.4.7.102.111.114.119.97.114.100.42226.1.40.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.14011|66|16267 +1.3.6.1.2.1.6.19.1.8.4.16.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.19020.1.33.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.64259|66|6939 +1.3.6.1.2.1.6.19.1.8.16.33.111.120.101.110.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.116.104.101.105.114.52621.3.34.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.54864|66|12988 +1.3.6.1.2.1.6.20.1.1.0.20.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.21667|2|0 +1.3.6.1.2.1.6.20.1.1.0.42.116.104.101.105.114.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.3844|2|0 +1.3.6.1.2.1.6.20.1.1.2.22.113.117.97.105.110.116.108.121.32.111.120.101.110.32.107.101.112.116.32.98.117.116.27758|2|2 +1.3.6.1.2.1.6.20.1.1.2.32.97.99.116.101.100.32.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.25987|2|2 +1.3.6.1.2.1.6.20.1.1.3.48.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.111.120.101.110.55501|2|3 +1.3.6.1.2.1.6.20.1.1.4.36.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.55651|2|4 +1.3.6.1.2.1.6.20.1.2.0.20.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.21667|4x|7a6f6d626965732064726976696e67206f78656e +1.3.6.1.2.1.6.20.1.2.0.42.116.104.101.105.114.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.3844|4x|74686569722064726976696e67207a6f6d6269657320666f727761726420717561696e746c7920627574 +1.3.6.1.2.1.6.20.1.2.2.22.113.117.97.105.110.116.108.121.32.111.120.101.110.32.107.101.112.116.32.98.117.116.27758|4x|717561696e746c79206f78656e206b65707420627574 +1.3.6.1.2.1.6.20.1.2.2.32.97.99.116.101.100.32.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.25987|4x|6163746564206f78656e20666f7277617264207a6f6d62696573206163746564 +1.3.6.1.2.1.6.20.1.2.3.48.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.111.120.101.110.55501|4x|7a6f6d626965732064726976696e67206b65707420627574206f78656e207a6f6d62696573206163746564206f78656e +1.3.6.1.2.1.6.20.1.2.4.36.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.55651|4x|6f78656e20666f727761726420666f727761726420666f7277617264207a6f6d62696573 +1.3.6.1.2.1.6.20.1.3.0.20.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.21667|66|21667 +1.3.6.1.2.1.6.20.1.3.0.42.116.104.101.105.114.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.3844|66|3844 +1.3.6.1.2.1.6.20.1.3.2.22.113.117.97.105.110.116.108.121.32.111.120.101.110.32.107.101.112.116.32.98.117.116.27758|66|27758 +1.3.6.1.2.1.6.20.1.3.2.32.97.99.116.101.100.32.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.25987|66|25987 +1.3.6.1.2.1.6.20.1.3.3.48.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.111.120.101.110.55501|66|55501 +1.3.6.1.2.1.6.20.1.3.4.36.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.55651|66|55651 +1.3.6.1.2.1.6.20.1.4.0.20.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.21667|66|64651 +1.3.6.1.2.1.6.20.1.4.0.42.116.104.101.105.114.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.3844|66|25473 +1.3.6.1.2.1.6.20.1.4.2.22.113.117.97.105.110.116.108.121.32.111.120.101.110.32.107.101.112.116.32.98.117.116.27758|66|64116 +1.3.6.1.2.1.6.20.1.4.2.32.97.99.116.101.100.32.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.25987|66|40949 +1.3.6.1.2.1.6.20.1.4.3.48.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.111.120.101.110.55501|66|25088 +1.3.6.1.2.1.6.20.1.4.4.36.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.55651|66|49948 +1.3.6.1.2.1.7.1.0|65|845058143 +1.3.6.1.2.1.7.2.0|65|322177604 +1.3.6.1.2.1.7.3.0|65|888170439 +1.3.6.1.2.1.7.4.0|65|1931566481 +1.3.6.1.2.1.7.5.1.1.56.151.103.243.2|64x|389767f3 +1.3.6.1.2.1.7.5.1.1.60.14.226.162.25|64x|3c0ee2a2 +1.3.6.1.2.1.7.5.1.1.65.194.4.114.11|64x|41c20472 +1.3.6.1.2.1.7.5.1.1.78.73.170.170.30|64x|4e49aaaa +1.3.6.1.2.1.7.5.1.1.99.17.223.45.2|64x|6311df2d +1.3.6.1.2.1.7.5.1.1.115.62.84.34.16|64x|733e5422 +1.3.6.1.2.1.7.5.1.1.134.174.114.176.0|64x|86ae72b0 +1.3.6.1.2.1.7.5.1.1.249.27.252.28.28|64x|f91bfc1c +1.3.6.1.2.1.7.5.1.2.56.151.103.243.2|2|2 +1.3.6.1.2.1.7.5.1.2.60.14.226.162.25|2|25 +1.3.6.1.2.1.7.5.1.2.65.194.4.114.11|2|11 +1.3.6.1.2.1.7.5.1.2.78.73.170.170.30|2|30 +1.3.6.1.2.1.7.5.1.2.99.17.223.45.2|2|2 +1.3.6.1.2.1.7.5.1.2.115.62.84.34.16|2|16 +1.3.6.1.2.1.7.5.1.2.134.174.114.176.0|2|0 +1.3.6.1.2.1.7.5.1.2.249.27.252.28.28|2|28 +1.3.6.1.2.1.7.7.1.1.0.19.100.114.105.118.105.110.103.32.98.117.116.32.102.111.114.119.97.114.100.43479.2.55.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.107.101.112.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.116.104.101.105.114.32.100.114.105.118.105.110.103.1099.47038|2|0 +1.3.6.1.2.1.7.7.1.1.0.37.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.9177.16.36.74.97.100.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.30932.60990|2|0 +1.3.6.1.2.1.7.7.1.1.1.51.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.32.107.101.112.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.63959.3.51.97.99.116.101.100.32.111.120.101.110.32.116.104.101.105.114.32.98.117.116.32.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32156.7068|2|1 +1.3.6.1.2.1.7.7.1.1.2.24.102.111.114.119.97.114.100.32.74.97.100.101.100.32.74.97.100.101.100.32.111.120.101.110.8739.1.18.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.23534.29002|2|2 +1.3.6.1.2.1.7.7.1.1.3.47.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114.32.111.120.101.110.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.49559.1.34.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.102.111.114.119.97.114.100.48206.28034|2|3 +1.3.6.1.2.1.7.7.1.1.3.51.98.117.116.32.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.12291.0.37.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.56288.53199|2|3 +1.3.6.1.2.1.7.7.1.1.3.51.116.104.101.105.114.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.113.117.97.105.110.116.108.121.35917.0.7.122.111.109.98.105.101.115.4644.43859|2|3 +1.3.6.1.2.1.7.7.1.1.16.7.102.111.114.119.97.114.100.54117.4.49.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.98.117.116.32.98.117.116.17063.62790|2|16 +1.3.6.1.2.1.7.7.1.2.0.19.100.114.105.118.105.110.103.32.98.117.116.32.102.111.114.119.97.114.100.43479.2.55.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.107.101.112.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.116.104.101.105.114.32.100.114.105.118.105.110.103.1099.47038|4x|64726976696e672062757420666f7277617264 +1.3.6.1.2.1.7.7.1.2.0.37.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.9177.16.36.74.97.100.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.30932.60990|4x|4a6164656420717561696e746c792074686569722064726976696e67206b65707420627574 +1.3.6.1.2.1.7.7.1.2.1.51.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.32.107.101.112.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.63959.3.51.97.99.116.101.100.32.111.120.101.110.32.116.104.101.105.114.32.98.117.116.32.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32156.7068|4x|6f78656e204a6164656420627574204a61646564206b65707420616374656420616374656420666f7277617264206163746564 +1.3.6.1.2.1.7.7.1.2.2.24.102.111.114.119.97.114.100.32.74.97.100.101.100.32.74.97.100.101.100.32.111.120.101.110.8739.1.18.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.23534.29002|4x|666f7277617264204a61646564204a61646564206f78656e +1.3.6.1.2.1.7.7.1.2.3.47.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114.32.111.120.101.110.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.49559.1.34.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.102.111.114.119.97.114.100.48206.28034|4x|717561696e746c79206163746564207468656972206f78656e206163746564207468656972206b657074206b657074 +1.3.6.1.2.1.7.7.1.2.3.51.98.117.116.32.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.12291.0.37.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.56288.53199|4x|627574206f78656e20627574204a6164656420666f727761726420666f727761726420666f727761726420627574206f78656e +1.3.6.1.2.1.7.7.1.2.3.51.116.104.101.105.114.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.113.117.97.105.110.116.108.121.35917.0.7.122.111.109.98.105.101.115.4644.43859|4x|74686569722062757420616374656420616374656420666f727761726420717561696e746c792062757420717561696e746c79 +1.3.6.1.2.1.7.7.1.2.16.7.102.111.114.119.97.114.100.54117.4.49.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.98.117.116.32.98.117.116.17063.62790|4|forward +1.3.6.1.2.1.7.7.1.3.0.19.100.114.105.118.105.110.103.32.98.117.116.32.102.111.114.119.97.114.100.43479.2.55.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.107.101.112.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.116.104.101.105.114.32.100.114.105.118.105.110.103.1099.47038|66|43479 +1.3.6.1.2.1.7.7.1.3.0.37.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.9177.16.36.74.97.100.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.30932.60990|66|9177 +1.3.6.1.2.1.7.7.1.3.1.51.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.32.107.101.112.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.63959.3.51.97.99.116.101.100.32.111.120.101.110.32.116.104.101.105.114.32.98.117.116.32.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32156.7068|66|63959 +1.3.6.1.2.1.7.7.1.3.2.24.102.111.114.119.97.114.100.32.74.97.100.101.100.32.74.97.100.101.100.32.111.120.101.110.8739.1.18.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.23534.29002|66|8739 +1.3.6.1.2.1.7.7.1.3.3.47.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114.32.111.120.101.110.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.49559.1.34.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.102.111.114.119.97.114.100.48206.28034|66|49559 +1.3.6.1.2.1.7.7.1.3.3.51.98.117.116.32.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.12291.0.37.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.56288.53199|66|12291 +1.3.6.1.2.1.7.7.1.3.3.51.116.104.101.105.114.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.113.117.97.105.110.116.108.121.35917.0.7.122.111.109.98.105.101.115.4644.43859|66|35917 +1.3.6.1.2.1.7.7.1.3.16.7.102.111.114.119.97.114.100.54117.4.49.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.98.117.116.32.98.117.116.17063.62790|66|54117 +1.3.6.1.2.1.7.7.1.4.0.19.100.114.105.118.105.110.103.32.98.117.116.32.102.111.114.119.97.114.100.43479.2.55.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.107.101.112.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.116.104.101.105.114.32.100.114.105.118.105.110.103.1099.47038|2|2 +1.3.6.1.2.1.7.7.1.4.0.37.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.9177.16.36.74.97.100.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.30932.60990|2|16 +1.3.6.1.2.1.7.7.1.4.1.51.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.32.107.101.112.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.63959.3.51.97.99.116.101.100.32.111.120.101.110.32.116.104.101.105.114.32.98.117.116.32.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32156.7068|2|3 +1.3.6.1.2.1.7.7.1.4.2.24.102.111.114.119.97.114.100.32.74.97.100.101.100.32.74.97.100.101.100.32.111.120.101.110.8739.1.18.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.23534.29002|2|1 +1.3.6.1.2.1.7.7.1.4.3.47.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114.32.111.120.101.110.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.49559.1.34.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.102.111.114.119.97.114.100.48206.28034|2|1 +1.3.6.1.2.1.7.7.1.4.3.51.98.117.116.32.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.12291.0.37.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.56288.53199|2|0 +1.3.6.1.2.1.7.7.1.4.3.51.116.104.101.105.114.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.113.117.97.105.110.116.108.121.35917.0.7.122.111.109.98.105.101.115.4644.43859|2|0 +1.3.6.1.2.1.7.7.1.4.16.7.102.111.114.119.97.114.100.54117.4.49.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.98.117.116.32.98.117.116.17063.62790|2|4 +1.3.6.1.2.1.7.7.1.5.0.19.100.114.105.118.105.110.103.32.98.117.116.32.102.111.114.119.97.114.100.43479.2.55.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.107.101.112.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.116.104.101.105.114.32.100.114.105.118.105.110.103.1099.47038|4x|717561696e746c79206163746564206b65707420666f727761726420666f72776172642061637465642074686569722064726976696e67 +1.3.6.1.2.1.7.7.1.5.0.37.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.9177.16.36.74.97.100.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.30932.60990|4x|4a61646564207a6f6d6269657320717561696e746c7920717561696e746c79206f78656e +1.3.6.1.2.1.7.7.1.5.1.51.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.32.107.101.112.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.63959.3.51.97.99.116.101.100.32.111.120.101.110.32.116.104.101.105.114.32.98.117.116.32.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32156.7068|4x|6163746564206f78656e20746865697220627574206b65707420627574207a6f6d62696573204a616465642064726976696e67 +1.3.6.1.2.1.7.7.1.5.2.24.102.111.114.119.97.114.100.32.74.97.100.101.100.32.74.97.100.101.100.32.111.120.101.110.8739.1.18.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.23534.29002|4x|717561696e746c79206b657074206f78656e +1.3.6.1.2.1.7.7.1.5.3.47.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114.32.111.120.101.110.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.49559.1.34.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.102.111.114.119.97.114.100.48206.28034|4x|6f78656e20666f7277617264207a6f6d6269657320746865697220666f7277617264 +1.3.6.1.2.1.7.7.1.5.3.51.98.117.116.32.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.12291.0.37.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.56288.53199|4x|7a6f6d62696573207a6f6d6269657320717561696e746c79207a6f6d62696573206f78656e +1.3.6.1.2.1.7.7.1.5.3.51.116.104.101.105.114.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.113.117.97.105.110.116.108.121.35917.0.7.122.111.109.98.105.101.115.4644.43859|4|zombies +1.3.6.1.2.1.7.7.1.5.16.7.102.111.114.119.97.114.100.54117.4.49.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.98.117.116.32.98.117.116.17063.62790|4x|717561696e746c79207a6f6d626965732064726976696e67206b657074204a616465642074686569722062757420627574 +1.3.6.1.2.1.7.7.1.6.0.19.100.114.105.118.105.110.103.32.98.117.116.32.102.111.114.119.97.114.100.43479.2.55.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.107.101.112.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.116.104.101.105.114.32.100.114.105.118.105.110.103.1099.47038|66|1099 +1.3.6.1.2.1.7.7.1.6.0.37.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.9177.16.36.74.97.100.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.30932.60990|66|30932 +1.3.6.1.2.1.7.7.1.6.1.51.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.32.107.101.112.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.63959.3.51.97.99.116.101.100.32.111.120.101.110.32.116.104.101.105.114.32.98.117.116.32.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32156.7068|66|32156 +1.3.6.1.2.1.7.7.1.6.2.24.102.111.114.119.97.114.100.32.74.97.100.101.100.32.74.97.100.101.100.32.111.120.101.110.8739.1.18.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.23534.29002|66|23534 +1.3.6.1.2.1.7.7.1.6.3.47.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114.32.111.120.101.110.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.49559.1.34.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.102.111.114.119.97.114.100.48206.28034|66|48206 +1.3.6.1.2.1.7.7.1.6.3.51.98.117.116.32.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.12291.0.37.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.56288.53199|66|56288 +1.3.6.1.2.1.7.7.1.6.3.51.116.104.101.105.114.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.113.117.97.105.110.116.108.121.35917.0.7.122.111.109.98.105.101.115.4644.43859|66|4644 +1.3.6.1.2.1.7.7.1.6.16.7.102.111.114.119.97.114.100.54117.4.49.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.98.117.116.32.98.117.116.17063.62790|66|17063 +1.3.6.1.2.1.7.7.1.7.0.19.100.114.105.118.105.110.103.32.98.117.116.32.102.111.114.119.97.114.100.43479.2.55.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.107.101.112.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.116.104.101.105.114.32.100.114.105.118.105.110.103.1099.47038|66|47038 +1.3.6.1.2.1.7.7.1.7.0.37.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.9177.16.36.74.97.100.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.30932.60990|66|60990 +1.3.6.1.2.1.7.7.1.7.1.51.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.32.107.101.112.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.63959.3.51.97.99.116.101.100.32.111.120.101.110.32.116.104.101.105.114.32.98.117.116.32.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32156.7068|66|7068 +1.3.6.1.2.1.7.7.1.7.2.24.102.111.114.119.97.114.100.32.74.97.100.101.100.32.74.97.100.101.100.32.111.120.101.110.8739.1.18.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.23534.29002|66|29002 +1.3.6.1.2.1.7.7.1.7.3.47.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114.32.111.120.101.110.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.49559.1.34.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.102.111.114.119.97.114.100.48206.28034|66|28034 +1.3.6.1.2.1.7.7.1.7.3.51.98.117.116.32.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.12291.0.37.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.56288.53199|66|53199 +1.3.6.1.2.1.7.7.1.7.3.51.116.104.101.105.114.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.113.117.97.105.110.116.108.121.35917.0.7.122.111.109.98.105.101.115.4644.43859|66|43859 +1.3.6.1.2.1.7.7.1.7.16.7.102.111.114.119.97.114.100.54117.4.49.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.98.117.116.32.98.117.116.17063.62790|66|62790 +1.3.6.1.2.1.7.7.1.8.0.19.100.114.105.118.105.110.103.32.98.117.116.32.102.111.114.119.97.114.100.43479.2.55.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.107.101.112.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.116.104.101.105.114.32.100.114.105.118.105.110.103.1099.47038|66|46841 +1.3.6.1.2.1.7.7.1.8.0.37.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.9177.16.36.74.97.100.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.30932.60990|66|9924 +1.3.6.1.2.1.7.7.1.8.1.51.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.32.107.101.112.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.63959.3.51.97.99.116.101.100.32.111.120.101.110.32.116.104.101.105.114.32.98.117.116.32.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32156.7068|66|7810 +1.3.6.1.2.1.7.7.1.8.2.24.102.111.114.119.97.114.100.32.74.97.100.101.100.32.74.97.100.101.100.32.111.120.101.110.8739.1.18.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.23534.29002|66|22718 +1.3.6.1.2.1.7.7.1.8.3.47.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114.32.111.120.101.110.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.49559.1.34.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.102.111.114.119.97.114.100.48206.28034|66|60675 +1.3.6.1.2.1.7.7.1.8.3.51.98.117.116.32.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.12291.0.37.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.56288.53199|66|18503 +1.3.6.1.2.1.7.7.1.8.3.51.116.104.101.105.114.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.113.117.97.105.110.116.108.121.35917.0.7.122.111.109.98.105.101.115.4644.43859|66|41523 +1.3.6.1.2.1.7.7.1.8.16.7.102.111.114.119.97.114.100.54117.4.49.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.98.117.116.32.98.117.116.17063.62790|66|3422 +1.3.6.1.2.1.7.8.0|70|18443080796267782135 +1.3.6.1.2.1.7.9.0|70|8016143063445322732 +1.3.6.1.2.1.11.1.0|65|1026848053 +1.3.6.1.2.1.11.2.0|65|1559503192 +1.3.6.1.2.1.11.3.0|65|1661364527 +1.3.6.1.2.1.11.4.0|65|3728874342 +1.3.6.1.2.1.11.5.0|65|2559226521 +1.3.6.1.2.1.11.6.0|65|1650806427 +1.3.6.1.2.1.11.8.0|65|1632315785 +1.3.6.1.2.1.11.9.0|65|2621823096 +1.3.6.1.2.1.11.10.0|65|1506245205 +1.3.6.1.2.1.11.11.0|65|899705927 +1.3.6.1.2.1.11.12.0|65|4133118796 +1.3.6.1.2.1.11.13.0|65|3111667111 +1.3.6.1.2.1.11.14.0|65|3837227648 +1.3.6.1.2.1.11.15.0|65|2418795793 +1.3.6.1.2.1.11.16.0|65|941621899 +1.3.6.1.2.1.11.17.0|65|1388409920 +1.3.6.1.2.1.11.18.0|65|334684494 +1.3.6.1.2.1.11.19.0|65|2144129908 +1.3.6.1.2.1.11.20.0|65|945572706 +1.3.6.1.2.1.11.21.0|65|2412259253 +1.3.6.1.2.1.11.22.0|65|709453491 +1.3.6.1.2.1.11.24.0|65|3109654399 +1.3.6.1.2.1.11.25.0|65|1068667305 +1.3.6.1.2.1.11.26.0|65|1115168412 +1.3.6.1.2.1.11.27.0|65|3358419166 +1.3.6.1.2.1.11.28.0|65|2284249196 +1.3.6.1.2.1.11.29.0|65|2255620041 +1.3.6.1.2.1.11.30.0|2|1 +1.3.6.1.2.1.11.31.0|65|2713209622 +1.3.6.1.2.1.11.32.0|65|2594822087 +1.3.6.1.2.1.31.1.1.1.1.13|4x|65746830 +1.3.6.1.2.1.31.1.1.1.1.15|4x|65746831 +1.3.6.1.2.1.31.1.1.1.2.13|65|2347007850 +1.3.6.1.2.1.31.1.1.1.2.15|65|4169364536 +1.3.6.1.2.1.31.1.1.1.3.13|65|3298152181 +1.3.6.1.2.1.31.1.1.1.3.15|65|3102500179 +1.3.6.1.2.1.31.1.1.1.4.13|65|2449589239 +1.3.6.1.2.1.31.1.1.1.4.15|65|3449771470 +1.3.6.1.2.1.31.1.1.1.5.13|65|524348469 +1.3.6.1.2.1.31.1.1.1.5.15|65|2158749102 +1.3.6.1.2.1.31.1.1.1.6.13|70|7712298674287165259 +1.3.6.1.2.1.31.1.1.1.6.15|70|10691602997682554953 +1.3.6.1.2.1.31.1.1.1.7.13|70|13754656808550877804 +1.3.6.1.2.1.31.1.1.1.7.15|70|7002517873966062570 +1.3.6.1.2.1.31.1.1.1.8.13|70|6632351660760469095 +1.3.6.1.2.1.31.1.1.1.8.15|70|4169664613546665387 +1.3.6.1.2.1.31.1.1.1.9.13|70|18165497535063818545 +1.3.6.1.2.1.31.1.1.1.9.15|70|3187083131619716718 +1.3.6.1.2.1.31.1.1.1.10.13|70|1421691080720476747 +1.3.6.1.2.1.31.1.1.1.10.15|70|3299757516212389613 +1.3.6.1.2.1.31.1.1.1.11.13|70|1227125767479954888 +1.3.6.1.2.1.31.1.1.1.11.15|70|414502565558156005 +1.3.6.1.2.1.31.1.1.1.12.13|70|12372197000804879586 +1.3.6.1.2.1.31.1.1.1.12.15|70|11728336340868252858 +1.3.6.1.2.1.31.1.1.1.13.13|70|3009057718220303987 +1.3.6.1.2.1.31.1.1.1.13.15|70|14360471847414061181 +1.3.6.1.2.1.31.1.1.1.14.13|2|2 +1.3.6.1.2.1.31.1.1.1.14.15|2|2 +1.3.6.1.2.1.31.1.1.1.15.13|66|1199310033 +1.3.6.1.2.1.31.1.1.1.15.15|66|120344731 +1.3.6.1.2.1.31.1.1.1.16.13|2|1 +1.3.6.1.2.1.31.1.1.1.16.15|2|1 +1.3.6.1.2.1.31.1.1.1.17.13|2|2 +1.3.6.1.2.1.31.1.1.1.17.15|2|2 +1.3.6.1.2.1.31.1.1.1.18.13|4|kept +1.3.6.1.2.1.31.1.1.1.18.15|4x|746865697220666f7277617264206f78656e +1.3.6.1.2.1.31.1.1.1.19.13|67|2492542845 +1.3.6.1.2.1.31.1.1.1.19.15|67|4100437878 +1.3.6.1.2.1.31.1.2.1.1.4.24|2|4 +1.3.6.1.2.1.31.1.2.1.1.6.25|2|6 +1.3.6.1.2.1.31.1.2.1.1.22.27|2|22 +1.3.6.1.2.1.31.1.2.1.1.26.19|2|26 +1.3.6.1.2.1.31.1.2.1.2.4.24|2|24 +1.3.6.1.2.1.31.1.2.1.2.6.25|2|25 +1.3.6.1.2.1.31.1.2.1.2.22.27|2|27 +1.3.6.1.2.1.31.1.2.1.2.26.19|2|19 +1.3.6.1.2.1.31.1.2.1.3.4.24|2|5 +1.3.6.1.2.1.31.1.2.1.3.6.25|2|3 +1.3.6.1.2.1.31.1.2.1.3.22.27|2|3 +1.3.6.1.2.1.31.1.2.1.3.26.19|2|4 +1.3.6.1.2.1.31.1.3.1.1.5|2|19 +1.3.6.1.2.1.31.1.3.1.1.6|2|17 +1.3.6.1.2.1.31.1.3.1.1.12|2|28 +1.3.6.1.2.1.31.1.3.1.2.5|2|2 +1.3.6.1.2.1.31.1.3.1.2.6|2|1 +1.3.6.1.2.1.31.1.3.1.2.12|2|2 +1.3.6.1.2.1.31.1.3.1.3.5|6|1.3.6.1.3.252.112.82.19.228 +1.3.6.1.2.1.31.1.3.1.3.6|6|1.3.6.1.3 +1.3.6.1.2.1.31.1.3.1.3.12|6|1.3.6.1.3.97.56.245.210.158.169.23.245 +1.3.6.1.2.1.31.1.3.1.4.5|2|1 +1.3.6.1.2.1.31.1.3.1.4.6|2|4 +1.3.6.1.2.1.31.1.3.1.4.12|2|7 +1.3.6.1.2.1.31.1.3.1.5.5|6|1.3.6.1.3.158.188.89.49.224.153.67.151.160 +1.3.6.1.2.1.31.1.3.1.5.6|6|1.3.6.1.3.17 +1.3.6.1.2.1.31.1.3.1.5.12|6|1.3.6.1.3.205.195.64 +1.3.6.1.2.1.31.1.3.1.6.5|4x|746865697220717561696e746c79 +1.3.6.1.2.1.31.1.3.1.6.6|4x|7a6f6d626965732061637465642064726976696e67206f78656e206b65707420746865697220717561696e746c79 +1.3.6.1.2.1.31.1.3.1.6.12|4|zombies +1.3.6.1.2.1.31.1.4.1.1.9.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.11.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.14.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.29.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.2.9.6.66.1.10.164.0.51|2|2 +1.3.6.1.2.1.31.1.4.1.2.11.6.66.1.10.164.0.51|2|6 +1.3.6.1.2.1.31.1.4.1.2.14.6.66.1.10.164.0.51|2|3 +1.3.6.1.2.1.31.1.4.1.2.29.6.66.1.10.164.0.51|2|1 +1.3.6.1.2.1.31.1.4.1.3.9.6.66.1.10.164.0.51|2|2 +1.3.6.1.2.1.31.1.4.1.3.11.6.66.1.10.164.0.51|2|1 +1.3.6.1.2.1.31.1.4.1.3.14.6.66.1.10.164.0.51|2|2 +1.3.6.1.2.1.31.1.4.1.3.29.6.66.1.10.164.0.51|2|2 +1.3.6.1.2.1.31.1.5.0|67|1984347925 +1.3.6.1.2.1.31.1.6.0|67|3494995519 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.67.64 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.103.223.118.130.119.59.10.58 +1.3.6.1.6.3.1.1.6.1.0|2|7 diff --git a/test/new-e2e/ndm/snmp/compose/data/generic_host.snmprec b/test/new-e2e/ndm/snmp/compose/data/generic_host.snmprec new file mode 100644 index 00000000000000..71337465cb8666 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/generic_host.snmprec @@ -0,0 +1,23 @@ +1.3.6.1.2.1.25.1.1.0|67|803137913 +1.3.6.1.2.1.25.1.5.0|66|3964612068 +1.3.6.1.2.1.25.1.6.0|66|658239218 +1.3.6.1.2.1.25.1.7.0|2|6 +1.3.6.1.2.1.25.2.2.0|2|28 +1.3.6.1.2.1.25.2.3.1.1.3|2|3 +1.3.6.1.2.1.25.2.3.1.1.16|2|16 +1.3.6.1.2.1.25.2.3.1.2.3|6|1.3.6.1.2.1.25.2.1.3 +1.3.6.1.2.1.25.2.3.1.2.16|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.3.3|4x|6f78656e2074686569722064726976696e6720666f727761726420717561696e746c79 +1.3.6.1.2.1.25.2.3.1.3.16|4x|717561696e746c792064726976696e67204a6164656420666f727761726420746865697220717561696e746c79207a6f6d62696573 +1.3.6.1.2.1.25.2.3.1.4.3|2|16 +1.3.6.1.2.1.25.2.3.1.4.16|2|4 +1.3.6.1.2.1.25.2.3.1.5.3|2|12 +1.3.6.1.2.1.25.2.3.1.5.16|2|3 +1.3.6.1.2.1.25.2.3.1.6.3|2|29 +1.3.6.1.2.1.25.2.3.1.6.16|2|20 +1.3.6.1.2.1.25.2.3.1.7.3|65|1361509700 +1.3.6.1.2.1.25.2.3.1.7.16|65|2158537353 +1.3.6.1.2.1.25.3.3.1.1.5|6|1.3.6.1.3.81.16 +1.3.6.1.2.1.25.3.3.1.1.10|6|1.3.6.1.3.95.73.140.186.121.144.199 +1.3.6.1.2.1.25.3.3.1.2.5|2|6 +1.3.6.1.2.1.25.3.3.1.2.10|2|2 diff --git a/test/new-e2e/ndm/snmp/compose/data/hp-ilo4.snmprec b/test/new-e2e/ndm/snmp/compose/data/hp-ilo4.snmprec new file mode 100644 index 00000000000000..ee9a9913ab6dfc --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/hp-ilo4.snmprec @@ -0,0 +1,891 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.232.9.4.10 +1.3.6.1.2.1.1.5.0|4|hp-ilo4.example +1.3.6.1.4.1.232.1.2.6.1|4|A04-08/12/2018 +1.3.6.1.4.1.232.2.2.2.1|4|dXPEdPBE5yKtjW9xx3 +1.3.6.1.4.1.232.3.2.5.1.1.1.0.2|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.1.0.28|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.1.8.31|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.1.9.24|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.1.9.28|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.1.10.17|2|10 +1.3.6.1.4.1.232.3.2.5.1.1.1.11.4|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.1.12.20|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.1.18.22|2|18 +1.3.6.1.4.1.232.3.2.5.1.1.1.23.2|2|23 +1.3.6.1.4.1.232.3.2.5.1.1.2.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.2.0.28|2|28 +1.3.6.1.4.1.232.3.2.5.1.1.2.8.31|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.2.9.24|2|24 +1.3.6.1.4.1.232.3.2.5.1.1.2.9.28|2|28 +1.3.6.1.4.1.232.3.2.5.1.1.2.10.17|2|17 +1.3.6.1.4.1.232.3.2.5.1.1.2.11.4|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.2.12.20|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.2.18.22|2|22 +1.3.6.1.4.1.232.3.2.5.1.1.2.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.3.0.2|4|but +1.3.6.1.4.1.232.3.2.5.1.1.3.0.28|4x|64726976696e67207a6f6d6269657320717561696e746c79207a6f6d62696573206b657074206b65707420627574206f78656e204a61646564 +1.3.6.1.4.1.232.3.2.5.1.1.3.8.31|4x|6b657074206f78656e20717561696e746c79206f78656e207a6f6d62696573 +1.3.6.1.4.1.232.3.2.5.1.1.3.9.24|4x|627574204a61646564206f78656e206163746564206163746564207468656972206163746564 +1.3.6.1.4.1.232.3.2.5.1.1.3.9.28|4x|717561696e746c79207468656972204a6164656420746865697220717561696e746c79207468656972 +1.3.6.1.4.1.232.3.2.5.1.1.3.10.17|4x|6163746564204a616465642062757420666f7277617264207468656972 +1.3.6.1.4.1.232.3.2.5.1.1.3.11.4|4|zombies +1.3.6.1.4.1.232.3.2.5.1.1.3.12.20|4x|666f7277617264206f78656e2064726976696e672064726976696e67 +1.3.6.1.4.1.232.3.2.5.1.1.3.18.22|4x|64726976696e672064726976696e67 +1.3.6.1.4.1.232.3.2.5.1.1.3.23.2|4|Jaded +1.3.6.1.4.1.232.3.2.5.1.1.4.0.2|4x|6b65707420627574 +1.3.6.1.4.1.232.3.2.5.1.1.4.0.28|4|Jaded +1.3.6.1.4.1.232.3.2.5.1.1.4.8.31|4|their +1.3.6.1.4.1.232.3.2.5.1.1.4.9.24|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.4.9.28|4|forward +1.3.6.1.4.1.232.3.2.5.1.1.4.10.17|4|driving +1.3.6.1.4.1.232.3.2.5.1.1.4.11.4|4|kept +1.3.6.1.4.1.232.3.2.5.1.1.4.12.20|4|Jaded +1.3.6.1.4.1.232.3.2.5.1.1.4.18.22|4|forward +1.3.6.1.4.1.232.3.2.5.1.1.4.23.2|4|forward +1.3.6.1.4.1.232.3.2.5.1.1.5.0.2|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.5.0.28|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.5.8.31|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.5.9.24|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.5.9.28|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.5.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.5.11.4|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.5.12.20|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.5.18.22|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.5.23.2|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.6.0.2|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.6.0.28|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.6.8.31|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.6.9.24|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.6.9.28|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.6.10.17|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.6.11.4|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.6.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.6.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.6.23.2|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.7.0.2|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.7.0.28|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.7.8.31|2|13 +1.3.6.1.4.1.232.3.2.5.1.1.7.9.24|2|10 +1.3.6.1.4.1.232.3.2.5.1.1.7.9.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.7.10.17|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.7.11.4|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.7.12.20|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.7.18.22|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.7.23.2|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.8.0.2|65|546389013 +1.3.6.1.4.1.232.3.2.5.1.1.8.0.28|65|2306609150 +1.3.6.1.4.1.232.3.2.5.1.1.8.8.31|65|1183142468 +1.3.6.1.4.1.232.3.2.5.1.1.8.9.24|65|1524544657 +1.3.6.1.4.1.232.3.2.5.1.1.8.9.28|65|1257847199 +1.3.6.1.4.1.232.3.2.5.1.1.8.10.17|65|4186257677 +1.3.6.1.4.1.232.3.2.5.1.1.8.11.4|65|75536387 +1.3.6.1.4.1.232.3.2.5.1.1.8.12.20|65|3025977095 +1.3.6.1.4.1.232.3.2.5.1.1.8.18.22|65|3599100832 +1.3.6.1.4.1.232.3.2.5.1.1.8.23.2|65|3165071379 +1.3.6.1.4.1.232.3.2.5.1.1.9.0.2|65|3922822364 +1.3.6.1.4.1.232.3.2.5.1.1.9.0.28|65|3234904649 +1.3.6.1.4.1.232.3.2.5.1.1.9.8.31|65|1901171918 +1.3.6.1.4.1.232.3.2.5.1.1.9.9.24|65|2263188134 +1.3.6.1.4.1.232.3.2.5.1.1.9.9.28|65|2061135672 +1.3.6.1.4.1.232.3.2.5.1.1.9.10.17|65|398777741 +1.3.6.1.4.1.232.3.2.5.1.1.9.11.4|65|1272452264 +1.3.6.1.4.1.232.3.2.5.1.1.9.12.20|65|622055389 +1.3.6.1.4.1.232.3.2.5.1.1.9.18.22|65|4131783907 +1.3.6.1.4.1.232.3.2.5.1.1.9.23.2|65|2234487753 +1.3.6.1.4.1.232.3.2.5.1.1.10.0.2|65|1741338020 +1.3.6.1.4.1.232.3.2.5.1.1.10.0.28|65|3759438885 +1.3.6.1.4.1.232.3.2.5.1.1.10.8.31|65|282836214 +1.3.6.1.4.1.232.3.2.5.1.1.10.9.24|65|2190162781 +1.3.6.1.4.1.232.3.2.5.1.1.10.9.28|65|517385251 +1.3.6.1.4.1.232.3.2.5.1.1.10.10.17|65|3377639315 +1.3.6.1.4.1.232.3.2.5.1.1.10.11.4|65|479612 +1.3.6.1.4.1.232.3.2.5.1.1.10.12.20|65|2364763386 +1.3.6.1.4.1.232.3.2.5.1.1.10.18.22|65|1540422714 +1.3.6.1.4.1.232.3.2.5.1.1.10.23.2|65|3133475512 +1.3.6.1.4.1.232.3.2.5.1.1.11.0.2|65|1181504081 +1.3.6.1.4.1.232.3.2.5.1.1.11.0.28|65|2491173497 +1.3.6.1.4.1.232.3.2.5.1.1.11.8.31|65|3042764446 +1.3.6.1.4.1.232.3.2.5.1.1.11.9.24|65|121116179 +1.3.6.1.4.1.232.3.2.5.1.1.11.9.28|65|2585114004 +1.3.6.1.4.1.232.3.2.5.1.1.11.10.17|65|715864194 +1.3.6.1.4.1.232.3.2.5.1.1.11.11.4|65|218650245 +1.3.6.1.4.1.232.3.2.5.1.1.11.12.20|65|598167615 +1.3.6.1.4.1.232.3.2.5.1.1.11.18.22|65|1149109305 +1.3.6.1.4.1.232.3.2.5.1.1.11.23.2|65|75304400 +1.3.6.1.4.1.232.3.2.5.1.1.12.0.2|65|221444980 +1.3.6.1.4.1.232.3.2.5.1.1.12.0.28|65|1337358939 +1.3.6.1.4.1.232.3.2.5.1.1.12.8.31|65|2463188951 +1.3.6.1.4.1.232.3.2.5.1.1.12.9.24|65|2136256124 +1.3.6.1.4.1.232.3.2.5.1.1.12.9.28|65|598517409 +1.3.6.1.4.1.232.3.2.5.1.1.12.10.17|65|2109086161 +1.3.6.1.4.1.232.3.2.5.1.1.12.11.4|65|2106962369 +1.3.6.1.4.1.232.3.2.5.1.1.12.12.20|65|17908343 +1.3.6.1.4.1.232.3.2.5.1.1.12.18.22|65|3202247013 +1.3.6.1.4.1.232.3.2.5.1.1.12.23.2|65|1937432163 +1.3.6.1.4.1.232.3.2.5.1.1.13.0.2|65|1734902147 +1.3.6.1.4.1.232.3.2.5.1.1.13.0.28|65|2411164755 +1.3.6.1.4.1.232.3.2.5.1.1.13.8.31|65|1781992790 +1.3.6.1.4.1.232.3.2.5.1.1.13.9.24|65|1981586934 +1.3.6.1.4.1.232.3.2.5.1.1.13.9.28|65|2050290019 +1.3.6.1.4.1.232.3.2.5.1.1.13.10.17|65|54796801 +1.3.6.1.4.1.232.3.2.5.1.1.13.11.4|65|2725543544 +1.3.6.1.4.1.232.3.2.5.1.1.13.12.20|65|3858302419 +1.3.6.1.4.1.232.3.2.5.1.1.13.18.22|65|2732286636 +1.3.6.1.4.1.232.3.2.5.1.1.13.23.2|65|2945232736 +1.3.6.1.4.1.232.3.2.5.1.1.14.0.2|65|2713126212 +1.3.6.1.4.1.232.3.2.5.1.1.14.0.28|65|4022715091 +1.3.6.1.4.1.232.3.2.5.1.1.14.8.31|65|198579111 +1.3.6.1.4.1.232.3.2.5.1.1.14.9.24|65|3580970404 +1.3.6.1.4.1.232.3.2.5.1.1.14.9.28|65|2999485097 +1.3.6.1.4.1.232.3.2.5.1.1.14.10.17|65|2324402321 +1.3.6.1.4.1.232.3.2.5.1.1.14.11.4|65|2167827525 +1.3.6.1.4.1.232.3.2.5.1.1.14.12.20|65|1503274929 +1.3.6.1.4.1.232.3.2.5.1.1.14.18.22|65|26779464 +1.3.6.1.4.1.232.3.2.5.1.1.14.23.2|65|1752319260 +1.3.6.1.4.1.232.3.2.5.1.1.15.0.2|65|1062892646 +1.3.6.1.4.1.232.3.2.5.1.1.15.0.28|65|2137439866 +1.3.6.1.4.1.232.3.2.5.1.1.15.8.31|65|213350178 +1.3.6.1.4.1.232.3.2.5.1.1.15.9.24|65|4098083155 +1.3.6.1.4.1.232.3.2.5.1.1.15.9.28|65|985304361 +1.3.6.1.4.1.232.3.2.5.1.1.15.10.17|65|3136387282 +1.3.6.1.4.1.232.3.2.5.1.1.15.11.4|65|1635061208 +1.3.6.1.4.1.232.3.2.5.1.1.15.12.20|65|3105090698 +1.3.6.1.4.1.232.3.2.5.1.1.15.18.22|65|3840894212 +1.3.6.1.4.1.232.3.2.5.1.1.15.23.2|65|3123363785 +1.3.6.1.4.1.232.3.2.5.1.1.16.0.2|65|2747324891 +1.3.6.1.4.1.232.3.2.5.1.1.16.0.28|65|3044303644 +1.3.6.1.4.1.232.3.2.5.1.1.16.8.31|65|3215286354 +1.3.6.1.4.1.232.3.2.5.1.1.16.9.24|65|329453703 +1.3.6.1.4.1.232.3.2.5.1.1.16.9.28|65|355147129 +1.3.6.1.4.1.232.3.2.5.1.1.16.10.17|65|3578386746 +1.3.6.1.4.1.232.3.2.5.1.1.16.11.4|65|1151157210 +1.3.6.1.4.1.232.3.2.5.1.1.16.12.20|65|2541753754 +1.3.6.1.4.1.232.3.2.5.1.1.16.18.22|65|3280239987 +1.3.6.1.4.1.232.3.2.5.1.1.16.23.2|65|171855281 +1.3.6.1.4.1.232.3.2.5.1.1.17.0.2|65|881428009 +1.3.6.1.4.1.232.3.2.5.1.1.17.0.28|65|2765906854 +1.3.6.1.4.1.232.3.2.5.1.1.17.8.31|65|2123221895 +1.3.6.1.4.1.232.3.2.5.1.1.17.9.24|65|3245302703 +1.3.6.1.4.1.232.3.2.5.1.1.17.9.28|65|1306227086 +1.3.6.1.4.1.232.3.2.5.1.1.17.10.17|65|3453715456 +1.3.6.1.4.1.232.3.2.5.1.1.17.11.4|65|214914874 +1.3.6.1.4.1.232.3.2.5.1.1.17.12.20|65|1195947737 +1.3.6.1.4.1.232.3.2.5.1.1.17.18.22|65|1182048622 +1.3.6.1.4.1.232.3.2.5.1.1.17.23.2|65|523297749 +1.3.6.1.4.1.232.3.2.5.1.1.18.0.2|65|1332352920 +1.3.6.1.4.1.232.3.2.5.1.1.18.0.28|65|2533263787 +1.3.6.1.4.1.232.3.2.5.1.1.18.8.31|65|1720285197 +1.3.6.1.4.1.232.3.2.5.1.1.18.9.24|65|4245380544 +1.3.6.1.4.1.232.3.2.5.1.1.18.9.28|65|1910909181 +1.3.6.1.4.1.232.3.2.5.1.1.18.10.17|65|2245241934 +1.3.6.1.4.1.232.3.2.5.1.1.18.11.4|65|3205736251 +1.3.6.1.4.1.232.3.2.5.1.1.18.12.20|65|803739619 +1.3.6.1.4.1.232.3.2.5.1.1.18.18.22|65|1158056501 +1.3.6.1.4.1.232.3.2.5.1.1.18.23.2|65|916346018 +1.3.6.1.4.1.232.3.2.5.1.1.19.0.2|65|2610456196 +1.3.6.1.4.1.232.3.2.5.1.1.19.0.28|65|40996530 +1.3.6.1.4.1.232.3.2.5.1.1.19.8.31|65|2048619498 +1.3.6.1.4.1.232.3.2.5.1.1.19.9.24|65|1201236747 +1.3.6.1.4.1.232.3.2.5.1.1.19.9.28|65|2887398693 +1.3.6.1.4.1.232.3.2.5.1.1.19.10.17|65|2142351834 +1.3.6.1.4.1.232.3.2.5.1.1.19.11.4|65|4024458378 +1.3.6.1.4.1.232.3.2.5.1.1.19.12.20|65|566543450 +1.3.6.1.4.1.232.3.2.5.1.1.19.18.22|65|3519743513 +1.3.6.1.4.1.232.3.2.5.1.1.19.23.2|65|3459523029 +1.3.6.1.4.1.232.3.2.5.1.1.20.0.2|65|43264877 +1.3.6.1.4.1.232.3.2.5.1.1.20.0.28|65|3981252740 +1.3.6.1.4.1.232.3.2.5.1.1.20.8.31|65|2390762949 +1.3.6.1.4.1.232.3.2.5.1.1.20.9.24|65|3181479601 +1.3.6.1.4.1.232.3.2.5.1.1.20.9.28|65|3311503997 +1.3.6.1.4.1.232.3.2.5.1.1.20.10.17|65|2897038505 +1.3.6.1.4.1.232.3.2.5.1.1.20.11.4|65|165941602 +1.3.6.1.4.1.232.3.2.5.1.1.20.12.20|65|953987731 +1.3.6.1.4.1.232.3.2.5.1.1.20.18.22|65|1795341671 +1.3.6.1.4.1.232.3.2.5.1.1.20.23.2|65|2277575523 +1.3.6.1.4.1.232.3.2.5.1.1.21.0.2|65|1316077395 +1.3.6.1.4.1.232.3.2.5.1.1.21.0.28|65|3677820263 +1.3.6.1.4.1.232.3.2.5.1.1.21.8.31|65|2612770528 +1.3.6.1.4.1.232.3.2.5.1.1.21.9.24|65|1027709744 +1.3.6.1.4.1.232.3.2.5.1.1.21.9.28|65|3051589898 +1.3.6.1.4.1.232.3.2.5.1.1.21.10.17|65|2370106598 +1.3.6.1.4.1.232.3.2.5.1.1.21.11.4|65|671178955 +1.3.6.1.4.1.232.3.2.5.1.1.21.12.20|65|1481115055 +1.3.6.1.4.1.232.3.2.5.1.1.21.18.22|65|908153265 +1.3.6.1.4.1.232.3.2.5.1.1.21.23.2|65|2033546701 +1.3.6.1.4.1.232.3.2.5.1.1.22.0.2|2|23 +1.3.6.1.4.1.232.3.2.5.1.1.22.0.28|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.22.8.31|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.22.9.24|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.22.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.22.10.17|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.22.11.4|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.22.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.22.18.22|2|18 +1.3.6.1.4.1.232.3.2.5.1.1.22.23.2|2|24 +1.3.6.1.4.1.232.3.2.5.1.1.23.0.2|66|2272833932 +1.3.6.1.4.1.232.3.2.5.1.1.23.0.28|66|238315886 +1.3.6.1.4.1.232.3.2.5.1.1.23.8.31|66|2332345108 +1.3.6.1.4.1.232.3.2.5.1.1.23.9.24|66|1722467098 +1.3.6.1.4.1.232.3.2.5.1.1.23.9.28|66|3365552990 +1.3.6.1.4.1.232.3.2.5.1.1.23.10.17|66|814295671 +1.3.6.1.4.1.232.3.2.5.1.1.23.11.4|66|2798738056 +1.3.6.1.4.1.232.3.2.5.1.1.23.12.20|66|3016608692 +1.3.6.1.4.1.232.3.2.5.1.1.23.18.22|66|2609823405 +1.3.6.1.4.1.232.3.2.5.1.1.23.23.2|66|2243357455 +1.3.6.1.4.1.232.3.2.5.1.1.24.0.2|66|1195544543 +1.3.6.1.4.1.232.3.2.5.1.1.24.0.28|66|1262729680 +1.3.6.1.4.1.232.3.2.5.1.1.24.8.31|66|1186252601 +1.3.6.1.4.1.232.3.2.5.1.1.24.9.24|66|1166010901 +1.3.6.1.4.1.232.3.2.5.1.1.24.9.28|66|2981821918 +1.3.6.1.4.1.232.3.2.5.1.1.24.10.17|66|1339371079 +1.3.6.1.4.1.232.3.2.5.1.1.24.11.4|66|1286022879 +1.3.6.1.4.1.232.3.2.5.1.1.24.12.20|66|3351053968 +1.3.6.1.4.1.232.3.2.5.1.1.24.18.22|66|2312438865 +1.3.6.1.4.1.232.3.2.5.1.1.24.23.2|66|4073921079 +1.3.6.1.4.1.232.3.2.5.1.1.25.0.2|66|1571443607 +1.3.6.1.4.1.232.3.2.5.1.1.25.0.28|66|3747927012 +1.3.6.1.4.1.232.3.2.5.1.1.25.8.31|66|3027271760 +1.3.6.1.4.1.232.3.2.5.1.1.25.9.24|66|3819076816 +1.3.6.1.4.1.232.3.2.5.1.1.25.9.28|66|2709190369 +1.3.6.1.4.1.232.3.2.5.1.1.25.10.17|66|3112461002 +1.3.6.1.4.1.232.3.2.5.1.1.25.11.4|66|2804238793 +1.3.6.1.4.1.232.3.2.5.1.1.25.12.20|66|2746010765 +1.3.6.1.4.1.232.3.2.5.1.1.25.18.22|66|1131305182 +1.3.6.1.4.1.232.3.2.5.1.1.25.23.2|66|630061036 +1.3.6.1.4.1.232.3.2.5.1.1.26.0.2|65|2089481769 +1.3.6.1.4.1.232.3.2.5.1.1.26.0.28|65|810038908 +1.3.6.1.4.1.232.3.2.5.1.1.26.8.31|65|1068878315 +1.3.6.1.4.1.232.3.2.5.1.1.26.9.24|65|103961563 +1.3.6.1.4.1.232.3.2.5.1.1.26.9.28|65|2013639362 +1.3.6.1.4.1.232.3.2.5.1.1.26.10.17|65|2951245451 +1.3.6.1.4.1.232.3.2.5.1.1.26.11.4|65|186230100 +1.3.6.1.4.1.232.3.2.5.1.1.26.12.20|65|4182707117 +1.3.6.1.4.1.232.3.2.5.1.1.26.18.22|65|3028338343 +1.3.6.1.4.1.232.3.2.5.1.1.26.23.2|65|168329345 +1.3.6.1.4.1.232.3.2.5.1.1.27.0.2|65|374054158 +1.3.6.1.4.1.232.3.2.5.1.1.27.0.28|65|2567904399 +1.3.6.1.4.1.232.3.2.5.1.1.27.8.31|65|522893109 +1.3.6.1.4.1.232.3.2.5.1.1.27.9.24|65|119532592 +1.3.6.1.4.1.232.3.2.5.1.1.27.9.28|65|2471496068 +1.3.6.1.4.1.232.3.2.5.1.1.27.10.17|65|2594363310 +1.3.6.1.4.1.232.3.2.5.1.1.27.11.4|65|3944959901 +1.3.6.1.4.1.232.3.2.5.1.1.27.12.20|65|4164483098 +1.3.6.1.4.1.232.3.2.5.1.1.27.18.22|65|2883751910 +1.3.6.1.4.1.232.3.2.5.1.1.27.23.2|65|2206974357 +1.3.6.1.4.1.232.3.2.5.1.1.28.0.2|65|3925445605 +1.3.6.1.4.1.232.3.2.5.1.1.28.0.28|65|1713645649 +1.3.6.1.4.1.232.3.2.5.1.1.28.8.31|65|559394300 +1.3.6.1.4.1.232.3.2.5.1.1.28.9.24|65|3885486446 +1.3.6.1.4.1.232.3.2.5.1.1.28.9.28|65|4210915605 +1.3.6.1.4.1.232.3.2.5.1.1.28.10.17|65|220092674 +1.3.6.1.4.1.232.3.2.5.1.1.28.11.4|65|3868626828 +1.3.6.1.4.1.232.3.2.5.1.1.28.12.20|65|3239804722 +1.3.6.1.4.1.232.3.2.5.1.1.28.18.22|65|2585992683 +1.3.6.1.4.1.232.3.2.5.1.1.28.23.2|65|4160128227 +1.3.6.1.4.1.232.3.2.5.1.1.29.0.2|65|3584995123 +1.3.6.1.4.1.232.3.2.5.1.1.29.0.28|65|3107079286 +1.3.6.1.4.1.232.3.2.5.1.1.29.8.31|65|2508263122 +1.3.6.1.4.1.232.3.2.5.1.1.29.9.24|65|3981942807 +1.3.6.1.4.1.232.3.2.5.1.1.29.9.28|65|3550107921 +1.3.6.1.4.1.232.3.2.5.1.1.29.10.17|65|176899773 +1.3.6.1.4.1.232.3.2.5.1.1.29.11.4|65|1648399595 +1.3.6.1.4.1.232.3.2.5.1.1.29.12.20|65|3297067055 +1.3.6.1.4.1.232.3.2.5.1.1.29.18.22|65|3445404027 +1.3.6.1.4.1.232.3.2.5.1.1.29.23.2|65|2016773999 +1.3.6.1.4.1.232.3.2.5.1.1.30.0.2|65|2989537942 +1.3.6.1.4.1.232.3.2.5.1.1.30.0.28|65|3934222433 +1.3.6.1.4.1.232.3.2.5.1.1.30.8.31|65|2477940641 +1.3.6.1.4.1.232.3.2.5.1.1.30.9.24|65|4200705038 +1.3.6.1.4.1.232.3.2.5.1.1.30.9.28|65|3858528366 +1.3.6.1.4.1.232.3.2.5.1.1.30.10.17|65|3986228859 +1.3.6.1.4.1.232.3.2.5.1.1.30.11.4|65|2662203714 +1.3.6.1.4.1.232.3.2.5.1.1.30.12.20|65|3761701964 +1.3.6.1.4.1.232.3.2.5.1.1.30.18.22|65|1418961513 +1.3.6.1.4.1.232.3.2.5.1.1.30.23.2|65|2750812238 +1.3.6.1.4.1.232.3.2.5.1.1.31.0.2|65|916231198 +1.3.6.1.4.1.232.3.2.5.1.1.31.0.28|65|2146594321 +1.3.6.1.4.1.232.3.2.5.1.1.31.8.31|65|995962026 +1.3.6.1.4.1.232.3.2.5.1.1.31.9.24|65|3587479373 +1.3.6.1.4.1.232.3.2.5.1.1.31.9.28|65|4232069374 +1.3.6.1.4.1.232.3.2.5.1.1.31.10.17|65|2353390047 +1.3.6.1.4.1.232.3.2.5.1.1.31.11.4|65|3388648852 +1.3.6.1.4.1.232.3.2.5.1.1.31.12.20|65|3669696917 +1.3.6.1.4.1.232.3.2.5.1.1.31.18.22|65|2817308627 +1.3.6.1.4.1.232.3.2.5.1.1.31.23.2|65|1972361499 +1.3.6.1.4.1.232.3.2.5.1.1.32.0.2|65|296578155 +1.3.6.1.4.1.232.3.2.5.1.1.32.0.28|65|3928100633 +1.3.6.1.4.1.232.3.2.5.1.1.32.8.31|65|2321027611 +1.3.6.1.4.1.232.3.2.5.1.1.32.9.24|65|2503792394 +1.3.6.1.4.1.232.3.2.5.1.1.32.9.28|65|3554487951 +1.3.6.1.4.1.232.3.2.5.1.1.32.10.17|65|1128696502 +1.3.6.1.4.1.232.3.2.5.1.1.32.11.4|65|1115663679 +1.3.6.1.4.1.232.3.2.5.1.1.32.12.20|65|1925210987 +1.3.6.1.4.1.232.3.2.5.1.1.32.18.22|65|2145808767 +1.3.6.1.4.1.232.3.2.5.1.1.32.23.2|65|723298107 +1.3.6.1.4.1.232.3.2.5.1.1.33.0.2|65|4232763688 +1.3.6.1.4.1.232.3.2.5.1.1.33.0.28|65|2515648724 +1.3.6.1.4.1.232.3.2.5.1.1.33.8.31|65|1905715607 +1.3.6.1.4.1.232.3.2.5.1.1.33.9.24|65|1573221775 +1.3.6.1.4.1.232.3.2.5.1.1.33.9.28|65|2178293335 +1.3.6.1.4.1.232.3.2.5.1.1.33.10.17|65|1373042557 +1.3.6.1.4.1.232.3.2.5.1.1.33.11.4|65|324493681 +1.3.6.1.4.1.232.3.2.5.1.1.33.12.20|65|863366144 +1.3.6.1.4.1.232.3.2.5.1.1.33.18.22|65|2834520456 +1.3.6.1.4.1.232.3.2.5.1.1.33.23.2|65|660770811 +1.3.6.1.4.1.232.3.2.5.1.1.34.0.2|65|895977516 +1.3.6.1.4.1.232.3.2.5.1.1.34.0.28|65|3912491867 +1.3.6.1.4.1.232.3.2.5.1.1.34.8.31|65|2935708564 +1.3.6.1.4.1.232.3.2.5.1.1.34.9.24|65|613479510 +1.3.6.1.4.1.232.3.2.5.1.1.34.9.28|65|353982695 +1.3.6.1.4.1.232.3.2.5.1.1.34.10.17|65|1719422533 +1.3.6.1.4.1.232.3.2.5.1.1.34.11.4|65|2753507707 +1.3.6.1.4.1.232.3.2.5.1.1.34.12.20|65|2531058768 +1.3.6.1.4.1.232.3.2.5.1.1.34.18.22|65|1738463797 +1.3.6.1.4.1.232.3.2.5.1.1.34.23.2|65|230339965 +1.3.6.1.4.1.232.3.2.5.1.1.35.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.35.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.35.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.11.4|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.35.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.23.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.0.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.11.4|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.12.20|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.23.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.37.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.37.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.37.8.31|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.37.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.37.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.37.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.37.11.4|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.37.12.20|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.37.18.22|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.37.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.38.0.2|65|695149768 +1.3.6.1.4.1.232.3.2.5.1.1.38.0.28|65|3356476138 +1.3.6.1.4.1.232.3.2.5.1.1.38.8.31|65|10938476 +1.3.6.1.4.1.232.3.2.5.1.1.38.9.24|65|3824347234 +1.3.6.1.4.1.232.3.2.5.1.1.38.9.28|65|2299135820 +1.3.6.1.4.1.232.3.2.5.1.1.38.10.17|65|3127782166 +1.3.6.1.4.1.232.3.2.5.1.1.38.11.4|65|650087465 +1.3.6.1.4.1.232.3.2.5.1.1.38.12.20|65|1126275168 +1.3.6.1.4.1.232.3.2.5.1.1.38.18.22|65|292840402 +1.3.6.1.4.1.232.3.2.5.1.1.38.23.2|65|833195757 +1.3.6.1.4.1.232.3.2.5.1.1.39.0.2|65|273708010 +1.3.6.1.4.1.232.3.2.5.1.1.39.0.28|65|2930543340 +1.3.6.1.4.1.232.3.2.5.1.1.39.8.31|65|1360991038 +1.3.6.1.4.1.232.3.2.5.1.1.39.9.24|65|360503215 +1.3.6.1.4.1.232.3.2.5.1.1.39.9.28|65|4180016804 +1.3.6.1.4.1.232.3.2.5.1.1.39.10.17|65|3091053534 +1.3.6.1.4.1.232.3.2.5.1.1.39.11.4|65|3927959624 +1.3.6.1.4.1.232.3.2.5.1.1.39.12.20|65|3019266957 +1.3.6.1.4.1.232.3.2.5.1.1.39.18.22|65|1783253281 +1.3.6.1.4.1.232.3.2.5.1.1.39.23.2|65|3451792479 +1.3.6.1.4.1.232.3.2.5.1.1.40.0.2|65|2074093460 +1.3.6.1.4.1.232.3.2.5.1.1.40.0.28|65|1245631859 +1.3.6.1.4.1.232.3.2.5.1.1.40.8.31|65|2278547273 +1.3.6.1.4.1.232.3.2.5.1.1.40.9.24|65|262900694 +1.3.6.1.4.1.232.3.2.5.1.1.40.9.28|65|3929997821 +1.3.6.1.4.1.232.3.2.5.1.1.40.10.17|65|3399525625 +1.3.6.1.4.1.232.3.2.5.1.1.40.11.4|65|3375585056 +1.3.6.1.4.1.232.3.2.5.1.1.40.12.20|65|2460123296 +1.3.6.1.4.1.232.3.2.5.1.1.40.18.22|65|1661289605 +1.3.6.1.4.1.232.3.2.5.1.1.40.23.2|65|4099258745 +1.3.6.1.4.1.232.3.2.5.1.1.41.0.2|65|67819348 +1.3.6.1.4.1.232.3.2.5.1.1.41.0.28|65|4025257665 +1.3.6.1.4.1.232.3.2.5.1.1.41.8.31|65|778931221 +1.3.6.1.4.1.232.3.2.5.1.1.41.9.24|65|3973425930 +1.3.6.1.4.1.232.3.2.5.1.1.41.9.28|65|683938656 +1.3.6.1.4.1.232.3.2.5.1.1.41.10.17|65|3311880823 +1.3.6.1.4.1.232.3.2.5.1.1.41.11.4|65|3358020460 +1.3.6.1.4.1.232.3.2.5.1.1.41.12.20|65|1507642352 +1.3.6.1.4.1.232.3.2.5.1.1.41.18.22|65|3032576586 +1.3.6.1.4.1.232.3.2.5.1.1.41.23.2|65|1081195094 +1.3.6.1.4.1.232.3.2.5.1.1.42.0.2|65|2958829949 +1.3.6.1.4.1.232.3.2.5.1.1.42.0.28|65|3881154002 +1.3.6.1.4.1.232.3.2.5.1.1.42.8.31|65|868131005 +1.3.6.1.4.1.232.3.2.5.1.1.42.9.24|65|3507732127 +1.3.6.1.4.1.232.3.2.5.1.1.42.9.28|65|2408249280 +1.3.6.1.4.1.232.3.2.5.1.1.42.10.17|65|3661936369 +1.3.6.1.4.1.232.3.2.5.1.1.42.11.4|65|83913712 +1.3.6.1.4.1.232.3.2.5.1.1.42.12.20|65|1692536119 +1.3.6.1.4.1.232.3.2.5.1.1.42.18.22|65|83128752 +1.3.6.1.4.1.232.3.2.5.1.1.42.23.2|65|271214931 +1.3.6.1.4.1.232.3.2.5.1.1.43.0.2|65|3379400009 +1.3.6.1.4.1.232.3.2.5.1.1.43.0.28|65|2113936975 +1.3.6.1.4.1.232.3.2.5.1.1.43.8.31|65|4269595898 +1.3.6.1.4.1.232.3.2.5.1.1.43.9.24|65|2636068769 +1.3.6.1.4.1.232.3.2.5.1.1.43.9.28|65|3509528056 +1.3.6.1.4.1.232.3.2.5.1.1.43.10.17|65|2019075204 +1.3.6.1.4.1.232.3.2.5.1.1.43.11.4|65|3241766477 +1.3.6.1.4.1.232.3.2.5.1.1.43.12.20|65|1716200504 +1.3.6.1.4.1.232.3.2.5.1.1.43.18.22|65|1957275437 +1.3.6.1.4.1.232.3.2.5.1.1.43.23.2|65|2456872217 +1.3.6.1.4.1.232.3.2.5.1.1.44.0.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.44.0.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.44.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.44.9.24|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.44.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.44.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.44.11.4|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.44.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.44.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.44.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.45.0.2|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.45.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.45.8.31|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.45.9.24|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.45.9.28|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.45.10.17|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.45.11.4|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.45.12.20|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.45.18.22|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.45.23.2|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.46.0.2|65|3561272272 +1.3.6.1.4.1.232.3.2.5.1.1.46.0.28|65|4174662596 +1.3.6.1.4.1.232.3.2.5.1.1.46.8.31|65|689811778 +1.3.6.1.4.1.232.3.2.5.1.1.46.9.24|65|1530456354 +1.3.6.1.4.1.232.3.2.5.1.1.46.9.28|65|20151350 +1.3.6.1.4.1.232.3.2.5.1.1.46.10.17|65|1335195536 +1.3.6.1.4.1.232.3.2.5.1.1.46.11.4|65|3704812105 +1.3.6.1.4.1.232.3.2.5.1.1.46.12.20|65|1550626120 +1.3.6.1.4.1.232.3.2.5.1.1.46.18.22|65|3138673084 +1.3.6.1.4.1.232.3.2.5.1.1.46.23.2|65|655955111 +1.3.6.1.4.1.232.3.2.5.1.1.47.0.2|65|1839069213 +1.3.6.1.4.1.232.3.2.5.1.1.47.0.28|65|174038400 +1.3.6.1.4.1.232.3.2.5.1.1.47.8.31|65|3244003037 +1.3.6.1.4.1.232.3.2.5.1.1.47.9.24|65|1347107392 +1.3.6.1.4.1.232.3.2.5.1.1.47.9.28|65|1186660290 +1.3.6.1.4.1.232.3.2.5.1.1.47.10.17|65|1395461969 +1.3.6.1.4.1.232.3.2.5.1.1.47.11.4|65|4027008497 +1.3.6.1.4.1.232.3.2.5.1.1.47.12.20|65|1547161558 +1.3.6.1.4.1.232.3.2.5.1.1.47.18.22|65|1118166193 +1.3.6.1.4.1.232.3.2.5.1.1.47.23.2|65|4220984397 +1.3.6.1.4.1.232.3.2.5.1.1.48.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.48.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.48.8.31|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.48.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.48.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.48.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.48.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.48.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.48.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.48.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.49.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.49.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.49.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.49.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.49.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.49.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.49.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.49.12.20|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.49.18.22|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.49.23.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.50.0.2|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.50.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.50.8.31|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.50.9.24|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.50.9.28|2|10 +1.3.6.1.4.1.232.3.2.5.1.1.50.10.17|2|17 +1.3.6.1.4.1.232.3.2.5.1.1.50.11.4|2|17 +1.3.6.1.4.1.232.3.2.5.1.1.50.12.20|2|22 +1.3.6.1.4.1.232.3.2.5.1.1.50.18.22|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.50.23.2|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.51.0.2|4x|7a6f6d6269657320627574207468656972206b657074 +1.3.6.1.4.1.232.3.2.5.1.1.51.0.28|4x|627574207468656972206f78656e207468656972 +1.3.6.1.4.1.232.3.2.5.1.1.51.8.31|4x|4a61646564206f78656e206163746564 +1.3.6.1.4.1.232.3.2.5.1.1.51.9.24|4|but +1.3.6.1.4.1.232.3.2.5.1.1.51.9.28|4x|7a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.232.3.2.5.1.1.51.10.17|4x|627574206b657074 +1.3.6.1.4.1.232.3.2.5.1.1.51.11.4|4x|6f78656e204a61646564206b65707420627574206b657074207a6f6d62696573 +1.3.6.1.4.1.232.3.2.5.1.1.51.12.20|4x|746865697220616374656420717561696e746c7920717561696e746c79206163746564 +1.3.6.1.4.1.232.3.2.5.1.1.51.18.22|4|but +1.3.6.1.4.1.232.3.2.5.1.1.51.23.2|4x|627574206f78656e204a6164656420666f7277617264204a61646564 +1.3.6.1.4.1.232.3.2.5.1.1.52.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.52.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.52.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.52.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.52.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.52.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.52.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.52.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.52.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.52.23.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.53.0.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.53.0.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.53.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.53.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.53.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.53.10.17|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.53.11.4|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.53.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.53.18.22|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.53.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.54.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.54.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.54.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.54.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.54.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.54.10.17|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.54.11.4|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.54.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.54.18.22|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.54.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.55.0.2|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.55.0.28|2|26 +1.3.6.1.4.1.232.3.2.5.1.1.55.8.31|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.55.9.24|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.55.9.28|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.55.10.17|2|13 +1.3.6.1.4.1.232.3.2.5.1.1.55.11.4|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.55.12.20|2|24 +1.3.6.1.4.1.232.3.2.5.1.1.55.18.22|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.55.23.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.56.0.2|65|2949968298 +1.3.6.1.4.1.232.3.2.5.1.1.56.0.28|65|2491218975 +1.3.6.1.4.1.232.3.2.5.1.1.56.8.31|65|233525739 +1.3.6.1.4.1.232.3.2.5.1.1.56.9.24|65|336628689 +1.3.6.1.4.1.232.3.2.5.1.1.56.9.28|65|2014596717 +1.3.6.1.4.1.232.3.2.5.1.1.56.10.17|65|4222268319 +1.3.6.1.4.1.232.3.2.5.1.1.56.11.4|65|2071508675 +1.3.6.1.4.1.232.3.2.5.1.1.56.12.20|65|1261145831 +1.3.6.1.4.1.232.3.2.5.1.1.56.18.22|65|1296062476 +1.3.6.1.4.1.232.3.2.5.1.1.56.23.2|65|1252664383 +1.3.6.1.4.1.232.3.2.5.1.1.57.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.57.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.57.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.57.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.57.9.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.57.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.57.11.4|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.57.12.20|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.57.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.57.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.58.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.58.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.58.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.58.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.58.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.58.10.17|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.58.11.4|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.58.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.58.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.58.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.59.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.59.0.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.59.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.59.9.24|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.59.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.59.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.59.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.59.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.59.18.22|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.59.23.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.60.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.60.0.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.60.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.60.9.24|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.60.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.60.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.60.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.60.12.20|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.60.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.60.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.61.0.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.61.0.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.61.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.61.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.61.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.61.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.61.11.4|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.61.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.61.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.61.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.62.0.2|4|but +1.3.6.1.4.1.232.3.2.5.1.1.62.0.28|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.62.8.31|4|but +1.3.6.1.4.1.232.3.2.5.1.1.62.9.24|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.62.9.28|4|but +1.3.6.1.4.1.232.3.2.5.1.1.62.10.17|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.62.11.4|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.62.12.20|4|kept +1.3.6.1.4.1.232.3.2.5.1.1.62.18.22|4|but +1.3.6.1.4.1.232.3.2.5.1.1.62.23.2|4|kept +1.3.6.1.4.1.232.3.2.5.1.1.63.0.2|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.63.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.63.8.31|2|26 +1.3.6.1.4.1.232.3.2.5.1.1.63.9.24|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.63.9.28|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.63.10.17|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.63.11.4|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.63.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.63.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.63.23.2|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.64.0.2|4x|627574207468656972206b657074 +1.3.6.1.4.1.232.3.2.5.1.1.64.0.28|4x|64726976696e672064726976696e67206f78656e204a61646564 +1.3.6.1.4.1.232.3.2.5.1.1.64.8.31|4x|6163746564204a61646564207a6f6d62696573207468656972206f78656e206b65707420666f7277617264 +1.3.6.1.4.1.232.3.2.5.1.1.64.9.24|4x|6163746564204a61646564 +1.3.6.1.4.1.232.3.2.5.1.1.64.9.28|4|acted +1.3.6.1.4.1.232.3.2.5.1.1.64.10.17|4x|666f72776172642062757420717561696e746c7920666f7277617264207a6f6d6269657320666f7277617264206b657074207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.232.3.2.5.1.1.64.11.4|4x|64726976696e67206275742074686569722064726976696e67204a61646564207a6f6d62696573206f78656e2062757420627574 +1.3.6.1.4.1.232.3.2.5.1.1.64.12.20|4x|746865697220666f7277617264204a6164656420717561696e746c79 +1.3.6.1.4.1.232.3.2.5.1.1.64.18.22|4x|746865697220717561696e746c792064726976696e672064726976696e67206b657074 +1.3.6.1.4.1.232.3.2.5.1.1.64.23.2|4x|7a6f6d62696573207a6f6d626965732064726976696e6720666f7277617264 +1.3.6.1.4.1.232.3.2.5.1.1.65.0.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.65.0.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.65.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.65.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.65.9.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.65.10.17|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.65.11.4|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.65.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.65.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.65.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.66.0.2|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.66.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.66.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.66.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.66.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.66.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.66.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.66.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.66.18.22|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.66.23.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.67.0.2|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.67.0.28|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.67.8.31|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.67.9.24|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.67.9.28|2|28 +1.3.6.1.4.1.232.3.2.5.1.1.67.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.67.11.4|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.67.12.20|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.67.18.22|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.67.23.2|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.68.0.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.68.0.28|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.68.8.31|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.68.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.68.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.68.10.17|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.68.11.4|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.68.12.20|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.68.18.22|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.68.23.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.69.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.69.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.8.31|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.69.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.69.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.69.18.22|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.70.0.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.70.0.28|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.70.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.70.9.24|2|22 +1.3.6.1.4.1.232.3.2.5.1.1.70.9.28|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.70.10.17|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.70.11.4|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.70.12.20|2|30 +1.3.6.1.4.1.232.3.2.5.1.1.70.18.22|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.70.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.71.0.2|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.71.0.28|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.71.8.31|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.71.9.24|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.71.9.28|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.71.10.17|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.71.11.4|2|23 +1.3.6.1.4.1.232.3.2.5.1.1.71.12.20|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.71.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.71.23.2|2|10 +1.3.6.1.4.1.232.3.2.5.1.1.72.0.2|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.72.0.28|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.72.8.31|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.72.9.24|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.72.9.28|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.72.10.17|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.72.11.4|2|29 +1.3.6.1.4.1.232.3.2.5.1.1.72.12.20|2|17 +1.3.6.1.4.1.232.3.2.5.1.1.72.18.22|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.72.23.2|2|23 +1.3.6.1.4.1.232.3.2.5.1.1.73.0.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.73.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.73.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.9.24|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.73.11.4|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.18.22|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.73.23.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.74.0.2|65|2908799926 +1.3.6.1.4.1.232.3.2.5.1.1.74.0.28|65|2490380324 +1.3.6.1.4.1.232.3.2.5.1.1.74.8.31|65|2597785093 +1.3.6.1.4.1.232.3.2.5.1.1.74.9.24|65|4254200557 +1.3.6.1.4.1.232.3.2.5.1.1.74.9.28|65|696408854 +1.3.6.1.4.1.232.3.2.5.1.1.74.10.17|65|165954175 +1.3.6.1.4.1.232.3.2.5.1.1.74.11.4|65|404169227 +1.3.6.1.4.1.232.3.2.5.1.1.74.12.20|65|368625461 +1.3.6.1.4.1.232.3.2.5.1.1.74.18.22|65|2141670018 +1.3.6.1.4.1.232.3.2.5.1.1.74.23.2|65|3382161332 +1.3.6.1.4.1.232.3.2.5.1.1.75.0.2|66|2380887083 +1.3.6.1.4.1.232.3.2.5.1.1.75.0.28|66|1128640721 +1.3.6.1.4.1.232.3.2.5.1.1.75.8.31|66|3386410156 +1.3.6.1.4.1.232.3.2.5.1.1.75.9.24|66|46631455 +1.3.6.1.4.1.232.3.2.5.1.1.75.9.28|66|1683028466 +1.3.6.1.4.1.232.3.2.5.1.1.75.10.17|66|2663962912 +1.3.6.1.4.1.232.3.2.5.1.1.75.11.4|66|1693199007 +1.3.6.1.4.1.232.3.2.5.1.1.75.12.20|66|3786879383 +1.3.6.1.4.1.232.3.2.5.1.1.75.18.22|66|873327295 +1.3.6.1.4.1.232.3.2.5.1.1.75.23.2|66|1558173398 +1.3.6.1.4.1.232.3.2.5.1.1.76.0.2|65|2103006361 +1.3.6.1.4.1.232.3.2.5.1.1.76.0.28|65|1426172609 +1.3.6.1.4.1.232.3.2.5.1.1.76.8.31|65|991215997 +1.3.6.1.4.1.232.3.2.5.1.1.76.9.24|65|2962747034 +1.3.6.1.4.1.232.3.2.5.1.1.76.9.28|65|2527741665 +1.3.6.1.4.1.232.3.2.5.1.1.76.10.17|65|2054720417 +1.3.6.1.4.1.232.3.2.5.1.1.76.11.4|65|2600139724 +1.3.6.1.4.1.232.3.2.5.1.1.76.12.20|65|999271546 +1.3.6.1.4.1.232.3.2.5.1.1.76.18.22|65|388628255 +1.3.6.1.4.1.232.3.2.5.1.1.76.23.2|65|457008923 +1.3.6.1.4.1.232.3.2.5.1.1.77.0.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.77.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.77.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.77.9.24|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.77.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.77.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.77.11.4|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.77.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.77.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.77.23.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.78.0.2|2|13 +1.3.6.1.4.1.232.3.2.5.1.1.78.0.28|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.78.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.78.9.24|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.78.9.28|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.78.10.17|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.78.11.4|2|24 +1.3.6.1.4.1.232.3.2.5.1.1.78.12.20|2|30 +1.3.6.1.4.1.232.3.2.5.1.1.78.18.22|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.78.23.2|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.79.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.79.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.79.8.31|2|26 +1.3.6.1.4.1.232.3.2.5.1.1.79.9.24|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.79.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.79.10.17|2|13 +1.3.6.1.4.1.232.3.2.5.1.1.79.11.4|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.79.12.20|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.79.18.22|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.79.23.2|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.80.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.9.24|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.80.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.80.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.80.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.80.23.2|2|1 +1.3.6.1.4.1.232.6.2.2.2.0|2|2 +1.3.6.1.4.1.232.6.2.3.1.0|2|4 +1.3.6.1.4.1.232.6.2.3.2.0|2|2 +1.3.6.1.4.1.232.6.2.3.3.0|2|1234 +1.3.6.1.4.1.232.6.2.5.1.0|2|4 +1.3.6.1.4.1.232.6.2.5.6.0|2|3 +1.3.6.1.4.1.232.6.2.5.10.0|2|5 +1.3.6.1.4.1.232.6.2.5.17.0|2|4 +1.3.6.1.4.1.232.6.2.5.21.0|2|3 +1.3.6.1.4.1.232.6.2.6.1.0|2|2 +1.3.6.1.4.1.232.6.2.6.3.0|2|2 +1.3.6.1.4.1.232.6.2.6.4.0|2|2 +1.3.6.1.4.1.232.6.2.6.5.0|2|2 +1.3.6.1.4.1.232.6.2.6.8.1.3.0|2|1 +1.3.6.1.4.1.232.6.2.6.8.1.3.1|2|13 +1.3.6.1.4.1.232.6.2.6.8.1.3.2|2|28 +1.3.6.1.4.1.232.6.2.6.8.1.4.0|2|40 +1.3.6.1.4.1.232.6.2.6.8.1.4.1|2|45 +1.3.6.1.4.1.232.6.2.6.8.1.4.2|2|55 +1.3.6.1.4.1.232.6.2.6.8.1.6.0|2|2 +1.3.6.1.4.1.232.6.2.6.8.1.6.1|2|2 +1.3.6.1.4.1.232.6.2.6.8.1.6.2|2|3 +1.3.6.1.4.1.232.6.2.8.1.0|2|1051200 +1.3.6.1.4.1.232.6.2.8.2.0|2|42 +1.3.6.1.4.1.232.6.2.15.3.0|2|82 +1.3.6.1.4.1.232.6.2.17.2.1.2.0|2|1 +1.3.6.1.4.1.232.6.2.17.2.1.2.1|2|3 +1.3.6.1.4.1.232.6.2.17.2.1.2.2|2|4 +1.3.6.1.4.1.232.6.2.17.2.1.2.3|2|5 +1.3.6.1.4.1.232.6.2.17.2.1.4.0|2|2 +1.3.6.1.4.1.232.6.2.17.2.1.4.1|2|2 +1.3.6.1.4.1.232.6.2.17.2.1.4.2|2|2 +1.3.6.1.4.1.232.6.2.17.2.1.4.3|2|4 +1.3.6.1.4.1.232.6.2.17.2.1.5.0|2|1 +1.3.6.1.4.1.232.6.2.17.2.1.5.1|2|1 +1.3.6.1.4.1.232.6.2.17.2.1.5.2|2|1 +1.3.6.1.4.1.232.6.2.17.2.1.5.3|2|12 +1.3.6.1.4.1.232.9.2.2.5|2|2 +1.3.6.1.4.1.232.9.2.2.6|2|89 +1.3.6.1.4.1.232.9.2.2.9|2|0 +1.3.6.1.4.1.232.9.2.2.16|2|2 +1.3.6.1.4.1.232.9.2.2.17|2|2 +1.3.6.1.4.1.232.9.2.2.32|2|3 +1.3.6.1.4.1.232.9.2.3.1|2|10 +1.3.6.1.4.1.232.9.2.5.2.1.1.0|2|2 +1.3.6.1.4.1.232.9.2.5.2.1.1.1|2|3 +1.3.6.1.4.1.232.9.2.5.2.1.2.0|65|2048000 +1.3.6.1.4.1.232.9.2.5.2.1.2.1|65|4096000 +1.3.6.1.4.1.232.9.2.5.2.1.3.0|65|2000 +1.3.6.1.4.1.232.9.2.5.2.1.3.1|65|4000 +1.3.6.1.4.1.232.9.2.5.2.1.6.0|65|10 +1.3.6.1.4.1.232.9.2.5.2.1.6.1|65|42 +1.3.6.1.4.1.232.9.2.5.2.1.7.0|65|0 +1.3.6.1.4.1.232.9.2.5.2.1.7.1|65|3 +1.3.6.1.4.1.232.9.2.5.2.1.8.0|65|200 +1.3.6.1.4.1.232.9.2.5.2.1.8.1|65|800 +1.3.6.1.4.1.232.9.2.5.2.1.9.0|65|1024000 +1.3.6.1.4.1.232.9.2.5.2.1.9.1|65|3072000 +1.3.6.1.4.1.232.9.2.5.2.1.10.0|65|1000 +1.3.6.1.4.1.232.9.2.5.2.1.10.1|65|3000 +1.3.6.1.4.1.232.9.2.5.2.1.13.0|65|30 +1.3.6.1.4.1.232.9.2.5.2.1.13.1|65|15 +1.3.6.1.4.1.232.9.2.5.2.1.14.0|65|2 +1.3.6.1.4.1.232.9.2.5.2.1.14.1|65|9 +1.3.6.1.4.1.232.9.2.5.2.1.15.0|65|0 +1.3.6.1.4.1.232.9.2.5.2.1.15.1|65|17 +1.3.6.1.4.1.232.11.2.2.1|4|RHEL +1.3.6.1.4.1.232.11.2.2.2|4|3.10.0-862.14.4.el7.ve.x86_64 +1.3.6.1.4.1.232.18.2.3.1.1.16.0|65|2000 +1.3.6.1.4.1.232.18.2.3.1.1.16.1|65|2500 +1.3.6.1.4.1.232.18.2.3.1.1.17.0|65|9000 +1.3.6.1.4.1.232.18.2.3.1.1.17.1|65|7600 +1.3.6.1.4.1.232.18.2.3.1.1.18.0|65|10 +1.3.6.1.4.1.232.18.2.3.1.1.18.1|65|0 +1.3.6.1.4.1.232.18.2.3.1.1.19.0|65|143 +1.3.6.1.4.1.232.18.2.3.1.1.19.1|65|25 +1.3.6.1.4.1.232.18.2.3.1.1.33.0|66|65536 +1.3.6.1.4.1.232.18.2.3.1.1.33.1|66|0 +1.3.6.1.4.1.232.18.2.3.1.1.36.0|66|1 +1.3.6.1.4.1.232.18.2.3.1.1.36.1|66|260 +1.3.6.1.4.1.232.18.2.3.1.1.37.0|65|16000 +1.3.6.1.4.1.232.18.2.3.1.1.37.1|65|20000 +1.3.6.1.4.1.232.18.2.3.1.1.38.0|65|72000 +1.3.6.1.4.1.232.18.2.3.1.1.38.1|65|60800 +1.3.6.1.4.1.232.18.2.3.1.1.39.0|4x|65746830 +1.3.6.1.4.1.232.18.2.3.1.1.39.1|4x|656e31 +1.3.6.1.4.1.232.18.2.5.3|2|1 diff --git a/test/new-e2e/ndm/snmp/compose/data/hpe-proliant.snmprec b/test/new-e2e/ndm/snmp/compose/data/hpe-proliant.snmprec new file mode 100644 index 00000000000000..67677848dd0079 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/hpe-proliant.snmprec @@ -0,0 +1,1857 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.232.1.2 +1.3.6.1.2.1.1.5.0|4|hpe-proliant.example +1.3.6.1.2.1.2.2.1.1.3|2|3 +1.3.6.1.2.1.2.2.1.1.4|2|4 +1.3.6.1.2.1.2.2.1.2.3|4x|65746830 +1.3.6.1.2.1.2.2.1.2.4|4x|65746831 +1.3.6.1.2.1.2.2.1.3.3|2|13 +1.3.6.1.2.1.2.2.1.3.4|2|22 +1.3.6.1.2.1.2.2.1.4.3|2|20 +1.3.6.1.2.1.2.2.1.4.4|2|30 +1.3.6.1.2.1.2.2.1.5.3|66|1967830453 +1.3.6.1.2.1.2.2.1.5.4|66|561506485 +1.3.6.1.2.1.2.2.1.6.3|4x|12 +1.3.6.1.2.1.2.2.1.6.4|4x|13 +1.3.6.1.2.1.2.2.1.7.3|2|3 +1.3.6.1.2.1.2.2.1.7.4|2|3 +1.3.6.1.2.1.2.2.1.8.3|2|6 +1.3.6.1.2.1.2.2.1.8.4|2|1 +1.3.6.1.2.1.2.2.1.9.3|67|2922247544 +1.3.6.1.2.1.2.2.1.9.4|67|3503289067 +1.3.6.1.2.1.2.2.1.10.3|65|799330449 +1.3.6.1.2.1.2.2.1.10.4|65|1416546150 +1.3.6.1.2.1.2.2.1.11.3|65|1806496968 +1.3.6.1.2.1.2.2.1.11.4|65|1711866985 +1.3.6.1.2.1.2.2.1.12.3|65|2615824481 +1.3.6.1.2.1.2.2.1.12.4|65|422208764 +1.3.6.1.2.1.2.2.1.13.3|65|2637156982 +1.3.6.1.2.1.2.2.1.13.4|65|129617886 +1.3.6.1.2.1.2.2.1.14.3|65|2546706536 +1.3.6.1.2.1.2.2.1.14.4|65|1748404057 +1.3.6.1.2.1.2.2.1.15.3|65|937833439 +1.3.6.1.2.1.2.2.1.15.4|65|3384258657 +1.3.6.1.2.1.2.2.1.16.3|65|2607613508 +1.3.6.1.2.1.2.2.1.16.4|65|2163750849 +1.3.6.1.2.1.2.2.1.17.3|65|2602890644 +1.3.6.1.2.1.2.2.1.17.4|65|1298958925 +1.3.6.1.2.1.2.2.1.18.3|65|3795297761 +1.3.6.1.2.1.2.2.1.18.4|65|2855930861 +1.3.6.1.2.1.2.2.1.19.3|65|2638101636 +1.3.6.1.2.1.2.2.1.19.4|65|3850269903 +1.3.6.1.2.1.2.2.1.20.3|65|326043151 +1.3.6.1.2.1.2.2.1.20.4|65|3081566249 +1.3.6.1.2.1.2.2.1.21.3|66|3998170831 +1.3.6.1.2.1.2.2.1.21.4|66|434375459 +1.3.6.1.2.1.2.2.1.22.3|6|1.3.6.1.3.5.4.43.202.207.71.55.5 +1.3.6.1.2.1.2.2.1.22.4|6|1.3.6.1.3.143.146.10.194.182 +1.3.6.1.2.1.6.1.0|2|2 +1.3.6.1.2.1.6.2.0|2|31 +1.3.6.1.2.1.6.3.0|2|30 +1.3.6.1.2.1.6.4.0|2|3 +1.3.6.1.2.1.6.5.0|65|367405707 +1.3.6.1.2.1.6.5.0|65|1071906652 +1.3.6.1.2.1.6.6.0|65|2249397619 +1.3.6.1.2.1.6.7.0|65|229905265 +1.3.6.1.2.1.6.8.0|65|709655049 +1.3.6.1.2.1.6.9.0|66|1339955166 +1.3.6.1.2.1.6.10.0|65|3505452597 +1.3.6.1.2.1.6.11.0|65|2690927269 +1.3.6.1.2.1.6.12.0|65|45677298 +1.3.6.1.2.1.6.13.1.1.22.55.14.96.20.135.21.168.43.24|2|3 +1.3.6.1.2.1.6.13.1.1.23.243.83.56.2.196.169.135.95.14|2|9 +1.3.6.1.2.1.6.13.1.1.28.216.195.9.22.46.178.52.213.4|2|7 +1.3.6.1.2.1.6.13.1.1.43.76.18.58.15.224.141.246.4.27|2|8 +1.3.6.1.2.1.6.13.1.1.145.66.33.17.28.244.53.43.227.6|2|3 +1.3.6.1.2.1.6.13.1.1.146.120.186.130.16.98.210.88.42.17|2|10 +1.3.6.1.2.1.6.13.1.1.200.47.131.115.19.70.225.50.24.27|2|11 +1.3.6.1.2.1.6.13.1.1.208.140.201.179.0.77.6.20.15.27|2|1 +1.3.6.1.2.1.6.13.1.1.229.170.50.158.28.94.133.71.139.5|2|4 +1.3.6.1.2.1.6.13.1.1.232.107.202.10.4.181.247.252.98.9|2|12 +1.3.6.1.2.1.6.13.1.2.22.55.14.96.20.135.21.168.43.24|64x|16370e60 +1.3.6.1.2.1.6.13.1.2.23.243.83.56.2.196.169.135.95.14|64x|17f35338 +1.3.6.1.2.1.6.13.1.2.28.216.195.9.22.46.178.52.213.4|64x|1cd8c309 +1.3.6.1.2.1.6.13.1.2.43.76.18.58.15.224.141.246.4.27|64x|2b4c123a +1.3.6.1.2.1.6.13.1.2.145.66.33.17.28.244.53.43.227.6|64x|91422111 +1.3.6.1.2.1.6.13.1.2.146.120.186.130.16.98.210.88.42.17|64x|9278ba82 +1.3.6.1.2.1.6.13.1.2.200.47.131.115.19.70.225.50.24.27|64x|c82f8373 +1.3.6.1.2.1.6.13.1.2.208.140.201.179.0.77.6.20.15.27|64x|d08cc9b3 +1.3.6.1.2.1.6.13.1.2.229.170.50.158.28.94.133.71.139.5|64x|e5aa329e +1.3.6.1.2.1.6.13.1.2.232.107.202.10.4.181.247.252.98.9|64x|e86bca0a +1.3.6.1.2.1.6.13.1.3.22.55.14.96.20.135.21.168.43.24|2|20 +1.3.6.1.2.1.6.13.1.3.23.243.83.56.2.196.169.135.95.14|2|2 +1.3.6.1.2.1.6.13.1.3.28.216.195.9.22.46.178.52.213.4|2|22 +1.3.6.1.2.1.6.13.1.3.43.76.18.58.15.224.141.246.4.27|2|15 +1.3.6.1.2.1.6.13.1.3.145.66.33.17.28.244.53.43.227.6|2|28 +1.3.6.1.2.1.6.13.1.3.146.120.186.130.16.98.210.88.42.17|2|16 +1.3.6.1.2.1.6.13.1.3.200.47.131.115.19.70.225.50.24.27|2|19 +1.3.6.1.2.1.6.13.1.3.208.140.201.179.0.77.6.20.15.27|2|0 +1.3.6.1.2.1.6.13.1.3.229.170.50.158.28.94.133.71.139.5|2|28 +1.3.6.1.2.1.6.13.1.3.232.107.202.10.4.181.247.252.98.9|2|4 +1.3.6.1.2.1.6.13.1.4.22.55.14.96.20.135.21.168.43.24|64x|8715a82b +1.3.6.1.2.1.6.13.1.4.23.243.83.56.2.196.169.135.95.14|64x|c4a9875f +1.3.6.1.2.1.6.13.1.4.28.216.195.9.22.46.178.52.213.4|64x|2eb234d5 +1.3.6.1.2.1.6.13.1.4.43.76.18.58.15.224.141.246.4.27|64x|e08df604 +1.3.6.1.2.1.6.13.1.4.145.66.33.17.28.244.53.43.227.6|64x|f4352be3 +1.3.6.1.2.1.6.13.1.4.146.120.186.130.16.98.210.88.42.17|64x|62d2582a +1.3.6.1.2.1.6.13.1.4.200.47.131.115.19.70.225.50.24.27|64x|46e13218 +1.3.6.1.2.1.6.13.1.4.208.140.201.179.0.77.6.20.15.27|64x|4d06140f +1.3.6.1.2.1.6.13.1.4.229.170.50.158.28.94.133.71.139.5|64x|5e85478b +1.3.6.1.2.1.6.13.1.4.232.107.202.10.4.181.247.252.98.9|64x|b5f7fc62 +1.3.6.1.2.1.6.13.1.5.22.55.14.96.20.135.21.168.43.24|2|24 +1.3.6.1.2.1.6.13.1.5.23.243.83.56.2.196.169.135.95.14|2|14 +1.3.6.1.2.1.6.13.1.5.28.216.195.9.22.46.178.52.213.4|2|4 +1.3.6.1.2.1.6.13.1.5.43.76.18.58.15.224.141.246.4.27|2|27 +1.3.6.1.2.1.6.13.1.5.145.66.33.17.28.244.53.43.227.6|2|6 +1.3.6.1.2.1.6.13.1.5.146.120.186.130.16.98.210.88.42.17|2|17 +1.3.6.1.2.1.6.13.1.5.200.47.131.115.19.70.225.50.24.27|2|27 +1.3.6.1.2.1.6.13.1.5.208.140.201.179.0.77.6.20.15.27|2|27 +1.3.6.1.2.1.6.13.1.5.229.170.50.158.28.94.133.71.139.5|2|5 +1.3.6.1.2.1.6.13.1.5.232.107.202.10.4.181.247.252.98.9|2|9 +1.3.6.1.2.1.6.14.0|65|269154440 +1.3.6.1.2.1.6.15.0|65|590887849 +1.3.6.1.2.1.6.17.0|70|7667457467363787060 +1.3.6.1.2.1.6.18.0|70|13855100236040073709 +1.3.6.1.2.1.6.19.1.1.0.3.98.117.116.59124.3.59.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.998|2|0 +1.3.6.1.2.1.6.19.1.1.1.11.116.104.101.105.114.32.97.99.116.101.100.5673.2.28.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.29086|2|1 +1.3.6.1.2.1.6.19.1.1.1.27.111.120.101.110.32.98.117.116.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.40692.2.3.98.117.116.20022|2|1 +1.3.6.1.2.1.6.19.1.1.1.31.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.44170.16.53.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.100.114.105.118.105.110.103.32.111.120.101.110.51612|2|1 +1.3.6.1.2.1.6.19.1.1.2.12.111.120.101.110.32.102.111.114.119.97.114.100.30404.4.7.102.111.114.119.97.114.100.53695|2|2 +1.3.6.1.2.1.6.19.1.1.2.36.111.120.101.110.32.107.101.112.116.32.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.21906.1.10.107.101.112.116.32.116.104.101.105.114.23746|2|2 +1.3.6.1.2.1.6.19.1.1.2.52.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.27283.0.28.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.31727|2|2 +1.3.6.1.2.1.6.19.1.1.4.21.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.8280.2.46.98.117.116.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.122.111.109.98.105.101.115.7268|2|4 +1.3.6.1.2.1.6.19.1.1.4.40.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.97.99.116.101.100.42462.2.23.102.111.114.119.97.114.100.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.59241|2|4 +1.3.6.1.2.1.6.19.1.1.4.45.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32639.3.31.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116.29754|2|4 +1.3.6.1.2.1.6.19.1.2.0.3.98.117.116.59124.3.59.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.998|4|but +1.3.6.1.2.1.6.19.1.2.1.11.116.104.101.105.114.32.97.99.116.101.100.5673.2.28.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.29086|4x|7468656972206163746564 +1.3.6.1.2.1.6.19.1.2.1.27.111.120.101.110.32.98.117.116.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.40692.2.3.98.117.116.20022|4x|6f78656e20627574206163746564206f78656e207a6f6d62696573 +1.3.6.1.2.1.6.19.1.2.1.31.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.44170.16.53.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.100.114.105.118.105.110.103.32.111.120.101.110.51612|4x|64726976696e67206f78656e206b6570742074686569722064726976696e67 +1.3.6.1.2.1.6.19.1.2.2.12.111.120.101.110.32.102.111.114.119.97.114.100.30404.4.7.102.111.114.119.97.114.100.53695|4x|6f78656e20666f7277617264 +1.3.6.1.2.1.6.19.1.2.2.36.111.120.101.110.32.107.101.112.116.32.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.21906.1.10.107.101.112.116.32.116.104.101.105.114.23746|4x|6f78656e206b657074206b6570742064726976696e672064726976696e67204a61646564 +1.3.6.1.2.1.6.19.1.2.2.52.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.27283.0.28.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.31727|4x|666f7277617264204a616465642064726976696e672064726976696e6720666f7277617264204a6164656420717561696e746c79 +1.3.6.1.2.1.6.19.1.2.4.21.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.8280.2.46.98.117.116.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.122.111.109.98.105.101.115.7268|4x|4a616465642064726976696e672064726976696e67 +1.3.6.1.2.1.6.19.1.2.4.40.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.97.99.116.101.100.42462.2.23.102.111.114.119.97.114.100.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.59241|4x|74686569722062757420746865697220616374656420717561696e746c7920627574206163746564 +1.3.6.1.2.1.6.19.1.2.4.45.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32639.3.31.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116.29754|4x|6f78656e207a6f6d62696573207a6f6d6269657320717561696e746c792064726976696e672064726976696e67 +1.3.6.1.2.1.6.19.1.3.0.3.98.117.116.59124.3.59.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.998|66|59124 +1.3.6.1.2.1.6.19.1.3.1.11.116.104.101.105.114.32.97.99.116.101.100.5673.2.28.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.29086|66|5673 +1.3.6.1.2.1.6.19.1.3.1.27.111.120.101.110.32.98.117.116.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.40692.2.3.98.117.116.20022|66|40692 +1.3.6.1.2.1.6.19.1.3.1.31.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.44170.16.53.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.100.114.105.118.105.110.103.32.111.120.101.110.51612|66|44170 +1.3.6.1.2.1.6.19.1.3.2.12.111.120.101.110.32.102.111.114.119.97.114.100.30404.4.7.102.111.114.119.97.114.100.53695|66|30404 +1.3.6.1.2.1.6.19.1.3.2.36.111.120.101.110.32.107.101.112.116.32.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.21906.1.10.107.101.112.116.32.116.104.101.105.114.23746|66|21906 +1.3.6.1.2.1.6.19.1.3.2.52.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.27283.0.28.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.31727|66|27283 +1.3.6.1.2.1.6.19.1.3.4.21.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.8280.2.46.98.117.116.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.122.111.109.98.105.101.115.7268|66|8280 +1.3.6.1.2.1.6.19.1.3.4.40.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.97.99.116.101.100.42462.2.23.102.111.114.119.97.114.100.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.59241|66|42462 +1.3.6.1.2.1.6.19.1.3.4.45.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32639.3.31.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116.29754|66|32639 +1.3.6.1.2.1.6.19.1.4.0.3.98.117.116.59124.3.59.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.998|2|3 +1.3.6.1.2.1.6.19.1.4.1.11.116.104.101.105.114.32.97.99.116.101.100.5673.2.28.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.29086|2|2 +1.3.6.1.2.1.6.19.1.4.1.27.111.120.101.110.32.98.117.116.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.40692.2.3.98.117.116.20022|2|2 +1.3.6.1.2.1.6.19.1.4.1.31.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.44170.16.53.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.100.114.105.118.105.110.103.32.111.120.101.110.51612|2|16 +1.3.6.1.2.1.6.19.1.4.2.12.111.120.101.110.32.102.111.114.119.97.114.100.30404.4.7.102.111.114.119.97.114.100.53695|2|4 +1.3.6.1.2.1.6.19.1.4.2.36.111.120.101.110.32.107.101.112.116.32.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.21906.1.10.107.101.112.116.32.116.104.101.105.114.23746|2|1 +1.3.6.1.2.1.6.19.1.4.2.52.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.27283.0.28.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.31727|2|0 +1.3.6.1.2.1.6.19.1.4.4.21.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.8280.2.46.98.117.116.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.122.111.109.98.105.101.115.7268|2|2 +1.3.6.1.2.1.6.19.1.4.4.40.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.97.99.116.101.100.42462.2.23.102.111.114.119.97.114.100.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.59241|2|2 +1.3.6.1.2.1.6.19.1.4.4.45.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32639.3.31.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116.29754|2|3 +1.3.6.1.2.1.6.19.1.5.0.3.98.117.116.59124.3.59.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.998|4x|64726976696e6720717561696e746c79204a6164656420717561696e746c79206b657074206b657074206163746564206275742064726976696e67 +1.3.6.1.2.1.6.19.1.5.1.11.116.104.101.105.114.32.97.99.116.101.100.5673.2.28.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.29086|4x|746865697220717561696e746c79206163746564207a6f6d62696573 +1.3.6.1.2.1.6.19.1.5.1.27.111.120.101.110.32.98.117.116.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.40692.2.3.98.117.116.20022|4|but +1.3.6.1.2.1.6.19.1.5.1.31.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.44170.16.53.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.100.114.105.118.105.110.103.32.111.120.101.110.51612|4x|6f78656e20616374656420616374656420746865697220666f7277617264206f78656e206f78656e2064726976696e67206f78656e +1.3.6.1.2.1.6.19.1.5.2.12.111.120.101.110.32.102.111.114.119.97.114.100.30404.4.7.102.111.114.119.97.114.100.53695|4|forward +1.3.6.1.2.1.6.19.1.5.2.36.111.120.101.110.32.107.101.112.116.32.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.21906.1.10.107.101.112.116.32.116.104.101.105.114.23746|4x|6b657074207468656972 +1.3.6.1.2.1.6.19.1.5.2.52.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.27283.0.28.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.31727|4x|6f78656e20666f727761726420666f727761726420666f7277617264 +1.3.6.1.2.1.6.19.1.5.4.21.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.8280.2.46.98.117.116.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.122.111.109.98.105.101.115.7268|4x|6275742061637465642064726976696e67206163746564206b657074204a6164656420627574207a6f6d62696573 +1.3.6.1.2.1.6.19.1.5.4.40.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.97.99.116.101.100.42462.2.23.102.111.114.119.97.114.100.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.59241|4x|666f7277617264204a6164656420627574204a61646564 +1.3.6.1.2.1.6.19.1.5.4.45.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32639.3.31.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116.29754|4x|627574206f78656e207a6f6d6269657320616374656420627574206b657074 +1.3.6.1.2.1.6.19.1.6.0.3.98.117.116.59124.3.59.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.998|66|998 +1.3.6.1.2.1.6.19.1.6.1.11.116.104.101.105.114.32.97.99.116.101.100.5673.2.28.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.29086|66|29086 +1.3.6.1.2.1.6.19.1.6.1.27.111.120.101.110.32.98.117.116.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.40692.2.3.98.117.116.20022|66|20022 +1.3.6.1.2.1.6.19.1.6.1.31.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.44170.16.53.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.100.114.105.118.105.110.103.32.111.120.101.110.51612|66|51612 +1.3.6.1.2.1.6.19.1.6.2.12.111.120.101.110.32.102.111.114.119.97.114.100.30404.4.7.102.111.114.119.97.114.100.53695|66|53695 +1.3.6.1.2.1.6.19.1.6.2.36.111.120.101.110.32.107.101.112.116.32.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.21906.1.10.107.101.112.116.32.116.104.101.105.114.23746|66|23746 +1.3.6.1.2.1.6.19.1.6.2.52.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.27283.0.28.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.31727|66|31727 +1.3.6.1.2.1.6.19.1.6.4.21.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.8280.2.46.98.117.116.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.122.111.109.98.105.101.115.7268|66|7268 +1.3.6.1.2.1.6.19.1.6.4.40.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.97.99.116.101.100.42462.2.23.102.111.114.119.97.114.100.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.59241|66|59241 +1.3.6.1.2.1.6.19.1.6.4.45.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32639.3.31.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116.29754|66|29754 +1.3.6.1.2.1.6.19.1.7.0.3.98.117.116.59124.3.59.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.998|2|6 +1.3.6.1.2.1.6.19.1.7.1.11.116.104.101.105.114.32.97.99.116.101.100.5673.2.28.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.29086|2|8 +1.3.6.1.2.1.6.19.1.7.1.27.111.120.101.110.32.98.117.116.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.40692.2.3.98.117.116.20022|2|6 +1.3.6.1.2.1.6.19.1.7.1.31.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.44170.16.53.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.100.114.105.118.105.110.103.32.111.120.101.110.51612|2|12 +1.3.6.1.2.1.6.19.1.7.2.12.111.120.101.110.32.102.111.114.119.97.114.100.30404.4.7.102.111.114.119.97.114.100.53695|2|3 +1.3.6.1.2.1.6.19.1.7.2.36.111.120.101.110.32.107.101.112.116.32.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.21906.1.10.107.101.112.116.32.116.104.101.105.114.23746|2|8 +1.3.6.1.2.1.6.19.1.7.2.52.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.27283.0.28.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.31727|2|9 +1.3.6.1.2.1.6.19.1.7.4.21.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.8280.2.46.98.117.116.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.122.111.109.98.105.101.115.7268|2|11 +1.3.6.1.2.1.6.19.1.7.4.40.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.97.99.116.101.100.42462.2.23.102.111.114.119.97.114.100.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.59241|2|12 +1.3.6.1.2.1.6.19.1.7.4.45.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32639.3.31.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116.29754|2|8 +1.3.6.1.2.1.6.19.1.8.0.3.98.117.116.59124.3.59.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.998|66|22017 +1.3.6.1.2.1.6.19.1.8.1.11.116.104.101.105.114.32.97.99.116.101.100.5673.2.28.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.29086|66|19736 +1.3.6.1.2.1.6.19.1.8.1.27.111.120.101.110.32.98.117.116.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.40692.2.3.98.117.116.20022|66|42634 +1.3.6.1.2.1.6.19.1.8.1.31.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.44170.16.53.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.100.114.105.118.105.110.103.32.111.120.101.110.51612|66|2416 +1.3.6.1.2.1.6.19.1.8.2.12.111.120.101.110.32.102.111.114.119.97.114.100.30404.4.7.102.111.114.119.97.114.100.53695|66|47463 +1.3.6.1.2.1.6.19.1.8.2.36.111.120.101.110.32.107.101.112.116.32.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.21906.1.10.107.101.112.116.32.116.104.101.105.114.23746|66|26014 +1.3.6.1.2.1.6.19.1.8.2.52.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.27283.0.28.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.31727|66|60912 +1.3.6.1.2.1.6.19.1.8.4.21.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.8280.2.46.98.117.116.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.122.111.109.98.105.101.115.7268|66|42192 +1.3.6.1.2.1.6.19.1.8.4.40.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.97.99.116.101.100.42462.2.23.102.111.114.119.97.114.100.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.59241|66|30088 +1.3.6.1.2.1.6.19.1.8.4.45.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32639.3.31.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116.29754|66|60074 +1.3.6.1.2.1.6.20.1.1.1.23.113.117.97.105.110.116.108.121.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.49596|2|1 +1.3.6.1.2.1.6.20.1.1.1.39.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.21167|2|1 +1.3.6.1.2.1.6.20.1.1.1.49.102.111.114.119.97.114.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.102.111.114.119.97.114.100.42037|2|1 +1.3.6.1.2.1.6.20.1.1.2.23.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.34510|2|2 +1.3.6.1.2.1.6.20.1.1.3.36.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.32.107.101.112.116.32.98.117.116.46667|2|3 +1.3.6.1.2.1.6.20.1.1.3.37.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.3720|2|3 +1.3.6.1.2.1.6.20.1.1.3.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.44254|2|3 +1.3.6.1.2.1.6.20.1.1.4.37.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.27424|2|4 +1.3.6.1.2.1.6.20.1.1.4.59.107.101.112.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.64001|2|4 +1.3.6.1.2.1.6.20.1.1.16.11.116.104.101.105.114.32.97.99.116.101.100.6814|2|16 +1.3.6.1.2.1.6.20.1.2.1.23.113.117.97.105.110.116.108.121.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.49596|4x|717561696e746c79206b65707420616374656420627574 +1.3.6.1.2.1.6.20.1.2.1.39.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.21167|4x|717561696e746c7920666f7277617264207468656972204a61646564206f78656e204a61646564 +1.3.6.1.2.1.6.20.1.2.1.49.102.111.114.119.97.114.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.102.111.114.119.97.114.100.42037|4x|666f727761726420746865697220717561696e746c792074686569722064726976696e67206b65707420666f7277617264 +1.3.6.1.2.1.6.20.1.2.2.23.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.34510|4x|7a6f6d6269657320666f72776172642064726976696e67 +1.3.6.1.2.1.6.20.1.2.3.36.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.32.107.101.112.116.32.98.117.116.46667|4x|717561696e746c79207468656972206f78656e207a6f6d62696573206b65707420627574 +1.3.6.1.2.1.6.20.1.2.3.37.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.3720|4x|666f727761726420627574206f78656e20746865697220717561696e746c79204a61646564 +1.3.6.1.2.1.6.20.1.2.3.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.44254|4x|74686569722062757420746865697220616374656420746865697220717561696e746c792064726976696e67 +1.3.6.1.2.1.6.20.1.2.4.37.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.27424|4x|746865697220666f727761726420717561696e746c7920627574206f78656e207468656972 +1.3.6.1.2.1.6.20.1.2.4.59.107.101.112.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.64001|4x|6b6570742064726976696e6720717561696e746c79207468656972206b657074206f78656e20616374656420666f7277617264207a6f6d62696573 +1.3.6.1.2.1.6.20.1.2.16.11.116.104.101.105.114.32.97.99.116.101.100.6814|4x|7468656972206163746564 +1.3.6.1.2.1.6.20.1.3.1.23.113.117.97.105.110.116.108.121.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.49596|66|49596 +1.3.6.1.2.1.6.20.1.3.1.39.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.21167|66|21167 +1.3.6.1.2.1.6.20.1.3.1.49.102.111.114.119.97.114.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.102.111.114.119.97.114.100.42037|66|42037 +1.3.6.1.2.1.6.20.1.3.2.23.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.34510|66|34510 +1.3.6.1.2.1.6.20.1.3.3.36.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.32.107.101.112.116.32.98.117.116.46667|66|46667 +1.3.6.1.2.1.6.20.1.3.3.37.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.3720|66|3720 +1.3.6.1.2.1.6.20.1.3.3.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.44254|66|44254 +1.3.6.1.2.1.6.20.1.3.4.37.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.27424|66|27424 +1.3.6.1.2.1.6.20.1.3.4.59.107.101.112.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.64001|66|64001 +1.3.6.1.2.1.6.20.1.3.16.11.116.104.101.105.114.32.97.99.116.101.100.6814|66|6814 +1.3.6.1.2.1.6.20.1.4.1.23.113.117.97.105.110.116.108.121.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.49596|66|9402 +1.3.6.1.2.1.6.20.1.4.1.39.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.21167|66|32606 +1.3.6.1.2.1.6.20.1.4.1.49.102.111.114.119.97.114.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.102.111.114.119.97.114.100.42037|66|65236 +1.3.6.1.2.1.6.20.1.4.2.23.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.34510|66|15018 +1.3.6.1.2.1.6.20.1.4.3.36.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.32.107.101.112.116.32.98.117.116.46667|66|24578 +1.3.6.1.2.1.6.20.1.4.3.37.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.3720|66|8642 +1.3.6.1.2.1.6.20.1.4.3.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.44254|66|19609 +1.3.6.1.2.1.6.20.1.4.4.37.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.27424|66|36255 +1.3.6.1.2.1.6.20.1.4.4.59.107.101.112.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.64001|66|4556 +1.3.6.1.2.1.6.20.1.4.16.11.116.104.101.105.114.32.97.99.116.101.100.6814|66|46638 +1.3.6.1.2.1.7.1.0|65|285090006 +1.3.6.1.2.1.7.2.0|65|2893774938 +1.3.6.1.2.1.7.3.0|65|774341875 +1.3.6.1.2.1.7.4.0|65|14512478 +1.3.6.1.2.1.7.5.1.1.26.210.35.174.5|64x|1ad223ae +1.3.6.1.2.1.7.5.1.1.58.118.81.108.24|64x|3a76516c +1.3.6.1.2.1.7.5.1.1.83.10.223.125.17|64x|530adf7d +1.3.6.1.2.1.7.5.1.1.129.115.70.221.12|64x|817346dd +1.3.6.1.2.1.7.5.1.1.135.101.156.213.29|64x|87659cd5 +1.3.6.1.2.1.7.5.1.1.142.172.168.114.18|64x|8eaca872 +1.3.6.1.2.1.7.5.1.1.177.77.74.252.23|64x|b14d4afc +1.3.6.1.2.1.7.5.1.1.215.232.16.205.26|64x|d7e810cd +1.3.6.1.2.1.7.5.1.1.215.246.105.236.4|64x|d7f669ec +1.3.6.1.2.1.7.5.1.1.253.23.205.128.28|64x|fd17cd80 +1.3.6.1.2.1.7.5.1.2.26.210.35.174.5|2|5 +1.3.6.1.2.1.7.5.1.2.58.118.81.108.24|2|24 +1.3.6.1.2.1.7.5.1.2.83.10.223.125.17|2|17 +1.3.6.1.2.1.7.5.1.2.129.115.70.221.12|2|12 +1.3.6.1.2.1.7.5.1.2.135.101.156.213.29|2|29 +1.3.6.1.2.1.7.5.1.2.142.172.168.114.18|2|18 +1.3.6.1.2.1.7.5.1.2.177.77.74.252.23|2|23 +1.3.6.1.2.1.7.5.1.2.215.232.16.205.26|2|26 +1.3.6.1.2.1.7.5.1.2.215.246.105.236.4|2|4 +1.3.6.1.2.1.7.5.1.2.253.23.205.128.28|2|28 +1.3.6.1.2.1.7.7.1.1.0.40.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.1715.2.17.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.12566.28428|2|0 +1.3.6.1.2.1.7.7.1.1.1.7.122.111.109.98.105.101.115.65034.1.5.116.104.101.105.114.15814.8857|2|1 +1.3.6.1.2.1.7.7.1.1.1.19.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.111.120.101.110.42170.0.8.113.117.97.105.110.116.108.121.54083.13191|2|1 +1.3.6.1.2.1.7.7.1.1.1.25.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.102.111.114.119.97.114.100.21651.16.15.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.47644.33055|2|1 +1.3.6.1.2.1.7.7.1.1.1.40.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100.32.74.97.100.101.100.32.97.99.116.101.100.65393.1.40.107.101.112.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.98.117.116.24133.46225|2|1 +1.3.6.1.2.1.7.7.1.1.2.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.1355.4.47.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.74.97.100.101.100.32.97.99.116.101.100.32.97.99.116.101.100.41439.13974|2|2 +1.3.6.1.2.1.7.7.1.1.2.46.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.22282.1.11.97.99.116.101.100.32.116.104.101.105.114.17304.43555|2|2 +1.3.6.1.2.1.7.7.1.1.3.4.111.120.101.110.60321.3.17.116.104.101.105.114.32.122.111.109.98.105.101.115.32.98.117.116.38725.28192|2|3 +1.3.6.1.2.1.7.7.1.1.4.44.107.101.112.116.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.65225.0.40.111.120.101.110.32.113.117.97.105.110.116.108.121.32.98.117.116.32.116.104.101.105.114.32.98.117.116.32.102.111.114.119.97.114.100.32.107.101.112.116.12376.54947|2|4 +1.3.6.1.2.1.7.7.1.1.4.54.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.45774.0.12.111.120.101.110.32.122.111.109.98.105.101.115.186.51238|2|4 +1.3.6.1.2.1.7.7.1.2.0.40.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.1715.2.17.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.12566.28428|4x|7a6f6d6269657320717561696e746c7920666f72776172642064726976696e67207a6f6d62696573 +1.3.6.1.2.1.7.7.1.2.1.7.122.111.109.98.105.101.115.65034.1.5.116.104.101.105.114.15814.8857|4|zombies +1.3.6.1.2.1.7.7.1.2.1.19.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.111.120.101.110.42170.0.8.113.117.97.105.110.116.108.121.54083.13191|4x|717561696e746c79204a61646564206f78656e +1.3.6.1.2.1.7.7.1.2.1.25.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.102.111.114.119.97.114.100.21651.16.15.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.47644.33055|4x|666f7277617264206f78656e206f78656e20666f7277617264 +1.3.6.1.2.1.7.7.1.2.1.40.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100.32.74.97.100.101.100.32.97.99.116.101.100.65393.1.40.107.101.112.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.98.117.116.24133.46225|4x|717561696e746c7920717561696e746c79206f78656e204a61646564204a61646564206163746564 +1.3.6.1.2.1.7.7.1.2.2.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.1355.4.47.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.74.97.100.101.100.32.97.99.116.101.100.32.97.99.116.101.100.41439.13974|4x|74686569722062757420746865697220666f7277617264206f78656e207a6f6d62696573207a6f6d62696573 +1.3.6.1.2.1.7.7.1.2.2.46.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.22282.1.11.97.99.116.101.100.32.116.104.101.105.114.17304.43555|4x|64726976696e67206b65707420746865697220746865697220666f7277617264207a6f6d62696573207468656972 +1.3.6.1.2.1.7.7.1.2.3.4.111.120.101.110.60321.3.17.116.104.101.105.114.32.122.111.109.98.105.101.115.32.98.117.116.38725.28192|4|oxen +1.3.6.1.2.1.7.7.1.2.4.44.107.101.112.116.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.65225.0.40.111.120.101.110.32.113.117.97.105.110.116.108.121.32.98.117.116.32.116.104.101.105.114.32.98.117.116.32.102.111.114.119.97.114.100.32.107.101.112.116.12376.54947|4x|6b657074207a6f6d626965732062757420717561696e746c79207468656972206f78656e207a6f6d62696573 +1.3.6.1.2.1.7.7.1.2.4.54.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.45774.0.12.111.120.101.110.32.122.111.109.98.105.101.115.186.51238|4x|7468656972206f78656e2062757420717561696e746c79204a61646564207468656972206163746564206f78656e207a6f6d62696573 +1.3.6.1.2.1.7.7.1.3.0.40.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.1715.2.17.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.12566.28428|66|1715 +1.3.6.1.2.1.7.7.1.3.1.7.122.111.109.98.105.101.115.65034.1.5.116.104.101.105.114.15814.8857|66|65034 +1.3.6.1.2.1.7.7.1.3.1.19.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.111.120.101.110.42170.0.8.113.117.97.105.110.116.108.121.54083.13191|66|42170 +1.3.6.1.2.1.7.7.1.3.1.25.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.102.111.114.119.97.114.100.21651.16.15.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.47644.33055|66|21651 +1.3.6.1.2.1.7.7.1.3.1.40.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100.32.74.97.100.101.100.32.97.99.116.101.100.65393.1.40.107.101.112.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.98.117.116.24133.46225|66|65393 +1.3.6.1.2.1.7.7.1.3.2.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.1355.4.47.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.74.97.100.101.100.32.97.99.116.101.100.32.97.99.116.101.100.41439.13974|66|1355 +1.3.6.1.2.1.7.7.1.3.2.46.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.22282.1.11.97.99.116.101.100.32.116.104.101.105.114.17304.43555|66|22282 +1.3.6.1.2.1.7.7.1.3.3.4.111.120.101.110.60321.3.17.116.104.101.105.114.32.122.111.109.98.105.101.115.32.98.117.116.38725.28192|66|60321 +1.3.6.1.2.1.7.7.1.3.4.44.107.101.112.116.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.65225.0.40.111.120.101.110.32.113.117.97.105.110.116.108.121.32.98.117.116.32.116.104.101.105.114.32.98.117.116.32.102.111.114.119.97.114.100.32.107.101.112.116.12376.54947|66|65225 +1.3.6.1.2.1.7.7.1.3.4.54.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.45774.0.12.111.120.101.110.32.122.111.109.98.105.101.115.186.51238|66|45774 +1.3.6.1.2.1.7.7.1.4.0.40.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.1715.2.17.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.12566.28428|2|2 +1.3.6.1.2.1.7.7.1.4.1.7.122.111.109.98.105.101.115.65034.1.5.116.104.101.105.114.15814.8857|2|1 +1.3.6.1.2.1.7.7.1.4.1.19.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.111.120.101.110.42170.0.8.113.117.97.105.110.116.108.121.54083.13191|2|0 +1.3.6.1.2.1.7.7.1.4.1.25.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.102.111.114.119.97.114.100.21651.16.15.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.47644.33055|2|16 +1.3.6.1.2.1.7.7.1.4.1.40.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100.32.74.97.100.101.100.32.97.99.116.101.100.65393.1.40.107.101.112.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.98.117.116.24133.46225|2|1 +1.3.6.1.2.1.7.7.1.4.2.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.1355.4.47.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.74.97.100.101.100.32.97.99.116.101.100.32.97.99.116.101.100.41439.13974|2|4 +1.3.6.1.2.1.7.7.1.4.2.46.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.22282.1.11.97.99.116.101.100.32.116.104.101.105.114.17304.43555|2|1 +1.3.6.1.2.1.7.7.1.4.3.4.111.120.101.110.60321.3.17.116.104.101.105.114.32.122.111.109.98.105.101.115.32.98.117.116.38725.28192|2|3 +1.3.6.1.2.1.7.7.1.4.4.44.107.101.112.116.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.65225.0.40.111.120.101.110.32.113.117.97.105.110.116.108.121.32.98.117.116.32.116.104.101.105.114.32.98.117.116.32.102.111.114.119.97.114.100.32.107.101.112.116.12376.54947|2|0 +1.3.6.1.2.1.7.7.1.4.4.54.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.45774.0.12.111.120.101.110.32.122.111.109.98.105.101.115.186.51238|2|0 +1.3.6.1.2.1.7.7.1.5.0.40.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.1715.2.17.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.12566.28428|4x|717561696e746c7920717561696e746c79 +1.3.6.1.2.1.7.7.1.5.1.7.122.111.109.98.105.101.115.65034.1.5.116.104.101.105.114.15814.8857|4|their +1.3.6.1.2.1.7.7.1.5.1.19.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.111.120.101.110.42170.0.8.113.117.97.105.110.116.108.121.54083.13191|4|quaintly +1.3.6.1.2.1.7.7.1.5.1.25.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.102.111.114.119.97.114.100.21651.16.15.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.47644.33055|4x|7a6f6d626965732064726976696e67 +1.3.6.1.2.1.7.7.1.5.1.40.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100.32.74.97.100.101.100.32.97.99.116.101.100.65393.1.40.107.101.112.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.98.117.116.24133.46225|4x|6b657074204a61646564207a6f6d626965732062757420746865697220666f727761726420627574 +1.3.6.1.2.1.7.7.1.5.2.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.1355.4.47.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.74.97.100.101.100.32.97.99.116.101.100.32.97.99.116.101.100.41439.13974|4x|7a6f6d6269657320666f727761726420717561696e746c79206b657074204a61646564206163746564206163746564 +1.3.6.1.2.1.7.7.1.5.2.46.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.22282.1.11.97.99.116.101.100.32.116.104.101.105.114.17304.43555|4x|6163746564207468656972 +1.3.6.1.2.1.7.7.1.5.3.4.111.120.101.110.60321.3.17.116.104.101.105.114.32.122.111.109.98.105.101.115.32.98.117.116.38725.28192|4x|7468656972207a6f6d6269657320627574 +1.3.6.1.2.1.7.7.1.5.4.44.107.101.112.116.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.65225.0.40.111.120.101.110.32.113.117.97.105.110.116.108.121.32.98.117.116.32.116.104.101.105.114.32.98.117.116.32.102.111.114.119.97.114.100.32.107.101.112.116.12376.54947|4x|6f78656e20717561696e746c79206275742074686569722062757420666f7277617264206b657074 +1.3.6.1.2.1.7.7.1.5.4.54.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.45774.0.12.111.120.101.110.32.122.111.109.98.105.101.115.186.51238|4x|6f78656e207a6f6d62696573 +1.3.6.1.2.1.7.7.1.6.0.40.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.1715.2.17.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.12566.28428|66|12566 +1.3.6.1.2.1.7.7.1.6.1.7.122.111.109.98.105.101.115.65034.1.5.116.104.101.105.114.15814.8857|66|15814 +1.3.6.1.2.1.7.7.1.6.1.19.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.111.120.101.110.42170.0.8.113.117.97.105.110.116.108.121.54083.13191|66|54083 +1.3.6.1.2.1.7.7.1.6.1.25.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.102.111.114.119.97.114.100.21651.16.15.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.47644.33055|66|47644 +1.3.6.1.2.1.7.7.1.6.1.40.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100.32.74.97.100.101.100.32.97.99.116.101.100.65393.1.40.107.101.112.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.98.117.116.24133.46225|66|24133 +1.3.6.1.2.1.7.7.1.6.2.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.1355.4.47.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.74.97.100.101.100.32.97.99.116.101.100.32.97.99.116.101.100.41439.13974|66|41439 +1.3.6.1.2.1.7.7.1.6.2.46.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.22282.1.11.97.99.116.101.100.32.116.104.101.105.114.17304.43555|66|17304 +1.3.6.1.2.1.7.7.1.6.3.4.111.120.101.110.60321.3.17.116.104.101.105.114.32.122.111.109.98.105.101.115.32.98.117.116.38725.28192|66|38725 +1.3.6.1.2.1.7.7.1.6.4.44.107.101.112.116.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.65225.0.40.111.120.101.110.32.113.117.97.105.110.116.108.121.32.98.117.116.32.116.104.101.105.114.32.98.117.116.32.102.111.114.119.97.114.100.32.107.101.112.116.12376.54947|66|12376 +1.3.6.1.2.1.7.7.1.6.4.54.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.45774.0.12.111.120.101.110.32.122.111.109.98.105.101.115.186.51238|66|186 +1.3.6.1.2.1.7.7.1.7.0.40.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.1715.2.17.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.12566.28428|66|28428 +1.3.6.1.2.1.7.7.1.7.1.7.122.111.109.98.105.101.115.65034.1.5.116.104.101.105.114.15814.8857|66|8857 +1.3.6.1.2.1.7.7.1.7.1.19.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.111.120.101.110.42170.0.8.113.117.97.105.110.116.108.121.54083.13191|66|13191 +1.3.6.1.2.1.7.7.1.7.1.25.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.102.111.114.119.97.114.100.21651.16.15.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.47644.33055|66|33055 +1.3.6.1.2.1.7.7.1.7.1.40.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100.32.74.97.100.101.100.32.97.99.116.101.100.65393.1.40.107.101.112.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.98.117.116.24133.46225|66|46225 +1.3.6.1.2.1.7.7.1.7.2.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.1355.4.47.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.74.97.100.101.100.32.97.99.116.101.100.32.97.99.116.101.100.41439.13974|66|13974 +1.3.6.1.2.1.7.7.1.7.2.46.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.22282.1.11.97.99.116.101.100.32.116.104.101.105.114.17304.43555|66|43555 +1.3.6.1.2.1.7.7.1.7.3.4.111.120.101.110.60321.3.17.116.104.101.105.114.32.122.111.109.98.105.101.115.32.98.117.116.38725.28192|66|28192 +1.3.6.1.2.1.7.7.1.7.4.44.107.101.112.116.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.65225.0.40.111.120.101.110.32.113.117.97.105.110.116.108.121.32.98.117.116.32.116.104.101.105.114.32.98.117.116.32.102.111.114.119.97.114.100.32.107.101.112.116.12376.54947|66|54947 +1.3.6.1.2.1.7.7.1.7.4.54.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.45774.0.12.111.120.101.110.32.122.111.109.98.105.101.115.186.51238|66|51238 +1.3.6.1.2.1.7.7.1.8.0.40.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.1715.2.17.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.12566.28428|66|25599 +1.3.6.1.2.1.7.7.1.8.1.7.122.111.109.98.105.101.115.65034.1.5.116.104.101.105.114.15814.8857|66|11555 +1.3.6.1.2.1.7.7.1.8.1.19.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.111.120.101.110.42170.0.8.113.117.97.105.110.116.108.121.54083.13191|66|53574 +1.3.6.1.2.1.7.7.1.8.1.25.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.102.111.114.119.97.114.100.21651.16.15.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.47644.33055|66|59807 +1.3.6.1.2.1.7.7.1.8.1.40.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100.32.74.97.100.101.100.32.97.99.116.101.100.65393.1.40.107.101.112.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.98.117.116.24133.46225|66|27804 +1.3.6.1.2.1.7.7.1.8.2.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.1355.4.47.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.74.97.100.101.100.32.97.99.116.101.100.32.97.99.116.101.100.41439.13974|66|41056 +1.3.6.1.2.1.7.7.1.8.2.46.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.22282.1.11.97.99.116.101.100.32.116.104.101.105.114.17304.43555|66|36759 +1.3.6.1.2.1.7.7.1.8.3.4.111.120.101.110.60321.3.17.116.104.101.105.114.32.122.111.109.98.105.101.115.32.98.117.116.38725.28192|66|14424 +1.3.6.1.2.1.7.7.1.8.4.44.107.101.112.116.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.65225.0.40.111.120.101.110.32.113.117.97.105.110.116.108.121.32.98.117.116.32.116.104.101.105.114.32.98.117.116.32.102.111.114.119.97.114.100.32.107.101.112.116.12376.54947|66|25820 +1.3.6.1.2.1.7.7.1.8.4.54.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.45774.0.12.111.120.101.110.32.122.111.109.98.105.101.115.186.51238|66|17972 +1.3.6.1.2.1.7.8.0|70|16186554651938255883 +1.3.6.1.2.1.7.9.0|70|12715263144235706931 +1.3.6.1.2.1.31.1.1.1.1.3|4x|65746830 +1.3.6.1.2.1.31.1.1.1.1.4|4x|65746831 +1.3.6.1.2.1.31.1.1.1.2.3|65|2073885201 +1.3.6.1.2.1.31.1.1.1.2.4|63|680735109 +1.3.6.1.2.1.31.1.1.1.3.3|65|2360598543 +1.3.6.1.2.1.31.1.1.1.3.4|63|1379245347 +1.3.6.1.2.1.31.1.1.1.4.3|65|3057530867 +1.3.6.1.2.1.31.1.1.1.4.4|63|3465094787 +1.3.6.1.2.1.31.1.1.1.5.3|65|2179882173 +1.3.6.1.2.1.31.1.1.1.5.4|63|2382544032 +1.3.6.1.2.1.31.1.1.1.6.3|70|1651315884051108360 +1.3.6.1.2.1.31.1.1.1.6.4|70|17802351026037375626 +1.3.6.1.2.1.31.1.1.1.7.3|70|4118331899856360821 +1.3.6.1.2.1.31.1.1.1.7.4|70|5035543605001113801 +1.3.6.1.2.1.31.1.1.1.8.3|70|11202384861768477444 +1.3.6.1.2.1.31.1.1.1.8.4|70|15115622675597428561 +1.3.6.1.2.1.31.1.1.1.9.3|70|13724057965262453488 +1.3.6.1.2.1.31.1.1.1.9.4|70|16118377523421981439 +1.3.6.1.2.1.31.1.1.1.10.3|70|9166794218122954960 +1.3.6.1.2.1.31.1.1.1.10.4|70|6581757051419162038 +1.3.6.1.2.1.31.1.1.1.11.3|70|2439612559439460994 +1.3.6.1.2.1.31.1.1.1.11.4|70|16302330143146664801 +1.3.6.1.2.1.31.1.1.1.12.3|70|17878080564905640091 +1.3.6.1.2.1.31.1.1.1.12.4|70|11809060028680131634 +1.3.6.1.2.1.31.1.1.1.13.3|70|12770683221480416955 +1.3.6.1.2.1.31.1.1.1.13.4|70|14541210036993170957 +1.3.6.1.2.1.31.1.1.1.14.3|2|1 +1.3.6.1.2.1.31.1.1.1.14.4|2|2 +1.3.6.1.2.1.31.1.1.1.15.3|66|524857806 +1.3.6.1.2.1.31.1.1.1.15.4|66|2640575967 +1.3.6.1.2.1.31.1.1.1.16.3|2|1 +1.3.6.1.2.1.31.1.1.1.16.4|2|1 +1.3.6.1.2.1.31.1.1.1.17.3|2|2 +1.3.6.1.2.1.31.1.1.1.17.4|2|2 +1.3.6.1.2.1.31.1.1.1.18.3|4x|717561696e746c79207a6f6d6269657320717561696e746c7920666f7277617264 +1.3.6.1.2.1.31.1.1.1.18.4|4x|717561696e746c792062757420717561696e746c7920717561696e746c79 +1.3.6.1.2.1.31.1.1.1.19.3|64|1534827809 +1.3.6.1.2.1.31.1.1.1.19.4|67|3250977542 +1.3.6.1.2.1.31.1.2.1.1.0.15|2|0 +1.3.6.1.2.1.31.1.2.1.1.6.12|2|6 +1.3.6.1.2.1.31.1.2.1.1.11.12|2|11 +1.3.6.1.2.1.31.1.2.1.1.15.3|2|15 +1.3.6.1.2.1.31.1.2.1.1.15.30|2|15 +1.3.6.1.2.1.31.1.2.1.1.20.25|2|20 +1.3.6.1.2.1.31.1.2.1.1.20.30|2|20 +1.3.6.1.2.1.31.1.2.1.1.24.3|2|24 +1.3.6.1.2.1.31.1.2.1.1.24.8|2|24 +1.3.6.1.2.1.31.1.2.1.1.28.22|2|28 +1.3.6.1.2.1.31.1.2.1.2.0.15|2|15 +1.3.6.1.2.1.31.1.2.1.2.6.12|2|12 +1.3.6.1.2.1.31.1.2.1.2.11.12|2|12 +1.3.6.1.2.1.31.1.2.1.2.15.3|2|3 +1.3.6.1.2.1.31.1.2.1.2.15.30|2|30 +1.3.6.1.2.1.31.1.2.1.2.20.25|2|25 +1.3.6.1.2.1.31.1.2.1.2.20.30|2|30 +1.3.6.1.2.1.31.1.2.1.2.24.3|2|3 +1.3.6.1.2.1.31.1.2.1.2.24.8|2|8 +1.3.6.1.2.1.31.1.2.1.2.28.22|2|22 +1.3.6.1.2.1.31.1.2.1.3.0.15|2|2 +1.3.6.1.2.1.31.1.2.1.3.6.12|2|5 +1.3.6.1.2.1.31.1.2.1.3.11.12|2|0 +1.3.6.1.2.1.31.1.2.1.3.15.3|2|4 +1.3.6.1.2.1.31.1.2.1.3.15.30|2|2 +1.3.6.1.2.1.31.1.2.1.3.20.25|2|0 +1.3.6.1.2.1.31.1.2.1.3.20.30|2|3 +1.3.6.1.2.1.31.1.2.1.3.24.3|2|3 +1.3.6.1.2.1.31.1.2.1.3.24.8|2|4 +1.3.6.1.2.1.31.1.2.1.3.28.22|2|5 +1.3.6.1.2.1.31.1.3.1.1.2|2|22 +1.3.6.1.2.1.31.1.3.1.1.5|2|5 +1.3.6.1.2.1.31.1.3.1.1.7|2|11 +1.3.6.1.2.1.31.1.3.1.1.8|2|28 +1.3.6.1.2.1.31.1.3.1.1.14|2|17 +1.3.6.1.2.1.31.1.3.1.1.20|2|2 +1.3.6.1.2.1.31.1.3.1.1.25|2|25 +1.3.6.1.2.1.31.1.3.1.2.2|2|1 +1.3.6.1.2.1.31.1.3.1.2.5|2|2 +1.3.6.1.2.1.31.1.3.1.2.7|2|1 +1.3.6.1.2.1.31.1.3.1.2.8|2|1 +1.3.6.1.2.1.31.1.3.1.2.14|2|2 +1.3.6.1.2.1.31.1.3.1.2.20|2|2 +1.3.6.1.2.1.31.1.3.1.2.25|2|2 +1.3.6.1.2.1.31.1.3.1.3.2|6|1.3.6.1.3.3.221.250.215.141.41.14.244.67 +1.3.6.1.2.1.31.1.3.1.3.5|6|1.3.6.1.3 +1.3.6.1.2.1.31.1.3.1.3.7|6|1.3.6.1.3.82.193.48.87.252.209.114.44.241 +1.3.6.1.2.1.31.1.3.1.3.8|6|1.3.6.1.3.242.187.192.66.211.66.188.244.254 +1.3.6.1.2.1.31.1.3.1.3.14|6|1.3.6.1.3.151.19.40.38.149.190.56.39 +1.3.6.1.2.1.31.1.3.1.3.20|6|1.3.6.1.3.82.216.166.94.141.155.222.104.111 +1.3.6.1.2.1.31.1.3.1.3.25|6|1.3.6.1.3.13.142.130.103 +1.3.6.1.2.1.31.1.3.1.4.2|2|6 +1.3.6.1.2.1.31.1.3.1.4.5|2|2 +1.3.6.1.2.1.31.1.3.1.4.7|2|7 +1.3.6.1.2.1.31.1.3.1.4.8|2|5 +1.3.6.1.2.1.31.1.3.1.4.14|2|4 +1.3.6.1.2.1.31.1.3.1.4.20|2|6 +1.3.6.1.2.1.31.1.3.1.4.25|2|7 +1.3.6.1.2.1.31.1.3.1.5.2|6|1.3.6.1.3.202.124.40.237.7 +1.3.6.1.2.1.31.1.3.1.5.5|6|1.3.6.1.3.245.108.45.208.100 +1.3.6.1.2.1.31.1.3.1.5.7|6|1.3.6.1.3.106.175.178.15.71.109.161.186.237 +1.3.6.1.2.1.31.1.3.1.5.8|6|1.3.6.1.3.97 +1.3.6.1.2.1.31.1.3.1.5.14|6|1.3.6.1.3.127.247 +1.3.6.1.2.1.31.1.3.1.5.20|6|1.3.6.1.3.200.248.87.51.234.190 +1.3.6.1.2.1.31.1.3.1.5.25|6|1.3.6.1.3.197.5.93.155 +1.3.6.1.2.1.31.1.3.1.6.2|4x|4a6164656420717561696e746c792064726976696e67 +1.3.6.1.2.1.31.1.3.1.6.5|4x|6f78656e207468656972207a6f6d6269657320627574 +1.3.6.1.2.1.31.1.3.1.6.7|4x|6275742062757420666f727761726420666f72776172642064726976696e67 +1.3.6.1.2.1.31.1.3.1.6.8|4x|6f78656e2064726976696e6720717561696e746c79206b657074206b657074207a6f6d6269657320717561696e746c79 +1.3.6.1.2.1.31.1.3.1.6.14|4x|717561696e746c79207468656972206b657074204a61646564 +1.3.6.1.2.1.31.1.3.1.6.20|4x|666f72776172642064726976696e67206b657074207468656972206b657074206b65707420616374656420627574207a6f6d62696573 +1.3.6.1.2.1.31.1.3.1.6.25|4x|666f727761726420746865697220627574206b65707420666f7277617264206f78656e204a61646564206163746564 +1.3.6.1.2.1.31.1.4.1.1.1.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.1.2.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.1.3.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.1.7.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.1.14.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.1.15.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.1.23.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.1.27.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.1.29.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.1.31.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.2.1.1.18|2|3 +1.3.6.1.2.1.31.1.4.1.2.2.1.18|2|6 +1.3.6.1.2.1.31.1.4.1.2.3.1.18|2|0 +1.3.6.1.2.1.31.1.4.1.2.7.1.18|2|1 +1.3.6.1.2.1.31.1.4.1.2.14.1.18|2|1 +1.3.6.1.2.1.31.1.4.1.2.15.1.18|2|1 +1.3.6.1.2.1.31.1.4.1.2.23.1.18|2|0 +1.3.6.1.2.1.31.1.4.1.2.27.1.18|2|2 +1.3.6.1.2.1.31.1.4.1.2.29.1.18|2|4 +1.3.6.1.2.1.31.1.4.1.2.31.1.18|2|4 +1.3.6.1.2.1.31.1.4.1.3.1.1.18|2|2 +1.3.6.1.2.1.31.1.4.1.3.2.1.18|2|3 +1.3.6.1.2.1.31.1.4.1.3.3.1.18|2|3 +1.3.6.1.2.1.31.1.4.1.3.7.1.18|2|1 +1.3.6.1.2.1.31.1.4.1.3.14.1.18|2|2 +1.3.6.1.2.1.31.1.4.1.3.15.1.18|2|2 +1.3.6.1.2.1.31.1.4.1.3.23.1.18|2|3 +1.3.6.1.2.1.31.1.4.1.3.27.1.18|2|1 +1.3.6.1.2.1.31.1.4.1.3.29.1.18|2|2 +1.3.6.1.2.1.31.1.4.1.3.31.1.18|2|2 +1.3.6.1.2.1.31.1.5.0|67|1551611145 +1.3.6.1.2.1.31.1.6.0|67|2088517883 +1.3.6.1.4.1.232.1.2.2.1.1.1.0|2|0 +1.3.6.1.4.1.232.1.2.2.1.1.1.4|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.1.6|2|6 +1.3.6.1.4.1.232.1.2.2.1.1.1.8|2|8 +1.3.6.1.4.1.232.1.2.2.1.1.1.13|2|13 +1.3.6.1.4.1.232.1.2.2.1.1.1.15|2|15 +1.3.6.1.4.1.232.1.2.2.1.1.1.26|2|26 +1.3.6.1.4.1.232.1.2.2.1.1.1.27|2|27 +1.3.6.1.4.1.232.1.2.2.1.1.2.0|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.2.4|2|28 +1.3.6.1.4.1.232.1.2.2.1.1.2.6|2|28 +1.3.6.1.4.1.232.1.2.2.1.1.2.8|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.2.13|2|6 +1.3.6.1.4.1.232.1.2.2.1.1.2.15|2|5 +1.3.6.1.4.1.232.1.2.2.1.1.2.26|2|7 +1.3.6.1.4.1.232.1.2.2.1.1.2.27|2|0 +1.3.6.1.4.1.232.1.2.2.1.1.3.0|4x|6b657074206f78656e207a6f6d62696573206b657074207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.3.4|4x|6163746564207a6f6d62696573206b657074206f78656e20717561696e746c792064726976696e6720616374656420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.3.6|4x|666f7277617264206f78656e207468656972 +1.3.6.1.4.1.232.1.2.2.1.1.3.8|4x|6b657074207468656972204a61646564206b657074206163746564206163746564 +1.3.6.1.4.1.232.1.2.2.1.1.3.13|4|but +1.3.6.1.4.1.232.1.2.2.1.1.3.15|4x|4a61646564207a6f6d62696573206f78656e2062757420666f7277617264 +1.3.6.1.4.1.232.1.2.2.1.1.3.26|4x|666f7277617264204a61646564206b65707420666f72776172642064726976696e67 +1.3.6.1.4.1.232.1.2.2.1.1.3.27|4x|746865697220627574206163746564206b657074206f78656e2061637465642064726976696e67206b657074 +1.3.6.1.4.1.232.1.2.2.1.1.4.0|2|11 +1.3.6.1.4.1.232.1.2.2.1.1.4.4|2|27 +1.3.6.1.4.1.232.1.2.2.1.1.4.6|2|30 +1.3.6.1.4.1.232.1.2.2.1.1.4.8|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.4.13|2|0 +1.3.6.1.4.1.232.1.2.2.1.1.4.15|2|13 +1.3.6.1.4.1.232.1.2.2.1.1.4.26|2|10 +1.3.6.1.4.1.232.1.2.2.1.1.4.27|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.5.0|2|22 +1.3.6.1.4.1.232.1.2.2.1.1.5.4|2|29 +1.3.6.1.4.1.232.1.2.2.1.1.5.6|2|31 +1.3.6.1.4.1.232.1.2.2.1.1.5.8|2|13 +1.3.6.1.4.1.232.1.2.2.1.1.5.13|2|11 +1.3.6.1.4.1.232.1.2.2.1.1.5.15|2|26 +1.3.6.1.4.1.232.1.2.2.1.1.5.26|2|21 +1.3.6.1.4.1.232.1.2.2.1.1.5.27|2|31 +1.3.6.1.4.1.232.1.2.2.1.1.6.0|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.6.4|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.6.6|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.6.8|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.6.13|2|5 +1.3.6.1.4.1.232.1.2.2.1.1.6.15|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.6.26|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.6.27|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.7.0|2|18 +1.3.6.1.4.1.232.1.2.2.1.1.7.4|2|26 +1.3.6.1.4.1.232.1.2.2.1.1.7.6|2|24 +1.3.6.1.4.1.232.1.2.2.1.1.7.8|2|28 +1.3.6.1.4.1.232.1.2.2.1.1.7.13|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.7.15|2|23 +1.3.6.1.4.1.232.1.2.2.1.1.7.26|2|30 +1.3.6.1.4.1.232.1.2.2.1.1.7.27|2|26 +1.3.6.1.4.1.232.1.2.2.1.1.8.0|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.8.4|2|7 +1.3.6.1.4.1.232.1.2.2.1.1.8.6|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.8.8|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.8.13|2|5 +1.3.6.1.4.1.232.1.2.2.1.1.8.15|2|10 +1.3.6.1.4.1.232.1.2.2.1.1.8.26|2|8 +1.3.6.1.4.1.232.1.2.2.1.1.8.27|2|10 +1.3.6.1.4.1.232.1.2.2.1.1.9.0|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.9.4|2|7 +1.3.6.1.4.1.232.1.2.2.1.1.9.6|2|5 +1.3.6.1.4.1.232.1.2.2.1.1.9.8|2|10 +1.3.6.1.4.1.232.1.2.2.1.1.9.13|2|7 +1.3.6.1.4.1.232.1.2.2.1.1.9.15|2|18 +1.3.6.1.4.1.232.1.2.2.1.1.9.26|2|12 +1.3.6.1.4.1.232.1.2.2.1.1.9.27|2|25 +1.3.6.1.4.1.232.1.2.2.1.1.10.0|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.10.4|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.10.6|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.10.8|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.10.13|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.10.15|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.10.26|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.10.27|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.11.0|4|their +1.3.6.1.4.1.232.1.2.2.1.1.11.4|4x|666f727761726420627574206f78656e204a61646564206b657074206f78656e2064726976696e67206163746564207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.11.6|4x|6b657074206f78656e20666f727761726420717561696e746c79 +1.3.6.1.4.1.232.1.2.2.1.1.11.8|4x|666f727761726420616374656420717561696e746c7920746865697220627574207a6f6d62696573207468656972 +1.3.6.1.4.1.232.1.2.2.1.1.11.13|4x|6275742062757420666f72776172642062757420717561696e746c79207468656972207468656972 +1.3.6.1.4.1.232.1.2.2.1.1.11.15|4x|627574206b6570742064726976696e67207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.11.26|4|oxen +1.3.6.1.4.1.232.1.2.2.1.1.11.27|4x|6b657074206275742064726976696e67 +1.3.6.1.4.1.232.1.2.2.1.1.12.0|2|5 +1.3.6.1.4.1.232.1.2.2.1.1.12.4|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.12.6|2|6 +1.3.6.1.4.1.232.1.2.2.1.1.12.8|2|14 +1.3.6.1.4.1.232.1.2.2.1.1.12.13|2|14 +1.3.6.1.4.1.232.1.2.2.1.1.12.15|2|11 +1.3.6.1.4.1.232.1.2.2.1.1.12.26|2|12 +1.3.6.1.4.1.232.1.2.2.1.1.12.27|2|9 +1.3.6.1.4.1.232.1.2.2.1.1.13.0|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.13.4|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.13.6|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.13.8|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.13.13|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.13.15|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.13.26|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.13.27|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.14.0|4x|6f78656e206b657074206b65707420666f7277617264207468656972204a6164656420717561696e746c7920616374656420627574 +1.3.6.1.4.1.232.1.2.2.1.1.14.4|4x|64726976696e672064726976696e67204a6164656420666f7277617264204a61646564207a6f6d626965732064726976696e67207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.14.6|4x|627574207a6f6d6269657320666f7277617264206f78656e204a6164656420666f7277617264206f78656e +1.3.6.1.4.1.232.1.2.2.1.1.14.8|4x|4a6164656420666f7277617264206f78656e20627574206b6570742064726976696e67 +1.3.6.1.4.1.232.1.2.2.1.1.14.13|4x|746865697220627574206b657074 +1.3.6.1.4.1.232.1.2.2.1.1.14.15|4x|717561696e746c7920746865697220717561696e746c79204a61646564 +1.3.6.1.4.1.232.1.2.2.1.1.14.26|4x|6b657074207a6f6d62696573207a6f6d62696573206275742064726976696e672061637465642062757420627574206b657074 +1.3.6.1.4.1.232.1.2.2.1.1.14.27|4x|717561696e746c79204a61646564207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.15.0|2|0 +1.3.6.1.4.1.232.1.2.2.1.1.15.4|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.15.6|2|26 +1.3.6.1.4.1.232.1.2.2.1.1.15.8|2|27 +1.3.6.1.4.1.232.1.2.2.1.1.15.13|2|21 +1.3.6.1.4.1.232.1.2.2.1.1.15.15|2|17 +1.3.6.1.4.1.232.1.2.2.1.1.15.26|2|28 +1.3.6.1.4.1.232.1.2.2.1.1.15.27|2|17 +1.3.6.1.4.1.232.1.2.2.1.1.16.0|4x|666f727761726420666f7277617264204a61646564206b6570742064726976696e67 +1.3.6.1.4.1.232.1.2.2.1.1.16.4|4x|7468656972204a61646564206b657074207468656972207a6f6d626965732064726976696e67 +1.3.6.1.4.1.232.1.2.2.1.1.16.6|4x|666f7277617264207a6f6d62696573206163746564204a6164656420666f7277617264 +1.3.6.1.4.1.232.1.2.2.1.1.16.8|4x|627574206f78656e206163746564204a616465642064726976696e6720666f72776172642061637465642064726976696e67207468656972 +1.3.6.1.4.1.232.1.2.2.1.1.16.13|4x|6b657074207a6f6d62696573207a6f6d626965732064726976696e672064726976696e67 +1.3.6.1.4.1.232.1.2.2.1.1.16.15|4x|7468656972207468656972204a61646564 +1.3.6.1.4.1.232.1.2.2.1.1.16.26|4x|746865697220666f7277617264206f78656e20717561696e746c79 +1.3.6.1.4.1.232.1.2.2.1.1.16.27|4x|666f727761726420717561696e746c79206b657074 +1.3.6.1.4.1.232.1.2.2.1.1.17.0|4x|6b65707420717561696e746c79 +1.3.6.1.4.1.232.1.2.2.1.1.17.4|4x|627574207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.17.6|4x|64726976696e67204a61646564206b65707420666f727761726420717561696e746c79206f78656e207468656972 +1.3.6.1.4.1.232.1.2.2.1.1.17.8|4x|64726976696e6720616374656420627574 +1.3.6.1.4.1.232.1.2.2.1.1.17.13|4x|7a6f6d62696573206b65707420717561696e746c7920717561696e746c79206163746564204a61646564206b657074 +1.3.6.1.4.1.232.1.2.2.1.1.17.15|4x|717561696e746c79204a6164656420666f7277617264 +1.3.6.1.4.1.232.1.2.2.1.1.17.26|4x|6f78656e20746865697220627574206275742074686569722064726976696e67206b657074207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.17.27|4x|7468656972206b6570742064726976696e67204a61646564207a6f6d6269657320627574 +1.3.6.1.4.1.232.1.2.2.1.1.18.0|4x|7a6f6d62696573207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.18.4|4x|746865697220746865697220616374656420627574207a6f6d62696573207a6f6d6269657320666f727761726420717561696e746c79 +1.3.6.1.4.1.232.1.2.2.1.1.18.6|4x|4a61646564204a6164656420717561696e746c79206f78656e207468656972206163746564207a6f6d6269657320666f7277617264207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.18.8|4x|6f78656e206b65707420666f7277617264206b6570742064726976696e67206163746564206f78656e206163746564 +1.3.6.1.4.1.232.1.2.2.1.1.18.13|4x|4a61646564204a61646564207468656972207468656972206b6570742064726976696e67 +1.3.6.1.4.1.232.1.2.2.1.1.18.15|4|forward +1.3.6.1.4.1.232.1.2.2.1.1.18.26|4x|627574206163746564207468656972207a6f6d62696573207468656972206163746564 +1.3.6.1.4.1.232.1.2.2.1.1.18.27|4x|7468656972206f78656e20616374656420627574204a616465642064726976696e67207a6f6d6269657320627574 +1.3.6.1.4.1.232.1.2.2.1.1.19.0|4|quaintly +1.3.6.1.4.1.232.1.2.2.1.1.19.4|4x|627574204a61646564 +1.3.6.1.4.1.232.1.2.2.1.1.19.6|4x|7a6f6d626965732074686569722064726976696e67 +1.3.6.1.4.1.232.1.2.2.1.1.19.8|4x|717561696e746c792064726976696e67206b657074 +1.3.6.1.4.1.232.1.2.2.1.1.19.13|4x|4a616465642064726976696e6720627574206f78656e206b6570742062757420627574 +1.3.6.1.4.1.232.1.2.2.1.1.19.15|4x|6f78656e207a6f6d62696573206163746564207a6f6d62696573204a6164656420627574 +1.3.6.1.4.1.232.1.2.2.1.1.19.26|4x|4a6164656420666f727761726420717561696e746c7920666f7277617264 +1.3.6.1.4.1.232.1.2.2.1.1.19.27|4x|64726976696e672064726976696e672062757420627574206f78656e207468656972 +1.3.6.1.4.1.232.1.2.2.1.1.20.0|2|11 +1.3.6.1.4.1.232.1.2.2.1.1.20.4|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.20.6|2|21 +1.3.6.1.4.1.232.1.2.2.1.1.20.8|2|5 +1.3.6.1.4.1.232.1.2.2.1.1.20.13|2|8 +1.3.6.1.4.1.232.1.2.2.1.1.20.15|2|18 +1.3.6.1.4.1.232.1.2.2.1.1.20.26|2|11 +1.3.6.1.4.1.232.1.2.2.1.1.20.27|2|8 +1.3.6.1.4.1.232.1.2.2.1.1.21.0|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.21.4|2|22 +1.3.6.1.4.1.232.1.2.2.1.1.21.6|2|7 +1.3.6.1.4.1.232.1.2.2.1.1.21.8|2|26 +1.3.6.1.4.1.232.1.2.2.1.1.21.13|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.21.15|2|17 +1.3.6.1.4.1.232.1.2.2.1.1.21.26|2|16 +1.3.6.1.4.1.232.1.2.2.1.1.21.27|2|30 +1.3.6.1.4.1.232.1.2.2.1.1.22.0|2|12 +1.3.6.1.4.1.232.1.2.2.1.1.22.4|2|28 +1.3.6.1.4.1.232.1.2.2.1.1.22.6|2|24 +1.3.6.1.4.1.232.1.2.2.1.1.22.8|2|9 +1.3.6.1.4.1.232.1.2.2.1.1.22.13|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.22.15|2|25 +1.3.6.1.4.1.232.1.2.2.1.1.22.26|2|25 +1.3.6.1.4.1.232.1.2.2.1.1.22.27|2|18 +1.3.6.1.4.1.232.1.2.2.1.1.23.0|4x|6b657074206f78656e207a6f6d62696573206b657074207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.23.4|4x|717561696e746c79206b6570742064726976696e67206163746564206163746564 +1.3.6.1.4.1.232.1.2.2.1.1.23.6|4x|6163746564207468656972206b65707420666f7277617264206163746564 +1.3.6.1.4.1.232.1.2.2.1.1.23.8|4x|7a6f6d62696573206b657074206f78656e206163746564 +1.3.6.1.4.1.232.1.2.2.1.1.23.13|4x|4a61646564207468656972 +1.3.6.1.4.1.232.1.2.2.1.1.23.15|4x|64726976696e6720717561696e746c79206f78656e206b657074207468656972206f78656e206f78656e204a61646564 +1.3.6.1.4.1.232.1.2.2.1.1.23.26|4x|6b657074206b6570742064726976696e6720627574207a6f6d6269657320627574 +1.3.6.1.4.1.232.1.2.2.1.1.23.27|4x|6f78656e207a6f6d62696573207a6f6d62696573206163746564 +1.3.6.1.4.1.232.1.2.2.1.1.24.0|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.24.4|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.24.6|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.24.8|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.24.13|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.24.15|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.24.26|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.24.27|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.25.0|2|10 +1.3.6.1.4.1.232.1.2.2.1.1.25.4|2|15 +1.3.6.1.4.1.232.1.2.2.1.1.25.6|2|24 +1.3.6.1.4.1.232.1.2.2.1.1.25.8|2|28 +1.3.6.1.4.1.232.1.2.2.1.1.25.13|2|31 +1.3.6.1.4.1.232.1.2.2.1.1.25.15|2|24 +1.3.6.1.4.1.232.1.2.2.1.1.25.26|2|25 +1.3.6.1.4.1.232.1.2.2.1.1.25.27|2|21 +1.3.6.1.4.1.232.1.2.2.1.1.26.0|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.26.4|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.26.6|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.26.8|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.26.13|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.26.15|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.26.26|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.26.27|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.27.0|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.27.4|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.27.6|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.27.8|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.27.13|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.27.15|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.27.26|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.27.27|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.28.0|4x|6b657074206163746564204a61646564207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.28.4|4x|7468656972207468656972 +1.3.6.1.4.1.232.1.2.2.1.1.28.6|4x|4a61646564207a6f6d6269657320717561696e746c7920666f7277617264206b657074207a6f6d62696573204a616465642064726976696e67 +1.3.6.1.4.1.232.1.2.2.1.1.28.8|4|forward +1.3.6.1.4.1.232.1.2.2.1.1.28.13|4x|4a61646564207a6f6d62696573207a6f6d62696573204a6164656420616374656420666f7277617264206b6570742064726976696e67204a61646564 +1.3.6.1.4.1.232.1.2.2.1.1.28.15|4x|666f7277617264207a6f6d62696573206f78656e20666f7277617264 +1.3.6.1.4.1.232.1.2.2.1.1.28.26|4x|627574206275742062757420717561696e746c79207a6f6d62696573207468656972206b657074 +1.3.6.1.4.1.232.1.2.2.1.1.28.27|4x|7468656972206f78656e20666f72776172642064726976696e6720717561696e746c79 +1.3.6.1.4.1.232.1.2.2.1.1.29.0|2|31 +1.3.6.1.4.1.232.1.2.2.1.1.29.4|2|30 +1.3.6.1.4.1.232.1.2.2.1.1.29.6|2|11 +1.3.6.1.4.1.232.1.2.2.1.1.29.8|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.29.13|2|13 +1.3.6.1.4.1.232.1.2.2.1.1.29.15|2|17 +1.3.6.1.4.1.232.1.2.2.1.1.29.26|2|26 +1.3.6.1.4.1.232.1.2.2.1.1.29.27|2|15 +1.3.6.1.4.1.232.1.2.2.1.1.30.0|2|26 +1.3.6.1.4.1.232.1.2.2.1.1.30.4|2|9 +1.3.6.1.4.1.232.1.2.2.1.1.30.6|2|16 +1.3.6.1.4.1.232.1.2.2.1.1.30.8|2|16 +1.3.6.1.4.1.232.1.2.2.1.1.30.13|2|19 +1.3.6.1.4.1.232.1.2.2.1.1.30.15|2|18 +1.3.6.1.4.1.232.1.2.2.1.1.30.26|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.30.27|2|14 +1.3.6.1.4.1.232.1.2.2.1.1.31.0|2|10 +1.3.6.1.4.1.232.1.2.2.1.1.31.4|2|11 +1.3.6.1.4.1.232.1.2.2.1.1.31.6|2|22 +1.3.6.1.4.1.232.1.2.2.1.1.31.8|2|7 +1.3.6.1.4.1.232.1.2.2.1.1.31.13|2|25 +1.3.6.1.4.1.232.1.2.2.1.1.31.15|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.31.26|2|18 +1.3.6.1.4.1.232.1.2.2.1.1.31.27|2|27 +1.3.6.1.4.1.232.1.2.6.1|4|A04-08/12/2019 +1.3.6.1.4.1.232.2.2.2.1|4|dLPEdPBE5yKtjW9xx3 +1.3.6.1.4.1.232.2.2.4.2|4|ProLiant BL35p G1 +1.3.6.1.4.1.232.2.2.4.5.1.1.6.16|2|6 +1.3.6.1.4.1.232.2.2.4.5.1.1.7.17|2|7 +1.3.6.1.4.1.232.2.2.4.5.1.1.7.30|2|7 +1.3.6.1.4.1.232.2.2.4.5.1.1.8.20|2|8 +1.3.6.1.4.1.232.2.2.4.5.1.1.10.4|2|10 +1.3.6.1.4.1.232.2.2.4.5.1.1.15.27|2|15 +1.3.6.1.4.1.232.2.2.4.5.1.1.20.14|2|20 +1.3.6.1.4.1.232.2.2.4.5.1.1.21.14|2|21 +1.3.6.1.4.1.232.2.2.4.5.1.1.23.0|2|23 +1.3.6.1.4.1.232.2.2.4.5.1.1.28.20|2|28 +1.3.6.1.4.1.232.2.2.4.5.1.2.6.16|2|16 +1.3.6.1.4.1.232.2.2.4.5.1.2.7.17|2|17 +1.3.6.1.4.1.232.2.2.4.5.1.2.7.30|2|30 +1.3.6.1.4.1.232.2.2.4.5.1.2.8.20|2|20 +1.3.6.1.4.1.232.2.2.4.5.1.2.10.4|2|4 +1.3.6.1.4.1.232.2.2.4.5.1.2.15.27|2|27 +1.3.6.1.4.1.232.2.2.4.5.1.2.20.14|2|14 +1.3.6.1.4.1.232.2.2.4.5.1.2.21.14|2|14 +1.3.6.1.4.1.232.2.2.4.5.1.2.23.0|2|0 +1.3.6.1.4.1.232.2.2.4.5.1.2.28.20|2|20 +1.3.6.1.4.1.232.2.2.4.5.1.3.6.16|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.3.7.17|2|30 +1.3.6.1.4.1.232.2.2.4.5.1.3.7.30|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.3.8.20|2|25 +1.3.6.1.4.1.232.2.2.4.5.1.3.10.4|2|12 +1.3.6.1.4.1.232.2.2.4.5.1.3.15.27|2|13 +1.3.6.1.4.1.232.2.2.4.5.1.3.20.14|2|20 +1.3.6.1.4.1.232.2.2.4.5.1.3.21.14|2|0 +1.3.6.1.4.1.232.2.2.4.5.1.3.23.0|2|27 +1.3.6.1.4.1.232.2.2.4.5.1.3.28.20|2|23 +1.3.6.1.4.1.232.2.2.4.5.1.4.6.16|2|9 +1.3.6.1.4.1.232.2.2.4.5.1.4.7.17|2|9 +1.3.6.1.4.1.232.2.2.4.5.1.4.7.30|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.4.8.20|2|11 +1.3.6.1.4.1.232.2.2.4.5.1.4.10.4|2|7 +1.3.6.1.4.1.232.2.2.4.5.1.4.15.27|2|4 +1.3.6.1.4.1.232.2.2.4.5.1.4.20.14|2|10 +1.3.6.1.4.1.232.2.2.4.5.1.4.21.14|2|12 +1.3.6.1.4.1.232.2.2.4.5.1.4.23.0|2|6 +1.3.6.1.4.1.232.2.2.4.5.1.4.28.20|2|4 +1.3.6.1.4.1.232.2.2.4.5.1.5.6.16|2|15 +1.3.6.1.4.1.232.2.2.4.5.1.5.7.17|2|10 +1.3.6.1.4.1.232.2.2.4.5.1.5.7.30|2|2 +1.3.6.1.4.1.232.2.2.4.5.1.5.8.20|2|19 +1.3.6.1.4.1.232.2.2.4.5.1.5.10.4|2|31 +1.3.6.1.4.1.232.2.2.4.5.1.5.15.27|2|5 +1.3.6.1.4.1.232.2.2.4.5.1.5.20.14|2|6 +1.3.6.1.4.1.232.2.2.4.5.1.5.21.14|2|7 +1.3.6.1.4.1.232.2.2.4.5.1.5.23.0|2|8 +1.3.6.1.4.1.232.2.2.4.5.1.5.28.20|2|12 +1.3.6.1.4.1.232.2.2.4.5.1.6.6.16|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.6.7.17|2|5 +1.3.6.1.4.1.232.2.2.4.5.1.6.7.30|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.6.8.20|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.6.10.4|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.6.15.27|2|6 +1.3.6.1.4.1.232.2.2.4.5.1.6.20.14|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.6.21.14|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.6.23.0|2|4 +1.3.6.1.4.1.232.2.2.4.5.1.6.28.20|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.7.6.16|4x|64726976696e672064726976696e67204a616465642062757420616374656420627574207a6f6d6269657320666f7277617264206f78656e +1.3.6.1.4.1.232.2.2.4.5.1.7.7.17|4x|6f78656e20717561696e746c79204a6164656420746865697220666f7277617264 +1.3.6.1.4.1.232.2.2.4.5.1.7.7.30|4x|62757420717561696e746c79207a6f6d6269657320666f727761726420746865697220627574207a6f6d6269657320627574 +1.3.6.1.4.1.232.2.2.4.5.1.7.8.20|4x|64726976696e6720666f727761726420616374656420666f727761726420717561696e746c79 +1.3.6.1.4.1.232.2.2.4.5.1.7.10.4|4x|7a6f6d626965732064726976696e67206163746564204a616465642062757420627574 +1.3.6.1.4.1.232.2.2.4.5.1.7.15.27|4x|64726976696e6720717561696e746c79207a6f6d62696573206f78656e +1.3.6.1.4.1.232.2.2.4.5.1.7.20.14|4x|4a61646564206b657074206163746564207468656972 +1.3.6.1.4.1.232.2.2.4.5.1.7.21.14|4x|717561696e746c7920666f727761726420717561696e746c79206f78656e20717561696e746c79 +1.3.6.1.4.1.232.2.2.4.5.1.7.23.0|4x|627574204a61646564206b6570742064726976696e67 +1.3.6.1.4.1.232.2.2.4.5.1.7.28.20|4x|666f727761726420717561696e746c7920666f7277617264207a6f6d62696573206163746564 +1.3.6.1.4.1.232.2.2.4.5.1.8.6.16|4|Jaded +1.3.6.1.4.1.232.2.2.4.5.1.8.7.17|4x|616374656420717561696e746c79207468656972206163746564206b657074 +1.3.6.1.4.1.232.2.2.4.5.1.8.7.30|4x|717561696e746c79207468656972 +1.3.6.1.4.1.232.2.2.4.5.1.8.8.20|4x|64726976696e67206b65707420717561696e746c7920717561696e746c79204a61646564 +1.3.6.1.4.1.232.2.2.4.5.1.8.10.4|4x|7a6f6d62696573207468656972206f78656e204a616465642064726976696e67206b65707420627574206b657074206163746564 +1.3.6.1.4.1.232.2.2.4.5.1.8.15.27|4x|64726976696e67206163746564 +1.3.6.1.4.1.232.2.2.4.5.1.8.20.14|4x|666f7277617264206f78656e2064726976696e67206f78656e20666f7277617264204a6164656420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.232.2.2.4.5.1.8.21.14|4x|627574206f78656e2064726976696e67204a61646564 +1.3.6.1.4.1.232.2.2.4.5.1.8.23.0|4x|717561696e746c7920627574206b65707420746865697220746865697220666f7277617264206b657074 +1.3.6.1.4.1.232.2.2.4.5.1.8.28.20|4x|746865697220666f727761726420666f727761726420717561696e746c792064726976696e67206f78656e2064726976696e67 +1.3.6.1.4.1.232.2.2.4.5.1.9.6.16|4|zombies +1.3.6.1.4.1.232.2.2.4.5.1.9.7.17|4|driving +1.3.6.1.4.1.232.2.2.4.5.1.9.7.30|4|forward +1.3.6.1.4.1.232.2.2.4.5.1.9.8.20|4|forward +1.3.6.1.4.1.232.2.2.4.5.1.9.10.4|4|forward +1.3.6.1.4.1.232.2.2.4.5.1.9.15.27|4|forward +1.3.6.1.4.1.232.2.2.4.5.1.9.20.14|4|forward +1.3.6.1.4.1.232.2.2.4.5.1.9.21.14|4|zombies +1.3.6.1.4.1.232.2.2.4.5.1.9.23.0|4|forward +1.3.6.1.4.1.232.2.2.4.5.1.9.28.20|4|forward +1.3.6.1.4.1.232.2.2.4.5.1.10.6.16|4x|6b6570742064726976696e67206b657074207468656972204a61646564 +1.3.6.1.4.1.232.2.2.4.5.1.10.7.17|4x|6f78656e20616374656420717561696e746c7920717561696e746c79206275742061637465642064726976696e67 +1.3.6.1.4.1.232.2.2.4.5.1.10.7.30|4x|7a6f6d62696573207468656972206b657074 +1.3.6.1.4.1.232.2.2.4.5.1.10.8.20|4x|7a6f6d62696573204a61646564207a6f6d62696573 +1.3.6.1.4.1.232.2.2.4.5.1.10.10.4|4x|64726976696e6720627574207468656972207a6f6d6269657320666f7277617264206b65707420666f7277617264 +1.3.6.1.4.1.232.2.2.4.5.1.10.15.27|4|Jaded +1.3.6.1.4.1.232.2.2.4.5.1.10.20.14|4x|62757420627574204a61646564206163746564 +1.3.6.1.4.1.232.2.2.4.5.1.10.21.14|4x|4a6164656420627574207468656972204a61646564206f78656e204a61646564206b65707420717561696e746c79 +1.3.6.1.4.1.232.2.2.4.5.1.10.23.0|4x|6f78656e20717561696e746c79204a6164656420746865697220666f7277617264 +1.3.6.1.4.1.232.2.2.4.5.1.10.28.20|4x|666f7277617264206f78656e204a61646564206b65707420666f7277617264 +1.3.6.1.4.1.232.2.2.4.5.1.11.6.16|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.11.7.17|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.11.7.30|2|2 +1.3.6.1.4.1.232.2.2.4.5.1.11.8.20|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.11.10.4|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.11.15.27|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.11.20.14|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.11.21.14|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.11.23.0|2|2 +1.3.6.1.4.1.232.2.2.4.5.1.11.28.20|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.12.6.16|4|but +1.3.6.1.4.1.232.2.2.4.5.1.12.7.17|4x|666f727761726420717561696e746c7920666f7277617264204a61646564206b6570742062757420666f7277617264204a6164656420717561696e746c79 +1.3.6.1.4.1.232.2.2.4.5.1.12.7.30|4|forward +1.3.6.1.4.1.232.2.2.4.5.1.12.8.20|4x|6f78656e204a61646564 +1.3.6.1.4.1.232.2.2.4.5.1.12.10.4|4x|627574204a6164656420666f72776172642061637465642064726976696e67 +1.3.6.1.4.1.232.2.2.4.5.1.12.15.27|4x|717561696e746c79204a6164656420616374656420717561696e746c79206f78656e20717561696e746c792064726976696e67207468656972206b657074 +1.3.6.1.4.1.232.2.2.4.5.1.12.20.14|4x|666f7277617264207a6f6d62696573204a6164656420717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.232.2.2.4.5.1.12.21.14|4x|6b657074206b657074206f78656e207468656972206163746564206b657074206b65707420717561696e746c79 +1.3.6.1.4.1.232.2.2.4.5.1.12.23.0|4x|666f7277617264207a6f6d626965732064726976696e672074686569722064726976696e67204a61646564 +1.3.6.1.4.1.232.2.2.4.5.1.12.28.20|4|Jaded +1.3.6.1.4.1.232.2.2.4.5.1.13.6.16|2|24 +1.3.6.1.4.1.232.2.2.4.5.1.13.7.17|2|31 +1.3.6.1.4.1.232.2.2.4.5.1.13.7.30|2|10 +1.3.6.1.4.1.232.2.2.4.5.1.13.8.20|2|9 +1.3.6.1.4.1.232.2.2.4.5.1.13.10.4|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.13.15.27|2|23 +1.3.6.1.4.1.232.2.2.4.5.1.13.20.14|2|27 +1.3.6.1.4.1.232.2.2.4.5.1.13.21.14|2|8 +1.3.6.1.4.1.232.2.2.4.5.1.13.23.0|2|2 +1.3.6.1.4.1.232.2.2.4.5.1.13.28.20|2|20 +1.3.6.1.4.1.232.2.2.4.5.1.14.6.16|2|8 +1.3.6.1.4.1.232.2.2.4.5.1.14.7.17|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.14.7.30|2|13 +1.3.6.1.4.1.232.2.2.4.5.1.14.8.20|2|4 +1.3.6.1.4.1.232.2.2.4.5.1.14.10.4|2|4 +1.3.6.1.4.1.232.2.2.4.5.1.14.15.27|2|0 +1.3.6.1.4.1.232.2.2.4.5.1.14.20.14|2|11 +1.3.6.1.4.1.232.2.2.4.5.1.14.21.14|2|15 +1.3.6.1.4.1.232.2.2.4.5.1.14.23.0|2|11 +1.3.6.1.4.1.232.2.2.4.5.1.14.28.20|2|6 +1.3.6.1.4.1.232.2.2.4.5.1.15.6.16|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.15.7.17|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.15.7.30|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.15.8.20|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.15.10.4|2|2 +1.3.6.1.4.1.232.2.2.4.5.1.15.15.27|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.15.20.14|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.15.21.14|2|2 +1.3.6.1.4.1.232.2.2.4.5.1.15.23.0|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.15.28.20|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.16.6.16|4x|6f78656e20717561696e746c792062757420717561696e746c79206163746564 +1.3.6.1.4.1.232.2.2.4.5.1.16.7.17|4x|717561696e746c7920717561696e746c79 +1.3.6.1.4.1.232.2.2.4.5.1.16.7.30|4x|4a616465642064726976696e6720717561696e746c792064726976696e6720717561696e746c7920717561696e746c7920627574 +1.3.6.1.4.1.232.2.2.4.5.1.16.8.20|4x|717561696e746c7920666f72776172642062757420627574 +1.3.6.1.4.1.232.2.2.4.5.1.16.10.4|4x|7a6f6d62696573206b65707420666f7277617264204a61646564 +1.3.6.1.4.1.232.2.2.4.5.1.16.15.27|4x|6b65707420616374656420627574207468656972207a6f6d62696573204a6164656420616374656420666f727761726420666f7277617264 +1.3.6.1.4.1.232.2.2.4.5.1.16.20.14|4x|627574206f78656e20717561696e746c79206b657074206b65707420666f7277617264206f78656e20717561696e746c79 +1.3.6.1.4.1.232.2.2.4.5.1.16.21.14|4x|627574207468656972206b657074207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.232.2.2.4.5.1.16.23.0|4x|6b65707420717561696e746c7920666f7277617264207a6f6d6269657320717561696e746c792064726976696e67206f78656e206f78656e20717561696e746c79 +1.3.6.1.4.1.232.2.2.4.5.1.16.28.20|4x|7a6f6d62696573206b65707420627574 +1.3.6.1.4.1.232.2.2.4.5.1.17.6.16|4x|6f78656e2062757420717561696e746c79206b657074 +1.3.6.1.4.1.232.2.2.4.5.1.17.7.17|4x|616374656420616374656420666f7277617264206163746564206b65707420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.232.2.2.4.5.1.17.7.30|4x|746865697220627574 +1.3.6.1.4.1.232.2.2.4.5.1.17.8.20|4x|62757420627574207a6f6d6269657320717561696e746c7920666f7277617264 +1.3.6.1.4.1.232.2.2.4.5.1.17.10.4|4x|4a616465642064726976696e6720666f7277617264206b657074 +1.3.6.1.4.1.232.2.2.4.5.1.17.15.27|4x|6f78656e20746865697220666f7277617264204a61646564207468656972204a61646564 +1.3.6.1.4.1.232.2.2.4.5.1.17.20.14|4|acted +1.3.6.1.4.1.232.2.2.4.5.1.17.21.14|4x|4a61646564206f78656e207a6f6d62696573 +1.3.6.1.4.1.232.2.2.4.5.1.17.23.0|4x|6b657074206163746564206163746564207a6f6d62696573207a6f6d6269657320666f7277617264206f78656e +1.3.6.1.4.1.232.2.2.4.5.1.17.28.20|4x|666f7277617264207a6f6d62696573207a6f6d62696573206f78656e20666f7277617264207a6f6d62696573207a6f6d62696573206b657074 +1.3.6.1.4.1.232.2.2.4.6.0|2|27 +1.3.6.1.4.1.232.3.2.2.1.1.1.3|2|3 +1.3.6.1.4.1.232.3.2.2.1.1.2.3|2|29 +1.3.6.1.4.1.232.3.2.2.1.1.3.3|4|kept +1.3.6.1.4.1.232.3.2.2.1.1.4.3|2|4 +1.3.6.1.4.1.232.3.2.2.1.1.5.3|2|18 +1.3.6.1.4.1.232.3.2.2.1.1.6.3|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.1.0.2|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.1.0.28|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.1.8.31|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.1.9.24|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.1.9.28|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.1.10.17|2|10 +1.3.6.1.4.1.232.3.2.5.1.1.1.11.4|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.1.12.20|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.1.18.22|2|18 +1.3.6.1.4.1.232.3.2.5.1.1.1.23.2|2|23 +1.3.6.1.4.1.232.3.2.5.1.1.2.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.2.0.28|2|28 +1.3.6.1.4.1.232.3.2.5.1.1.2.8.31|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.2.9.24|2|24 +1.3.6.1.4.1.232.3.2.5.1.1.2.9.28|2|28 +1.3.6.1.4.1.232.3.2.5.1.1.2.10.17|2|17 +1.3.6.1.4.1.232.3.2.5.1.1.2.11.4|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.2.12.20|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.2.18.22|2|22 +1.3.6.1.4.1.232.3.2.5.1.1.2.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.3.0.2|4|but +1.3.6.1.4.1.232.3.2.5.1.1.3.0.28|4x|64726976696e67207a6f6d6269657320717561696e746c79207a6f6d62696573206b657074206b65707420627574206f78656e204a61646564 +1.3.6.1.4.1.232.3.2.5.1.1.3.8.31|4x|6b657074206f78656e20717561696e746c79206f78656e207a6f6d62696573 +1.3.6.1.4.1.232.3.2.5.1.1.3.9.24|4x|627574204a61646564206f78656e206163746564206163746564207468656972206163746564 +1.3.6.1.4.1.232.3.2.5.1.1.3.9.28|4x|717561696e746c79207468656972204a6164656420746865697220717561696e746c79207468656972 +1.3.6.1.4.1.232.3.2.5.1.1.3.10.17|4x|6163746564204a616465642062757420666f7277617264207468656972 +1.3.6.1.4.1.232.3.2.5.1.1.3.11.4|4|zombies +1.3.6.1.4.1.232.3.2.5.1.1.3.12.20|4x|666f7277617264206f78656e2064726976696e672064726976696e67 +1.3.6.1.4.1.232.3.2.5.1.1.3.18.22|4x|64726976696e672064726976696e67 +1.3.6.1.4.1.232.3.2.5.1.1.3.23.2|4|Jaded +1.3.6.1.4.1.232.3.2.5.1.1.4.0.2|4x|6b65707420627574 +1.3.6.1.4.1.232.3.2.5.1.1.4.0.28|4|Jaded +1.3.6.1.4.1.232.3.2.5.1.1.4.8.31|4|their +1.3.6.1.4.1.232.3.2.5.1.1.4.9.24|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.4.9.28|4|forward +1.3.6.1.4.1.232.3.2.5.1.1.4.10.17|4|driving +1.3.6.1.4.1.232.3.2.5.1.1.4.11.4|4|kept +1.3.6.1.4.1.232.3.2.5.1.1.4.12.20|4|Jaded +1.3.6.1.4.1.232.3.2.5.1.1.4.18.22|4|forward +1.3.6.1.4.1.232.3.2.5.1.1.4.23.2|4|forward +1.3.6.1.4.1.232.3.2.5.1.1.5.0.2|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.5.0.28|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.5.8.31|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.5.9.24|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.5.9.28|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.5.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.5.11.4|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.5.12.20|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.5.18.22|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.5.23.2|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.6.0.2|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.6.0.28|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.6.8.31|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.6.9.24|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.6.9.28|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.6.10.17|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.6.11.4|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.6.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.6.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.6.23.2|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.7.0.2|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.7.0.28|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.7.8.31|2|13 +1.3.6.1.4.1.232.3.2.5.1.1.7.9.24|2|10 +1.3.6.1.4.1.232.3.2.5.1.1.7.9.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.7.10.17|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.7.11.4|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.7.12.20|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.7.18.22|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.7.23.2|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.8.0.2|65|546389013 +1.3.6.1.4.1.232.3.2.5.1.1.8.0.28|65|2306609150 +1.3.6.1.4.1.232.3.2.5.1.1.8.8.31|65|1183142468 +1.3.6.1.4.1.232.3.2.5.1.1.8.9.24|65|1524544657 +1.3.6.1.4.1.232.3.2.5.1.1.8.9.28|65|1257847199 +1.3.6.1.4.1.232.3.2.5.1.1.8.10.17|65|4186257677 +1.3.6.1.4.1.232.3.2.5.1.1.8.11.4|65|75536387 +1.3.6.1.4.1.232.3.2.5.1.1.8.12.20|65|3025977095 +1.3.6.1.4.1.232.3.2.5.1.1.8.18.22|65|3599100832 +1.3.6.1.4.1.232.3.2.5.1.1.8.23.2|65|3165071379 +1.3.6.1.4.1.232.3.2.5.1.1.9.0.2|65|3922822364 +1.3.6.1.4.1.232.3.2.5.1.1.9.0.28|65|3234904649 +1.3.6.1.4.1.232.3.2.5.1.1.9.8.31|65|1901171918 +1.3.6.1.4.1.232.3.2.5.1.1.9.9.24|65|2263188134 +1.3.6.1.4.1.232.3.2.5.1.1.9.9.28|65|2061135672 +1.3.6.1.4.1.232.3.2.5.1.1.9.10.17|65|398777741 +1.3.6.1.4.1.232.3.2.5.1.1.9.11.4|65|1272452264 +1.3.6.1.4.1.232.3.2.5.1.1.9.12.20|65|622055389 +1.3.6.1.4.1.232.3.2.5.1.1.9.18.22|65|4131783907 +1.3.6.1.4.1.232.3.2.5.1.1.9.23.2|65|2234487753 +1.3.6.1.4.1.232.3.2.5.1.1.10.0.2|65|1741338020 +1.3.6.1.4.1.232.3.2.5.1.1.10.0.28|65|3759438885 +1.3.6.1.4.1.232.3.2.5.1.1.10.8.31|65|282836214 +1.3.6.1.4.1.232.3.2.5.1.1.10.9.24|65|2190162781 +1.3.6.1.4.1.232.3.2.5.1.1.10.9.28|65|517385251 +1.3.6.1.4.1.232.3.2.5.1.1.10.10.17|65|3377639315 +1.3.6.1.4.1.232.3.2.5.1.1.10.11.4|65|479612 +1.3.6.1.4.1.232.3.2.5.1.1.10.12.20|65|2364763386 +1.3.6.1.4.1.232.3.2.5.1.1.10.18.22|65|1540422714 +1.3.6.1.4.1.232.3.2.5.1.1.10.23.2|65|3133475512 +1.3.6.1.4.1.232.3.2.5.1.1.11.0.2|65|1181504081 +1.3.6.1.4.1.232.3.2.5.1.1.11.0.28|65|2491173497 +1.3.6.1.4.1.232.3.2.5.1.1.11.8.31|65|3042764446 +1.3.6.1.4.1.232.3.2.5.1.1.11.9.24|65|121116179 +1.3.6.1.4.1.232.3.2.5.1.1.11.9.28|65|2585114004 +1.3.6.1.4.1.232.3.2.5.1.1.11.10.17|65|715864194 +1.3.6.1.4.1.232.3.2.5.1.1.11.11.4|65|218650245 +1.3.6.1.4.1.232.3.2.5.1.1.11.12.20|65|598167615 +1.3.6.1.4.1.232.3.2.5.1.1.11.18.22|65|1149109305 +1.3.6.1.4.1.232.3.2.5.1.1.11.23.2|65|75304400 +1.3.6.1.4.1.232.3.2.5.1.1.12.0.2|65|221444980 +1.3.6.1.4.1.232.3.2.5.1.1.12.0.28|65|1337358939 +1.3.6.1.4.1.232.3.2.5.1.1.12.8.31|65|2463188951 +1.3.6.1.4.1.232.3.2.5.1.1.12.9.24|65|2136256124 +1.3.6.1.4.1.232.3.2.5.1.1.12.9.28|65|598517409 +1.3.6.1.4.1.232.3.2.5.1.1.12.10.17|65|2109086161 +1.3.6.1.4.1.232.3.2.5.1.1.12.11.4|65|2106962369 +1.3.6.1.4.1.232.3.2.5.1.1.12.12.20|65|17908343 +1.3.6.1.4.1.232.3.2.5.1.1.12.18.22|65|3202247013 +1.3.6.1.4.1.232.3.2.5.1.1.12.23.2|65|1937432163 +1.3.6.1.4.1.232.3.2.5.1.1.13.0.2|65|1734902147 +1.3.6.1.4.1.232.3.2.5.1.1.13.0.28|65|2411164755 +1.3.6.1.4.1.232.3.2.5.1.1.13.8.31|65|1781992790 +1.3.6.1.4.1.232.3.2.5.1.1.13.9.24|65|1981586934 +1.3.6.1.4.1.232.3.2.5.1.1.13.9.28|65|2050290019 +1.3.6.1.4.1.232.3.2.5.1.1.13.10.17|65|54796801 +1.3.6.1.4.1.232.3.2.5.1.1.13.11.4|65|2725543544 +1.3.6.1.4.1.232.3.2.5.1.1.13.12.20|65|3858302419 +1.3.6.1.4.1.232.3.2.5.1.1.13.18.22|65|2732286636 +1.3.6.1.4.1.232.3.2.5.1.1.13.23.2|65|2945232736 +1.3.6.1.4.1.232.3.2.5.1.1.14.0.2|65|2713126212 +1.3.6.1.4.1.232.3.2.5.1.1.14.0.28|65|4022715091 +1.3.6.1.4.1.232.3.2.5.1.1.14.8.31|65|198579111 +1.3.6.1.4.1.232.3.2.5.1.1.14.9.24|65|3580970404 +1.3.6.1.4.1.232.3.2.5.1.1.14.9.28|65|2999485097 +1.3.6.1.4.1.232.3.2.5.1.1.14.10.17|65|2324402321 +1.3.6.1.4.1.232.3.2.5.1.1.14.11.4|65|2167827525 +1.3.6.1.4.1.232.3.2.5.1.1.14.12.20|65|1503274929 +1.3.6.1.4.1.232.3.2.5.1.1.14.18.22|65|26779464 +1.3.6.1.4.1.232.3.2.5.1.1.14.23.2|65|1752319260 +1.3.6.1.4.1.232.3.2.5.1.1.15.0.2|65|1062892646 +1.3.6.1.4.1.232.3.2.5.1.1.15.0.28|65|2137439866 +1.3.6.1.4.1.232.3.2.5.1.1.15.8.31|65|213350178 +1.3.6.1.4.1.232.3.2.5.1.1.15.9.24|65|4098083155 +1.3.6.1.4.1.232.3.2.5.1.1.15.9.28|65|985304361 +1.3.6.1.4.1.232.3.2.5.1.1.15.10.17|65|3136387282 +1.3.6.1.4.1.232.3.2.5.1.1.15.11.4|65|1635061208 +1.3.6.1.4.1.232.3.2.5.1.1.15.12.20|65|3105090698 +1.3.6.1.4.1.232.3.2.5.1.1.15.18.22|65|3840894212 +1.3.6.1.4.1.232.3.2.5.1.1.15.23.2|65|3123363785 +1.3.6.1.4.1.232.3.2.5.1.1.16.0.2|65|2747324891 +1.3.6.1.4.1.232.3.2.5.1.1.16.0.28|65|3044303644 +1.3.6.1.4.1.232.3.2.5.1.1.16.8.31|65|3215286354 +1.3.6.1.4.1.232.3.2.5.1.1.16.9.24|65|329453703 +1.3.6.1.4.1.232.3.2.5.1.1.16.9.28|65|355147129 +1.3.6.1.4.1.232.3.2.5.1.1.16.10.17|65|3578386746 +1.3.6.1.4.1.232.3.2.5.1.1.16.11.4|65|1151157210 +1.3.6.1.4.1.232.3.2.5.1.1.16.12.20|65|2541753754 +1.3.6.1.4.1.232.3.2.5.1.1.16.18.22|65|3280239987 +1.3.6.1.4.1.232.3.2.5.1.1.16.23.2|65|171855281 +1.3.6.1.4.1.232.3.2.5.1.1.17.0.2|65|881428009 +1.3.6.1.4.1.232.3.2.5.1.1.17.0.28|65|2765906854 +1.3.6.1.4.1.232.3.2.5.1.1.17.8.31|65|2123221895 +1.3.6.1.4.1.232.3.2.5.1.1.17.9.24|65|3245302703 +1.3.6.1.4.1.232.3.2.5.1.1.17.9.28|65|1306227086 +1.3.6.1.4.1.232.3.2.5.1.1.17.10.17|65|3453715456 +1.3.6.1.4.1.232.3.2.5.1.1.17.11.4|65|214914874 +1.3.6.1.4.1.232.3.2.5.1.1.17.12.20|65|1195947737 +1.3.6.1.4.1.232.3.2.5.1.1.17.18.22|65|1182048622 +1.3.6.1.4.1.232.3.2.5.1.1.17.23.2|65|523297749 +1.3.6.1.4.1.232.3.2.5.1.1.18.0.2|65|1332352920 +1.3.6.1.4.1.232.3.2.5.1.1.18.0.28|65|2533263787 +1.3.6.1.4.1.232.3.2.5.1.1.18.8.31|65|1720285197 +1.3.6.1.4.1.232.3.2.5.1.1.18.9.24|65|4245380544 +1.3.6.1.4.1.232.3.2.5.1.1.18.9.28|65|1910909181 +1.3.6.1.4.1.232.3.2.5.1.1.18.10.17|65|2245241934 +1.3.6.1.4.1.232.3.2.5.1.1.18.11.4|65|3205736251 +1.3.6.1.4.1.232.3.2.5.1.1.18.12.20|65|803739619 +1.3.6.1.4.1.232.3.2.5.1.1.18.18.22|65|1158056501 +1.3.6.1.4.1.232.3.2.5.1.1.18.23.2|65|916346018 +1.3.6.1.4.1.232.3.2.5.1.1.19.0.2|65|2610456196 +1.3.6.1.4.1.232.3.2.5.1.1.19.0.28|65|40996530 +1.3.6.1.4.1.232.3.2.5.1.1.19.8.31|65|2048619498 +1.3.6.1.4.1.232.3.2.5.1.1.19.9.24|65|1201236747 +1.3.6.1.4.1.232.3.2.5.1.1.19.9.28|65|2887398693 +1.3.6.1.4.1.232.3.2.5.1.1.19.10.17|65|2142351834 +1.3.6.1.4.1.232.3.2.5.1.1.19.11.4|65|4024458378 +1.3.6.1.4.1.232.3.2.5.1.1.19.12.20|65|566543450 +1.3.6.1.4.1.232.3.2.5.1.1.19.18.22|65|3519743513 +1.3.6.1.4.1.232.3.2.5.1.1.19.23.2|65|3459523029 +1.3.6.1.4.1.232.3.2.5.1.1.20.0.2|65|43264877 +1.3.6.1.4.1.232.3.2.5.1.1.20.0.28|65|3981252740 +1.3.6.1.4.1.232.3.2.5.1.1.20.8.31|65|2390762949 +1.3.6.1.4.1.232.3.2.5.1.1.20.9.24|65|3181479601 +1.3.6.1.4.1.232.3.2.5.1.1.20.9.28|65|3311503997 +1.3.6.1.4.1.232.3.2.5.1.1.20.10.17|65|2897038505 +1.3.6.1.4.1.232.3.2.5.1.1.20.11.4|65|165941602 +1.3.6.1.4.1.232.3.2.5.1.1.20.12.20|65|953987731 +1.3.6.1.4.1.232.3.2.5.1.1.20.18.22|65|1795341671 +1.3.6.1.4.1.232.3.2.5.1.1.20.23.2|65|2277575523 +1.3.6.1.4.1.232.3.2.5.1.1.21.0.2|65|1316077395 +1.3.6.1.4.1.232.3.2.5.1.1.21.0.28|65|3677820263 +1.3.6.1.4.1.232.3.2.5.1.1.21.8.31|65|2612770528 +1.3.6.1.4.1.232.3.2.5.1.1.21.9.24|65|1027709744 +1.3.6.1.4.1.232.3.2.5.1.1.21.9.28|65|3051589898 +1.3.6.1.4.1.232.3.2.5.1.1.21.10.17|65|2370106598 +1.3.6.1.4.1.232.3.2.5.1.1.21.11.4|65|671178955 +1.3.6.1.4.1.232.3.2.5.1.1.21.12.20|65|1481115055 +1.3.6.1.4.1.232.3.2.5.1.1.21.18.22|65|908153265 +1.3.6.1.4.1.232.3.2.5.1.1.21.23.2|65|2033546701 +1.3.6.1.4.1.232.3.2.5.1.1.22.0.2|2|23 +1.3.6.1.4.1.232.3.2.5.1.1.22.0.28|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.22.8.31|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.22.9.24|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.22.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.22.10.17|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.22.11.4|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.22.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.22.18.22|2|18 +1.3.6.1.4.1.232.3.2.5.1.1.22.23.2|2|24 +1.3.6.1.4.1.232.3.2.5.1.1.23.0.2|66|2272833932 +1.3.6.1.4.1.232.3.2.5.1.1.23.0.28|66|238315886 +1.3.6.1.4.1.232.3.2.5.1.1.23.8.31|66|2332345108 +1.3.6.1.4.1.232.3.2.5.1.1.23.9.24|66|1722467098 +1.3.6.1.4.1.232.3.2.5.1.1.23.9.28|66|3365552990 +1.3.6.1.4.1.232.3.2.5.1.1.23.10.17|66|814295671 +1.3.6.1.4.1.232.3.2.5.1.1.23.11.4|66|2798738056 +1.3.6.1.4.1.232.3.2.5.1.1.23.12.20|66|3016608692 +1.3.6.1.4.1.232.3.2.5.1.1.23.18.22|66|2609823405 +1.3.6.1.4.1.232.3.2.5.1.1.23.23.2|66|2243357455 +1.3.6.1.4.1.232.3.2.5.1.1.24.0.2|66|1195544543 +1.3.6.1.4.1.232.3.2.5.1.1.24.0.28|66|1262729680 +1.3.6.1.4.1.232.3.2.5.1.1.24.8.31|66|1186252601 +1.3.6.1.4.1.232.3.2.5.1.1.24.9.24|66|1166010901 +1.3.6.1.4.1.232.3.2.5.1.1.24.9.28|66|2981821918 +1.3.6.1.4.1.232.3.2.5.1.1.24.10.17|66|1339371079 +1.3.6.1.4.1.232.3.2.5.1.1.24.11.4|66|1286022879 +1.3.6.1.4.1.232.3.2.5.1.1.24.12.20|66|3351053968 +1.3.6.1.4.1.232.3.2.5.1.1.24.18.22|66|2312438865 +1.3.6.1.4.1.232.3.2.5.1.1.24.23.2|66|4073921079 +1.3.6.1.4.1.232.3.2.5.1.1.25.0.2|66|1571443607 +1.3.6.1.4.1.232.3.2.5.1.1.25.0.28|66|3747927012 +1.3.6.1.4.1.232.3.2.5.1.1.25.8.31|66|3027271760 +1.3.6.1.4.1.232.3.2.5.1.1.25.9.24|66|3819076816 +1.3.6.1.4.1.232.3.2.5.1.1.25.9.28|66|2709190369 +1.3.6.1.4.1.232.3.2.5.1.1.25.10.17|66|3112461002 +1.3.6.1.4.1.232.3.2.5.1.1.25.11.4|66|2804238793 +1.3.6.1.4.1.232.3.2.5.1.1.25.12.20|66|2746010765 +1.3.6.1.4.1.232.3.2.5.1.1.25.18.22|66|1131305182 +1.3.6.1.4.1.232.3.2.5.1.1.25.23.2|66|630061036 +1.3.6.1.4.1.232.3.2.5.1.1.26.0.2|65|2089481769 +1.3.6.1.4.1.232.3.2.5.1.1.26.0.28|65|810038908 +1.3.6.1.4.1.232.3.2.5.1.1.26.8.31|65|1068878315 +1.3.6.1.4.1.232.3.2.5.1.1.26.9.24|65|103961563 +1.3.6.1.4.1.232.3.2.5.1.1.26.9.28|65|2013639362 +1.3.6.1.4.1.232.3.2.5.1.1.26.10.17|65|2951245451 +1.3.6.1.4.1.232.3.2.5.1.1.26.11.4|65|186230100 +1.3.6.1.4.1.232.3.2.5.1.1.26.12.20|65|4182707117 +1.3.6.1.4.1.232.3.2.5.1.1.26.18.22|65|3028338343 +1.3.6.1.4.1.232.3.2.5.1.1.26.23.2|65|168329345 +1.3.6.1.4.1.232.3.2.5.1.1.27.0.2|65|374054158 +1.3.6.1.4.1.232.3.2.5.1.1.27.0.28|65|2567904399 +1.3.6.1.4.1.232.3.2.5.1.1.27.8.31|65|522893109 +1.3.6.1.4.1.232.3.2.5.1.1.27.9.24|65|119532592 +1.3.6.1.4.1.232.3.2.5.1.1.27.9.28|65|2471496068 +1.3.6.1.4.1.232.3.2.5.1.1.27.10.17|65|2594363310 +1.3.6.1.4.1.232.3.2.5.1.1.27.11.4|65|3944959901 +1.3.6.1.4.1.232.3.2.5.1.1.27.12.20|65|4164483098 +1.3.6.1.4.1.232.3.2.5.1.1.27.18.22|65|2883751910 +1.3.6.1.4.1.232.3.2.5.1.1.27.23.2|65|2206974357 +1.3.6.1.4.1.232.3.2.5.1.1.28.0.2|65|3925445605 +1.3.6.1.4.1.232.3.2.5.1.1.28.0.28|65|1713645649 +1.3.6.1.4.1.232.3.2.5.1.1.28.8.31|65|559394300 +1.3.6.1.4.1.232.3.2.5.1.1.28.9.24|65|3885486446 +1.3.6.1.4.1.232.3.2.5.1.1.28.9.28|65|4210915605 +1.3.6.1.4.1.232.3.2.5.1.1.28.10.17|65|220092674 +1.3.6.1.4.1.232.3.2.5.1.1.28.11.4|65|3868626828 +1.3.6.1.4.1.232.3.2.5.1.1.28.12.20|65|3239804722 +1.3.6.1.4.1.232.3.2.5.1.1.28.18.22|65|2585992683 +1.3.6.1.4.1.232.3.2.5.1.1.28.23.2|65|4160128227 +1.3.6.1.4.1.232.3.2.5.1.1.29.0.2|65|3584995123 +1.3.6.1.4.1.232.3.2.5.1.1.29.0.28|65|3107079286 +1.3.6.1.4.1.232.3.2.5.1.1.29.8.31|65|2508263122 +1.3.6.1.4.1.232.3.2.5.1.1.29.9.24|65|3981942807 +1.3.6.1.4.1.232.3.2.5.1.1.29.9.28|65|3550107921 +1.3.6.1.4.1.232.3.2.5.1.1.29.10.17|65|176899773 +1.3.6.1.4.1.232.3.2.5.1.1.29.11.4|65|1648399595 +1.3.6.1.4.1.232.3.2.5.1.1.29.12.20|65|3297067055 +1.3.6.1.4.1.232.3.2.5.1.1.29.18.22|65|3445404027 +1.3.6.1.4.1.232.3.2.5.1.1.29.23.2|65|2016773999 +1.3.6.1.4.1.232.3.2.5.1.1.30.0.2|65|2989537942 +1.3.6.1.4.1.232.3.2.5.1.1.30.0.28|65|3934222433 +1.3.6.1.4.1.232.3.2.5.1.1.30.8.31|65|2477940641 +1.3.6.1.4.1.232.3.2.5.1.1.30.9.24|65|4200705038 +1.3.6.1.4.1.232.3.2.5.1.1.30.9.28|65|3858528366 +1.3.6.1.4.1.232.3.2.5.1.1.30.10.17|65|3986228859 +1.3.6.1.4.1.232.3.2.5.1.1.30.11.4|65|2662203714 +1.3.6.1.4.1.232.3.2.5.1.1.30.12.20|65|3761701964 +1.3.6.1.4.1.232.3.2.5.1.1.30.18.22|65|1418961513 +1.3.6.1.4.1.232.3.2.5.1.1.30.23.2|65|2750812238 +1.3.6.1.4.1.232.3.2.5.1.1.31.0.2|65|916231198 +1.3.6.1.4.1.232.3.2.5.1.1.31.0.28|65|2146594321 +1.3.6.1.4.1.232.3.2.5.1.1.31.8.31|65|995962026 +1.3.6.1.4.1.232.3.2.5.1.1.31.9.24|65|3587479373 +1.3.6.1.4.1.232.3.2.5.1.1.31.9.28|65|4232069374 +1.3.6.1.4.1.232.3.2.5.1.1.31.10.17|65|2353390047 +1.3.6.1.4.1.232.3.2.5.1.1.31.11.4|65|3388648852 +1.3.6.1.4.1.232.3.2.5.1.1.31.12.20|65|3669696917 +1.3.6.1.4.1.232.3.2.5.1.1.31.18.22|65|2817308627 +1.3.6.1.4.1.232.3.2.5.1.1.31.23.2|65|1972361499 +1.3.6.1.4.1.232.3.2.5.1.1.32.0.2|65|296578155 +1.3.6.1.4.1.232.3.2.5.1.1.32.0.28|65|3928100633 +1.3.6.1.4.1.232.3.2.5.1.1.32.8.31|65|2321027611 +1.3.6.1.4.1.232.3.2.5.1.1.32.9.24|65|2503792394 +1.3.6.1.4.1.232.3.2.5.1.1.32.9.28|65|3554487951 +1.3.6.1.4.1.232.3.2.5.1.1.32.10.17|65|1128696502 +1.3.6.1.4.1.232.3.2.5.1.1.32.11.4|65|1115663679 +1.3.6.1.4.1.232.3.2.5.1.1.32.12.20|65|1925210987 +1.3.6.1.4.1.232.3.2.5.1.1.32.18.22|65|2145808767 +1.3.6.1.4.1.232.3.2.5.1.1.32.23.2|65|723298107 +1.3.6.1.4.1.232.3.2.5.1.1.33.0.2|65|4232763688 +1.3.6.1.4.1.232.3.2.5.1.1.33.0.28|65|2515648724 +1.3.6.1.4.1.232.3.2.5.1.1.33.8.31|65|1905715607 +1.3.6.1.4.1.232.3.2.5.1.1.33.9.24|65|1573221775 +1.3.6.1.4.1.232.3.2.5.1.1.33.9.28|65|2178293335 +1.3.6.1.4.1.232.3.2.5.1.1.33.10.17|65|1373042557 +1.3.6.1.4.1.232.3.2.5.1.1.33.11.4|65|324493681 +1.3.6.1.4.1.232.3.2.5.1.1.33.12.20|65|863366144 +1.3.6.1.4.1.232.3.2.5.1.1.33.18.22|65|2834520456 +1.3.6.1.4.1.232.3.2.5.1.1.33.23.2|65|660770811 +1.3.6.1.4.1.232.3.2.5.1.1.34.0.2|65|895977516 +1.3.6.1.4.1.232.3.2.5.1.1.34.0.28|65|3912491867 +1.3.6.1.4.1.232.3.2.5.1.1.34.8.31|65|2935708564 +1.3.6.1.4.1.232.3.2.5.1.1.34.9.24|65|613479510 +1.3.6.1.4.1.232.3.2.5.1.1.34.9.28|65|353982695 +1.3.6.1.4.1.232.3.2.5.1.1.34.10.17|65|1719422533 +1.3.6.1.4.1.232.3.2.5.1.1.34.11.4|65|2753507707 +1.3.6.1.4.1.232.3.2.5.1.1.34.12.20|65|2531058768 +1.3.6.1.4.1.232.3.2.5.1.1.34.18.22|65|1738463797 +1.3.6.1.4.1.232.3.2.5.1.1.34.23.2|65|230339965 +1.3.6.1.4.1.232.3.2.5.1.1.35.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.35.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.35.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.11.4|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.35.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.23.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.0.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.11.4|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.12.20|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.23.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.37.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.37.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.37.8.31|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.37.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.37.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.37.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.37.11.4|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.37.12.20|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.37.18.22|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.37.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.38.0.2|65|695149768 +1.3.6.1.4.1.232.3.2.5.1.1.38.0.28|65|3356476138 +1.3.6.1.4.1.232.3.2.5.1.1.38.8.31|65|10938476 +1.3.6.1.4.1.232.3.2.5.1.1.38.9.24|65|3824347234 +1.3.6.1.4.1.232.3.2.5.1.1.38.9.28|65|2299135820 +1.3.6.1.4.1.232.3.2.5.1.1.38.10.17|65|3127782166 +1.3.6.1.4.1.232.3.2.5.1.1.38.11.4|65|650087465 +1.3.6.1.4.1.232.3.2.5.1.1.38.12.20|65|1126275168 +1.3.6.1.4.1.232.3.2.5.1.1.38.18.22|65|292840402 +1.3.6.1.4.1.232.3.2.5.1.1.38.23.2|65|833195757 +1.3.6.1.4.1.232.3.2.5.1.1.39.0.2|65|273708010 +1.3.6.1.4.1.232.3.2.5.1.1.39.0.28|65|2930543340 +1.3.6.1.4.1.232.3.2.5.1.1.39.8.31|65|1360991038 +1.3.6.1.4.1.232.3.2.5.1.1.39.9.24|65|360503215 +1.3.6.1.4.1.232.3.2.5.1.1.39.9.28|65|4180016804 +1.3.6.1.4.1.232.3.2.5.1.1.39.10.17|65|3091053534 +1.3.6.1.4.1.232.3.2.5.1.1.39.11.4|65|3927959624 +1.3.6.1.4.1.232.3.2.5.1.1.39.12.20|65|3019266957 +1.3.6.1.4.1.232.3.2.5.1.1.39.18.22|65|1783253281 +1.3.6.1.4.1.232.3.2.5.1.1.39.23.2|65|3451792479 +1.3.6.1.4.1.232.3.2.5.1.1.40.0.2|65|2074093460 +1.3.6.1.4.1.232.3.2.5.1.1.40.0.28|65|1245631859 +1.3.6.1.4.1.232.3.2.5.1.1.40.8.31|65|2278547273 +1.3.6.1.4.1.232.3.2.5.1.1.40.9.24|65|262900694 +1.3.6.1.4.1.232.3.2.5.1.1.40.9.28|65|3929997821 +1.3.6.1.4.1.232.3.2.5.1.1.40.10.17|65|3399525625 +1.3.6.1.4.1.232.3.2.5.1.1.40.11.4|65|3375585056 +1.3.6.1.4.1.232.3.2.5.1.1.40.12.20|65|2460123296 +1.3.6.1.4.1.232.3.2.5.1.1.40.18.22|65|1661289605 +1.3.6.1.4.1.232.3.2.5.1.1.40.23.2|65|4099258745 +1.3.6.1.4.1.232.3.2.5.1.1.41.0.2|65|67819348 +1.3.6.1.4.1.232.3.2.5.1.1.41.0.28|65|4025257665 +1.3.6.1.4.1.232.3.2.5.1.1.41.8.31|65|778931221 +1.3.6.1.4.1.232.3.2.5.1.1.41.9.24|65|3973425930 +1.3.6.1.4.1.232.3.2.5.1.1.41.9.28|65|683938656 +1.3.6.1.4.1.232.3.2.5.1.1.41.10.17|65|3311880823 +1.3.6.1.4.1.232.3.2.5.1.1.41.11.4|65|3358020460 +1.3.6.1.4.1.232.3.2.5.1.1.41.12.20|65|1507642352 +1.3.6.1.4.1.232.3.2.5.1.1.41.18.22|65|3032576586 +1.3.6.1.4.1.232.3.2.5.1.1.41.23.2|65|1081195094 +1.3.6.1.4.1.232.3.2.5.1.1.42.0.2|65|2958829949 +1.3.6.1.4.1.232.3.2.5.1.1.42.0.28|65|3881154002 +1.3.6.1.4.1.232.3.2.5.1.1.42.8.31|65|868131005 +1.3.6.1.4.1.232.3.2.5.1.1.42.9.24|65|3507732127 +1.3.6.1.4.1.232.3.2.5.1.1.42.9.28|65|2408249280 +1.3.6.1.4.1.232.3.2.5.1.1.42.10.17|65|3661936369 +1.3.6.1.4.1.232.3.2.5.1.1.42.11.4|65|83913712 +1.3.6.1.4.1.232.3.2.5.1.1.42.12.20|65|1692536119 +1.3.6.1.4.1.232.3.2.5.1.1.42.18.22|65|83128752 +1.3.6.1.4.1.232.3.2.5.1.1.42.23.2|65|271214931 +1.3.6.1.4.1.232.3.2.5.1.1.43.0.2|65|3379400009 +1.3.6.1.4.1.232.3.2.5.1.1.43.0.28|65|2113936975 +1.3.6.1.4.1.232.3.2.5.1.1.43.8.31|65|4269595898 +1.3.6.1.4.1.232.3.2.5.1.1.43.9.24|65|2636068769 +1.3.6.1.4.1.232.3.2.5.1.1.43.9.28|65|3509528056 +1.3.6.1.4.1.232.3.2.5.1.1.43.10.17|65|2019075204 +1.3.6.1.4.1.232.3.2.5.1.1.43.11.4|65|3241766477 +1.3.6.1.4.1.232.3.2.5.1.1.43.12.20|65|1716200504 +1.3.6.1.4.1.232.3.2.5.1.1.43.18.22|65|1957275437 +1.3.6.1.4.1.232.3.2.5.1.1.43.23.2|65|2456872217 +1.3.6.1.4.1.232.3.2.5.1.1.44.0.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.44.0.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.44.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.44.9.24|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.44.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.44.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.44.11.4|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.44.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.44.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.44.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.45.0.2|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.45.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.45.8.31|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.45.9.24|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.45.9.28|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.45.10.17|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.45.11.4|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.45.12.20|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.45.18.22|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.45.23.2|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.46.0.2|65|3561272272 +1.3.6.1.4.1.232.3.2.5.1.1.46.0.28|65|4174662596 +1.3.6.1.4.1.232.3.2.5.1.1.46.8.31|65|689811778 +1.3.6.1.4.1.232.3.2.5.1.1.46.9.24|65|1530456354 +1.3.6.1.4.1.232.3.2.5.1.1.46.9.28|65|20151350 +1.3.6.1.4.1.232.3.2.5.1.1.46.10.17|65|1335195536 +1.3.6.1.4.1.232.3.2.5.1.1.46.11.4|65|3704812105 +1.3.6.1.4.1.232.3.2.5.1.1.46.12.20|65|1550626120 +1.3.6.1.4.1.232.3.2.5.1.1.46.18.22|65|3138673084 +1.3.6.1.4.1.232.3.2.5.1.1.46.23.2|65|655955111 +1.3.6.1.4.1.232.3.2.5.1.1.47.0.2|65|1839069213 +1.3.6.1.4.1.232.3.2.5.1.1.47.0.28|65|174038400 +1.3.6.1.4.1.232.3.2.5.1.1.47.8.31|65|3244003037 +1.3.6.1.4.1.232.3.2.5.1.1.47.9.24|65|1347107392 +1.3.6.1.4.1.232.3.2.5.1.1.47.9.28|65|1186660290 +1.3.6.1.4.1.232.3.2.5.1.1.47.10.17|65|1395461969 +1.3.6.1.4.1.232.3.2.5.1.1.47.11.4|65|4027008497 +1.3.6.1.4.1.232.3.2.5.1.1.47.12.20|65|1547161558 +1.3.6.1.4.1.232.3.2.5.1.1.47.18.22|65|1118166193 +1.3.6.1.4.1.232.3.2.5.1.1.47.23.2|65|4220984397 +1.3.6.1.4.1.232.3.2.5.1.1.48.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.48.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.48.8.31|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.48.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.48.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.48.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.48.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.48.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.48.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.48.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.49.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.49.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.49.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.49.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.49.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.49.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.49.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.49.12.20|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.49.18.22|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.49.23.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.50.0.2|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.50.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.50.8.31|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.50.9.24|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.50.9.28|2|10 +1.3.6.1.4.1.232.3.2.5.1.1.50.10.17|2|17 +1.3.6.1.4.1.232.3.2.5.1.1.50.11.4|2|17 +1.3.6.1.4.1.232.3.2.5.1.1.50.12.20|2|22 +1.3.6.1.4.1.232.3.2.5.1.1.50.18.22|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.50.23.2|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.51.0.2|4x|7a6f6d6269657320627574207468656972206b657074 +1.3.6.1.4.1.232.3.2.5.1.1.51.0.28|4x|627574207468656972206f78656e207468656972 +1.3.6.1.4.1.232.3.2.5.1.1.51.8.31|4x|4a61646564206f78656e206163746564 +1.3.6.1.4.1.232.3.2.5.1.1.51.9.24|4|but +1.3.6.1.4.1.232.3.2.5.1.1.51.9.28|4x|7a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.232.3.2.5.1.1.51.10.17|4x|627574206b657074 +1.3.6.1.4.1.232.3.2.5.1.1.51.11.4|4x|6f78656e204a61646564206b65707420627574206b657074207a6f6d62696573 +1.3.6.1.4.1.232.3.2.5.1.1.51.12.20|4x|746865697220616374656420717561696e746c7920717561696e746c79206163746564 +1.3.6.1.4.1.232.3.2.5.1.1.51.18.22|4|but +1.3.6.1.4.1.232.3.2.5.1.1.51.23.2|4x|627574206f78656e204a6164656420666f7277617264204a61646564 +1.3.6.1.4.1.232.3.2.5.1.1.52.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.52.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.52.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.52.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.52.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.52.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.52.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.52.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.52.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.52.23.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.53.0.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.53.0.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.53.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.53.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.53.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.53.10.17|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.53.11.4|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.53.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.53.18.22|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.53.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.54.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.54.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.54.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.54.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.54.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.54.10.17|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.54.11.4|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.54.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.54.18.22|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.54.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.55.0.2|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.55.0.28|2|26 +1.3.6.1.4.1.232.3.2.5.1.1.55.8.31|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.55.9.24|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.55.9.28|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.55.10.17|2|13 +1.3.6.1.4.1.232.3.2.5.1.1.55.11.4|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.55.12.20|2|24 +1.3.6.1.4.1.232.3.2.5.1.1.55.18.22|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.55.23.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.56.0.2|65|2949968298 +1.3.6.1.4.1.232.3.2.5.1.1.56.0.28|65|2491218975 +1.3.6.1.4.1.232.3.2.5.1.1.56.8.31|65|233525739 +1.3.6.1.4.1.232.3.2.5.1.1.56.9.24|65|336628689 +1.3.6.1.4.1.232.3.2.5.1.1.56.9.28|65|2014596717 +1.3.6.1.4.1.232.3.2.5.1.1.56.10.17|65|4222268319 +1.3.6.1.4.1.232.3.2.5.1.1.56.11.4|65|2071508675 +1.3.6.1.4.1.232.3.2.5.1.1.56.12.20|65|1261145831 +1.3.6.1.4.1.232.3.2.5.1.1.56.18.22|65|1296062476 +1.3.6.1.4.1.232.3.2.5.1.1.56.23.2|65|1252664383 +1.3.6.1.4.1.232.3.2.5.1.1.57.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.57.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.57.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.57.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.57.9.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.57.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.57.11.4|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.57.12.20|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.57.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.57.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.58.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.58.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.58.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.58.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.58.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.58.10.17|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.58.11.4|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.58.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.58.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.58.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.59.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.59.0.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.59.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.59.9.24|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.59.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.59.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.59.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.59.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.59.18.22|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.59.23.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.60.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.60.0.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.60.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.60.9.24|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.60.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.60.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.60.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.60.12.20|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.60.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.60.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.61.0.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.61.0.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.61.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.61.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.61.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.61.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.61.11.4|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.61.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.61.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.61.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.62.0.2|4|but +1.3.6.1.4.1.232.3.2.5.1.1.62.0.28|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.62.8.31|4|but +1.3.6.1.4.1.232.3.2.5.1.1.62.9.24|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.62.9.28|4|but +1.3.6.1.4.1.232.3.2.5.1.1.62.10.17|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.62.11.4|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.62.12.20|4|kept +1.3.6.1.4.1.232.3.2.5.1.1.62.18.22|4|but +1.3.6.1.4.1.232.3.2.5.1.1.62.23.2|4|kept +1.3.6.1.4.1.232.3.2.5.1.1.63.0.2|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.63.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.63.8.31|2|26 +1.3.6.1.4.1.232.3.2.5.1.1.63.9.24|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.63.9.28|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.63.10.17|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.63.11.4|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.63.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.63.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.63.23.2|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.64.0.2|4x|627574207468656972206b657074 +1.3.6.1.4.1.232.3.2.5.1.1.64.0.28|4x|64726976696e672064726976696e67206f78656e204a61646564 +1.3.6.1.4.1.232.3.2.5.1.1.64.8.31|4x|6163746564204a61646564207a6f6d62696573207468656972206f78656e206b65707420666f7277617264 +1.3.6.1.4.1.232.3.2.5.1.1.64.9.24|4x|6163746564204a61646564 +1.3.6.1.4.1.232.3.2.5.1.1.64.9.28|4|acted +1.3.6.1.4.1.232.3.2.5.1.1.64.10.17|4x|666f72776172642062757420717561696e746c7920666f7277617264207a6f6d6269657320666f7277617264206b657074207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.232.3.2.5.1.1.64.11.4|4x|64726976696e67206275742074686569722064726976696e67204a61646564207a6f6d62696573206f78656e2062757420627574 +1.3.6.1.4.1.232.3.2.5.1.1.64.12.20|4x|746865697220666f7277617264204a6164656420717561696e746c79 +1.3.6.1.4.1.232.3.2.5.1.1.64.18.22|4x|746865697220717561696e746c792064726976696e672064726976696e67206b657074 +1.3.6.1.4.1.232.3.2.5.1.1.64.23.2|4x|7a6f6d62696573207a6f6d626965732064726976696e6720666f7277617264 +1.3.6.1.4.1.232.3.2.5.1.1.65.0.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.65.0.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.65.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.65.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.65.9.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.65.10.17|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.65.11.4|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.65.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.65.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.65.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.66.0.2|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.66.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.66.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.66.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.66.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.66.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.66.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.66.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.66.18.22|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.66.23.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.67.0.2|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.67.0.28|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.67.8.31|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.67.9.24|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.67.9.28|2|28 +1.3.6.1.4.1.232.3.2.5.1.1.67.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.67.11.4|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.67.12.20|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.67.18.22|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.67.23.2|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.68.0.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.68.0.28|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.68.8.31|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.68.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.68.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.68.10.17|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.68.11.4|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.68.12.20|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.68.18.22|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.68.23.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.69.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.69.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.8.31|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.69.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.69.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.69.18.22|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.70.0.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.70.0.28|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.70.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.70.9.24|2|22 +1.3.6.1.4.1.232.3.2.5.1.1.70.9.28|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.70.10.17|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.70.11.4|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.70.12.20|2|30 +1.3.6.1.4.1.232.3.2.5.1.1.70.18.22|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.70.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.71.0.2|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.71.0.28|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.71.8.31|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.71.9.24|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.71.9.28|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.71.10.17|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.71.11.4|2|23 +1.3.6.1.4.1.232.3.2.5.1.1.71.12.20|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.71.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.71.23.2|2|10 +1.3.6.1.4.1.232.3.2.5.1.1.72.0.2|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.72.0.28|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.72.8.31|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.72.9.24|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.72.9.28|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.72.10.17|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.72.11.4|2|29 +1.3.6.1.4.1.232.3.2.5.1.1.72.12.20|2|17 +1.3.6.1.4.1.232.3.2.5.1.1.72.18.22|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.72.23.2|2|23 +1.3.6.1.4.1.232.3.2.5.1.1.73.0.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.73.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.73.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.9.24|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.73.11.4|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.18.22|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.73.23.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.74.0.2|65|2908799926 +1.3.6.1.4.1.232.3.2.5.1.1.74.0.28|65|2490380324 +1.3.6.1.4.1.232.3.2.5.1.1.74.8.31|65|2597785093 +1.3.6.1.4.1.232.3.2.5.1.1.74.9.24|65|4254200557 +1.3.6.1.4.1.232.3.2.5.1.1.74.9.28|65|696408854 +1.3.6.1.4.1.232.3.2.5.1.1.74.10.17|65|165954175 +1.3.6.1.4.1.232.3.2.5.1.1.74.11.4|65|404169227 +1.3.6.1.4.1.232.3.2.5.1.1.74.12.20|65|368625461 +1.3.6.1.4.1.232.3.2.5.1.1.74.18.22|65|2141670018 +1.3.6.1.4.1.232.3.2.5.1.1.74.23.2|65|3382161332 +1.3.6.1.4.1.232.3.2.5.1.1.75.0.2|66|2380887083 +1.3.6.1.4.1.232.3.2.5.1.1.75.0.28|66|1128640721 +1.3.6.1.4.1.232.3.2.5.1.1.75.8.31|66|3386410156 +1.3.6.1.4.1.232.3.2.5.1.1.75.9.24|66|46631455 +1.3.6.1.4.1.232.3.2.5.1.1.75.9.28|66|1683028466 +1.3.6.1.4.1.232.3.2.5.1.1.75.10.17|66|2663962912 +1.3.6.1.4.1.232.3.2.5.1.1.75.11.4|66|1693199007 +1.3.6.1.4.1.232.3.2.5.1.1.75.12.20|66|3786879383 +1.3.6.1.4.1.232.3.2.5.1.1.75.18.22|66|873327295 +1.3.6.1.4.1.232.3.2.5.1.1.75.23.2|66|1558173398 +1.3.6.1.4.1.232.3.2.5.1.1.76.0.2|65|2103006361 +1.3.6.1.4.1.232.3.2.5.1.1.76.0.28|65|1426172609 +1.3.6.1.4.1.232.3.2.5.1.1.76.8.31|65|991215997 +1.3.6.1.4.1.232.3.2.5.1.1.76.9.24|65|2962747034 +1.3.6.1.4.1.232.3.2.5.1.1.76.9.28|65|2527741665 +1.3.6.1.4.1.232.3.2.5.1.1.76.10.17|65|2054720417 +1.3.6.1.4.1.232.3.2.5.1.1.76.11.4|65|2600139724 +1.3.6.1.4.1.232.3.2.5.1.1.76.12.20|65|999271546 +1.3.6.1.4.1.232.3.2.5.1.1.76.18.22|65|388628255 +1.3.6.1.4.1.232.3.2.5.1.1.76.23.2|65|457008923 +1.3.6.1.4.1.232.3.2.5.1.1.77.0.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.77.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.77.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.77.9.24|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.77.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.77.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.77.11.4|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.77.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.77.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.77.23.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.78.0.2|2|13 +1.3.6.1.4.1.232.3.2.5.1.1.78.0.28|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.78.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.78.9.24|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.78.9.28|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.78.10.17|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.78.11.4|2|24 +1.3.6.1.4.1.232.3.2.5.1.1.78.12.20|2|30 +1.3.6.1.4.1.232.3.2.5.1.1.78.18.22|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.78.23.2|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.79.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.79.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.79.8.31|2|26 +1.3.6.1.4.1.232.3.2.5.1.1.79.9.24|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.79.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.79.10.17|2|13 +1.3.6.1.4.1.232.3.2.5.1.1.79.11.4|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.79.12.20|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.79.18.22|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.79.23.2|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.80.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.9.24|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.80.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.80.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.80.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.80.23.2|2|1 +1.3.6.1.4.1.232.6.2.6.1.0|2|3 +1.3.6.1.4.1.232.6.2.8.1.0|2|4 +1.3.6.1.4.1.232.6.2.9.2.0|2|5 +1.3.6.1.4.1.232.6.2.9.3.1.1.30.3|2|30 +1.3.6.1.4.1.232.6.2.9.3.1.2.30.3|2|3 +1.3.6.1.4.1.232.6.2.9.3.1.3.30.3|2|1 +1.3.6.1.4.1.232.6.2.9.3.1.4.30.3|2|4 +1.3.6.1.4.1.232.6.2.9.3.1.5.30.3|2|3 +1.3.6.1.4.1.232.6.2.9.3.1.6.30.3|2|26 +1.3.6.1.4.1.232.6.2.9.3.1.7.30.3|2|15 +1.3.6.1.4.1.232.6.2.9.3.1.8.30.3|2|24 +1.3.6.1.4.1.232.6.2.14.13.1.1.24|2|24 +1.3.6.1.4.1.232.6.2.14.13.1.2.24|2|12 +1.3.6.1.4.1.232.6.2.14.13.1.3.24|2|3 +1.3.6.1.4.1.232.6.2.14.13.1.4.24|2|2 +1.3.6.1.4.1.232.6.2.14.13.1.5.24|2|5 +1.3.6.1.4.1.232.6.2.14.13.1.6.24|2|15 +1.3.6.1.4.1.232.6.2.14.13.1.7.24|2|9 +1.3.6.1.4.1.232.6.2.14.13.1.8.24|2|9 +1.3.6.1.4.1.232.6.2.14.13.1.9.24|4x|7a6f6d62696573207a6f6d626965732064726976696e67206b657074 +1.3.6.1.4.1.232.6.2.14.13.1.10.24|4x|616374656420717561696e746c792062757420666f7277617264206275742064726976696e67206b657074207a6f6d62696573 +1.3.6.1.4.1.232.6.2.14.13.1.11.24|4x|62757420627574 +1.3.6.1.4.1.232.6.2.14.13.1.12.24|4x|666f7277617264207a6f6d62696573206b657074206b657074204a6164656420627574206f78656e20627574206163746564 +1.3.6.1.4.1.232.6.2.14.13.1.13.24|4x|666f7277617264207a6f6d62696573 +1.3.6.1.4.1.232.6.2.14.13.1.14.24|2|24 +1.3.6.1.4.1.232.6.2.14.13.1.15.24|2|12 +1.3.6.1.4.1.232.6.2.14.13.1.15.25|2|11 +1.3.6.1.4.1.232.6.2.14.13.1.16.24|2|2 +1.3.6.1.4.1.232.6.2.14.13.1.17.24|4x|6b65707420746865697220717561696e746c79206b657074 +1.3.6.1.4.1.232.6.2.14.13.1.18.24|4x|6f78656e204a61646564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.232.6.2.14.13.1.19.24|2|1 +1.3.6.1.4.1.232.6.2.14.13.1.20.24|2|2 +1.3.6.1.4.1.232.6.2.14.13.1.20.25|2|3 +1.3.6.1.4.1.232.11.2.2.1|4|RHEL +1.3.6.1.4.1.232.11.2.2.2|4|3.10.0-862.15.4.el7.ve.x86_64 +1.3.6.1.4.1.232.11.2.3.1.1.1.4|2|4 +1.3.6.1.4.1.232.11.2.3.1.1.1.7|2|7 +1.3.6.1.4.1.232.11.2.3.1.1.1.13|2|13 +1.3.6.1.4.1.232.11.2.3.1.1.1.20|2|20 +1.3.6.1.4.1.232.11.2.3.1.1.1.22|2|22 +1.3.6.1.4.1.232.11.2.3.1.1.1.23|2|23 +1.3.6.1.4.1.232.11.2.3.1.1.1.29|2|29 +1.3.6.1.4.1.232.11.2.3.1.1.2.4|2|9 +1.3.6.1.4.1.232.11.2.3.1.1.2.7|2|30 +1.3.6.1.4.1.232.11.2.3.1.1.2.13|2|15 +1.3.6.1.4.1.232.11.2.3.1.1.2.20|2|27 +1.3.6.1.4.1.232.11.2.3.1.1.2.22|2|6 +1.3.6.1.4.1.232.11.2.3.1.1.2.23|2|21 +1.3.6.1.4.1.232.11.2.3.1.1.2.29|2|17 +1.3.6.1.4.1.232.11.2.3.1.1.3.4|2|17 +1.3.6.1.4.1.232.11.2.3.1.1.3.7|2|1 +1.3.6.1.4.1.232.11.2.3.1.1.3.13|2|15 +1.3.6.1.4.1.232.11.2.3.1.1.3.20|2|3 +1.3.6.1.4.1.232.11.2.3.1.1.3.22|2|1 +1.3.6.1.4.1.232.11.2.3.1.1.3.23|2|30 +1.3.6.1.4.1.232.11.2.3.1.1.3.29|2|16 +1.3.6.1.4.1.232.11.2.3.1.1.4.4|2|6 +1.3.6.1.4.1.232.11.2.3.1.1.4.7|2|11 +1.3.6.1.4.1.232.11.2.3.1.1.4.13|2|5 +1.3.6.1.4.1.232.11.2.3.1.1.4.20|2|1 +1.3.6.1.4.1.232.11.2.3.1.1.4.22|2|10 +1.3.6.1.4.1.232.11.2.3.1.1.4.23|2|29 +1.3.6.1.4.1.232.11.2.3.1.1.4.29|2|19 +1.3.6.1.4.1.232.11.2.3.1.1.5.4|2|28 +1.3.6.1.4.1.232.11.2.3.1.1.5.7|2|19 +1.3.6.1.4.1.232.11.2.3.1.1.5.13|2|4 +1.3.6.1.4.1.232.11.2.3.1.1.5.20|2|25 +1.3.6.1.4.1.232.11.2.3.1.1.5.22|2|27 +1.3.6.1.4.1.232.11.2.3.1.1.5.23|2|21 +1.3.6.1.4.1.232.11.2.3.1.1.5.29|2|5 +1.3.6.1.4.1.232.11.2.3.1.1.6.4|4x|616374656420627574206f78656e204a61646564 +1.3.6.1.4.1.232.11.2.3.1.1.6.7|4x|4a61646564206f78656e +1.3.6.1.4.1.232.11.2.3.1.1.6.13|4x|6275742061637465642061637465642064726976696e67204a61646564 +1.3.6.1.4.1.232.11.2.3.1.1.6.20|4x|7a6f6d6269657320717561696e746c792064726976696e67 +1.3.6.1.4.1.232.11.2.3.1.1.6.22|4x|627574206f78656e207a6f6d626965732064726976696e67206163746564207a6f6d62696573204a61646564207468656972 +1.3.6.1.4.1.232.11.2.3.1.1.6.23|4x|64726976696e67206163746564204a61646564204a61646564207a6f6d62696573207a6f6d6269657320717561696e746c792064726976696e67207a6f6d62696573 +1.3.6.1.4.1.232.11.2.3.1.1.6.29|4|quaintly +1.3.6.1.4.1.232.11.2.4.1.1.1.5|2|5 +1.3.6.1.4.1.232.11.2.4.1.1.1.8|2|8 +1.3.6.1.4.1.232.11.2.4.1.1.1.11|2|11 +1.3.6.1.4.1.232.11.2.4.1.1.1.15|2|15 +1.3.6.1.4.1.232.11.2.4.1.1.1.19|2|19 +1.3.6.1.4.1.232.11.2.4.1.1.1.21|2|21 +1.3.6.1.4.1.232.11.2.4.1.1.1.28|2|28 +1.3.6.1.4.1.232.11.2.4.1.1.1.30|2|30 +1.3.6.1.4.1.232.11.2.4.1.1.2.5|4x|6163746564206275742064726976696e67204a616465642064726976696e67206f78656e2061637465642064726976696e67206b657074 +1.3.6.1.4.1.232.11.2.4.1.1.2.8|4x|666f7277617264206f78656e206b657074206b657074206f78656e +1.3.6.1.4.1.232.11.2.4.1.1.2.11|4x|64726976696e67204a61646564 +1.3.6.1.4.1.232.11.2.4.1.1.2.15|4x|746865697220717561696e746c7920627574206275742064726976696e672064726976696e67204a61646564204a61646564 +1.3.6.1.4.1.232.11.2.4.1.1.2.19|4x|7468656972206f78656e20666f7277617264204a61646564206b65707420717561696e746c792064726976696e67204a61646564 +1.3.6.1.4.1.232.11.2.4.1.1.2.21|4x|74686569722074686569722064726976696e67207a6f6d62696573207468656972207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.232.11.2.4.1.1.2.28|4x|6163746564206163746564206f78656e206f78656e207a6f6d62696573206b657074204a61646564207a6f6d62696573206b657074 +1.3.6.1.4.1.232.11.2.4.1.1.2.30|4x|4a6164656420746865697220666f727761726420746865697220746865697220666f7277617264 +1.3.6.1.4.1.232.11.2.4.1.1.3.5|2|25 +1.3.6.1.4.1.232.11.2.4.1.1.3.8|2|2 +1.3.6.1.4.1.232.11.2.4.1.1.3.11|2|16 +1.3.6.1.4.1.232.11.2.4.1.1.3.15|2|25 +1.3.6.1.4.1.232.11.2.4.1.1.3.19|2|19 +1.3.6.1.4.1.232.11.2.4.1.1.3.21|2|22 +1.3.6.1.4.1.232.11.2.4.1.1.3.28|2|17 +1.3.6.1.4.1.232.11.2.4.1.1.3.30|2|10 +1.3.6.1.4.1.232.11.2.4.1.1.4.5|2|25 +1.3.6.1.4.1.232.11.2.4.1.1.4.8|2|13 +1.3.6.1.4.1.232.11.2.4.1.1.4.11|2|20 +1.3.6.1.4.1.232.11.2.4.1.1.4.15|2|29 +1.3.6.1.4.1.232.11.2.4.1.1.4.19|2|13 +1.3.6.1.4.1.232.11.2.4.1.1.4.21|2|7 +1.3.6.1.4.1.232.11.2.4.1.1.4.28|2|3 +1.3.6.1.4.1.232.11.2.4.1.1.4.30|2|0 +1.3.6.1.4.1.232.11.2.4.1.1.5.5|2|25 +1.3.6.1.4.1.232.11.2.4.1.1.5.8|2|5 +1.3.6.1.4.1.232.11.2.4.1.1.5.11|2|10 +1.3.6.1.4.1.232.11.2.4.1.1.5.15|2|31 +1.3.6.1.4.1.232.11.2.4.1.1.5.19|2|15 +1.3.6.1.4.1.232.11.2.4.1.1.5.21|2|26 +1.3.6.1.4.1.232.11.2.4.1.1.5.28|2|1 +1.3.6.1.4.1.232.11.2.4.1.1.5.30|2|23 +1.3.6.1.4.1.232.11.2.4.1.1.6.5|2|16 +1.3.6.1.4.1.232.11.2.4.1.1.6.8|2|16 +1.3.6.1.4.1.232.11.2.4.1.1.6.11|2|12 +1.3.6.1.4.1.232.11.2.4.1.1.6.15|2|9 +1.3.6.1.4.1.232.11.2.4.1.1.6.19|2|0 +1.3.6.1.4.1.232.11.2.4.1.1.6.21|2|12 +1.3.6.1.4.1.232.11.2.4.1.1.6.28|2|16 +1.3.6.1.4.1.232.11.2.4.1.1.6.30|2|20 +1.3.6.1.4.1.232.11.2.4.1.1.7.5|2|20 +1.3.6.1.4.1.232.11.2.4.1.1.7.8|2|23 +1.3.6.1.4.1.232.11.2.4.1.1.7.11|2|25 +1.3.6.1.4.1.232.11.2.4.1.1.7.15|2|21 +1.3.6.1.4.1.232.11.2.4.1.1.7.19|2|16 +1.3.6.1.4.1.232.11.2.4.1.1.7.21|2|1 +1.3.6.1.4.1.232.11.2.4.1.1.7.28|2|20 +1.3.6.1.4.1.232.11.2.4.1.1.7.30|2|23 +1.3.6.1.4.1.232.11.2.4.1.1.8.5|2|3 +1.3.6.1.4.1.232.11.2.4.1.1.8.8|2|2 +1.3.6.1.4.1.232.11.2.4.1.1.8.11|2|1 +1.3.6.1.4.1.232.11.2.4.1.1.8.15|2|2 +1.3.6.1.4.1.232.11.2.4.1.1.8.19|2|4 +1.3.6.1.4.1.232.11.2.4.1.1.8.21|2|3 +1.3.6.1.4.1.232.11.2.4.1.1.8.28|2|4 +1.3.6.1.4.1.232.11.2.4.1.1.8.30|2|1 +1.3.6.1.4.1.232.11.2.4.2.0|2|4 +1.3.6.1.4.1.232.18.2.3.1.1.4.0|4|mac +1.3.6.1.4.1.232.18.2.3.1.1.13.0|2|5 +1.3.6.1.4.1.232.18.2.3.1.1.14.0|2|3 +1.3.6.1.4.1.232.18.2.3.1.1.39.0|4|adapter +1.3.6.1.4.1.232.18.2.3.1.2.13.0|2|4 +1.3.6.1.4.1.232.18.2.3.1.2.14.0|2|2 diff --git a/test/new-e2e/ndm/snmp/compose/data/idrac.snmprec b/test/new-e2e/ndm/snmp/compose/data/idrac.snmprec new file mode 100644 index 00000000000000..61e337c9ef6465 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/idrac.snmprec @@ -0,0 +1,1207 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.674.10892.2 +1.3.6.1.4.1.343.2.7.2.1.1.0|4|kept +1.3.6.1.4.1.343.2.7.2.1.2.0|4x|7a6f6d6269657320717561696e746c792061637465642064726976696e6720627574 +1.3.6.1.4.1.343.2.7.2.1.3.0|4x|666f727761726420717561696e746c79206f78656e206163746564 +1.3.6.1.4.1.343.2.7.2.1.4.0|4x|62757420666f727761726420627574 +1.3.6.1.4.1.343.2.7.2.1.5.0|4x|64726976696e67206b657074204a61646564 +1.3.6.1.4.1.343.2.7.2.1.6.0|4x|666f7277617264204a61646564207468656972206b657074 +1.3.6.1.4.1.343.2.7.2.1.7.0|2|1 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.1.8|2|8 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.1.18|2|18 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.2.8|4x|65746830 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.2.18|4x|656e31 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.3.8|2|1 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.3.18|2|2 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.4.8|2|1 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.4.18|2|0 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.1.18|4x|666f7277617264207a6f6d62696573207468656972 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.1.22|4x|717561696e746c79204a61646564206f78656e207a6f6d62696573206f78656e2064726976696e67206f78656e +1.3.6.1.4.1.343.2.7.2.2.1.2.1.2.18|4x|4a61646564207a6f6d62696573206f78656e207468656972206b6570742064726976696e67206163746564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.2.22|4x|61637465642064726976696e6720666f7277617264206163746564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.3.18|4x|6b657074206163746564204a61646564204a6164656420746865697220666f7277617264207a6f6d62696573 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.3.22|4x|6f78656e206163746564204a6164656420717561696e746c79206163746564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.4.18|4x|627574206f78656e207468656972206f78656e206b6570742064726976696e672064726976696e6720627574 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.4.22|4x|717561696e746c79206f78656e2062757420717561696e746c792064726976696e67207a6f6d62696573206f78656e204a61646564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.5.18|4x|4a61646564206f78656e +1.3.6.1.4.1.343.2.7.2.2.1.2.1.5.22|4x|717561696e746c792074686569722064726976696e67207a6f6d62696573 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.6.18|4x|6b657074204a61646564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.6.22|4|driving +1.3.6.1.4.1.343.2.7.2.2.1.2.1.7.18|4x|4a616465642064726976696e67206b657074207468656972206f78656e20627574 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.7.22|4x|4a616465642064726976696e67206b65707420627574 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.1.8|65|26212581 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.1.18|65|918782676 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.2.8|65|2561191324 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.2.18|65|4290482129 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.3.8|65|3900533769 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.3.18|65|564767165 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.4.8|65|3058685355 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.4.18|65|3837029910 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.5.8|65|1958861748 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.5.18|65|2421785564 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.6.8|65|2377289710 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.6.18|65|4015875170 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.7.8|65|4079823523 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.7.18|65|577740315 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.8.8|65|3885573357 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.8.18|65|1559311203 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.9.8|65|1208244969 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.9.18|65|736603272 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.10.8|65|1397338420 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.10.18|65|3150855068 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.1.4|2|4 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.1.29|2|29 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.2.4|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.2.29|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.3.4|65|1467360873 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.3.29|65|3891936190 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.4.4|66|1428003748 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.4.29|66|3467694198 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.5.4|2|2 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.5.29|2|2 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.6.4|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.6.29|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.7.4|2|9 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.7.29|2|29 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.8.4|2|13 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.8.29|2|28 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.9.4|2|15 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.9.29|2|24 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.10.4|4x|42010aa40033 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.10.29|4x|42010aa40033 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.11.4|4x|42010aa40033 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.11.29|4x|42010aa40033 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.12.4|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.12.29|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.13.4|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.13.29|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.14.4|2|13 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.14.29|2|30 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.1.3|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.1.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.2.3|65|906870219 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.2.11|65|3854133097 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.3.3|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.3.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.4.3|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.4.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.5.3|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.5.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.6.3|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.6.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.3.1.1.1.2|2|2 +1.3.6.1.4.1.343.2.7.2.2.3.1.1.1.11|2|11 +1.3.6.1.4.1.343.2.7.2.2.3.1.1.2.2|2|11 +1.3.6.1.4.1.343.2.7.2.2.3.1.1.2.11|2|22 +1.3.6.1.4.1.343.2.7.2.2.3.2.1.1.7|2|0 +1.3.6.1.4.1.343.2.7.2.2.3.2.1.1.23|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.1.22|2|22 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.1.30|2|30 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.2.22|2|29 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.2.30|2|19 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.3.22|2|16 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.3.30|2|12 +1.3.6.1.4.1.343.2.7.2.2.4.2.1.1.7|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.1.5|4x|6f78656e2061637465642064726976696e6720666f72776172642064726976696e67 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.1.11|4x|4a61646564206163746564 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.2.5|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.2.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.3.5|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.3.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.4.5|66|1949733254 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.4.11|66|2070885352 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.5.5|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.5.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.6.5|2|2 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.6.11|2|2 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.7.5|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.7.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.8.5|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.8.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.9.5|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.9.11|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.10.5|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.10.11|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.11.5|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.11.11|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.12.5|65|2997670242 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.12.11|65|2131631262 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.13.5|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.13.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.14.5|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.14.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.15.5|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.15.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.5.1.1.1.26|2|26 +1.3.6.1.4.1.343.2.7.2.2.5.1.1.1.27|2|27 +1.3.6.1.4.1.343.2.7.2.2.5.1.1.2.26|2|15 +1.3.6.1.4.1.343.2.7.2.2.5.1.1.2.27|2|1 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.1.19|2|3 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.1.31|2|2 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.2.19|65|706719367 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.2.31|65|1306335671 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.3.19|2|2 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.3.31|2|2 +1.3.6.1.4.1.343.2.7.2.3.1.2.0|2|0 +1.3.6.1.4.1.343.2.7.2.3.1.3.0|2|1 +1.3.6.1.4.1.343.2.7.2.3.1.4.0|2|1 +1.3.6.1.4.1.343.2.7.2.3.2.2.0|2|1 +1.3.6.1.4.1.343.2.7.2.3.3.2.0|2|1 +1.3.6.1.4.1.343.2.7.2.3.4.2.0|2|0 +1.3.6.1.4.1.674.10892.2.2.1.0|2|4 +1.3.6.1.4.1.674.10892.2.3.1.1.0|2|4 +1.3.6.1.4.1.674.10892.2.3.1.4.0|2|4 +1.3.6.1.4.1.674.10892.2.3.1.5.0|2|4 +1.3.6.1.4.1.674.10892.2.3.1.9.0|2|3 +1.3.6.1.4.1.674.10892.2.4.1.1.1.1|2|2 +1.3.6.1.4.1.674.10892.2.4.1.1.1.2|2|83 +1.3.6.1.4.1.674.10892.2.4.1.1.6.1|2|2803 +1.3.6.1.4.1.674.10892.2.4.1.1.6.2|2|191739 +1.3.6.1.4.1.674.10892.2.4.1.1.13.1|2|1219 +1.3.6.1.4.1.674.10892.2.4.1.1.13.2|2|113 +1.3.6.1.4.1.674.10892.2.4.1.1.14.1|2|111 +1.3.6.1.4.1.674.10892.2.4.1.1.14.2|2|827 +1.3.6.1.4.1.674.10892.2.4.2.1.2.1|2|27 +1.3.6.1.4.1.674.10892.2.4.2.1.2.2|2|86 +1.3.6.1.4.1.674.10892.5.1.1.1.0|4x|717561696e746c79204a61646564207468656972 +1.3.6.1.4.1.674.10892.5.1.1.2.0|4|acted +1.3.6.1.4.1.674.10892.5.1.1.3.0|4x|6f78656e204a61646564206275742064726976696e67206163746564206f78656e +1.3.6.1.4.1.674.10892.5.1.1.4.0|4x|6163746564207a6f6d62696573207a6f6d6269657320717561696e746c792064726976696e67207468656972 +1.3.6.1.4.1.674.10892.5.1.1.5.0|4x|7a6f6d62696573206b65707420616374656420627574207468656972204a61646564 +1.3.6.1.4.1.674.10892.5.1.1.6.0|4x|717561696e746c79206f78656e2062757420746865697220666f727761726420627574 +1.3.6.1.4.1.674.10892.5.1.1.7.0|2|17 +1.3.6.1.4.1.674.10892.5.1.1.8.0|4x|616374656420666f7277617264206f78656e20717561696e746c7920627574 +1.3.6.1.4.1.674.10892.5.1.2.1.0|4x|7468656972206163746564206b65707420627574204a61646564 +1.3.6.1.4.1.674.10892.5.1.2.2.0|4x|6f78656e206163746564206b657074204a61646564207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.1.2.3.0|4x|746865697220666f727761726420666f72776172642064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.5.1.3.1.0|4|custom.hostname +1.3.6.1.4.1.674.10892.5.1.3.2.0|4x|616374656420717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.5.1.3.3.0|4x|7468656972206b657074207468656972206f78656e206163746564 +1.3.6.1.4.1.674.10892.5.1.3.4.0|4x|62757420627574 +1.3.6.1.4.1.674.10892.5.1.3.5.0|4|forward +1.3.6.1.4.1.674.10892.5.1.3.6.0|4|Ubuntu +1.3.6.1.4.1.674.10892.5.1.3.7.0|2|3 +1.3.6.1.4.1.674.10892.5.1.3.8.0|4x|4a6164656420666f727761726420717561696e746c79204a61646564206f78656e204a6164656420627574206f78656e +1.3.6.1.4.1.674.10892.5.1.3.9.0|4x|6163746564206163746564 +1.3.6.1.4.1.674.10892.5.1.3.10.0|4x|6f78656e206b6570742064726976696e67206163746564206b657074206b657074206163746564 +1.3.6.1.4.1.674.10892.5.1.3.11.0|4x|7468656972207a6f6d62696573204a6164656420666f7277617264206f78656e207a6f6d62696573206b657074207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.1.3.12.0|4|PowerEdge customFooVersion +1.3.6.1.4.1.674.10892.5.1.3.13.0|2|20 +1.3.6.1.4.1.674.10892.5.1.3.14.0|4|18.04.3 LTS (Bionic Beaver) +1.3.6.1.4.1.674.10892.5.1.3.15.0|4x|4a6164656420627574207468656972 +1.3.6.1.4.1.674.10892.5.1.3.16.0|2|28 +1.3.6.1.4.1.674.10892.5.1.3.17.0|2|9 +1.3.6.1.4.1.674.10892.5.1.3.18.0|4x|6163746564207468656972206163746564207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.2.1.0|2|1 +1.3.6.1.4.1.674.10892.5.2.2.0|2|2 +1.3.6.1.4.1.674.10892.5.2.3.0|2|6 +1.3.6.1.4.1.674.10892.5.2.4.0|2|4 +1.3.6.1.4.1.674.10892.5.2.5.0|2|21 +1.3.6.1.4.1.674.10892.5.3.1.1.0|4|driving +1.3.6.1.4.1.674.10892.5.3.1.2.0|4x|6f78656e206b657074206163746564206f78656e207a6f6d62696573206f78656e +1.3.6.1.4.1.674.10892.5.3.1.3.0|2|1 +1.3.6.1.4.1.674.10892.5.3.1.4.0|4x|7468656972206b657074206f78656e +1.3.6.1.4.1.674.10892.5.3.1.5.0|4x|717561696e746c79206b65707420616374656420666f7277617264206f78656e206f78656e206b657074206b657074 +1.3.6.1.4.1.674.10892.5.3.1.6.0|4x|717561696e746c792064726976696e67206f78656e20666f7277617264207a6f6d62696573206f78656e206f78656e20717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.5.3.1.7.0|4x|616374656420616374656420746865697220666f7277617264 +1.3.6.1.4.1.674.10892.5.3.1.8.0|4x|666f7277617264206163746564 +1.3.6.1.4.1.674.10892.5.3.1.9.0|4|Jaded +1.3.6.1.4.1.674.10892.5.3.1.10.0|4x|6163746564207a6f6d62696573207468656972206f78656e207a6f6d6269657320666f7277617264206b657074204a61646564207468656972 +1.3.6.1.4.1.674.10892.5.3.1.11.0|4x|627574204a6164656420746865697220666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1.1.0|2|15 +1.3.6.1.4.1.674.10892.5.4.1.2.0|2|20 +1.3.6.1.4.1.674.10892.5.4.1.3.0|2|12 +1.3.6.1.4.1.674.10892.5.4.200.10.1.1.26|2|26 +1.3.6.1.4.1.674.10892.5.4.200.10.1.1.29|2|29 +1.3.6.1.4.1.674.10892.5.4.200.10.1.2.26|2|3 +1.3.6.1.4.1.674.10892.5.4.200.10.1.2.29|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.3.26|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.3.29|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.4.26|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.4.29|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.5.26|4x|7a6f6d62696573206f78656e206b657074206b657074206163746564207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.200.10.1.5.29|4x|6275742062757420746865697220666f7277617264207a6f6d62696573206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.5.4.200.10.1.6.26|2|4 +1.3.6.1.4.1.674.10892.5.4.200.10.1.6.29|2|4 +1.3.6.1.4.1.674.10892.5.4.200.10.1.7.26|4x|64726976696e67206b65707420616374656420627574 +1.3.6.1.4.1.674.10892.5.4.200.10.1.7.29|4|kept +1.3.6.1.4.1.674.10892.5.4.200.10.1.8.26|4x|6b65707420627574207a6f6d6269657320666f7277617264204a61646564206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.200.10.1.8.29|4|zombies +1.3.6.1.4.1.674.10892.5.4.200.10.1.9.26|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.9.29|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.10.26|4x|6b657074206163746564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.10.29|4x|666f727761726420717561696e746c79204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.200.10.1.11.26|4x|666f7277617264204a61646564206f78656e20666f7277617264207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.200.10.1.11.29|4x|64726976696e6720666f727761726420666f727761726420717561696e746c79207a6f6d626965732064726976696e67 +1.3.6.1.4.1.674.10892.5.4.200.10.1.12.26|2|6 +1.3.6.1.4.1.674.10892.5.4.200.10.1.12.29|2|6 +1.3.6.1.4.1.674.10892.5.4.200.10.1.13.26|4x|4a6164656420666f7277617264207a6f6d6269657320746865697220717561696e746c79207468656972204a61646564206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.200.10.1.13.29|4x|717561696e746c7920627574 +1.3.6.1.4.1.674.10892.5.4.200.10.1.14.26|4x|6163746564207a6f6d62696573204a61646564204a61646564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.14.29|4x|6b657074206163746564206b65707420666f7277617264207a6f6d6269657320717561696e746c7920746865697220666f7277617264 +1.3.6.1.4.1.674.10892.5.4.200.10.1.15.26|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.15.29|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.16.26|4x|666f7277617264204a6164656420717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.5.4.200.10.1.16.29|4|quaintly +1.3.6.1.4.1.674.10892.5.4.200.10.1.17.26|4x|627574207468656972206b65707420717561696e746c7920717561696e746c7920746865697220666f7277617264204a61646564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.17.29|4x|64726976696e67207468656972 +1.3.6.1.4.1.674.10892.5.4.200.10.1.18.26|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.18.29|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.19.26|4x|6f78656e207468656972206f78656e +1.3.6.1.4.1.674.10892.5.4.200.10.1.19.29|4x|717561696e746c7920717561696e746c79206f78656e204a61646564206f78656e +1.3.6.1.4.1.674.10892.5.4.200.10.1.20.26|4x|6b65707420666f72776172642074686569722062757420627574 +1.3.6.1.4.1.674.10892.5.4.200.10.1.20.29|4x|6b65707420746865697220717561696e746c792064726976696e67207a6f6d62696573204a6164656420627574 +1.3.6.1.4.1.674.10892.5.4.200.10.1.21.26|2|1 +1.3.6.1.4.1.674.10892.5.4.200.10.1.21.29|2|1 +1.3.6.1.4.1.674.10892.5.4.200.10.1.22.26|4x|6b6570742062757420717561696e746c79206f78656e20717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.200.10.1.22.29|4x|61637465642074686569722064726976696e67 +1.3.6.1.4.1.674.10892.5.4.200.10.1.23.26|4|acted +1.3.6.1.4.1.674.10892.5.4.200.10.1.23.29|4|their +1.3.6.1.4.1.674.10892.5.4.200.10.1.24.26|2|3 +1.3.6.1.4.1.674.10892.5.4.200.10.1.24.29|2|3 +1.3.6.1.4.1.674.10892.5.4.200.10.1.25.26|4x|616374656420666f72776172642061637465642064726976696e672064726976696e6720746865697220627574204a61646564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.25.29|4x|62757420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.200.10.1.26.26|4x|6f78656e206f78656e207a6f6d62696573207a6f6d62696573204a61646564206163746564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.26.29|4x|666f72776172642064726976696e6720666f7277617264206b657074207a6f6d62696573204a6164656420627574206163746564206b657074 +1.3.6.1.4.1.674.10892.5.4.200.10.1.27.26|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.27.29|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.28.26|4x|7a6f6d6269657320746865697220717561696e746c79206163746564206b657074207468656972 +1.3.6.1.4.1.674.10892.5.4.200.10.1.28.29|4x|4a61646564207a6f6d62696573206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.200.10.1.29.26|4x|746865697220666f7277617264206b6570742064726976696e6720717561696e746c79206163746564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.29.29|4x|64726976696e6720666f727761726420627574206163746564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.30.26|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.30.29|2|6 +1.3.6.1.4.1.674.10892.5.4.200.10.1.31.26|4x|627574206f78656e207468656972206f78656e2064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.5.4.200.10.1.31.29|4|acted +1.3.6.1.4.1.674.10892.5.4.200.10.1.42.26|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.42.29|2|4 +1.3.6.1.4.1.674.10892.5.4.200.10.1.43.26|4x|627574207a6f6d6269657320666f7277617264206163746564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.43.29|4x|64726976696e6720616374656420666f727761726420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.200.10.1.44.26|2|1 +1.3.6.1.4.1.674.10892.5.4.200.10.1.44.29|2|1 +1.3.6.1.4.1.674.10892.5.4.200.10.1.45.26|4x|6f78656e20666f7277617264207468656972 +1.3.6.1.4.1.674.10892.5.4.200.10.1.45.29|4x|6f78656e206b657074206b657074 +1.3.6.1.4.1.674.10892.5.4.200.10.1.50.26|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.50.29|2|4 +1.3.6.1.4.1.674.10892.5.4.200.10.1.51.26|4x|7a6f6d62696573206b657074206b65707420616374656420627574 +1.3.6.1.4.1.674.10892.5.4.200.10.1.51.29|4x|666f727761726420666f7277617264207468656972 +1.3.6.1.4.1.674.10892.5.4.200.10.1.52.26|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.52.29|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.53.26|4x|7a6f6d62696573206f78656e20627574 +1.3.6.1.4.1.674.10892.5.4.200.10.1.53.29|4x|7468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.200.10.1.54.26|2|1 +1.3.6.1.4.1.674.10892.5.4.200.10.1.54.29|2|6 +1.3.6.1.4.1.674.10892.5.4.200.10.1.55.26|4x|64726976696e6720627574206f78656e204a61646564206275742074686569722064726976696e67 +1.3.6.1.4.1.674.10892.5.4.200.10.1.55.29|4x|64726976696e672074686569722064726976696e67 +1.3.6.1.4.1.674.10892.5.4.200.10.1.56.26|2|6 +1.3.6.1.4.1.674.10892.5.4.200.10.1.56.29|2|4 +1.3.6.1.4.1.674.10892.5.4.200.10.1.57.26|4x|717561696e746c792064726976696e6720746865697220616374656420666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.200.10.1.57.29|4x|717561696e746c7920717561696e746c79206b65707420666f7277617264206275742064726976696e67206b657074207468656972207468656972 +1.3.6.1.4.1.674.10892.5.4.200.10.1.58.26|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.58.29|2|3 +1.3.6.1.4.1.674.10892.5.4.200.10.1.59.26|4x|6f78656e2074686569722064726976696e67207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.200.10.1.59.29|4x|4a61646564206163746564207468656972206163746564207a6f6d62696573206f78656e207468656972 +1.3.6.1.4.1.674.10892.5.4.200.10.1.60.26|2|1 +1.3.6.1.4.1.674.10892.5.4.200.10.1.60.29|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.61.26|4x|6b657074207a6f6d62696573206163746564207a6f6d62696573207a6f6d6269657320616374656420746865697220627574207468656972 +1.3.6.1.4.1.674.10892.5.4.200.10.1.61.29|4x|666f7277617264207a6f6d6269657320717561696e746c7920717561696e746c79204a6164656420627574204a61646564206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.5.4.200.10.1.62.26|4x|7468656972207a6f6d62696573204a61646564204a61646564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.62.29|4x|4a6164656420666f7277617264206b6570742064726976696e67206f78656e206163746564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.63.26|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.63.29|2|6 +1.3.6.1.4.1.674.10892.5.4.200.10.1.64.26|4x|6163746564206b657074204a61646564206f78656e +1.3.6.1.4.1.674.10892.5.4.200.10.1.64.29|4x|4a616465642064726976696e6720717561696e746c79206275742064726976696e67 +1.3.6.1.4.1.674.10892.5.4.300.1.0|2|17 +1.3.6.1.4.1.674.10892.5.4.300.2.0|2|19 +1.3.6.1.4.1.674.10892.5.4.300.10.1.1.22|2|22 +1.3.6.1.4.1.674.10892.5.4.300.10.1.1.28|2|28 +1.3.6.1.4.1.674.10892.5.4.300.10.1.2.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.2.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.3.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.3.28|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.4.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.4.28|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.5.22|2|3 +1.3.6.1.4.1.674.10892.5.4.300.10.1.5.28|2|21 +1.3.6.1.4.1.674.10892.5.4.300.10.1.6.22|2|23 +1.3.6.1.4.1.674.10892.5.4.300.10.1.6.28|2|17 +1.3.6.1.4.1.674.10892.5.4.300.10.1.7.22|4x|6163746564207468656972207468656972207a6f6d6269657320666f7277617264207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.300.10.1.7.28|4|their +1.3.6.1.4.1.674.10892.5.4.300.10.1.8.22|4x|6b657074206b657074206f78656e +1.3.6.1.4.1.674.10892.5.4.300.10.1.8.28|4x|7a6f6d6269657320616374656420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.300.10.1.9.22|4x|666f727761726420746865697220666f7277617264207468656972206f78656e206275742064726976696e67206f78656e +1.3.6.1.4.1.674.10892.5.4.300.10.1.9.28|4x|64726976696e67207468656972204a61646564206f78656e2064726976696e67207a6f6d62696573204a616465642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.300.10.1.10.22|4x|6f78656e204a61646564 +1.3.6.1.4.1.674.10892.5.4.300.10.1.10.28|4|driving +1.3.6.1.4.1.674.10892.5.4.300.10.1.11.22|4|kept +1.3.6.1.4.1.674.10892.5.4.300.10.1.11.28|4|acted +1.3.6.1.4.1.674.10892.5.4.300.10.1.12.22|2|18 +1.3.6.1.4.1.674.10892.5.4.300.10.1.12.28|2|18 +1.3.6.1.4.1.674.10892.5.4.300.10.1.13.22|2|27 +1.3.6.1.4.1.674.10892.5.4.300.10.1.13.28|2|14 +1.3.6.1.4.1.674.10892.5.4.300.10.1.14.22|2|7 +1.3.6.1.4.1.674.10892.5.4.300.10.1.14.28|2|5 +1.3.6.1.4.1.674.10892.5.4.300.10.1.15.22|4|oxen +1.3.6.1.4.1.674.10892.5.4.300.10.1.15.28|4|but +1.3.6.1.4.1.674.10892.5.4.300.10.1.24.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.24.28|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.25.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.25.28|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.28.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.28.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.29.22|2|10 +1.3.6.1.4.1.674.10892.5.4.300.10.1.29.28|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.30.22|2|0 +1.3.6.1.4.1.674.10892.5.4.300.10.1.30.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.31.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.31.28|2|8 +1.3.6.1.4.1.674.10892.5.4.300.10.1.32.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.32.28|2|9 +1.3.6.1.4.1.674.10892.5.4.300.10.1.33.22|2|31 +1.3.6.1.4.1.674.10892.5.4.300.10.1.33.28|2|16 +1.3.6.1.4.1.674.10892.5.4.300.10.1.34.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.34.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.35.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.35.28|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.36.22|2|19 +1.3.6.1.4.1.674.10892.5.4.300.10.1.36.28|2|25 +1.3.6.1.4.1.674.10892.5.4.300.10.1.38.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.38.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.39.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.39.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.44.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.44.28|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.45.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.45.28|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.46.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.46.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.47.22|2|22 +1.3.6.1.4.1.674.10892.5.4.300.10.1.47.28|2|18 +1.3.6.1.4.1.674.10892.5.4.300.10.1.48.22|4x|7468656972206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.4.300.10.1.48.28|4x|6b657074204a61646564207468656972206163746564 +1.3.6.1.4.1.674.10892.5.4.300.10.1.49.22|4x|7a6f6d62696573207a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.674.10892.5.4.300.10.1.49.28|4x|616374656420627574204a61646564207a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.5.4.300.40.1.1.10.22|2|10 +1.3.6.1.4.1.674.10892.5.4.300.40.1.1.16.20|2|16 +1.3.6.1.4.1.674.10892.5.4.300.40.1.2.10.22|2|22 +1.3.6.1.4.1.674.10892.5.4.300.40.1.2.16.20|2|20 +1.3.6.1.4.1.674.10892.5.4.300.40.1.3.10.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.40.1.3.16.20|2|8 +1.3.6.1.4.1.674.10892.5.4.300.40.1.4.10.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.40.1.4.16.20|2|8 +1.3.6.1.4.1.674.10892.5.4.300.40.1.5.10.22|4x|666f7277617264204a616465642064726976696e672061637465642064726976696e67 +1.3.6.1.4.1.674.10892.5.4.300.40.1.5.16.20|4x|717561696e746c792064726976696e67204a6164656420717561696e746c79206163746564206b657074207a6f6d62696573207a6f6d6269657320627574 +1.3.6.1.4.1.674.10892.5.4.300.40.1.6.10.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.40.1.6.16.20|2|1 +1.3.6.1.4.1.674.10892.5.4.300.40.1.7.10.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.40.1.7.16.20|2|4 +1.3.6.1.4.1.674.10892.5.4.300.40.1.8.10.22|4x|4a616465642074686569722074686569722064726976696e67 +1.3.6.1.4.1.674.10892.5.4.300.40.1.8.16.20|4x|62757420627574206b6570742062757420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.300.50.1.1.3.26|2|3 +1.3.6.1.4.1.674.10892.5.4.300.50.1.1.31.19|2|31 +1.3.6.1.4.1.674.10892.5.4.300.50.1.2.3.26|2|26 +1.3.6.1.4.1.674.10892.5.4.300.50.1.2.31.19|2|19 +1.3.6.1.4.1.674.10892.5.4.300.50.1.3.3.26|2|2 +1.3.6.1.4.1.674.10892.5.4.300.50.1.3.31.19|2|6 +1.3.6.1.4.1.674.10892.5.4.300.50.1.4.3.26|2|4 +1.3.6.1.4.1.674.10892.5.4.300.50.1.4.31.19|2|1 +1.3.6.1.4.1.674.10892.5.4.300.50.1.5.3.26|2|6 +1.3.6.1.4.1.674.10892.5.4.300.50.1.5.31.19|2|4 +1.3.6.1.4.1.674.10892.5.4.300.50.1.7.3.26|4x|61637465642061637465642064726976696e67206163746564 +1.3.6.1.4.1.674.10892.5.4.300.50.1.7.31.19|4x|666f7277617264207a6f6d62696573206b657074206b657074 +1.3.6.1.4.1.674.10892.5.4.300.50.1.8.1.1|4|2.5.4 +1.3.6.1.4.1.674.10892.5.4.300.50.1.8.3.26|4x|6f78656e206163746564204a6164656420666f7277617264207a6f6d626965732064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.5.4.300.50.1.8.31.19|4x|666f7277617264206b657074206f78656e +1.3.6.1.4.1.674.10892.5.4.300.50.1.11.3.26|4x|6f78656e2064726976696e6720717561696e746c79204a61646564207468656972 +1.3.6.1.4.1.674.10892.5.4.300.50.1.11.31.19|4x|64726976696e6720666f7277617264207a6f6d62696573204a61646564206b657074206b657074204a61646564204a61646564204a61646564 +1.3.6.1.4.1.674.10892.5.4.300.60.1.1.3.10|2|3 +1.3.6.1.4.1.674.10892.5.4.300.60.1.1.23.26|2|23 +1.3.6.1.4.1.674.10892.5.4.300.60.1.2.3.10|2|10 +1.3.6.1.4.1.674.10892.5.4.300.60.1.2.23.26|2|26 +1.3.6.1.4.1.674.10892.5.4.300.60.1.3.3.10|2|6 +1.3.6.1.4.1.674.10892.5.4.300.60.1.3.23.26|2|1 +1.3.6.1.4.1.674.10892.5.4.300.60.1.4.3.10|2|4 +1.3.6.1.4.1.674.10892.5.4.300.60.1.4.23.26|2|6 +1.3.6.1.4.1.674.10892.5.4.300.60.1.5.3.10|2|4 +1.3.6.1.4.1.674.10892.5.4.300.60.1.5.23.26|2|5 +1.3.6.1.4.1.674.10892.5.4.300.60.1.6.3.10|2|14 +1.3.6.1.4.1.674.10892.5.4.300.60.1.6.23.26|2|4 +1.3.6.1.4.1.674.10892.5.4.300.60.1.7.3.10|2|21 +1.3.6.1.4.1.674.10892.5.4.300.60.1.7.23.26|2|22 +1.3.6.1.4.1.674.10892.5.4.300.60.1.8.3.10|4x|6163746564206163746564204a61646564206f78656e206f78656e207a6f6d6269657320627574206b657074207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.300.60.1.8.23.26|4x|64726976696e67207468656972206163746564207468656972206f78656e20666f7277617264204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.300.60.1.9.3.10|2|1 +1.3.6.1.4.1.674.10892.5.4.300.60.1.9.23.26|2|26 +1.3.6.1.4.1.674.10892.5.4.300.60.1.11.3.10|4x|616374656420616374656420746865697220717561696e746c79206f78656e207a6f6d626965732064726976696e67206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.300.60.1.11.23.26|4x|746865697220627574206163746564206f78656e20627574206b657074 +1.3.6.1.4.1.674.10892.5.4.300.70.1.1.18.23|2|18 +1.3.6.1.4.1.674.10892.5.4.300.70.1.1.29.21|2|29 +1.3.6.1.4.1.674.10892.5.4.300.70.1.2.18.23|2|23 +1.3.6.1.4.1.674.10892.5.4.300.70.1.2.29.21|2|21 +1.3.6.1.4.1.674.10892.5.4.300.70.1.3.18.23|2|1 +1.3.6.1.4.1.674.10892.5.4.300.70.1.3.29.21|2|4 +1.3.6.1.4.1.674.10892.5.4.300.70.1.4.18.23|2|2 +1.3.6.1.4.1.674.10892.5.4.300.70.1.4.29.21|2|2 +1.3.6.1.4.1.674.10892.5.4.300.70.1.5.18.23|2|4 +1.3.6.1.4.1.674.10892.5.4.300.70.1.5.29.21|2|2 +1.3.6.1.4.1.674.10892.5.4.300.70.1.6.18.23|2|3 +1.3.6.1.4.1.674.10892.5.4.300.70.1.6.29.21|2|1 +1.3.6.1.4.1.674.10892.5.4.300.70.1.7.18.23|2|2 +1.3.6.1.4.1.674.10892.5.4.300.70.1.7.29.21|2|1 +1.3.6.1.4.1.674.10892.5.4.300.70.1.8.18.23|4x|4a61646564206f78656e2064726976696e67207a6f6d62696573206163746564206f78656e +1.3.6.1.4.1.674.10892.5.4.300.70.1.8.29.21|4x|6b657074207a6f6d62696573206f78656e206b6570742064726976696e6720666f7277617264206f78656e +1.3.6.1.4.1.674.10892.5.4.300.90.1.1.2.16|2|2 +1.3.6.1.4.1.674.10892.5.4.300.90.1.1.6.30|2|6 +1.3.6.1.4.1.674.10892.5.4.300.90.1.2.2.16|2|16 +1.3.6.1.4.1.674.10892.5.4.300.90.1.2.6.30|2|30 +1.3.6.1.4.1.674.10892.5.4.300.90.1.3.2.16|2|10 +1.3.6.1.4.1.674.10892.5.4.300.90.1.3.6.30|2|13 +1.3.6.1.4.1.674.10892.5.4.300.90.1.4.2.16|2|2 +1.3.6.1.4.1.674.10892.5.4.300.90.1.4.6.30|2|3 +1.3.6.1.4.1.674.10892.5.4.300.90.1.5.2.16|2|3 +1.3.6.1.4.1.674.10892.5.4.300.90.1.5.6.30|2|2 +1.3.6.1.4.1.674.10892.5.4.300.90.1.6.2.16|4x|74686569722061637465642064726976696e67204a61646564 +1.3.6.1.4.1.674.10892.5.4.300.90.1.6.6.30|4x|717561696e746c7920717561696e746c7920666f7277617264 +1.3.6.1.4.1.674.10892.5.4.300.90.1.7.2.16|4x|746865697220666f7277617264206b657074206163746564 +1.3.6.1.4.1.674.10892.5.4.300.90.1.7.6.30|4x|7468656972206f78656e206b65707420746865697220627574206163746564 +1.3.6.1.4.1.674.10892.5.4.300.90.1.8.2.16|4|their +1.3.6.1.4.1.674.10892.5.4.300.90.1.8.6.30|4|Jaded +1.3.6.1.4.1.674.10892.5.4.300.90.1.9.2.16|4x|4a61646564206f78656e204a6164656420717561696e746c7920627574207468656972206275742064726976696e67207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.300.90.1.9.6.30|4x|4a61646564206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.4.300.90.1.10.2.16|4x|616374656420627574 +1.3.6.1.4.1.674.10892.5.4.300.90.1.10.6.30|4x|666f72776172642064726976696e67204a61646564206b657074207468656972206b6570742062757420627574206b657074 +1.3.6.1.4.1.674.10892.5.4.300.90.1.11.2.16|4|kept +1.3.6.1.4.1.674.10892.5.4.300.90.1.11.6.30|4x|6b657074206b65707420666f7277617264207a6f6d6269657320666f7277617264206b657074204a61646564206163746564206b657074 +1.3.6.1.4.1.674.10892.5.4.300.90.1.12.2.16|4x|7a6f6d62696573206b657074207a6f6d62696573207a6f6d6269657320616374656420627574207468656972 +1.3.6.1.4.1.674.10892.5.4.300.90.1.12.6.30|4|their +1.3.6.1.4.1.674.10892.5.4.600.10.1.1.5.22|2|5 +1.3.6.1.4.1.674.10892.5.4.600.10.1.1.26.20|2|26 +1.3.6.1.4.1.674.10892.5.4.600.10.1.2.5.22|2|22 +1.3.6.1.4.1.674.10892.5.4.600.10.1.2.26.20|2|20 +1.3.6.1.4.1.674.10892.5.4.600.10.1.3.5.22|2|2 +1.3.6.1.4.1.674.10892.5.4.600.10.1.3.26.20|2|4 +1.3.6.1.4.1.674.10892.5.4.600.10.1.4.5.22|2|2 +1.3.6.1.4.1.674.10892.5.4.600.10.1.4.26.20|2|1 +1.3.6.1.4.1.674.10892.5.4.600.10.1.5.5.22|2|5 +1.3.6.1.4.1.674.10892.5.4.600.10.1.5.26.20|2|6 +1.3.6.1.4.1.674.10892.5.4.600.10.1.6.5.22|2|2 +1.3.6.1.4.1.674.10892.5.4.600.10.1.6.26.20|2|9 +1.3.6.1.4.1.674.10892.5.4.600.10.1.7.5.22|4x|717561696e746c7920717561696e746c79206f78656e206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.600.10.1.7.26.20|4x|6b657074207a6f6d62696573204a616465642064726976696e67207a6f6d62696573204a61646564204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.600.10.1.8.5.22|2|4 +1.3.6.1.4.1.674.10892.5.4.600.10.1.8.26.20|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.1.16.26|2|16 +1.3.6.1.4.1.674.10892.5.4.600.12.1.1.17.15|2|17 +1.3.6.1.4.1.674.10892.5.4.600.12.1.2.16.26|2|26 +1.3.6.1.4.1.674.10892.5.4.600.12.1.2.17.15|2|15 +1.3.6.1.4.1.674.10892.5.4.600.12.1.3.16.26|2|4 +1.3.6.1.4.1.674.10892.5.4.600.12.1.3.17.15|2|2 +1.3.6.1.4.1.674.10892.5.4.600.12.1.4.16.26|2|10 +1.3.6.1.4.1.674.10892.5.4.600.12.1.4.17.15|2|10 +1.3.6.1.4.1.674.10892.5.4.600.12.1.5.16.26|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.5.17.15|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.6.16.26|2|7 +1.3.6.1.4.1.674.10892.5.4.600.12.1.6.17.15|2|4 +1.3.6.1.4.1.674.10892.5.4.600.12.1.7.16.26|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.7.17.15|2|1 +1.3.6.1.4.1.674.10892.5.4.600.12.1.8.16.26|4x|7a6f6d626965732064726976696e672064726976696e67206f78656e206163746564 +1.3.6.1.4.1.674.10892.5.4.600.12.1.8.17.15|4x|7a6f6d62696573207468656972207a6f6d62696573207468656972206163746564204a61646564204a61646564 +1.3.6.1.4.1.674.10892.5.4.600.12.1.9.16.26|2|26 +1.3.6.1.4.1.674.10892.5.4.600.12.1.9.17.15|2|19 +1.3.6.1.4.1.674.10892.5.4.600.12.1.10.16.26|2|6 +1.3.6.1.4.1.674.10892.5.4.600.12.1.10.17.15|2|11 +1.3.6.1.4.1.674.10892.5.4.600.12.1.11.16.26|2|16 +1.3.6.1.4.1.674.10892.5.4.600.12.1.11.17.15|2|2 +1.3.6.1.4.1.674.10892.5.4.600.12.1.12.16.26|2|1 +1.3.6.1.4.1.674.10892.5.4.600.12.1.12.17.15|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.13.16.26|2|0 +1.3.6.1.4.1.674.10892.5.4.600.12.1.13.17.15|2|1 +1.3.6.1.4.1.674.10892.5.4.600.12.1.14.16.26|2|2 +1.3.6.1.4.1.674.10892.5.4.600.12.1.14.17.15|2|4 +1.3.6.1.4.1.674.10892.5.4.600.12.1.15.16.26|4x|7a6f6d626965732064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.12.1.15.17.15|4|zombies +1.3.6.1.4.1.674.10892.5.4.600.12.1.16.16.26|2|19 +1.3.6.1.4.1.674.10892.5.4.600.12.1.16.17.15|2|12 +1.3.6.1.4.1.674.10892.5.4.600.20.1.1.12.15|2|12 +1.3.6.1.4.1.674.10892.5.4.600.20.1.1.22.19|2|22 +1.3.6.1.4.1.674.10892.5.4.600.20.1.2.12.15|2|15 +1.3.6.1.4.1.674.10892.5.4.600.20.1.2.22.19|2|19 +1.3.6.1.4.1.674.10892.5.4.600.20.1.3.12.15|2|6 +1.3.6.1.4.1.674.10892.5.4.600.20.1.3.22.19|2|2 +1.3.6.1.4.1.674.10892.5.4.600.20.1.4.12.15|2|1 +1.3.6.1.4.1.674.10892.5.4.600.20.1.4.22.19|2|1 +1.3.6.1.4.1.674.10892.5.4.600.20.1.5.12.15|2|5 +1.3.6.1.4.1.674.10892.5.4.600.20.1.5.22.19|2|6 +1.3.6.1.4.1.674.10892.5.4.600.20.1.6.12.15|2|19 +1.3.6.1.4.1.674.10892.5.4.600.20.1.6.22.19|2|29 +1.3.6.1.4.1.674.10892.5.4.600.20.1.7.12.15|2|6 +1.3.6.1.4.1.674.10892.5.4.600.20.1.7.22.19|2|3 +1.3.6.1.4.1.674.10892.5.4.600.20.1.8.12.15|4x|6275742064726976696e6720616374656420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.600.20.1.8.22.19|4x|4a61646564206275742062757420717561696e746c79206f78656e204a61646564206275742064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.20.1.9.12.15|2|0 +1.3.6.1.4.1.674.10892.5.4.600.20.1.9.22.19|2|11 +1.3.6.1.4.1.674.10892.5.4.600.20.1.10.12.15|2|25 +1.3.6.1.4.1.674.10892.5.4.600.20.1.10.22.19|2|21 +1.3.6.1.4.1.674.10892.5.4.600.20.1.11.12.15|2|6 +1.3.6.1.4.1.674.10892.5.4.600.20.1.11.22.19|2|11 +1.3.6.1.4.1.674.10892.5.4.600.20.1.12.12.15|2|10 +1.3.6.1.4.1.674.10892.5.4.600.20.1.12.22.19|2|1 +1.3.6.1.4.1.674.10892.5.4.600.20.1.13.12.15|2|25 +1.3.6.1.4.1.674.10892.5.4.600.20.1.13.22.19|2|21 +1.3.6.1.4.1.674.10892.5.4.600.20.1.14.12.15|2|22 +1.3.6.1.4.1.674.10892.5.4.600.20.1.14.22.19|2|15 +1.3.6.1.4.1.674.10892.5.4.600.20.1.15.12.15|2|4 +1.3.6.1.4.1.674.10892.5.4.600.20.1.15.22.19|2|8 +1.3.6.1.4.1.674.10892.5.4.600.20.1.16.12.15|2|2 +1.3.6.1.4.1.674.10892.5.4.600.20.1.16.22.19|2|2 +1.3.6.1.4.1.674.10892.5.4.600.30.1.1.9.28|2|9 +1.3.6.1.4.1.674.10892.5.4.600.30.1.1.18.4|2|18 +1.3.6.1.4.1.674.10892.5.4.600.30.1.2.9.28|2|28 +1.3.6.1.4.1.674.10892.5.4.600.30.1.2.18.4|2|4 +1.3.6.1.4.1.674.10892.5.4.600.30.1.3.9.28|2|6 +1.3.6.1.4.1.674.10892.5.4.600.30.1.3.18.4|2|1 +1.3.6.1.4.1.674.10892.5.4.600.30.1.4.9.28|2|1 +1.3.6.1.4.1.674.10892.5.4.600.30.1.4.18.4|2|6 +1.3.6.1.4.1.674.10892.5.4.600.30.1.5.9.28|2|2 +1.3.6.1.4.1.674.10892.5.4.600.30.1.5.18.4|2|5 +1.3.6.1.4.1.674.10892.5.4.600.30.1.6.9.28|2|16 +1.3.6.1.4.1.674.10892.5.4.600.30.1.6.18.4|2|10 +1.3.6.1.4.1.674.10892.5.4.600.30.1.7.9.28|2|26 +1.3.6.1.4.1.674.10892.5.4.600.30.1.7.18.4|2|26 +1.3.6.1.4.1.674.10892.5.4.600.30.1.8.9.28|4x|64726976696e67207a6f6d626965732064726976696e6720717561696e746c7920717561696e746c79206b657074206163746564 +1.3.6.1.4.1.674.10892.5.4.600.30.1.8.18.4|4x|4a61646564206b6570742062757420666f7277617264206163746564204a6164656420666f7277617264206b657074207468656972 +1.3.6.1.4.1.674.10892.5.4.600.30.1.9.9.28|2|1 +1.3.6.1.4.1.674.10892.5.4.600.30.1.9.18.4|2|14 +1.3.6.1.4.1.674.10892.5.4.600.30.1.10.9.28|2|2 +1.3.6.1.4.1.674.10892.5.4.600.30.1.10.18.4|2|19 +1.3.6.1.4.1.674.10892.5.4.600.30.1.11.9.28|2|25 +1.3.6.1.4.1.674.10892.5.4.600.30.1.11.18.4|2|13 +1.3.6.1.4.1.674.10892.5.4.600.30.1.12.9.28|2|12 +1.3.6.1.4.1.674.10892.5.4.600.30.1.12.18.4|2|10 +1.3.6.1.4.1.674.10892.5.4.600.30.1.13.9.28|2|19 +1.3.6.1.4.1.674.10892.5.4.600.30.1.13.18.4|2|19 +1.3.6.1.4.1.674.10892.5.4.600.30.1.14.9.28|2|31 +1.3.6.1.4.1.674.10892.5.4.600.30.1.14.18.4|2|23 +1.3.6.1.4.1.674.10892.5.4.600.30.1.15.9.28|2|8 +1.3.6.1.4.1.674.10892.5.4.600.30.1.15.18.4|2|8 +1.3.6.1.4.1.674.10892.5.4.600.30.1.16.9.28|2|2 +1.3.6.1.4.1.674.10892.5.4.600.30.1.16.18.4|2|1 +1.3.6.1.4.1.674.10892.5.4.600.50.1.1.20.31|2|20 +1.3.6.1.4.1.674.10892.5.4.600.50.1.1.21.13|2|21 +1.3.6.1.4.1.674.10892.5.4.600.50.1.2.20.31|2|31 +1.3.6.1.4.1.674.10892.5.4.600.50.1.2.21.13|2|13 +1.3.6.1.4.1.674.10892.5.4.600.50.1.3.20.31|2|1 +1.3.6.1.4.1.674.10892.5.4.600.50.1.3.21.13|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.4.20.31|2|6 +1.3.6.1.4.1.674.10892.5.4.600.50.1.4.21.13|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.5.20.31|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.5.21.13|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.6.20.31|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.6.21.13|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.7.20.31|4x|717561696e746c7920627574206f78656e204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.50.1.7.21.13|4x|6b657074206b6570742074686569722062757420717561696e746c79206b65707420717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.60.1.1.12.14|2|12 +1.3.6.1.4.1.674.10892.5.4.600.60.1.1.22.22|2|22 +1.3.6.1.4.1.674.10892.5.4.600.60.1.2.12.14|2|14 +1.3.6.1.4.1.674.10892.5.4.600.60.1.2.22.22|2|22 +1.3.6.1.4.1.674.10892.5.4.600.60.1.3.12.14|2|2 +1.3.6.1.4.1.674.10892.5.4.600.60.1.3.22.22|2|2 +1.3.6.1.4.1.674.10892.5.4.600.60.1.4.12.14|2|6 +1.3.6.1.4.1.674.10892.5.4.600.60.1.4.22.22|2|6 +1.3.6.1.4.1.674.10892.5.4.600.60.1.5.12.14|2|4 +1.3.6.1.4.1.674.10892.5.4.600.60.1.5.22.22|2|3 +1.3.6.1.4.1.674.10892.5.4.600.60.1.6.12.14|4x|7a6f6d6269657320717561696e746c7920666f727761726420616374656420717561696e746c79206163746564204a61646564207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.600.60.1.6.22.22|4x|616374656420717561696e746c79207468656972204a61646564206f78656e20666f727761726420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.600.60.1.7.12.14|2|20 +1.3.6.1.4.1.674.10892.5.4.600.60.1.7.22.22|2|7 +1.3.6.1.4.1.674.10892.5.4.600.60.1.8.12.14|4x|717561696e746c79206163746564206163746564206f78656e +1.3.6.1.4.1.674.10892.5.4.600.60.1.8.22.22|4x|746865697220717561696e746c79206b657074207468656972 +1.3.6.1.4.1.674.10892.5.4.600.60.1.9.12.14|2|15 +1.3.6.1.4.1.674.10892.5.4.600.60.1.9.22.22|2|26 +1.3.6.1.4.1.674.10892.5.4.600.60.1.10.12.14|4x|717561696e746c7920717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.600.60.1.10.22.22|4x|627574206f78656e20717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.60.1.11.12.14|4x|7a6f6d62696573206b657074206f78656e2064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.60.1.11.22.22|4x|6b657074206b657074206b657074207468656972206f78656e +1.3.6.1.4.1.674.10892.5.4.600.60.1.12.12.14|2|21 +1.3.6.1.4.1.674.10892.5.4.600.60.1.12.22.22|2|29 +1.3.6.1.4.1.674.10892.5.4.600.60.1.13.12.14|4x|7468656972207a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.60.1.13.22.22|4x|64726976696e672064726976696e67204a6164656420627574 +1.3.6.1.4.1.674.10892.5.4.600.60.1.14.12.14|4x|717561696e746c7920717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.60.1.14.22.22|4x|6163746564207468656972204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.60.1.15.12.14|2|6 +1.3.6.1.4.1.674.10892.5.4.600.60.1.15.22.22|2|2 +1.3.6.1.4.1.674.10892.5.4.600.60.1.16.12.14|2|4 +1.3.6.1.4.1.674.10892.5.4.600.60.1.16.22.22|2|1 +1.3.6.1.4.1.674.10892.5.4.600.60.1.17.12.14|2|1 +1.3.6.1.4.1.674.10892.5.4.600.60.1.17.22.22|2|1 +1.3.6.1.4.1.674.10892.5.4.600.60.1.18.12.14|2|1 +1.3.6.1.4.1.674.10892.5.4.600.60.1.18.22.22|2|1 +1.3.6.1.4.1.674.10892.5.4.600.60.1.19.12.14|2|21 +1.3.6.1.4.1.674.10892.5.4.600.60.1.19.22.22|2|0 +1.3.6.1.4.1.674.10892.5.4.600.60.1.20.12.14|2|25 +1.3.6.1.4.1.674.10892.5.4.600.60.1.20.22.22|2|14 +1.3.6.1.4.1.674.10892.5.4.600.60.1.21.12.14|2|10 +1.3.6.1.4.1.674.10892.5.4.600.60.1.21.22.22|2|8 +1.3.6.1.4.1.674.10892.5.4.700.10.1.1.1.19|2|1 +1.3.6.1.4.1.674.10892.5.4.700.10.1.1.6.31|2|6 +1.3.6.1.4.1.674.10892.5.4.700.10.1.2.1.19|2|19 +1.3.6.1.4.1.674.10892.5.4.700.10.1.2.6.31|2|31 +1.3.6.1.4.1.674.10892.5.4.700.10.1.3.1.19|2|2 +1.3.6.1.4.1.674.10892.5.4.700.10.1.3.6.31|2|1 +1.3.6.1.4.1.674.10892.5.4.700.10.1.4.1.19|2|6 +1.3.6.1.4.1.674.10892.5.4.700.10.1.4.6.31|2|4 +1.3.6.1.4.1.674.10892.5.4.700.10.1.5.1.19|2|4 +1.3.6.1.4.1.674.10892.5.4.700.10.1.5.6.31|2|7 +1.3.6.1.4.1.674.10892.5.4.700.10.1.6.1.19|2|6 +1.3.6.1.4.1.674.10892.5.4.700.10.1.6.6.31|2|29 +1.3.6.1.4.1.674.10892.5.4.700.10.1.7.1.19|4x|64726976696e67206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.5.4.700.10.1.7.6.31|4x|7468656972204a6164656420717561696e746c79206275742062757420746865697220717561696e746c79206b657074206163746564 +1.3.6.1.4.1.674.10892.5.4.700.10.1.8.1.19|2|3 +1.3.6.1.4.1.674.10892.5.4.700.10.1.8.6.31|2|6 +1.3.6.1.4.1.674.10892.5.4.700.12.1.1.8.11|2|8 +1.3.6.1.4.1.674.10892.5.4.700.12.1.1.19.3|2|19 +1.3.6.1.4.1.674.10892.5.4.700.12.1.2.8.11|2|11 +1.3.6.1.4.1.674.10892.5.4.700.12.1.2.19.3|2|3 +1.3.6.1.4.1.674.10892.5.4.700.12.1.3.8.11|2|2 +1.3.6.1.4.1.674.10892.5.4.700.12.1.3.19.3|2|1 +1.3.6.1.4.1.674.10892.5.4.700.12.1.4.8.11|2|2 +1.3.6.1.4.1.674.10892.5.4.700.12.1.4.19.3|2|1 +1.3.6.1.4.1.674.10892.5.4.700.12.1.5.8.11|2|2 +1.3.6.1.4.1.674.10892.5.4.700.12.1.5.19.3|2|5 +1.3.6.1.4.1.674.10892.5.4.700.12.1.6.8.11|2|11 +1.3.6.1.4.1.674.10892.5.4.700.12.1.6.19.3|2|21 +1.3.6.1.4.1.674.10892.5.4.700.12.1.7.8.11|2|9 +1.3.6.1.4.1.674.10892.5.4.700.12.1.7.19.3|2|10 +1.3.6.1.4.1.674.10892.5.4.700.12.1.8.8.11|4|acted +1.3.6.1.4.1.674.10892.5.4.700.12.1.8.19.3|4x|6163746564206f78656e20627574207a6f6d626965732064726976696e67206163746564204a61646564 +1.3.6.1.4.1.674.10892.5.4.700.12.1.9.8.11|2|23 +1.3.6.1.4.1.674.10892.5.4.700.12.1.9.19.3|2|18 +1.3.6.1.4.1.674.10892.5.4.700.12.1.10.8.11|2|3 +1.3.6.1.4.1.674.10892.5.4.700.12.1.10.19.3|2|26 +1.3.6.1.4.1.674.10892.5.4.700.12.1.11.8.11|2|13 +1.3.6.1.4.1.674.10892.5.4.700.12.1.11.19.3|2|18 +1.3.6.1.4.1.674.10892.5.4.700.12.1.12.8.11|2|7 +1.3.6.1.4.1.674.10892.5.4.700.12.1.12.19.3|2|17 +1.3.6.1.4.1.674.10892.5.4.700.12.1.13.8.11|2|21 +1.3.6.1.4.1.674.10892.5.4.700.12.1.13.19.3|2|7 +1.3.6.1.4.1.674.10892.5.4.700.12.1.14.8.11|2|7 +1.3.6.1.4.1.674.10892.5.4.700.12.1.14.19.3|2|30 +1.3.6.1.4.1.674.10892.5.4.700.12.1.15.8.11|2|11 +1.3.6.1.4.1.674.10892.5.4.700.12.1.15.19.3|2|4 +1.3.6.1.4.1.674.10892.5.4.700.12.1.16.8.11|2|4 +1.3.6.1.4.1.674.10892.5.4.700.12.1.16.19.3|2|2 +1.3.6.1.4.1.674.10892.5.4.700.12.1.17.8.11|2|8 +1.3.6.1.4.1.674.10892.5.4.700.12.1.17.19.3|2|2 +1.3.6.1.4.1.674.10892.5.4.700.12.1.18.8.11|2|1 +1.3.6.1.4.1.674.10892.5.4.700.12.1.18.19.3|2|1 +1.3.6.1.4.1.674.10892.5.4.700.12.1.19.8.11|4|acted +1.3.6.1.4.1.674.10892.5.4.700.12.1.19.19.3|4x|717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.5.4.700.20.1.1.7.28|2|7 +1.3.6.1.4.1.674.10892.5.4.700.20.1.1.15.28|2|15 +1.3.6.1.4.1.674.10892.5.4.700.20.1.2.7.28|2|28 +1.3.6.1.4.1.674.10892.5.4.700.20.1.2.15.28|2|28 +1.3.6.1.4.1.674.10892.5.4.700.20.1.3.7.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.3.15.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.4.7.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.4.15.28|2|6 +1.3.6.1.4.1.674.10892.5.4.700.20.1.5.7.28|2|6 +1.3.6.1.4.1.674.10892.5.4.700.20.1.5.15.28|2|3 +1.3.6.1.4.1.674.10892.5.4.700.20.1.6.7.28|2|12 +1.3.6.1.4.1.674.10892.5.4.700.20.1.6.15.28|2|14 +1.3.6.1.4.1.674.10892.5.4.700.20.1.7.7.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.7.15.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.8.7.28|4x|717561696e746c792074686569722062757420666f7277617264206163746564206163746564206b657074204a6164656420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.700.20.1.8.15.28|4x|6275742064726976696e6720717561696e746c79206b657074204a61646564 +1.3.6.1.4.1.674.10892.5.4.700.20.1.9.7.28|2|9 +1.3.6.1.4.1.674.10892.5.4.700.20.1.9.15.28|2|24 +1.3.6.1.4.1.674.10892.5.4.700.20.1.10.7.28|2|14 +1.3.6.1.4.1.674.10892.5.4.700.20.1.10.15.28|2|22 +1.3.6.1.4.1.674.10892.5.4.700.20.1.11.7.28|2|27 +1.3.6.1.4.1.674.10892.5.4.700.20.1.11.15.28|2|1 +1.3.6.1.4.1.674.10892.5.4.700.20.1.12.7.28|2|12 +1.3.6.1.4.1.674.10892.5.4.700.20.1.12.15.28|2|25 +1.3.6.1.4.1.674.10892.5.4.700.20.1.13.7.28|2|24 +1.3.6.1.4.1.674.10892.5.4.700.20.1.13.15.28|2|7 +1.3.6.1.4.1.674.10892.5.4.700.20.1.14.7.28|2|31 +1.3.6.1.4.1.674.10892.5.4.700.20.1.14.15.28|2|22 +1.3.6.1.4.1.674.10892.5.4.700.20.1.15.7.28|2|4 +1.3.6.1.4.1.674.10892.5.4.700.20.1.15.15.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.16.7.28|2|1 +1.3.6.1.4.1.674.10892.5.4.700.20.1.16.15.28|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.1.4.24|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.1.19.1|2|19 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.2.4.24|2|24 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.2.19.1|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.3.4.24|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.3.19.1|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.4.4.24|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.4.19.1|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.5.4.24|2|3 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.5.19.1|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.7.4.24|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.7.19.1|2|3 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.8.4.24|4x|4a61646564206b6570742064726976696e672064726976696e6720666f7277617264207468656972206163746564 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.8.19.1|4|driving +1.3.6.1.4.1.674.10892.5.4.1100.30.1.9.4.24|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.9.19.1|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.10.4.24|2|17 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.10.19.1|2|18 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.11.4.24|2|27 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.11.19.1|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.12.4.24|2|20 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.12.19.1|2|9 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.13.4.24|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.13.19.1|2|0 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.14.4.24|2|15 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.14.19.1|2|7 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.16.4.24|4x|7a6f6d6269657320717561696e746c792064726976696e6720717561696e746c7920666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.16.19.1|4x|717561696e746c7920627574206b657074 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.17.4.24|2|25 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.17.19.1|2|30 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.18.4.24|2|16 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.18.19.1|2|17 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.19.4.24|2|19 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.19.19.1|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.20.4.24|2|17 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.20.19.1|2|29 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.21.4.24|2|8 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.21.19.1|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.22.4.24|2|19 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.22.19.1|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.23.4.24|4x|627574206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.23.19.1|4x|6275742064726976696e67206f78656e206275742064726976696e67206f78656e206f78656e206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.26.4.24|4x|746865697220666f7277617264206f78656e +1.3.6.1.4.1.674.10892.5.4.1100.30.1.26.19.1|4x|7a6f6d6269657320717561696e746c79204a6164656420627574204a616465642064726976696e6720616374656420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.1.3.11|2|3 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.1.18.21|2|18 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.2.3.11|2|11 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.2.18.21|2|21 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.3.3.11|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.3.18.21|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.4.3.11|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.4.18.21|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.5.3.11|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.5.18.21|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.6.3.11|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.6.18.21|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.7.3.11|4x|64726976696e67207a6f6d62696573206f78656e2064726976696e67206b657074204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.7.18.21|4x|6b657074206b657074 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.1.22.21|2|22 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.1.29.4|2|29 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.2.22.21|2|21 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.2.29.4|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.3.22.21|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.3.29.4|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.4.22.21|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.4.29.4|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.5.22.21|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.5.29.4|2|3 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.7.22.21|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.7.29.4|2|26 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.8.22.21|4x|717561696e746c7920666f72776172642074686569722064726976696e67 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.8.29.4|4x|6b657074207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.10.22.21|4|forward +1.3.6.1.4.1.674.10892.5.4.1100.50.1.10.29.4|4x|6f78656e207468656972204a61646564 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.14.22.21|2|7 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.14.29.4|2|28 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.15.22.21|2|30 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.15.29.4|2|30 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.21.22.21|4x|666f7277617264207a6f6d62696573204a61646564206b65707420717561696e746c79206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.21.29.4|4|driving +1.3.6.1.4.1.674.10892.5.4.1100.50.1.22.22.21|4x|4a61646564206163746564207468656972204a61646564207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.22.29.4|4x|7468656972206f78656e20666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.23.22.21|4x|6163746564204a61646564206163746564206f78656e2061637465642064726976696e67 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.23.29.4|4x|4a61646564207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.26.22.21|4x|6f78656e20627574206163746564207468656972206f78656e206b6570742061637465642064726976696e67204a61646564 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.26.29.4|4|kept +1.3.6.1.4.1.674.10892.5.4.1100.50.1.27.22.21|2|17 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.27.29.4|2|23 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.1.10.9|2|10 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.1.20.20|2|20 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.2.10.9|2|9 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.2.20.20|2|20 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.3.10.9|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.3.20.20|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.4.10.9|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.4.20.20|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.5.10.9|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.5.20.20|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.7.10.9|2|21 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.7.20.20|2|10 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.8.10.9|4|acted +1.3.6.1.4.1.674.10892.5.4.1100.80.1.8.20.20|4x|4a61646564204a61646564204a61646564206b657074204a61646564 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.9.10.9|4|device1 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.9.20.20|4|device2 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.12.10.9|4|kept +1.3.6.1.4.1.674.10892.5.4.1100.80.1.12.20.20|4x|7468656972206b6570742064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.1.3.23|2|3 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.1.29.25|2|29 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.2.3.23|2|23 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.2.29.25|2|25 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.3.3.23|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.3.29.25|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.4.3.23|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.4.29.25|2|11 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.6.3.23|4x|7a6f6d62696573207468656972207a6f6d62696573206163746564206163746564207468656972206275742062757420627574 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.6.29.25|4x|7468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.7.3.23|4x|7a6f6d626965732064726976696e67206f78656e +1.3.6.1.4.1.674.10892.5.4.1100.90.1.7.29.25|4x|7468656972206b657074206b657074207468656972206b657074204a6164656420666f727761726420616374656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.15.3.23|4x|9e00e0291401 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.15.29.25|4x|9e00e0291401 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.16.3.23|4x|9e00e0291401 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.16.29.25|4x|9e00e0291401 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.17.3.23|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.17.29.25|2|22 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.18.3.23|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.18.29.25|2|22 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.19.3.23|2|12 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.19.29.25|2|21 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.23.3.23|2|16 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.23.29.25|2|16 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.27.3.23|2|16 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.27.29.25|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.28.3.23|2|0 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.28.29.25|2|0 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.29.3.23|2|8 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.29.29.25|2|8 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.30.3.23|4|device1 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.30.29.25|4|device2 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.1.19.17|2|19 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.1.21.21|2|21 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.2.19.17|2|17 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.2.21.21|2|21 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.3.19.17|2|4 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.3.21.21|2|2 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.4.19.17|2|2 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.4.21.21|2|8 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.5.19.17|2|3 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.5.21.21|2|1 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.6.19.17|2|1 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.6.21.21|2|1 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.7.19.17|2|13 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.7.21.21|2|10 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.8.19.17|4|slot1 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.8.21.21|4|slot2 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.11.19.17|2|5 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.11.21.21|2|3 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.1.2.11|2|2 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.1.8.3|2|8 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.2.2.11|2|11 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.2.8.3|2|3 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.3.2.11|2|1 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.3.8.3|2|2 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.6.2.11|4x|666f7277617264206b6570742062757420717561696e746c79206b657074207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.6.8.3|4x|6b657074204a61646564 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.7.2.11|4x|6f78656e20717561696e746c79204a61646564207a6f6d6269657320627574207468656972 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.7.8.3|4x|6f78656e2064726976696e67206b657074207a6f6d62696573207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.8.2.11|4x|627574207a6f6d6269657320627574206f78656e206163746564206163746564 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.8.8.3|4x|666f727761726420666f72776172642061637465642064726976696e67206b6570742064726976696e672064726976696e67204a61646564206f78656e +1.3.6.1.4.1.674.10892.5.4.2000.10.1.9.2.11|4x|666f72776172642062757420746865697220627574207a6f6d6269657320717561696e746c79207a6f6d62696573204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.9.8.3|4x|7468656972207468656972204a6164656420627574206163746564204a6164656420616374656420666f72776172642064726976696e67 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.12.2.11|4x|627574206b657074204a61646564 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.12.8.3|4x|717561696e746c7920717561696e746c79206f78656e206f78656e206b657074206b65707420746865697220616374656420666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.1.4|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.1.21|2|21 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.2.4|4|controller1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.2.21|4|controller2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.7.4|2|10 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.7.21|2|21 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.8.4|4x|616374656420627574206b65707420717561696e746c79206f78656e207a6f6d6269657320717561696e746c7920666f7277617264206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.8.21|4x|6f78656e206b6570742064726976696e6720746865697220616374656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.9.4|2|20 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.9.21|2|30 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.37.4|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.37.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.38.4|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.38.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.41.4|4x|6b657074207a6f6d62696573207468656972207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.41.21|4x|4a61646564206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.42.4|4x|717561696e746c79206b65707420616374656420616374656420627574206163746564207a6f6d6269657320717561696e746c7920666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.42.21|4|acted +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.48.4|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.48.21|2|20 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.49.4|2|22 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.49.21|2|17 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.50.4|2|18 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.50.21|2|27 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.51.4|2|23 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.51.21|2|22 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.52.4|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.52.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.53.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.53.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.59.4|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.59.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.60.4|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.60.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.61.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.61.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.62.4|2|31 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.62.21|2|31 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.69.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.69.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.70.4|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.70.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.71.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.71.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.72.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.72.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.73.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.73.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.74.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.74.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.75.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.75.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.76.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.76.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.77.4|4x|717561696e746c79206f78656e2064726976696e6720717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.77.21|4x|4a6164656420666f7277617264204a6164656420717561696e746c79206f78656e207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.78.4|4x|717561696e746c79207a6f6d626965732061637465642064726976696e67206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.78.21|4x|64726976696e6720717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.79.4|4x|6b65707420717561696e746c792064726976696e672064726976696e6720627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.79.21|4x|717561696e746c7920717561696e746c79207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.80.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.80.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.81.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.81.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.82.4|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.82.21|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.83.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.83.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.84.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.84.21|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.1.7|2|7 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.1.26|2|26 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.2.7|4x|717561696e746c7920717561696e746c79207a6f6d6269657320666f727761726420616374656420717561696e746c79206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.2.26|4x|666f72776172642064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.4.7|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.4.26|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.8.7|4|their +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.8.26|4|Jaded +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.9.7|4x|6f78656e20627574206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.9.26|4x|6b65707420627574206b657074206f78656e207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.19.7|4|kept +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.19.26|4x|6b657074207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.23.7|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.23.26|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.24.7|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.24.26|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.26.7|4x|4a616465642064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.26.26|4x|4a61646564206f78656e2064726976696e67204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.30.7|4x|666f7277617264207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.30.26|4x|6f78656e206f78656e2064726976696e67206275742064726976696e67207468656972206f78656e207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.31.7|2|15 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.31.26|2|23 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.32.7|2|28 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.32.26|2|28 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.40.7|4x|7468656972206f78656e207468656972206163746564204a6164656420666f727761726420666f72776172642064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.40.26|4x|6275742074686569722074686569722062757420666f72776172642062757420616374656420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.41.7|4x|6163746564207468656972207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.41.26|4x|717561696e746c79207a6f6d6269657320717561696e746c79204a61646564206f78656e2064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.42.7|4x|666f7277617264204a61646564206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.42.26|4x|64726976696e67206b65707420717561696e746c79204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.43.7|4x|7468656972206f78656e20666f7277617264206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.43.26|4x|6b657074206b65707420627574206b657074206b657074206f78656e206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.44.7|4x|666f7277617264204a6164656420717561696e746c7920666f72776172642061637465642064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.44.26|4x|61637465642074686569722064726976696e67206b6570742064726976696e67206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.45.7|4x|64726976696e6720717561696e746c792064726976696e6720627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.45.26|4x|717561696e746c79204a61646564206275742064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.46.7|4|acted +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.46.26|4|but +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.47.7|4|their +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.47.26|4x|6b65707420666f7277617264204a6164656420666f7277617264206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.48.7|4x|7468656972204a61646564206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.48.26|4x|64726976696e67207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.49.7|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.49.26|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.1.8|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.1.21|2|21 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.2.8|4x|6469736b31 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.2.21|4x|6469736b32 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.3.8|4x|4a61646564204a61646564206f78656e204a61646564206b657074206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.3.21|4x|666f7277617264206f78656e2062757420627574204a6164656420666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.4.8|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.4.21|2|9 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.6.8|4x|717561696e746c7920717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.6.21|4x|6163746564206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.7.8|4x|666f727761726420616374656420616374656420666f7277617264207a6f6d62696573206163746564206f78656e207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.7.21|4x|6b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.8.8|4|driving +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.8.21|4x|627574206b657074204a61646564207a6f6d6269657320616374656420627574206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.11.8|2|20 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.11.21|2|9 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.17.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.17.21|2|14 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.19.8|2|30 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.19.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.21.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.21.21|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.22.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.22.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.24.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.24.21|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.27.8|4x|74686569722064726976696e67206f78656e207a6f6d6269657320746865697220666f727761726420746865697220717561696e746c7920717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.27.21|4x|666f727761726420666f7277617264207a6f6d62696573206b65707420717561696e746c79206f78656e207a6f6d62696573206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.28.8|4x|6f78656e206163746564204a6164656420717561696e746c79207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.28.21|4|but +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.29.8|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.29.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.30.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.30.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.31.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.31.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.32.8|4x|64726976696e67206f78656e206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.32.21|4x|717561696e746c7920666f727761726420746865697220627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.33.8|4|forward +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.33.21|4|but +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.34.8|4x|4a61646564206f78656e206f78656e206163746564204a61646564207a6f6d62696573206275742062757420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.34.21|4x|717561696e746c792064726976696e6720666f7277617264207a6f6d62696573206b657074207a6f6d62696573206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.35.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.35.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.42.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.42.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.49.8|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.49.21|2|19 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.50.8|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.50.21|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.51.8|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.51.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.52.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.52.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.53.8|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.53.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.54.8|4x|666f7277617264206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.54.21|4x|6b657074206f78656e206f78656e2064726976696e67206163746564204a61646564207a6f6d62696573206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.55.8|4x|6f78656e20666f7277617264206f78656e206f78656e20666f727761726420627574207a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.55.21|4x|627574207a6f6d626965732062757420746865697220717561696e746c7920746865697220717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.57.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.57.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.58.8|2|29 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.58.21|2|9 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.59.8|4x|666f7277617264204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.59.21|4|acted +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.60.8|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.60.21|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.61.8|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.61.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.1.19|2|19 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.1.24|2|24 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.2.19|4x|64726976696e6720717561696e746c792062757420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.2.24|4|their +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.4.19|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.4.24|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.11.19|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.11.24|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.15.19|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.15.24|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.20.19|4|zombies +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.20.24|4|but +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.21.19|4|driving +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.21.24|4x|666f7277617264207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.1.13|2|13 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.1.16|2|16 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.2.13|4x|737570706c7931 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.2.16|4x|737570706c7932 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.4.13|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.4.16|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.7.13|4x|7468656972206275742064726976696e67207a6f6d62696573206b65707420666f727761726420717561696e746c7920666f7277617264204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.7.16|4x|717561696e746c7920717561696e746c7920666f72776172642074686569722064726976696e6720717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.9.13|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.9.16|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.15.13|4x|666f7277617264207468656972206f78656e206163746564206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.15.16|4x|717561696e746c7920627574206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.16.13|4x|4a6164656420627574206b65707420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.16.16|4x|62757420717561696e746c7920627574207a6f6d62696573204a61646564206163746564207468656972204a6164656420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.1.6|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.1.8|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.2.6|4x|7a6f6d62696573206b657074204a61646564206f78656e2064726976696e67207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.2.8|4x|6b65707420627574207a6f6d626965732061637465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.4.6|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.4.8|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.7.6|2|24 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.7.8|2|25 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.8.6|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.8.8|2|22 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.9.6|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.9.8|2|17 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.10.6|2|21 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.10.8|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.11.6|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.11.8|2|14 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.13.6|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.13.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.15.6|4|Jaded +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.15.8|4x|64726976696e6720717561696e746c79204a6164656420717561696e746c79206f78656e20717561696e746c7920627574207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.16.6|4x|7a6f6d626965732064726976696e67204a6164656420616374656420717561696e746c7920627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.16.8|4x|6b657074204a6164656420627574207a6f6d626965732064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.1.14|2|14 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.1.30|2|30 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.2.14|4x|6163746564207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.2.30|4x|6b657074204a616465642064726976696e67204a61646564207a6f6d62696573206f78656e20627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.4.14|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.4.30|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.6.14|4x|64726976696e67204a616465642062757420627574206163746564204a6164656420717561696e746c7920627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.6.30|4x|666f7277617264206163746564206f78656e20666f7277617264204a6164656420666f727761726420666f72776172642064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.8.14|4x|6f78656e2064726976696e672062757420717561696e746c79206f78656e204a6164656420666f7277617264206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.8.30|4x|4a6164656420616374656420627574206b657074206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.11.14|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.11.30|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.15.14|4x|717561696e746c79207a6f6d626965732061637465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.15.30|4x|746865697220627574206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.16.14|4x|7a6f6d626965732064726976696e67207468656972204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.16.30|4|zombies +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.1.17|2|17 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.1.18|2|18 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.4.17|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.4.18|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.6.17|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.6.18|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.10.17|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.10.18|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.20.17|4x|627574206275742061637465642064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.20.18|4x|6f78656e206163746564204a6164656420717561696e746c79206b65707420666f727761726420717561696e746c7920666f7277617264204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.21.17|4|battery1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.21.18|4|battery2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.1.2|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.1.8|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.2.2|4x|64726976696e6720717561696e746c79206b657074204a6164656420666f72776172642062757420666f7277617264206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.2.8|4x|7a6f6d6269657320717561696e746c79206b657074206b6570742062757420717561696e746c7920666f727761726420717561696e746c79206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.4.2|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.4.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.6.2|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.6.8|2|25 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.10.2|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.10.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.11.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.11.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.13.2|2|7 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.13.8|2|10 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.14.2|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.14.8|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.20.2|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.20.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.23.2|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.23.8|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.24.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.24.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.25.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.25.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.26.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.26.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.30.2|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.30.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.31.2|2|12 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.31.8|2|17 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.32.2|4x|4a6164656420717561696e746c7920717561696e746c792064726976696e67206b657074207468656972206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.32.8|4x|6f78656e206b6570742064726976696e6720717561696e746c79207a6f6d62696573204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.33.2|4x|6f78656e2064726976696e67204a61646564206f78656e206f78656e204a61646564204a616465642062757420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.33.8|4x|62757420746865697220666f7277617264206b65707420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.34.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.34.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.35.2|4x|4a6164656420627574204a61646564207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.35.8|4x|6f78656e20616374656420746865697220746865697220666f727761726420627574204a61646564207a6f6d62696573206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.36.2|4x|6163746564206f78656e206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.36.8|4x|4a61646564207468656972207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.37.2|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.37.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.38.2|2|31 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.38.8|2|27 diff --git a/test/new-e2e/ndm/snmp/compose/data/if.snmprec b/test/new-e2e/ndm/snmp/compose/data/if.snmprec new file mode 100644 index 00000000000000..d8dddc43c8eb3a --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/if.snmprec @@ -0,0 +1,2364 @@ +1.3.6.1.2.1.1.1.0|4x|4249472d4950205669727475616c2045646974696f6e203a204c696e757820332e31302e302d3836322e31342e342e656c372e76652e7838365f3634203a204249472d495020736f6674776172652072656c656173652031352e302e312c206275696c6420302e302e3131 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.3375.2.1.3.4.43 +1.3.6.1.2.1.1.3.0|67|181753721 +1.3.6.1.2.1.1.4.0|4x|437573746f6d6572204e616d65203c61646d696e40637573746f6d65722e636f6d3e +1.3.6.1.2.1.1.5.0|4x|66352d6269672d69702d6164632d676f6f642d62796f6c2d312d766d2e632e64617461646f672d696e746567726174696f6e732d6c61622e696e7465726e616c +1.3.6.1.2.1.1.6.0|4x|4e6574776f726b20436c6f7365742031 +1.3.6.1.2.1.1.7.0|2|78 +1.3.6.1.2.1.1.8.0|67|8266 +1.3.6.1.2.1.1.9.1.2.1|6|1.3.6.1.6.3.11.3.1.1 +1.3.6.1.2.1.1.9.1.2.2|6|1.3.6.1.6.3.15.2.1.1 +1.3.6.1.2.1.1.9.1.2.3|6|1.3.6.1.6.3.10.3.1.1 +1.3.6.1.2.1.1.9.1.2.4|6|1.3.6.1.6.3.1 +1.3.6.1.2.1.1.9.1.2.5|6|1.3.6.1.6.3.16.2.2.1 +1.3.6.1.2.1.1.9.1.2.6|6|1.3.6.1.6.3.13.3.1.3 +1.3.6.1.2.1.1.9.1.2.7|6|1.3.6.1.2.1.92 +1.3.6.1.2.1.1.9.1.2.8|6|1.3.6.1.2.1.31 +1.3.6.1.2.1.1.9.1.2.9|6|1.3.6.1.2.1.48 +1.3.6.1.2.1.1.9.1.3.1|4x|546865204d494220666f72204d6573736167652050726f63657373696e6720616e64204469737061746368696e672e +1.3.6.1.2.1.1.9.1.3.2|4x|546865206d616e6167656d656e7420696e666f726d6174696f6e20646566696e6974696f6e7320666f722074686520534e4d5020557365722d6261736564205365637572697479204d6f64656c2e +1.3.6.1.2.1.1.9.1.3.3|4x|54686520534e4d50204d616e6167656d656e7420417263686974656374757265204d49422e +1.3.6.1.2.1.1.9.1.3.4|4x|546865204d4942206d6f64756c6520666f7220534e4d50763220656e746974696573 +1.3.6.1.2.1.1.9.1.3.5|4x|566965772d62617365642041636365737320436f6e74726f6c204d6f64656c20666f7220534e4d502e +1.3.6.1.2.1.1.9.1.3.6|4x|546865204d4942206d6f64756c657320666f72206d616e6167696e6720534e4d50204e6f74696669636174696f6e2c20706c75732066696c746572696e672e +1.3.6.1.2.1.1.9.1.3.7|4x|546865204d4942206d6f64756c6520666f72206c6f6767696e6720534e4d50204e6f74696669636174696f6e732e +1.3.6.1.2.1.1.9.1.3.8|4x|546865204d4942206d6f64756c6520746f2064657363726962652067656e65726963206f626a6563747320666f72206e6574776f726b20696e74657266616365207375622d6c6179657273 +1.3.6.1.2.1.1.9.1.3.9|4x|546865204d4942206d6f64756c6520666f72206d616e6167696e6720495020696d706c656d656e746174696f6e73 +1.3.6.1.2.1.1.9.1.4.1|67|92 +1.3.6.1.2.1.1.9.1.4.2|67|92 +1.3.6.1.2.1.1.9.1.4.3|67|92 +1.3.6.1.2.1.1.9.1.4.4|67|96 +1.3.6.1.2.1.1.9.1.4.5|67|96 +1.3.6.1.2.1.1.9.1.4.6|67|108 +1.3.6.1.2.1.1.9.1.4.7|67|108 +1.3.6.1.2.1.1.9.1.4.8|67|8261 +1.3.6.1.2.1.1.9.1.4.9|67|8266 +1.3.6.1.2.1.2.1.0|2|5 +1.3.6.1.2.1.2.2.1.1.32|2|32 +1.3.6.1.2.1.2.2.1.1.48|2|48 +1.3.6.1.2.1.2.2.1.1.80|2|80 +1.3.6.1.2.1.2.2.1.1.96|2|96 +1.3.6.1.2.1.2.2.1.1.112|2|112 +1.3.6.1.2.1.2.2.1.2.32|4|mgmt +1.3.6.1.2.1.2.2.1.2.48|4x|312e30 +1.3.6.1.2.1.2.2.1.2.80|4x|2f436f6d6d6f6e2f687474702d74756e6e656c +1.3.6.1.2.1.2.2.1.2.96|4x|2f436f6d6d6f6e2f736f636b732d74756e6e656c +1.3.6.1.2.1.2.2.1.2.112|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.2.1.2.2.1.3.32|2|6 +1.3.6.1.2.1.2.2.1.3.48|2|6 +1.3.6.1.2.1.2.2.1.3.80|2|0 +1.3.6.1.2.1.2.2.1.3.96|2|0 +1.3.6.1.2.1.2.2.1.3.112|2|6 +1.3.6.1.2.1.2.2.1.4.32|2|1460 +1.3.6.1.2.1.2.2.1.4.48|2|1460 +1.3.6.1.2.1.2.2.1.4.80|2|0 +1.3.6.1.2.1.2.2.1.4.96|2|0 +1.3.6.1.2.1.2.2.1.4.112|2|1460 +1.3.6.1.2.1.2.2.1.5.32|66|100000000 +1.3.6.1.2.1.2.2.1.5.48|66|4294967295 +1.3.6.1.2.1.2.2.1.5.80|66|0 +1.3.6.1.2.1.2.2.1.5.96|66|0 +1.3.6.1.2.1.2.2.1.5.112|66|4294967295 +1.3.6.1.2.1.2.2.1.6.32|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.48|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.80|4x|42010aa40034 +1.3.6.1.2.1.2.2.1.6.96|4x|42010aa40034 +1.3.6.1.2.1.2.2.1.6.112|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.7.32|2|1 +1.3.6.1.2.1.2.2.1.7.48|2|1 +1.3.6.1.2.1.2.2.1.7.80|2|1 +1.3.6.1.2.1.2.2.1.7.96|2|1 +1.3.6.1.2.1.2.2.1.7.112|2|1 +1.3.6.1.2.1.2.2.1.8.32|2|1 +1.3.6.1.2.1.2.2.1.8.48|2|1 +1.3.6.1.2.1.2.2.1.8.80|2|4 +1.3.6.1.2.1.2.2.1.8.96|2|4 +1.3.6.1.2.1.2.2.1.8.112|2|1 +1.3.6.1.2.1.2.2.1.9.32|67|0 +1.3.6.1.2.1.2.2.1.9.48|67|0 +1.3.6.1.2.1.2.2.1.9.80|67|0 +1.3.6.1.2.1.2.2.1.9.96|67|0 +1.3.6.1.2.1.2.2.1.9.112|67|0 +1.3.6.1.2.1.2.2.1.10.32|65|461436066 +1.3.6.1.2.1.2.2.1.10.48|65|605861862 +1.3.6.1.2.1.2.2.1.10.80|65|0 +1.3.6.1.2.1.2.2.1.10.96|65|0 +1.3.6.1.2.1.2.2.1.10.112|65|396657417 +1.3.6.1.2.1.2.2.1.11.32|65|928558 +1.3.6.1.2.1.2.2.1.11.48|65|797516 +1.3.6.1.2.1.2.2.1.11.80|65|0 +1.3.6.1.2.1.2.2.1.11.96|65|0 +1.3.6.1.2.1.2.2.1.11.112|65|896960 +1.3.6.1.2.1.2.2.1.12.32|65|0 +1.3.6.1.2.1.2.2.1.12.48|65|0 +1.3.6.1.2.1.2.2.1.12.80|65|0 +1.3.6.1.2.1.2.2.1.12.96|65|0 +1.3.6.1.2.1.2.2.1.12.112|65|0 +1.3.6.1.2.1.2.2.1.13.32|65|0 +1.3.6.1.2.1.2.2.1.13.48|65|0 +1.3.6.1.2.1.2.2.1.13.80|65|0 +1.3.6.1.2.1.2.2.1.13.96|65|0 +1.3.6.1.2.1.2.2.1.13.112|65|226244 +1.3.6.1.2.1.2.2.1.14.32|65|0 +1.3.6.1.2.1.2.2.1.14.48|65|0 +1.3.6.1.2.1.2.2.1.14.80|65|0 +1.3.6.1.2.1.2.2.1.14.96|65|0 +1.3.6.1.2.1.2.2.1.14.112|65|0 +1.3.6.1.2.1.2.2.1.15.32|65|0 +1.3.6.1.2.1.2.2.1.15.48|65|0 +1.3.6.1.2.1.2.2.1.15.80|65|0 +1.3.6.1.2.1.2.2.1.15.96|65|0 +1.3.6.1.2.1.2.2.1.15.112|65|0 +1.3.6.1.2.1.2.2.1.16.32|65|311840645 +1.3.6.1.2.1.2.2.1.16.48|65|67333343 +1.3.6.1.2.1.2.2.1.16.80|65|0 +1.3.6.1.2.1.2.2.1.16.96|65|0 +1.3.6.1.2.1.2.2.1.16.112|65|405970846 +1.3.6.1.2.1.2.2.1.17.32|65|771556 +1.3.6.1.2.1.2.2.1.17.48|65|521981 +1.3.6.1.2.1.2.2.1.17.80|65|0 +1.3.6.1.2.1.2.2.1.17.96|65|0 +1.3.6.1.2.1.2.2.1.17.112|65|878067 +1.3.6.1.2.1.2.2.1.18.32|65|0 +1.3.6.1.2.1.2.2.1.18.48|65|0 +1.3.6.1.2.1.2.2.1.18.80|65|0 +1.3.6.1.2.1.2.2.1.18.96|65|0 +1.3.6.1.2.1.2.2.1.18.112|65|0 +1.3.6.1.2.1.2.2.1.19.32|65|0 +1.3.6.1.2.1.2.2.1.19.48|65|0 +1.3.6.1.2.1.2.2.1.19.80|65|0 +1.3.6.1.2.1.2.2.1.19.96|65|0 +1.3.6.1.2.1.2.2.1.19.112|65|0 +1.3.6.1.2.1.2.2.1.20.32|65|0 +1.3.6.1.2.1.2.2.1.20.48|65|0 +1.3.6.1.2.1.2.2.1.20.80|65|0 +1.3.6.1.2.1.2.2.1.20.96|65|0 +1.3.6.1.2.1.2.2.1.20.112|65|0 +1.3.6.1.2.1.2.2.1.21.32|66|0 +1.3.6.1.2.1.2.2.1.21.48|66|0 +1.3.6.1.2.1.2.2.1.21.80|66|0 +1.3.6.1.2.1.2.2.1.21.96|66|0 +1.3.6.1.2.1.2.2.1.21.112|66|0 +1.3.6.1.2.1.2.2.1.22.32|6|0.0 +1.3.6.1.2.1.2.2.1.22.48|6|0.0 +1.3.6.1.2.1.2.2.1.22.80|6|0.0 +1.3.6.1.2.1.2.2.1.22.96|6|0.0 +1.3.6.1.2.1.2.2.1.22.112|6|0.0 +1.3.6.1.2.1.4.1.0|2|2 +1.3.6.1.2.1.4.2.0|2|64 +1.3.6.1.2.1.4.13.0|2|30 +1.3.6.1.2.1.4.20.1.1.10.164.0.51|64x|0aa40033 +1.3.6.1.2.1.4.20.1.2.10.164.0.51|2|32 +1.3.6.1.2.1.4.20.1.3.10.164.0.51|64x|ffffffff +1.3.6.1.2.1.4.20.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.25.0|2|2 +1.3.6.1.2.1.4.26.0|2|64 +1.3.6.1.2.1.4.31.1.1.1.1|2|1 +1.3.6.1.2.1.4.31.1.1.1.2|2|2 +1.3.6.1.2.1.4.31.1.1.3.1|65|8634962 +1.3.6.1.2.1.4.31.1.1.3.2|65|15145 +1.3.6.1.2.1.4.31.1.1.4.1|70|8634962 +1.3.6.1.2.1.4.31.1.1.4.2|70|15145 +1.3.6.1.2.1.4.31.1.1.7.1|65|0 +1.3.6.1.2.1.4.31.1.1.7.2|65|0 +1.3.6.1.2.1.4.31.1.1.14.1|65|0 +1.3.6.1.2.1.4.31.1.1.14.2|65|0 +1.3.6.1.2.1.4.31.1.1.16.1|65|0 +1.3.6.1.2.1.4.31.1.1.16.2|65|0 +1.3.6.1.2.1.4.31.1.1.26.1|65|0 +1.3.6.1.2.1.4.31.1.1.26.2|65|0 +1.3.6.1.2.1.4.31.1.1.28.1|65|0 +1.3.6.1.2.1.4.31.1.1.28.2|65|0 +1.3.6.1.2.1.4.31.1.1.30.1|65|8624653 +1.3.6.1.2.1.4.31.1.1.30.2|65|0 +1.3.6.1.2.1.4.31.1.1.31.1|70|8624653 +1.3.6.1.2.1.4.31.1.1.31.2|70|0 +1.3.6.1.2.1.4.31.1.1.34.1|65|0 +1.3.6.1.2.1.4.31.1.1.34.2|65|15145 +1.3.6.1.2.1.4.31.1.1.35.1|70|0 +1.3.6.1.2.1.4.31.1.1.35.2|70|15145 +1.3.6.1.2.1.4.31.1.1.38.1|65|0 +1.3.6.1.2.1.4.31.1.1.38.2|65|0 +1.3.6.1.2.1.4.31.1.1.39.1|70|0 +1.3.6.1.2.1.4.31.1.1.39.2|70|0 +1.3.6.1.2.1.4.31.1.1.47.1|66|2000 +1.3.6.1.2.1.4.31.1.1.47.2|66|2000 +1.3.6.1.2.1.4.32.1.5.32.1.4.10.164.0.51.32|2|2 +1.3.6.1.2.1.4.32.1.5.112.1.4.10.164.0.51.32|2|2 +1.3.6.1.2.1.4.32.1.6.32.1.4.10.164.0.51.32|2|1 +1.3.6.1.2.1.4.32.1.6.112.1.4.10.164.0.51.32|2|1 +1.3.6.1.2.1.4.32.1.7.32.1.4.10.164.0.51.32|2|2 +1.3.6.1.2.1.4.32.1.7.112.1.4.10.164.0.51.32|2|2 +1.3.6.1.2.1.4.32.1.8.32.1.4.10.164.0.51.32|66|4294967295 +1.3.6.1.2.1.4.32.1.8.112.1.4.10.164.0.51.32|66|4294967295 +1.3.6.1.2.1.4.32.1.9.32.1.4.10.164.0.51.32|66|4294967295 +1.3.6.1.2.1.4.32.1.9.112.1.4.10.164.0.51.32|66|4294967295 +1.3.6.1.2.1.4.33.0|2|459515095 +1.3.6.1.2.1.4.34.1.3.1.4.10.164.0.51|2|32 +1.3.6.1.2.1.4.34.1.4.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.34.1.5.1.4.10.164.0.51|6|1.3.6.1.2.1.4.32.1.5.32.1.4.10.164.0.51.32 +1.3.6.1.2.1.4.34.1.6.1.4.10.164.0.51|2|2 +1.3.6.1.2.1.4.34.1.7.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.34.1.8.1.4.10.164.0.51|67|0 +1.3.6.1.2.1.4.34.1.9.1.4.10.164.0.51|67|0 +1.3.6.1.2.1.4.34.1.10.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.34.1.11.1.4.10.164.0.51|2|3 +1.3.6.1.2.1.4.35.1.4.32.1.4.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.4.35.1.4.112.1.4.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.4.35.1.5.32.1.4.10.164.0.51|67|0 +1.3.6.1.2.1.4.35.1.5.112.1.4.10.164.0.51|67|0 +1.3.6.1.2.1.4.35.1.6.32.1.4.10.164.0.51|2|4 +1.3.6.1.2.1.4.35.1.6.112.1.4.10.164.0.51|2|4 +1.3.6.1.2.1.4.35.1.7.32.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.35.1.7.112.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.35.1.8.32.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.35.1.8.112.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.5.29.1.2.1|65|0 +1.3.6.1.2.1.5.29.1.2.2|65|15 +1.3.6.1.2.1.5.29.1.3.1|65|0 +1.3.6.1.2.1.5.29.1.3.2|65|35 +1.3.6.1.2.1.5.29.1.4.1|65|0 +1.3.6.1.2.1.5.29.1.4.2|65|30 +1.3.6.1.2.1.5.29.1.5.1|65|0 +1.3.6.1.2.1.5.29.1.5.2|65|0 +1.3.6.1.2.1.11.1.0|65|174703 +1.3.6.1.2.1.11.2.0|65|174606 +1.3.6.1.2.1.11.3.0|65|0 +1.3.6.1.2.1.11.4.0|65|0 +1.3.6.1.2.1.11.5.0|65|0 +1.3.6.1.2.1.11.6.0|65|0 +1.3.6.1.2.1.11.8.0|65|0 +1.3.6.1.2.1.11.9.0|65|0 +1.3.6.1.2.1.11.10.0|65|0 +1.3.6.1.2.1.11.11.0|65|0 +1.3.6.1.2.1.11.12.0|65|0 +1.3.6.1.2.1.11.13.0|65|795265 +1.3.6.1.2.1.11.14.0|65|0 +1.3.6.1.2.1.11.15.0|65|5815 +1.3.6.1.2.1.11.16.0|65|147446 +1.3.6.1.2.1.11.17.0|65|0 +1.3.6.1.2.1.11.18.0|65|0 +1.3.6.1.2.1.11.19.0|65|0 +1.3.6.1.2.1.11.20.0|65|0 +1.3.6.1.2.1.11.21.0|65|0 +1.3.6.1.2.1.11.22.0|65|0 +1.3.6.1.2.1.11.24.0|65|0 +1.3.6.1.2.1.11.25.0|65|0 +1.3.6.1.2.1.11.26.0|65|0 +1.3.6.1.2.1.11.27.0|65|0 +1.3.6.1.2.1.11.28.0|65|174630 +1.3.6.1.2.1.11.29.0|65|0 +1.3.6.1.2.1.11.30.0|2|2 +1.3.6.1.2.1.11.31.0|65|0 +1.3.6.1.2.1.11.32.0|65|0 +1.3.6.1.2.1.25.1.1.0|67|182098229 +1.3.6.1.2.1.25.1.2.0|4x|07e30a1504001d002d0700 +1.3.6.1.2.1.25.1.3.0|2|393216 +1.3.6.1.2.1.25.1.4.0|4x|726f20726f6f743d555549443d37313463316461302d646562372d346230332d383830642d34636564383531313965333520636f6e736f6c653d747479302020636f6e736f6c653d74747953302070616e69633d3120706c6174666f726d3d5a3130302064656661756c745f6370755f6f726465722071756965740a +1.3.6.1.2.1.25.1.5.0|66|0 +1.3.6.1.2.1.25.1.6.0|66|190 +1.3.6.1.2.1.25.1.7.0|2|0 +1.3.6.1.2.1.25.2.2.0|2|7660752 +1.3.6.1.2.1.25.2.3.1.1.1|2|1 +1.3.6.1.2.1.25.2.3.1.1.3|2|3 +1.3.6.1.2.1.25.2.3.1.1.6|2|6 +1.3.6.1.2.1.25.2.3.1.1.7|2|7 +1.3.6.1.2.1.25.2.3.1.1.8|2|8 +1.3.6.1.2.1.25.2.3.1.1.10|2|10 +1.3.6.1.2.1.25.2.3.1.1.31|2|31 +1.3.6.1.2.1.25.2.3.1.1.32|2|32 +1.3.6.1.2.1.25.2.3.1.1.37|2|37 +1.3.6.1.2.1.25.2.3.1.1.39|2|39 +1.3.6.1.2.1.25.2.3.1.1.40|2|40 +1.3.6.1.2.1.25.2.3.1.1.44|2|44 +1.3.6.1.2.1.25.2.3.1.1.50|2|50 +1.3.6.1.2.1.25.2.3.1.1.51|2|51 +1.3.6.1.2.1.25.2.3.1.1.52|2|52 +1.3.6.1.2.1.25.2.3.1.1.53|2|53 +1.3.6.1.2.1.25.2.3.1.1.54|2|54 +1.3.6.1.2.1.25.2.3.1.1.55|2|55 +1.3.6.1.2.1.25.2.3.1.1.56|2|56 +1.3.6.1.2.1.25.2.3.1.1.57|2|57 +1.3.6.1.2.1.25.2.3.1.1.58|2|58 +1.3.6.1.2.1.25.2.3.1.1.59|2|59 +1.3.6.1.2.1.25.2.3.1.2.1|6|1.3.6.1.2.1.25.2.1.2 +1.3.6.1.2.1.25.2.3.1.2.3|6|1.3.6.1.2.1.25.2.1.3 +1.3.6.1.2.1.25.2.3.1.2.6|6|1.3.6.1.2.1.25.2.1.1 +1.3.6.1.2.1.25.2.3.1.2.7|6|1.3.6.1.2.1.25.2.1.1 +1.3.6.1.2.1.25.2.3.1.2.8|6|1.3.6.1.2.1.25.2.1.1 +1.3.6.1.2.1.25.2.3.1.2.10|6|1.3.6.1.2.1.25.2.1.3 +1.3.6.1.2.1.25.2.3.1.2.31|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.32|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.37|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.39|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.40|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.44|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.50|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.51|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.52|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.53|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.54|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.55|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.56|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.57|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.58|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.59|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.3.1|4x|506879736963616c206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.3|4x|5669727475616c206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.6|4x|4d656d6f72792062756666657273 +1.3.6.1.2.1.25.2.3.1.3.7|4x|436163686564206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.8|4x|536861726564206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.10|4x|53776170207370616365 +1.3.6.1.2.1.25.2.3.1.3.31|4x|2f +1.3.6.1.2.1.25.2.3.1.3.32|4x|2f766172 +1.3.6.1.2.1.25.2.3.1.3.37|4x|2f6465762f73686d +1.3.6.1.2.1.25.2.3.1.3.39|4x|2f72756e +1.3.6.1.2.1.25.2.3.1.3.40|4x|2f7379732f66732f6367726f7570 +1.3.6.1.2.1.25.2.3.1.3.44|4x|2f757372 +1.3.6.1.2.1.25.2.3.1.3.50|4x|2f736861726564 +1.3.6.1.2.1.25.2.3.1.3.51|4x|2f7368617265642f7272642e312e32 +1.3.6.1.2.1.25.2.3.1.3.52|4x|2f61707064617461 +1.3.6.1.2.1.25.2.3.1.3.53|4x|2f636f6e666967 +1.3.6.1.2.1.25.2.3.1.3.54|4x|2f7661722f70726f6d7074 +1.3.6.1.2.1.25.2.3.1.3.55|4x|2f7661722f746d73746174 +1.3.6.1.2.1.25.2.3.1.3.56|4x|2f7661722f6c6f67 +1.3.6.1.2.1.25.2.3.1.3.57|4x|2f7661722f6c6f697063 +1.3.6.1.2.1.25.2.3.1.3.58|4x|2f72756e2f757365722f3931 +1.3.6.1.2.1.25.2.3.1.3.59|4x|2f7661722f6e616d65642f6c6962 +1.3.6.1.2.1.25.2.3.1.4.1|2|1024 +1.3.6.1.2.1.25.2.3.1.4.3|2|1024 +1.3.6.1.2.1.25.2.3.1.4.6|2|1024 +1.3.6.1.2.1.25.2.3.1.4.7|2|1024 +1.3.6.1.2.1.25.2.3.1.4.8|2|1024 +1.3.6.1.2.1.25.2.3.1.4.10|2|1024 +1.3.6.1.2.1.25.2.3.1.4.31|2|1024 +1.3.6.1.2.1.25.2.3.1.4.32|2|4096 +1.3.6.1.2.1.25.2.3.1.4.37|2|4096 +1.3.6.1.2.1.25.2.3.1.4.39|2|4096 +1.3.6.1.2.1.25.2.3.1.4.40|2|4096 +1.3.6.1.2.1.25.2.3.1.4.44|2|4096 +1.3.6.1.2.1.25.2.3.1.4.50|2|4096 +1.3.6.1.2.1.25.2.3.1.4.51|2|4096 +1.3.6.1.2.1.25.2.3.1.4.52|2|1024 +1.3.6.1.2.1.25.2.3.1.4.53|2|1024 +1.3.6.1.2.1.25.2.3.1.4.54|2|4096 +1.3.6.1.2.1.25.2.3.1.4.55|2|4096 +1.3.6.1.2.1.25.2.3.1.4.56|2|4096 +1.3.6.1.2.1.25.2.3.1.4.57|2|4096 +1.3.6.1.2.1.25.2.3.1.4.58|2|4096 +1.3.6.1.2.1.25.2.3.1.4.59|2|4096 +1.3.6.1.2.1.25.2.3.1.5.1|2|7660752 +1.3.6.1.2.1.25.2.3.1.5.3|2|8684748 +1.3.6.1.2.1.25.2.3.1.5.6|2|7660752 +1.3.6.1.2.1.25.2.3.1.5.7|2|431048 +1.3.6.1.2.1.25.2.3.1.5.8|2|54064 +1.3.6.1.2.1.25.2.3.1.5.10|2|1023996 +1.3.6.1.2.1.25.2.3.1.5.31|2|428150 +1.3.6.1.2.1.25.2.3.1.5.32|2|235782 +1.3.6.1.2.1.25.2.3.1.5.37|2|957594 +1.3.6.1.2.1.25.2.3.1.5.39|2|957594 +1.3.6.1.2.1.25.2.3.1.5.40|2|957594 +1.3.6.1.2.1.25.2.3.1.5.44|2|1296662 +1.3.6.1.2.1.25.2.3.1.5.50|2|3837692 +1.3.6.1.2.1.25.2.3.1.5.51|2|957594 +1.3.6.1.2.1.25.2.3.1.5.52|2|31729 +1.3.6.1.2.1.25.2.3.1.5.53|2|479716 +1.3.6.1.2.1.25.2.3.1.5.54|2|1024 +1.3.6.1.2.1.25.2.3.1.5.55|2|957594 +1.3.6.1.2.1.25.2.3.1.5.56|2|247878 +1.3.6.1.2.1.25.2.3.1.5.57|2|957594 +1.3.6.1.2.1.25.2.3.1.5.58|2|191519 +1.3.6.1.2.1.25.2.3.1.5.59|2|235782 +1.3.6.1.2.1.25.2.3.1.6.1|2|7551356 +1.3.6.1.2.1.25.2.3.1.6.3|2|8012156 +1.3.6.1.2.1.25.2.3.1.6.6|2|42564 +1.3.6.1.2.1.25.2.3.1.6.7|2|431048 +1.3.6.1.2.1.25.2.3.1.6.8|2|54064 +1.3.6.1.2.1.25.2.3.1.6.10|2|460800 +1.3.6.1.2.1.25.2.3.1.6.31|2|78704 +1.3.6.1.2.1.25.2.3.1.6.32|2|90615 +1.3.6.1.2.1.25.2.3.1.6.37|2|569 +1.3.6.1.2.1.25.2.3.1.6.39|2|511 +1.3.6.1.2.1.25.2.3.1.6.40|2|0 +1.3.6.1.2.1.25.2.3.1.6.44|2|1040421 +1.3.6.1.2.1.25.2.3.1.6.50|2|43169 +1.3.6.1.2.1.25.2.3.1.6.51|2|7937 +1.3.6.1.2.1.25.2.3.1.6.52|2|4516 +1.3.6.1.2.1.25.2.3.1.6.53|2|14722 +1.3.6.1.2.1.25.2.3.1.6.54|2|7 +1.3.6.1.2.1.25.2.3.1.6.55|2|4360 +1.3.6.1.2.1.25.2.3.1.6.56|2|104596 +1.3.6.1.2.1.25.2.3.1.6.57|2|0 +1.3.6.1.2.1.25.2.3.1.6.58|2|0 +1.3.6.1.2.1.25.2.3.1.6.59|2|90615 +1.3.6.1.2.1.25.3.2.1.1.196608|2|196608 +1.3.6.1.2.1.25.3.2.1.1.196609|2|196609 +1.3.6.1.2.1.25.3.2.1.1.786432|2|786432 +1.3.6.1.2.1.25.3.2.1.2.196608|6|1.3.6.1.2.1.25.3.1.3 +1.3.6.1.2.1.25.3.2.1.2.196609|6|1.3.6.1.2.1.25.3.1.3 +1.3.6.1.2.1.25.3.2.1.2.786432|6|1.3.6.1.2.1.25.3.1.12 +1.3.6.1.2.1.25.3.2.1.3.196608|4x|47656e75696e65496e74656c3a20496e74656c2852292058656f6e28522920435055204020322e303047487a +1.3.6.1.2.1.25.3.2.1.3.196609|4x|47656e75696e65496e74656c3a20496e74656c2852292058656f6e28522920435055204020322e303047487a +1.3.6.1.2.1.25.3.2.1.3.786432|4x|4775657373696e6720746861742074686572652773206120666c6f6174696e6720706f696e7420636f2d70726f636573736f72 +1.3.6.1.2.1.25.3.2.1.4.196608|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.196609|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.786432|6|0.0 +1.3.6.1.2.1.25.3.2.1.5.196608|2|2 +1.3.6.1.2.1.25.3.2.1.5.196609|2|2 +1.3.6.1.2.1.25.3.3.1.1.196608|6|0.0 +1.3.6.1.2.1.25.3.3.1.1.196609|6|0.0 +1.3.6.1.2.1.25.3.3.1.2.196608|2|8 +1.3.6.1.2.1.25.3.3.1.2.196609|2|9 +1.3.6.1.2.1.25.3.8.1.1.1|2|1 +1.3.6.1.2.1.25.3.8.1.1.2|2|2 +1.3.6.1.2.1.25.3.8.1.1.7|2|7 +1.3.6.1.2.1.25.3.8.1.1.9|2|9 +1.3.6.1.2.1.25.3.8.1.1.10|2|10 +1.3.6.1.2.1.25.3.8.1.1.14|2|14 +1.3.6.1.2.1.25.3.8.1.1.20|2|20 +1.3.6.1.2.1.25.3.8.1.1.21|2|21 +1.3.6.1.2.1.25.3.8.1.1.22|2|22 +1.3.6.1.2.1.25.3.8.1.1.23|2|23 +1.3.6.1.2.1.25.3.8.1.1.24|2|24 +1.3.6.1.2.1.25.3.8.1.1.25|2|25 +1.3.6.1.2.1.25.3.8.1.1.26|2|26 +1.3.6.1.2.1.25.3.8.1.1.27|2|27 +1.3.6.1.2.1.25.3.8.1.1.28|2|28 +1.3.6.1.2.1.25.3.8.1.1.29|2|29 +1.3.6.1.2.1.25.3.8.1.2.1|4x|2f +1.3.6.1.2.1.25.3.8.1.2.2|4x|2f766172 +1.3.6.1.2.1.25.3.8.1.2.7|4x|2f6465762f73686d +1.3.6.1.2.1.25.3.8.1.2.9|4x|2f72756e +1.3.6.1.2.1.25.3.8.1.2.10|4x|2f7379732f66732f6367726f7570 +1.3.6.1.2.1.25.3.8.1.2.14|4x|2f757372 +1.3.6.1.2.1.25.3.8.1.2.20|4x|2f736861726564 +1.3.6.1.2.1.25.3.8.1.2.21|4x|2f7368617265642f7272642e312e32 +1.3.6.1.2.1.25.3.8.1.2.22|4x|2f61707064617461 +1.3.6.1.2.1.25.3.8.1.2.23|4x|2f636f6e666967 +1.3.6.1.2.1.25.3.8.1.2.24|4x|2f7661722f70726f6d7074 +1.3.6.1.2.1.25.3.8.1.2.25|4x|2f7661722f746d73746174 +1.3.6.1.2.1.25.3.8.1.2.26|4x|2f7661722f6c6f67 +1.3.6.1.2.1.25.3.8.1.2.27|4x|2f7661722f6c6f697063 +1.3.6.1.2.1.25.3.8.1.2.28|4x|2f72756e2f757365722f3931 +1.3.6.1.2.1.25.3.8.1.2.29|4x|2f7661722f6e616d65642f6c6962 +1.3.6.1.2.1.25.3.8.1.3.1|4| +1.3.6.1.2.1.25.3.8.1.3.2|4| +1.3.6.1.2.1.25.3.8.1.3.7|4| +1.3.6.1.2.1.25.3.8.1.3.9|4| +1.3.6.1.2.1.25.3.8.1.3.10|4| +1.3.6.1.2.1.25.3.8.1.3.14|4| +1.3.6.1.2.1.25.3.8.1.3.20|4| +1.3.6.1.2.1.25.3.8.1.3.21|4| +1.3.6.1.2.1.25.3.8.1.3.22|4| +1.3.6.1.2.1.25.3.8.1.3.23|4| +1.3.6.1.2.1.25.3.8.1.3.24|4| +1.3.6.1.2.1.25.3.8.1.3.25|4| +1.3.6.1.2.1.25.3.8.1.3.26|4| +1.3.6.1.2.1.25.3.8.1.3.27|4| +1.3.6.1.2.1.25.3.8.1.3.28|4| +1.3.6.1.2.1.25.3.8.1.3.29|4| +1.3.6.1.2.1.25.3.8.1.4.1|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.2|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.7|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.9|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.10|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.14|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.20|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.21|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.22|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.23|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.24|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.25|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.26|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.27|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.28|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.29|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.5.1|2|1 +1.3.6.1.2.1.25.3.8.1.5.2|2|1 +1.3.6.1.2.1.25.3.8.1.5.7|2|1 +1.3.6.1.2.1.25.3.8.1.5.9|2|1 +1.3.6.1.2.1.25.3.8.1.5.10|2|2 +1.3.6.1.2.1.25.3.8.1.5.14|2|2 +1.3.6.1.2.1.25.3.8.1.5.20|2|1 +1.3.6.1.2.1.25.3.8.1.5.21|2|1 +1.3.6.1.2.1.25.3.8.1.5.22|2|1 +1.3.6.1.2.1.25.3.8.1.5.23|2|1 +1.3.6.1.2.1.25.3.8.1.5.24|2|1 +1.3.6.1.2.1.25.3.8.1.5.25|2|1 +1.3.6.1.2.1.25.3.8.1.5.26|2|1 +1.3.6.1.2.1.25.3.8.1.5.27|2|1 +1.3.6.1.2.1.25.3.8.1.5.28|2|1 +1.3.6.1.2.1.25.3.8.1.5.29|2|1 +1.3.6.1.2.1.25.3.8.1.6.1|2|1 +1.3.6.1.2.1.25.3.8.1.6.2|2|2 +1.3.6.1.2.1.25.3.8.1.6.7|2|2 +1.3.6.1.2.1.25.3.8.1.6.9|2|2 +1.3.6.1.2.1.25.3.8.1.6.10|2|2 +1.3.6.1.2.1.25.3.8.1.6.14|2|2 +1.3.6.1.2.1.25.3.8.1.6.20|2|2 +1.3.6.1.2.1.25.3.8.1.6.21|2|2 +1.3.6.1.2.1.25.3.8.1.6.22|2|2 +1.3.6.1.2.1.25.3.8.1.6.23|2|2 +1.3.6.1.2.1.25.3.8.1.6.24|2|2 +1.3.6.1.2.1.25.3.8.1.6.25|2|2 +1.3.6.1.2.1.25.3.8.1.6.26|2|2 +1.3.6.1.2.1.25.3.8.1.6.27|2|2 +1.3.6.1.2.1.25.3.8.1.6.28|2|2 +1.3.6.1.2.1.25.3.8.1.6.29|2|2 +1.3.6.1.2.1.25.3.8.1.7.1|2|31 +1.3.6.1.2.1.25.3.8.1.7.2|2|32 +1.3.6.1.2.1.25.3.8.1.7.7|2|37 +1.3.6.1.2.1.25.3.8.1.7.9|2|39 +1.3.6.1.2.1.25.3.8.1.7.10|2|40 +1.3.6.1.2.1.25.3.8.1.7.14|2|44 +1.3.6.1.2.1.25.3.8.1.7.20|2|50 +1.3.6.1.2.1.25.3.8.1.7.21|2|51 +1.3.6.1.2.1.25.3.8.1.7.22|2|52 +1.3.6.1.2.1.25.3.8.1.7.23|2|53 +1.3.6.1.2.1.25.3.8.1.7.24|2|54 +1.3.6.1.2.1.25.3.8.1.7.25|2|55 +1.3.6.1.2.1.25.3.8.1.7.26|2|56 +1.3.6.1.2.1.25.3.8.1.7.27|2|57 +1.3.6.1.2.1.25.3.8.1.7.28|2|58 +1.3.6.1.2.1.25.3.8.1.7.29|2|59 +1.3.6.1.2.1.25.3.8.1.8.1|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.2|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.7|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.9|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.10|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.14|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.20|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.21|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.22|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.23|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.24|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.25|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.26|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.27|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.28|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.29|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.1|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.2|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.7|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.9|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.10|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.14|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.20|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.21|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.22|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.23|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.24|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.25|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.26|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.27|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.28|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.29|4x|0000010100000000 +1.3.6.1.2.1.25.4.2.1.1.1|2|1 +1.3.6.1.2.1.25.4.2.1.1.415|2|415 +1.3.6.1.2.1.25.4.2.1.1.440|2|440 +1.3.6.1.2.1.25.4.2.1.1.447|2|447 +1.3.6.1.2.1.25.4.2.1.1.921|2|921 +1.3.6.1.2.1.25.4.2.1.1.951|2|951 +1.3.6.1.2.1.25.4.2.1.1.977|2|977 +1.3.6.1.2.1.25.4.2.1.1.979|2|979 +1.3.6.1.2.1.25.4.2.1.1.982|2|982 +1.3.6.1.2.1.25.4.2.1.1.984|2|984 +1.3.6.1.2.1.25.4.2.1.1.1038|2|1038 +1.3.6.1.2.1.25.4.2.1.1.1826|2|1826 +1.3.6.1.2.1.25.4.2.1.1.2851|2|2851 +1.3.6.1.2.1.25.4.2.1.1.2852|2|2852 +1.3.6.1.2.1.25.4.2.1.1.2919|2|2919 +1.3.6.1.2.1.25.4.2.1.1.3773|2|3773 +1.3.6.1.2.1.25.4.2.1.1.4068|2|4068 +1.3.6.1.2.1.25.4.2.1.1.4085|2|4085 +1.3.6.1.2.1.25.4.2.1.1.4119|2|4119 +1.3.6.1.2.1.25.4.2.1.1.4122|2|4122 +1.3.6.1.2.1.25.4.2.1.1.4212|2|4212 +1.3.6.1.2.1.25.4.2.1.1.4213|2|4213 +1.3.6.1.2.1.25.4.2.1.1.4214|2|4214 +1.3.6.1.2.1.25.4.2.1.1.4215|2|4215 +1.3.6.1.2.1.25.4.2.1.1.4216|2|4216 +1.3.6.1.2.1.25.4.2.1.1.4217|2|4217 +1.3.6.1.2.1.25.4.2.1.1.4218|2|4218 +1.3.6.1.2.1.25.4.2.1.1.4219|2|4219 +1.3.6.1.2.1.25.4.2.1.1.4220|2|4220 +1.3.6.1.2.1.25.4.2.1.1.4221|2|4221 +1.3.6.1.2.1.25.4.2.1.1.4222|2|4222 +1.3.6.1.2.1.25.4.2.1.1.4224|2|4224 +1.3.6.1.2.1.25.4.2.1.1.4226|2|4226 +1.3.6.1.2.1.25.4.2.1.1.4434|2|4434 +1.3.6.1.2.1.25.4.2.1.1.4435|2|4435 +1.3.6.1.2.1.25.4.2.1.1.4436|2|4436 +1.3.6.1.2.1.25.4.2.1.1.4437|2|4437 +1.3.6.1.2.1.25.4.2.1.1.4438|2|4438 +1.3.6.1.2.1.25.4.2.1.1.4439|2|4439 +1.3.6.1.2.1.25.4.2.1.1.4440|2|4440 +1.3.6.1.2.1.25.4.2.1.1.4441|2|4441 +1.3.6.1.2.1.25.4.2.1.1.4442|2|4442 +1.3.6.1.2.1.25.4.2.1.1.4443|2|4443 +1.3.6.1.2.1.25.4.2.1.1.4451|2|4451 +1.3.6.1.2.1.25.4.2.1.1.4773|2|4773 +1.3.6.1.2.1.25.4.2.1.1.4774|2|4774 +1.3.6.1.2.1.25.4.2.1.1.4775|2|4775 +1.3.6.1.2.1.25.4.2.1.1.4776|2|4776 +1.3.6.1.2.1.25.4.2.1.1.4777|2|4777 +1.3.6.1.2.1.25.4.2.1.1.4778|2|4778 +1.3.6.1.2.1.25.4.2.1.1.4779|2|4779 +1.3.6.1.2.1.25.4.2.1.1.4780|2|4780 +1.3.6.1.2.1.25.4.2.1.1.4781|2|4781 +1.3.6.1.2.1.25.4.2.1.1.4782|2|4782 +1.3.6.1.2.1.25.4.2.1.1.4784|2|4784 +1.3.6.1.2.1.25.4.2.1.1.4786|2|4786 +1.3.6.1.2.1.25.4.2.1.1.4787|2|4787 +1.3.6.1.2.1.25.4.2.1.1.5137|2|5137 +1.3.6.1.2.1.25.4.2.1.1.5138|2|5138 +1.3.6.1.2.1.25.4.2.1.1.5139|2|5139 +1.3.6.1.2.1.25.4.2.1.1.5140|2|5140 +1.3.6.1.2.1.25.4.2.1.1.5141|2|5141 +1.3.6.1.2.1.25.4.2.1.1.5142|2|5142 +1.3.6.1.2.1.25.4.2.1.1.5143|2|5143 +1.3.6.1.2.1.25.4.2.1.1.5144|2|5144 +1.3.6.1.2.1.25.4.2.1.1.5145|2|5145 +1.3.6.1.2.1.25.4.2.1.1.5146|2|5146 +1.3.6.1.2.1.25.4.2.1.1.5148|2|5148 +1.3.6.1.2.1.25.4.2.1.1.5151|2|5151 +1.3.6.1.2.1.25.4.2.1.1.5155|2|5155 +1.3.6.1.2.1.25.4.2.1.1.5159|2|5159 +1.3.6.1.2.1.25.4.2.1.1.5501|2|5501 +1.3.6.1.2.1.25.4.2.1.1.5502|2|5502 +1.3.6.1.2.1.25.4.2.1.1.5503|2|5503 +1.3.6.1.2.1.25.4.2.1.1.5504|2|5504 +1.3.6.1.2.1.25.4.2.1.1.5505|2|5505 +1.3.6.1.2.1.25.4.2.1.1.5506|2|5506 +1.3.6.1.2.1.25.4.2.1.1.5507|2|5507 +1.3.6.1.2.1.25.4.2.1.1.5508|2|5508 +1.3.6.1.2.1.25.4.2.1.1.5509|2|5509 +1.3.6.1.2.1.25.4.2.1.1.5510|2|5510 +1.3.6.1.2.1.25.4.2.1.1.5516|2|5516 +1.3.6.1.2.1.25.4.2.1.1.5522|2|5522 +1.3.6.1.2.1.25.4.2.1.1.5861|2|5861 +1.3.6.1.2.1.25.4.2.1.1.5862|2|5862 +1.3.6.1.2.1.25.4.2.1.1.5863|2|5863 +1.3.6.1.2.1.25.4.2.1.1.5864|2|5864 +1.3.6.1.2.1.25.4.2.1.1.5865|2|5865 +1.3.6.1.2.1.25.4.2.1.1.5866|2|5866 +1.3.6.1.2.1.25.4.2.1.1.5867|2|5867 +1.3.6.1.2.1.25.4.2.1.1.5868|2|5868 +1.3.6.1.2.1.25.4.2.1.1.5869|2|5869 +1.3.6.1.2.1.25.4.2.1.1.5870|2|5870 +1.3.6.1.2.1.25.4.2.1.1.5872|2|5872 +1.3.6.1.2.1.25.4.2.1.1.5875|2|5875 +1.3.6.1.2.1.25.4.2.1.1.5878|2|5878 +1.3.6.1.2.1.25.4.2.1.1.5879|2|5879 +1.3.6.1.2.1.25.4.2.1.1.5884|2|5884 +1.3.6.1.2.1.25.4.2.1.1.6344|2|6344 +1.3.6.1.2.1.25.4.2.1.1.6345|2|6345 +1.3.6.1.2.1.25.4.2.1.1.6346|2|6346 +1.3.6.1.2.1.25.4.2.1.1.6347|2|6347 +1.3.6.1.2.1.25.4.2.1.1.6348|2|6348 +1.3.6.1.2.1.25.4.2.1.1.6349|2|6349 +1.3.6.1.2.1.25.4.2.1.1.6350|2|6350 +1.3.6.1.2.1.25.4.2.1.1.6351|2|6351 +1.3.6.1.2.1.25.4.2.1.1.6352|2|6352 +1.3.6.1.2.1.25.4.2.1.1.6353|2|6353 +1.3.6.1.2.1.25.4.2.1.1.6358|2|6358 +1.3.6.1.2.1.25.4.2.1.1.6366|2|6366 +1.3.6.1.2.1.25.4.2.1.1.6763|2|6763 +1.3.6.1.2.1.25.4.2.1.1.6764|2|6764 +1.3.6.1.2.1.25.4.2.1.1.6765|2|6765 +1.3.6.1.2.1.25.4.2.1.1.6766|2|6766 +1.3.6.1.2.1.25.4.2.1.1.6767|2|6767 +1.3.6.1.2.1.25.4.2.1.1.6768|2|6768 +1.3.6.1.2.1.25.4.2.1.1.6769|2|6769 +1.3.6.1.2.1.25.4.2.1.1.6770|2|6770 +1.3.6.1.2.1.25.4.2.1.1.6771|2|6771 +1.3.6.1.2.1.25.4.2.1.1.6772|2|6772 +1.3.6.1.2.1.25.4.2.1.1.6782|2|6782 +1.3.6.1.2.1.25.4.2.1.1.6784|2|6784 +1.3.6.1.2.1.25.4.2.1.1.7174|2|7174 +1.3.6.1.2.1.25.4.2.1.1.7175|2|7175 +1.3.6.1.2.1.25.4.2.1.1.7176|2|7176 +1.3.6.1.2.1.25.4.2.1.1.7177|2|7177 +1.3.6.1.2.1.25.4.2.1.1.7178|2|7178 +1.3.6.1.2.1.25.4.2.1.1.7179|2|7179 +1.3.6.1.2.1.25.4.2.1.1.7180|2|7180 +1.3.6.1.2.1.25.4.2.1.1.7181|2|7181 +1.3.6.1.2.1.25.4.2.1.1.7182|2|7182 +1.3.6.1.2.1.25.4.2.1.1.7183|2|7183 +1.3.6.1.2.1.25.4.2.1.1.7188|2|7188 +1.3.6.1.2.1.25.4.2.1.1.7192|2|7192 +1.3.6.1.2.1.25.4.2.1.1.7194|2|7194 +1.3.6.1.2.1.25.4.2.1.1.7196|2|7196 +1.3.6.1.2.1.25.4.2.1.1.7523|2|7523 +1.3.6.1.2.1.25.4.2.1.1.7524|2|7524 +1.3.6.1.2.1.25.4.2.1.1.7525|2|7525 +1.3.6.1.2.1.25.4.2.1.1.7526|2|7526 +1.3.6.1.2.1.25.4.2.1.1.7527|2|7527 +1.3.6.1.2.1.25.4.2.1.1.7528|2|7528 +1.3.6.1.2.1.25.4.2.1.1.7529|2|7529 +1.3.6.1.2.1.25.4.2.1.1.7530|2|7530 +1.3.6.1.2.1.25.4.2.1.1.7531|2|7531 +1.3.6.1.2.1.25.4.2.1.1.7532|2|7532 +1.3.6.1.2.1.25.4.2.1.1.7535|2|7535 +1.3.6.1.2.1.25.4.2.1.1.7539|2|7539 +1.3.6.1.2.1.25.4.2.1.1.7543|2|7543 +1.3.6.1.2.1.25.4.2.1.1.7544|2|7544 +1.3.6.1.2.1.25.4.2.1.1.7949|2|7949 +1.3.6.1.2.1.25.4.2.1.1.7950|2|7950 +1.3.6.1.2.1.25.4.2.1.1.7951|2|7951 +1.3.6.1.2.1.25.4.2.1.1.7952|2|7952 +1.3.6.1.2.1.25.4.2.1.1.7953|2|7953 +1.3.6.1.2.1.25.4.2.1.1.7954|2|7954 +1.3.6.1.2.1.25.4.2.1.1.9526|2|9526 +1.3.6.1.2.1.25.4.2.1.1.9602|2|9602 +1.3.6.1.2.1.25.4.2.1.1.11784|2|11784 +1.3.6.1.2.1.25.4.2.1.1.13563|2|13563 +1.3.6.1.2.1.25.4.2.1.1.13565|2|13565 +1.3.6.1.2.1.25.4.2.1.1.13566|2|13566 +1.3.6.1.2.1.25.4.2.1.1.15387|2|15387 +1.3.6.1.2.1.25.4.2.1.1.15921|2|15921 +1.3.6.1.2.1.25.4.2.1.1.16645|2|16645 +1.3.6.1.2.1.25.4.2.1.1.16646|2|16646 +1.3.6.1.2.1.25.4.2.1.1.16648|2|16648 +1.3.6.1.2.1.25.4.2.1.1.16651|2|16651 +1.3.6.1.2.1.25.4.2.1.1.16652|2|16652 +1.3.6.1.2.1.25.4.2.1.1.16653|2|16653 +1.3.6.1.2.1.25.4.2.1.1.16654|2|16654 +1.3.6.1.2.1.25.4.2.1.1.17900|2|17900 +1.3.6.1.2.1.25.4.2.1.1.18651|2|18651 +1.3.6.1.2.1.25.4.2.1.1.23175|2|23175 +1.3.6.1.2.1.25.4.2.1.1.23330|2|23330 +1.3.6.1.2.1.25.4.2.1.1.25514|2|25514 +1.3.6.1.2.1.25.4.2.1.1.25517|2|25517 +1.3.6.1.2.1.25.4.2.1.1.25518|2|25518 +1.3.6.1.2.1.25.4.2.1.1.25522|2|25522 +1.3.6.1.2.1.25.4.2.1.1.25524|2|25524 +1.3.6.1.2.1.25.4.2.1.1.25531|2|25531 +1.3.6.1.2.1.25.4.2.1.1.25946|2|25946 +1.3.6.1.2.1.25.4.2.1.1.27567|2|27567 +1.3.6.1.2.1.25.4.2.1.1.29431|2|29431 +1.3.6.1.2.1.25.4.2.1.1.29439|2|29439 +1.3.6.1.2.1.25.4.2.1.1.29440|2|29440 +1.3.6.1.2.1.25.4.2.1.1.30092|2|30092 +1.3.6.1.2.1.25.4.2.1.1.30120|2|30120 +1.3.6.1.2.1.25.4.2.1.1.30180|2|30180 +1.3.6.1.2.1.25.4.2.1.1.32031|2|32031 +1.3.6.1.2.1.25.4.2.1.2.1|4|systemd +1.3.6.1.2.1.25.4.2.1.2.415|4x|73797374656d642d6a6f75726e616c +1.3.6.1.2.1.25.4.2.1.2.440|4|lvmetad +1.3.6.1.2.1.25.4.2.1.2.447|4x|73797374656d642d7564657664 +1.3.6.1.2.1.25.4.2.1.2.921|4x|6a6974746572656e74726f70792d72 +1.3.6.1.2.1.25.4.2.1.2.951|4|auditd +1.3.6.1.2.1.25.4.2.1.2.977|4x|646275732d6461656d6f6e +1.3.6.1.2.1.25.4.2.1.2.979|4|acpid +1.3.6.1.2.1.25.4.2.1.2.982|4|irqbalance +1.3.6.1.2.1.25.4.2.1.2.984|4x|73797374656d642d6c6f67696e64 +1.3.6.1.2.1.25.4.2.1.2.1038|4x|696e6372656173655f656e74726f70 +1.3.6.1.2.1.25.4.2.1.2.1826|4x|7379736c6f672d6e67 +1.3.6.1.2.1.25.4.2.1.2.2851|4|crond +1.3.6.1.2.1.25.4.2.1.2.2852|4|promptstatusd +1.3.6.1.2.1.25.4.2.1.2.2919|4|overdog +1.3.6.1.2.1.25.4.2.1.2.3773|4|sshd +1.3.6.1.2.1.25.4.2.1.2.4068|4|httpd +1.3.6.1.2.1.25.4.2.1.2.4085|4|runsvdir +1.3.6.1.2.1.25.4.2.1.2.4119|4|agetty +1.3.6.1.2.1.25.4.2.1.2.4122|4|agetty +1.3.6.1.2.1.25.4.2.1.2.4212|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4213|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4214|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4215|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4216|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4217|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4218|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4219|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4220|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4221|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4222|4|eventd +1.3.6.1.2.1.25.4.2.1.2.4224|4x|72756e736d315f6e616d6564 +1.3.6.1.2.1.25.4.2.1.2.4226|4|wccpd +1.3.6.1.2.1.25.4.2.1.2.4434|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4435|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4436|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4437|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4438|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4439|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4440|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4441|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4442|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4443|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4451|4|scriptd +1.3.6.1.2.1.25.4.2.1.2.4773|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4774|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4775|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4776|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4777|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4778|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4779|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4780|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4781|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4782|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4784|4|tmrouted +1.3.6.1.2.1.25.4.2.1.2.4786|4|tamd +1.3.6.1.2.1.25.4.2.1.2.4787|4|alertd +1.3.6.1.2.1.25.4.2.1.2.5137|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5138|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5139|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5140|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5141|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5142|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5143|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5144|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5145|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5146|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5148|4|evrouted +1.3.6.1.2.1.25.4.2.1.2.5151|4|big3d +1.3.6.1.2.1.25.4.2.1.2.5155|4|csyncd +1.3.6.1.2.1.25.4.2.1.2.5159|4|syscalld +1.3.6.1.2.1.25.4.2.1.2.5501|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5502|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5503|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5504|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5505|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5506|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5507|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5508|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5509|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5510|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5516|4|errdefsd +1.3.6.1.2.1.25.4.2.1.2.5522|4|logstatd +1.3.6.1.2.1.25.4.2.1.2.5861|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5862|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5863|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5864|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5865|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5866|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5867|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5868|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5869|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5870|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5872|4|chmand +1.3.6.1.2.1.25.4.2.1.2.5875|4x|6963725f6576656e7464 +1.3.6.1.2.1.25.4.2.1.2.5878|4|mcpd +1.3.6.1.2.1.25.4.2.1.2.5879|4|statsd +1.3.6.1.2.1.25.4.2.1.2.5884|4|zxfrd +1.3.6.1.2.1.25.4.2.1.2.6344|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6345|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6346|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6347|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6348|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6349|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6350|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6351|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6352|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6353|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6358|4|merged +1.3.6.1.2.1.25.4.2.1.2.6366|4|dynconfd +1.3.6.1.2.1.25.4.2.1.2.6763|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6764|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6765|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6766|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6767|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6768|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6769|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6770|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6771|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6772|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6782|4x|676f6f676c655f6163636f756e7473 +1.3.6.1.2.1.25.4.2.1.2.6784|4|keymgmtd +1.3.6.1.2.1.25.4.2.1.2.7174|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7175|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7176|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7177|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7178|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7179|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7180|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7181|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7182|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7183|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7188|4|java +1.3.6.1.2.1.25.4.2.1.2.7192|4|lacpd +1.3.6.1.2.1.25.4.2.1.2.7194|4|devmgmtd +1.3.6.1.2.1.25.4.2.1.2.7196|4|cbrd +1.3.6.1.2.1.25.4.2.1.2.7523|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7524|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7525|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7526|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7527|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7528|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7529|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7530|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7531|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7532|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7535|4|lind +1.3.6.1.2.1.25.4.2.1.2.7539|4|sod +1.3.6.1.2.1.25.4.2.1.2.7543|4x|73666c6f775f6167656e74 +1.3.6.1.2.1.25.4.2.1.2.7544|4x|66352d726573742d6e6f6465 +1.3.6.1.2.1.25.4.2.1.2.7949|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7950|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7951|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7952|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7953|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7954|4|runsv +1.3.6.1.2.1.25.4.2.1.2.9526|4|dhclient +1.3.6.1.2.1.25.4.2.1.2.9602|4|dhclient +1.3.6.1.2.1.25.4.2.1.2.11784|4|su +1.3.6.1.2.1.25.4.2.1.2.13563|4|httpd +1.3.6.1.2.1.25.4.2.1.2.13565|4|httpd +1.3.6.1.2.1.25.4.2.1.2.13566|4|httpd +1.3.6.1.2.1.25.4.2.1.2.15387|4|ntpd +1.3.6.1.2.1.25.4.2.1.2.15921|4|java +1.3.6.1.2.1.25.4.2.1.2.16645|4|logger +1.3.6.1.2.1.25.4.2.1.2.16646|4|logger +1.3.6.1.2.1.25.4.2.1.2.16648|4|httpd +1.3.6.1.2.1.25.4.2.1.2.16651|4|mcpq +1.3.6.1.2.1.25.4.2.1.2.16652|4|rrdstats +1.3.6.1.2.1.25.4.2.1.2.16653|4|rtstats +1.3.6.1.2.1.25.4.2.1.2.16654|4x|69436f6e74726f6c506f7274616c2e +1.3.6.1.2.1.25.4.2.1.2.17900|4|named +1.3.6.1.2.1.25.4.2.1.2.18651|4x|696372645f6368696c64 +1.3.6.1.2.1.25.4.2.1.2.23175|4|rrdshim +1.3.6.1.2.1.25.4.2.1.2.23330|4|snmpd +1.3.6.1.2.1.25.4.2.1.2.25514|4|pccd +1.3.6.1.2.1.25.4.2.1.2.25517|4|tmipsecd +1.3.6.1.2.1.25.4.2.1.2.25518|4x|746d6d2e7374617274 +1.3.6.1.2.1.25.4.2.1.2.25522|4x|6d676d745f61636c64 +1.3.6.1.2.1.25.4.2.1.2.25524|4|vxland +1.3.6.1.2.1.25.4.2.1.2.25531|4|iprepd +1.3.6.1.2.1.25.4.2.1.2.25946|4|bigd +1.3.6.1.2.1.25.4.2.1.2.27567|4|ntlmconnpool +1.3.6.1.2.1.25.4.2.1.2.29431|4|httpd +1.3.6.1.2.1.25.4.2.1.2.29439|4|httpd +1.3.6.1.2.1.25.4.2.1.2.29440|4|httpd +1.3.6.1.2.1.25.4.2.1.2.30092|4x|746d6d2e30 +1.3.6.1.2.1.25.4.2.1.2.30120|4|racoon +1.3.6.1.2.1.25.4.2.1.2.30180|4x|61756469745f666f72776172646572 +1.3.6.1.2.1.25.4.2.1.2.32031|4|agetty +1.3.6.1.2.1.25.4.2.1.3.1|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.415|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.440|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.447|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.921|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.951|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.977|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.979|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.982|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.984|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.1038|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.1826|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.2851|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.2852|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.2919|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.3773|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4068|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4085|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4119|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4122|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4212|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4213|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4214|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4215|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4216|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4217|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4218|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4219|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4220|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4221|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4222|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4224|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4226|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4434|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4435|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4436|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4437|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4438|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4439|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4440|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4441|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4442|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4443|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4451|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4773|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4774|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4775|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4776|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4777|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4778|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4779|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4780|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4781|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4782|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4784|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4786|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4787|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5137|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5138|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5139|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5140|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5141|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5142|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5143|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5144|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5145|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5146|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5148|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5151|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5155|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5159|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5501|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5502|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5503|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5504|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5505|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5506|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5507|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5508|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5509|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5510|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5516|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5522|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5861|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5862|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5863|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5864|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5865|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5866|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5867|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5868|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5869|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5870|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5872|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5875|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5878|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5879|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5884|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6344|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6345|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6346|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6347|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6348|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6349|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6350|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6351|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6352|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6353|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6358|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6366|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6763|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6764|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6765|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6766|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6767|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6768|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6769|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6770|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6771|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6772|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6782|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6784|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7174|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7175|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7176|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7177|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7178|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7179|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7180|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7181|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7182|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7183|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7188|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7192|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7194|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7196|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7523|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7524|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7525|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7526|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7527|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7528|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7529|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7530|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7531|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7532|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7535|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7539|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7543|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7544|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7949|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7950|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7951|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7952|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7953|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7954|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.9526|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.9602|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.11784|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.13563|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.13565|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.13566|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.15387|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.15921|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16645|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16646|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16648|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16651|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16652|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16653|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16654|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.17900|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.18651|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.23175|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.23330|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25514|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25517|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25518|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25522|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25524|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25531|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25946|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.27567|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.29431|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.29439|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.29440|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.30092|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.30120|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.30180|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.32031|6|0.0 +1.3.6.1.2.1.25.4.2.1.4.1|4x|2f7573722f6c69622f73797374656d642f73797374656d64 +1.3.6.1.2.1.25.4.2.1.4.415|4x|2f7573722f6c69622f73797374656d642f73797374656d642d6a6f75726e616c64 +1.3.6.1.2.1.25.4.2.1.4.440|4x|2f7573722f7362696e2f6c766d65746164 +1.3.6.1.2.1.25.4.2.1.4.447|4x|2f7573722f6c69622f73797374656d642f73797374656d642d7564657664 +1.3.6.1.2.1.25.4.2.1.4.921|4x|2f7573722f7362696e2f6a6974746572656e74726f70792d726e6764 +1.3.6.1.2.1.25.4.2.1.4.951|4x|2f7362696e2f617564697464 +1.3.6.1.2.1.25.4.2.1.4.977|4x|2f62696e2f646275732d6461656d6f6e +1.3.6.1.2.1.25.4.2.1.4.979|4x|2f7573722f7362696e2f6163706964 +1.3.6.1.2.1.25.4.2.1.4.982|4x|2f7573722f7362696e2f69727162616c616e6365 +1.3.6.1.2.1.25.4.2.1.4.984|4x|2f7573722f6c69622f73797374656d642f73797374656d642d6c6f67696e64 +1.3.6.1.2.1.25.4.2.1.4.1038|4x|696e6372656173655f656e74726f7079 +1.3.6.1.2.1.25.4.2.1.4.1826|4x|2f7573722f7362696e2f7379736c6f672d6e67 +1.3.6.1.2.1.25.4.2.1.4.2851|4x|2f7573722f7362696e2f63726f6e64 +1.3.6.1.2.1.25.4.2.1.4.2852|4x|2f62696e2f70726f6d707473746174757364 +1.3.6.1.2.1.25.4.2.1.4.2919|4x|2f7573722f62696e2f6f766572646f67 +1.3.6.1.2.1.25.4.2.1.4.3773|4x|2f7573722f7362696e2f73736864 +1.3.6.1.2.1.25.4.2.1.4.4068|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.4085|4|runsvdir +1.3.6.1.2.1.25.4.2.1.4.4119|4x|2f7362696e2f616765747479 +1.3.6.1.2.1.25.4.2.1.4.4122|4x|2f7362696e2f616765747479 +1.3.6.1.2.1.25.4.2.1.4.4212|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4213|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4214|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4215|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4216|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4217|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4218|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4219|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4220|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4221|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4222|4x|2f7573722f62696e2f6576656e7464 +1.3.6.1.2.1.25.4.2.1.4.4224|4x|2f7362696e2f72756e736d315f6e616d6564 +1.3.6.1.2.1.25.4.2.1.4.4226|4x|2f7573722f62696e2f7763637064 +1.3.6.1.2.1.25.4.2.1.4.4434|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4435|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4436|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4437|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4438|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4439|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4440|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4441|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4442|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4443|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4451|4x|2f7573722f62696e2f73637269707464 +1.3.6.1.2.1.25.4.2.1.4.4773|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4774|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4775|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4776|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4777|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4778|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4779|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4780|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4781|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4782|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4784|4x|2f7573722f62696e2f746d726f75746564 +1.3.6.1.2.1.25.4.2.1.4.4786|4x|2f7573722f62696e2f74616d64 +1.3.6.1.2.1.25.4.2.1.4.4787|4x|2f7573722f7362696e2f616c65727464 +1.3.6.1.2.1.25.4.2.1.4.5137|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5138|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5139|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5140|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5141|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5142|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5143|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5144|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5145|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5146|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5148|4x|2f7573722f62696e2f6576726f75746564 +1.3.6.1.2.1.25.4.2.1.4.5151|4x|2f7368617265642f62696e2f6269673364 +1.3.6.1.2.1.25.4.2.1.4.5155|4x|2f7573722f62696e2f6373796e6364 +1.3.6.1.2.1.25.4.2.1.4.5159|4x|2f7573722f62696e2f73797363616c6c64 +1.3.6.1.2.1.25.4.2.1.4.5501|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5502|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5503|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5504|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5505|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5506|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5507|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5508|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5509|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5510|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5516|4x|2f7573722f62696e2f6572726465667364 +1.3.6.1.2.1.25.4.2.1.4.5522|4x|2f7573722f7362696e2f6c6f677374617464 +1.3.6.1.2.1.25.4.2.1.4.5861|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5862|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5863|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5864|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5865|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5866|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5867|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5868|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5869|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5870|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5872|4x|2f7573722f62696e2f63686d616e64 +1.3.6.1.2.1.25.4.2.1.4.5875|4x|2f7573722f62696e2f6963725f6576656e7464 +1.3.6.1.2.1.25.4.2.1.4.5878|4x|2f7573722f62696e2f6d637064 +1.3.6.1.2.1.25.4.2.1.4.5879|4x|2f7573722f62696e2f737461747364 +1.3.6.1.2.1.25.4.2.1.4.5884|4x|2f7573722f62696e2f7a78667264 +1.3.6.1.2.1.25.4.2.1.4.6344|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6345|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6346|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6347|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6348|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6349|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6350|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6351|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6352|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6353|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6358|4x|2f7573722f62696e2f6d6572676564 +1.3.6.1.2.1.25.4.2.1.4.6366|4x|2f7573722f62696e2f64796e636f6e6664 +1.3.6.1.2.1.25.4.2.1.4.6763|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6764|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6765|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6766|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6767|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6768|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6769|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6770|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6771|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6772|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6782|4x|2f7573722f62696e2f707974686f6e +1.3.6.1.2.1.25.4.2.1.4.6784|4x|2f7573722f62696e2f6b65796d676d7464 +1.3.6.1.2.1.25.4.2.1.4.7174|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7175|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7176|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7177|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7178|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7179|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7180|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7181|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7182|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7183|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7188|4x|2f7573722f6c69622f6a766d2f6a72652f62696e2f6a617661 +1.3.6.1.2.1.25.4.2.1.4.7192|4x|2f7573722f62696e2f6c61637064 +1.3.6.1.2.1.25.4.2.1.4.7194|4x|2f7573722f62696e2f6465766d676d7464 +1.3.6.1.2.1.25.4.2.1.4.7196|4x|2f7573722f73686172652f6362722f62696e2f63627264 +1.3.6.1.2.1.25.4.2.1.4.7523|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7524|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7525|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7526|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7527|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7528|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7529|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7530|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7531|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7532|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7535|4x|2f7573722f62696e2f6c696e64 +1.3.6.1.2.1.25.4.2.1.4.7539|4x|2f7573722f62696e2f736f64 +1.3.6.1.2.1.25.4.2.1.4.7543|4x|2f7573722f7362696e2f73666c6f775f6167656e74 +1.3.6.1.2.1.25.4.2.1.4.7544|4x|2f7573722f62696e2f66352d726573742d6e6f6465 +1.3.6.1.2.1.25.4.2.1.4.7949|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7950|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7951|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7952|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7953|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7954|4|runsv +1.3.6.1.2.1.25.4.2.1.4.9526|4x|2f7362696e2f6468636c69656e74 +1.3.6.1.2.1.25.4.2.1.4.9602|4x|2f7362696e2f6468636c69656e74 +1.3.6.1.2.1.25.4.2.1.4.11784|4|su +1.3.6.1.2.1.25.4.2.1.4.13563|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.13565|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.13566|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.15387|4|ntpd +1.3.6.1.2.1.25.4.2.1.4.15921|4x|2f7573722f6c69622f6a766d2f6a72652f62696e2f6a617661 +1.3.6.1.2.1.25.4.2.1.4.16645|4x|2f7573722f62696e2f6c6f67676572 +1.3.6.1.2.1.25.4.2.1.4.16646|4x|2f7573722f62696e2f6c6f67676572 +1.3.6.1.2.1.25.4.2.1.4.16648|4x|2f7573722f7362696e2f666367692d +1.3.6.1.2.1.25.4.2.1.4.16651|4x|2f7573722f6c6f63616c2f7777772f6d6370712f6d637071 +1.3.6.1.2.1.25.4.2.1.4.16652|4x|2f7573722f6c6f63616c2f7777772f72726473746174732f7272647374617473 +1.3.6.1.2.1.25.4.2.1.4.16653|4x|2f7573722f6c6f63616c2f7777772f727473746174732f72747374617473 +1.3.6.1.2.1.25.4.2.1.4.16654|4x|2f7573722f6c6f63616c2f7777772f69436f6e74726f6c2f69436f6e74726f6c506f7274616c2e636769 +1.3.6.1.2.1.25.4.2.1.4.17900|4x|2f7573722f7362696e2f6e616d6564 +1.3.6.1.2.1.25.4.2.1.4.18651|4x|696372645f6368696c64 +1.3.6.1.2.1.25.4.2.1.4.23175|4x|2f7573722f7362696e2f7272647368696d +1.3.6.1.2.1.25.4.2.1.4.23330|4x|2f7573722f7362696e2f736e6d7064 +1.3.6.1.2.1.25.4.2.1.4.25514|4x|2f7573722f62696e2f70636364 +1.3.6.1.2.1.25.4.2.1.4.25517|4x|2f7573722f62696e2f746d697073656364 +1.3.6.1.2.1.25.4.2.1.4.25518|4x|2f6574632f62696773746172742f736372697074732f746d6d2e7374617274 +1.3.6.1.2.1.25.4.2.1.4.25522|4x|2f7573722f62696e2f6d676d745f61636c64 +1.3.6.1.2.1.25.4.2.1.4.25524|4x|2f7573722f62696e2f76786c616e64 +1.3.6.1.2.1.25.4.2.1.4.25531|4x|2f7573722f73686172652f6970726570642f62696e2f697072657064 +1.3.6.1.2.1.25.4.2.1.4.25946|4|bigd +1.3.6.1.2.1.25.4.2.1.4.27567|4x|2f7573722f7362696e2f6e746c6d636f6e6e706f6f6c +1.3.6.1.2.1.25.4.2.1.4.29431|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.29439|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.29440|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.30092|4x|746d6d2e30 +1.3.6.1.2.1.25.4.2.1.4.30120|4x|2f7573722f7362696e2f7261636f6f6e +1.3.6.1.2.1.25.4.2.1.4.30180|4x|2f7573722f62696e2f61756469745f666f72776172646572 +1.3.6.1.2.1.25.4.2.1.4.32031|4x|2f7362696e2f616765747479 +1.3.6.1.2.1.25.4.2.1.5.1|4x|2d2d73776974636865642d726f6f74202d2d73797374656d202d2d646573657269616c697a65203230 +1.3.6.1.2.1.25.4.2.1.5.415|4| +1.3.6.1.2.1.25.4.2.1.5.440|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.447|4| +1.3.6.1.2.1.25.4.2.1.5.921|4| +1.3.6.1.2.1.25.4.2.1.5.951|4x|2d6e +1.3.6.1.2.1.25.4.2.1.5.977|4x|2d2d73797374656d202d2d616464726573733d73797374656d643a202d2d6e6f666f726b202d2d6e6f70696466696c65202d2d73797374656d642d61637469766174696f6e +1.3.6.1.2.1.25.4.2.1.5.979|4| +1.3.6.1.2.1.25.4.2.1.5.982|4x|2d2d666f726567726f756e64 +1.3.6.1.2.1.25.4.2.1.5.984|4| +1.3.6.1.2.1.25.4.2.1.5.1038|4x|2d64202d652034303030202d72202d712038 +1.3.6.1.2.1.25.4.2.1.5.1826|4x|2d46202d70202f7661722f72756e2f7379736c6f67642e706964 +1.3.6.1.2.1.25.4.2.1.5.2851|4x|2d6e +1.3.6.1.2.1.25.4.2.1.5.2852|4| +1.3.6.1.2.1.25.4.2.1.5.2919|4| +1.3.6.1.2.1.25.4.2.1.5.3773|4x|2d44 +1.3.6.1.2.1.25.4.2.1.5.4068|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.4085|4x|2f7661722f73657276696365206c6f673a202e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e +1.3.6.1.2.1.25.4.2.1.5.4119|4x|2d2d6e6f636c6561722074747931206c696e7578 +1.3.6.1.2.1.25.4.2.1.5.4122|4x|2d2d6b6565702d62617564203131353230302c33383430302c39363030207474795330207674323230 +1.3.6.1.2.1.25.4.2.1.5.4212|4|datastor +1.3.6.1.2.1.25.4.2.1.5.4213|4|eventd +1.3.6.1.2.1.25.4.2.1.5.4214|4|named +1.3.6.1.2.1.25.4.2.1.5.4215|4|sdmd +1.3.6.1.2.1.25.4.2.1.5.4216|4x|6f767364622d736572766572 +1.3.6.1.2.1.25.4.2.1.5.4217|4|wocd +1.3.6.1.2.1.25.4.2.1.5.4218|4|nlad +1.3.6.1.2.1.25.4.2.1.5.4219|4|wccpd +1.3.6.1.2.1.25.4.2.1.5.4220|4|dnscached +1.3.6.1.2.1.25.4.2.1.5.4221|4|rba +1.3.6.1.2.1.25.4.2.1.5.4222|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.4224|4x|2f7573722f7362696e2f6e616d6564202d66202d74202f7661722f6e616d6564202d75206e616d6564202d63202f636f6e6669672f6e616d65642e636f6e66202d6e2031 +1.3.6.1.2.1.25.4.2.1.5.4226|4| +1.3.6.1.2.1.25.4.2.1.5.4434|4|tmipsecd +1.3.6.1.2.1.25.4.2.1.5.4435|4|ntlmconnpool +1.3.6.1.2.1.25.4.2.1.5.4436|4|pgadmind +1.3.6.1.2.1.25.4.2.1.5.4437|4|antserver +1.3.6.1.2.1.25.4.2.1.5.4438|4x|64656475705f61646d696e +1.3.6.1.2.1.25.4.2.1.5.4439|4x|61706d5f77656273736f +1.3.6.1.2.1.25.4.2.1.5.4440|4|samlidpd +1.3.6.1.2.1.25.4.2.1.5.4441|4|eca +1.3.6.1.2.1.25.4.2.1.5.4442|4|autodosd +1.3.6.1.2.1.25.4.2.1.5.4443|4|scriptd +1.3.6.1.2.1.25.4.2.1.5.4451|4| +1.3.6.1.2.1.25.4.2.1.5.4773|4|tmrouted +1.3.6.1.2.1.25.4.2.1.5.4774|4|vdi +1.3.6.1.2.1.25.4.2.1.5.4775|4|alertd +1.3.6.1.2.1.25.4.2.1.5.4776|4|fpuserd +1.3.6.1.2.1.25.4.2.1.5.4777|4|bdosd +1.3.6.1.2.1.25.4.2.1.5.4778|4|pccd +1.3.6.1.2.1.25.4.2.1.5.4779|4|asm +1.3.6.1.2.1.25.4.2.1.5.4780|4|eam +1.3.6.1.2.1.25.4.2.1.5.4781|4|tamd +1.3.6.1.2.1.25.4.2.1.5.4782|4|rtconfd +1.3.6.1.2.1.25.4.2.1.5.4784|4x|2d642030202d6f202f7661722f746d702f746d726f757465642e6f7574 +1.3.6.1.2.1.25.4.2.1.5.4786|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.4787|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.5137|4|evrouted +1.3.6.1.2.1.25.4.2.1.5.5138|4|syscalld +1.3.6.1.2.1.25.4.2.1.5.5139|4|csyncd +1.3.6.1.2.1.25.4.2.1.5.5140|4|natstatsd +1.3.6.1.2.1.25.4.2.1.5.5141|4x|6d676d745f61636c64 +1.3.6.1.2.1.25.4.2.1.5.5142|4x|616466735f70726f7879 +1.3.6.1.2.1.25.4.2.1.5.5143|4|rewrite +1.3.6.1.2.1.25.4.2.1.5.5144|4|big3d +1.3.6.1.2.1.25.4.2.1.5.5145|4|omapd +1.3.6.1.2.1.25.4.2.1.5.5146|4|updated +1.3.6.1.2.1.25.4.2.1.5.5148|4| +1.3.6.1.2.1.25.4.2.1.5.5151|4x|2d746c7320544c537631202d636970686572732041455347434d3a4145533a214144483a2141454344483a2150534b3a2161454344483a214453533a2145434453413a214145533132383a2d534841313a4145533235362d534841202d72656e6567203836343030 +1.3.6.1.2.1.25.4.2.1.5.5155|4| +1.3.6.1.2.1.25.4.2.1.5.5159|4| +1.3.6.1.2.1.25.4.2.1.5.5501|4|botd +1.3.6.1.2.1.25.4.2.1.5.5502|4|clusterd +1.3.6.1.2.1.25.4.2.1.5.5503|4|bigd +1.3.6.1.2.1.25.4.2.1.5.5504|4|urldb +1.3.6.1.2.1.25.4.2.1.5.5505|4|logstatd +1.3.6.1.2.1.25.4.2.1.5.5506|4|errdefsd +1.3.6.1.2.1.25.4.2.1.5.5507|4|mysql +1.3.6.1.2.1.25.4.2.1.5.5508|4|logmysqld +1.3.6.1.2.1.25.4.2.1.5.5509|4|flowspecd +1.3.6.1.2.1.25.4.2.1.5.5510|4|ecmd +1.3.6.1.2.1.25.4.2.1.5.5516|4| +1.3.6.1.2.1.25.4.2.1.5.5522|4| +1.3.6.1.2.1.25.4.2.1.5.5861|4x|6963725f6576656e7464 +1.3.6.1.2.1.25.4.2.1.5.5862|4|debugd +1.3.6.1.2.1.25.4.2.1.5.5863|4|statsd +1.3.6.1.2.1.25.4.2.1.5.5864|4|mcpd +1.3.6.1.2.1.25.4.2.1.5.5865|4|zxfrd +1.3.6.1.2.1.25.4.2.1.5.5866|4x|646f736c37645f61747461636b5f6d6f6e69746f72 +1.3.6.1.2.1.25.4.2.1.5.5867|4|chmand +1.3.6.1.2.1.25.4.2.1.5.5868|4|autodiscd +1.3.6.1.2.1.25.4.2.1.5.5869|4|mdmsyncmgr +1.3.6.1.2.1.25.4.2.1.5.5870|4|apmd +1.3.6.1.2.1.25.4.2.1.5.5872|4x|2d66202d2d76617269616e7420316e6963 +1.3.6.1.2.1.25.4.2.1.5.5875|4| +1.3.6.1.2.1.25.4.2.1.5.5878|4x|2d64626d656d20353132202d6c697374656e203132372e302e302e31202d666f7263656c6f6164202d66 +1.3.6.1.2.1.25.4.2.1.5.5879|4x|2d532030202d66 +1.3.6.1.2.1.25.4.2.1.5.5884|4| +1.3.6.1.2.1.25.4.2.1.5.6344|4|gtmd +1.3.6.1.2.1.25.4.2.1.5.6345|4|dynconfd +1.3.6.1.2.1.25.4.2.1.5.6346|4|sshplugin +1.3.6.1.2.1.25.4.2.1.5.6347|4|tmm +1.3.6.1.2.1.25.4.2.1.5.6348|4|avrd +1.3.6.1.2.1.25.4.2.1.5.6349|4x|70696e675f6163636573735f6167656e74 +1.3.6.1.2.1.25.4.2.1.5.6350|4|dwbld +1.3.6.1.2.1.25.4.2.1.5.6351|4|merged +1.3.6.1.2.1.25.4.2.1.5.6352|4|wamd +1.3.6.1.2.1.25.4.2.1.5.6353|4|tomcat +1.3.6.1.2.1.25.4.2.1.5.6358|4x|2d532030202d66 +1.3.6.1.2.1.25.4.2.1.5.6366|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.6763|4|vxland +1.3.6.1.2.1.25.4.2.1.5.6764|4|hwpd +1.3.6.1.2.1.25.4.2.1.5.6765|4|tasd +1.3.6.1.2.1.25.4.2.1.5.6766|4|pkcs11d +1.3.6.1.2.1.25.4.2.1.5.6767|4|admd +1.3.6.1.2.1.25.4.2.1.5.6768|4|iprepd +1.3.6.1.2.1.25.4.2.1.5.6769|4x|676f6f676c655f6163636f756e74735f6461656d6f6e +1.3.6.1.2.1.25.4.2.1.5.6770|4|snmpd +1.3.6.1.2.1.25.4.2.1.5.6771|4|keymgmtd +1.3.6.1.2.1.25.4.2.1.5.6772|4|oauth +1.3.6.1.2.1.25.4.2.1.5.6782|4x|2f7573722f62696e2f676f6f676c655f6163636f756e74735f6461656d6f6e +1.3.6.1.2.1.25.4.2.1.5.6784|4| +1.3.6.1.2.1.25.4.2.1.5.7174|4|captured +1.3.6.1.2.1.25.4.2.1.5.7175|4|cbrd +1.3.6.1.2.1.25.4.2.1.5.7176|4|zrd +1.3.6.1.2.1.25.4.2.1.5.7177|4|lacpd +1.3.6.1.2.1.25.4.2.1.5.7178|4|monpd +1.3.6.1.2.1.25.4.2.1.5.7179|4|restjavad +1.3.6.1.2.1.25.4.2.1.5.7180|4|shmmapd +1.3.6.1.2.1.25.4.2.1.5.7181|4|websso +1.3.6.1.2.1.25.4.2.1.5.7182|4|devmgmtd +1.3.6.1.2.1.25.4.2.1.5.7183|4x|68747470645f61706d +1.3.6.1.2.1.25.4.2.1.5.7188|4x|2d446a6176612e7574696c2e6c6f6767696e672e6d616e616765723d636f6d2e66352e726573742e636f6d6d6f6e2e526573744c6f674d616e61676572202d446a6176612e7574696c2e6c6f6767696e672e636f6e6669672e66696c653d2f6574632f726573746a617661642e6c6f672e636f6e66202d446c6f67346a2e6465 +1.3.6.1.2.1.25.4.2.1.5.7192|4| +1.3.6.1.2.1.25.4.2.1.5.7194|4x|2d6c206e6f74696365 +1.3.6.1.2.1.25.4.2.1.5.7196|4x|2d2d746872656164733d32202d2d686f73742d6d656d6f72793d343032363533313834202d2d756d755f7468726573686f6c643d3930202d2d70656e64696e675f7472616e733d35303030202d2d726571756573745f73697a653d3130323430202d2d6269675f726571756573745f73697a652031303438353736202d2d6d61 +1.3.6.1.2.1.25.4.2.1.5.7523|4|sod +1.3.6.1.2.1.25.4.2.1.5.7524|4|wocplugin +1.3.6.1.2.1.25.4.2.1.5.7525|4x|73666c6f775f6167656e74 +1.3.6.1.2.1.25.4.2.1.5.7526|4|urldbmgrd +1.3.6.1.2.1.25.4.2.1.5.7527|4x|66355f7570646174655f636865636b6572 +1.3.6.1.2.1.25.4.2.1.5.7528|4|nsyncd +1.3.6.1.2.1.25.4.2.1.5.7529|4|lind +1.3.6.1.2.1.25.4.2.1.5.7530|4|aced +1.3.6.1.2.1.25.4.2.1.5.7531|4|restnoded +1.3.6.1.2.1.25.4.2.1.5.7532|4|datasyncd +1.3.6.1.2.1.25.4.2.1.5.7535|4| +1.3.6.1.2.1.25.4.2.1.5.7539|4| +1.3.6.1.2.1.25.4.2.1.5.7543|4x|2d66202d4c462035202f7661722f6c6f672f73666c6f775f6167656e742e6c6f67 +1.3.6.1.2.1.25.4.2.1.5.7544|4x|2f7573722f73686172652f726573742f6e6f64652f7372632f726573746e6f64652e6a73202d702038313035202d2d6c6f674c6576656c2066696e657374202d69202f7661722f6c6f672f726573746e6f6465642f726573746e6f6465642e6c6f67202d73206e6f6e65 +1.3.6.1.2.1.25.4.2.1.5.7949|4|fslogd +1.3.6.1.2.1.25.4.2.1.5.7950|4|ipsd +1.3.6.1.2.1.25.4.2.1.5.7951|4|nokiasnmpd +1.3.6.1.2.1.25.4.2.1.5.7952|4|dosl7d +1.3.6.1.2.1.25.4.2.1.5.7953|4|localdbmgr +1.3.6.1.2.1.25.4.2.1.5.7954|4x|77725f75726c646264 +1.3.6.1.2.1.25.4.2.1.5.9526|4x|2d6e77206d676d74202d6366202f6574632f6468636c69656e742e636f6e66202d6c66202f7661722f6c69622f6468636c69656e742f6468636c69656e742e6c6561736573202d7066202f7661722f72756e2f6468636c69656e742e706964 +1.3.6.1.2.1.25.4.2.1.5.9602|4x|2d36202d6e77206d676d74202d6366202f6574632f6468636c69656e742e636f6e66202d6c66202f7661722f6c69622f6468636c69656e742f6468636c69656e74362d6d676d742e6c6561736573202d7066202f7661722f72756e2f6468636c69656e74362d6d676d742e706964 +1.3.6.1.2.1.25.4.2.1.5.11784|4x|746f6d636174202d73202f62696e2f62617368202d63206578706f7274204a4156415f4f5054533d272d4468747470732e70726f746f636f6c733d544c5376312e312c544c5376312e32202d44707974686f6e2e63616368656469723d2f7661722f746d70202d446a6176612e6c6962726172792e706174683d2f7573722f6c +1.3.6.1.2.1.25.4.2.1.5.13563|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.13565|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.13566|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.15387|4x|2d67 +1.3.6.1.2.1.25.4.2.1.5.15921|4x|2d4468747470732e70726f746f636f6c733d544c5376312e312c544c5376312e32202d44707974686f6e2e63616368656469723d2f7661722f746d70202d446a6176612e6c6962726172792e706174683d2f7573722f6c6962202d4466696c652e656e636f64696e673d5554462d38202d636c69656e74202d586d783133306d +1.3.6.1.2.1.25.4.2.1.5.16645|4x|2d70206c6f63616c362e696e666f +1.3.6.1.2.1.25.4.2.1.5.16646|4x|2d70206c6f63616c362e696e666f +1.3.6.1.2.1.25.4.2.1.5.16648|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.16651|4| +1.3.6.1.2.1.25.4.2.1.5.16652|4| +1.3.6.1.2.1.25.4.2.1.5.16653|4| +1.3.6.1.2.1.25.4.2.1.5.16654|4| +1.3.6.1.2.1.25.4.2.1.5.17900|4x|2d66202d74202f7661722f6e616d6564202d75206e616d6564202d63202f636f6e6669672f6e616d65642e636f6e66202d6e2031 +1.3.6.1.2.1.25.4.2.1.5.18651|4x|2d702038313030202d6c2032202d692034343038353361662d376362352d346530302d393631632d373133303033336265613235 +1.3.6.1.2.1.25.4.2.1.5.23175|4| +1.3.6.1.2.1.25.4.2.1.5.23330|4x|2d66202d63202f636f6e6669672f736e6d702f736e6d70642e636f6e66202d4c7364202d4c462036202f7661722f6c6f672f736e6d70642e6c6f67202d70202f7661722f72756e2f736e6d70642e706964 +1.3.6.1.2.1.25.4.2.1.5.25514|4| +1.3.6.1.2.1.25.4.2.1.5.25517|4x|2d2d746d6d636f756e742032 +1.3.6.1.2.1.25.4.2.1.5.25518|4x|2f7661722f72756e203220322030202d2d706c6174666f726d205a313030202d6d202d732035393434 +1.3.6.1.2.1.25.4.2.1.5.25522|4| +1.3.6.1.2.1.25.4.2.1.5.25524|4| +1.3.6.1.2.1.25.4.2.1.5.25531|4| +1.3.6.1.2.1.25.4.2.1.5.25946|4x|2d53 +1.3.6.1.2.1.25.4.2.1.5.27567|4x|2d63206d656d3a2f2f6e746c6d +1.3.6.1.2.1.25.4.2.1.5.29431|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.29439|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.29440|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.30092|4x|2d542032202d2d746d69642030202d2d6e7075732032202d2d706c6174666f726d205a313030202d6d202d732035393434 +1.3.6.1.2.1.25.4.2.1.5.30120|4x|2d6c202f7661722f6c6f672f7261636f6f6e2e6c6f67202d66202f6574632f7261636f6f6e2f7261636f6f6e2e636f6e66 +1.3.6.1.2.1.25.4.2.1.5.30180|4| +1.3.6.1.2.1.25.4.2.1.5.32066|4x|2d2d6e6f636c6561722074747930207474795330207674323230 +1.3.6.1.2.1.25.4.2.1.6.1|2|4 +1.3.6.1.2.1.25.4.2.1.6.415|2|4 +1.3.6.1.2.1.25.4.2.1.6.440|2|4 +1.3.6.1.2.1.25.4.2.1.6.447|2|4 +1.3.6.1.2.1.25.4.2.1.6.921|2|4 +1.3.6.1.2.1.25.4.2.1.6.951|2|4 +1.3.6.1.2.1.25.4.2.1.6.977|2|4 +1.3.6.1.2.1.25.4.2.1.6.979|2|4 +1.3.6.1.2.1.25.4.2.1.6.982|2|4 +1.3.6.1.2.1.25.4.2.1.6.984|2|4 +1.3.6.1.2.1.25.4.2.1.6.1038|2|4 +1.3.6.1.2.1.25.4.2.1.6.1826|2|4 +1.3.6.1.2.1.25.4.2.1.6.2851|2|4 +1.3.6.1.2.1.25.4.2.1.6.2852|2|4 +1.3.6.1.2.1.25.4.2.1.6.2919|2|4 +1.3.6.1.2.1.25.4.2.1.6.3773|2|4 +1.3.6.1.2.1.25.4.2.1.6.4068|2|4 +1.3.6.1.2.1.25.4.2.1.6.4085|2|4 +1.3.6.1.2.1.25.4.2.1.6.4119|2|4 +1.3.6.1.2.1.25.4.2.1.6.4122|2|4 +1.3.6.1.2.1.25.4.2.1.6.4212|2|4 +1.3.6.1.2.1.25.4.2.1.6.4213|2|4 +1.3.6.1.2.1.25.4.2.1.6.4214|2|4 +1.3.6.1.2.1.25.4.2.1.6.4215|2|4 +1.3.6.1.2.1.25.4.2.1.6.4216|2|4 +1.3.6.1.2.1.25.4.2.1.6.4217|2|4 +1.3.6.1.2.1.25.4.2.1.6.4218|2|4 +1.3.6.1.2.1.25.4.2.1.6.4219|2|4 +1.3.6.1.2.1.25.4.2.1.6.4220|2|4 +1.3.6.1.2.1.25.4.2.1.6.4221|2|4 +1.3.6.1.2.1.25.4.2.1.6.4222|2|4 +1.3.6.1.2.1.25.4.2.1.6.4224|2|4 +1.3.6.1.2.1.25.4.2.1.6.4226|2|4 +1.3.6.1.2.1.25.4.2.1.6.4434|2|4 +1.3.6.1.2.1.25.4.2.1.6.4435|2|4 +1.3.6.1.2.1.25.4.2.1.6.4436|2|4 +1.3.6.1.2.1.25.4.2.1.6.4437|2|4 +1.3.6.1.2.1.25.4.2.1.6.4438|2|4 +1.3.6.1.2.1.25.4.2.1.6.4439|2|4 +1.3.6.1.2.1.25.4.2.1.6.4440|2|4 +1.3.6.1.2.1.25.4.2.1.6.4441|2|4 +1.3.6.1.2.1.25.4.2.1.6.4442|2|4 +1.3.6.1.2.1.25.4.2.1.6.4443|2|4 +1.3.6.1.2.1.25.4.2.1.6.4451|2|4 +1.3.6.1.2.1.25.4.2.1.6.4773|2|4 +1.3.6.1.2.1.25.4.2.1.6.4774|2|4 +1.3.6.1.2.1.25.4.2.1.6.4775|2|4 +1.3.6.1.2.1.25.4.2.1.6.4776|2|4 +1.3.6.1.2.1.25.4.2.1.6.4777|2|4 +1.3.6.1.2.1.25.4.2.1.6.4778|2|4 +1.3.6.1.2.1.25.4.2.1.6.4779|2|4 +1.3.6.1.2.1.25.4.2.1.6.4780|2|4 +1.3.6.1.2.1.25.4.2.1.6.4781|2|4 +1.3.6.1.2.1.25.4.2.1.6.4782|2|4 +1.3.6.1.2.1.25.4.2.1.6.4784|2|4 +1.3.6.1.2.1.25.4.2.1.6.4786|2|4 +1.3.6.1.2.1.25.4.2.1.6.4787|2|4 +1.3.6.1.2.1.25.4.2.1.6.5137|2|4 +1.3.6.1.2.1.25.4.2.1.6.5138|2|4 +1.3.6.1.2.1.25.4.2.1.6.5139|2|4 +1.3.6.1.2.1.25.4.2.1.6.5140|2|4 +1.3.6.1.2.1.25.4.2.1.6.5141|2|4 +1.3.6.1.2.1.25.4.2.1.6.5142|2|4 +1.3.6.1.2.1.25.4.2.1.6.5143|2|4 +1.3.6.1.2.1.25.4.2.1.6.5144|2|4 +1.3.6.1.2.1.25.4.2.1.6.5145|2|4 +1.3.6.1.2.1.25.4.2.1.6.5146|2|4 +1.3.6.1.2.1.25.4.2.1.6.5148|2|4 +1.3.6.1.2.1.25.4.2.1.6.5151|2|4 +1.3.6.1.2.1.25.4.2.1.6.5155|2|4 +1.3.6.1.2.1.25.4.2.1.6.5159|2|4 +1.3.6.1.2.1.25.4.2.1.6.5501|2|4 +1.3.6.1.2.1.25.4.2.1.6.5502|2|4 +1.3.6.1.2.1.25.4.2.1.6.5503|2|4 +1.3.6.1.2.1.25.4.2.1.6.5504|2|4 +1.3.6.1.2.1.25.4.2.1.6.5505|2|4 +1.3.6.1.2.1.25.4.2.1.6.5506|2|4 +1.3.6.1.2.1.25.4.2.1.6.5507|2|4 +1.3.6.1.2.1.25.4.2.1.6.5508|2|4 +1.3.6.1.2.1.25.4.2.1.6.5509|2|4 +1.3.6.1.2.1.25.4.2.1.6.5510|2|4 +1.3.6.1.2.1.25.4.2.1.6.5516|2|4 +1.3.6.1.2.1.25.4.2.1.6.5522|2|4 +1.3.6.1.2.1.25.4.2.1.6.5861|2|4 +1.3.6.1.2.1.25.4.2.1.6.5862|2|4 +1.3.6.1.2.1.25.4.2.1.6.5863|2|4 +1.3.6.1.2.1.25.4.2.1.6.5864|2|4 +1.3.6.1.2.1.25.4.2.1.6.5865|2|4 +1.3.6.1.2.1.25.4.2.1.6.5866|2|4 +1.3.6.1.2.1.25.4.2.1.6.5867|2|4 +1.3.6.1.2.1.25.4.2.1.6.5868|2|4 +1.3.6.1.2.1.25.4.2.1.6.5869|2|4 +1.3.6.1.2.1.25.4.2.1.6.5870|2|4 +1.3.6.1.2.1.25.4.2.1.6.5872|2|4 +1.3.6.1.2.1.25.4.2.1.6.5875|2|4 +1.3.6.1.2.1.25.4.2.1.6.5878|2|4 +1.3.6.1.2.1.25.4.2.1.6.5879|2|4 +1.3.6.1.2.1.25.4.2.1.6.5884|2|4 +1.3.6.1.2.1.25.4.2.1.6.6344|2|4 +1.3.6.1.2.1.25.4.2.1.6.6345|2|4 +1.3.6.1.2.1.25.4.2.1.6.6346|2|4 +1.3.6.1.2.1.25.4.2.1.6.6347|2|4 +1.3.6.1.2.1.25.4.2.1.6.6348|2|4 +1.3.6.1.2.1.25.4.2.1.6.6349|2|4 +1.3.6.1.2.1.25.4.2.1.6.6350|2|4 +1.3.6.1.2.1.25.4.2.1.6.6351|2|4 +1.3.6.1.2.1.25.4.2.1.6.6352|2|4 +1.3.6.1.2.1.25.4.2.1.6.6353|2|4 +1.3.6.1.2.1.25.4.2.1.6.6358|2|4 +1.3.6.1.2.1.25.4.2.1.6.6366|2|4 +1.3.6.1.2.1.25.4.2.1.6.6763|2|4 +1.3.6.1.2.1.25.4.2.1.6.6764|2|4 +1.3.6.1.2.1.25.4.2.1.6.6765|2|4 +1.3.6.1.2.1.25.4.2.1.6.6766|2|4 +1.3.6.1.2.1.25.4.2.1.6.6767|2|4 +1.3.6.1.2.1.25.4.2.1.6.6768|2|4 +1.3.6.1.2.1.25.4.2.1.6.6769|2|4 +1.3.6.1.2.1.25.4.2.1.6.6770|2|4 +1.3.6.1.2.1.25.4.2.1.6.6771|2|4 +1.3.6.1.2.1.25.4.2.1.6.6772|2|4 +1.3.6.1.2.1.25.4.2.1.6.6782|2|4 +1.3.6.1.2.1.25.4.2.1.6.6784|2|4 +1.3.6.1.2.1.25.4.2.1.6.7174|2|4 +1.3.6.1.2.1.25.4.2.1.6.7175|2|4 +1.3.6.1.2.1.25.4.2.1.6.7176|2|4 +1.3.6.1.2.1.25.4.2.1.6.7177|2|4 +1.3.6.1.2.1.25.4.2.1.6.7178|2|4 +1.3.6.1.2.1.25.4.2.1.6.7179|2|4 +1.3.6.1.2.1.25.4.2.1.6.7180|2|4 +1.3.6.1.2.1.25.4.2.1.6.7181|2|4 +1.3.6.1.2.1.25.4.2.1.6.7182|2|4 +1.3.6.1.2.1.25.4.2.1.6.7183|2|4 +1.3.6.1.2.1.25.4.2.1.6.7188|2|4 +1.3.6.1.2.1.25.4.2.1.6.7192|2|4 +1.3.6.1.2.1.25.4.2.1.6.7194|2|4 +1.3.6.1.2.1.25.4.2.1.6.7196|2|4 +1.3.6.1.2.1.25.4.2.1.6.7523|2|4 +1.3.6.1.2.1.25.4.2.1.6.7524|2|4 +1.3.6.1.2.1.25.4.2.1.6.7525|2|4 +1.3.6.1.2.1.25.4.2.1.6.7526|2|4 +1.3.6.1.2.1.25.4.2.1.6.7527|2|4 +1.3.6.1.2.1.25.4.2.1.6.7528|2|4 +1.3.6.1.2.1.25.4.2.1.6.7529|2|4 +1.3.6.1.2.1.25.4.2.1.6.7530|2|4 +1.3.6.1.2.1.25.4.2.1.6.7531|2|4 +1.3.6.1.2.1.25.4.2.1.6.7532|2|4 +1.3.6.1.2.1.25.4.2.1.6.7535|2|4 +1.3.6.1.2.1.25.4.2.1.6.7539|2|4 +1.3.6.1.2.1.25.4.2.1.6.7543|2|4 +1.3.6.1.2.1.25.4.2.1.6.7544|2|4 +1.3.6.1.2.1.25.4.2.1.6.7949|2|4 +1.3.6.1.2.1.25.4.2.1.6.7950|2|4 +1.3.6.1.2.1.25.4.2.1.6.7951|2|4 +1.3.6.1.2.1.25.4.2.1.6.7952|2|4 +1.3.6.1.2.1.25.4.2.1.6.7953|2|4 +1.3.6.1.2.1.25.4.2.1.6.7954|2|4 +1.3.6.1.2.1.25.4.2.1.6.9526|2|4 +1.3.6.1.2.1.25.4.2.1.6.9602|2|4 +1.3.6.1.2.1.25.4.2.1.6.11784|2|4 +1.3.6.1.2.1.25.4.2.1.6.13563|2|4 +1.3.6.1.2.1.25.4.2.1.6.13565|2|4 +1.3.6.1.2.1.25.4.2.1.6.13566|2|4 +1.3.6.1.2.1.25.4.2.1.6.15387|2|4 +1.3.6.1.2.1.25.4.2.1.6.15921|2|4 +1.3.6.1.2.1.25.4.2.1.6.16645|2|4 +1.3.6.1.2.1.25.4.2.1.6.16646|2|4 +1.3.6.1.2.1.25.4.2.1.6.16648|2|4 +1.3.6.1.2.1.25.4.2.1.6.16651|2|4 +1.3.6.1.2.1.25.4.2.1.6.16652|2|4 +1.3.6.1.2.1.25.4.2.1.6.16653|2|4 +1.3.6.1.2.1.25.4.2.1.6.16654|2|4 +1.3.6.1.2.1.25.4.2.1.6.17900|2|4 +1.3.6.1.2.1.25.4.2.1.6.18651|2|4 +1.3.6.1.2.1.25.4.2.1.6.23175|2|4 +1.3.6.1.2.1.25.4.2.1.6.23330|2|4 +1.3.6.1.2.1.25.4.2.1.6.25514|2|4 +1.3.6.1.2.1.25.4.2.1.6.25517|2|4 +1.3.6.1.2.1.25.4.2.1.6.25518|2|4 +1.3.6.1.2.1.25.4.2.1.6.25522|2|4 +1.3.6.1.2.1.25.4.2.1.6.25524|2|4 +1.3.6.1.2.1.25.4.2.1.6.25531|2|4 +1.3.6.1.2.1.25.4.2.1.6.25946|2|4 +1.3.6.1.2.1.25.4.2.1.6.27567|2|4 +1.3.6.1.2.1.25.4.2.1.6.29431|2|4 +1.3.6.1.2.1.25.4.2.1.6.29439|2|4 +1.3.6.1.2.1.25.4.2.1.6.29440|2|4 +1.3.6.1.2.1.25.4.2.1.6.30092|2|4 +1.3.6.1.2.1.25.4.2.1.6.30120|2|4 +1.3.6.1.2.1.25.4.2.1.6.30180|2|4 +1.3.6.1.2.1.25.4.2.1.6.32066|2|4 +1.3.6.1.2.1.25.4.2.1.7.1|2|2 +1.3.6.1.2.1.25.4.2.1.7.415|2|2 +1.3.6.1.2.1.25.4.2.1.7.440|2|2 +1.3.6.1.2.1.25.4.2.1.7.447|2|2 +1.3.6.1.2.1.25.4.2.1.7.921|2|2 +1.3.6.1.2.1.25.4.2.1.7.951|2|2 +1.3.6.1.2.1.25.4.2.1.7.977|2|2 +1.3.6.1.2.1.25.4.2.1.7.979|2|2 +1.3.6.1.2.1.25.4.2.1.7.982|2|2 +1.3.6.1.2.1.25.4.2.1.7.984|2|2 +1.3.6.1.2.1.25.4.2.1.7.1038|2|2 +1.3.6.1.2.1.25.4.2.1.7.1826|2|2 +1.3.6.1.2.1.25.4.2.1.7.2851|2|2 +1.3.6.1.2.1.25.4.2.1.7.2852|2|2 +1.3.6.1.2.1.25.4.2.1.7.2919|2|2 +1.3.6.1.2.1.25.4.2.1.7.3773|2|2 +1.3.6.1.2.1.25.4.2.1.7.4068|2|2 +1.3.6.1.2.1.25.4.2.1.7.4085|2|2 +1.3.6.1.2.1.25.4.2.1.7.4119|2|2 +1.3.6.1.2.1.25.4.2.1.7.4122|2|2 +1.3.6.1.2.1.25.4.2.1.7.4212|2|2 +1.3.6.1.2.1.25.4.2.1.7.4213|2|2 +1.3.6.1.2.1.25.4.2.1.7.4214|2|2 +1.3.6.1.2.1.25.4.2.1.7.4215|2|2 +1.3.6.1.2.1.25.4.2.1.7.4216|2|2 +1.3.6.1.2.1.25.4.2.1.7.4217|2|2 +1.3.6.1.2.1.25.4.2.1.7.4218|2|2 +1.3.6.1.2.1.25.4.2.1.7.4219|2|2 +1.3.6.1.2.1.25.4.2.1.7.4220|2|2 +1.3.6.1.2.1.25.4.2.1.7.4221|2|2 +1.3.6.1.2.1.25.4.2.1.7.4222|2|2 +1.3.6.1.2.1.25.4.2.1.7.4224|2|2 +1.3.6.1.2.1.25.4.2.1.7.4226|2|2 +1.3.6.1.2.1.25.4.2.1.7.4434|2|2 +1.3.6.1.2.1.25.4.2.1.7.4435|2|2 +1.3.6.1.2.1.25.4.2.1.7.4436|2|2 +1.3.6.1.2.1.25.4.2.1.7.4437|2|2 +1.3.6.1.2.1.25.4.2.1.7.4438|2|2 +1.3.6.1.2.1.25.4.2.1.7.4439|2|2 +1.3.6.1.2.1.25.4.2.1.7.4440|2|2 +1.3.6.1.2.1.25.4.2.1.7.4441|2|2 +1.3.6.1.2.1.25.4.2.1.7.4442|2|2 +1.3.6.1.2.1.25.4.2.1.7.4443|2|2 +1.3.6.1.2.1.25.4.2.1.7.4451|2|2 +1.3.6.1.2.1.25.4.2.1.7.4773|2|2 +1.3.6.1.2.1.25.4.2.1.7.4774|2|2 +1.3.6.1.2.1.25.4.2.1.7.4775|2|2 +1.3.6.1.2.1.25.4.2.1.7.4776|2|2 +1.3.6.1.2.1.25.4.2.1.7.4777|2|2 +1.3.6.1.2.1.25.4.2.1.7.4778|2|2 +1.3.6.1.2.1.25.4.2.1.7.4779|2|2 +1.3.6.1.2.1.25.4.2.1.7.4780|2|2 +1.3.6.1.2.1.25.4.2.1.7.4781|2|2 +1.3.6.1.2.1.25.4.2.1.7.4782|2|2 +1.3.6.1.2.1.25.4.2.1.7.4784|2|2 +1.3.6.1.2.1.25.4.2.1.7.4786|2|2 +1.3.6.1.2.1.25.4.2.1.7.4787|2|2 +1.3.6.1.2.1.25.4.2.1.7.5137|2|2 +1.3.6.1.2.1.25.4.2.1.7.5138|2|2 +1.3.6.1.2.1.25.4.2.1.7.5139|2|2 +1.3.6.1.2.1.25.4.2.1.7.5140|2|2 +1.3.6.1.2.1.25.4.2.1.7.5141|2|2 +1.3.6.1.2.1.25.4.2.1.7.5142|2|2 +1.3.6.1.2.1.25.4.2.1.7.5143|2|2 +1.3.6.1.2.1.25.4.2.1.7.5144|2|2 +1.3.6.1.2.1.25.4.2.1.7.5145|2|2 +1.3.6.1.2.1.25.4.2.1.7.5146|2|2 +1.3.6.1.2.1.25.4.2.1.7.5148|2|2 +1.3.6.1.2.1.25.4.2.1.7.5151|2|2 +1.3.6.1.2.1.25.4.2.1.7.5155|2|2 +1.3.6.1.2.1.25.4.2.1.7.5159|2|2 +1.3.6.1.2.1.25.4.2.1.7.5501|2|2 +1.3.6.1.2.1.25.4.2.1.7.5502|2|2 +1.3.6.1.2.1.25.4.2.1.7.5503|2|2 +1.3.6.1.2.1.25.4.2.1.7.5504|2|2 +1.3.6.1.2.1.25.4.2.1.7.5505|2|2 +1.3.6.1.2.1.25.4.2.1.7.5506|2|2 +1.3.6.1.2.1.25.4.2.1.7.5507|2|2 +1.3.6.1.2.1.25.4.2.1.7.5508|2|2 +1.3.6.1.2.1.25.4.2.1.7.5509|2|2 +1.3.6.1.2.1.25.4.2.1.7.5510|2|2 +1.3.6.1.2.1.25.4.2.1.7.5516|2|2 +1.3.6.1.2.1.25.4.2.1.7.5522|2|2 +1.3.6.1.2.1.25.4.2.1.7.5861|2|2 +1.3.6.1.2.1.25.4.2.1.7.5862|2|2 +1.3.6.1.2.1.25.4.2.1.7.5863|2|2 +1.3.6.1.2.1.25.4.2.1.7.5864|2|2 +1.3.6.1.2.1.25.4.2.1.7.5865|2|2 +1.3.6.1.2.1.25.4.2.1.7.5866|2|2 +1.3.6.1.2.1.25.4.2.1.7.5867|2|2 +1.3.6.1.2.1.25.4.2.1.7.5868|2|2 +1.3.6.1.2.1.25.4.2.1.7.5869|2|2 +1.3.6.1.2.1.25.4.2.1.7.5870|2|2 +1.3.6.1.2.1.25.4.2.1.7.5872|2|2 +1.3.6.1.2.1.25.4.2.1.7.5875|2|2 +1.3.6.1.2.1.25.4.2.1.7.5878|2|2 +1.3.6.1.2.1.25.4.2.1.7.5879|2|2 +1.3.6.1.2.1.25.4.2.1.7.5884|2|2 +1.3.6.1.2.1.25.4.2.1.7.6344|2|2 +1.3.6.1.2.1.25.4.2.1.7.6345|2|2 +1.3.6.1.2.1.25.4.2.1.7.6346|2|2 +1.3.6.1.2.1.25.4.2.1.7.6347|2|2 +1.3.6.1.2.1.25.4.2.1.7.6348|2|2 +1.3.6.1.2.1.25.4.2.1.7.6349|2|2 +1.3.6.1.2.1.25.4.2.1.7.6350|2|2 +1.3.6.1.2.1.25.4.2.1.7.6351|2|2 +1.3.6.1.2.1.25.4.2.1.7.6352|2|2 +1.3.6.1.2.1.25.4.2.1.7.6353|2|2 +1.3.6.1.2.1.25.4.2.1.7.6358|2|2 +1.3.6.1.2.1.25.4.2.1.7.6366|2|2 +1.3.6.1.2.1.25.4.2.1.7.6763|2|2 +1.3.6.1.2.1.25.4.2.1.7.6764|2|2 +1.3.6.1.2.1.25.4.2.1.7.6765|2|2 +1.3.6.1.2.1.25.4.2.1.7.6766|2|2 +1.3.6.1.2.1.25.4.2.1.7.6767|2|2 +1.3.6.1.2.1.25.4.2.1.7.6768|2|2 +1.3.6.1.2.1.25.4.2.1.7.6769|2|2 +1.3.6.1.2.1.25.4.2.1.7.6770|2|2 +1.3.6.1.2.1.25.4.2.1.7.6771|2|2 +1.3.6.1.2.1.25.4.2.1.7.6772|2|2 +1.3.6.1.2.1.25.4.2.1.7.6782|2|2 +1.3.6.1.2.1.25.4.2.1.7.6784|2|2 +1.3.6.1.2.1.25.4.2.1.7.7174|2|2 +1.3.6.1.2.1.25.4.2.1.7.7175|2|2 +1.3.6.1.2.1.25.4.2.1.7.7176|2|2 +1.3.6.1.2.1.25.4.2.1.7.7177|2|2 +1.3.6.1.2.1.25.4.2.1.7.7178|2|2 +1.3.6.1.2.1.25.4.2.1.7.7179|2|2 +1.3.6.1.2.1.25.4.2.1.7.7180|2|2 +1.3.6.1.2.1.25.4.2.1.7.7181|2|2 +1.3.6.1.2.1.25.4.2.1.7.7182|2|2 +1.3.6.1.2.1.25.4.2.1.7.7183|2|2 +1.3.6.1.2.1.25.4.2.1.7.7188|2|2 +1.3.6.1.2.1.25.4.2.1.7.7192|2|2 +1.3.6.1.2.1.25.4.2.1.7.7194|2|2 +1.3.6.1.2.1.25.4.2.1.7.7196|2|2 +1.3.6.1.2.1.25.4.2.1.7.7523|2|2 +1.3.6.1.2.1.25.4.2.1.7.7524|2|2 +1.3.6.1.2.1.25.4.2.1.7.7525|2|2 +1.3.6.1.2.1.25.4.2.1.7.7526|2|2 +1.3.6.1.2.1.25.4.2.1.7.7527|2|2 +1.3.6.1.2.1.25.4.2.1.7.7528|2|2 +1.3.6.1.2.1.25.4.2.1.7.7529|2|2 +1.3.6.1.2.1.25.4.2.1.7.7530|2|2 +1.3.6.1.2.1.25.4.2.1.7.7531|2|2 +1.3.6.1.2.1.25.4.2.1.7.7532|2|2 +1.3.6.1.2.1.25.4.2.1.7.7535|2|2 +1.3.6.1.2.1.25.4.2.1.7.7539|2|2 +1.3.6.1.2.1.25.4.2.1.7.7543|2|2 +1.3.6.1.2.1.25.4.2.1.7.7544|2|2 +1.3.6.1.2.1.25.4.2.1.7.7949|2|2 +1.3.6.1.2.1.25.4.2.1.7.7950|2|2 +1.3.6.1.2.1.25.4.2.1.7.7951|2|2 +1.3.6.1.2.1.25.4.2.1.7.7952|2|2 +1.3.6.1.2.1.25.4.2.1.7.7953|2|2 +1.3.6.1.2.1.25.4.2.1.7.7954|2|2 +1.3.6.1.2.1.25.4.2.1.7.9526|2|2 +1.3.6.1.2.1.25.4.2.1.7.9602|2|2 +1.3.6.1.2.1.25.4.2.1.7.11784|2|2 +1.3.6.1.2.1.25.4.2.1.7.13563|2|2 +1.3.6.1.2.1.25.4.2.1.7.13565|2|2 +1.3.6.1.2.1.25.4.2.1.7.13566|2|2 +1.3.6.1.2.1.25.4.2.1.7.15387|2|2 +1.3.6.1.2.1.25.4.2.1.7.15921|2|2 +1.3.6.1.2.1.25.4.2.1.7.16645|2|2 +1.3.6.1.2.1.25.4.2.1.7.16646|2|2 +1.3.6.1.2.1.25.4.2.1.7.16648|2|2 +1.3.6.1.2.1.25.4.2.1.7.16651|2|2 +1.3.6.1.2.1.25.4.2.1.7.16652|2|2 +1.3.6.1.2.1.25.4.2.1.7.16653|2|2 +1.3.6.1.2.1.25.4.2.1.7.16654|2|2 +1.3.6.1.2.1.25.4.2.1.7.17900|2|2 +1.3.6.1.2.1.25.4.2.1.7.18651|2|2 +1.3.6.1.2.1.25.4.2.1.7.23175|2|2 +1.3.6.1.2.1.25.4.2.1.7.23330|2|1 +1.3.6.1.2.1.25.4.2.1.7.25514|2|2 +1.3.6.1.2.1.25.4.2.1.7.25517|2|2 +1.3.6.1.2.1.25.4.2.1.7.25518|2|2 +1.3.6.1.2.1.25.4.2.1.7.25522|2|2 +1.3.6.1.2.1.25.4.2.1.7.25524|2|2 +1.3.6.1.2.1.25.4.2.1.7.25531|2|2 +1.3.6.1.2.1.25.4.2.1.7.25946|2|2 +1.3.6.1.2.1.25.4.2.1.7.27567|2|2 +1.3.6.1.2.1.25.4.2.1.7.29431|2|2 +1.3.6.1.2.1.25.4.2.1.7.29439|2|2 +1.3.6.1.2.1.25.4.2.1.7.29440|2|2 +1.3.6.1.2.1.25.4.2.1.7.30092|2|2 +1.3.6.1.2.1.25.4.2.1.7.30120|2|2 +1.3.6.1.2.1.25.4.2.1.7.30180|2|2 +1.3.6.1.2.1.25.4.2.1.7.32066|2|2 +1.3.6.1.2.1.25.5.1.1.1.1|2|165262 +1.3.6.1.2.1.25.5.1.1.1.415|2|61390 +1.3.6.1.2.1.25.5.1.1.1.440|2|4 +1.3.6.1.2.1.25.5.1.1.1.447|2|39 +1.3.6.1.2.1.25.5.1.1.1.921|2|30333 +1.3.6.1.2.1.25.5.1.1.1.951|2|5692 +1.3.6.1.2.1.25.5.1.1.1.977|2|40480 +1.3.6.1.2.1.25.5.1.1.1.979|2|0 +1.3.6.1.2.1.25.5.1.1.1.982|2|12218 +1.3.6.1.2.1.25.5.1.1.1.984|2|25789 +1.3.6.1.2.1.25.5.1.1.1.1038|2|4465 +1.3.6.1.2.1.25.5.1.1.1.1826|2|48202 +1.3.6.1.2.1.25.5.1.1.1.2851|2|7058 +1.3.6.1.2.1.25.5.1.1.1.2852|2|17967 +1.3.6.1.2.1.25.5.1.1.1.2919|2|42261 +1.3.6.1.2.1.25.5.1.1.1.3773|2|6 +1.3.6.1.2.1.25.5.1.1.1.4068|2|8841 +1.3.6.1.2.1.25.5.1.1.1.4085|2|7824 +1.3.6.1.2.1.25.5.1.1.1.4119|2|1 +1.3.6.1.2.1.25.5.1.1.1.4122|2|0 +1.3.6.1.2.1.25.5.1.1.1.4212|2|8 +1.3.6.1.2.1.25.5.1.1.1.4213|2|7 +1.3.6.1.2.1.25.5.1.1.1.4214|2|6 +1.3.6.1.2.1.25.5.1.1.1.4215|2|7 +1.3.6.1.2.1.25.5.1.1.1.4216|2|13 +1.3.6.1.2.1.25.5.1.1.1.4217|2|7 +1.3.6.1.2.1.25.5.1.1.1.4218|2|7 +1.3.6.1.2.1.25.5.1.1.1.4219|2|6 +1.3.6.1.2.1.25.5.1.1.1.4220|2|6 +1.3.6.1.2.1.25.5.1.1.1.4221|2|6 +1.3.6.1.2.1.25.5.1.1.1.4222|2|6290 +1.3.6.1.2.1.25.5.1.1.1.4224|2|5535 +1.3.6.1.2.1.25.5.1.1.1.4226|2|7801 +1.3.6.1.2.1.25.5.1.1.1.4434|2|6 +1.3.6.1.2.1.25.5.1.1.1.4435|2|5 +1.3.6.1.2.1.25.5.1.1.1.4436|2|7 +1.3.6.1.2.1.25.5.1.1.1.4437|2|7 +1.3.6.1.2.1.25.5.1.1.1.4438|2|7 +1.3.6.1.2.1.25.5.1.1.1.4439|2|6 +1.3.6.1.2.1.25.5.1.1.1.4440|2|6 +1.3.6.1.2.1.25.5.1.1.1.4441|2|6 +1.3.6.1.2.1.25.5.1.1.1.4442|2|9 +1.3.6.1.2.1.25.5.1.1.1.4443|2|7 +1.3.6.1.2.1.25.5.1.1.1.4451|2|5345 +1.3.6.1.2.1.25.5.1.1.1.4773|2|6 +1.3.6.1.2.1.25.5.1.1.1.4774|2|6 +1.3.6.1.2.1.25.5.1.1.1.4775|2|14 +1.3.6.1.2.1.25.5.1.1.1.4776|2|6 +1.3.6.1.2.1.25.5.1.1.1.4777|2|6 +1.3.6.1.2.1.25.5.1.1.1.4778|2|8 +1.3.6.1.2.1.25.5.1.1.1.4779|2|10 +1.3.6.1.2.1.25.5.1.1.1.4780|2|6 +1.3.6.1.2.1.25.5.1.1.1.4781|2|6 +1.3.6.1.2.1.25.5.1.1.1.4782|2|6 +1.3.6.1.2.1.25.5.1.1.1.4784|2|25 +1.3.6.1.2.1.25.5.1.1.1.4786|2|6114 +1.3.6.1.2.1.25.5.1.1.1.4787|2|18170 +1.3.6.1.2.1.25.5.1.1.1.5137|2|8 +1.3.6.1.2.1.25.5.1.1.1.5138|2|6 +1.3.6.1.2.1.25.5.1.1.1.5139|2|290 +1.3.6.1.2.1.25.5.1.1.1.5140|2|8 +1.3.6.1.2.1.25.5.1.1.1.5141|2|6 +1.3.6.1.2.1.25.5.1.1.1.5142|2|7 +1.3.6.1.2.1.25.5.1.1.1.5143|2|7 +1.3.6.1.2.1.25.5.1.1.1.5144|2|232 +1.3.6.1.2.1.25.5.1.1.1.5145|2|6 +1.3.6.1.2.1.25.5.1.1.1.5146|2|6 +1.3.6.1.2.1.25.5.1.1.1.5148|2|10704 +1.3.6.1.2.1.25.5.1.1.1.5151|2|766 +1.3.6.1.2.1.25.5.1.1.1.5155|2|249218 +1.3.6.1.2.1.25.5.1.1.1.5159|2|19 +1.3.6.1.2.1.25.5.1.1.1.5501|2|7 +1.3.6.1.2.1.25.5.1.1.1.5502|2|6 +1.3.6.1.2.1.25.5.1.1.1.5503|2|253 +1.3.6.1.2.1.25.5.1.1.1.5504|2|6 +1.3.6.1.2.1.25.5.1.1.1.5505|2|6 +1.3.6.1.2.1.25.5.1.1.1.5506|2|232 +1.3.6.1.2.1.25.5.1.1.1.5507|2|7 +1.3.6.1.2.1.25.5.1.1.1.5508|2|6 +1.3.6.1.2.1.25.5.1.1.1.5509|2|6 +1.3.6.1.2.1.25.5.1.1.1.5510|2|5 +1.3.6.1.2.1.25.5.1.1.1.5516|2|6706 +1.3.6.1.2.1.25.5.1.1.1.5522|2|9313 +1.3.6.1.2.1.25.5.1.1.1.5861|2|7 +1.3.6.1.2.1.25.5.1.1.1.5862|2|7 +1.3.6.1.2.1.25.5.1.1.1.5863|2|6 +1.3.6.1.2.1.25.5.1.1.1.5864|2|254 +1.3.6.1.2.1.25.5.1.1.1.5865|2|255 +1.3.6.1.2.1.25.5.1.1.1.5866|2|6 +1.3.6.1.2.1.25.5.1.1.1.5867|2|8 +1.3.6.1.2.1.25.5.1.1.1.5868|2|8 +1.3.6.1.2.1.25.5.1.1.1.5869|2|6 +1.3.6.1.2.1.25.5.1.1.1.5870|2|6 +1.3.6.1.2.1.25.5.1.1.1.5872|2|89111 +1.3.6.1.2.1.25.5.1.1.1.5875|2|1578 +1.3.6.1.2.1.25.5.1.1.1.5878|2|315974 +1.3.6.1.2.1.25.5.1.1.1.5879|2|135920 +1.3.6.1.2.1.25.5.1.1.1.5884|2|125 +1.3.6.1.2.1.25.5.1.1.1.6344|2|8 +1.3.6.1.2.1.25.5.1.1.1.6345|2|226 +1.3.6.1.2.1.25.5.1.1.1.6346|2|7 +1.3.6.1.2.1.25.5.1.1.1.6347|2|7 +1.3.6.1.2.1.25.5.1.1.1.6348|2|6 +1.3.6.1.2.1.25.5.1.1.1.6349|2|6 +1.3.6.1.2.1.25.5.1.1.1.6350|2|7 +1.3.6.1.2.1.25.5.1.1.1.6351|2|7 +1.3.6.1.2.1.25.5.1.1.1.6352|2|6 +1.3.6.1.2.1.25.5.1.1.1.6353|2|6 +1.3.6.1.2.1.25.5.1.1.1.6358|2|1124348 +1.3.6.1.2.1.25.5.1.1.1.6366|2|24875 +1.3.6.1.2.1.25.5.1.1.1.6763|2|7 +1.3.6.1.2.1.25.5.1.1.1.6764|2|6 +1.3.6.1.2.1.25.5.1.1.1.6765|2|7 +1.3.6.1.2.1.25.5.1.1.1.6766|2|9 +1.3.6.1.2.1.25.5.1.1.1.6767|2|6 +1.3.6.1.2.1.25.5.1.1.1.6768|2|8 +1.3.6.1.2.1.25.5.1.1.1.6769|2|6 +1.3.6.1.2.1.25.5.1.1.1.6770|2|279 +1.3.6.1.2.1.25.5.1.1.1.6771|2|6 +1.3.6.1.2.1.25.5.1.1.1.6772|2|6 +1.3.6.1.2.1.25.5.1.1.1.6782|2|16931 +1.3.6.1.2.1.25.5.1.1.1.6784|2|13643 +1.3.6.1.2.1.25.5.1.1.1.7174|2|7 +1.3.6.1.2.1.25.5.1.1.1.7175|2|248 +1.3.6.1.2.1.25.5.1.1.1.7176|2|6 +1.3.6.1.2.1.25.5.1.1.1.7177|2|6 +1.3.6.1.2.1.25.5.1.1.1.7178|2|7 +1.3.6.1.2.1.25.5.1.1.1.7179|2|7 +1.3.6.1.2.1.25.5.1.1.1.7180|2|11 +1.3.6.1.2.1.25.5.1.1.1.7181|2|7 +1.3.6.1.2.1.25.5.1.1.1.7182|2|231 +1.3.6.1.2.1.25.5.1.1.1.7183|2|6 +1.3.6.1.2.1.25.5.1.1.1.7188|2|444388 +1.3.6.1.2.1.25.5.1.1.1.7192|2|58233 +1.3.6.1.2.1.25.5.1.1.1.7194|2|375 +1.3.6.1.2.1.25.5.1.1.1.7196|2|19748 +1.3.6.1.2.1.25.5.1.1.1.7523|2|26 +1.3.6.1.2.1.25.5.1.1.1.7524|2|7 +1.3.6.1.2.1.25.5.1.1.1.7525|2|5 +1.3.6.1.2.1.25.5.1.1.1.7526|2|9 +1.3.6.1.2.1.25.5.1.1.1.7527|2|6 +1.3.6.1.2.1.25.5.1.1.1.7528|2|7 +1.3.6.1.2.1.25.5.1.1.1.7529|2|7 +1.3.6.1.2.1.25.5.1.1.1.7530|2|6 +1.3.6.1.2.1.25.5.1.1.1.7531|2|7 +1.3.6.1.2.1.25.5.1.1.1.7532|2|6 +1.3.6.1.2.1.25.5.1.1.1.7535|2|12645 +1.3.6.1.2.1.25.5.1.1.1.7539|2|250095 +1.3.6.1.2.1.25.5.1.1.1.7543|2|1623 +1.3.6.1.2.1.25.5.1.1.1.7544|2|464 +1.3.6.1.2.1.25.5.1.1.1.7949|2|6 +1.3.6.1.2.1.25.5.1.1.1.7950|2|6 +1.3.6.1.2.1.25.5.1.1.1.7951|2|6 +1.3.6.1.2.1.25.5.1.1.1.7952|2|6 +1.3.6.1.2.1.25.5.1.1.1.7953|2|6 +1.3.6.1.2.1.25.5.1.1.1.7954|2|8 +1.3.6.1.2.1.25.5.1.1.1.9526|2|19 +1.3.6.1.2.1.25.5.1.1.1.9602|2|2907 +1.3.6.1.2.1.25.5.1.1.1.11784|2|5 +1.3.6.1.2.1.25.5.1.1.1.13563|2|9 +1.3.6.1.2.1.25.5.1.1.1.13565|2|19 +1.3.6.1.2.1.25.5.1.1.1.13566|2|165 +1.3.6.1.2.1.25.5.1.1.1.15387|2|1377 +1.3.6.1.2.1.25.5.1.1.1.15921|2|2408518 +1.3.6.1.2.1.25.5.1.1.1.16645|2|553 +1.3.6.1.2.1.25.5.1.1.1.16646|2|353 +1.3.6.1.2.1.25.5.1.1.1.16648|2|23 +1.3.6.1.2.1.25.5.1.1.1.16651|2|372 +1.3.6.1.2.1.25.5.1.1.1.16652|2|1145 +1.3.6.1.2.1.25.5.1.1.1.16653|2|4450 +1.3.6.1.2.1.25.5.1.1.1.16654|2|75 +1.3.6.1.2.1.25.5.1.1.1.17900|2|78 +1.3.6.1.2.1.25.5.1.1.1.18651|2|169141 +1.3.6.1.2.1.25.5.1.1.1.23175|2|39960 +1.3.6.1.2.1.25.5.1.1.1.23330|2|34970 +1.3.6.1.2.1.25.5.1.1.1.25514|2|214 +1.3.6.1.2.1.25.5.1.1.1.25517|2|1974 +1.3.6.1.2.1.25.5.1.1.1.25518|2|4 +1.3.6.1.2.1.25.5.1.1.1.25522|2|55110 +1.3.6.1.2.1.25.5.1.1.1.25524|2|1527 +1.3.6.1.2.1.25.5.1.1.1.25531|2|6703 +1.3.6.1.2.1.25.5.1.1.1.25946|2|105695 +1.3.6.1.2.1.25.5.1.1.1.27567|2|1 +1.3.6.1.2.1.25.5.1.1.1.29431|2|390 +1.3.6.1.2.1.25.5.1.1.1.29439|2|397 +1.3.6.1.2.1.25.5.1.1.1.29440|2|562 +1.3.6.1.2.1.25.5.1.1.1.30092|2|30725875 +1.3.6.1.2.1.25.5.1.1.1.30120|2|502 +1.3.6.1.2.1.25.5.1.1.1.30180|2|17 +1.3.6.1.2.1.25.5.1.1.1.32066|2|0 +1.3.6.1.2.1.25.5.1.1.2.1|2|4500 +1.3.6.1.2.1.25.5.1.1.2.415|2|1948 +1.3.6.1.2.1.25.5.1.1.2.440|2|220 +1.3.6.1.2.1.25.5.1.1.2.447|2|144 +1.3.6.1.2.1.25.5.1.1.2.921|2|40 +1.3.6.1.2.1.25.5.1.1.2.951|2|492 +1.3.6.1.2.1.25.5.1.1.2.977|2|1040 +1.3.6.1.2.1.25.5.1.1.2.979|2|48 +1.3.6.1.2.1.25.5.1.1.2.982|2|444 +1.3.6.1.2.1.25.5.1.1.2.984|2|1108 +1.3.6.1.2.1.25.5.1.1.2.1038|2|16 +1.3.6.1.2.1.25.5.1.1.2.1826|2|5652 +1.3.6.1.2.1.25.5.1.1.2.2851|2|436 +1.3.6.1.2.1.25.5.1.1.2.2852|2|15216 +1.3.6.1.2.1.25.5.1.1.2.2919|2|89012 +1.3.6.1.2.1.25.5.1.1.2.3773|2|140 +1.3.6.1.2.1.25.5.1.1.2.4068|2|6820 +1.3.6.1.2.1.25.5.1.1.2.4085|2|188 +1.3.6.1.2.1.25.5.1.1.2.4119|2|48 +1.3.6.1.2.1.25.5.1.1.2.4122|2|44 +1.3.6.1.2.1.25.5.1.1.2.4212|2|212 +1.3.6.1.2.1.25.5.1.1.2.4213|2|152 +1.3.6.1.2.1.25.5.1.1.2.4214|2|172 +1.3.6.1.2.1.25.5.1.1.2.4215|2|336 +1.3.6.1.2.1.25.5.1.1.2.4216|2|304 +1.3.6.1.2.1.25.5.1.1.2.4217|2|312 +1.3.6.1.2.1.25.5.1.1.2.4218|2|276 +1.3.6.1.2.1.25.5.1.1.2.4219|2|172 +1.3.6.1.2.1.25.5.1.1.2.4220|2|296 +1.3.6.1.2.1.25.5.1.1.2.4221|2|276 +1.3.6.1.2.1.25.5.1.1.2.4222|2|15716 +1.3.6.1.2.1.25.5.1.1.2.4224|2|2548 +1.3.6.1.2.1.25.5.1.1.2.4226|2|4060 +1.3.6.1.2.1.25.5.1.1.2.4434|2|312 +1.3.6.1.2.1.25.5.1.1.2.4435|2|348 +1.3.6.1.2.1.25.5.1.1.2.4436|2|280 +1.3.6.1.2.1.25.5.1.1.2.4437|2|304 +1.3.6.1.2.1.25.5.1.1.2.4438|2|272 +1.3.6.1.2.1.25.5.1.1.2.4439|2|296 +1.3.6.1.2.1.25.5.1.1.2.4440|2|296 +1.3.6.1.2.1.25.5.1.1.2.4441|2|280 +1.3.6.1.2.1.25.5.1.1.2.4442|2|300 +1.3.6.1.2.1.25.5.1.1.2.4443|2|164 +1.3.6.1.2.1.25.5.1.1.2.4451|2|16160 +1.3.6.1.2.1.25.5.1.1.2.4773|2|152 +1.3.6.1.2.1.25.5.1.1.2.4774|2|348 +1.3.6.1.2.1.25.5.1.1.2.4775|2|380 +1.3.6.1.2.1.25.5.1.1.2.4776|2|348 +1.3.6.1.2.1.25.5.1.1.2.4777|2|292 +1.3.6.1.2.1.25.5.1.1.2.4778|2|308 +1.3.6.1.2.1.25.5.1.1.2.4779|2|256 +1.3.6.1.2.1.25.5.1.1.2.4780|2|264 +1.3.6.1.2.1.25.5.1.1.2.4781|2|172 +1.3.6.1.2.1.25.5.1.1.2.4782|2|364 +1.3.6.1.2.1.25.5.1.1.2.4784|2|760 +1.3.6.1.2.1.25.5.1.1.2.4786|2|3064 +1.3.6.1.2.1.25.5.1.1.2.4787|2|5052 +1.3.6.1.2.1.25.5.1.1.2.5137|2|176 +1.3.6.1.2.1.25.5.1.1.2.5138|2|176 +1.3.6.1.2.1.25.5.1.1.2.5139|2|164 +1.3.6.1.2.1.25.5.1.1.2.5140|2|324 +1.3.6.1.2.1.25.5.1.1.2.5141|2|356 +1.3.6.1.2.1.25.5.1.1.2.5142|2|332 +1.3.6.1.2.1.25.5.1.1.2.5143|2|296 +1.3.6.1.2.1.25.5.1.1.2.5144|2|176 +1.3.6.1.2.1.25.5.1.1.2.5145|2|280 +1.3.6.1.2.1.25.5.1.1.2.5146|2|300 +1.3.6.1.2.1.25.5.1.1.2.5148|2|16600 +1.3.6.1.2.1.25.5.1.1.2.5151|2|1032 +1.3.6.1.2.1.25.5.1.1.2.5155|2|16436 +1.3.6.1.2.1.25.5.1.1.2.5159|2|16788 +1.3.6.1.2.1.25.5.1.1.2.5501|2|324 +1.3.6.1.2.1.25.5.1.1.2.5502|2|348 +1.3.6.1.2.1.25.5.1.1.2.5503|2|256 +1.3.6.1.2.1.25.5.1.1.2.5504|2|284 +1.3.6.1.2.1.25.5.1.1.2.5505|2|152 +1.3.6.1.2.1.25.5.1.1.2.5506|2|176 +1.3.6.1.2.1.25.5.1.1.2.5507|2|296 +1.3.6.1.2.1.25.5.1.1.2.5508|2|304 +1.3.6.1.2.1.25.5.1.1.2.5509|2|284 +1.3.6.1.2.1.25.5.1.1.2.5510|2|304 +1.3.6.1.2.1.25.5.1.1.2.5516|2|4252 +1.3.6.1.2.1.25.5.1.1.2.5522|2|4436 +1.3.6.1.2.1.25.5.1.1.2.5861|2|144 +1.3.6.1.2.1.25.5.1.1.2.5862|2|324 +1.3.6.1.2.1.25.5.1.1.2.5863|2|144 +1.3.6.1.2.1.25.5.1.1.2.5864|2|140 +1.3.6.1.2.1.25.5.1.1.2.5865|2|392 +1.3.6.1.2.1.25.5.1.1.2.5866|2|308 +1.3.6.1.2.1.25.5.1.1.2.5867|2|384 +1.3.6.1.2.1.25.5.1.1.2.5868|2|324 +1.3.6.1.2.1.25.5.1.1.2.5869|2|268 +1.3.6.1.2.1.25.5.1.1.2.5870|2|284 +1.3.6.1.2.1.25.5.1.1.2.5872|2|21036 +1.3.6.1.2.1.25.5.1.1.2.5875|2|17260 +1.3.6.1.2.1.25.5.1.1.2.5878|2|93932 +1.3.6.1.2.1.25.5.1.1.2.5879|2|22224 +1.3.6.1.2.1.25.5.1.1.2.5884|2|384 +1.3.6.1.2.1.25.5.1.1.2.6344|2|328 +1.3.6.1.2.1.25.5.1.1.2.6345|2|144 +1.3.6.1.2.1.25.5.1.1.2.6346|2|280 +1.3.6.1.2.1.25.5.1.1.2.6347|2|300 +1.3.6.1.2.1.25.5.1.1.2.6348|2|280 +1.3.6.1.2.1.25.5.1.1.2.6349|2|280 +1.3.6.1.2.1.25.5.1.1.2.6350|2|296 +1.3.6.1.2.1.25.5.1.1.2.6351|2|144 +1.3.6.1.2.1.25.5.1.1.2.6352|2|280 +1.3.6.1.2.1.25.5.1.1.2.6353|2|388 +1.3.6.1.2.1.25.5.1.1.2.6358|2|14944 +1.3.6.1.2.1.25.5.1.1.2.6366|2|832 +1.3.6.1.2.1.25.5.1.1.2.6763|2|328 +1.3.6.1.2.1.25.5.1.1.2.6764|2|356 +1.3.6.1.2.1.25.5.1.1.2.6765|2|268 +1.3.6.1.2.1.25.5.1.1.2.6766|2|356 +1.3.6.1.2.1.25.5.1.1.2.6767|2|268 +1.3.6.1.2.1.25.5.1.1.2.6768|2|320 +1.3.6.1.2.1.25.5.1.1.2.6769|2|144 +1.3.6.1.2.1.25.5.1.1.2.6770|2|340 +1.3.6.1.2.1.25.5.1.1.2.6771|2|144 +1.3.6.1.2.1.25.5.1.1.2.6772|2|296 +1.3.6.1.2.1.25.5.1.1.2.6782|2|7868 +1.3.6.1.2.1.25.5.1.1.2.6784|2|17968 +1.3.6.1.2.1.25.5.1.1.2.7174|2|292 +1.3.6.1.2.1.25.5.1.1.2.7175|2|144 +1.3.6.1.2.1.25.5.1.1.2.7176|2|332 +1.3.6.1.2.1.25.5.1.1.2.7177|2|144 +1.3.6.1.2.1.25.5.1.1.2.7178|2|332 +1.3.6.1.2.1.25.5.1.1.2.7179|2|144 +1.3.6.1.2.1.25.5.1.1.2.7180|2|320 +1.3.6.1.2.1.25.5.1.1.2.7181|2|268 +1.3.6.1.2.1.25.5.1.1.2.7182|2|136 +1.3.6.1.2.1.25.5.1.1.2.7183|2|292 +1.3.6.1.2.1.25.5.1.1.2.7188|2|171088 +1.3.6.1.2.1.25.5.1.1.2.7192|2|32956 +1.3.6.1.2.1.25.5.1.1.2.7194|2|17216 +1.3.6.1.2.1.25.5.1.1.2.7196|2|14212 +1.3.6.1.2.1.25.5.1.1.2.7523|2|140 +1.3.6.1.2.1.25.5.1.1.2.7524|2|300 +1.3.6.1.2.1.25.5.1.1.2.7525|2|144 +1.3.6.1.2.1.25.5.1.1.2.7526|2|280 +1.3.6.1.2.1.25.5.1.1.2.7527|2|336 +1.3.6.1.2.1.25.5.1.1.2.7528|2|288 +1.3.6.1.2.1.25.5.1.1.2.7529|2|136 +1.3.6.1.2.1.25.5.1.1.2.7530|2|296 +1.3.6.1.2.1.25.5.1.1.2.7531|2|144 +1.3.6.1.2.1.25.5.1.1.2.7532|2|276 +1.3.6.1.2.1.25.5.1.1.2.7535|2|15752 +1.3.6.1.2.1.25.5.1.1.2.7539|2|81804 +1.3.6.1.2.1.25.5.1.1.2.7543|2|1900 +1.3.6.1.2.1.25.5.1.1.2.7544|2|19704 +1.3.6.1.2.1.25.5.1.1.2.7949|2|288 +1.3.6.1.2.1.25.5.1.1.2.7950|2|284 +1.3.6.1.2.1.25.5.1.1.2.7951|2|280 +1.3.6.1.2.1.25.5.1.1.2.7952|2|276 +1.3.6.1.2.1.25.5.1.1.2.7953|2|284 +1.3.6.1.2.1.25.5.1.1.2.7954|2|328 +1.3.6.1.2.1.25.5.1.1.2.9526|2|896 +1.3.6.1.2.1.25.5.1.1.2.9602|2|560 +1.3.6.1.2.1.25.5.1.1.2.11784|2|68 +1.3.6.1.2.1.25.5.1.1.2.13563|2|5956 +1.3.6.1.2.1.25.5.1.1.2.13565|2|5788 +1.3.6.1.2.1.25.5.1.1.2.13566|2|5064 +1.3.6.1.2.1.25.5.1.1.2.15387|2|1948 +1.3.6.1.2.1.25.5.1.1.2.15921|2|226040 +1.3.6.1.2.1.25.5.1.1.2.16645|2|272 +1.3.6.1.2.1.25.5.1.1.2.16646|2|300 +1.3.6.1.2.1.25.5.1.1.2.16648|2|3144 +1.3.6.1.2.1.25.5.1.1.2.16651|2|18536 +1.3.6.1.2.1.25.5.1.1.2.16652|2|1256 +1.3.6.1.2.1.25.5.1.1.2.16653|2|1440 +1.3.6.1.2.1.25.5.1.1.2.16654|2|17096 +1.3.6.1.2.1.25.5.1.1.2.17900|2|1416 +1.3.6.1.2.1.25.5.1.1.2.18651|2|93160 +1.3.6.1.2.1.25.5.1.1.2.23175|2|1200 +1.3.6.1.2.1.25.5.1.1.2.23330|2|36220 +1.3.6.1.2.1.25.5.1.1.2.25514|2|21768 +1.3.6.1.2.1.25.5.1.1.2.25517|2|25124 +1.3.6.1.2.1.25.5.1.1.2.25518|2|584 +1.3.6.1.2.1.25.5.1.1.2.25522|2|25256 +1.3.6.1.2.1.25.5.1.1.2.25524|2|25460 +1.3.6.1.2.1.25.5.1.1.2.25531|2|25184 +1.3.6.1.2.1.25.5.1.1.2.25946|2|25848 +1.3.6.1.2.1.25.5.1.1.2.27567|2|1228 +1.3.6.1.2.1.25.5.1.1.2.29431|2|14544 +1.3.6.1.2.1.25.5.1.1.2.29439|2|8036 +1.3.6.1.2.1.25.5.1.1.2.29440|2|8220 +1.3.6.1.2.1.25.5.1.1.2.30092|2|108020 +1.3.6.1.2.1.25.5.1.1.2.30120|2|1128 +1.3.6.1.2.1.25.5.1.1.2.30180|2|23888 +1.3.6.1.2.1.25.5.1.1.2.32066|2|840 +1.3.6.1.2.1.31.1.1.1.1.32|4|mgmt +1.3.6.1.2.1.31.1.1.1.1.48|4x|312e30 +1.3.6.1.2.1.31.1.1.1.1.80|4x|2f436f6d6d6f6e2f687474702d74756e6e656c +1.3.6.1.2.1.31.1.1.1.1.96|4x|2f436f6d6d6f6e2f736f636b732d74756e6e656c +1.3.6.1.2.1.31.1.1.1.1.112|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.2.1.31.1.1.1.2.32|65|0 +1.3.6.1.2.1.31.1.1.1.2.48|65|0 +1.3.6.1.2.1.31.1.1.1.2.80|65|0 +1.3.6.1.2.1.31.1.1.1.2.96|65|0 +1.3.6.1.2.1.31.1.1.1.2.112|65|15131 +1.3.6.1.2.1.31.1.1.1.3.32|65|0 +1.3.6.1.2.1.31.1.1.1.3.48|65|0 +1.3.6.1.2.1.31.1.1.1.3.80|65|0 +1.3.6.1.2.1.31.1.1.1.3.96|65|0 +1.3.6.1.2.1.31.1.1.1.3.112|65|2923 +1.3.6.1.2.1.31.1.1.1.4.32|65|0 +1.3.6.1.2.1.31.1.1.1.4.48|65|0 +1.3.6.1.2.1.31.1.1.1.4.80|65|0 +1.3.6.1.2.1.31.1.1.1.4.96|65|0 +1.3.6.1.2.1.31.1.1.1.4.112|65|15146 +1.3.6.1.2.1.31.1.1.1.5.32|65|0 +1.3.6.1.2.1.31.1.1.1.5.48|65|0 +1.3.6.1.2.1.31.1.1.1.5.80|65|0 +1.3.6.1.2.1.31.1.1.1.5.96|65|0 +1.3.6.1.2.1.31.1.1.1.5.112|65|609 +1.3.6.1.2.1.31.1.1.1.6.32|70|461638459 +1.3.6.1.2.1.31.1.1.1.6.48|70|606070952 +1.3.6.1.2.1.31.1.1.1.6.80|70|0 +1.3.6.1.2.1.31.1.1.1.6.96|70|0 +1.3.6.1.2.1.31.1.1.1.6.112|70|396870497 +1.3.6.1.2.1.31.1.1.1.7.32|70|930864 +1.3.6.1.2.1.31.1.1.1.7.48|70|799796 +1.3.6.1.2.1.31.1.1.1.7.80|70|0 +1.3.6.1.2.1.31.1.1.1.7.96|70|0 +1.3.6.1.2.1.31.1.1.1.7.112|70|899250 +1.3.6.1.2.1.31.1.1.1.8.32|70|0 +1.3.6.1.2.1.31.1.1.1.8.48|70|0 +1.3.6.1.2.1.31.1.1.1.8.80|70|0 +1.3.6.1.2.1.31.1.1.1.8.96|70|0 +1.3.6.1.2.1.31.1.1.1.8.112|70|15131 +1.3.6.1.2.1.31.1.1.1.9.32|70|0 +1.3.6.1.2.1.31.1.1.1.9.48|70|0 +1.3.6.1.2.1.31.1.1.1.9.80|70|0 +1.3.6.1.2.1.31.1.1.1.9.96|70|0 +1.3.6.1.2.1.31.1.1.1.9.112|70|2923 +1.3.6.1.2.1.31.1.1.1.10.32|70|312056025 +1.3.6.1.2.1.31.1.1.1.10.48|70|67545566 +1.3.6.1.2.1.31.1.1.1.10.80|70|0 +1.3.6.1.2.1.31.1.1.1.10.96|70|0 +1.3.6.1.2.1.31.1.1.1.10.112|70|406193723 +1.3.6.1.2.1.31.1.1.1.11.32|70|773861 +1.3.6.1.2.1.31.1.1.1.11.48|70|524259 +1.3.6.1.2.1.31.1.1.1.11.80|70|0 +1.3.6.1.2.1.31.1.1.1.11.96|70|0 +1.3.6.1.2.1.31.1.1.1.11.112|70|880356 +1.3.6.1.2.1.31.1.1.1.12.32|70|0 +1.3.6.1.2.1.31.1.1.1.12.48|70|0 +1.3.6.1.2.1.31.1.1.1.12.80|70|0 +1.3.6.1.2.1.31.1.1.1.12.96|70|0 +1.3.6.1.2.1.31.1.1.1.12.112|70|15146 +1.3.6.1.2.1.31.1.1.1.13.32|70|0 +1.3.6.1.2.1.31.1.1.1.13.48|70|0 +1.3.6.1.2.1.31.1.1.1.13.80|70|0 +1.3.6.1.2.1.31.1.1.1.13.96|70|0 +1.3.6.1.2.1.31.1.1.1.13.112|70|609 +1.3.6.1.2.1.31.1.1.1.14.32|2|1 +1.3.6.1.2.1.31.1.1.1.14.48|2|1 +1.3.6.1.2.1.31.1.1.1.14.80|2|2 +1.3.6.1.2.1.31.1.1.1.14.96|2|2 +1.3.6.1.2.1.31.1.1.1.14.112|2|2 +1.3.6.1.2.1.31.1.1.1.15.32|66|100 +1.3.6.1.2.1.31.1.1.1.15.48|66|10000 +1.3.6.1.2.1.31.1.1.1.15.80|66|0 +1.3.6.1.2.1.31.1.1.1.15.96|66|0 +1.3.6.1.2.1.31.1.1.1.15.112|66|10000 +1.3.6.1.2.1.31.1.1.1.16.32|2|2 +1.3.6.1.2.1.31.1.1.1.16.48|2|2 +1.3.6.1.2.1.31.1.1.1.16.80|2|2 +1.3.6.1.2.1.31.1.1.1.16.96|2|2 +1.3.6.1.2.1.31.1.1.1.16.112|2|2 +1.3.6.1.2.1.31.1.1.1.17.32|2|1 +1.3.6.1.2.1.31.1.1.1.17.48|2|1 +1.3.6.1.2.1.31.1.1.1.17.80|2|2 +1.3.6.1.2.1.31.1.1.1.17.96|2|2 +1.3.6.1.2.1.31.1.1.1.17.112|2|2 +1.3.6.1.2.1.31.1.1.1.18.32|4| +1.3.6.1.2.1.31.1.1.1.18.48|4| +1.3.6.1.2.1.31.1.1.1.18.80|4| +1.3.6.1.2.1.31.1.1.1.18.96|4| +1.3.6.1.2.1.31.1.1.1.18.112|4| +1.3.6.1.2.1.31.1.1.1.19.32|67|0 +1.3.6.1.2.1.31.1.1.1.19.48|67|0 +1.3.6.1.2.1.31.1.1.1.19.80|67|0 +1.3.6.1.2.1.31.1.1.1.19.96|67|0 +1.3.6.1.2.1.31.1.1.1.19.112|67|0 +1.3.6.1.2.1.92.1.1.1.0|66|1000 +1.3.6.1.2.1.92.1.1.2.0|66|1440 +1.3.6.1.2.1.92.1.2.1.0|65|0 +1.3.6.1.2.1.92.1.2.2.0|65|0 diff --git a/test/new-e2e/ndm/snmp/compose/data/isilon.snmprec b/test/new-e2e/ndm/snmp/compose/data/isilon.snmprec new file mode 100644 index 00000000000000..d2be07e8088d66 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/isilon.snmprec @@ -0,0 +1,283 @@ +1.3.6.1.2.1.1.1.0|4|device-name-3 263829375 Isilon OneFS v8.2.0.0 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.12325.1.1.2.1.1 +1.3.6.1.4.1.12124.1.1.1.0|4|testcluster1 +1.3.6.1.4.1.12124.1.1.2.0|2|2 +1.3.6.1.4.1.12124.1.1.3.0|4x|4a61646564204a61646564204a61646564207a6f6d62696573207a6f6d62696573206f78656e204a6164656420717561696e746c79 +1.3.6.1.4.1.12124.1.1.4.0|2|24 +1.3.6.1.4.1.12124.1.1.5.0|4x|62757420717561696e746c79206163746564207a6f6d62696573207a6f6d62696573206b65707420627574206b657074 +1.3.6.1.4.1.12124.1.1.6.0|4x|7468656972206f78656e206163746564 +1.3.6.1.4.1.12124.1.1.7.0|4x|7a6f6d6269657320666f72776172642062757420627574206275742062757420627574 +1.3.6.1.4.1.12124.1.2.1.1.0|70|14915978989122343125 +1.3.6.1.4.1.12124.1.2.1.2.0|70|5989494319893319288 +1.3.6.1.4.1.12124.1.2.1.3.0|70|1754593291386024149 +1.3.6.1.4.1.12124.1.3.1.0|70|8770442281780220975 +1.3.6.1.4.1.12124.1.3.2.0|70|9618541326343820131 +1.3.6.1.4.1.12124.1.12.1.1.1.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|4x|4a61646564207a6f6d626965732064726976696e67206f78656e206f78656e207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.12124.1.12.1.1.1.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|4x|6163746564206f78656e206b657074207a6f6d626965732061637465642064726976696e67206b657074206163746564 +1.3.6.1.4.1.12124.1.12.1.1.1.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|4x|616374656420717561696e746c79207a6f6d62696573206f78656e20717561696e746c79206163746564207468656972 +1.3.6.1.4.1.12124.1.12.1.1.1.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|4x|627574204a6164656420717561696e746c7920627574206b65707420627574206163746564206b657074207468656972 +1.3.6.1.4.1.12124.1.12.1.1.1.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|4x|666f7277617264204a616465642064726976696e67206f78656e2064726976696e672062757420627574204a61646564 +1.3.6.1.4.1.12124.1.12.1.1.1.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|4x|6b65707420627574207a6f6d62696573207a6f6d626965732062757420717561696e746c79206f78656e204a61646564 +1.3.6.1.4.1.12124.1.12.1.1.1.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|4x|6f78656e2064726976696e67204a6164656420666f7277617264207a6f6d6269657320616374656420666f7277617264 +1.3.6.1.4.1.12124.1.12.1.1.1.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|4x|6f78656e2064726976696e67206163746564206f78656e206f78656e20616374656420616374656420666f7277617264 +1.3.6.1.4.1.12124.1.12.1.1.1.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|4x|717561696e746c79207a6f6d62696573206b657074206f78656e207468656972206f78656e206f78656e204a61646564 +1.3.6.1.4.1.12124.1.12.1.1.1.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|4x|7a6f6d62696573206f78656e2064726976696e67206b657074204a61646564207468656972206163746564206f78656e +1.3.6.1.4.1.12124.1.12.1.1.2.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|2|0 +1.3.6.1.4.1.12124.1.12.1.1.2.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.2.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|2|4 +1.3.6.1.4.1.12124.1.12.1.1.2.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|2|1 +1.3.6.1.4.1.12124.1.12.1.1.2.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.2.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|2|5 +1.3.6.1.4.1.12124.1.12.1.1.2.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.2.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|4 +1.3.6.1.4.1.12124.1.12.1.1.2.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|2|3 +1.3.6.1.4.1.12124.1.12.1.1.2.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|2|1 +1.3.6.1.4.1.12124.1.12.1.1.3.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|66|4245321451 +1.3.6.1.4.1.12124.1.12.1.1.3.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|66|1424325378 +1.3.6.1.4.1.12124.1.12.1.1.3.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|66|1198032230 +1.3.6.1.4.1.12124.1.12.1.1.3.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|66|1383990869 +1.3.6.1.4.1.12124.1.12.1.1.3.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|66|422978632 +1.3.6.1.4.1.12124.1.12.1.1.3.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|66|153533730 +1.3.6.1.4.1.12124.1.12.1.1.3.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|66|2328145711 +1.3.6.1.4.1.12124.1.12.1.1.3.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|66|3299369987 +1.3.6.1.4.1.12124.1.12.1.1.3.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|66|2149993012 +1.3.6.1.4.1.12124.1.12.1.1.3.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|66|1232918362 +1.3.6.1.4.1.12124.1.12.1.1.4.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|2|0 +1.3.6.1.4.1.12124.1.12.1.1.4.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.4.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|2|1 +1.3.6.1.4.1.12124.1.12.1.1.4.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|2|1 +1.3.6.1.4.1.12124.1.12.1.1.4.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.4.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.4.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.4.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.4.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.4.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|2|1 +1.3.6.1.4.1.12124.1.12.1.1.5.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|4x|4a61646564204a616465642064726976696e67207a6f6d62696573207a6f6d62696573206b657074 +1.3.6.1.4.1.12124.1.12.1.1.5.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|4x|666f72776172642064726976696e672062757420717561696e746c79207a6f6d6269657320717561696e746c7920666f72776172642064726976696e67 +1.3.6.1.4.1.12124.1.12.1.1.5.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|4x|4a6164656420717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.12124.1.12.1.1.5.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|4x|746865697220627574 +1.3.6.1.4.1.12124.1.12.1.1.5.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|4|kept +1.3.6.1.4.1.12124.1.12.1.1.5.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|4x|717561696e746c7920666f7277617264207a6f6d62696573207a6f6d626965732064726976696e6720717561696e746c79204a6164656420627574206163746564 +1.3.6.1.4.1.12124.1.12.1.1.5.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|4x|666f7277617264207468656972206163746564207a6f6d62696573206b65707420666f727761726420717561696e746c79 +1.3.6.1.4.1.12124.1.12.1.1.5.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|4x|627574206163746564206163746564206f78656e20666f727761726420717561696e746c792064726976696e67206f78656e +1.3.6.1.4.1.12124.1.12.1.1.5.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|4x|666f72776172642064726976696e6720666f72776172642064726976696e6720666f7277617264 +1.3.6.1.4.1.12124.1.12.1.1.5.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|4x|4a616465642064726976696e67204a61646564 +1.3.6.1.4.1.12124.1.12.1.1.6.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|2|0 +1.3.6.1.4.1.12124.1.12.1.1.6.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.6.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|2|0 +1.3.6.1.4.1.12124.1.12.1.1.6.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|2|0 +1.3.6.1.4.1.12124.1.12.1.1.6.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.6.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.6.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.6.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.6.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.6.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|2|1 +1.3.6.1.4.1.12124.1.12.1.1.7.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|70|14068735141461358875 +1.3.6.1.4.1.12124.1.12.1.1.7.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|70|14141761287896411851 +1.3.6.1.4.1.12124.1.12.1.1.7.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|70|4396056103365993660 +1.3.6.1.4.1.12124.1.12.1.1.7.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|70|1371817059523693496 +1.3.6.1.4.1.12124.1.12.1.1.7.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|70|10171121418117998868 +1.3.6.1.4.1.12124.1.12.1.1.7.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|70|3398225771200639361 +1.3.6.1.4.1.12124.1.12.1.1.7.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|5898542388878010463 +1.3.6.1.4.1.12124.1.12.1.1.7.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|18330784183411284000 +1.3.6.1.4.1.12124.1.12.1.1.7.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|70|15891904626150790899 +1.3.6.1.4.1.12124.1.12.1.1.7.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|70|3964854350772733777 +1.3.6.1.4.1.12124.1.12.1.1.8.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|2|0 +1.3.6.1.4.1.12124.1.12.1.1.8.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.8.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|2|0 +1.3.6.1.4.1.12124.1.12.1.1.8.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|2|1 +1.3.6.1.4.1.12124.1.12.1.1.8.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.8.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.8.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.8.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.8.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.8.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|2|1 +1.3.6.1.4.1.12124.1.12.1.1.9.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|70|10878510489985257555 +1.3.6.1.4.1.12124.1.12.1.1.9.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|70|17884829191702312333 +1.3.6.1.4.1.12124.1.12.1.1.9.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|70|17683458948031193496 +1.3.6.1.4.1.12124.1.12.1.1.9.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|70|1562680605879207291 +1.3.6.1.4.1.12124.1.12.1.1.9.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|70|2320996266713311448 +1.3.6.1.4.1.12124.1.12.1.1.9.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|70|6675308316651121892 +1.3.6.1.4.1.12124.1.12.1.1.9.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|9186412959534298702 +1.3.6.1.4.1.12124.1.12.1.1.9.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|17115911786314565708 +1.3.6.1.4.1.12124.1.12.1.1.9.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|70|16844145145026932773 +1.3.6.1.4.1.12124.1.12.1.1.9.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|70|15292439690659474411 +1.3.6.1.4.1.12124.1.12.1.1.10.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|2|0 +1.3.6.1.4.1.12124.1.12.1.1.10.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.10.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|2|0 +1.3.6.1.4.1.12124.1.12.1.1.10.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|2|0 +1.3.6.1.4.1.12124.1.12.1.1.10.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.10.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.10.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.10.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.10.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.10.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|2|1 +1.3.6.1.4.1.12124.1.12.1.1.11.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|70|2168519118019170047 +1.3.6.1.4.1.12124.1.12.1.1.11.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|70|6570751579969436010 +1.3.6.1.4.1.12124.1.12.1.1.11.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|70|11902954585507984496 +1.3.6.1.4.1.12124.1.12.1.1.11.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|70|11517712360320809523 +1.3.6.1.4.1.12124.1.12.1.1.11.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|70|14574172490728580351 +1.3.6.1.4.1.12124.1.12.1.1.11.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|70|3191226950406170185 +1.3.6.1.4.1.12124.1.12.1.1.11.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|415926289354243698 +1.3.6.1.4.1.12124.1.12.1.1.11.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|15699602191143923019 +1.3.6.1.4.1.12124.1.12.1.1.11.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|70|18150590286584755406 +1.3.6.1.4.1.12124.1.12.1.1.11.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|70|5073807639686004081 +1.3.6.1.4.1.12124.1.12.1.1.12.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|2|7 +1.3.6.1.4.1.12124.1.12.1.1.12.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|2|14 +1.3.6.1.4.1.12124.1.12.1.1.12.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|2|16 +1.3.6.1.4.1.12124.1.12.1.1.12.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|2|10 +1.3.6.1.4.1.12124.1.12.1.1.12.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.12.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|2|7 +1.3.6.1.4.1.12124.1.12.1.1.12.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|10 +1.3.6.1.4.1.12124.1.12.1.1.12.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.12.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.12.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|2|23 +1.3.6.1.4.1.12124.1.12.1.1.13.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|70|16658813196626137413 +1.3.6.1.4.1.12124.1.12.1.1.13.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|70|10579262605391229559 +1.3.6.1.4.1.12124.1.12.1.1.13.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|70|2895734051327977707 +1.3.6.1.4.1.12124.1.12.1.1.13.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|70|14132024138787183222 +1.3.6.1.4.1.12124.1.12.1.1.13.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|70|1355803849695214167 +1.3.6.1.4.1.12124.1.12.1.1.13.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|70|15083223700331535701 +1.3.6.1.4.1.12124.1.12.1.1.13.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|8404133733057700200 +1.3.6.1.4.1.12124.1.12.1.1.13.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|65584190702113825 +1.3.6.1.4.1.12124.1.12.1.1.13.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|70|8792403321736251647 +1.3.6.1.4.1.12124.1.12.1.1.13.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|70|6931490394265709371 +1.3.6.1.4.1.12124.1.12.1.1.14.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|70|6873213022946757334 +1.3.6.1.4.1.12124.1.12.1.1.14.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|70|11854883466118480434 +1.3.6.1.4.1.12124.1.12.1.1.14.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|70|14374798610186795374 +1.3.6.1.4.1.12124.1.12.1.1.14.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|70|8414299381585435100 +1.3.6.1.4.1.12124.1.12.1.1.14.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|70|14389144092639811440 +1.3.6.1.4.1.12124.1.12.1.1.14.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|70|11655278498430189886 +1.3.6.1.4.1.12124.1.12.1.1.14.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|2487786073619070642 +1.3.6.1.4.1.12124.1.12.1.1.14.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|697274845398117848 +1.3.6.1.4.1.12124.1.12.1.1.14.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|70|10325815763224778148 +1.3.6.1.4.1.12124.1.12.1.1.14.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|70|3137558558145556741 +1.3.6.1.4.1.12124.1.12.1.1.15.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|70|14208649948373965591 +1.3.6.1.4.1.12124.1.12.1.1.15.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|70|2520343364835162939 +1.3.6.1.4.1.12124.1.12.1.1.15.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|70|8238533666442885424 +1.3.6.1.4.1.12124.1.12.1.1.15.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|70|4544543621297054007 +1.3.6.1.4.1.12124.1.12.1.1.15.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|70|4617601726928202620 +1.3.6.1.4.1.12124.1.12.1.1.15.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|70|18188978664644708782 +1.3.6.1.4.1.12124.1.12.1.1.15.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|3050010041221971238 +1.3.6.1.4.1.12124.1.12.1.1.15.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|16039139242868212892 +1.3.6.1.4.1.12124.1.12.1.1.15.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|70|1164982365338428846 +1.3.6.1.4.1.12124.1.12.1.1.15.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|70|5877862756907244788 +1.3.6.1.4.1.12124.1.12.1.1.16.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|2|1 +1.3.6.1.4.1.12124.1.12.1.1.16.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.16.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|2|1 +1.3.6.1.4.1.12124.1.12.1.1.16.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|2|0 +1.3.6.1.4.1.12124.1.12.1.1.16.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.16.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.16.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.16.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.16.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.16.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|2|0 +1.3.6.1.4.1.12124.2.1.1.0|4|node1 +1.3.6.1.4.1.12124.2.1.2.0|2|3 +1.3.6.1.4.1.12124.2.1.3.0|2|1 +1.3.6.1.4.1.12124.2.2.1.1.0|70|10214025674005007309 +1.3.6.1.4.1.12124.2.2.1.2.0|70|5852609904331811105 +1.3.6.1.4.1.12124.2.2.1.3.0|70|4777469071568308184 +1.3.6.1.4.1.12124.2.2.10.1.1.98.117.116|4|testprotocol1 +1.3.6.1.4.1.12124.2.2.10.1.1.107.101.112.116|4|testprotocol2 +1.3.6.1.4.1.12124.2.2.10.1.1.111.120.101.110|4|testprotocol3 +1.3.6.1.4.1.12124.2.2.10.1.2.98.117.116|66|3551703331 +1.3.6.1.4.1.12124.2.2.10.1.2.107.101.112.116|66|1938763264 +1.3.6.1.4.1.12124.2.2.10.1.2.111.120.101.110|66|1442758574 +1.3.6.1.4.1.12124.2.2.10.1.3.98.117.116|66|142697340 +1.3.6.1.4.1.12124.2.2.10.1.3.107.101.112.116|66|2614873994 +1.3.6.1.4.1.12124.2.2.10.1.3.111.120.101.110|66|3156857036 +1.3.6.1.4.1.12124.2.2.10.1.4.98.117.116|66|2466447412 +1.3.6.1.4.1.12124.2.2.10.1.4.107.101.112.116|66|1829315851 +1.3.6.1.4.1.12124.2.2.10.1.4.111.120.101.110|66|2970586930 +1.3.6.1.4.1.12124.2.2.10.1.5.98.117.116|66|4016748651 +1.3.6.1.4.1.12124.2.2.10.1.5.107.101.112.116|66|3101244480 +1.3.6.1.4.1.12124.2.2.10.1.5.111.120.101.110|66|1353009103 +1.3.6.1.4.1.12124.2.2.10.1.6.98.117.116|66|273174898 +1.3.6.1.4.1.12124.2.2.10.1.6.107.101.112.116|66|2741571715 +1.3.6.1.4.1.12124.2.2.10.1.6.111.120.101.110|66|504374602 +1.3.6.1.4.1.12124.2.2.10.1.7.98.117.116|66|1908027462 +1.3.6.1.4.1.12124.2.2.10.1.7.107.101.112.116|66|1144308333 +1.3.6.1.4.1.12124.2.2.10.1.7.111.120.101.110|66|1703129581 +1.3.6.1.4.1.12124.2.2.10.1.8.98.117.116|70|8217880946653419538 +1.3.6.1.4.1.12124.2.2.10.1.8.107.101.112.116|70|11771153183005327732 +1.3.6.1.4.1.12124.2.2.10.1.8.111.120.101.110|70|17788181537717597525 +1.3.6.1.4.1.12124.2.2.10.1.9.98.117.116|66|998626442 +1.3.6.1.4.1.12124.2.2.10.1.9.107.101.112.116|66|1211116252 +1.3.6.1.4.1.12124.2.2.10.1.9.111.120.101.110|66|1711845175 +1.3.6.1.4.1.12124.2.2.10.1.10.98.117.116|66|2261694935 +1.3.6.1.4.1.12124.2.2.10.1.10.107.101.112.116|66|3236408506 +1.3.6.1.4.1.12124.2.2.10.1.10.111.120.101.110|66|334932961 +1.3.6.1.4.1.12124.2.2.10.1.11.98.117.116|66|1993235324 +1.3.6.1.4.1.12124.2.2.10.1.11.107.101.112.116|66|3999292325 +1.3.6.1.4.1.12124.2.2.10.1.11.111.120.101.110|66|2690928510 +1.3.6.1.4.1.12124.2.2.10.1.12.98.117.116|66|3538269492 +1.3.6.1.4.1.12124.2.2.10.1.12.107.101.112.116|66|736904324 +1.3.6.1.4.1.12124.2.2.10.1.12.111.120.101.110|66|253116863 +1.3.6.1.4.1.12124.2.2.10.1.13.98.117.116|70|985995245017295438 +1.3.6.1.4.1.12124.2.2.10.1.13.107.101.112.116|70|15372934104243170967 +1.3.6.1.4.1.12124.2.2.10.1.13.111.120.101.110|70|3827567253869289485 +1.3.6.1.4.1.12124.2.2.10.1.14.98.117.116|66|1247886357 +1.3.6.1.4.1.12124.2.2.10.1.14.107.101.112.116|66|2800987047 +1.3.6.1.4.1.12124.2.2.10.1.14.111.120.101.110|66|1266831756 +1.3.6.1.4.1.12124.2.2.10.1.15.98.117.116|66|1593641322 +1.3.6.1.4.1.12124.2.2.10.1.15.107.101.112.116|66|3442678644 +1.3.6.1.4.1.12124.2.2.10.1.15.111.120.101.110|66|1150963851 +1.3.6.1.4.1.12124.2.2.10.1.16.98.117.116|66|839559806 +1.3.6.1.4.1.12124.2.2.10.1.16.107.101.112.116|66|2774045199 +1.3.6.1.4.1.12124.2.2.10.1.16.111.120.101.110|66|2748542234 +1.3.6.1.4.1.12124.2.2.10.1.17.98.117.116|66|2258745481 +1.3.6.1.4.1.12124.2.2.10.1.17.107.101.112.116|66|3237597125 +1.3.6.1.4.1.12124.2.2.10.1.17.111.120.101.110|66|853869338 +1.3.6.1.4.1.12124.2.51.1.2.1|4|400-0049-03 +1.3.6.1.4.1.12124.2.51.1.3.1|4|SX410-251604-0122 +1.3.6.1.4.1.12124.2.51.1.4.1|4|X410-4U-Dual-64GB-2x1GE-2x10GE SFP+-34TB-800GB SSD +1.3.6.1.4.1.12124.2.52.1.1.1|2|1 +1.3.6.1.4.1.12124.2.52.1.1.2|2|2 +1.3.6.1.4.1.12124.2.52.1.1.3|2|3 +1.3.6.1.4.1.12124.2.52.1.5.1|4|SMARTFAIL +1.3.6.1.4.1.12124.2.52.1.5.2|4|HEALTHY +1.3.6.1.4.1.12124.2.52.1.5.3|4|DEAD +1.3.6.1.4.1.12124.2.52.1.9.1|70|13875364071017423041 +1.3.6.1.4.1.12124.2.52.1.9.2|70|16599833035174131388 +1.3.6.1.4.1.12124.2.52.1.9.3|70|10194238433266281818 +1.3.6.1.4.1.12124.2.53.1.1.4|2|4 +1.3.6.1.4.1.12124.2.53.1.1.6|2|6 +1.3.6.1.4.1.12124.2.53.1.1.10|2|10 +1.3.6.1.4.1.12124.2.53.1.1.11|2|11 +1.3.6.1.4.1.12124.2.53.1.1.14|2|14 +1.3.6.1.4.1.12124.2.53.1.1.21|2|21 +1.3.6.1.4.1.12124.2.53.1.1.22|2|22 +1.3.6.1.4.1.12124.2.53.1.1.23|2|23 +1.3.6.1.4.1.12124.2.53.1.1.25|2|25 +1.3.6.1.4.1.12124.2.53.1.1.30|2|30 +1.3.6.1.4.1.12124.2.53.1.2.4|4|testfan +1.3.6.1.4.1.12124.2.53.1.2.6|4|testfan +1.3.6.1.4.1.12124.2.53.1.2.10|4|testfan +1.3.6.1.4.1.12124.2.53.1.2.11|4|testfan +1.3.6.1.4.1.12124.2.53.1.2.14|4|testfan +1.3.6.1.4.1.12124.2.53.1.2.21|4|testfan +1.3.6.1.4.1.12124.2.53.1.2.22|4|testfan +1.3.6.1.4.1.12124.2.53.1.2.23|4|testfan +1.3.6.1.4.1.12124.2.53.1.2.25|4|testfan +1.3.6.1.4.1.12124.2.53.1.2.30|4|testfan +1.3.6.1.4.1.12124.2.53.1.3.4|4x|6f78656e2064726976696e67204a61646564206163746564 +1.3.6.1.4.1.12124.2.53.1.3.6|4x|4a61646564207468656972206163746564206f78656e206f78656e204a6164656420666f7277617264206b657074207468656972 +1.3.6.1.4.1.12124.2.53.1.3.10|4x|6b657074206b657074206f78656e20717561696e746c79 +1.3.6.1.4.1.12124.2.53.1.3.11|4x|717561696e746c792064726976696e67206163746564206f78656e206f78656e2064726976696e67 +1.3.6.1.4.1.12124.2.53.1.3.14|4x|746865697220717561696e746c79 +1.3.6.1.4.1.12124.2.53.1.3.21|4x|4a6164656420627574206b657074 +1.3.6.1.4.1.12124.2.53.1.3.22|4|kept +1.3.6.1.4.1.12124.2.53.1.3.23|4x|6163746564206163746564206b65707420717561696e746c79206f78656e +1.3.6.1.4.1.12124.2.53.1.3.25|4x|64726976696e67206163746564206163746564204a616465642062757420717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.12124.2.53.1.3.30|4x|4a616465642064726976696e67206b657074206b6570742064726976696e6720627574207a6f6d62696573207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.12124.2.53.1.4.4|2|3 +1.3.6.1.4.1.12124.2.53.1.4.6|2|27 +1.3.6.1.4.1.12124.2.53.1.4.10|2|29 +1.3.6.1.4.1.12124.2.53.1.4.11|2|0 +1.3.6.1.4.1.12124.2.53.1.4.14|2|22 +1.3.6.1.4.1.12124.2.53.1.4.21|2|23 +1.3.6.1.4.1.12124.2.53.1.4.22|2|1 +1.3.6.1.4.1.12124.2.53.1.4.23|2|7 +1.3.6.1.4.1.12124.2.53.1.4.25|2|12 +1.3.6.1.4.1.12124.2.53.1.4.30|2|22 diff --git a/test/new-e2e/ndm/snmp/compose/data/juniper-ex-variation.snmprec b/test/new-e2e/ndm/snmp/compose/data/juniper-ex-variation.snmprec new file mode 100644 index 00000000000000..5080ddd4e931f2 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/juniper-ex-variation.snmprec @@ -0,0 +1,292 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.2636.1.1.1.4.30.2 +1.3.6.1.2.1.15.3.1.1.244.12.239.177|64x|47365042 +1.3.6.1.2.1.15.3.1.2.244.12.239.177|2|6 +1.3.6.1.2.1.15.3.1.3.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.4.244.12.239.177|2|21 +1.3.6.1.2.1.15.3.1.5.244.12.239.177|64x|56a51b1e +1.3.6.1.2.1.15.3.1.6.244.12.239.177|2|31 +1.3.6.1.2.1.15.3.1.7.244.12.239.177|64x|f40cefb1 +1.3.6.1.2.1.15.3.1.8.244.12.239.177|2|7 +1.3.6.1.2.1.15.3.1.9.244.12.239.177|2|26 +1.3.6.1.2.1.15.3.1.10.244.12.239.177|65|2016631572 +1.3.6.1.2.1.15.3.1.11.244.12.239.177|65|2128197531 +1.3.6.1.2.1.15.3.1.12.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.13.244.12.239.177|65|3947895592 +1.3.6.1.2.1.15.3.1.15.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.16.244.12.239.177|66|3947895592 +1.3.6.1.2.1.15.3.1.17.244.12.239.177|2|378 +1.3.6.1.2.1.15.3.1.18.244.12.239.177|2|124 +1.3.6.1.2.1.15.3.1.19.244.12.239.177|2|25342 +1.3.6.1.2.1.15.3.1.20.244.12.239.177|2|9203 +1.3.6.1.2.1.15.3.1.21.244.12.239.177|2|235634 +1.3.6.1.2.1.15.3.1.22.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.23.244.12.239.177|2|4 +1.3.6.1.2.1.15.3.1.24.244.12.239.177|66|3947895592 +1.3.6.1.2.1.31.1.1.1.1.83|4x|717561696e746c792064726976696e67206f78656e207468656972207a6f6d62696573206f78656e206163746564206163746564 +1.3.6.1.2.1.31.1.1.1.1.780|4x|62757420666f7277617264206b657074206275742074686569722064726976696e67206f78656e20717561696e746c79206163746564 +1.3.6.1.2.1.31.1.1.1.1.907|4x|6b65707420627574 +1.3.6.1.4.1.2636.3.5.2.1.1.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|74686569722064726976696e6720717561696e746c7920627574204a61646564206f78656e +1.3.6.1.4.1.2636.3.5.2.1.1.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|6b657074206b65707420627574206f78656e204a6164656420666f7277617264206163746564 +1.3.6.1.4.1.2636.3.5.2.1.1.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|64726976696e67206b657074206163746564204a61646564207a6f6d62696573206b657074206163746564 +1.3.6.1.4.1.2636.3.5.2.1.2.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|4a61646564206f78656e206b6570742074686569722064726976696e6720627574206b657074 +1.3.6.1.4.1.2636.3.5.2.1.2.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|6f78656e20666f7277617264204a61646564206b65707420627574204a61646564 +1.3.6.1.4.1.2636.3.5.2.1.2.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|6275742062757420627574207468656972207468656972207468656972206b657074206b65707420666f7277617264 +1.3.6.1.4.1.2636.3.5.2.1.3.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.3.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.3.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.4.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|70|4454094099404974412 +1.3.6.1.4.1.2636.3.5.2.1.4.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|70|9206254963072680169 +1.3.6.1.4.1.2636.3.5.2.1.4.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|70|3696546830171348582 +1.3.6.1.4.1.2636.3.5.2.1.5.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|70|696736619041929696 +1.3.6.1.4.1.2636.3.5.2.1.5.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|70|16785242467789528990 +1.3.6.1.4.1.2636.3.5.2.1.5.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|70|17939108183311980476 +1.3.6.1.4.1.2636.3.5.2.1.6.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|717561696e746c792064726976696e6720666f727761726420666f7277617264206163746564207468656972207a6f6d62696573 +1.3.6.1.4.1.2636.3.5.2.1.6.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|666f7277617264206f78656e20717561696e746c79207a6f6d6269657320666f7277617264206f78656e206f78656e20746865697220627574 +1.3.6.1.4.1.2636.3.5.2.1.6.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|616374656420627574207468656972206f78656e204a61646564204a61646564207468656972 +1.3.6.1.4.1.2636.3.5.2.1.7.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4|driving +1.3.6.1.4.1.2636.3.5.2.1.7.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|717561696e746c792064726976696e67206f78656e20717561696e746c7920666f7277617264207a6f6d62696573206163746564 +1.3.6.1.4.1.2636.3.5.2.1.7.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|7a6f6d62696573207a6f6d62696573206b657074 +1.3.6.1.4.1.2636.3.5.2.1.8.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|2|1 +1.3.6.1.4.1.2636.3.5.2.1.8.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|2|2 +1.3.6.1.4.1.2636.3.5.2.1.8.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|2|2 +1.3.6.1.4.1.2636.3.6.2.1.1.83.1.5.116.104.101.105.114|2|83 +1.3.6.1.4.1.2636.3.6.2.1.1.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|2|780 +1.3.6.1.4.1.2636.3.6.2.1.1.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|2|907 +1.3.6.1.4.1.2636.3.6.2.1.2.83.1.5.116.104.101.105.114|2|1 +1.3.6.1.4.1.2636.3.6.2.1.2.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.2636.3.6.2.1.2.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|2|2 +1.3.6.1.4.1.2636.3.6.2.1.3.83.1.5.116.104.101.105.114|4|their +1.3.6.1.4.1.2636.3.6.2.1.3.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|4x|61637465642062757420666f7277617264206163746564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2636.3.6.2.1.3.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|4x|6f78656e204a61646564206f78656e204a6164656420666f7277617264206b65707420717561696e746c79 +1.3.6.1.4.1.2636.3.6.2.1.4.83.1.5.116.104.101.105.114|70|12317383665498203792 +1.3.6.1.4.1.2636.3.6.2.1.4.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|70|18298564239260252878 +1.3.6.1.4.1.2636.3.6.2.1.4.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|70|14296161882202174757 +1.3.6.1.4.1.2636.3.6.2.1.5.83.1.5.116.104.101.105.114|70|11494977799318547626 +1.3.6.1.4.1.2636.3.6.2.1.5.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|70|3147422798697337841 +1.3.6.1.4.1.2636.3.6.2.1.5.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|70|9179463037551089633 +1.3.6.1.4.1.2636.3.6.2.1.6.83.1.5.116.104.101.105.114|4|driving +1.3.6.1.4.1.2636.3.6.2.1.6.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|4x|666f72776172642064726976696e67 +1.3.6.1.4.1.2636.3.6.2.1.6.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|4x|6f78656e206b657074207a6f6d62696573 +1.3.6.1.4.1.2636.3.15.9.1.1.170|2|11 +1.3.6.1.4.1.2636.3.15.9.1.1.243|2|919 +1.3.6.1.4.1.2636.3.15.9.1.1.463|2|981 +1.3.6.1.4.1.2636.3.15.9.1.2.170|4x|6163746564206f78656e206f78656e20666f727761726420717561696e746c79206b657074207a6f6d6269657320627574206f78656e +1.3.6.1.4.1.2636.3.15.9.1.2.243|4x|6163746564206b65707420717561696e746c79206163746564206f78656e206b657074 +1.3.6.1.4.1.2636.3.15.9.1.2.463|4|their +1.3.6.1.4.1.2636.3.15.10.1.1.170.25|2|170 +1.3.6.1.4.1.2636.3.15.10.1.1.243.50|2|243 +1.3.6.1.4.1.2636.3.15.10.1.1.463.15|2|463 +1.3.6.1.4.1.2636.3.15.10.1.2.170.25|2|25 +1.3.6.1.4.1.2636.3.15.10.1.2.243.50|2|50 +1.3.6.1.4.1.2636.3.15.10.1.2.463.15|2|15 +1.3.6.1.4.1.2636.3.15.10.1.3.170.25|70|12770856836917969245 +1.3.6.1.4.1.2636.3.15.10.1.3.243.50|70|9663869619250073385 +1.3.6.1.4.1.2636.3.15.10.1.3.463.15|70|4128978860610001207 +1.3.6.1.4.1.2636.3.15.10.1.4.170.25|70|1002399613905247533 +1.3.6.1.4.1.2636.3.15.10.1.4.243.50|70|996423942118251217 +1.3.6.1.4.1.2636.3.15.10.1.4.463.15|70|4764867759487322545 +1.3.6.1.4.1.2636.3.15.10.1.5.170.25|70|9232681433406374088 +1.3.6.1.4.1.2636.3.15.10.1.5.243.50|70|8035400151290454024 +1.3.6.1.4.1.2636.3.15.10.1.5.463.15|70|5990647624742140325 +1.3.6.1.4.1.2636.3.15.10.1.6.170.25|70|1065640835557330094 +1.3.6.1.4.1.2636.3.15.10.1.6.243.50|70|17558806293727990360 +1.3.6.1.4.1.2636.3.15.10.1.6.463.15|70|11908438181160168105 +1.3.6.1.4.1.2636.3.15.10.1.7.170.25|70|18273158544474451497 +1.3.6.1.4.1.2636.3.15.10.1.7.243.50|70|13777396596348831423 +1.3.6.1.4.1.2636.3.15.10.1.7.463.15|70|2487683329818536869 +1.3.6.1.4.1.2636.3.15.10.1.8.170.25|70|3466222661774951990 +1.3.6.1.4.1.2636.3.15.10.1.8.243.50|70|12670568689846152972 +1.3.6.1.4.1.2636.3.15.10.1.8.463.15|70|8075791252460836529 +1.3.6.1.4.1.2636.3.15.10.1.9.170.25|70|8020605155612723028 +1.3.6.1.4.1.2636.3.15.10.1.9.243.50|70|12997273506749046582 +1.3.6.1.4.1.2636.3.15.10.1.9.463.15|70|18231535980456700136 +1.3.6.1.4.1.2636.3.15.10.1.10.170.25|70|3314807028774900920 +1.3.6.1.4.1.2636.3.15.10.1.10.243.50|70|12384249738747780022 +1.3.6.1.4.1.2636.3.15.10.1.10.463.15|70|5706341066266616742 +1.3.6.1.4.1.2636.3.15.10.1.11.170.25|70|9543706072360554442 +1.3.6.1.4.1.2636.3.15.10.1.11.243.50|70|15353080467434378674 +1.3.6.1.4.1.2636.3.15.10.1.11.463.15|70|7000096561546418502 +1.3.6.1.4.1.2636.3.15.10.1.12.170.25|70|13553825566144951217 +1.3.6.1.4.1.2636.3.15.10.1.12.243.50|70|2884686421611507766 +1.3.6.1.4.1.2636.3.15.10.1.12.463.15|70|7950960221026326783 +1.3.6.1.4.1.2636.3.15.10.1.13.170.25|70|6461751168224122855 +1.3.6.1.4.1.2636.3.15.10.1.13.243.50|70|8626132824337957526 +1.3.6.1.4.1.2636.3.15.10.1.13.463.15|70|17731588095000145998 +1.3.6.1.4.1.2636.3.15.10.1.14.170.25|70|15619102596973248473 +1.3.6.1.4.1.2636.3.15.10.1.14.243.50|70|16692053855289491043 +1.3.6.1.4.1.2636.3.15.10.1.14.463.15|70|8456156210951462249 +1.3.6.1.4.1.2636.3.15.10.1.15.170.25|70|2299977202421036105 +1.3.6.1.4.1.2636.3.15.10.1.15.243.50|70|813117570951116201 +1.3.6.1.4.1.2636.3.15.10.1.15.463.15|70|1188478793913849482 +1.3.6.1.4.1.2636.3.15.10.1.16.170.25|70|2893929287389891965 +1.3.6.1.4.1.2636.3.15.10.1.16.243.50|70|16289010184593102625 +1.3.6.1.4.1.2636.3.15.10.1.16.463.15|70|14190997503223661814 +1.3.6.1.4.1.2636.3.15.10.1.17.170.25|70|14493484350074177035 +1.3.6.1.4.1.2636.3.15.10.1.17.243.50|70|13596150666639387175 +1.3.6.1.4.1.2636.3.15.10.1.17.463.15|70|14424565573160285076 +1.3.6.1.4.1.2636.3.15.10.1.18.170.25|70|10529534850679351483 +1.3.6.1.4.1.2636.3.15.10.1.18.243.50|70|2906176364604264292 +1.3.6.1.4.1.2636.3.15.10.1.18.463.15|70|8315217861465467611 +1.3.6.1.4.1.2636.3.15.10.1.19.170.25|70|8170434880350759573 +1.3.6.1.4.1.2636.3.15.10.1.19.243.50|70|887688327484631583 +1.3.6.1.4.1.2636.3.15.10.1.19.463.15|70|10060318579349968784 +1.3.6.1.4.1.2636.3.15.10.1.20.170.25|70|5815198282439278933 +1.3.6.1.4.1.2636.3.15.10.1.20.243.50|70|14749506163780204940 +1.3.6.1.4.1.2636.3.15.10.1.20.463.15|70|9286269907376035246 +1.3.6.1.4.1.2636.3.15.10.1.21.170.25|70|2825795754297694874 +1.3.6.1.4.1.2636.3.15.10.1.21.243.50|70|11285523882234093093 +1.3.6.1.4.1.2636.3.15.10.1.21.463.15|70|15090187984937318802 +1.3.6.1.4.1.2636.3.15.10.1.22.170.25|70|7863778897832470889 +1.3.6.1.4.1.2636.3.15.10.1.22.243.50|70|3553508407684051674 +1.3.6.1.4.1.2636.3.15.10.1.22.463.15|70|13931708594683902426 +1.3.6.1.4.1.2636.3.15.10.1.23.170.25|70|12906613682638875307 +1.3.6.1.4.1.2636.3.15.10.1.23.243.50|70|11949204969119103650 +1.3.6.1.4.1.2636.3.15.10.1.23.463.15|70|5956153079277958221 +1.3.6.1.4.1.2636.3.15.10.1.24.170.25|70|11477234301196000227 +1.3.6.1.4.1.2636.3.15.10.1.24.243.50|70|3314652739024033013 +1.3.6.1.4.1.2636.3.15.10.1.24.463.15|70|15017127765184020318 +1.3.6.1.4.1.2636.3.15.10.1.25.170.25|70|8424154835415081760 +1.3.6.1.4.1.2636.3.15.10.1.25.243.50|70|7471672866813717794 +1.3.6.1.4.1.2636.3.15.10.1.25.463.15|70|17857076078061565547 +1.3.6.1.4.1.2636.3.15.10.1.26.170.25|70|3793853525121104339 +1.3.6.1.4.1.2636.3.15.10.1.26.243.50|70|3989409530853199526 +1.3.6.1.4.1.2636.3.15.10.1.26.463.15|70|15735187836465138700 +1.3.6.1.4.1.2636.3.15.10.1.27.170.25|70|18213777320258743968 +1.3.6.1.4.1.2636.3.15.10.1.27.243.50|70|14971409743913453864 +1.3.6.1.4.1.2636.3.15.10.1.27.463.15|70|4036774420969319248 +1.3.6.1.4.1.2636.3.15.10.1.28.170.25|70|11024421017883614152 +1.3.6.1.4.1.2636.3.15.10.1.28.243.50|70|90364654298972704 +1.3.6.1.4.1.2636.3.15.10.1.28.463.15|70|8686770717862532224 +1.3.6.1.4.1.2636.3.15.10.1.29.170.25|70|12300319506603429604 +1.3.6.1.4.1.2636.3.15.10.1.29.243.50|70|1280552904131433006 +1.3.6.1.4.1.2636.3.15.10.1.29.463.15|70|1984703258989993414 +1.3.6.1.4.1.2636.3.15.10.1.30.170.25|70|14325491697305781346 +1.3.6.1.4.1.2636.3.15.10.1.30.243.50|70|9672229296991156990 +1.3.6.1.4.1.2636.3.15.10.1.30.463.15|70|17512343358386083614 +1.3.6.1.4.1.2636.3.15.10.1.31.170.25|70|5927227884246572881 +1.3.6.1.4.1.2636.3.15.10.1.31.243.50|70|9450776281406177093 +1.3.6.1.4.1.2636.3.15.10.1.31.463.15|70|17370561485432592141 +1.3.6.1.4.1.2636.3.15.10.1.32.170.25|70|7967882224524493134 +1.3.6.1.4.1.2636.3.15.10.1.32.243.50|70|3172465735716905246 +1.3.6.1.4.1.2636.3.15.10.1.32.463.15|70|11533409651162362033 +1.3.6.1.4.1.2636.3.15.10.1.33.170.25|70|16548575809615604796 +1.3.6.1.4.1.2636.3.15.10.1.33.243.50|70|6442873042770202449 +1.3.6.1.4.1.2636.3.15.10.1.33.463.15|70|1918875848098423600 +1.3.6.1.4.1.2636.3.15.10.1.34.170.25|70|12105898413641506478 +1.3.6.1.4.1.2636.3.15.10.1.34.243.50|70|5385799517301974188 +1.3.6.1.4.1.2636.3.15.10.1.34.463.15|70|9277777983354765895 +1.3.6.1.4.1.2636.3.15.10.1.35.170.25|70|786407073866759825 +1.3.6.1.4.1.2636.3.15.10.1.35.243.50|70|12567184007500140055 +1.3.6.1.4.1.2636.3.15.10.1.35.463.15|70|6530228175190559355 +1.3.6.1.4.1.2636.3.15.10.1.36.170.25|70|22369930787572654 +1.3.6.1.4.1.2636.3.15.10.1.36.243.50|70|2397774807429625982 +1.3.6.1.4.1.2636.3.15.10.1.36.463.15|70|15156373897980262200 +1.3.6.1.4.1.2636.3.15.10.1.37.170.25|70|5148517373031836367 +1.3.6.1.4.1.2636.3.15.10.1.37.243.50|70|7721607394473998281 +1.3.6.1.4.1.2636.3.15.10.1.37.463.15|70|8714575013162753417 +1.3.6.1.4.1.2636.3.15.10.1.38.170.25|70|10930247236210764218 +1.3.6.1.4.1.2636.3.15.10.1.38.243.50|70|5146652189836621240 +1.3.6.1.4.1.2636.3.15.10.1.38.463.15|70|8864307502844767136 +1.3.6.1.4.1.2636.3.15.10.1.39.170.25|70|17987422552752788069 +1.3.6.1.4.1.2636.3.15.10.1.39.243.50|70|7828400400494290544 +1.3.6.1.4.1.2636.3.15.10.1.39.463.15|70|10564281255194113941 +1.3.6.1.4.1.2636.3.15.10.1.40.170.25|70|4456908988229385506 +1.3.6.1.4.1.2636.3.15.10.1.40.243.50|70|4548509587568319054 +1.3.6.1.4.1.2636.3.15.10.1.40.463.15|70|12654679094639954721 +1.3.6.1.4.1.2636.3.15.10.1.41.170.25|70|319452186197743737 +1.3.6.1.4.1.2636.3.15.10.1.41.243.50|70|16364791724635672240 +1.3.6.1.4.1.2636.3.15.10.1.41.463.15|70|17828705365509861774 +1.3.6.1.4.1.2636.3.15.10.1.42.170.25|70|9913951142041236635 +1.3.6.1.4.1.2636.3.15.10.1.42.243.50|70|4590232569604987384 +1.3.6.1.4.1.2636.3.15.10.1.42.463.15|70|16879636922511149261 +1.3.6.1.4.1.2636.3.15.10.1.43.170.25|70|16128554786484754487 +1.3.6.1.4.1.2636.3.15.10.1.43.243.50|70|6720587125918748618 +1.3.6.1.4.1.2636.3.15.10.1.43.463.15|70|10982123962446739740 +1.3.6.1.4.1.2636.3.15.10.1.44.170.25|70|6625476741978175421 +1.3.6.1.4.1.2636.3.15.10.1.44.243.50|70|14758624194210778093 +1.3.6.1.4.1.2636.3.15.10.1.44.463.15|70|3510595354408991883 +1.3.6.1.4.1.2636.3.15.10.1.45.170.25|70|12193077799780761280 +1.3.6.1.4.1.2636.3.15.10.1.45.243.50|70|434156370935591348 +1.3.6.1.4.1.2636.3.15.10.1.45.463.15|70|14701761228332844190 +1.3.6.1.4.1.2636.3.15.10.1.46.170.25|70|4097961753211413825 +1.3.6.1.4.1.2636.3.15.10.1.46.243.50|70|14198283656685665373 +1.3.6.1.4.1.2636.3.15.10.1.46.463.15|70|9981844938014966456 +1.3.6.1.4.1.2636.3.15.10.1.47.170.25|70|4499862665732599823 +1.3.6.1.4.1.2636.3.15.10.1.47.243.50|70|7208392381338046179 +1.3.6.1.4.1.2636.3.15.10.1.47.463.15|70|6241021335515696595 +1.3.6.1.4.1.2636.3.15.10.1.48.170.25|70|4799882603978889044 +1.3.6.1.4.1.2636.3.15.10.1.48.243.50|70|11687294706629489122 +1.3.6.1.4.1.2636.3.15.10.1.48.463.15|70|8189775643826190503 +1.3.6.1.4.1.2636.3.15.10.1.49.170.25|70|14943326773818355422 +1.3.6.1.4.1.2636.3.15.10.1.49.243.50|70|3029491279441157558 +1.3.6.1.4.1.2636.3.15.10.1.49.463.15|70|14724608253725676036 +1.3.6.1.4.1.2636.3.15.10.1.50.170.25|70|8089079564874181657 +1.3.6.1.4.1.2636.3.15.10.1.50.243.50|70|3777655493494241512 +1.3.6.1.4.1.2636.3.15.10.1.50.463.15|70|9345336414379681585 +1.3.6.1.4.1.2636.3.15.10.1.51.170.25|70|1461276263793545759 +1.3.6.1.4.1.2636.3.15.10.1.51.243.50|70|12409543167456089371 +1.3.6.1.4.1.2636.3.15.10.1.51.463.15|70|4329004572229054293 +1.3.6.1.4.1.2636.3.15.10.1.52.170.25|70|6602329256452145238 +1.3.6.1.4.1.2636.3.15.10.1.52.243.50|70|6601473160297645100 +1.3.6.1.4.1.2636.3.15.10.1.52.463.15|70|16308867362923996690 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|11 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|22 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|24 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|4x|4a6164656420666f727761726420627574206f78656e20717561696e746c79207468656972207468656972 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|4x|666f727761726420666f72776172642064726976696e672064726976696e67204a61646564204a61646564 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|4x|6275742064726976696e6720627574 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|1 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|1 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|3 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|12189304536513319332 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|7722656158153650831 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|10603165628512588309 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|3843980053062837517 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|12509302819583194366 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|3885376250889014561 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|10352052349549821463 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|7177674967410638136 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|5091222764852841190 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|13715573869517889886 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|10130509551224208352 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|2504343572792914641 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|2938889684826768032 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|11291252729780336384 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|1481668101793427313 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|6310274704585370658 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|6789462645369539630 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|491028968499993270 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|3608875038808074952 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|797075051605537720 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|14085552435037248689 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|5552625442655846107 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|4454798770846396730 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|9088428039091030198 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|10229778388752303226 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|11069391749223800156 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|11894101190314294086 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|5808123009872645909 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|3572737769193079165 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|6853689900557367040 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|8372358451243013065 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|2058660889925691752 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|15823042855195793586 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|11700083343423325868 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|4448772641108495089 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|676318422458825171 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|15142294159964046333 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|18390833596244657351 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|10182233820378904307 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|2057784955673108988 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|6276174311039281296 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|14694007361821605096 +1.3.6.1.4.1.2636.3.89.1.1.3.1.1.1|4|Mycroft Holmes +1.3.6.1.4.1.2636.3.89.1.1.3.1.1.2|4|Jim Moriarty +1.3.6.1.4.1.2636.3.89.1.1.3.1.2.1|4|brother +1.3.6.1.4.1.2636.3.89.1.1.3.1.2.2|4|enemy +1.3.6.1.4.1.2636.3.89.1.1.3.1.3.1|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.3.2|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.4.1|65|2048000 diff --git a/test/new-e2e/ndm/snmp/compose/data/juniper-ex.snmprec b/test/new-e2e/ndm/snmp/compose/data/juniper-ex.snmprec new file mode 100644 index 00000000000000..4dab0344bd09fe --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/juniper-ex.snmprec @@ -0,0 +1,296 @@ +1.3.6.1.2.1.1.1.0|4|Juniper Networks, Inc. ex2200-24t-4g internet router, kernel JUNOS 10.2R1.8 #0: 2010-05-27 20:13:49 UTC +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.2636.1.1.1.2.30 +1.3.6.1.2.1.15.3.1.1.244.12.239.177|64x|47365042 +1.3.6.1.2.1.15.3.1.2.244.12.239.177|2|6 +1.3.6.1.2.1.15.3.1.3.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.4.244.12.239.177|2|21 +1.3.6.1.2.1.15.3.1.5.244.12.239.177|64x|56a51b1e +1.3.6.1.2.1.15.3.1.6.244.12.239.177|2|31 +1.3.6.1.2.1.15.3.1.7.244.12.239.177|64x|f40cefb1 +1.3.6.1.2.1.15.3.1.8.244.12.239.177|2|7 +1.3.6.1.2.1.15.3.1.9.244.12.239.177|2|26 +1.3.6.1.2.1.15.3.1.10.244.12.239.177|65|2016631572 +1.3.6.1.2.1.15.3.1.11.244.12.239.177|65|2128197531 +1.3.6.1.2.1.15.3.1.12.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.13.244.12.239.177|65|3947895592 +1.3.6.1.2.1.15.3.1.15.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.16.244.12.239.177|66|3947895592 +1.3.6.1.2.1.15.3.1.17.244.12.239.177|2|378 +1.3.6.1.2.1.15.3.1.18.244.12.239.177|2|124 +1.3.6.1.2.1.15.3.1.19.244.12.239.177|2|25342 +1.3.6.1.2.1.15.3.1.20.244.12.239.177|2|9203 +1.3.6.1.2.1.15.3.1.21.244.12.239.177|2|235634 +1.3.6.1.2.1.15.3.1.22.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.23.244.12.239.177|2|4 +1.3.6.1.2.1.15.3.1.24.244.12.239.177|66|3947895592 +1.3.6.1.2.1.31.1.1.1.1.83|4x|717561696e746c792064726976696e67206f78656e207468656972207a6f6d62696573206f78656e206163746564206163746564 +1.3.6.1.2.1.31.1.1.1.1.780|4x|62757420666f7277617264206b657074206275742074686569722064726976696e67206f78656e20717561696e746c79206163746564 +1.3.6.1.2.1.31.1.1.1.1.907|4x|6b65707420627574 +1.3.6.1.4.1.2636.3.1.2.0|4|EX2200 Ethernet Switch +1.3.6.1.4.1.2636.3.1.3.0|4|dXPEdPBE5yKtjW9xx3 +1.3.6.1.4.1.2636.3.1.4.0|4|version-1.0 +1.3.6.1.4.1.2636.3.5.2.1.1.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|74686569722064726976696e6720717561696e746c7920627574204a61646564206f78656e +1.3.6.1.4.1.2636.3.5.2.1.1.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|6b657074206b65707420627574206f78656e204a6164656420666f7277617264206163746564 +1.3.6.1.4.1.2636.3.5.2.1.1.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|64726976696e67206b657074206163746564204a61646564207a6f6d62696573206b657074206163746564 +1.3.6.1.4.1.2636.3.5.2.1.2.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|4a61646564206f78656e206b6570742074686569722064726976696e6720627574206b657074 +1.3.6.1.4.1.2636.3.5.2.1.2.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|6f78656e20666f7277617264204a61646564206b65707420627574204a61646564 +1.3.6.1.4.1.2636.3.5.2.1.2.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|6275742062757420627574207468656972207468656972207468656972206b657074206b65707420666f7277617264 +1.3.6.1.4.1.2636.3.5.2.1.3.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.3.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.3.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.4.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|70|4454094099404974412 +1.3.6.1.4.1.2636.3.5.2.1.4.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|70|9206254963072680169 +1.3.6.1.4.1.2636.3.5.2.1.4.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|70|3696546830171348582 +1.3.6.1.4.1.2636.3.5.2.1.5.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|70|696736619041929696 +1.3.6.1.4.1.2636.3.5.2.1.5.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|70|16785242467789528990 +1.3.6.1.4.1.2636.3.5.2.1.5.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|70|17939108183311980476 +1.3.6.1.4.1.2636.3.5.2.1.6.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|717561696e746c792064726976696e6720666f727761726420666f7277617264206163746564207468656972207a6f6d62696573 +1.3.6.1.4.1.2636.3.5.2.1.6.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|666f7277617264206f78656e20717561696e746c79207a6f6d6269657320666f7277617264206f78656e206f78656e20746865697220627574 +1.3.6.1.4.1.2636.3.5.2.1.6.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|616374656420627574207468656972206f78656e204a61646564204a61646564207468656972 +1.3.6.1.4.1.2636.3.5.2.1.7.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4|driving +1.3.6.1.4.1.2636.3.5.2.1.7.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|717561696e746c792064726976696e67206f78656e20717561696e746c7920666f7277617264207a6f6d62696573206163746564 +1.3.6.1.4.1.2636.3.5.2.1.7.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|7a6f6d62696573207a6f6d62696573206b657074 +1.3.6.1.4.1.2636.3.5.2.1.8.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|2|1 +1.3.6.1.4.1.2636.3.5.2.1.8.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|2|2 +1.3.6.1.4.1.2636.3.5.2.1.8.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|2|2 +1.3.6.1.4.1.2636.3.6.2.1.1.83.1.5.116.104.101.105.114|2|83 +1.3.6.1.4.1.2636.3.6.2.1.1.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|2|780 +1.3.6.1.4.1.2636.3.6.2.1.1.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|2|907 +1.3.6.1.4.1.2636.3.6.2.1.2.83.1.5.116.104.101.105.114|2|1 +1.3.6.1.4.1.2636.3.6.2.1.2.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.2636.3.6.2.1.2.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|2|2 +1.3.6.1.4.1.2636.3.6.2.1.3.83.1.5.116.104.101.105.114|4|their +1.3.6.1.4.1.2636.3.6.2.1.3.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|4x|61637465642062757420666f7277617264206163746564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2636.3.6.2.1.3.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|4x|6f78656e204a61646564206f78656e204a6164656420666f7277617264206b65707420717561696e746c79 +1.3.6.1.4.1.2636.3.6.2.1.4.83.1.5.116.104.101.105.114|70|12317383665498203792 +1.3.6.1.4.1.2636.3.6.2.1.4.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|70|18298564239260252878 +1.3.6.1.4.1.2636.3.6.2.1.4.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|70|14296161882202174757 +1.3.6.1.4.1.2636.3.6.2.1.5.83.1.5.116.104.101.105.114|70|11494977799318547626 +1.3.6.1.4.1.2636.3.6.2.1.5.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|70|3147422798697337841 +1.3.6.1.4.1.2636.3.6.2.1.5.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|70|9179463037551089633 +1.3.6.1.4.1.2636.3.6.2.1.6.83.1.5.116.104.101.105.114|4|driving +1.3.6.1.4.1.2636.3.6.2.1.6.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|4x|666f72776172642064726976696e67 +1.3.6.1.4.1.2636.3.6.2.1.6.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|4x|6f78656e206b657074207a6f6d62696573 +1.3.6.1.4.1.2636.3.15.9.1.1.170|2|11 +1.3.6.1.4.1.2636.3.15.9.1.1.243|2|919 +1.3.6.1.4.1.2636.3.15.9.1.1.463|2|981 +1.3.6.1.4.1.2636.3.15.9.1.2.170|4x|6163746564206f78656e206f78656e20666f727761726420717561696e746c79206b657074207a6f6d6269657320627574206f78656e +1.3.6.1.4.1.2636.3.15.9.1.2.243|4x|6163746564206b65707420717561696e746c79206163746564206f78656e206b657074 +1.3.6.1.4.1.2636.3.15.9.1.2.463|4|their +1.3.6.1.4.1.2636.3.15.10.1.1.170.25|2|170 +1.3.6.1.4.1.2636.3.15.10.1.1.243.50|2|243 +1.3.6.1.4.1.2636.3.15.10.1.1.463.15|2|463 +1.3.6.1.4.1.2636.3.15.10.1.2.170.25|2|25 +1.3.6.1.4.1.2636.3.15.10.1.2.243.50|2|50 +1.3.6.1.4.1.2636.3.15.10.1.2.463.15|2|15 +1.3.6.1.4.1.2636.3.15.10.1.3.170.25|70|12770856836917969245 +1.3.6.1.4.1.2636.3.15.10.1.3.243.50|70|9663869619250073385 +1.3.6.1.4.1.2636.3.15.10.1.3.463.15|70|4128978860610001207 +1.3.6.1.4.1.2636.3.15.10.1.4.170.25|70|1002399613905247533 +1.3.6.1.4.1.2636.3.15.10.1.4.243.50|70|996423942118251217 +1.3.6.1.4.1.2636.3.15.10.1.4.463.15|70|4764867759487322545 +1.3.6.1.4.1.2636.3.15.10.1.5.170.25|70|9232681433406374088 +1.3.6.1.4.1.2636.3.15.10.1.5.243.50|70|8035400151290454024 +1.3.6.1.4.1.2636.3.15.10.1.5.463.15|70|5990647624742140325 +1.3.6.1.4.1.2636.3.15.10.1.6.170.25|70|1065640835557330094 +1.3.6.1.4.1.2636.3.15.10.1.6.243.50|70|17558806293727990360 +1.3.6.1.4.1.2636.3.15.10.1.6.463.15|70|11908438181160168105 +1.3.6.1.4.1.2636.3.15.10.1.7.170.25|70|18273158544474451497 +1.3.6.1.4.1.2636.3.15.10.1.7.243.50|70|13777396596348831423 +1.3.6.1.4.1.2636.3.15.10.1.7.463.15|70|2487683329818536869 +1.3.6.1.4.1.2636.3.15.10.1.8.170.25|70|3466222661774951990 +1.3.6.1.4.1.2636.3.15.10.1.8.243.50|70|12670568689846152972 +1.3.6.1.4.1.2636.3.15.10.1.8.463.15|70|8075791252460836529 +1.3.6.1.4.1.2636.3.15.10.1.9.170.25|70|8020605155612723028 +1.3.6.1.4.1.2636.3.15.10.1.9.243.50|70|12997273506749046582 +1.3.6.1.4.1.2636.3.15.10.1.9.463.15|70|18231535980456700136 +1.3.6.1.4.1.2636.3.15.10.1.10.170.25|70|3314807028774900920 +1.3.6.1.4.1.2636.3.15.10.1.10.243.50|70|12384249738747780022 +1.3.6.1.4.1.2636.3.15.10.1.10.463.15|70|5706341066266616742 +1.3.6.1.4.1.2636.3.15.10.1.11.170.25|70|9543706072360554442 +1.3.6.1.4.1.2636.3.15.10.1.11.243.50|70|15353080467434378674 +1.3.6.1.4.1.2636.3.15.10.1.11.463.15|70|7000096561546418502 +1.3.6.1.4.1.2636.3.15.10.1.12.170.25|70|13553825566144951217 +1.3.6.1.4.1.2636.3.15.10.1.12.243.50|70|2884686421611507766 +1.3.6.1.4.1.2636.3.15.10.1.12.463.15|70|7950960221026326783 +1.3.6.1.4.1.2636.3.15.10.1.13.170.25|70|6461751168224122855 +1.3.6.1.4.1.2636.3.15.10.1.13.243.50|70|8626132824337957526 +1.3.6.1.4.1.2636.3.15.10.1.13.463.15|70|17731588095000145998 +1.3.6.1.4.1.2636.3.15.10.1.14.170.25|70|15619102596973248473 +1.3.6.1.4.1.2636.3.15.10.1.14.243.50|70|16692053855289491043 +1.3.6.1.4.1.2636.3.15.10.1.14.463.15|70|8456156210951462249 +1.3.6.1.4.1.2636.3.15.10.1.15.170.25|70|2299977202421036105 +1.3.6.1.4.1.2636.3.15.10.1.15.243.50|70|813117570951116201 +1.3.6.1.4.1.2636.3.15.10.1.15.463.15|70|1188478793913849482 +1.3.6.1.4.1.2636.3.15.10.1.16.170.25|70|2893929287389891965 +1.3.6.1.4.1.2636.3.15.10.1.16.243.50|70|16289010184593102625 +1.3.6.1.4.1.2636.3.15.10.1.16.463.15|70|14190997503223661814 +1.3.6.1.4.1.2636.3.15.10.1.17.170.25|70|14493484350074177035 +1.3.6.1.4.1.2636.3.15.10.1.17.243.50|70|13596150666639387175 +1.3.6.1.4.1.2636.3.15.10.1.17.463.15|70|14424565573160285076 +1.3.6.1.4.1.2636.3.15.10.1.18.170.25|70|10529534850679351483 +1.3.6.1.4.1.2636.3.15.10.1.18.243.50|70|2906176364604264292 +1.3.6.1.4.1.2636.3.15.10.1.18.463.15|70|8315217861465467611 +1.3.6.1.4.1.2636.3.15.10.1.19.170.25|70|8170434880350759573 +1.3.6.1.4.1.2636.3.15.10.1.19.243.50|70|887688327484631583 +1.3.6.1.4.1.2636.3.15.10.1.19.463.15|70|10060318579349968784 +1.3.6.1.4.1.2636.3.15.10.1.20.170.25|70|5815198282439278933 +1.3.6.1.4.1.2636.3.15.10.1.20.243.50|70|14749506163780204940 +1.3.6.1.4.1.2636.3.15.10.1.20.463.15|70|9286269907376035246 +1.3.6.1.4.1.2636.3.15.10.1.21.170.25|70|2825795754297694874 +1.3.6.1.4.1.2636.3.15.10.1.21.243.50|70|11285523882234093093 +1.3.6.1.4.1.2636.3.15.10.1.21.463.15|70|15090187984937318802 +1.3.6.1.4.1.2636.3.15.10.1.22.170.25|70|7863778897832470889 +1.3.6.1.4.1.2636.3.15.10.1.22.243.50|70|3553508407684051674 +1.3.6.1.4.1.2636.3.15.10.1.22.463.15|70|13931708594683902426 +1.3.6.1.4.1.2636.3.15.10.1.23.170.25|70|12906613682638875307 +1.3.6.1.4.1.2636.3.15.10.1.23.243.50|70|11949204969119103650 +1.3.6.1.4.1.2636.3.15.10.1.23.463.15|70|5956153079277958221 +1.3.6.1.4.1.2636.3.15.10.1.24.170.25|70|11477234301196000227 +1.3.6.1.4.1.2636.3.15.10.1.24.243.50|70|3314652739024033013 +1.3.6.1.4.1.2636.3.15.10.1.24.463.15|70|15017127765184020318 +1.3.6.1.4.1.2636.3.15.10.1.25.170.25|70|8424154835415081760 +1.3.6.1.4.1.2636.3.15.10.1.25.243.50|70|7471672866813717794 +1.3.6.1.4.1.2636.3.15.10.1.25.463.15|70|17857076078061565547 +1.3.6.1.4.1.2636.3.15.10.1.26.170.25|70|3793853525121104339 +1.3.6.1.4.1.2636.3.15.10.1.26.243.50|70|3989409530853199526 +1.3.6.1.4.1.2636.3.15.10.1.26.463.15|70|15735187836465138700 +1.3.6.1.4.1.2636.3.15.10.1.27.170.25|70|18213777320258743968 +1.3.6.1.4.1.2636.3.15.10.1.27.243.50|70|14971409743913453864 +1.3.6.1.4.1.2636.3.15.10.1.27.463.15|70|4036774420969319248 +1.3.6.1.4.1.2636.3.15.10.1.28.170.25|70|11024421017883614152 +1.3.6.1.4.1.2636.3.15.10.1.28.243.50|70|90364654298972704 +1.3.6.1.4.1.2636.3.15.10.1.28.463.15|70|8686770717862532224 +1.3.6.1.4.1.2636.3.15.10.1.29.170.25|70|12300319506603429604 +1.3.6.1.4.1.2636.3.15.10.1.29.243.50|70|1280552904131433006 +1.3.6.1.4.1.2636.3.15.10.1.29.463.15|70|1984703258989993414 +1.3.6.1.4.1.2636.3.15.10.1.30.170.25|70|14325491697305781346 +1.3.6.1.4.1.2636.3.15.10.1.30.243.50|70|9672229296991156990 +1.3.6.1.4.1.2636.3.15.10.1.30.463.15|70|17512343358386083614 +1.3.6.1.4.1.2636.3.15.10.1.31.170.25|70|5927227884246572881 +1.3.6.1.4.1.2636.3.15.10.1.31.243.50|70|9450776281406177093 +1.3.6.1.4.1.2636.3.15.10.1.31.463.15|70|17370561485432592141 +1.3.6.1.4.1.2636.3.15.10.1.32.170.25|70|7967882224524493134 +1.3.6.1.4.1.2636.3.15.10.1.32.243.50|70|3172465735716905246 +1.3.6.1.4.1.2636.3.15.10.1.32.463.15|70|11533409651162362033 +1.3.6.1.4.1.2636.3.15.10.1.33.170.25|70|16548575809615604796 +1.3.6.1.4.1.2636.3.15.10.1.33.243.50|70|6442873042770202449 +1.3.6.1.4.1.2636.3.15.10.1.33.463.15|70|1918875848098423600 +1.3.6.1.4.1.2636.3.15.10.1.34.170.25|70|12105898413641506478 +1.3.6.1.4.1.2636.3.15.10.1.34.243.50|70|5385799517301974188 +1.3.6.1.4.1.2636.3.15.10.1.34.463.15|70|9277777983354765895 +1.3.6.1.4.1.2636.3.15.10.1.35.170.25|70|786407073866759825 +1.3.6.1.4.1.2636.3.15.10.1.35.243.50|70|12567184007500140055 +1.3.6.1.4.1.2636.3.15.10.1.35.463.15|70|6530228175190559355 +1.3.6.1.4.1.2636.3.15.10.1.36.170.25|70|22369930787572654 +1.3.6.1.4.1.2636.3.15.10.1.36.243.50|70|2397774807429625982 +1.3.6.1.4.1.2636.3.15.10.1.36.463.15|70|15156373897980262200 +1.3.6.1.4.1.2636.3.15.10.1.37.170.25|70|5148517373031836367 +1.3.6.1.4.1.2636.3.15.10.1.37.243.50|70|7721607394473998281 +1.3.6.1.4.1.2636.3.15.10.1.37.463.15|70|8714575013162753417 +1.3.6.1.4.1.2636.3.15.10.1.38.170.25|70|10930247236210764218 +1.3.6.1.4.1.2636.3.15.10.1.38.243.50|70|5146652189836621240 +1.3.6.1.4.1.2636.3.15.10.1.38.463.15|70|8864307502844767136 +1.3.6.1.4.1.2636.3.15.10.1.39.170.25|70|17987422552752788069 +1.3.6.1.4.1.2636.3.15.10.1.39.243.50|70|7828400400494290544 +1.3.6.1.4.1.2636.3.15.10.1.39.463.15|70|10564281255194113941 +1.3.6.1.4.1.2636.3.15.10.1.40.170.25|70|4456908988229385506 +1.3.6.1.4.1.2636.3.15.10.1.40.243.50|70|4548509587568319054 +1.3.6.1.4.1.2636.3.15.10.1.40.463.15|70|12654679094639954721 +1.3.6.1.4.1.2636.3.15.10.1.41.170.25|70|319452186197743737 +1.3.6.1.4.1.2636.3.15.10.1.41.243.50|70|16364791724635672240 +1.3.6.1.4.1.2636.3.15.10.1.41.463.15|70|17828705365509861774 +1.3.6.1.4.1.2636.3.15.10.1.42.170.25|70|9913951142041236635 +1.3.6.1.4.1.2636.3.15.10.1.42.243.50|70|4590232569604987384 +1.3.6.1.4.1.2636.3.15.10.1.42.463.15|70|16879636922511149261 +1.3.6.1.4.1.2636.3.15.10.1.43.170.25|70|16128554786484754487 +1.3.6.1.4.1.2636.3.15.10.1.43.243.50|70|6720587125918748618 +1.3.6.1.4.1.2636.3.15.10.1.43.463.15|70|10982123962446739740 +1.3.6.1.4.1.2636.3.15.10.1.44.170.25|70|6625476741978175421 +1.3.6.1.4.1.2636.3.15.10.1.44.243.50|70|14758624194210778093 +1.3.6.1.4.1.2636.3.15.10.1.44.463.15|70|3510595354408991883 +1.3.6.1.4.1.2636.3.15.10.1.45.170.25|70|12193077799780761280 +1.3.6.1.4.1.2636.3.15.10.1.45.243.50|70|434156370935591348 +1.3.6.1.4.1.2636.3.15.10.1.45.463.15|70|14701761228332844190 +1.3.6.1.4.1.2636.3.15.10.1.46.170.25|70|4097961753211413825 +1.3.6.1.4.1.2636.3.15.10.1.46.243.50|70|14198283656685665373 +1.3.6.1.4.1.2636.3.15.10.1.46.463.15|70|9981844938014966456 +1.3.6.1.4.1.2636.3.15.10.1.47.170.25|70|4499862665732599823 +1.3.6.1.4.1.2636.3.15.10.1.47.243.50|70|7208392381338046179 +1.3.6.1.4.1.2636.3.15.10.1.47.463.15|70|6241021335515696595 +1.3.6.1.4.1.2636.3.15.10.1.48.170.25|70|4799882603978889044 +1.3.6.1.4.1.2636.3.15.10.1.48.243.50|70|11687294706629489122 +1.3.6.1.4.1.2636.3.15.10.1.48.463.15|70|8189775643826190503 +1.3.6.1.4.1.2636.3.15.10.1.49.170.25|70|14943326773818355422 +1.3.6.1.4.1.2636.3.15.10.1.49.243.50|70|3029491279441157558 +1.3.6.1.4.1.2636.3.15.10.1.49.463.15|70|14724608253725676036 +1.3.6.1.4.1.2636.3.15.10.1.50.170.25|70|8089079564874181657 +1.3.6.1.4.1.2636.3.15.10.1.50.243.50|70|3777655493494241512 +1.3.6.1.4.1.2636.3.15.10.1.50.463.15|70|9345336414379681585 +1.3.6.1.4.1.2636.3.15.10.1.51.170.25|70|1461276263793545759 +1.3.6.1.4.1.2636.3.15.10.1.51.243.50|70|12409543167456089371 +1.3.6.1.4.1.2636.3.15.10.1.51.463.15|70|4329004572229054293 +1.3.6.1.4.1.2636.3.15.10.1.52.170.25|70|6602329256452145238 +1.3.6.1.4.1.2636.3.15.10.1.52.243.50|70|6601473160297645100 +1.3.6.1.4.1.2636.3.15.10.1.52.463.15|70|16308867362923996690 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|11 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|22 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|24 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|4x|4a6164656420666f727761726420627574206f78656e20717561696e746c79207468656972207468656972 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|4x|666f727761726420666f72776172642064726976696e672064726976696e67204a61646564204a61646564 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|4x|6275742064726976696e6720627574 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|1 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|1 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|3 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|12189304536513319332 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|7722656158153650831 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|10603165628512588309 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|3843980053062837517 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|12509302819583194366 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|3885376250889014561 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|10352052349549821463 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|7177674967410638136 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|5091222764852841190 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|13715573869517889886 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|10130509551224208352 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|2504343572792914641 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|2938889684826768032 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|11291252729780336384 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|1481668101793427313 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|6310274704585370658 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|6789462645369539630 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|491028968499993270 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|3608875038808074952 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|797075051605537720 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|14085552435037248689 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|5552625442655846107 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|4454798770846396730 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|9088428039091030198 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|10229778388752303226 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|11069391749223800156 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|11894101190314294086 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|5808123009872645909 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|3572737769193079165 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|6853689900557367040 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|8372358451243013065 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|2058660889925691752 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|15823042855195793586 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|11700083343423325868 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|4448772641108495089 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|676318422458825171 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|15142294159964046333 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|18390833596244657351 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|10182233820378904307 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|2057784955673108988 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|6276174311039281296 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|14694007361821605096 +1.3.6.1.4.1.2636.3.89.1.1.3.1.1.1|4|Mycroft Holmes +1.3.6.1.4.1.2636.3.89.1.1.3.1.1.2|4|Jim Moriarty +1.3.6.1.4.1.2636.3.89.1.1.3.1.2.1|4|brother +1.3.6.1.4.1.2636.3.89.1.1.3.1.2.2|4|enemy +1.3.6.1.4.1.2636.3.89.1.1.3.1.3.1|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.3.2|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.4.1|65|2048000 diff --git a/test/new-e2e/ndm/snmp/compose/data/juniper-mx-variation.snmprec b/test/new-e2e/ndm/snmp/compose/data/juniper-mx-variation.snmprec new file mode 100644 index 00000000000000..230453ef3880dd --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/juniper-mx-variation.snmprec @@ -0,0 +1,105 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.2636.1.1.1.4.25.1 +1.3.6.1.2.1.15.3.1.1.244.12.239.177|64x|47365042 +1.3.6.1.2.1.15.3.1.2.244.12.239.177|2|6 +1.3.6.1.2.1.15.3.1.3.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.4.244.12.239.177|2|21 +1.3.6.1.2.1.15.3.1.5.244.12.239.177|64x|56a51b1e +1.3.6.1.2.1.15.3.1.6.244.12.239.177|2|31 +1.3.6.1.2.1.15.3.1.7.244.12.239.177|64x|f40cefb1 +1.3.6.1.2.1.15.3.1.8.244.12.239.177|2|7 +1.3.6.1.2.1.15.3.1.9.244.12.239.177|2|26 +1.3.6.1.2.1.15.3.1.10.244.12.239.177|65|2016631572 +1.3.6.1.2.1.15.3.1.11.244.12.239.177|65|2128197531 +1.3.6.1.2.1.15.3.1.12.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.13.244.12.239.177|65|3947895592 +1.3.6.1.2.1.15.3.1.15.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.16.244.12.239.177|66|3947895592 +1.3.6.1.2.1.15.3.1.17.244.12.239.177|2|378 +1.3.6.1.2.1.15.3.1.18.244.12.239.177|2|124 +1.3.6.1.2.1.15.3.1.19.244.12.239.177|2|25342 +1.3.6.1.2.1.15.3.1.20.244.12.239.177|2|9203 +1.3.6.1.2.1.15.3.1.21.244.12.239.177|2|235634 +1.3.6.1.2.1.15.3.1.22.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.23.244.12.239.177|2|4 +1.3.6.1.2.1.15.3.1.24.244.12.239.177|66|3947895592 +1.3.6.1.2.1.31.1.1.1.1.83|4x|717561696e746c792064726976696e67206f78656e207468656972207a6f6d62696573206f78656e206163746564206163746564 +1.3.6.1.2.1.31.1.1.1.1.780|4x|62757420666f7277617264206b657074206275742074686569722064726976696e67206f78656e20717561696e746c79206163746564 +1.3.6.1.2.1.31.1.1.1.1.907|4x|6b65707420627574 +1.3.6.1.4.1.2636.3.5.2.1.1.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|74686569722064726976696e6720717561696e746c7920627574204a61646564206f78656e +1.3.6.1.4.1.2636.3.5.2.1.1.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|6b657074206b65707420627574206f78656e204a6164656420666f7277617264206163746564 +1.3.6.1.4.1.2636.3.5.2.1.1.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|64726976696e67206b657074206163746564204a61646564207a6f6d62696573206b657074206163746564 +1.3.6.1.4.1.2636.3.5.2.1.2.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|4a61646564206f78656e206b6570742074686569722064726976696e6720627574206b657074 +1.3.6.1.4.1.2636.3.5.2.1.2.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|6f78656e20666f7277617264204a61646564206b65707420627574204a61646564 +1.3.6.1.4.1.2636.3.5.2.1.2.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|6275742062757420627574207468656972207468656972207468656972206b657074206b65707420666f7277617264 +1.3.6.1.4.1.2636.3.5.2.1.3.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.3.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.3.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.4.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|70|4454094099404974412 +1.3.6.1.4.1.2636.3.5.2.1.4.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|70|9206254963072680169 +1.3.6.1.4.1.2636.3.5.2.1.4.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|70|3696546830171348582 +1.3.6.1.4.1.2636.3.5.2.1.5.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|70|696736619041929696 +1.3.6.1.4.1.2636.3.5.2.1.5.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|70|16785242467789528990 +1.3.6.1.4.1.2636.3.5.2.1.5.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|70|17939108183311980476 +1.3.6.1.4.1.2636.3.5.2.1.6.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|717561696e746c792064726976696e6720666f727761726420666f7277617264206163746564207468656972207a6f6d62696573 +1.3.6.1.4.1.2636.3.5.2.1.6.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|666f7277617264206f78656e20717561696e746c79207a6f6d6269657320666f7277617264206f78656e206f78656e20746865697220627574 +1.3.6.1.4.1.2636.3.5.2.1.6.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|616374656420627574207468656972206f78656e204a61646564204a61646564207468656972 +1.3.6.1.4.1.2636.3.5.2.1.7.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4|driving +1.3.6.1.4.1.2636.3.5.2.1.7.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|717561696e746c792064726976696e67206f78656e20717561696e746c7920666f7277617264207a6f6d62696573206163746564 +1.3.6.1.4.1.2636.3.5.2.1.7.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|7a6f6d62696573207a6f6d62696573206b657074 +1.3.6.1.4.1.2636.3.5.2.1.8.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|2|1 +1.3.6.1.4.1.2636.3.5.2.1.8.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|2|2 +1.3.6.1.4.1.2636.3.5.2.1.8.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|11 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|22 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|24 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|4x|4a6164656420666f727761726420627574206f78656e20717561696e746c79207468656972207468656972 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|4x|666f727761726420666f72776172642064726976696e672064726976696e67204a61646564204a61646564 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|4x|6275742064726976696e6720627574 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|1 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|1 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|3 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|12189304536513319332 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|7722656158153650831 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|10603165628512588309 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|3843980053062837517 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|12509302819583194366 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|3885376250889014561 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|10352052349549821463 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|7177674967410638136 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|5091222764852841190 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|13715573869517889886 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|10130509551224208352 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|2504343572792914641 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|2938889684826768032 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|11291252729780336384 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|1481668101793427313 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|6310274704585370658 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|6789462645369539630 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|491028968499993270 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|3608875038808074952 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|797075051605537720 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|14085552435037248689 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|5552625442655846107 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|4454798770846396730 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|9088428039091030198 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|10229778388752303226 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|11069391749223800156 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|11894101190314294086 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|5808123009872645909 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|3572737769193079165 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|6853689900557367040 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|8372358451243013065 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|2058660889925691752 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|15823042855195793586 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|11700083343423325868 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|4448772641108495089 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|676318422458825171 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|15142294159964046333 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|18390833596244657351 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|10182233820378904307 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|2057784955673108988 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|6276174311039281296 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|14694007361821605096 diff --git a/test/new-e2e/ndm/snmp/compose/data/juniper-mx.snmprec b/test/new-e2e/ndm/snmp/compose/data/juniper-mx.snmprec new file mode 100644 index 00000000000000..4eda0496a907cd --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/juniper-mx.snmprec @@ -0,0 +1,109 @@ +1.3.6.1.2.1.1.1.0|4|Juniper Networks, Inc. mx480 internet router, kernel JUNOS 11.2R1.10 #0: 2011-07-29 07:15:34 UTC +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.2636.1.1.1.2.25 +1.3.6.1.2.1.15.3.1.1.244.12.239.177|64x|47365042 +1.3.6.1.2.1.15.3.1.2.244.12.239.177|2|6 +1.3.6.1.2.1.15.3.1.3.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.4.244.12.239.177|2|21 +1.3.6.1.2.1.15.3.1.5.244.12.239.177|64x|56a51b1e +1.3.6.1.2.1.15.3.1.6.244.12.239.177|2|31 +1.3.6.1.2.1.15.3.1.7.244.12.239.177|64x|f40cefb1 +1.3.6.1.2.1.15.3.1.8.244.12.239.177|2|7 +1.3.6.1.2.1.15.3.1.9.244.12.239.177|2|26 +1.3.6.1.2.1.15.3.1.10.244.12.239.177|65|2016631572 +1.3.6.1.2.1.15.3.1.11.244.12.239.177|65|2128197531 +1.3.6.1.2.1.15.3.1.12.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.13.244.12.239.177|65|3947895592 +1.3.6.1.2.1.15.3.1.15.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.16.244.12.239.177|66|3947895592 +1.3.6.1.2.1.15.3.1.17.244.12.239.177|2|378 +1.3.6.1.2.1.15.3.1.18.244.12.239.177|2|124 +1.3.6.1.2.1.15.3.1.19.244.12.239.177|2|25342 +1.3.6.1.2.1.15.3.1.20.244.12.239.177|2|9203 +1.3.6.1.2.1.15.3.1.21.244.12.239.177|2|235634 +1.3.6.1.2.1.15.3.1.22.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.23.244.12.239.177|2|4 +1.3.6.1.2.1.15.3.1.24.244.12.239.177|66|3947895592 +1.3.6.1.2.1.31.1.1.1.1.83|4x|717561696e746c792064726976696e67206f78656e207468656972207a6f6d62696573206f78656e206163746564206163746564 +1.3.6.1.2.1.31.1.1.1.1.780|4x|62757420666f7277617264206b657074206275742074686569722064726976696e67206f78656e20717561696e746c79206163746564 +1.3.6.1.2.1.31.1.1.1.1.907|4x|6b65707420627574 +1.3.6.1.4.1.2636.3.1.2.0|4|MX480 Router +1.3.6.1.4.1.2636.3.1.3.0|4|dXPEdPBE5yKtjW9xx4 +1.3.6.1.4.1.2636.3.1.4.0|4|version-1.1 +1.3.6.1.4.1.2636.3.5.2.1.1.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|74686569722064726976696e6720717561696e746c7920627574204a61646564206f78656e +1.3.6.1.4.1.2636.3.5.2.1.1.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|6b657074206b65707420627574206f78656e204a6164656420666f7277617264206163746564 +1.3.6.1.4.1.2636.3.5.2.1.1.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|64726976696e67206b657074206163746564204a61646564207a6f6d62696573206b657074206163746564 +1.3.6.1.4.1.2636.3.5.2.1.2.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|4a61646564206f78656e206b6570742074686569722064726976696e6720627574206b657074 +1.3.6.1.4.1.2636.3.5.2.1.2.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|6f78656e20666f7277617264204a61646564206b65707420627574204a61646564 +1.3.6.1.4.1.2636.3.5.2.1.2.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|6275742062757420627574207468656972207468656972207468656972206b657074206b65707420666f7277617264 +1.3.6.1.4.1.2636.3.5.2.1.3.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.3.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.3.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.4.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|70|4454094099404974412 +1.3.6.1.4.1.2636.3.5.2.1.4.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|70|9206254963072680169 +1.3.6.1.4.1.2636.3.5.2.1.4.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|70|3696546830171348582 +1.3.6.1.4.1.2636.3.5.2.1.5.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|70|696736619041929696 +1.3.6.1.4.1.2636.3.5.2.1.5.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|70|16785242467789528990 +1.3.6.1.4.1.2636.3.5.2.1.5.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|70|17939108183311980476 +1.3.6.1.4.1.2636.3.5.2.1.6.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|717561696e746c792064726976696e6720666f727761726420666f7277617264206163746564207468656972207a6f6d62696573 +1.3.6.1.4.1.2636.3.5.2.1.6.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|666f7277617264206f78656e20717561696e746c79207a6f6d6269657320666f7277617264206f78656e206f78656e20746865697220627574 +1.3.6.1.4.1.2636.3.5.2.1.6.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|616374656420627574207468656972206f78656e204a61646564204a61646564207468656972 +1.3.6.1.4.1.2636.3.5.2.1.7.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4|driving +1.3.6.1.4.1.2636.3.5.2.1.7.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|717561696e746c792064726976696e67206f78656e20717561696e746c7920666f7277617264207a6f6d62696573206163746564 +1.3.6.1.4.1.2636.3.5.2.1.7.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|7a6f6d62696573207a6f6d62696573206b657074 +1.3.6.1.4.1.2636.3.5.2.1.8.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|2|1 +1.3.6.1.4.1.2636.3.5.2.1.8.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|2|2 +1.3.6.1.4.1.2636.3.5.2.1.8.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|11 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|22 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|24 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|4x|4a6164656420666f727761726420627574206f78656e20717561696e746c79207468656972207468656972 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|4x|666f727761726420666f72776172642064726976696e672064726976696e67204a61646564204a61646564 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|4x|6275742064726976696e6720627574 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|1 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|1 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|3 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|12189304536513319332 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|7722656158153650831 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|10603165628512588309 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|3843980053062837517 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|12509302819583194366 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|3885376250889014561 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|10352052349549821463 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|7177674967410638136 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|5091222764852841190 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|13715573869517889886 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|10130509551224208352 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|2504343572792914641 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|2938889684826768032 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|11291252729780336384 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|1481668101793427313 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|6310274704585370658 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|6789462645369539630 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|491028968499993270 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|3608875038808074952 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|797075051605537720 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|14085552435037248689 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|5552625442655846107 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|4454798770846396730 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|9088428039091030198 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|10229778388752303226 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|11069391749223800156 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|11894101190314294086 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|5808123009872645909 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|3572737769193079165 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|6853689900557367040 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|8372358451243013065 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|2058660889925691752 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|15823042855195793586 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|11700083343423325868 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|4448772641108495089 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|676318422458825171 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|15142294159964046333 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|18390833596244657351 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|10182233820378904307 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|2057784955673108988 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|6276174311039281296 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|14694007361821605096 diff --git a/test/new-e2e/ndm/snmp/compose/data/juniper-srx-variation.snmprec b/test/new-e2e/ndm/snmp/compose/data/juniper-srx-variation.snmprec new file mode 100644 index 00000000000000..4f57710ec18450 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/juniper-srx-variation.snmprec @@ -0,0 +1,85 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.2636.1.1.1.4.35.1 +1.3.6.1.2.1.15.3.1.1.244.12.239.177|64x|47365042 +1.3.6.1.2.1.15.3.1.2.244.12.239.177|2|6 +1.3.6.1.2.1.15.3.1.3.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.4.244.12.239.177|2|21 +1.3.6.1.2.1.15.3.1.5.244.12.239.177|64x|56a51b1e +1.3.6.1.2.1.15.3.1.6.244.12.239.177|2|31 +1.3.6.1.2.1.15.3.1.7.244.12.239.177|64x|f40cefb1 +1.3.6.1.2.1.15.3.1.8.244.12.239.177|2|7 +1.3.6.1.2.1.15.3.1.9.244.12.239.177|2|26 +1.3.6.1.2.1.15.3.1.10.244.12.239.177|65|2016631572 +1.3.6.1.2.1.15.3.1.11.244.12.239.177|65|2128197531 +1.3.6.1.2.1.15.3.1.12.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.13.244.12.239.177|65|3947895592 +1.3.6.1.2.1.15.3.1.15.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.16.244.12.239.177|66|3947895592 +1.3.6.1.2.1.15.3.1.17.244.12.239.177|2|378 +1.3.6.1.2.1.15.3.1.18.244.12.239.177|2|124 +1.3.6.1.2.1.15.3.1.19.244.12.239.177|2|25342 +1.3.6.1.2.1.15.3.1.20.244.12.239.177|2|9203 +1.3.6.1.2.1.15.3.1.21.244.12.239.177|2|235634 +1.3.6.1.2.1.15.3.1.22.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.23.244.12.239.177|2|4 +1.3.6.1.2.1.15.3.1.24.244.12.239.177|66|3947895592 +1.3.6.1.2.1.31.1.1.1.1.83|4x|717561696e746c792064726976696e67206f78656e207468656972207a6f6d62696573206f78656e206163746564206163746564 +1.3.6.1.2.1.31.1.1.1.1.780|4x|62757420666f7277617264206b657074206275742074686569722064726976696e67206f78656e20717561696e746c79206163746564 +1.3.6.1.2.1.31.1.1.1.1.907|4x|6b65707420627574 +1.3.6.1.4.1.2636.3.6.2.1.1.83.1.5.116.104.101.105.114|2|83 +1.3.6.1.4.1.2636.3.6.2.1.1.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|2|780 +1.3.6.1.4.1.2636.3.6.2.1.1.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|2|907 +1.3.6.1.4.1.2636.3.6.2.1.2.83.1.5.116.104.101.105.114|2|1 +1.3.6.1.4.1.2636.3.6.2.1.2.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.2636.3.6.2.1.2.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|2|2 +1.3.6.1.4.1.2636.3.6.2.1.3.83.1.5.116.104.101.105.114|4|their +1.3.6.1.4.1.2636.3.6.2.1.3.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|4x|61637465642062757420666f7277617264206163746564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2636.3.6.2.1.3.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|4x|6f78656e204a61646564206f78656e204a6164656420666f7277617264206b65707420717561696e746c79 +1.3.6.1.4.1.2636.3.6.2.1.4.83.1.5.116.104.101.105.114|70|12317383665498203792 +1.3.6.1.4.1.2636.3.6.2.1.4.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|70|18298564239260252878 +1.3.6.1.4.1.2636.3.6.2.1.4.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|70|14296161882202174757 +1.3.6.1.4.1.2636.3.6.2.1.5.83.1.5.116.104.101.105.114|70|11494977799318547626 +1.3.6.1.4.1.2636.3.6.2.1.5.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|70|3147422798697337841 +1.3.6.1.4.1.2636.3.6.2.1.5.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|70|9179463037551089633 +1.3.6.1.4.1.2636.3.6.2.1.6.83.1.5.116.104.101.105.114|4|driving +1.3.6.1.4.1.2636.3.6.2.1.6.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|4x|666f72776172642064726976696e67 +1.3.6.1.4.1.2636.3.6.2.1.6.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|4x|6f78656e206b657074207a6f6d62696573 +1.3.6.1.4.1.2636.3.16.1.1.1.1.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|2|116 +1.3.6.1.4.1.2636.3.16.1.1.1.1.780.1.5.97.99.116.101.100|2|403 +1.3.6.1.4.1.2636.3.16.1.1.1.1.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|2|796 +1.3.6.1.4.1.2636.3.16.1.1.1.2.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|2|1 +1.3.6.1.4.1.2636.3.16.1.1.1.2.780.1.5.97.99.116.101.100|2|1 +1.3.6.1.4.1.2636.3.16.1.1.1.2.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.2636.3.16.1.1.1.3.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|4x|717561696e746c79206f78656e2064726976696e67207a6f6d6269657320616374656420717561696e746c79 +1.3.6.1.4.1.2636.3.16.1.1.1.3.780.1.5.97.99.116.101.100|4|acted +1.3.6.1.4.1.2636.3.16.1.1.1.3.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|4x|6163746564207a6f6d62696573204a6164656420666f727761726420627574204a61646564 +1.3.6.1.4.1.2636.3.16.1.1.1.4.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|70|6160475318969358761 +1.3.6.1.4.1.2636.3.16.1.1.1.4.780.1.5.97.99.116.101.100|70|15152137479357665383 +1.3.6.1.4.1.2636.3.16.1.1.1.4.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|70|8362446845569884768 +1.3.6.1.4.1.2636.3.16.1.1.1.5.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|70|5039501432693393801 +1.3.6.1.4.1.2636.3.16.1.1.1.5.780.1.5.97.99.116.101.100|70|4992162073054637767 +1.3.6.1.4.1.2636.3.16.1.1.1.5.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|70|4746642765674161328 +1.3.6.1.4.1.2636.3.16.1.1.1.6.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|4x|64726976696e6720717561696e746c79206f78656e204a616465642062757420746865697220627574 +1.3.6.1.4.1.2636.3.16.1.1.1.6.780.1.5.97.99.116.101.100|4x|717561696e746c79204a61646564206275742061637465642061637465642064726976696e67204a61646564 +1.3.6.1.4.1.2636.3.16.1.1.1.6.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|4x|62757420717561696e746c7920627574206f78656e20666f7277617264 +1.3.6.1.4.1.2636.3.89.1.1.3.1.1.1|4|Mycroft Holmes +1.3.6.1.4.1.2636.3.89.1.1.3.1.1.2|4|Jim Moriarty +1.3.6.1.4.1.2636.3.89.1.1.3.1.2.1|4|brother +1.3.6.1.4.1.2636.3.89.1.1.3.1.2.2|4|enemy +1.3.6.1.4.1.2636.3.89.1.1.3.1.3.1|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.3.2|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.4.1|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.4.2|65|2048000 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.21.165.122.212 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.105.107.123.14.187.39 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.106.82.171.151.194.140.17.11 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.181.44.102.54.128.164.245.225 +1.3.6.1.6.3.1.1.6.1.0|2|14 +1.3.6.1.6.3.1.1.6.1.0|2|172 +1.3.6.1.6.3.10.2.1.1.0|4x|6b657074206f78656e +1.3.6.1.6.3.10.2.1.1.0|4x|62757420717561696e746c79 +1.3.6.1.6.3.10.2.1.2.0|2|70 +1.3.6.1.6.3.10.2.1.2.0|2|406 +1.3.6.1.6.3.10.2.1.3.0|2|261 +1.3.6.1.6.3.10.2.1.3.0|2|492 +1.3.6.1.6.3.10.2.1.4.0|2|505 +1.3.6.1.6.3.10.2.1.4.0|2|565 diff --git a/test/new-e2e/ndm/snmp/compose/data/juniper-srx.snmprec b/test/new-e2e/ndm/snmp/compose/data/juniper-srx.snmprec new file mode 100644 index 00000000000000..ed25a1fc82c4de --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/juniper-srx.snmprec @@ -0,0 +1,89 @@ +1.3.6.1.2.1.1.1.0|4|Juniper Networks, Inc. srx3400 internet router, kernel JUNOS 10.4R3.4 #0: 2011-03-19 22:06:23 UTC +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.2636.1.1.1.2.35 +1.3.6.1.2.1.15.3.1.1.244.12.239.177|64x|47365042 +1.3.6.1.2.1.15.3.1.2.244.12.239.177|2|6 +1.3.6.1.2.1.15.3.1.3.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.4.244.12.239.177|2|21 +1.3.6.1.2.1.15.3.1.5.244.12.239.177|64x|56a51b1e +1.3.6.1.2.1.15.3.1.6.244.12.239.177|2|31 +1.3.6.1.2.1.15.3.1.7.244.12.239.177|64x|f40cefb1 +1.3.6.1.2.1.15.3.1.8.244.12.239.177|2|7 +1.3.6.1.2.1.15.3.1.9.244.12.239.177|2|26 +1.3.6.1.2.1.15.3.1.10.244.12.239.177|65|2016631572 +1.3.6.1.2.1.15.3.1.11.244.12.239.177|65|2128197531 +1.3.6.1.2.1.15.3.1.12.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.13.244.12.239.177|65|3947895592 +1.3.6.1.2.1.15.3.1.15.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.16.244.12.239.177|66|3947895592 +1.3.6.1.2.1.15.3.1.17.244.12.239.177|2|378 +1.3.6.1.2.1.15.3.1.18.244.12.239.177|2|124 +1.3.6.1.2.1.15.3.1.19.244.12.239.177|2|25342 +1.3.6.1.2.1.15.3.1.20.244.12.239.177|2|9203 +1.3.6.1.2.1.15.3.1.21.244.12.239.177|2|235634 +1.3.6.1.2.1.15.3.1.22.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.23.244.12.239.177|2|4 +1.3.6.1.2.1.15.3.1.24.244.12.239.177|66|3947895592 +1.3.6.1.2.1.31.1.1.1.1.83|4x|717561696e746c792064726976696e67206f78656e207468656972207a6f6d62696573206f78656e206163746564206163746564 +1.3.6.1.2.1.31.1.1.1.1.780|4x|62757420666f7277617264206b657074206275742074686569722064726976696e67206f78656e20717561696e746c79206163746564 +1.3.6.1.2.1.31.1.1.1.1.907|4x|6b65707420627574 +1.3.6.1.4.1.2636.3.1.2.0|4|SRX 3400 Router +1.3.6.1.4.1.2636.3.1.3.0|4|dXPEdPBE5yKtjW9xx5 +1.3.6.1.4.1.2636.3.1.4.0|4|version-1.2 +1.3.6.1.4.1.2636.3.6.2.1.1.83.1.5.116.104.101.105.114|2|83 +1.3.6.1.4.1.2636.3.6.2.1.1.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|2|780 +1.3.6.1.4.1.2636.3.6.2.1.1.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|2|907 +1.3.6.1.4.1.2636.3.6.2.1.2.83.1.5.116.104.101.105.114|2|1 +1.3.6.1.4.1.2636.3.6.2.1.2.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.2636.3.6.2.1.2.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|2|2 +1.3.6.1.4.1.2636.3.6.2.1.3.83.1.5.116.104.101.105.114|4|their +1.3.6.1.4.1.2636.3.6.2.1.3.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|4x|61637465642062757420666f7277617264206163746564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2636.3.6.2.1.3.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|4x|6f78656e204a61646564206f78656e204a6164656420666f7277617264206b65707420717561696e746c79 +1.3.6.1.4.1.2636.3.6.2.1.4.83.1.5.116.104.101.105.114|70|12317383665498203792 +1.3.6.1.4.1.2636.3.6.2.1.4.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|70|18298564239260252878 +1.3.6.1.4.1.2636.3.6.2.1.4.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|70|14296161882202174757 +1.3.6.1.4.1.2636.3.6.2.1.5.83.1.5.116.104.101.105.114|70|11494977799318547626 +1.3.6.1.4.1.2636.3.6.2.1.5.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|70|3147422798697337841 +1.3.6.1.4.1.2636.3.6.2.1.5.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|70|9179463037551089633 +1.3.6.1.4.1.2636.3.6.2.1.6.83.1.5.116.104.101.105.114|4|driving +1.3.6.1.4.1.2636.3.6.2.1.6.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|4x|666f72776172642064726976696e67 +1.3.6.1.4.1.2636.3.6.2.1.6.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|4x|6f78656e206b657074207a6f6d62696573 +1.3.6.1.4.1.2636.3.16.1.1.1.1.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|2|116 +1.3.6.1.4.1.2636.3.16.1.1.1.1.780.1.5.97.99.116.101.100|2|403 +1.3.6.1.4.1.2636.3.16.1.1.1.1.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|2|796 +1.3.6.1.4.1.2636.3.16.1.1.1.2.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|2|1 +1.3.6.1.4.1.2636.3.16.1.1.1.2.780.1.5.97.99.116.101.100|2|1 +1.3.6.1.4.1.2636.3.16.1.1.1.2.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.2636.3.16.1.1.1.3.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|4x|717561696e746c79206f78656e2064726976696e67207a6f6d6269657320616374656420717561696e746c79 +1.3.6.1.4.1.2636.3.16.1.1.1.3.780.1.5.97.99.116.101.100|4|acted +1.3.6.1.4.1.2636.3.16.1.1.1.3.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|4x|6163746564207a6f6d62696573204a6164656420666f727761726420627574204a61646564 +1.3.6.1.4.1.2636.3.16.1.1.1.4.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|70|6160475318969358761 +1.3.6.1.4.1.2636.3.16.1.1.1.4.780.1.5.97.99.116.101.100|70|15152137479357665383 +1.3.6.1.4.1.2636.3.16.1.1.1.4.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|70|8362446845569884768 +1.3.6.1.4.1.2636.3.16.1.1.1.5.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|70|5039501432693393801 +1.3.6.1.4.1.2636.3.16.1.1.1.5.780.1.5.97.99.116.101.100|70|4992162073054637767 +1.3.6.1.4.1.2636.3.16.1.1.1.5.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|70|4746642765674161328 +1.3.6.1.4.1.2636.3.16.1.1.1.6.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|4x|64726976696e6720717561696e746c79206f78656e204a616465642062757420746865697220627574 +1.3.6.1.4.1.2636.3.16.1.1.1.6.780.1.5.97.99.116.101.100|4x|717561696e746c79204a61646564206275742061637465642061637465642064726976696e67204a61646564 +1.3.6.1.4.1.2636.3.16.1.1.1.6.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|4x|62757420717561696e746c7920627574206f78656e20666f7277617264 +1.3.6.1.4.1.2636.3.89.1.1.3.1.1.1|4|Mycroft Holmes +1.3.6.1.4.1.2636.3.89.1.1.3.1.1.2|4|Jim Moriarty +1.3.6.1.4.1.2636.3.89.1.1.3.1.2.1|4|brother +1.3.6.1.4.1.2636.3.89.1.1.3.1.2.2|4|enemy +1.3.6.1.4.1.2636.3.89.1.1.3.1.3.1|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.3.2|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.4.1|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.4.2|65|2048000 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.21.165.122.212 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.105.107.123.14.187.39 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.106.82.171.151.194.140.17.11 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.181.44.102.54.128.164.245.225 +1.3.6.1.6.3.1.1.6.1.0|2|14 +1.3.6.1.6.3.1.1.6.1.0|2|172 +1.3.6.1.6.3.10.2.1.1.0|4x|6b657074206f78656e +1.3.6.1.6.3.10.2.1.1.0|4x|62757420717561696e746c79 +1.3.6.1.6.3.10.2.1.2.0|2|70 +1.3.6.1.6.3.10.2.1.2.0|2|406 +1.3.6.1.6.3.10.2.1.3.0|2|261 +1.3.6.1.6.3.10.2.1.3.0|2|492 +1.3.6.1.6.3.10.2.1.4.0|2|505 +1.3.6.1.6.3.10.2.1.4.0|2|565 diff --git a/test/new-e2e/ndm/snmp/compose/data/meraki-cloud-controller.snmprec b/test/new-e2e/ndm/snmp/compose/data/meraki-cloud-controller.snmprec new file mode 100644 index 00000000000000..7e30e577bcc1be --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/meraki-cloud-controller.snmprec @@ -0,0 +1,96 @@ +1.3.6.1.2.1.1.1.0|4|Cisco Meraki Cloud Controller +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.29671.1 +1.3.6.1.2.1.1.3.0|67|3046294100 +1.3.6.1.2.1.1.4.0|4|support@meraki.com +1.3.6.1.2.1.1.5.0|4|dashboard.meraki.com +1.3.6.1.2.1.1.6.0|4|123 Fake Blvd, San Francisco, CA 94158, USA +1.3.6.1.2.1.2.2.1.1.11|2|11 +1.3.6.1.2.1.2.2.1.2.11|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.3.11|2|29 +1.3.6.1.2.1.2.2.1.4.11|2|10 +1.3.6.1.2.1.2.2.1.5.11|66|842689539 +1.3.6.1.2.1.2.2.1.6.11|4x|00 +1.3.6.1.2.1.2.2.1.7.11|2|2 +1.3.6.1.2.1.2.2.1.8.11|2|7 +1.3.6.1.2.1.2.2.1.9.11|67|4043941980 +1.3.6.1.2.1.2.2.1.10.11|65|2268799121 +1.3.6.1.2.1.2.2.1.11.11|65|1358081555 +1.3.6.1.2.1.2.2.1.12.11|65|2804916297 +1.3.6.1.2.1.2.2.1.13.11|65|1953269825 +1.3.6.1.2.1.2.2.1.14.11|65|3659465164 +1.3.6.1.2.1.2.2.1.15.11|65|3028473442 +1.3.6.1.2.1.2.2.1.16.11|65|2204618213 +1.3.6.1.2.1.2.2.1.17.11|65|3659357157 +1.3.6.1.2.1.2.2.1.18.11|65|1946069301 +1.3.6.1.2.1.2.2.1.19.11|65|1976763204 +1.3.6.1.2.1.2.2.1.20.11|65|1287028500 +1.3.6.1.2.1.2.2.1.21.11|66|3693484051 +1.3.6.1.2.1.31.1.1.1.1.11|4x|65746830 +1.3.6.1.2.1.31.1.1.1.2.11|65|3971642957 +1.3.6.1.2.1.31.1.1.1.3.11|65|3271801795 +1.3.6.1.2.1.31.1.1.1.4.11|65|3342364789 +1.3.6.1.2.1.31.1.1.1.5.11|65|3388467146 +1.3.6.1.2.1.31.1.1.1.6.11|70|14670660891743438939 +1.3.6.1.2.1.31.1.1.1.7.11|70|10886984631120028416 +1.3.6.1.2.1.31.1.1.1.8.11|70|17994136813414766052 +1.3.6.1.2.1.31.1.1.1.9.11|70|10439183159610289289 +1.3.6.1.2.1.31.1.1.1.10.11|70|2583386891169315520 +1.3.6.1.2.1.31.1.1.1.11.11|70|8885889412380302445 +1.3.6.1.2.1.31.1.1.1.12.11|70|10885548970511406028 +1.3.6.1.2.1.31.1.1.1.13.11|70|10028224865574503284 +1.3.6.1.2.1.31.1.1.1.15.11|66|31298329 +1.3.6.1.4.1.29671.1.1.1.0|4|user@example.com - Live Demo +1.3.6.1.4.1.29671.1.1.2.1.1.67.118.68.105.78.98.109.99|4|CvDiNbmc +1.3.6.1.4.1.29671.1.1.2.1.1.71.99.115.86.89.99.109.99|4|GcsVYcmc +1.3.6.1.4.1.29671.1.1.2.1.1.81.122.70.83.101.98.109.99|4|QzFSebmc +1.3.6.1.4.1.29671.1.1.2.1.1.115.53.82.71.74.97.109.99|4|s5RGJamc +1.3.6.1.4.1.29671.1.1.2.1.1.121.119.82.55.83.97.109.99|4|ywR7Samc +1.3.6.1.4.1.29671.1.1.2.1.2.67.118.68.105.78.98.109.99|4|Live Demo - Firewall +1.3.6.1.4.1.29671.1.1.2.1.2.71.99.115.86.89.99.109.99|4|Live Demo - University Wireless +1.3.6.1.4.1.29671.1.1.2.1.2.81.122.70.83.101.98.109.99|4|Live Demo - Switches +1.3.6.1.4.1.29671.1.1.2.1.2.115.53.82.71.74.97.109.99|4|Live Demo - Branch Firewall +1.3.6.1.4.1.29671.1.1.2.1.2.121.119.82.55.83.97.109.99|4|Live Demo - Branch Wireless +1.3.6.1.4.1.29671.1.1.3.1.1.71.99.115.86.89.99.109.99.1|4|Live Demo - University Wireless +1.3.6.1.4.1.29671.1.1.3.1.1.71.99.115.86.89.99.109.99.2|4|Live Demo - University Wireless +1.3.6.1.4.1.29671.1.1.3.1.1.71.99.115.86.89.99.109.99.3|4|Live Demo - University Wireless +1.3.6.1.4.1.29671.1.1.3.1.1.71.99.115.86.89.99.109.99.4|4|Live Demo - University Wireless +1.3.6.1.4.1.29671.1.1.3.1.1.121.119.82.55.83.97.109.99.1|4|Live Demo - Branch Wireless +1.3.6.1.4.1.29671.1.1.3.1.1.121.119.82.55.83.97.109.99.2|4|Live Demo - Branch Wireless +1.3.6.1.4.1.29671.1.1.3.1.1.121.119.82.55.83.97.109.99.3|4|Live Demo - Branch Wireless +1.3.6.1.4.1.29671.1.1.3.1.1.121.119.82.55.83.97.109.99.4|4|Live Demo - Branch Wireless +1.3.6.1.4.1.29671.1.1.3.1.2.71.99.115.86.89.99.109.99.1|2|1 +1.3.6.1.4.1.29671.1.1.3.1.2.71.99.115.86.89.99.109.99.2|2|2 +1.3.6.1.4.1.29671.1.1.3.1.2.71.99.115.86.89.99.109.99.3|2|3 +1.3.6.1.4.1.29671.1.1.3.1.2.71.99.115.86.89.99.109.99.4|2|4 +1.3.6.1.4.1.29671.1.1.3.1.2.121.119.82.55.83.97.109.99.1|2|1 +1.3.6.1.4.1.29671.1.1.3.1.2.121.119.82.55.83.97.109.99.2|2|2 +1.3.6.1.4.1.29671.1.1.3.1.2.121.119.82.55.83.97.109.99.3|2|3 +1.3.6.1.4.1.29671.1.1.3.1.2.121.119.82.55.83.97.109.99.4|2|4 +1.3.6.1.4.1.29671.1.1.3.1.3.71.99.115.86.89.99.109.99.1|4|Private students +1.3.6.1.4.1.29671.1.1.3.1.3.71.99.115.86.89.99.109.99.2|4|Private faculty +1.3.6.1.4.1.29671.1.1.3.1.3.71.99.115.86.89.99.109.99.3|4|Public guest +1.3.6.1.4.1.29671.1.1.3.1.3.71.99.115.86.89.99.109.99.4|4|University IT +1.3.6.1.4.1.29671.1.1.3.1.3.121.119.82.55.83.97.109.99.1|4|Public guest +1.3.6.1.4.1.29671.1.1.3.1.3.121.119.82.55.83.97.109.99.2|4|Private employee +1.3.6.1.4.1.29671.1.1.3.1.3.121.119.82.55.83.97.109.99.3|4|VOIP +1.3.6.1.4.1.29671.1.1.3.1.3.121.119.82.55.83.97.109.99.4|4|Corporate IT +1.3.6.1.4.1.29671.1.1.4.1.1.2.2.0.102.245.127|4e|\x02\x02\x00f\xf5\x7f +1.3.6.1.4.1.29671.1.1.4.1.2.2.2.0.102.245.127|4|Gymnasium +1.3.6.1.4.1.29671.1.1.4.1.3.2.2.0.102.245.127|2|1 +1.3.6.1.4.1.29671.1.1.4.1.4.2.2.0.102.245.127|4e|\x07\xdb\x06\t\x14\x1b\x15\x00+\x00\x00 +1.3.6.1.4.1.29671.1.1.4.1.5.2.2.0.102.245.127|2|6 +1.3.6.1.4.1.29671.1.1.4.1.6.2.2.0.102.245.127|2|0 +1.3.6.1.4.1.29671.1.1.4.1.7.2.2.0.102.245.127|64e|b\xad\xd1\xd6 +1.3.6.1.4.1.29671.1.1.4.1.8.2.2.0.102.245.127|4|VRT-2207619937663 +1.3.6.1.4.1.29671.1.1.4.1.9.2.2.0.102.245.127|4|MR16-HW +1.3.6.1.4.1.29671.1.1.4.1.10.2.2.0.102.245.127|4|Meraki MR16 Cloud Managed AP +1.3.6.1.4.1.29671.1.1.4.1.11.2.2.0.102.245.127|4|L_NETWORK +1.3.6.1.4.1.29671.1.1.5.1.1.2.2.0.102.245.127|4e|\x02\x02\x00f\xf5\x00 +1.3.6.1.4.1.29671.1.1.5.1.2.2.2.0.102.245.127|65|4 +1.3.6.1.4.1.29671.1.1.5.1.3.2.2.0.102.245.127|4|wifi0 +1.3.6.1.4.1.29671.1.1.5.1.4.2.2.0.102.245.127|65|342858662 +1.3.6.1.4.1.29671.1.1.5.1.5.2.2.0.102.245.127|65|423658599 +1.3.6.1.4.1.29671.1.1.5.1.6.2.2.0.102.245.127|65|204966843 +1.3.6.1.4.1.29671.1.1.5.1.7.2.2.0.102.245.127|65|433234633 +1.3.6.1.4.1.29671.1.1.5.1.8.2.2.0.102.245.127|4|Model +1.3.6.1.4.1.29671.1.1.5.1.9.2.2.0.102.245.127|4|4332 diff --git a/test/new-e2e/ndm/snmp/compose/data/netapp.snmprec b/test/new-e2e/ndm/snmp/compose/data/netapp.snmprec new file mode 100644 index 00000000000000..10b128d052875e --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/netapp.snmprec @@ -0,0 +1,676 @@ +1.3.6.1.2.1.1.1.0|4|NetApp Release 9.3P7: Wed Jul 25 10:11:10 UTC 2018 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.789.2.5 +1.3.6.1.2.1.1.3.0|67|4294967295 +1.3.6.1.2.1.1.4.0|4|admin@example.company +1.3.6.1.2.1.1.5.0|4|example-datacenter.company +1.3.6.1.2.1.1.6.0|4|France +1.3.6.1.2.1.1.7.0|2|72 +1.3.6.1.4.1.789.1.1.1.0|2|2 +1.3.6.1.4.1.789.1.1.2.0|4|NetApp Release 9.3P7: Wed Jul 25 10:11:10 UTC 2018 +1.3.6.1.4.1.789.1.1.3.0|4| +1.3.6.1.4.1.789.1.1.4.0|2|1 +1.3.6.1.4.1.789.1.1.5.0|4|example-model +1.3.6.1.4.1.789.1.1.6.0|4|11.1 +1.3.6.1.4.1.789.1.1.7.0|4|http://127.0.0.1/cem +1.3.6.1.4.1.789.1.1.8.0|4|http://127.0.0.1/servlets/netapp.servlets.admin.XMLrequest_filer +1.3.6.1.4.1.789.1.1.9.0|4|1-23-456789 +1.3.6.1.4.1.789.1.1.10.0|4|unknown +1.3.6.1.4.1.789.1.1.11.0|2|1 +1.3.6.1.4.1.789.1.1.12.0|4|Trap variable currrently unused. +1.3.6.1.4.1.789.1.1.13.0|4| +1.3.6.1.4.1.789.1.2.1.1.0|67|1403140598 +1.3.6.1.4.1.789.1.2.1.2.0|67|1014385684 +1.3.6.1.4.1.789.1.2.1.3.0|2|2 +1.3.6.1.4.1.789.1.2.1.4.0|67|388754933 +1.3.6.1.4.1.789.1.2.1.5.0|2|99 +1.3.6.1.4.1.789.1.2.1.6.0|2|6 +1.3.6.1.4.1.789.1.2.1.7.0|65|93010879 +1.3.6.1.4.1.789.1.2.1.8.0|65|55622093 +1.3.6.1.4.1.789.1.2.1.9.0|65|3104312523 +1.3.6.1.4.1.789.1.2.1.10.0|65|898238502 +1.3.6.1.4.1.789.1.2.1.11.0|2|0 +1.3.6.1.4.1.789.1.2.1.12.0|2|0 +1.3.6.1.4.1.789.1.2.1.13.0|65|487465628 +1.3.6.1.4.1.789.1.2.1.14.1.1.105.101.102.105.108.101.114.48.51.45.48.49|4|iefiler03-01 +1.3.6.1.4.1.789.1.2.1.14.1.1.105.101.102.105.108.101.114.48.51.45.48.50|4|iefiler03-02 +1.3.6.1.4.1.789.1.2.1.14.1.2.105.101.102.105.108.101.114.48.51.45.48.49|70|5698107992 +1.3.6.1.4.1.789.1.2.1.14.1.2.105.101.102.105.108.101.114.48.51.45.48.50|70|5698124708 +1.3.6.1.4.1.789.1.2.1.14.1.3.105.101.102.105.108.101.114.48.51.45.48.49|70|1014385688 +1.3.6.1.4.1.789.1.2.1.14.1.3.105.101.102.105.108.101.114.48.51.45.48.50|70|969565517 +1.3.6.1.4.1.789.1.2.1.14.1.4.105.101.102.105.108.101.114.48.51.45.48.49|2|2 +1.3.6.1.4.1.789.1.2.1.14.1.4.105.101.102.105.108.101.114.48.51.45.48.50|2|5 +1.3.6.1.4.1.789.1.2.1.14.1.5.105.101.102.105.108.101.114.48.51.45.48.49|70|4683722343 +1.3.6.1.4.1.789.1.2.1.14.1.5.105.101.102.105.108.101.114.48.51.45.48.50|70|4728559230 +1.3.6.1.4.1.789.1.2.1.14.1.6.105.101.102.105.108.101.114.48.51.45.48.49|2|98 +1.3.6.1.4.1.789.1.2.1.14.1.6.105.101.102.105.108.101.114.48.51.45.48.50|2|95 +1.3.6.1.4.1.789.1.2.1.14.1.7.105.101.102.105.108.101.114.48.51.45.48.49|2|6 +1.3.6.1.4.1.789.1.2.1.14.1.7.105.101.102.105.108.101.114.48.51.45.48.50|2|6 +1.3.6.1.4.1.789.1.2.1.14.1.8.105.101.102.105.108.101.114.48.51.45.48.49|70|93032618 +1.3.6.1.4.1.789.1.2.1.14.1.8.105.101.102.105.108.101.114.48.51.45.48.50|70|2112931330 +1.3.6.1.4.1.789.1.2.1.14.1.9.105.101.102.105.108.101.114.48.51.45.48.49|70|55644487 +1.3.6.1.4.1.789.1.2.1.14.1.9.105.101.102.105.108.101.114.48.51.45.48.50|70|1021079057 +1.3.6.1.4.1.789.1.2.1.14.1.10.105.101.102.105.108.101.114.48.51.45.48.49|70|3104313087 +1.3.6.1.4.1.789.1.2.1.14.1.10.105.101.102.105.108.101.114.48.51.45.48.50|70|3640609337 +1.3.6.1.4.1.789.1.2.1.14.1.11.105.101.102.105.108.101.114.48.51.45.48.49|70|898257319 +1.3.6.1.4.1.789.1.2.1.14.1.11.105.101.102.105.108.101.114.48.51.45.48.50|70|3708864711 +1.3.6.1.4.1.789.1.2.1.14.1.12.105.101.102.105.108.101.114.48.51.45.48.49|2|0 +1.3.6.1.4.1.789.1.2.1.14.1.12.105.101.102.105.108.101.114.48.51.45.48.50|2|0 +1.3.6.1.4.1.789.1.2.1.14.1.13.105.101.102.105.108.101.114.48.51.45.48.49|2|1 +1.3.6.1.4.1.789.1.2.1.14.1.13.105.101.102.105.108.101.114.48.51.45.48.50|2|1 +1.3.6.1.4.1.789.1.2.1.14.1.14.105.101.102.105.108.101.114.48.51.45.48.49|70|13372368618 +1.3.6.1.4.1.789.1.2.1.14.1.14.105.101.102.105.108.101.114.48.51.45.48.50|70|13957447734 +1.3.6.1.4.1.789.1.2.2.23.0|2|60 +1.3.6.1.4.1.789.1.2.3.8.0|2|4 +1.3.6.1.4.1.789.1.2.6.1.0|67|159088104 +1.3.6.1.4.1.789.1.2.6.2.0|65|8502459 +1.3.6.1.4.1.789.1.2.6.3.0|65|2174485 +1.3.6.1.4.1.789.1.2.6.4.0|65|0 +1.3.6.1.4.1.789.1.2.6.5.0|65|205975 +1.3.6.1.4.1.789.1.2.6.6.0|65|13773 +1.3.6.1.4.1.789.1.2.6.7.0|65|10581 +1.3.6.1.4.1.789.1.2.6.8.0|65|16294034 +1.3.6.1.4.1.789.1.2.6.9.0|65|0 +1.3.6.1.4.1.789.1.2.6.10.0|65|5350031 +1.3.6.1.4.1.789.1.2.6.12.0|65|0 +1.3.6.1.4.1.789.1.2.6.13.0|65|0 +1.3.6.1.4.1.789.1.2.6.14.0|65|0 +1.3.6.1.4.1.789.1.2.6.15.0|65|0 +1.3.6.1.4.1.789.1.2.6.16.1.2.105.101.102.105.108.101.114.48.51.45.48.49|70|159088112 +1.3.6.1.4.1.789.1.2.6.16.1.2.105.101.102.105.108.101.114.48.51.45.48.50|70|116996856 +1.3.6.1.4.1.789.1.2.6.16.1.3.105.101.102.105.108.101.114.48.51.45.48.49|70|8502460 +1.3.6.1.4.1.789.1.2.6.16.1.3.105.101.102.105.108.101.114.48.51.45.48.50|70|6840201 +1.3.6.1.4.1.789.1.2.6.16.1.4.105.101.102.105.108.101.114.48.51.45.48.49|70|2174485 +1.3.6.1.4.1.789.1.2.6.16.1.4.105.101.102.105.108.101.114.48.51.45.48.50|70|769275 +1.3.6.1.4.1.789.1.2.6.16.1.5.105.101.102.105.108.101.114.48.51.45.48.49|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.5.105.101.102.105.108.101.114.48.51.45.48.50|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.6.105.101.102.105.108.101.114.48.51.45.48.49|70|205975 +1.3.6.1.4.1.789.1.2.6.16.1.6.105.101.102.105.108.101.114.48.51.45.48.50|70|847063 +1.3.6.1.4.1.789.1.2.6.16.1.7.105.101.102.105.108.101.114.48.51.45.48.49|70|13773 +1.3.6.1.4.1.789.1.2.6.16.1.7.105.101.102.105.108.101.114.48.51.45.48.50|70|4487 +1.3.6.1.4.1.789.1.2.6.16.1.8.105.101.102.105.108.101.114.48.51.45.48.49|70|10581 +1.3.6.1.4.1.789.1.2.6.16.1.8.105.101.102.105.108.101.114.48.51.45.48.50|70|57843 +1.3.6.1.4.1.789.1.2.6.16.1.9.105.101.102.105.108.101.114.48.51.45.48.49|70|16294035 +1.3.6.1.4.1.789.1.2.6.16.1.9.105.101.102.105.108.101.114.48.51.45.48.50|70|12008505 +1.3.6.1.4.1.789.1.2.6.16.1.10.105.101.102.105.108.101.114.48.51.45.48.49|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.10.105.101.102.105.108.101.114.48.51.45.48.50|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.11.105.101.102.105.108.101.114.48.51.45.48.49|70|5350031 +1.3.6.1.4.1.789.1.2.6.16.1.11.105.101.102.105.108.101.114.48.51.45.48.50|70|3458213 +1.3.6.1.4.1.789.1.2.6.16.1.12.105.101.102.105.108.101.114.48.51.45.48.49|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.12.105.101.102.105.108.101.114.48.51.45.48.50|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.13.105.101.102.105.108.101.114.48.51.45.48.49|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.13.105.101.102.105.108.101.114.48.51.45.48.50|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.14.105.101.102.105.108.101.114.48.51.45.48.49|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.14.105.101.102.105.108.101.114.48.51.45.48.50|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.15.105.101.102.105.108.101.114.48.51.45.48.49|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.15.105.101.102.105.108.101.114.48.51.45.48.50|70|0 +1.3.6.1.4.1.789.1.2.7.1.0|2|1 +1.3.6.1.4.1.789.1.2.7.2.0|4|The last AutoSupport message was sent successfully. +1.3.6.1.4.1.789.1.2.7.3.0|65|1242 +1.3.6.1.4.1.789.1.2.7.4.0|65|2 +1.3.6.1.4.1.789.1.4.4.1.1.1036|2|1036 +1.3.6.1.4.1.789.1.4.4.1.1.1038|2|1038 +1.3.6.1.4.1.789.1.4.4.1.1.1040|2|1040 +1.3.6.1.4.1.789.1.4.4.1.1.1042|2|1042 +1.3.6.1.4.1.789.1.4.4.1.1.1044|2|1044 +1.3.6.1.4.1.789.1.4.4.1.1.1046|2|1046 +1.3.6.1.4.1.789.1.4.4.1.1.1048|2|1048 +1.3.6.1.4.1.789.1.4.4.1.1.1050|2|1050 +1.3.6.1.4.1.789.1.4.4.1.1.1052|2|1052 +1.3.6.1.4.1.789.1.4.4.1.1.1054|2|1054 +1.3.6.1.4.1.789.1.4.4.1.1.1056|2|1056 +1.3.6.1.4.1.789.1.4.4.1.1.1058|2|1058 +1.3.6.1.4.1.789.1.4.4.1.1.1060|2|1060 +1.3.6.1.4.1.789.1.4.4.1.1.1062|2|1062 +1.3.6.1.4.1.789.1.4.4.1.1.1064|2|1064 +1.3.6.1.4.1.789.1.4.4.1.1.1066|2|1066 +1.3.6.1.4.1.789.1.4.4.1.1.1068|2|1068 +1.3.6.1.4.1.789.1.4.4.1.1.1070|2|1070 +1.3.6.1.4.1.789.1.4.4.1.1.1072|2|1072 +1.3.6.1.4.1.789.1.4.4.1.1.1074|2|1074 +1.3.6.1.4.1.789.1.4.4.1.1.1076|2|1076 +1.3.6.1.4.1.789.1.4.4.1.1.1078|2|1078 +1.3.6.1.4.1.789.1.4.4.1.1.1080|2|1080 +1.3.6.1.4.1.789.1.4.4.1.1.1082|2|1082 +1.3.6.1.4.1.789.1.4.4.1.1.1084|2|1084 +1.3.6.1.4.1.789.1.4.4.1.1.1086|2|1086 +1.3.6.1.4.1.789.1.4.4.1.1.1088|2|1088 +1.3.6.1.4.1.789.1.4.4.1.1.1092|2|1092 +1.3.6.1.4.1.789.1.4.4.1.1.1094|2|1094 +1.3.6.1.4.1.789.1.4.4.1.1.1096|2|1096 +1.3.6.1.4.1.789.1.4.4.1.1.1098|2|1098 +1.3.6.1.4.1.789.1.4.4.1.1.1100|2|1100 +1.3.6.1.4.1.789.1.4.4.1.1.1102|2|1102 +1.3.6.1.4.1.789.1.4.4.1.1.1104|2|1104 +1.3.6.1.4.1.789.1.4.4.1.1.1108|2|1108 +1.3.6.1.4.1.789.1.4.4.1.1.1114|2|1114 +1.3.6.1.4.1.789.1.4.4.1.1.1116|2|1116 +1.3.6.1.4.1.789.1.4.4.1.1.1118|2|1118 +1.3.6.1.4.1.789.1.4.4.1.2.1036|4|vol1 +1.3.6.1.4.1.789.1.4.4.1.2.1038|4|vol2 +1.3.6.1.4.1.789.1.4.4.1.2.1040|4|vol3 +1.3.6.1.4.1.789.1.4.4.1.2.1042|4|vol4 +1.3.6.1.4.1.789.1.4.4.1.2.1044|4|vol5 +1.3.6.1.4.1.789.1.4.4.1.2.1046|4|vol6 +1.3.6.1.4.1.789.1.4.4.1.2.1048|4|vol7 +1.3.6.1.4.1.789.1.4.4.1.2.1050|4|vol8 +1.3.6.1.4.1.789.1.4.4.1.2.1052|4|vol9 +1.3.6.1.4.1.789.1.4.4.1.2.1054|4|vol10 +1.3.6.1.4.1.789.1.4.4.1.2.1056|4|vol11 +1.3.6.1.4.1.789.1.4.4.1.2.1058|4|vol12 +1.3.6.1.4.1.789.1.4.4.1.2.1060|4|vol13 +1.3.6.1.4.1.789.1.4.4.1.2.1062|4|vol14 +1.3.6.1.4.1.789.1.4.4.1.2.1064|4|vol15 +1.3.6.1.4.1.789.1.4.4.1.2.1066|4|vol16 +1.3.6.1.4.1.789.1.4.4.1.2.1068|4|vol17 +1.3.6.1.4.1.789.1.4.4.1.2.1070|4|vol18 +1.3.6.1.4.1.789.1.4.4.1.2.1072|4|vol19 +1.3.6.1.4.1.789.1.4.4.1.2.1074|4|vol20 +1.3.6.1.4.1.789.1.4.4.1.2.1076|4|vol21 +1.3.6.1.4.1.789.1.4.4.1.2.1078|4|vol22 +1.3.6.1.4.1.789.1.4.4.1.2.1080|4|vol23 +1.3.6.1.4.1.789.1.4.4.1.2.1082|4|vol24 +1.3.6.1.4.1.789.1.4.4.1.2.1084|4|vol25 +1.3.6.1.4.1.789.1.4.4.1.2.1086|4|vol26 +1.3.6.1.4.1.789.1.4.4.1.2.1088|4|vol27 +1.3.6.1.4.1.789.1.4.4.1.2.1092|4|vol28 +1.3.6.1.4.1.789.1.4.4.1.2.1094|4|vol29 +1.3.6.1.4.1.789.1.4.4.1.2.1096|4|vol30 +1.3.6.1.4.1.789.1.4.4.1.2.1098|4|vol31 +1.3.6.1.4.1.789.1.4.4.1.2.1100|4|vol32 +1.3.6.1.4.1.789.1.4.4.1.2.1102|4|vol33 +1.3.6.1.4.1.789.1.4.4.1.2.1104|4|vol34 +1.3.6.1.4.1.789.1.4.4.1.2.1108|4|vol35 +1.3.6.1.4.1.789.1.4.4.1.2.1114|4|vol36 +1.3.6.1.4.1.789.1.4.4.1.2.1116|4|vol37 +1.3.6.1.4.1.789.1.4.4.1.2.1118|4|vol38 +1.3.6.1.4.1.789.1.4.4.1.3.1036|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1038|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1040|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1042|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1044|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1046|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1048|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1050|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1052|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1054|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1056|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1058|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1060|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1062|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1064|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1066|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1068|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1070|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1072|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1074|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1076|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1078|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1080|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1082|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1084|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1086|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1088|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1092|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1094|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1096|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1098|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1100|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1102|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1104|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1108|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1114|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1116|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1118|2|1 +1.3.6.1.4.1.789.1.4.4.1.4.1036|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1038|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1040|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1042|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1044|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1046|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1048|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1050|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1052|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1054|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1056|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1058|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1060|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1062|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1064|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1066|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1068|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1070|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1072|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1074|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1076|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1078|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1080|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1082|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1084|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1086|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1088|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1092|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1094|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1096|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1098|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1100|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1102|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1104|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1108|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1114|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1116|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1118|2|0 +1.3.6.1.4.1.789.1.4.4.1.5.1036|4|vserver1 +1.3.6.1.4.1.789.1.4.4.1.5.1038|4|vserver2 +1.3.6.1.4.1.789.1.4.4.1.5.1040|4|vserver3 +1.3.6.1.4.1.789.1.4.4.1.5.1042|4|vserver4 +1.3.6.1.4.1.789.1.4.4.1.5.1044|4|vserver5 +1.3.6.1.4.1.789.1.4.4.1.5.1046|4|vserver6 +1.3.6.1.4.1.789.1.4.4.1.5.1048|4|vserver7 +1.3.6.1.4.1.789.1.4.4.1.5.1050|4|vserver8 +1.3.6.1.4.1.789.1.4.4.1.5.1052|4|vserver9 +1.3.6.1.4.1.789.1.4.4.1.5.1054|4|vserver10 +1.3.6.1.4.1.789.1.4.4.1.5.1056|4|vserver11 +1.3.6.1.4.1.789.1.4.4.1.5.1058|4|vserver12 +1.3.6.1.4.1.789.1.4.4.1.5.1060|4|vserver13 +1.3.6.1.4.1.789.1.4.4.1.5.1062|4|vserver14 +1.3.6.1.4.1.789.1.4.4.1.5.1064|4|vserver15 +1.3.6.1.4.1.789.1.4.4.1.5.1066|4|vserver16 +1.3.6.1.4.1.789.1.4.4.1.5.1068|4|vserver17 +1.3.6.1.4.1.789.1.4.4.1.5.1070|4|vserver18 +1.3.6.1.4.1.789.1.4.4.1.5.1072|4|vserver19 +1.3.6.1.4.1.789.1.4.4.1.5.1074|4|vserver20 +1.3.6.1.4.1.789.1.4.4.1.5.1076|4|vserver21 +1.3.6.1.4.1.789.1.4.4.1.5.1078|4|vserver22 +1.3.6.1.4.1.789.1.4.4.1.5.1080|4|vserver23 +1.3.6.1.4.1.789.1.4.4.1.5.1082|4|vserver24 +1.3.6.1.4.1.789.1.4.4.1.5.1084|4|vserver25 +1.3.6.1.4.1.789.1.4.4.1.5.1086|4|vserver26 +1.3.6.1.4.1.789.1.4.4.1.5.1088|4|vserver27 +1.3.6.1.4.1.789.1.4.4.1.5.1092|4|vserver28 +1.3.6.1.4.1.789.1.4.4.1.5.1094|4|vserver29 +1.3.6.1.4.1.789.1.4.4.1.5.1096|4|vserver30 +1.3.6.1.4.1.789.1.4.4.1.5.1098|4|vserver31 +1.3.6.1.4.1.789.1.4.4.1.5.1100|4|vserver32 +1.3.6.1.4.1.789.1.4.4.1.5.1102|4|vserver33 +1.3.6.1.4.1.789.1.4.4.1.5.1104|4|vserver34 +1.3.6.1.4.1.789.1.4.4.1.5.1108|4|vserver35 +1.3.6.1.4.1.789.1.4.4.1.5.1114|4|vserver36 +1.3.6.1.4.1.789.1.4.4.1.5.1116|4|vserver37 +1.3.6.1.4.1.789.1.4.4.1.5.1118|4|vserver38 +1.3.6.1.4.1.789.1.5.4.1.1.1022|2|1022 +1.3.6.1.4.1.789.1.5.4.1.1.1023|2|1023 +1.3.6.1.4.1.789.1.5.4.1.1.1024|2|1024 +1.3.6.1.4.1.789.1.5.4.1.1.1025|2|1025 +1.3.6.1.4.1.789.1.5.4.1.1.1026|2|1026 +1.3.6.1.4.1.789.1.5.4.1.1.1027|2|1027 +1.3.6.1.4.1.789.1.5.4.1.1.1028|2|1028 +1.3.6.1.4.1.789.1.5.4.1.1.1029|2|1029 +1.3.6.1.4.1.789.1.5.4.1.1.1032|2|1032 +1.3.6.1.4.1.789.1.5.4.1.1.1033|2|1033 +1.3.6.1.4.1.789.1.5.4.1.2.1022|4|/vol/dir1 +1.3.6.1.4.1.789.1.5.4.1.2.1023|4|/vol/dir2 +1.3.6.1.4.1.789.1.5.4.1.2.1024|4|/vol/dir3 +1.3.6.1.4.1.789.1.5.4.1.2.1025|4|/vol/dir4 +1.3.6.1.4.1.789.1.5.4.1.2.1026|4|/vol/dir5 +1.3.6.1.4.1.789.1.5.4.1.2.1027|4|/vol/dir6 +1.3.6.1.4.1.789.1.5.4.1.2.1028|4|/vol/dir7 +1.3.6.1.4.1.789.1.5.4.1.2.1029|4|/vol/dir8 +1.3.6.1.4.1.789.1.5.4.1.2.1032|4|/vol/dir9 +1.3.6.1.4.1.789.1.5.4.1.2.1033|4|/vol/dir10 +1.3.6.1.4.1.789.1.5.4.1.3.1022|2|386319076 +1.3.6.1.4.1.789.1.5.4.1.3.1023|2|20332580 +1.3.6.1.4.1.789.1.5.4.1.3.1024|2|347278676 +1.3.6.1.4.1.789.1.5.4.1.3.1025|2|18277824 +1.3.6.1.4.1.789.1.5.4.1.3.1026|2|386319076 +1.3.6.1.4.1.789.1.5.4.1.3.1027|2|20332580 +1.3.6.1.4.1.789.1.5.4.1.3.1028|2|347278676 +1.3.6.1.4.1.789.1.5.4.1.3.1029|2|18277824 +1.3.6.1.4.1.789.1.5.4.1.3.1032|2|-1183973408 +1.3.6.1.4.1.789.1.5.4.1.3.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.4.1022|2|367601688 +1.3.6.1.4.1.789.1.5.4.1.4.1023|2|0 +1.3.6.1.4.1.789.1.5.4.1.4.1024|2|32601124 +1.3.6.1.4.1.789.1.5.4.1.4.1025|2|5088704 +1.3.6.1.4.1.789.1.5.4.1.4.1026|2|367601684 +1.3.6.1.4.1.789.1.5.4.1.4.1027|2|0 +1.3.6.1.4.1.789.1.5.4.1.4.1028|2|28785076 +1.3.6.1.4.1.789.1.5.4.1.4.1029|2|4367672 +1.3.6.1.4.1.789.1.5.4.1.4.1032|2|-1624663680 +1.3.6.1.4.1.789.1.5.4.1.4.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.5.1022|2|18717388 +1.3.6.1.4.1.789.1.5.4.1.5.1023|2|20332580 +1.3.6.1.4.1.789.1.5.4.1.5.1024|2|314677464 +1.3.6.1.4.1.789.1.5.4.1.5.1025|2|13189112 +1.3.6.1.4.1.789.1.5.4.1.5.1026|2|18717392 +1.3.6.1.4.1.789.1.5.4.1.5.1027|2|20332580 +1.3.6.1.4.1.789.1.5.4.1.5.1028|2|318493432 +1.3.6.1.4.1.789.1.5.4.1.5.1029|2|13910152 +1.3.6.1.4.1.789.1.5.4.1.5.1032|2|440690328 +1.3.6.1.4.1.789.1.5.4.1.5.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.6.1022|2|95 +1.3.6.1.4.1.789.1.5.4.1.6.1023|2|0 +1.3.6.1.4.1.789.1.5.4.1.6.1024|2|13 +1.3.6.1.4.1.789.1.5.4.1.6.1025|2|28 +1.3.6.1.4.1.789.1.5.4.1.6.1026|2|95 +1.3.6.1.4.1.789.1.5.4.1.6.1027|2|0 +1.3.6.1.4.1.789.1.5.4.1.6.1028|2|12 +1.3.6.1.4.1.789.1.5.4.1.6.1029|2|24 +1.3.6.1.4.1.789.1.5.4.1.6.1032|2|13 +1.3.6.1.4.1.789.1.5.4.1.6.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.7.1022|2|96 +1.3.6.1.4.1.789.1.5.4.1.7.1023|2|0 +1.3.6.1.4.1.789.1.5.4.1.7.1024|2|59971 +1.3.6.1.4.1.789.1.5.4.1.7.1025|2|0 +1.3.6.1.4.1.789.1.5.4.1.7.1026|2|96 +1.3.6.1.4.1.789.1.5.4.1.7.1027|2|0 +1.3.6.1.4.1.789.1.5.4.1.7.1028|2|59931 +1.3.6.1.4.1.789.1.5.4.1.7.1029|2|0 +1.3.6.1.4.1.789.1.5.4.1.7.1032|2|96 +1.3.6.1.4.1.789.1.5.4.1.7.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.8.1022|2|31040 +1.3.6.1.4.1.789.1.5.4.1.8.1023|2|0 +1.3.6.1.4.1.789.1.5.4.1.8.1024|2|10792484 +1.3.6.1.4.1.789.1.5.4.1.8.1025|2|0 +1.3.6.1.4.1.789.1.5.4.1.8.1026|2|31040 +1.3.6.1.4.1.789.1.5.4.1.8.1027|2|0 +1.3.6.1.4.1.789.1.5.4.1.8.1028|2|10792523 +1.3.6.1.4.1.789.1.5.4.1.8.1029|2|0 +1.3.6.1.4.1.789.1.5.4.1.8.1032|2|31040 +1.3.6.1.4.1.789.1.5.4.1.8.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1022|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1023|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1024|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1025|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1026|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1027|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1028|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1029|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1032|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.10.1022|4|/dir1 +1.3.6.1.4.1.789.1.5.4.1.10.1023|4|/dir2 +1.3.6.1.4.1.789.1.5.4.1.10.1024|4|/dir3 +1.3.6.1.4.1.789.1.5.4.1.10.1025|4| +1.3.6.1.4.1.789.1.5.4.1.10.1026|4|/dir4 +1.3.6.1.4.1.789.1.5.4.1.10.1027|4|/dir5 +1.3.6.1.4.1.789.1.5.4.1.10.1028|4| +1.3.6.1.4.1.789.1.5.4.1.10.1029|4|/dir6 +1.3.6.1.4.1.789.1.5.4.1.10.1032|4|/dir7 +1.3.6.1.4.1.789.1.5.4.1.10.1033|4|/dir8 +1.3.6.1.4.1.789.1.5.4.1.11.1022|2|31136 +1.3.6.1.4.1.789.1.5.4.1.11.1023|2|0 +1.3.6.1.4.1.789.1.5.4.1.11.1024|2|10852455 +1.3.6.1.4.1.789.1.5.4.1.11.1025|2|0 +1.3.6.1.4.1.789.1.5.4.1.11.1026|2|31136 +1.3.6.1.4.1.789.1.5.4.1.11.1027|2|0 +1.3.6.1.4.1.789.1.5.4.1.11.1028|2|10852455 +1.3.6.1.4.1.789.1.5.4.1.11.1029|2|0 +1.3.6.1.4.1.789.1.5.4.1.11.1032|2|31136 +1.3.6.1.4.1.789.1.5.4.1.11.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.12.1022|2|96 +1.3.6.1.4.1.789.1.5.4.1.12.1023|2|0 +1.3.6.1.4.1.789.1.5.4.1.12.1024|2|59971 +1.3.6.1.4.1.789.1.5.4.1.12.1025|2|0 +1.3.6.1.4.1.789.1.5.4.1.12.1026|2|96 +1.3.6.1.4.1.789.1.5.4.1.12.1027|2|0 +1.3.6.1.4.1.789.1.5.4.1.12.1028|2|59934 +1.3.6.1.4.1.789.1.5.4.1.12.1029|2|0 +1.3.6.1.4.1.789.1.5.4.1.12.1032|2|96 +1.3.6.1.4.1.789.1.5.4.1.12.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.13.1022|2|107310838 +1.3.6.1.4.1.789.1.5.4.1.13.1023|2|0 +1.3.6.1.4.1.789.1.5.4.1.13.1024|2|86819661 +1.3.6.1.4.1.789.1.5.4.1.13.1025|2|0 +1.3.6.1.4.1.789.1.5.4.1.13.1026|2|107310838 +1.3.6.1.4.1.789.1.5.4.1.13.1027|2|0 +1.3.6.1.4.1.789.1.5.4.1.13.1028|2|86819661 +1.3.6.1.4.1.789.1.5.4.1.13.1029|2|0 +1.3.6.1.4.1.789.1.5.4.1.13.1032|2|2040109451 +1.3.6.1.4.1.789.1.5.4.1.13.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.14.1022|2|0 +1.3.6.1.4.1.789.1.5.4.1.14.1023|2|0 +1.3.6.1.4.1.789.1.5.4.1.14.1024|2|0 +1.3.6.1.4.1.789.1.5.4.1.14.1025|2|0 +1.3.6.1.4.1.789.1.5.4.1.14.1026|2|0 +1.3.6.1.4.1.789.1.5.4.1.14.1027|2|0 +1.3.6.1.4.1.789.1.5.4.1.14.1028|2|0 +1.3.6.1.4.1.789.1.5.4.1.14.1029|2|0 +1.3.6.1.4.1.789.1.5.4.1.14.1032|2|4 +1.3.6.1.4.1.789.1.5.4.1.14.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.18.1022|2|1048576 +1.3.6.1.4.1.789.1.5.4.1.18.1023|2|1048576 +1.3.6.1.4.1.789.1.5.4.1.18.1024|2|1048576 +1.3.6.1.4.1.789.1.5.4.1.18.1025|2|1048576 +1.3.6.1.4.1.789.1.5.4.1.18.1026|2|1048576 +1.3.6.1.4.1.789.1.5.4.1.18.1027|2|1048576 +1.3.6.1.4.1.789.1.5.4.1.18.1028|2|1048576 +1.3.6.1.4.1.789.1.5.4.1.18.1029|2|1048576 +1.3.6.1.4.1.789.1.5.4.1.18.1032|2|1048572 +1.3.6.1.4.1.789.1.5.4.1.18.1033|2|1048576 +1.3.6.1.4.1.789.1.8.3.6.36.0|2|154 +1.3.6.1.4.1.789.1.9.20.1.1.6|2|6 +1.3.6.1.4.1.789.1.9.20.1.1.9|2|9 +1.3.6.1.4.1.789.1.9.20.1.1.29|2|29 +1.3.6.1.4.1.789.1.9.20.1.2.6|4x|666f7277617264207a6f6d62696573204a61646564206b657074 +1.3.6.1.4.1.789.1.9.20.1.2.9|4|driving +1.3.6.1.4.1.789.1.9.20.1.2.29|4x|627574207a6f6d6269657320627574 +1.3.6.1.4.1.789.1.9.20.1.3.6|4x|64726976696e6720627574207468656972 +1.3.6.1.4.1.789.1.9.20.1.3.9|4x|6f78656e207468656972207468656972204a61646564207a6f6d62696573206f78656e +1.3.6.1.4.1.789.1.9.20.1.3.29|4|but +1.3.6.1.4.1.789.1.9.20.1.4.6|2|5 +1.3.6.1.4.1.789.1.9.20.1.4.9|2|2 +1.3.6.1.4.1.789.1.9.20.1.4.29|2|3 +1.3.6.1.4.1.789.1.9.20.1.5.6|2|1 +1.3.6.1.4.1.789.1.9.20.1.5.9|2|5 +1.3.6.1.4.1.789.1.9.20.1.5.29|2|1 +1.3.6.1.4.1.789.1.9.20.1.6.6|67|2148500168 +1.3.6.1.4.1.789.1.9.20.1.6.9|67|33376617 +1.3.6.1.4.1.789.1.9.20.1.6.29|67|1327130653 +1.3.6.1.4.1.789.1.9.20.1.7.6|65|233195524 +1.3.6.1.4.1.789.1.9.20.1.7.9|65|3434682106 +1.3.6.1.4.1.789.1.9.20.1.7.29|65|937699975 +1.3.6.1.4.1.789.1.9.20.1.8.6|65|1094865962 +1.3.6.1.4.1.789.1.9.20.1.8.9|65|3958931918 +1.3.6.1.4.1.789.1.9.20.1.8.29|65|2504427016 +1.3.6.1.4.1.789.1.9.20.1.9.6|65|1938298517 +1.3.6.1.4.1.789.1.9.20.1.9.9|65|1808088975 +1.3.6.1.4.1.789.1.9.20.1.9.29|65|902364095 +1.3.6.1.4.1.789.1.9.20.1.10.6|65|197651960 +1.3.6.1.4.1.789.1.9.20.1.10.9|65|3818953017 +1.3.6.1.4.1.789.1.9.20.1.10.29|65|3933690275 +1.3.6.1.4.1.789.1.9.20.1.11.6|65|3180232593 +1.3.6.1.4.1.789.1.9.20.1.11.9|65|3636823181 +1.3.6.1.4.1.789.1.9.20.1.11.29|65|1239606740 +1.3.6.1.4.1.789.1.9.20.1.12.6|65|3093739540 +1.3.6.1.4.1.789.1.9.20.1.12.9|65|2043249196 +1.3.6.1.4.1.789.1.9.20.1.12.29|65|3301153675 +1.3.6.1.4.1.789.1.9.20.1.13.6|2|27 +1.3.6.1.4.1.789.1.9.20.1.13.9|2|21 +1.3.6.1.4.1.789.1.9.20.1.13.29|2|2 +1.3.6.1.4.1.789.1.9.20.1.14.6|4x|64726976696e67204a61646564206163746564204a61646564207468656972 +1.3.6.1.4.1.789.1.9.20.1.14.9|4|quaintly +1.3.6.1.4.1.789.1.9.20.1.14.29|4x|4a616465642064726976696e67207a6f6d626965732074686569722064726976696e67 +1.3.6.1.4.1.789.1.9.20.1.15.6|4x|6f78656e20746865697220717561696e746c7920627574206b65707420666f7277617264 +1.3.6.1.4.1.789.1.9.20.1.15.9|4x|7a6f6d62696573204a61646564 +1.3.6.1.4.1.789.1.9.20.1.15.29|4x|6163746564206f78656e206163746564 +1.3.6.1.4.1.789.1.9.20.1.16.6|4x|62757420666f7277617264 +1.3.6.1.4.1.789.1.9.20.1.16.9|4x|64726976696e67207468656972207468656972 +1.3.6.1.4.1.789.1.9.20.1.16.29|4x|6f78656e20717561696e746c7920627574 +1.3.6.1.4.1.789.1.9.20.1.17.6|65|1097711823 +1.3.6.1.4.1.789.1.9.20.1.17.9|65|3430555101 +1.3.6.1.4.1.789.1.9.20.1.17.29|65|940834027 +1.3.6.1.4.1.789.1.9.20.1.18.6|65|351320996 +1.3.6.1.4.1.789.1.9.20.1.18.9|65|3966637341 +1.3.6.1.4.1.789.1.9.20.1.18.29|65|2322123930 +1.3.6.1.4.1.789.1.9.20.1.19.6|4x|6f78656e207468656972204a6164656420616374656420627574204a61646564 +1.3.6.1.4.1.789.1.9.20.1.19.9|4x|6b657074206f78656e +1.3.6.1.4.1.789.1.9.20.1.19.29|4x|666f727761726420717561696e746c79204a6164656420746865697220746865697220717561696e746c7920717561696e746c79 +1.3.6.1.4.1.789.1.9.20.1.20.6|4x|717561696e746c792064726976696e67206163746564206f78656e206163746564204a61646564207a6f6d62696573206163746564206b657074 +1.3.6.1.4.1.789.1.9.20.1.20.9|4x|7468656972206f78656e207468656972206b6570742064726976696e67 +1.3.6.1.4.1.789.1.9.20.1.20.29|4x|64726976696e67207a6f6d626965732074686569722062757420666f7277617264 +1.3.6.1.4.1.789.1.9.20.1.21.6|4x|6163746564207468656972 +1.3.6.1.4.1.789.1.9.20.1.21.9|4x|7468656972207a6f6d6269657320627574206f78656e204a61646564207a6f6d6269657320666f7277617264204a61646564 +1.3.6.1.4.1.789.1.9.20.1.21.29|4x|4a616465642064726976696e67207a6f6d62696573207a6f6d62696573204a6164656420666f7277617264 +1.3.6.1.4.1.789.1.9.20.1.22.6|65|1836206239 +1.3.6.1.4.1.789.1.9.20.1.22.9|65|3330980271 +1.3.6.1.4.1.789.1.9.20.1.22.29|65|2038416243 +1.3.6.1.4.1.789.1.19.11.1.1.5|2|5 +1.3.6.1.4.1.789.1.19.11.1.1.6|2|6 +1.3.6.1.4.1.789.1.19.11.1.1.18|2|18 +1.3.6.1.4.1.789.1.19.11.1.2.5|4x|717561696e746c792062757420666f7277617264207a6f6d62696573206f78656e206163746564 +1.3.6.1.4.1.789.1.19.11.1.2.6|4|driving +1.3.6.1.4.1.789.1.19.11.1.2.18|4x|6163746564204a6164656420627574206163746564207a6f6d6269657320666f7277617264204a61646564206b65707420666f7277617264 +1.3.6.1.4.1.789.1.19.11.1.3.5|4|/vol/dir1 +1.3.6.1.4.1.789.1.19.11.1.3.6|4|/vol/dir3 +1.3.6.1.4.1.789.1.19.11.1.3.18|4|/vol/dir9 +1.3.6.1.4.1.789.1.19.11.1.4.5|2|2 +1.3.6.1.4.1.789.1.19.11.1.4.6|2|3 +1.3.6.1.4.1.789.1.19.11.1.4.18|2|2 +1.3.6.1.4.1.789.1.19.11.1.5.5|2|5 +1.3.6.1.4.1.789.1.19.11.1.5.6|2|2 +1.3.6.1.4.1.789.1.19.11.1.5.18|2|4 +1.3.6.1.4.1.789.1.19.11.1.6.5|67|2858127266 +1.3.6.1.4.1.789.1.19.11.1.6.6|67|2252180442 +1.3.6.1.4.1.789.1.19.11.1.6.18|67|1889602529 +1.3.6.1.4.1.789.1.19.11.1.7.5|65|2140650761 +1.3.6.1.4.1.789.1.19.11.1.7.6|65|2775153215 +1.3.6.1.4.1.789.1.19.11.1.7.18|65|2765758867 +1.3.6.1.4.1.789.1.19.11.1.8.5|65|3314928275 +1.3.6.1.4.1.789.1.19.11.1.8.6|65|2593737561 +1.3.6.1.4.1.789.1.19.11.1.8.18|65|1966401782 +1.3.6.1.4.1.789.1.19.11.1.9.5|65|1485004649 +1.3.6.1.4.1.789.1.19.11.1.9.6|65|1162900248 +1.3.6.1.4.1.789.1.19.11.1.9.18|65|3841004544 +1.3.6.1.4.1.789.1.19.11.1.10.5|65|4265174678 +1.3.6.1.4.1.789.1.19.11.1.10.6|65|398446661 +1.3.6.1.4.1.789.1.19.11.1.10.18|65|3276252538 +1.3.6.1.4.1.789.1.19.11.1.11.5|65|2921590899 +1.3.6.1.4.1.789.1.19.11.1.11.6|65|2934781544 +1.3.6.1.4.1.789.1.19.11.1.11.18|65|241301562 +1.3.6.1.4.1.789.1.19.11.1.12.5|65|2238761078 +1.3.6.1.4.1.789.1.19.11.1.12.6|65|3323601747 +1.3.6.1.4.1.789.1.19.11.1.12.18|65|2090674196 +1.3.6.1.4.1.789.1.19.11.1.13.5|2|29 +1.3.6.1.4.1.789.1.19.11.1.13.6|2|29 +1.3.6.1.4.1.789.1.19.11.1.13.18|2|2 +1.3.6.1.4.1.789.1.19.11.1.14.5|2|16 +1.3.6.1.4.1.789.1.19.11.1.14.6|2|18 +1.3.6.1.4.1.789.1.19.11.1.14.18|2|24 +1.3.6.1.4.1.789.1.19.11.1.15.5|4x|6f78656e207468656972206b657074204a6164656420627574 +1.3.6.1.4.1.789.1.19.11.1.15.6|4x|6275742064726976696e67206275742062757420627574206f78656e206163746564204a6164656420666f7277617264 +1.3.6.1.4.1.789.1.19.11.1.15.18|4|acted +1.3.6.1.4.1.789.1.19.11.1.16.5|4x|4a61646564206275742062757420666f727761726420627574 +1.3.6.1.4.1.789.1.19.11.1.16.6|4x|666f7277617264207a6f6d6269657320616374656420717561696e746c792064726976696e6720717561696e746c79206b657074 +1.3.6.1.4.1.789.1.19.11.1.16.18|4x|6f78656e20717561696e746c79207a6f6d62696573204a61646564206b657074207a6f6d62696573207a6f6d62696573207468656972 +1.3.6.1.4.1.789.1.19.11.1.17.5|2|20 +1.3.6.1.4.1.789.1.19.11.1.17.6|2|7 +1.3.6.1.4.1.789.1.19.11.1.17.18|2|18 +1.3.6.1.4.1.789.1.19.11.1.18.5|2|12 +1.3.6.1.4.1.789.1.19.11.1.18.6|2|0 +1.3.6.1.4.1.789.1.19.11.1.18.18|2|24 +1.3.6.1.4.1.789.1.22.1.2.1.1.6|2|6 +1.3.6.1.4.1.789.1.22.1.2.1.1.7|2|7 +1.3.6.1.4.1.789.1.22.1.2.1.1.23|2|23 +1.3.6.1.4.1.789.1.22.1.2.1.2.6|4|netgear ifX300 v1 +1.3.6.1.4.1.789.1.22.1.2.1.2.7|4|junyper proto12 12.3 +1.3.6.1.4.1.789.1.22.1.2.1.2.23|4|malabar yz42 10.2020 +1.3.6.1.4.1.789.1.22.1.2.1.3.6|65|4023387039 +1.3.6.1.4.1.789.1.22.1.2.1.3.7|65|2924545773 +1.3.6.1.4.1.789.1.22.1.2.1.3.23|65|42748770 +1.3.6.1.4.1.789.1.22.1.2.1.4.6|65|2027435892 +1.3.6.1.4.1.789.1.22.1.2.1.4.7|65|2130571275 +1.3.6.1.4.1.789.1.22.1.2.1.4.23|65|3471790003 +1.3.6.1.4.1.789.1.22.1.2.1.5.6|65|2590514276 +1.3.6.1.4.1.789.1.22.1.2.1.5.7|65|1858882606 +1.3.6.1.4.1.789.1.22.1.2.1.5.23|65|4237386340 +1.3.6.1.4.1.789.1.22.1.2.1.6.6|65|3451729845 +1.3.6.1.4.1.789.1.22.1.2.1.6.7|65|2057183875 +1.3.6.1.4.1.789.1.22.1.2.1.6.23|65|3178876314 +1.3.6.1.4.1.789.1.22.1.2.1.7.6|65|1743887402 +1.3.6.1.4.1.789.1.22.1.2.1.7.7|65|3604020808 +1.3.6.1.4.1.789.1.22.1.2.1.7.23|65|1171772028 +1.3.6.1.4.1.789.1.22.1.2.1.8.6|65|1299615212 +1.3.6.1.4.1.789.1.22.1.2.1.8.7|65|2967566972 +1.3.6.1.4.1.789.1.22.1.2.1.8.23|65|892674277 +1.3.6.1.4.1.789.1.22.1.2.1.9.6|65|2731453710 +1.3.6.1.4.1.789.1.22.1.2.1.9.7|65|359492341 +1.3.6.1.4.1.789.1.22.1.2.1.9.23|65|1346518799 +1.3.6.1.4.1.789.1.22.1.2.1.10.6|65|377846011 +1.3.6.1.4.1.789.1.22.1.2.1.10.7|65|3248795595 +1.3.6.1.4.1.789.1.22.1.2.1.10.23|65|4079228536 +1.3.6.1.4.1.789.1.22.1.2.1.11.6|65|1164507255 +1.3.6.1.4.1.789.1.22.1.2.1.11.7|65|3380817615 +1.3.6.1.4.1.789.1.22.1.2.1.11.23|65|4279166533 +1.3.6.1.4.1.789.1.22.1.2.1.12.6|65|941334646 +1.3.6.1.4.1.789.1.22.1.2.1.12.7|65|2976253990 +1.3.6.1.4.1.789.1.22.1.2.1.12.23|65|1891892810 +1.3.6.1.4.1.789.1.22.1.2.1.13.6|65|818749376 +1.3.6.1.4.1.789.1.22.1.2.1.13.7|65|503301418 +1.3.6.1.4.1.789.1.22.1.2.1.13.23|65|2823687843 +1.3.6.1.4.1.789.1.22.1.2.1.14.6|65|152198430 +1.3.6.1.4.1.789.1.22.1.2.1.14.7|65|2718551226 +1.3.6.1.4.1.789.1.22.1.2.1.14.23|65|3299378579 +1.3.6.1.4.1.789.1.22.1.2.1.15.6|65|1177485339 +1.3.6.1.4.1.789.1.22.1.2.1.15.7|65|2922571527 +1.3.6.1.4.1.789.1.22.1.2.1.15.23|65|2100046585 +1.3.6.1.4.1.789.1.22.1.2.1.16.6|65|3266952106 +1.3.6.1.4.1.789.1.22.1.2.1.16.7|65|2189576905 +1.3.6.1.4.1.789.1.22.1.2.1.16.23|65|1034177319 +1.3.6.1.4.1.789.1.22.1.2.1.17.6|65|3093752857 +1.3.6.1.4.1.789.1.22.1.2.1.17.7|65|458296967 +1.3.6.1.4.1.789.1.22.1.2.1.17.23|65|3389342656 +1.3.6.1.4.1.789.1.22.1.2.1.18.6|65|739742743 +1.3.6.1.4.1.789.1.22.1.2.1.18.7|65|4200543391 +1.3.6.1.4.1.789.1.22.1.2.1.18.23|65|3411406602 +1.3.6.1.4.1.789.1.22.1.2.1.19.6|65|360676744 +1.3.6.1.4.1.789.1.22.1.2.1.19.7|65|3658872739 +1.3.6.1.4.1.789.1.22.1.2.1.19.23|65|54377685 +1.3.6.1.4.1.789.1.22.1.2.1.20.6|65|3644592433 +1.3.6.1.4.1.789.1.22.1.2.1.20.7|65|1391241708 +1.3.6.1.4.1.789.1.22.1.2.1.20.23|65|3529999812 +1.3.6.1.4.1.789.1.22.1.2.1.21.6|65|3653574409 +1.3.6.1.4.1.789.1.22.1.2.1.21.7|65|3268436993 +1.3.6.1.4.1.789.1.22.1.2.1.21.23|65|1387022878 +1.3.6.1.4.1.789.1.22.1.2.1.22.6|65|3533491998 +1.3.6.1.4.1.789.1.22.1.2.1.22.7|65|73119879 +1.3.6.1.4.1.789.1.22.1.2.1.22.23|65|2717921276 +1.3.6.1.4.1.789.1.22.1.2.1.23.6|65|1177645447 +1.3.6.1.4.1.789.1.22.1.2.1.23.7|65|2991246072 +1.3.6.1.4.1.789.1.22.1.2.1.23.23|65|2069363319 +1.3.6.1.4.1.789.1.22.1.2.1.24.6|65|1936905453 +1.3.6.1.4.1.789.1.22.1.2.1.24.7|65|97158952 +1.3.6.1.4.1.789.1.22.1.2.1.24.23|65|4146332775 +1.3.6.1.4.1.789.1.22.1.2.1.25.6|70|6630960446522266569 +1.3.6.1.4.1.789.1.22.1.2.1.25.7|70|1394129750971589677 +1.3.6.1.4.1.789.1.22.1.2.1.25.23|70|4789803936209880467 +1.3.6.1.4.1.789.1.22.1.2.1.26.6|70|13226236270429990957 +1.3.6.1.4.1.789.1.22.1.2.1.26.7|70|8545501372360309798 +1.3.6.1.4.1.789.1.22.1.2.1.26.23|70|7836676582086537424 +1.3.6.1.4.1.789.1.22.1.2.1.27.6|70|17511108149895206912 +1.3.6.1.4.1.789.1.22.1.2.1.27.7|70|10683333357754696498 +1.3.6.1.4.1.789.1.22.1.2.1.27.23|70|12155690821542598356 +1.3.6.1.4.1.789.1.22.1.2.1.28.6|70|3629438078831663450 +1.3.6.1.4.1.789.1.22.1.2.1.28.7|70|13381337974009196480 +1.3.6.1.4.1.789.1.22.1.2.1.28.23|70|8506716347061908357 +1.3.6.1.4.1.789.1.22.1.2.1.29.6|70|1355115279229469243 +1.3.6.1.4.1.789.1.22.1.2.1.29.7|70|1289878761605610146 +1.3.6.1.4.1.789.1.22.1.2.1.29.23|70|8981517187502032224 +1.3.6.1.4.1.789.1.22.1.2.1.30.6|70|13019202706001305434 +1.3.6.1.4.1.789.1.22.1.2.1.30.7|70|12675834093042246636 +1.3.6.1.4.1.789.1.22.1.2.1.30.23|70|4729822938835614081 +1.3.6.1.4.1.789.1.22.1.2.1.31.6|70|8699335681328777303 +1.3.6.1.4.1.789.1.22.1.2.1.31.7|70|422713175730114923 +1.3.6.1.4.1.789.1.22.1.2.1.31.23|70|4711699423531515905 +1.3.6.1.4.1.789.1.22.1.2.1.32.6|70|13527122655220392462 +1.3.6.1.4.1.789.1.22.1.2.1.32.7|70|8676245860628856359 +1.3.6.1.4.1.789.1.22.1.2.1.32.23|70|13210951846639192082 +1.3.6.1.4.1.789.1.22.1.2.1.33.6|70|4596248993055945907 +1.3.6.1.4.1.789.1.22.1.2.1.33.7|70|3504432763097441473 +1.3.6.1.4.1.789.1.22.1.2.1.33.23|70|926332403044254414 +1.3.6.1.4.1.789.1.22.1.2.1.34.6|70|4391895979905654502 +1.3.6.1.4.1.789.1.22.1.2.1.34.7|70|12955473091591107964 +1.3.6.1.4.1.789.1.22.1.2.1.34.23|70|599362475845011369 +1.3.6.1.4.1.789.1.22.1.2.1.35.6|70|15496255435321981616 +1.3.6.1.4.1.789.1.22.1.2.1.35.7|70|1722656829636789191 +1.3.6.1.4.1.789.1.22.1.2.1.35.23|70|1764720109889350137 +1.3.6.1.4.1.789.1.26.8.0|70|453656 diff --git a/test/new-e2e/ndm/snmp/compose/data/palo-alto.snmprec b/test/new-e2e/ndm/snmp/compose/data/palo-alto.snmprec new file mode 100644 index 00000000000000..08ea4b4b070abb --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/palo-alto.snmprec @@ -0,0 +1,78 @@ +1.3.6.1.2.1.1.1.0|4|Palo Alto Networks PA-3000 series firewall +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.25461.2.3.18 +1.3.6.1.2.1.47.1.1.1.1.1.1|2|1 +1.3.6.1.2.1.47.1.1.1.1.2.1|4|PA-3020 +1.3.6.1.2.1.47.1.1.1.1.3.1|6|1.3.6.1.4.1.25461.2.3.18 +1.3.6.1.2.1.47.1.1.1.1.4.1|2|0 +1.3.6.1.2.1.47.1.1.1.1.5.1|2|3 +1.3.6.1.2.1.47.1.1.1.1.6.1|2|-1 +1.3.6.1.2.1.47.1.1.1.1.7.1|4|PA-3020 +1.3.6.1.2.1.47.1.1.1.1.8.1|4|1.1 +1.3.6.1.2.1.47.1.1.1.1.9.1|4| +1.3.6.1.2.1.47.1.1.1.1.10.1|4|9.0.5 +1.3.6.1.2.1.47.1.1.1.1.11.1|4| +1.3.6.1.2.1.47.1.1.1.1.12.1|4|Palo Alto Networks +1.3.6.1.2.1.47.1.1.1.1.13.1|4|PA-3020 +1.3.6.1.2.1.47.1.1.1.1.14.1|4| +1.3.6.1.2.1.47.1.1.1.1.15.1|4| +1.3.6.1.2.1.47.1.1.1.1.16.1|2|2 +1.3.6.1.2.1.47.1.1.1.1.17.1|4|0000000000000000 +1.3.6.1.2.1.47.1.1.1.1.18.1|4| +1.3.6.1.4.1.25461.1.1.7.1.1.1.0|2|23 +1.3.6.1.4.1.25461.1.1.7.1.1.2.0|2|29 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.1.8|2|19 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.1.11|2|26 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.1.13|2|5 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.1.15|2|18 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.1.17|2|26 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.1.20|2|10 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.1.21|2|0 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.1.24|2|0 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.1.25|2|10 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.2.8|2|22 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.2.11|2|26 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.2.13|2|7 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.2.15|2|26 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.2.17|2|26 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.2.20|2|27 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.2.21|2|9 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.2.24|2|16 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.2.25|2|26 +1.3.6.1.4.1.25461.1.1.7.1.3.1.1.1.2|2|0 +1.3.6.1.4.1.25461.1.1.7.1.3.1.1.1.4|2|13 +1.3.6.1.4.1.25461.1.1.7.1.3.1.1.1.14|2|21 +1.3.6.1.4.1.25461.1.1.7.1.3.1.1.1.18|2|23 +1.3.6.1.4.1.25461.1.1.7.1.3.1.1.1.20|2|3 +1.3.6.1.4.1.25461.1.1.7.1.3.1.1.1.21|2|13 +1.3.6.1.4.1.25461.1.1.7.1.3.1.1.1.22|2|16 +1.3.6.1.4.1.25461.1.1.7.1.3.1.1.1.29|2|6 +1.3.6.1.4.1.25461.1.1.7.1.3.1.1.1.31|2|5 +1.3.6.1.4.1.25461.1.1.7.1.4.1.1.1.3|2|30 +1.3.6.1.4.1.25461.1.1.7.1.4.1.1.1.11|2|23 +1.3.6.1.4.1.25461.1.1.7.1.4.1.1.1.13|2|15 +1.3.6.1.4.1.25461.1.1.7.1.4.1.1.1.15|2|2 +1.3.6.1.4.1.25461.1.1.7.1.4.1.1.1.16|2|8 +1.3.6.1.4.1.25461.1.1.7.1.4.1.1.1.19|2|24 +1.3.6.1.4.1.25461.1.1.7.1.4.1.1.1.27|2|10 +1.3.6.1.4.1.25461.1.1.7.1.4.1.1.1.29|2|11 +1.3.6.1.4.1.25461.2.1.2.1.1.0|4|9.0.5 +1.3.6.1.4.1.25461.2.1.2.1.3.0|4|015351000009999 +1.3.6.1.4.1.25461.2.1.2.1.11.0|4|active +1.3.6.1.4.1.25461.2.1.2.1.12.0|4|passive +1.3.6.1.4.1.25461.2.1.2.1.13.0|4|active-passive +1.3.6.1.4.1.25461.2.1.2.2.1.0|4|PA-3020 +1.3.6.1.4.1.25461.2.1.2.3.1.0|2|16 +1.3.6.1.4.1.25461.2.1.2.3.2.0|2|1 +1.3.6.1.4.1.25461.2.1.2.3.3.0|2|13 +1.3.6.1.4.1.25461.2.1.2.3.4.0|2|4 +1.3.6.1.4.1.25461.2.1.2.3.5.0|2|18 +1.3.6.1.4.1.25461.2.1.2.3.6.0|2|8 +1.3.6.1.4.1.25461.2.1.2.3.7.0|2|12 +1.3.6.1.4.1.25461.2.1.2.3.8.0|2|21 +1.3.6.1.4.1.25461.2.1.2.5.1.1.0|2|6 +1.3.6.1.4.1.25461.2.1.2.5.1.2.0|2|28 +1.3.6.1.4.1.25461.2.1.2.5.1.3.0|2|5 +1.3.6.1.6.3.10.2.1.1.0|4x|7a6f6d62696573206b657074206163746564 +1.3.6.1.6.3.10.2.1.2.0|2|9 +1.3.6.1.6.3.10.2.1.3.0|2|17 +1.3.6.1.6.3.10.2.1.4.0|2|2147483647 diff --git a/test/new-e2e/ndm/snmp/compose/data/public.snmprec b/test/new-e2e/ndm/snmp/compose/data/public.snmprec new file mode 100644 index 00000000000000..484771fe27cd02 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/public.snmprec @@ -0,0 +1,3988 @@ +1.3.6.1.2.1.1.1.0|4x|4c696e75782034316261393438393131623920342e392e38372d6c696e75786b69742d6175667320233120534d5020576564204d61722031342031353a31323a3136205554432032303138207838365f3634 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.8072.3.2.10 +1.3.6.1.2.1.1.3.0|67|4226041 +1.3.6.1.2.1.1.4.0|4x|726f6f74406c6f63616c686f7374 +1.3.6.1.2.1.1.5.0|4|41ba948911b9 +1.3.6.1.2.1.1.6.0|4|Unknown +1.3.6.1.2.1.1.8.0|67|9 +1.3.6.1.2.1.1.9.1.2.1|6|1.3.6.1.6.3.11.3.1.1 +1.3.6.1.2.1.1.9.1.2.2|6|1.3.6.1.6.3.15.2.1.1 +1.3.6.1.2.1.1.9.1.2.3|6|1.3.6.1.6.3.10.3.1.1 +1.3.6.1.2.1.1.9.1.2.4|6|1.3.6.1.6.3.1 +1.3.6.1.2.1.1.9.1.2.5|6|1.3.6.1.2.1.49 +1.3.6.1.2.1.1.9.1.2.6|6|1.3.6.1.2.1.4 +1.3.6.1.2.1.1.9.1.2.7|6|1.3.6.1.2.1.50 +1.3.6.1.2.1.1.9.1.2.8|6|1.3.6.1.6.3.16.2.2.1 +1.3.6.1.2.1.1.9.1.2.9|6|1.3.6.1.6.3.13.3.1.3 +1.3.6.1.2.1.1.9.1.2.10|6|1.3.6.1.2.1.92 +1.3.6.1.2.1.1.9.1.3.1|4x|546865204d494220666f72204d6573736167652050726f63657373696e6720616e64204469737061746368696e672e +1.3.6.1.2.1.1.9.1.3.2|4x|546865206d616e6167656d656e7420696e666f726d6174696f6e20646566696e6974696f6e7320666f722074686520534e4d5020557365722d6261736564205365637572697479204d6f64656c2e +1.3.6.1.2.1.1.9.1.3.3|4x|54686520534e4d50204d616e6167656d656e7420417263686974656374757265204d49422e +1.3.6.1.2.1.1.9.1.3.4|4x|546865204d4942206d6f64756c6520666f7220534e4d50763220656e746974696573 +1.3.6.1.2.1.1.9.1.3.5|4x|546865204d4942206d6f64756c6520666f72206d616e6167696e672054435020696d706c656d656e746174696f6e73 +1.3.6.1.2.1.1.9.1.3.6|4x|546865204d4942206d6f64756c6520666f72206d616e6167696e6720495020616e642049434d5020696d706c656d656e746174696f6e73 +1.3.6.1.2.1.1.9.1.3.7|4x|546865204d4942206d6f64756c6520666f72206d616e6167696e672055445020696d706c656d656e746174696f6e73 +1.3.6.1.2.1.1.9.1.3.8|4x|566965772d62617365642041636365737320436f6e74726f6c204d6f64656c20666f7220534e4d502e +1.3.6.1.2.1.1.9.1.3.9|4x|546865204d4942206d6f64756c657320666f72206d616e6167696e6720534e4d50204e6f74696669636174696f6e2c20706c75732066696c746572696e672e +1.3.6.1.2.1.1.9.1.3.10|4x|546865204d4942206d6f64756c6520666f72206c6f6767696e6720534e4d50204e6f74696669636174696f6e732e +1.3.6.1.2.1.1.9.1.4.1|67|9 +1.3.6.1.2.1.1.9.1.4.2|67|9 +1.3.6.1.2.1.1.9.1.4.3|67|9 +1.3.6.1.2.1.1.9.1.4.4|67|9 +1.3.6.1.2.1.1.9.1.4.5|67|9 +1.3.6.1.2.1.1.9.1.4.6|67|9 +1.3.6.1.2.1.1.9.1.4.7|67|9 +1.3.6.1.2.1.1.9.1.4.8|67|9 +1.3.6.1.2.1.1.9.1.4.9|67|9 +1.3.6.1.2.1.1.9.1.4.10|67|9 +1.3.6.1.2.1.2.1.0|2|4 +1.3.6.1.2.1.2.2.1.1.1|2|1 +1.3.6.1.2.1.2.2.1.1.2|2|2 +1.3.6.1.2.1.2.2.1.1.3|2|3 +1.3.6.1.2.1.2.2.1.1.90|2|90 +1.3.6.1.2.1.2.2.1.2.1|4|lo +1.3.6.1.2.1.2.2.1.2.2|4|tunl0 +1.3.6.1.2.1.2.2.1.2.3|4|ip6tnl0 +1.3.6.1.2.1.2.2.1.2.90|4|eth0 +1.3.6.1.2.1.2.2.1.3.1|2|24 +1.3.6.1.2.1.2.2.1.3.2|2|131 +1.3.6.1.2.1.2.2.1.3.3|2|131 +1.3.6.1.2.1.2.2.1.3.90|2|6 +1.3.6.1.2.1.2.2.1.4.1|2|65536 +1.3.6.1.2.1.2.2.1.4.2|2|1480 +1.3.6.1.2.1.2.2.1.4.3|2|1452 +1.3.6.1.2.1.2.2.1.4.90|2|1500 +1.3.6.1.2.1.2.2.1.5.1|66|10000000 +1.3.6.1.2.1.2.2.1.5.2|66|0 +1.3.6.1.2.1.2.2.1.5.3|66|0 +1.3.6.1.2.1.2.2.1.5.90|66|4294967295 +1.3.6.1.2.1.2.2.1.6.1|4| +1.3.6.1.2.1.2.2.1.6.2|4| +1.3.6.1.2.1.2.2.1.6.3|4| +1.3.6.1.2.1.2.2.1.6.90|4x|0242ac110002 +1.3.6.1.2.1.2.2.1.7.1|2|1 +1.3.6.1.2.1.2.2.1.7.2|2|2 +1.3.6.1.2.1.2.2.1.7.3|2|2 +1.3.6.1.2.1.2.2.1.7.90|2|1 +1.3.6.1.2.1.2.2.1.8.1|2|1 +1.3.6.1.2.1.2.2.1.8.2|2|2 +1.3.6.1.2.1.2.2.1.8.3|2|2 +1.3.6.1.2.1.2.2.1.8.90|2|1 +1.3.6.1.2.1.2.2.1.9.1|67|0 +1.3.6.1.2.1.2.2.1.9.2|67|0 +1.3.6.1.2.1.2.2.1.9.3|67|0 +1.3.6.1.2.1.2.2.1.9.90|67|0 +1.3.6.1.2.1.2.2.1.10.1|65|5300203 +1.3.6.1.2.1.2.2.1.10.2|65|0 +1.3.6.1.2.1.2.2.1.10.3|65|0 +1.3.6.1.2.1.2.2.1.10.90|65|2928 +1.3.6.1.2.1.2.2.1.11.1|65|63808 +1.3.6.1.2.1.2.2.1.11.2|65|0 +1.3.6.1.2.1.2.2.1.11.3|65|0 +1.3.6.1.2.1.2.2.1.11.90|65|40 +1.3.6.1.2.1.2.2.1.12.1|65|0 +1.3.6.1.2.1.2.2.1.12.2|65|0 +1.3.6.1.2.1.2.2.1.12.3|65|0 +1.3.6.1.2.1.2.2.1.12.90|65|0 +1.3.6.1.2.1.2.2.1.13.1|65|0 +1.3.6.1.2.1.2.2.1.13.2|65|0 +1.3.6.1.2.1.2.2.1.13.3|65|0 +1.3.6.1.2.1.2.2.1.13.90|65|0 +1.3.6.1.2.1.2.2.1.14.1|65|0 +1.3.6.1.2.1.2.2.1.14.2|65|0 +1.3.6.1.2.1.2.2.1.14.3|65|0 +1.3.6.1.2.1.2.2.1.14.90|65|0 +1.3.6.1.2.1.2.2.1.15.1|65|0 +1.3.6.1.2.1.2.2.1.15.2|65|0 +1.3.6.1.2.1.2.2.1.15.3|65|0 +1.3.6.1.2.1.2.2.1.15.90|65|0 +1.3.6.1.2.1.2.2.1.16.1|65|5300203 +1.3.6.1.2.1.2.2.1.16.2|65|0 +1.3.6.1.2.1.2.2.1.16.3|65|0 +1.3.6.1.2.1.2.2.1.16.90|65|0 +1.3.6.1.2.1.2.2.1.17.1|65|63808 +1.3.6.1.2.1.2.2.1.17.2|65|0 +1.3.6.1.2.1.2.2.1.17.3|65|0 +1.3.6.1.2.1.2.2.1.17.90|65|0 +1.3.6.1.2.1.2.2.1.18.1|65|0 +1.3.6.1.2.1.2.2.1.18.2|65|0 +1.3.6.1.2.1.2.2.1.18.3|65|0 +1.3.6.1.2.1.2.2.1.18.90|65|0 +1.3.6.1.2.1.2.2.1.19.1|65|0 +1.3.6.1.2.1.2.2.1.19.2|65|0 +1.3.6.1.2.1.2.2.1.19.3|65|0 +1.3.6.1.2.1.2.2.1.19.90|65|0 +1.3.6.1.2.1.2.2.1.20.1|65|0 +1.3.6.1.2.1.2.2.1.20.2|65|0 +1.3.6.1.2.1.2.2.1.20.3|65|0 +1.3.6.1.2.1.2.2.1.20.90|65|0 +1.3.6.1.2.1.2.2.1.21.1|66|0 +1.3.6.1.2.1.2.2.1.21.2|66|0 +1.3.6.1.2.1.2.2.1.21.3|66|0 +1.3.6.1.2.1.2.2.1.21.90|66|0 +1.3.6.1.2.1.2.2.1.22.1|6|0.0 +1.3.6.1.2.1.2.2.1.22.2|6|0.0 +1.3.6.1.2.1.2.2.1.22.3|6|0.0 +1.3.6.1.2.1.2.2.1.22.90|6|0.0 +1.3.6.1.2.1.4.1.0|2|1 +1.3.6.1.2.1.4.2.0|2|64 +1.3.6.1.2.1.4.3.0|65|64061 +1.3.6.1.2.1.4.4.0|65|0 +1.3.6.1.2.1.4.5.0|65|0 +1.3.6.1.2.1.4.6.0|65|0 +1.3.6.1.2.1.4.7.0|65|0 +1.3.6.1.2.1.4.8.0|65|0 +1.3.6.1.2.1.4.9.0|65|64061 +1.3.6.1.2.1.4.10.0|65|64061 +1.3.6.1.2.1.4.11.0|65|0 +1.3.6.1.2.1.4.12.0|65|0 +1.3.6.1.2.1.4.13.0|2|30 +1.3.6.1.2.1.4.14.0|65|0 +1.3.6.1.2.1.4.15.0|65|0 +1.3.6.1.2.1.4.16.0|65|0 +1.3.6.1.2.1.4.17.0|65|0 +1.3.6.1.2.1.4.18.0|65|0 +1.3.6.1.2.1.4.19.0|65|0 +1.3.6.1.2.1.4.20.1.1.127.0.0.1|64x|7f000001 +1.3.6.1.2.1.4.20.1.1.172.17.0.2|64x|ac110002 +1.3.6.1.2.1.4.20.1.2.127.0.0.1|2|1 +1.3.6.1.2.1.4.20.1.2.172.17.0.2|2|90 +1.3.6.1.2.1.4.20.1.3.127.0.0.1|64x|ff000000 +1.3.6.1.2.1.4.20.1.3.172.17.0.2|64x|ffff0000 +1.3.6.1.2.1.4.20.1.4.127.0.0.1|2|0 +1.3.6.1.2.1.4.20.1.4.172.17.0.2|2|1 +1.3.6.1.2.1.4.21.1.1.0.0.0.0|64x|00000000 +1.3.6.1.2.1.4.21.1.1.172.17.0.0|64x|ac110000 +1.3.6.1.2.1.4.21.1.2.0.0.0.0|2|90 +1.3.6.1.2.1.4.21.1.2.172.17.0.0|2|90 +1.3.6.1.2.1.4.21.1.3.0.0.0.0|2|1 +1.3.6.1.2.1.4.21.1.3.172.17.0.0|2|0 +1.3.6.1.2.1.4.21.1.7.0.0.0.0|64x|ac110001 +1.3.6.1.2.1.4.21.1.7.172.17.0.0|64x|00000000 +1.3.6.1.2.1.4.21.1.8.0.0.0.0|2|4 +1.3.6.1.2.1.4.21.1.8.172.17.0.0|2|3 +1.3.6.1.2.1.4.21.1.9.0.0.0.0|2|2 +1.3.6.1.2.1.4.21.1.9.172.17.0.0|2|2 +1.3.6.1.2.1.4.21.1.11.0.0.0.0|64x|00000000 +1.3.6.1.2.1.4.21.1.11.172.17.0.0|64x|ffff0000 +1.3.6.1.2.1.4.21.1.13.0.0.0.0|6|0.0 +1.3.6.1.2.1.4.21.1.13.172.17.0.0|6|0.0 +1.3.6.1.2.1.4.23.0|65|0 +1.3.6.1.2.1.4.24.4.1.1.0.0.0.0.0.0.0.0.0.172.17.0.1|64x|00000000 +1.3.6.1.2.1.4.24.4.1.1.172.17.0.0.255.255.0.0.0.0.0.0.0|64x|ac110000 +1.3.6.1.2.1.4.24.4.1.2.0.0.0.0.0.0.0.0.0.172.17.0.1|64x|00000000 +1.3.6.1.2.1.4.24.4.1.2.172.17.0.0.255.255.0.0.0.0.0.0.0|64x|ffff0000 +1.3.6.1.2.1.4.24.4.1.3.0.0.0.0.0.0.0.0.0.172.17.0.1|2|0 +1.3.6.1.2.1.4.24.4.1.3.172.17.0.0.255.255.0.0.0.0.0.0.0|2|0 +1.3.6.1.2.1.4.24.4.1.4.0.0.0.0.0.0.0.0.0.172.17.0.1|64x|ac110001 +1.3.6.1.2.1.4.24.4.1.4.172.17.0.0.255.255.0.0.0.0.0.0.0|64x|00000000 +1.3.6.1.2.1.4.24.4.1.5.0.0.0.0.0.0.0.0.0.172.17.0.1|2|90 +1.3.6.1.2.1.4.24.4.1.5.172.17.0.0.255.255.0.0.0.0.0.0.0|2|90 +1.3.6.1.2.1.4.24.4.1.6.0.0.0.0.0.0.0.0.0.172.17.0.1|2|4 +1.3.6.1.2.1.4.24.4.1.6.172.17.0.0.255.255.0.0.0.0.0.0.0|2|3 +1.3.6.1.2.1.4.24.4.1.7.0.0.0.0.0.0.0.0.0.172.17.0.1|2|2 +1.3.6.1.2.1.4.24.4.1.7.172.17.0.0.255.255.0.0.0.0.0.0.0|2|2 +1.3.6.1.2.1.4.24.4.1.9.0.0.0.0.0.0.0.0.0.172.17.0.1|6|0.0 +1.3.6.1.2.1.4.24.4.1.9.172.17.0.0.255.255.0.0.0.0.0.0.0|6|0.0 +1.3.6.1.2.1.4.24.4.1.10.0.0.0.0.0.0.0.0.0.172.17.0.1|2|0 +1.3.6.1.2.1.4.24.4.1.10.172.17.0.0.255.255.0.0.0.0.0.0.0|2|0 +1.3.6.1.2.1.4.24.4.1.11.0.0.0.0.0.0.0.0.0.172.17.0.1|2|0 +1.3.6.1.2.1.4.24.4.1.11.172.17.0.0.255.255.0.0.0.0.0.0.0|2|0 +1.3.6.1.2.1.4.24.4.1.12.0.0.0.0.0.0.0.0.0.172.17.0.1|2|-1 +1.3.6.1.2.1.4.24.4.1.12.172.17.0.0.255.255.0.0.0.0.0.0.0|2|-1 +1.3.6.1.2.1.4.24.4.1.13.0.0.0.0.0.0.0.0.0.172.17.0.1|2|-1 +1.3.6.1.2.1.4.24.4.1.13.172.17.0.0.255.255.0.0.0.0.0.0.0|2|-1 +1.3.6.1.2.1.4.24.4.1.14.0.0.0.0.0.0.0.0.0.172.17.0.1|2|-1 +1.3.6.1.2.1.4.24.4.1.14.172.17.0.0.255.255.0.0.0.0.0.0.0|2|-1 +1.3.6.1.2.1.4.24.4.1.15.0.0.0.0.0.0.0.0.0.172.17.0.1|2|-1 +1.3.6.1.2.1.4.24.4.1.15.172.17.0.0.255.255.0.0.0.0.0.0.0|2|-1 +1.3.6.1.2.1.4.24.4.1.16.0.0.0.0.0.0.0.0.0.172.17.0.1|2|1 +1.3.6.1.2.1.4.24.4.1.16.172.17.0.0.255.255.0.0.0.0.0.0.0|2|1 +1.3.6.1.2.1.4.24.6.0|66|2 +1.3.6.1.2.1.4.24.7.1.7.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|2|90 +1.3.6.1.2.1.4.24.7.1.7.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|2|90 +1.3.6.1.2.1.4.24.7.1.8.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|2|4 +1.3.6.1.2.1.4.24.7.1.8.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|2|3 +1.3.6.1.2.1.4.24.7.1.9.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|2|2 +1.3.6.1.2.1.4.24.7.1.9.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|2|2 +1.3.6.1.2.1.4.24.7.1.10.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|66|0 +1.3.6.1.2.1.4.24.7.1.10.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|66|0 +1.3.6.1.2.1.4.24.7.1.11.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|66|0 +1.3.6.1.2.1.4.24.7.1.11.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|66|0 +1.3.6.1.2.1.4.24.7.1.12.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|2|0 +1.3.6.1.2.1.4.24.7.1.12.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|2|0 +1.3.6.1.2.1.4.24.7.1.13.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|2|-1 +1.3.6.1.2.1.4.24.7.1.13.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|2|-1 +1.3.6.1.2.1.4.24.7.1.14.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|2|-1 +1.3.6.1.2.1.4.24.7.1.14.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|2|-1 +1.3.6.1.2.1.4.24.7.1.15.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|2|-1 +1.3.6.1.2.1.4.24.7.1.15.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|2|-1 +1.3.6.1.2.1.4.24.7.1.16.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|2|-1 +1.3.6.1.2.1.4.24.7.1.16.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|2|-1 +1.3.6.1.2.1.4.24.7.1.17.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|2|1 +1.3.6.1.2.1.4.24.7.1.17.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|2|1 +1.3.6.1.2.1.4.25.0|2|2 +1.3.6.1.2.1.4.26.0|2|64 +1.3.6.1.2.1.4.27.0|67|0 +1.3.6.1.2.1.4.28.1.2.1|2|65535 +1.3.6.1.2.1.4.28.1.2.90|2|65535 +1.3.6.1.2.1.4.28.1.3.1|2|1 +1.3.6.1.2.1.4.28.1.3.90|2|1 +1.3.6.1.2.1.4.28.1.4.1|66|1000 +1.3.6.1.2.1.4.28.1.4.90|66|1000 +1.3.6.1.2.1.4.29.0|67|0 +1.3.6.1.2.1.4.31.1.1.3.1|65|63808 +1.3.6.1.2.1.4.31.1.1.3.2|65|40 +1.3.6.1.2.1.4.31.1.1.4.1|70|63808 +1.3.6.1.2.1.4.31.1.1.4.2|70|40 +1.3.6.1.2.1.4.31.1.1.5.1|65|5300203 +1.3.6.1.2.1.4.31.1.1.5.2|65|2368 +1.3.6.1.2.1.4.31.1.1.6.1|70|5300203 +1.3.6.1.2.1.4.31.1.1.6.2|70|2368 +1.3.6.1.2.1.4.31.1.1.7.1|65|0 +1.3.6.1.2.1.4.31.1.1.7.2|65|0 +1.3.6.1.2.1.4.31.1.1.8.1|65|0 +1.3.6.1.2.1.4.31.1.1.8.2|65|0 +1.3.6.1.2.1.4.31.1.1.9.1|65|0 +1.3.6.1.2.1.4.31.1.1.9.2|65|0 +1.3.6.1.2.1.4.31.1.1.10.1|65|0 +1.3.6.1.2.1.4.31.1.1.10.2|65|0 +1.3.6.1.2.1.4.31.1.1.11.1|65|0 +1.3.6.1.2.1.4.31.1.1.11.2|65|0 +1.3.6.1.2.1.4.31.1.1.12.1|65|0 +1.3.6.1.2.1.4.31.1.1.12.2|65|0 +1.3.6.1.2.1.4.31.1.1.13.1|70|0 +1.3.6.1.2.1.4.31.1.1.13.2|70|0 +1.3.6.1.2.1.4.31.1.1.14.1|65|0 +1.3.6.1.2.1.4.31.1.1.14.2|65|0 +1.3.6.1.2.1.4.31.1.1.15.1|65|0 +1.3.6.1.2.1.4.31.1.1.15.2|65|0 +1.3.6.1.2.1.4.31.1.1.16.1|65|0 +1.3.6.1.2.1.4.31.1.1.16.2|65|0 +1.3.6.1.2.1.4.31.1.1.17.1|65|0 +1.3.6.1.2.1.4.31.1.1.17.2|65|40 +1.3.6.1.2.1.4.31.1.1.18.1|65|63808 +1.3.6.1.2.1.4.31.1.1.18.2|65|0 +1.3.6.1.2.1.4.31.1.1.19.1|70|63808 +1.3.6.1.2.1.4.31.1.1.19.2|70|0 +1.3.6.1.2.1.4.31.1.1.20.1|65|63808 +1.3.6.1.2.1.4.31.1.1.20.2|65|0 +1.3.6.1.2.1.4.31.1.1.21.1|70|63808 +1.3.6.1.2.1.4.31.1.1.21.2|70|0 +1.3.6.1.2.1.4.31.1.1.22.1|65|0 +1.3.6.1.2.1.4.31.1.1.22.2|65|0 +1.3.6.1.2.1.4.31.1.1.23.1|65|0 +1.3.6.1.2.1.4.31.1.1.23.2|65|0 +1.3.6.1.2.1.4.31.1.1.24.1|70|0 +1.3.6.1.2.1.4.31.1.1.24.2|70|0 +1.3.6.1.2.1.4.31.1.1.25.1|65|0 +1.3.6.1.2.1.4.31.1.1.25.2|65|0 +1.3.6.1.2.1.4.31.1.1.26.1|65|0 +1.3.6.1.2.1.4.31.1.1.26.2|65|0 +1.3.6.1.2.1.4.31.1.1.27.1|65|0 +1.3.6.1.2.1.4.31.1.1.27.2|65|0 +1.3.6.1.2.1.4.31.1.1.28.1|65|0 +1.3.6.1.2.1.4.31.1.1.28.2|65|0 +1.3.6.1.2.1.4.31.1.1.29.1|65|0 +1.3.6.1.2.1.4.31.1.1.29.2|65|0 +1.3.6.1.2.1.4.31.1.1.30.1|65|63808 +1.3.6.1.2.1.4.31.1.1.30.2|65|0 +1.3.6.1.2.1.4.31.1.1.31.1|70|63808 +1.3.6.1.2.1.4.31.1.1.31.2|70|0 +1.3.6.1.2.1.4.31.1.1.32.1|65|5300203 +1.3.6.1.2.1.4.31.1.1.32.2|65|0 +1.3.6.1.2.1.4.31.1.1.33.1|70|5300203 +1.3.6.1.2.1.4.31.1.1.33.2|70|0 +1.3.6.1.2.1.4.31.1.1.34.1|65|0 +1.3.6.1.2.1.4.31.1.1.34.2|65|0 +1.3.6.1.2.1.4.31.1.1.35.1|70|0 +1.3.6.1.2.1.4.31.1.1.35.2|70|0 +1.3.6.1.2.1.4.31.1.1.36.1|65|0 +1.3.6.1.2.1.4.31.1.1.36.2|65|0 +1.3.6.1.2.1.4.31.1.1.37.1|70|0 +1.3.6.1.2.1.4.31.1.1.37.2|70|0 +1.3.6.1.2.1.4.31.1.1.38.1|65|0 +1.3.6.1.2.1.4.31.1.1.38.2|65|0 +1.3.6.1.2.1.4.31.1.1.39.1|70|0 +1.3.6.1.2.1.4.31.1.1.39.2|70|0 +1.3.6.1.2.1.4.31.1.1.40.1|65|0 +1.3.6.1.2.1.4.31.1.1.40.2|65|0 +1.3.6.1.2.1.4.31.1.1.41.1|70|0 +1.3.6.1.2.1.4.31.1.1.41.2|70|0 +1.3.6.1.2.1.4.31.1.1.42.1|65|0 +1.3.6.1.2.1.4.31.1.1.43.1|70|0 +1.3.6.1.2.1.4.31.1.1.44.1|65|0 +1.3.6.1.2.1.4.31.1.1.45.1|70|0 +1.3.6.1.2.1.4.31.1.1.46.1|67|0 +1.3.6.1.2.1.4.31.1.1.46.2|67|0 +1.3.6.1.2.1.4.31.1.1.47.1|66|60000 +1.3.6.1.2.1.4.31.1.1.47.2|66|60000 +1.3.6.1.2.1.4.31.2.0|67|0 +1.3.6.1.2.1.4.31.3.1.3.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.3.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.3.2.90|65|40 +1.3.6.1.2.1.4.31.3.1.4.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.4.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.4.2.90|70|40 +1.3.6.1.2.1.4.31.3.1.5.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.5.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.5.2.90|65|2368 +1.3.6.1.2.1.4.31.3.1.6.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.6.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.6.2.90|70|2368 +1.3.6.1.2.1.4.31.3.1.7.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.7.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.7.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.8.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.8.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.8.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.9.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.9.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.9.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.10.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.10.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.10.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.11.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.11.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.11.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.12.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.12.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.12.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.13.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.13.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.13.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.14.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.14.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.14.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.15.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.15.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.15.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.16.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.16.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.16.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.17.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.17.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.17.2.90|65|40 +1.3.6.1.2.1.4.31.3.1.18.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.18.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.18.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.19.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.19.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.19.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.20.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.20.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.20.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.21.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.21.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.21.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.23.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.23.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.23.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.24.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.24.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.24.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.25.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.25.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.25.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.26.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.26.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.26.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.27.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.27.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.27.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.28.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.28.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.28.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.29.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.29.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.29.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.30.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.30.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.30.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.31.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.31.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.31.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.32.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.32.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.32.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.33.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.33.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.33.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.34.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.34.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.34.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.35.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.35.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.35.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.36.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.36.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.36.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.37.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.37.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.37.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.38.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.38.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.38.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.39.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.39.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.39.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.40.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.40.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.40.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.41.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.41.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.41.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.46.2.1|67|0 +1.3.6.1.2.1.4.31.3.1.46.2.3|67|0 +1.3.6.1.2.1.4.31.3.1.46.2.90|67|0 +1.3.6.1.2.1.4.31.3.1.47.2.1|66|60000 +1.3.6.1.2.1.4.31.3.1.47.2.3|66|60000 +1.3.6.1.2.1.4.31.3.1.47.2.90|66|60000 +1.3.6.1.2.1.4.32.1.5.1.1.4.127.0.0.0.8|2|2 +1.3.6.1.2.1.4.32.1.5.90.1.4.172.17.0.0.16|2|2 +1.3.6.1.2.1.4.32.1.6.1.1.4.127.0.0.0.8|2|1 +1.3.6.1.2.1.4.32.1.6.90.1.4.172.17.0.0.16|2|1 +1.3.6.1.2.1.4.32.1.7.1.1.4.127.0.0.0.8|2|2 +1.3.6.1.2.1.4.32.1.7.90.1.4.172.17.0.0.16|2|2 +1.3.6.1.2.1.4.32.1.8.1.1.4.127.0.0.0.8|66|4294967295 +1.3.6.1.2.1.4.32.1.8.90.1.4.172.17.0.0.16|66|4294967295 +1.3.6.1.2.1.4.32.1.9.1.1.4.127.0.0.0.8|66|4294967295 +1.3.6.1.2.1.4.32.1.9.90.1.4.172.17.0.0.16|66|4294967295 +1.3.6.1.2.1.4.33.0|2|1640220749 +1.3.6.1.2.1.4.34.1.3.1.4.127.0.0.1|2|1 +1.3.6.1.2.1.4.34.1.3.1.4.172.17.0.2|2|90 +1.3.6.1.2.1.4.34.1.3.1.4.172.17.255.255|2|90 +1.3.6.1.2.1.4.34.1.4.1.4.127.0.0.1|2|1 +1.3.6.1.2.1.4.34.1.4.1.4.172.17.0.2|2|1 +1.3.6.1.2.1.4.34.1.4.1.4.172.17.255.255|2|3 +1.3.6.1.2.1.4.34.1.5.1.4.127.0.0.1|6|1.3.6.1.2.1.4.32.1.5.1.1.4.127.0.0.0.8 +1.3.6.1.2.1.4.34.1.5.1.4.172.17.0.2|6|1.3.6.1.2.1.4.32.1.5.90.1.4.172.17.0.0.16 +1.3.6.1.2.1.4.34.1.5.1.4.172.17.255.255|6|1.3.6.1.2.1.4.32.1.5.90.1.4.172.17.0.0.16 +1.3.6.1.2.1.4.34.1.6.1.4.127.0.0.1|2|2 +1.3.6.1.2.1.4.34.1.6.1.4.172.17.0.2|2|2 +1.3.6.1.2.1.4.34.1.6.1.4.172.17.255.255|2|2 +1.3.6.1.2.1.4.34.1.7.1.4.127.0.0.1|2|1 +1.3.6.1.2.1.4.34.1.7.1.4.172.17.0.2|2|1 +1.3.6.1.2.1.4.34.1.7.1.4.172.17.255.255|2|1 +1.3.6.1.2.1.4.34.1.8.1.4.127.0.0.1|67|0 +1.3.6.1.2.1.4.34.1.8.1.4.172.17.0.2|67|0 +1.3.6.1.2.1.4.34.1.8.1.4.172.17.255.255|67|0 +1.3.6.1.2.1.4.34.1.9.1.4.127.0.0.1|67|0 +1.3.6.1.2.1.4.34.1.9.1.4.172.17.0.2|67|0 +1.3.6.1.2.1.4.34.1.9.1.4.172.17.255.255|67|0 +1.3.6.1.2.1.4.34.1.10.1.4.127.0.0.1|2|1 +1.3.6.1.2.1.4.34.1.10.1.4.172.17.0.2|2|1 +1.3.6.1.2.1.4.34.1.10.1.4.172.17.255.255|2|1 +1.3.6.1.2.1.4.34.1.11.1.4.127.0.0.1|2|2 +1.3.6.1.2.1.4.34.1.11.1.4.172.17.0.2|2|2 +1.3.6.1.2.1.4.34.1.11.1.4.172.17.255.255|2|2 +1.3.6.1.2.1.4.37.1.4.1.4.172.17.0.1.90|66|4294967295 +1.3.6.1.2.1.4.37.1.5.1.4.172.17.0.1.90|2|0 +1.3.6.1.2.1.5.1.0|65|0 +1.3.6.1.2.1.5.2.0|65|0 +1.3.6.1.2.1.5.3.0|65|0 +1.3.6.1.2.1.5.4.0|65|0 +1.3.6.1.2.1.5.5.0|65|0 +1.3.6.1.2.1.5.6.0|65|0 +1.3.6.1.2.1.5.7.0|65|0 +1.3.6.1.2.1.5.8.0|65|0 +1.3.6.1.2.1.5.9.0|65|0 +1.3.6.1.2.1.5.10.0|65|0 +1.3.6.1.2.1.5.11.0|65|0 +1.3.6.1.2.1.5.12.0|65|0 +1.3.6.1.2.1.5.13.0|65|0 +1.3.6.1.2.1.5.14.0|65|0 +1.3.6.1.2.1.5.15.0|65|0 +1.3.6.1.2.1.5.16.0|65|0 +1.3.6.1.2.1.5.17.0|65|0 +1.3.6.1.2.1.5.18.0|65|0 +1.3.6.1.2.1.5.19.0|65|0 +1.3.6.1.2.1.5.20.0|65|0 +1.3.6.1.2.1.5.21.0|65|0 +1.3.6.1.2.1.5.22.0|65|0 +1.3.6.1.2.1.5.23.0|65|0 +1.3.6.1.2.1.5.24.0|65|0 +1.3.6.1.2.1.5.25.0|65|0 +1.3.6.1.2.1.5.26.0|65|0 +1.3.6.1.2.1.5.29.1.2.1|65|0 +1.3.6.1.2.1.5.29.1.2.2|65|0 +1.3.6.1.2.1.5.29.1.3.1|65|0 +1.3.6.1.2.1.5.29.1.3.2|65|0 +1.3.6.1.2.1.5.29.1.4.1|65|0 +1.3.6.1.2.1.5.29.1.4.2|65|0 +1.3.6.1.2.1.5.29.1.5.1|65|0 +1.3.6.1.2.1.5.29.1.5.2|65|0 +1.3.6.1.2.1.5.30.1.3.1.0|65|0 +1.3.6.1.2.1.5.30.1.3.1.1|65|0 +1.3.6.1.2.1.5.30.1.3.1.2|65|0 +1.3.6.1.2.1.5.30.1.3.1.3|65|0 +1.3.6.1.2.1.5.30.1.3.1.4|65|0 +1.3.6.1.2.1.5.30.1.3.1.5|65|0 +1.3.6.1.2.1.5.30.1.3.1.8|65|0 +1.3.6.1.2.1.5.30.1.3.1.11|65|0 +1.3.6.1.2.1.5.30.1.3.1.12|65|0 +1.3.6.1.2.1.5.30.1.3.1.13|65|0 +1.3.6.1.2.1.5.30.1.3.1.14|65|0 +1.3.6.1.2.1.5.30.1.3.1.17|65|0 +1.3.6.1.2.1.5.30.1.3.1.18|65|0 +1.3.6.1.2.1.5.30.1.3.1.128|65|0 +1.3.6.1.2.1.5.30.1.3.1.129|65|0 +1.3.6.1.2.1.5.30.1.3.1.130|65|0 +1.3.6.1.2.1.5.30.1.3.1.131|65|0 +1.3.6.1.2.1.5.30.1.3.1.132|65|0 +1.3.6.1.2.1.5.30.1.3.1.133|65|0 +1.3.6.1.2.1.5.30.1.3.1.134|65|0 +1.3.6.1.2.1.5.30.1.3.1.135|65|0 +1.3.6.1.2.1.5.30.1.3.1.136|65|0 +1.3.6.1.2.1.5.30.1.3.1.137|65|0 +1.3.6.1.2.1.5.30.1.3.2.0|65|0 +1.3.6.1.2.1.5.30.1.4.1.0|65|0 +1.3.6.1.2.1.5.30.1.4.1.1|65|0 +1.3.6.1.2.1.5.30.1.4.1.2|65|0 +1.3.6.1.2.1.5.30.1.4.1.3|65|0 +1.3.6.1.2.1.5.30.1.4.1.4|65|0 +1.3.6.1.2.1.5.30.1.4.1.5|65|0 +1.3.6.1.2.1.5.30.1.4.1.8|65|0 +1.3.6.1.2.1.5.30.1.4.1.11|65|0 +1.3.6.1.2.1.5.30.1.4.1.12|65|0 +1.3.6.1.2.1.5.30.1.4.1.13|65|0 +1.3.6.1.2.1.5.30.1.4.1.14|65|0 +1.3.6.1.2.1.5.30.1.4.1.17|65|0 +1.3.6.1.2.1.5.30.1.4.1.18|65|0 +1.3.6.1.2.1.5.30.1.4.1.129|65|0 +1.3.6.1.2.1.5.30.1.4.1.131|65|0 +1.3.6.1.2.1.5.30.1.4.1.132|65|0 +1.3.6.1.2.1.5.30.1.4.1.133|65|0 +1.3.6.1.2.1.5.30.1.4.1.135|65|0 +1.3.6.1.2.1.5.30.1.4.1.136|65|0 +1.3.6.1.2.1.5.30.1.4.1.137|65|0 +1.3.6.1.2.1.5.30.1.4.2.0|65|0 +1.3.6.1.2.1.6.1.0|2|1 +1.3.6.1.2.1.6.2.0|2|200 +1.3.6.1.2.1.6.3.0|2|120000 +1.3.6.1.2.1.6.4.0|2|-1 +1.3.6.1.2.1.6.5.0|65|0 +1.3.6.1.2.1.6.6.0|65|0 +1.3.6.1.2.1.6.7.0|65|0 +1.3.6.1.2.1.6.8.0|65|0 +1.3.6.1.2.1.6.9.0|66|0 +1.3.6.1.2.1.6.10.0|65|0 +1.3.6.1.2.1.6.11.0|65|0 +1.3.6.1.2.1.6.12.0|65|0 +1.3.6.1.2.1.6.13.1.1.127.0.0.1.199.0.0.0.0.0|2|2 +1.3.6.1.2.1.6.13.1.2.127.0.0.1.199.0.0.0.0.0|64x|7f000001 +1.3.6.1.2.1.6.13.1.3.127.0.0.1.199.0.0.0.0.0|2|199 +1.3.6.1.2.1.6.13.1.4.127.0.0.1.199.0.0.0.0.0|64x|00000000 +1.3.6.1.2.1.6.13.1.5.127.0.0.1.199.0.0.0.0.0|2|0 +1.3.6.1.2.1.6.14.0|65|0 +1.3.6.1.2.1.6.15.0|65|0 +1.3.6.1.2.1.6.20.1.4.1.4.127.0.0.1.199|66|6 +1.3.6.1.2.1.7.1.0|65|64967 +1.3.6.1.2.1.7.2.0|65|0 +1.3.6.1.2.1.7.3.0|65|0 +1.3.6.1.2.1.7.4.0|65|64967 +1.3.6.1.2.1.7.5.1.1.0.0.0.0.161|64x|00000000 +1.3.6.1.2.1.7.5.1.1.0.0.0.0.59208|64x|00000000 +1.3.6.1.2.1.7.5.1.2.0.0.0.0.161|2|161 +1.3.6.1.2.1.7.5.1.2.0.0.0.0.59208|2|59208 +1.3.6.1.2.1.7.7.1.8.1.4.0.0.0.0.161.1.4.0.0.0.0.0.136817|66|6 +1.3.6.1.2.1.7.7.1.8.1.4.0.0.0.0.59208.1.4.0.0.0.0.0.314197|66|64 +1.3.6.1.2.1.10.7.2.1.1.90|2|90 +1.3.6.1.2.1.10.7.2.1.3.90|65|0 +1.3.6.1.2.1.10.7.2.1.7.90|65|0 +1.3.6.1.2.1.10.7.2.1.10.90|65|0 +1.3.6.1.2.1.10.7.2.1.11.90|65|0 +1.3.6.1.2.1.10.7.2.1.13.90|65|0 +1.3.6.1.2.1.10.7.2.1.16.90|65|0 +1.3.6.1.2.1.10.7.2.1.19.90|2|3 +1.3.6.1.2.1.11.1.0|65|32502 +1.3.6.1.2.1.11.2.0|65|32502 +1.3.6.1.2.1.11.3.0|65|0 +1.3.6.1.2.1.11.4.0|65|0 +1.3.6.1.2.1.11.5.0|65|0 +1.3.6.1.2.1.11.6.0|65|0 +1.3.6.1.2.1.11.8.0|65|0 +1.3.6.1.2.1.11.9.0|65|0 +1.3.6.1.2.1.11.10.0|65|0 +1.3.6.1.2.1.11.11.0|65|0 +1.3.6.1.2.1.11.12.0|65|0 +1.3.6.1.2.1.11.13.0|65|32512 +1.3.6.1.2.1.11.14.0|65|0 +1.3.6.1.2.1.11.15.0|65|0 +1.3.6.1.2.1.11.16.0|65|32516 +1.3.6.1.2.1.11.17.0|65|0 +1.3.6.1.2.1.11.18.0|65|0 +1.3.6.1.2.1.11.19.0|65|0 +1.3.6.1.2.1.11.20.0|65|0 +1.3.6.1.2.1.11.21.0|65|0 +1.3.6.1.2.1.11.22.0|65|0 +1.3.6.1.2.1.11.24.0|65|0 +1.3.6.1.2.1.11.25.0|65|0 +1.3.6.1.2.1.11.26.0|65|0 +1.3.6.1.2.1.11.27.0|65|0 +1.3.6.1.2.1.11.28.0|65|32526 +1.3.6.1.2.1.11.29.0|65|0 +1.3.6.1.2.1.11.30.0|2|2 +1.3.6.1.2.1.11.31.0|65|0 +1.3.6.1.2.1.11.32.0|65|0 +1.3.6.1.2.1.16.1.1.1.1.90|2|90 +1.3.6.1.2.1.25.1.1.0|67|83761247 +1.3.6.1.2.1.25.1.2.0|4x|323031382d31302d312c393a35373a32352e302c2b303a30 +1.3.6.1.2.1.25.1.3.0|2|393216 +1.3.6.1.2.1.25.1.4.0|4x|22424f4f545f494d4147453d2f626f6f742f6b65726e656c20636f6e736f6c653d747479533020706167655f706f69736f6e3d31206e74703d67617465776179207673797363616c6c3d656d756c6174652070616e69633d3120726f6f743d2f6465762f7372302074657874 +1.3.6.1.2.1.25.1.5.0|66|0 +1.3.6.1.2.1.25.1.6.0|66|4 +1.3.6.1.2.1.25.1.7.0|2|0 +1.3.6.1.2.1.25.2.2.0|2|2046940 +1.3.6.1.2.1.25.2.3.1.1.1|2|1 +1.3.6.1.2.1.25.2.3.1.1.3|2|3 +1.3.6.1.2.1.25.2.3.1.1.6|2|6 +1.3.6.1.2.1.25.2.3.1.1.7|2|7 +1.3.6.1.2.1.25.2.3.1.1.8|2|8 +1.3.6.1.2.1.25.2.3.1.1.10|2|10 +1.3.6.1.2.1.25.2.3.1.1.33|2|33 +1.3.6.1.2.1.25.2.3.1.1.36|2|36 +1.3.6.1.2.1.25.2.3.1.1.52|2|52 +1.3.6.1.2.1.25.2.3.1.1.53|2|53 +1.3.6.1.2.1.25.2.3.1.1.54|2|54 +1.3.6.1.2.1.25.2.3.1.1.55|2|55 +1.3.6.1.2.1.25.2.3.1.1.61|2|61 +1.3.6.1.2.1.25.2.3.1.1.62|2|62 +1.3.6.1.2.1.25.2.3.1.1.63|2|63 +1.3.6.1.2.1.25.2.3.1.1.64|2|64 +1.3.6.1.2.1.25.2.3.1.1.65|2|65 +1.3.6.1.2.1.25.2.3.1.2.1|6|1.3.6.1.2.1.25.2.1.2 +1.3.6.1.2.1.25.2.3.1.2.3|6|1.3.6.1.2.1.25.2.1.3 +1.3.6.1.2.1.25.2.3.1.2.6|6|1.3.6.1.2.1.25.2.1.1 +1.3.6.1.2.1.25.2.3.1.2.7|6|1.3.6.1.2.1.25.2.1.1 +1.3.6.1.2.1.25.2.3.1.2.8|6|1.3.6.1.2.1.25.2.1.1 +1.3.6.1.2.1.25.2.3.1.2.10|6|1.3.6.1.2.1.25.2.1.3 +1.3.6.1.2.1.25.2.3.1.2.33|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.36|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.52|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.53|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.54|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.55|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.61|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.62|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.63|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.64|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.65|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.3.1|4x|506879736963616c206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.3|4x|5669727475616c206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.6|4x|4d656d6f72792062756666657273 +1.3.6.1.2.1.25.2.3.1.3.7|4x|436163686564206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.8|4x|536861726564206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.10|4x|53776170207370616365 +1.3.6.1.2.1.25.2.3.1.3.33|4x|2f646576 +1.3.6.1.2.1.25.2.3.1.3.36|4x|2f7379732f66732f6367726f7570 +1.3.6.1.2.1.25.2.3.1.3.52|4x|2f6574632f7265736f6c762e636f6e66 +1.3.6.1.2.1.25.2.3.1.3.53|4x|2f6574632f686f73746e616d65 +1.3.6.1.2.1.25.2.3.1.3.54|4x|2f6574632f686f737473 +1.3.6.1.2.1.25.2.3.1.3.55|4x|2f6465762f73686d +1.3.6.1.2.1.25.2.3.1.3.61|4x|2f70726f632f6b636f7265 +1.3.6.1.2.1.25.2.3.1.3.62|4x|2f70726f632f6b657973 +1.3.6.1.2.1.25.2.3.1.3.63|4x|2f70726f632f74696d65725f6c697374 +1.3.6.1.2.1.25.2.3.1.3.64|4x|2f70726f632f73636865645f6465627567 +1.3.6.1.2.1.25.2.3.1.3.65|4x|2f7379732f6669726d77617265 +1.3.6.1.2.1.25.2.3.1.4.1|2|1024 +1.3.6.1.2.1.25.2.3.1.4.3|2|1024 +1.3.6.1.2.1.25.2.3.1.4.6|2|1024 +1.3.6.1.2.1.25.2.3.1.4.7|2|1024 +1.3.6.1.2.1.25.2.3.1.4.8|2|1024 +1.3.6.1.2.1.25.2.3.1.4.10|2|1024 +1.3.6.1.2.1.25.2.3.1.4.33|2|4096 +1.3.6.1.2.1.25.2.3.1.4.36|2|4096 +1.3.6.1.2.1.25.2.3.1.4.52|2|4096 +1.3.6.1.2.1.25.2.3.1.4.53|2|4096 +1.3.6.1.2.1.25.2.3.1.4.54|2|4096 +1.3.6.1.2.1.25.2.3.1.4.55|2|4096 +1.3.6.1.2.1.25.2.3.1.4.61|2|4096 +1.3.6.1.2.1.25.2.3.1.4.62|2|4096 +1.3.6.1.2.1.25.2.3.1.4.63|2|4096 +1.3.6.1.2.1.25.2.3.1.4.64|2|4096 +1.3.6.1.2.1.25.2.3.1.4.65|2|4096 +1.3.6.1.2.1.25.2.3.1.5.1|2|2046940 +1.3.6.1.2.1.25.2.3.1.5.3|2|3095512 +1.3.6.1.2.1.25.2.3.1.5.6|2|2046940 +1.3.6.1.2.1.25.2.3.1.5.7|2|1577648 +1.3.6.1.2.1.25.2.3.1.5.8|2|2940 +1.3.6.1.2.1.25.2.3.1.5.10|2|1048572 +1.3.6.1.2.1.25.2.3.1.5.33|2|16384 +1.3.6.1.2.1.25.2.3.1.5.36|2|255867 +1.3.6.1.2.1.25.2.3.1.5.52|2|16448139 +1.3.6.1.2.1.25.2.3.1.5.53|2|16448139 +1.3.6.1.2.1.25.2.3.1.5.54|2|16448139 +1.3.6.1.2.1.25.2.3.1.5.55|2|16384 +1.3.6.1.2.1.25.2.3.1.5.61|2|16384 +1.3.6.1.2.1.25.2.3.1.5.62|2|16384 +1.3.6.1.2.1.25.2.3.1.5.63|2|16384 +1.3.6.1.2.1.25.2.3.1.5.64|2|16384 +1.3.6.1.2.1.25.2.3.1.5.65|2|255867 +1.3.6.1.2.1.25.2.3.1.6.1|2|1969964 +1.3.6.1.2.1.25.2.3.1.6.3|2|1969964 +1.3.6.1.2.1.25.2.3.1.6.6|2|73580 +1.3.6.1.2.1.25.2.3.1.6.7|2|1577648 +1.3.6.1.2.1.25.2.3.1.6.8|2|2940 +1.3.6.1.2.1.25.2.3.1.6.10|2|0 +1.3.6.1.2.1.25.2.3.1.6.33|2|0 +1.3.6.1.2.1.25.2.3.1.6.36|2|0 +1.3.6.1.2.1.25.2.3.1.6.52|2|6493059 +1.3.6.1.2.1.25.2.3.1.6.53|2|6493059 +1.3.6.1.2.1.25.2.3.1.6.54|2|6493059 +1.3.6.1.2.1.25.2.3.1.6.55|2|0 +1.3.6.1.2.1.25.2.3.1.6.61|2|0 +1.3.6.1.2.1.25.2.3.1.6.62|2|0 +1.3.6.1.2.1.25.2.3.1.6.63|2|0 +1.3.6.1.2.1.25.2.3.1.6.64|2|0 +1.3.6.1.2.1.25.2.3.1.6.65|2|0 +1.3.6.1.2.1.25.3.2.1.1.196608|2|196608 +1.3.6.1.2.1.25.3.2.1.1.196609|2|196609 +1.3.6.1.2.1.25.3.2.1.1.262145|2|262145 +1.3.6.1.2.1.25.3.2.1.1.262146|2|262146 +1.3.6.1.2.1.25.3.2.1.1.262147|2|262147 +1.3.6.1.2.1.25.3.2.1.1.262234|2|262234 +1.3.6.1.2.1.25.3.2.1.1.786432|2|786432 +1.3.6.1.2.1.25.3.2.1.2.196608|6|1.3.6.1.2.1.25.3.1.3 +1.3.6.1.2.1.25.3.2.1.2.196609|6|1.3.6.1.2.1.25.3.1.3 +1.3.6.1.2.1.25.3.2.1.2.262145|6|1.3.6.1.2.1.25.3.1.4 +1.3.6.1.2.1.25.3.2.1.2.262146|6|1.3.6.1.2.1.25.3.1.4 +1.3.6.1.2.1.25.3.2.1.2.262147|6|1.3.6.1.2.1.25.3.1.4 +1.3.6.1.2.1.25.3.2.1.2.262234|6|1.3.6.1.2.1.25.3.1.4 +1.3.6.1.2.1.25.3.2.1.2.786432|6|1.3.6.1.2.1.25.3.1.12 +1.3.6.1.2.1.25.3.2.1.3.196608|4x|47656e75696e65496e74656c3a20496e74656c28522920436f726528544d292069372d343537385520435055204020332e303047487a +1.3.6.1.2.1.25.3.2.1.3.196609|4x|47656e75696e65496e74656c3a20496e74656c28522920436f726528544d292069372d343537385520435055204020332e303047487a +1.3.6.1.2.1.25.3.2.1.3.262145|4x|6e6574776f726b20696e74657266616365206c6f +1.3.6.1.2.1.25.3.2.1.3.262146|4x|6e6574776f726b20696e746572666163652074756e6c30 +1.3.6.1.2.1.25.3.2.1.3.262147|4x|6e6574776f726b20696e7465726661636520697036746e6c30 +1.3.6.1.2.1.25.3.2.1.3.262234|4x|6e6574776f726b20696e746572666163652065746830 +1.3.6.1.2.1.25.3.2.1.3.786432|4x|4775657373696e6720746861742074686572652773206120666c6f6174696e6720706f696e7420636f2d70726f636573736f72 +1.3.6.1.2.1.25.3.2.1.4.196608|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.196609|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.262145|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.262146|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.262147|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.262234|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.786432|6|0.0 +1.3.6.1.2.1.25.3.2.1.5.196608|2|2 +1.3.6.1.2.1.25.3.2.1.5.196609|2|2 +1.3.6.1.2.1.25.3.2.1.5.262145|2|2 +1.3.6.1.2.1.25.3.2.1.5.262146|2|5 +1.3.6.1.2.1.25.3.2.1.5.262147|2|5 +1.3.6.1.2.1.25.3.2.1.5.262234|2|2 +1.3.6.1.2.1.25.3.2.1.6.262145|65|0 +1.3.6.1.2.1.25.3.2.1.6.262146|65|0 +1.3.6.1.2.1.25.3.2.1.6.262147|65|0 +1.3.6.1.2.1.25.3.2.1.6.262234|65|0 +1.3.6.1.2.1.25.3.3.1.1.196608|6|0.0 +1.3.6.1.2.1.25.3.3.1.1.196609|6|0.0 +1.3.6.1.2.1.25.3.3.1.2.196608|2|1 +1.3.6.1.2.1.25.3.3.1.2.196609|2|1 +1.3.6.1.2.1.25.3.4.1.1.262145|2|1 +1.3.6.1.2.1.25.3.4.1.1.262146|2|2 +1.3.6.1.2.1.25.3.4.1.1.262147|2|3 +1.3.6.1.2.1.25.3.4.1.1.262234|2|90 +1.3.6.1.2.1.25.3.8.1.1.3|2|3 +1.3.6.1.2.1.25.3.8.1.1.6|2|6 +1.3.6.1.2.1.25.3.8.1.1.22|2|22 +1.3.6.1.2.1.25.3.8.1.1.23|2|23 +1.3.6.1.2.1.25.3.8.1.1.24|2|24 +1.3.6.1.2.1.25.3.8.1.1.25|2|25 +1.3.6.1.2.1.25.3.8.1.1.31|2|31 +1.3.6.1.2.1.25.3.8.1.1.32|2|32 +1.3.6.1.2.1.25.3.8.1.1.33|2|33 +1.3.6.1.2.1.25.3.8.1.1.34|2|34 +1.3.6.1.2.1.25.3.8.1.1.35|2|35 +1.3.6.1.2.1.25.3.8.1.2.3|4x|2f646576 +1.3.6.1.2.1.25.3.8.1.2.6|4x|2f7379732f66732f6367726f7570 +1.3.6.1.2.1.25.3.8.1.2.22|4x|2f6574632f7265736f6c762e636f6e66 +1.3.6.1.2.1.25.3.8.1.2.23|4x|2f6574632f686f73746e616d65 +1.3.6.1.2.1.25.3.8.1.2.24|4x|2f6574632f686f737473 +1.3.6.1.2.1.25.3.8.1.2.25|4x|2f6465762f73686d +1.3.6.1.2.1.25.3.8.1.2.31|4x|2f70726f632f6b636f7265 +1.3.6.1.2.1.25.3.8.1.2.32|4x|2f70726f632f6b657973 +1.3.6.1.2.1.25.3.8.1.2.33|4x|2f70726f632f74696d65725f6c697374 +1.3.6.1.2.1.25.3.8.1.2.34|4x|2f70726f632f73636865645f6465627567 +1.3.6.1.2.1.25.3.8.1.2.35|4x|2f7379732f6669726d77617265 +1.3.6.1.2.1.25.3.8.1.3.3|4| +1.3.6.1.2.1.25.3.8.1.3.6|4| +1.3.6.1.2.1.25.3.8.1.3.22|4| +1.3.6.1.2.1.25.3.8.1.3.23|4| +1.3.6.1.2.1.25.3.8.1.3.24|4| +1.3.6.1.2.1.25.3.8.1.3.25|4| +1.3.6.1.2.1.25.3.8.1.3.31|4| +1.3.6.1.2.1.25.3.8.1.3.32|4| +1.3.6.1.2.1.25.3.8.1.3.33|4| +1.3.6.1.2.1.25.3.8.1.3.34|4| +1.3.6.1.2.1.25.3.8.1.3.35|4| +1.3.6.1.2.1.25.3.8.1.4.3|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.6|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.22|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.23|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.24|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.25|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.31|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.32|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.33|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.34|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.35|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.5.3|2|1 +1.3.6.1.2.1.25.3.8.1.5.6|2|2 +1.3.6.1.2.1.25.3.8.1.5.22|2|1 +1.3.6.1.2.1.25.3.8.1.5.23|2|1 +1.3.6.1.2.1.25.3.8.1.5.24|2|1 +1.3.6.1.2.1.25.3.8.1.5.25|2|1 +1.3.6.1.2.1.25.3.8.1.5.31|2|1 +1.3.6.1.2.1.25.3.8.1.5.32|2|1 +1.3.6.1.2.1.25.3.8.1.5.33|2|1 +1.3.6.1.2.1.25.3.8.1.5.34|2|1 +1.3.6.1.2.1.25.3.8.1.5.35|2|2 +1.3.6.1.2.1.25.3.8.1.6.3|2|2 +1.3.6.1.2.1.25.3.8.1.6.6|2|2 +1.3.6.1.2.1.25.3.8.1.6.22|2|2 +1.3.6.1.2.1.25.3.8.1.6.23|2|2 +1.3.6.1.2.1.25.3.8.1.6.24|2|2 +1.3.6.1.2.1.25.3.8.1.6.25|2|2 +1.3.6.1.2.1.25.3.8.1.6.31|2|2 +1.3.6.1.2.1.25.3.8.1.6.32|2|2 +1.3.6.1.2.1.25.3.8.1.6.33|2|2 +1.3.6.1.2.1.25.3.8.1.6.34|2|2 +1.3.6.1.2.1.25.3.8.1.6.35|2|2 +1.3.6.1.2.1.25.3.8.1.7.3|2|33 +1.3.6.1.2.1.25.3.8.1.7.6|2|36 +1.3.6.1.2.1.25.3.8.1.7.22|2|52 +1.3.6.1.2.1.25.3.8.1.7.23|2|53 +1.3.6.1.2.1.25.3.8.1.7.24|2|54 +1.3.6.1.2.1.25.3.8.1.7.25|2|55 +1.3.6.1.2.1.25.3.8.1.7.31|2|61 +1.3.6.1.2.1.25.3.8.1.7.32|2|62 +1.3.6.1.2.1.25.3.8.1.7.33|2|63 +1.3.6.1.2.1.25.3.8.1.7.34|2|64 +1.3.6.1.2.1.25.3.8.1.7.35|2|65 +1.3.6.1.2.1.25.3.8.1.8.3|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.6|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.22|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.23|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.24|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.25|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.31|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.32|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.33|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.34|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.35|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.3|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.6|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.22|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.23|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.24|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.25|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.31|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.32|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.33|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.34|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.35|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.4.2.1.1.1|2|1 +1.3.6.1.2.1.25.4.2.1.1.6|2|6 +1.3.6.1.2.1.25.4.2.1.1.26|2|26 +1.3.6.1.2.1.25.4.2.1.1.64|2|64 +1.3.6.1.2.1.25.4.2.1.2.1|4x|626f6f7473747261702e7368 +1.3.6.1.2.1.25.4.2.1.2.6|4|snmpd +1.3.6.1.2.1.25.4.2.1.2.26|4|bash +1.3.6.1.2.1.25.4.2.1.2.64|4|snmpwalk +1.3.6.1.2.1.25.4.2.1.3.1|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.26|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.64|6|0.0 +1.3.6.1.2.1.25.4.2.1.4.1|4x|2f62696e2f7368 +1.3.6.1.2.1.25.4.2.1.4.6|4|snmpd +1.3.6.1.2.1.25.4.2.1.4.26|4|bash +1.3.6.1.2.1.25.4.2.1.4.64|4|snmpwalk +1.3.6.1.2.1.25.4.2.1.5.1|4x|2f626f6f7473747261702e7368202d64202d56202d63202f6574632f736e6d702f736e6d70642e636f6e66 +1.3.6.1.2.1.25.4.2.1.5.6|4x|2d66202d64202d56202d63202f6574632f736e6d702f736e6d70642e636f6e66 +1.3.6.1.2.1.25.4.2.1.5.26|4| +1.3.6.1.2.1.25.4.2.1.5.64|4x|2d763263202d63 +1.3.6.1.2.1.25.4.2.1.6.1|2|4 +1.3.6.1.2.1.25.4.2.1.6.6|2|4 +1.3.6.1.2.1.25.4.2.1.6.26|2|4 +1.3.6.1.2.1.25.4.2.1.6.64|2|4 +1.3.6.1.2.1.25.4.2.1.7.1|2|2 +1.3.6.1.2.1.25.4.2.1.7.6|2|1 +1.3.6.1.2.1.25.4.2.1.7.26|2|2 +1.3.6.1.2.1.25.4.2.1.7.64|2|2 +1.3.6.1.2.1.25.5.1.1.1.1|2|3 +1.3.6.1.2.1.25.5.1.1.1.6|2|2636 +1.3.6.1.2.1.25.5.1.1.1.26|2|12 +1.3.6.1.2.1.25.5.1.1.1.64|2|5 +1.3.6.1.2.1.25.5.1.1.2.1|2|2672 +1.3.6.1.2.1.25.5.1.1.2.6|2|17500 +1.3.6.1.2.1.25.5.1.1.2.26|2|3500 +1.3.6.1.2.1.25.5.1.1.2.64|2|7664 +1.3.6.1.2.1.25.6.3.1.1.1|2|1 +1.3.6.1.2.1.25.6.3.1.1.2|2|2 +1.3.6.1.2.1.25.6.3.1.1.3|2|3 +1.3.6.1.2.1.25.6.3.1.1.4|2|4 +1.3.6.1.2.1.25.6.3.1.1.5|2|5 +1.3.6.1.2.1.25.6.3.1.1.6|2|6 +1.3.6.1.2.1.25.6.3.1.1.7|2|7 +1.3.6.1.2.1.25.6.3.1.1.8|2|8 +1.3.6.1.2.1.25.6.3.1.1.9|2|9 +1.3.6.1.2.1.25.6.3.1.1.10|2|10 +1.3.6.1.2.1.25.6.3.1.1.11|2|11 +1.3.6.1.2.1.25.6.3.1.1.12|2|12 +1.3.6.1.2.1.25.6.3.1.1.13|2|13 +1.3.6.1.2.1.25.6.3.1.1.14|2|14 +1.3.6.1.2.1.25.6.3.1.1.15|2|15 +1.3.6.1.2.1.25.6.3.1.1.16|2|16 +1.3.6.1.2.1.25.6.3.1.1.17|2|17 +1.3.6.1.2.1.25.6.3.1.1.18|2|18 +1.3.6.1.2.1.25.6.3.1.1.19|2|19 +1.3.6.1.2.1.25.6.3.1.1.20|2|20 +1.3.6.1.2.1.25.6.3.1.1.21|2|21 +1.3.6.1.2.1.25.6.3.1.1.22|2|22 +1.3.6.1.2.1.25.6.3.1.1.23|2|23 +1.3.6.1.2.1.25.6.3.1.1.24|2|24 +1.3.6.1.2.1.25.6.3.1.1.25|2|25 +1.3.6.1.2.1.25.6.3.1.1.26|2|26 +1.3.6.1.2.1.25.6.3.1.1.27|2|27 +1.3.6.1.2.1.25.6.3.1.1.28|2|28 +1.3.6.1.2.1.25.6.3.1.1.29|2|29 +1.3.6.1.2.1.25.6.3.1.1.30|2|30 +1.3.6.1.2.1.25.6.3.1.1.31|2|31 +1.3.6.1.2.1.25.6.3.1.1.32|2|32 +1.3.6.1.2.1.25.6.3.1.1.33|2|33 +1.3.6.1.2.1.25.6.3.1.1.34|2|34 +1.3.6.1.2.1.25.6.3.1.1.35|2|35 +1.3.6.1.2.1.25.6.3.1.1.36|2|36 +1.3.6.1.2.1.25.6.3.1.1.37|2|37 +1.3.6.1.2.1.25.6.3.1.1.38|2|38 +1.3.6.1.2.1.25.6.3.1.1.39|2|39 +1.3.6.1.2.1.25.6.3.1.1.40|2|40 +1.3.6.1.2.1.25.6.3.1.1.41|2|41 +1.3.6.1.2.1.25.6.3.1.1.42|2|42 +1.3.6.1.2.1.25.6.3.1.1.43|2|43 +1.3.6.1.2.1.25.6.3.1.1.44|2|44 +1.3.6.1.2.1.25.6.3.1.1.45|2|45 +1.3.6.1.2.1.25.6.3.1.1.46|2|46 +1.3.6.1.2.1.25.6.3.1.1.47|2|47 +1.3.6.1.2.1.25.6.3.1.1.48|2|48 +1.3.6.1.2.1.25.6.3.1.1.49|2|49 +1.3.6.1.2.1.25.6.3.1.1.50|2|50 +1.3.6.1.2.1.25.6.3.1.1.51|2|51 +1.3.6.1.2.1.25.6.3.1.1.52|2|52 +1.3.6.1.2.1.25.6.3.1.1.53|2|53 +1.3.6.1.2.1.25.6.3.1.1.54|2|54 +1.3.6.1.2.1.25.6.3.1.1.55|2|55 +1.3.6.1.2.1.25.6.3.1.1.56|2|56 +1.3.6.1.2.1.25.6.3.1.1.57|2|57 +1.3.6.1.2.1.25.6.3.1.1.58|2|58 +1.3.6.1.2.1.25.6.3.1.1.59|2|59 +1.3.6.1.2.1.25.6.3.1.1.60|2|60 +1.3.6.1.2.1.25.6.3.1.1.61|2|61 +1.3.6.1.2.1.25.6.3.1.1.62|2|62 +1.3.6.1.2.1.25.6.3.1.1.63|2|63 +1.3.6.1.2.1.25.6.3.1.1.64|2|64 +1.3.6.1.2.1.25.6.3.1.1.65|2|65 +1.3.6.1.2.1.25.6.3.1.1.66|2|66 +1.3.6.1.2.1.25.6.3.1.1.67|2|67 +1.3.6.1.2.1.25.6.3.1.1.68|2|68 +1.3.6.1.2.1.25.6.3.1.1.69|2|69 +1.3.6.1.2.1.25.6.3.1.1.70|2|70 +1.3.6.1.2.1.25.6.3.1.1.71|2|71 +1.3.6.1.2.1.25.6.3.1.1.72|2|72 +1.3.6.1.2.1.25.6.3.1.1.73|2|73 +1.3.6.1.2.1.25.6.3.1.1.74|2|74 +1.3.6.1.2.1.25.6.3.1.1.75|2|75 +1.3.6.1.2.1.25.6.3.1.1.76|2|76 +1.3.6.1.2.1.25.6.3.1.1.77|2|77 +1.3.6.1.2.1.25.6.3.1.1.78|2|78 +1.3.6.1.2.1.25.6.3.1.1.79|2|79 +1.3.6.1.2.1.25.6.3.1.1.80|2|80 +1.3.6.1.2.1.25.6.3.1.1.81|2|81 +1.3.6.1.2.1.25.6.3.1.1.82|2|82 +1.3.6.1.2.1.25.6.3.1.1.83|2|83 +1.3.6.1.2.1.25.6.3.1.1.84|2|84 +1.3.6.1.2.1.25.6.3.1.1.85|2|85 +1.3.6.1.2.1.25.6.3.1.1.86|2|86 +1.3.6.1.2.1.25.6.3.1.1.87|2|87 +1.3.6.1.2.1.25.6.3.1.1.88|2|88 +1.3.6.1.2.1.25.6.3.1.1.89|2|89 +1.3.6.1.2.1.25.6.3.1.1.90|2|90 +1.3.6.1.2.1.25.6.3.1.1.91|2|91 +1.3.6.1.2.1.25.6.3.1.1.92|2|92 +1.3.6.1.2.1.25.6.3.1.1.93|2|93 +1.3.6.1.2.1.25.6.3.1.1.94|2|94 +1.3.6.1.2.1.25.6.3.1.1.95|2|95 +1.3.6.1.2.1.25.6.3.1.1.96|2|96 +1.3.6.1.2.1.25.6.3.1.1.97|2|97 +1.3.6.1.2.1.25.6.3.1.1.98|2|98 +1.3.6.1.2.1.25.6.3.1.1.99|2|99 +1.3.6.1.2.1.25.6.3.1.1.100|2|100 +1.3.6.1.2.1.25.6.3.1.1.101|2|101 +1.3.6.1.2.1.25.6.3.1.1.102|2|102 +1.3.6.1.2.1.25.6.3.1.1.103|2|103 +1.3.6.1.2.1.25.6.3.1.1.104|2|104 +1.3.6.1.2.1.25.6.3.1.1.105|2|105 +1.3.6.1.2.1.25.6.3.1.1.106|2|106 +1.3.6.1.2.1.25.6.3.1.1.107|2|107 +1.3.6.1.2.1.25.6.3.1.1.108|2|108 +1.3.6.1.2.1.25.6.3.1.1.109|2|109 +1.3.6.1.2.1.25.6.3.1.1.110|2|110 +1.3.6.1.2.1.25.6.3.1.1.111|2|111 +1.3.6.1.2.1.25.6.3.1.1.112|2|112 +1.3.6.1.2.1.25.6.3.1.1.113|2|113 +1.3.6.1.2.1.25.6.3.1.1.114|2|114 +1.3.6.1.2.1.25.6.3.1.1.115|2|115 +1.3.6.1.2.1.25.6.3.1.1.116|2|116 +1.3.6.1.2.1.25.6.3.1.1.117|2|117 +1.3.6.1.2.1.25.6.3.1.1.118|2|118 +1.3.6.1.2.1.25.6.3.1.1.119|2|119 +1.3.6.1.2.1.25.6.3.1.1.120|2|120 +1.3.6.1.2.1.25.6.3.1.1.121|2|121 +1.3.6.1.2.1.25.6.3.1.1.122|2|122 +1.3.6.1.2.1.25.6.3.1.1.123|2|123 +1.3.6.1.2.1.25.6.3.1.1.124|2|124 +1.3.6.1.2.1.25.6.3.1.1.125|2|125 +1.3.6.1.2.1.25.6.3.1.1.126|2|126 +1.3.6.1.2.1.25.6.3.1.1.127|2|127 +1.3.6.1.2.1.25.6.3.1.1.128|2|128 +1.3.6.1.2.1.25.6.3.1.1.129|2|129 +1.3.6.1.2.1.25.6.3.1.1.130|2|130 +1.3.6.1.2.1.25.6.3.1.1.131|2|131 +1.3.6.1.2.1.25.6.3.1.1.132|2|132 +1.3.6.1.2.1.25.6.3.1.1.133|2|133 +1.3.6.1.2.1.25.6.3.1.1.134|2|134 +1.3.6.1.2.1.25.6.3.1.1.135|2|135 +1.3.6.1.2.1.25.6.3.1.1.136|2|136 +1.3.6.1.2.1.25.6.3.1.1.137|2|137 +1.3.6.1.2.1.25.6.3.1.1.138|2|138 +1.3.6.1.2.1.25.6.3.1.1.139|2|139 +1.3.6.1.2.1.25.6.3.1.1.140|2|140 +1.3.6.1.2.1.25.6.3.1.1.141|2|141 +1.3.6.1.2.1.25.6.3.1.1.142|2|142 +1.3.6.1.2.1.25.6.3.1.1.143|2|143 +1.3.6.1.2.1.25.6.3.1.1.144|2|144 +1.3.6.1.2.1.25.6.3.1.1.145|2|145 +1.3.6.1.2.1.25.6.3.1.1.146|2|146 +1.3.6.1.2.1.25.6.3.1.1.147|2|147 +1.3.6.1.2.1.25.6.3.1.1.148|2|148 +1.3.6.1.2.1.25.6.3.1.1.149|2|149 +1.3.6.1.2.1.25.6.3.1.1.150|2|150 +1.3.6.1.2.1.25.6.3.1.1.151|2|151 +1.3.6.1.2.1.25.6.3.1.1.152|2|152 +1.3.6.1.2.1.25.6.3.1.1.153|2|153 +1.3.6.1.2.1.25.6.3.1.1.154|2|154 +1.3.6.1.2.1.25.6.3.1.1.155|2|155 +1.3.6.1.2.1.25.6.3.1.1.156|2|156 +1.3.6.1.2.1.25.6.3.1.1.157|2|157 +1.3.6.1.2.1.25.6.3.1.1.158|2|158 +1.3.6.1.2.1.25.6.3.1.1.159|2|159 +1.3.6.1.2.1.25.6.3.1.1.160|2|160 +1.3.6.1.2.1.25.6.3.1.1.161|2|161 +1.3.6.1.2.1.25.6.3.1.1.162|2|162 +1.3.6.1.2.1.25.6.3.1.1.163|2|163 +1.3.6.1.2.1.25.6.3.1.1.164|2|164 +1.3.6.1.2.1.25.6.3.1.1.165|2|165 +1.3.6.1.2.1.25.6.3.1.1.166|2|166 +1.3.6.1.2.1.25.6.3.1.1.167|2|167 +1.3.6.1.2.1.25.6.3.1.1.168|2|168 +1.3.6.1.2.1.25.6.3.1.1.169|2|169 +1.3.6.1.2.1.25.6.3.1.1.170|2|170 +1.3.6.1.2.1.25.6.3.1.1.171|2|171 +1.3.6.1.2.1.25.6.3.1.1.172|2|172 +1.3.6.1.2.1.25.6.3.1.1.173|2|173 +1.3.6.1.2.1.25.6.3.1.1.174|2|174 +1.3.6.1.2.1.25.6.3.1.1.175|2|175 +1.3.6.1.2.1.25.6.3.1.1.176|2|176 +1.3.6.1.2.1.25.6.3.1.1.177|2|177 +1.3.6.1.2.1.25.6.3.1.1.178|2|178 +1.3.6.1.2.1.25.6.3.1.1.179|2|179 +1.3.6.1.2.1.25.6.3.1.1.180|2|180 +1.3.6.1.2.1.25.6.3.1.1.181|2|181 +1.3.6.1.2.1.25.6.3.1.1.182|2|182 +1.3.6.1.2.1.25.6.3.1.1.183|2|183 +1.3.6.1.2.1.25.6.3.1.1.184|2|184 +1.3.6.1.2.1.25.6.3.1.1.185|2|185 +1.3.6.1.2.1.25.6.3.1.1.186|2|186 +1.3.6.1.2.1.25.6.3.1.1.187|2|187 +1.3.6.1.2.1.25.6.3.1.1.188|2|188 +1.3.6.1.2.1.25.6.3.1.2.1|4x|63656e746f732d72656c656173652d372d342e313730382e656c372e63656e746f73 +1.3.6.1.2.1.25.6.3.1.2.2|4x|66696c6573797374656d2d332e322d32312e656c37 +1.3.6.1.2.1.25.6.3.1.2.3|4x|6e6375727365732d626173652d352e392d31342e32303133303531312e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.4|4x|62696e642d6c6963656e73652d392e392e342d35312e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.5|4x|6e73732d736f66746f6b6e2d66726565626c2d332e32382e332d382e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.6|4x|676c6962632d322e31372d3139362e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.7|4x|6c6962737464632b2b2d342e382e352d31362e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.8|4x|626173682d342e322e34362d32392e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.9|4x|706372652d382e33322d31372e656c37 +1.3.6.1.2.1.25.6.3.1.2.10|4x|7a6c69622d312e322e372d31372e656c37 +1.3.6.1.2.1.25.6.3.1.2.11|4x|787a2d6c6962732d352e322e322d312e656c37 +1.3.6.1.2.1.25.6.3.1.2.12|4x|706f70742d312e31332d31362e656c37 +1.3.6.1.2.1.25.6.3.1.2.13|4x|63686b636f6e6669672d312e372e342d312e656c37 +1.3.6.1.2.1.25.6.3.1.2.14|4x|7365642d342e322e322d352e656c37 +1.3.6.1.2.1.25.6.3.1.2.15|4x|6c69626666692d332e302e31332d31382e656c37 +1.3.6.1.2.1.25.6.3.1.2.16|4x|6c6962617474722d322e342e34362d31322e656c37 +1.3.6.1.2.1.25.6.3.1.2.17|4x|6c69626361702d322e32322d392e656c37 +1.3.6.1.2.1.25.6.3.1.2.18|4x|6c6962636f6d5f6572722d312e34322e392d31302e656c37 +1.3.6.1.2.1.25.6.3.1.2.19|4x|726561646c696e652d362e322d31302e656c37 +1.3.6.1.2.1.25.6.3.1.2.20|4x|677265702d322e32302d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.21|4x|6c6962757569642d322e32332e322d34332e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.22|4x|6c696269646e2d312e32382d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.23|4x|66696e647574696c732d342e352e31312d352e656c37 +1.3.6.1.2.1.25.6.3.1.2.24|4x|646275732d6c6962732d312e362e31322d31372e656c37 +1.3.6.1.2.1.25.6.3.1.2.25|4x|61756469742d6c6962732d322e372e362d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.26|4x|6c696261737375616e2d322e312e302d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.27|4x|787a2d352e322e322d312e656c37 +1.3.6.1.2.1.25.6.3.1.2.28|4x|6b65797574696c732d6c6962732d312e352e382d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.29|4x|61636c2d322e322e35312d31322e656c37 +1.3.6.1.2.1.25.6.3.1.2.30|4x|63797275732d7361736c2d6c69622d322e312e32362d32312e656c37 +1.3.6.1.2.1.25.6.3.1.2.31|4x|6b6d6f642d6c6962732d32302d31352e656c375f342e37 +1.3.6.1.2.1.25.6.3.1.2.32|4x|656c667574696c732d64656661756c742d79616d612d73636f70652d302e3136382d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.33|4x|6e6375727365732d352e392d31342e32303133303531312e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.34|4x|6c696273656d616e6167652d322e352d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.35|4x|6c69627461736e312d342e31302d312e656c37 +1.3.6.1.2.1.25.6.3.1.2.36|4x|63612d6365727469666963617465732d323031372e322e31342d37312e656c37 +1.3.6.1.2.1.25.6.3.1.2.37|4x|6f70656e73736c2d6c6962732d312e302e326b2d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.38|4x|736861646f772d7574696c732d342e312e352e312d32342e656c37 +1.3.6.1.2.1.25.6.3.1.2.39|4x|6c69626d6f756e742d322e32332e322d34332e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.40|4x|7368617265642d6d696d652d696e666f2d312e382d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.41|4x|637261636b6c69622d322e392e302d31312e656c37 +1.3.6.1.2.1.25.6.3.1.2.42|4x|6c696270777175616c6974792d312e322e332d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.43|4x|73797374656d642d6c6962732d3231392d34322e656c375f342e3130 +1.3.6.1.2.1.25.6.3.1.2.44|4x|706b67636f6e6669672d302e32372e312d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.45|4x|646275732d676c69622d302e3130302d372e656c37 +1.3.6.1.2.1.25.6.3.1.2.46|4x|6c69627574656d707465722d312e312e362d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.47|4x|6e73732d332e32382e342d31352e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.48|4x|6e73732d746f6f6c732d332e32382e342d31352e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.49|4x|6c69626375726c2d372e32392e302d34322e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.2.50|4x|72706d2d6c6962732d342e31312e332d32352e656c37 +1.3.6.1.2.1.25.6.3.1.2.51|4x|6f70656e6c6461702d322e342e34342d352e656c37 +1.3.6.1.2.1.25.6.3.1.2.52|4x|7574696c2d6c696e75782d322e32332e322d34332e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.53|4x|7172656e636f64652d6c6962732d332e342e312d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.54|4x|6465766963652d6d61707065722d312e30322e3134302d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.55|4x|637279707473657475702d6c6962732d312e372e342d332e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.2.56|4x|6b6d6f642d32302d31352e656c375f342e37 +1.3.6.1.2.1.25.6.3.1.2.57|4x|646275732d312e362e31322d31372e656c37 +1.3.6.1.2.1.25.6.3.1.2.58|4x|69707574696c732d32303136303330382d31302e656c37 +1.3.6.1.2.1.25.6.3.1.2.59|4x|707974686f6e2d6c6962732d322e372e352d35382e656c37 +1.3.6.1.2.1.25.6.3.1.2.60|4x|707974686f6e2d696e6970617273652d302e342d392e656c37 +1.3.6.1.2.1.25.6.3.1.2.61|4x|79756d2d6d657461646174612d7061727365722d312e312e342d31302e656c37 +1.3.6.1.2.1.25.6.3.1.2.62|4x|707974686f6e2d70796375726c2d372e31392e302d31392e656c37 +1.3.6.1.2.1.25.6.3.1.2.63|4x|6c6962786d6c322d707974686f6e2d322e392e312d362e656c375f322e33 +1.3.6.1.2.1.25.6.3.1.2.64|4x|707974686f6e2d636861726465742d322e322e312d312e656c375f31 +1.3.6.1.2.1.25.6.3.1.2.65|4x|686f73746e616d652d332e31332d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.66|4x|7074682d322e302e372d32332e656c37 +1.3.6.1.2.1.25.6.3.1.2.67|4x|6770676d652d312e332e322d352e656c37 +1.3.6.1.2.1.25.6.3.1.2.68|4x|72706d2d6275696c642d6c6962732d342e31312e332d32352e656c37 +1.3.6.1.2.1.25.6.3.1.2.69|4x|79756d2d706c7567696e2d666173746573746d6972726f722d312e312e33312d34322e656c37 +1.3.6.1.2.1.25.6.3.1.2.70|4x|79756d2d706c7567696e2d6f766c2d312e312e33312d34322e656c37 +1.3.6.1.2.1.25.6.3.1.2.71|4x|7061737377642d302e37392d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.72|4x|726f6f7466696c65732d382e312d31312e656c37 +1.3.6.1.2.1.25.6.3.1.2.73|4x|6e65742d736e6d702d6c6962732d352e372e322d32382e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.2.74|4x|6c69626e666e65746c696e6b2d312e302e312d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.75|4x|6c69626d6e6c2d312e302e332d372e656c37 +1.3.6.1.2.1.25.6.3.1.2.76|4x|69707461626c65732d312e342e32312d31382e332e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.77|4x|6d6172696164622d6c6962732d352e352e35362d322e656c37 +1.3.6.1.2.1.25.6.3.1.2.78|4x|73797376696e69742d746f6f6c732d322e38382d31342e6473662e656c37 +1.3.6.1.2.1.25.6.3.1.2.79|4x|67726f66662d626173652d312e32322e322d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.80|4x|7065726c2d485454502d54696e792d302e3033332d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.81|4x|7065726c2d506f642d5065726c646f632d332e32302d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.82|4x|7065726c2d546578742d5061727365576f7264732d332e32392d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.83|4x|7065726c2d506f642d55736167652d312e36332d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.84|4x|7065726c2d6c6962732d352e31362e332d3239322e656c37 +1.3.6.1.2.1.25.6.3.1.2.85|4x|7065726c2d4578706f727465722d352e36382d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.86|4x|7065726c2d46696c7465722d312e34392d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.87|4x|7065726c2d536f636b65742d322e3031302d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.88|4x|7065726c2d53746f7261626c652d322e34352d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.89|4x|7065726c2d5363616c61722d4c6973742d5574696c732d312e32372d3234382e656c37 +1.3.6.1.2.1.25.6.3.1.2.90|4x|7065726c2d746872656164732d312e38372d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.91|4x|7065726c2d46696c652d506174682d322e30392d322e656c37 +1.3.6.1.2.1.25.6.3.1.2.92|4x|7065726c2d4765746f70742d4c6f6e672d322e34302d322e656c37 +1.3.6.1.2.1.25.6.3.1.2.93|4x|7065726c2d446174612d44756d7065722d322e3134352d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.94|4x|6e65742d736e6d702d352e372e322d32382e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.2.95|4x|6c69626763632d342e382e352d31362e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.96|4x|73657475702d322e382e37312d372e656c37 +1.3.6.1.2.1.25.6.3.1.2.97|4x|6261736573797374656d2d31302e302d372e656c372e63656e746f73 +1.3.6.1.2.1.25.6.3.1.2.98|4x|747a646174612d32303138642d312e656c37 +1.3.6.1.2.1.25.6.3.1.2.99|4x|676c6962632d636f6d6d6f6e2d322e31372d3139362e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.100|4x|6e7370722d342e31332e312d312e302e656c375f33 +1.3.6.1.2.1.25.6.3.1.2.101|4x|6e6375727365732d6c6962732d352e392d31342e32303133303531312e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.102|4x|6c69627365706f6c2d322e352d362e656c37 +1.3.6.1.2.1.25.6.3.1.2.103|4x|6c696273656c696e75782d322e352d31312e656c37 +1.3.6.1.2.1.25.6.3.1.2.104|4x|696e666f2d352e312d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.105|4x|627a6970322d6c6962732d312e302e362d31332e656c37 +1.3.6.1.2.1.25.6.3.1.2.106|4x|6c696264622d352e332e32312d32312e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.107|4x|6e73732d7574696c2d332e32382e342d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.108|4x|656c667574696c732d6c6962656c662d302e3136382d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.109|4x|6c69626770672d6572726f722d312e31322d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.110|4x|6c696261636c2d322e322e35312d31322e656c37 +1.3.6.1.2.1.25.6.3.1.2.111|4x|6c6962786d6c322d322e392e312d362e656c375f322e33 +1.3.6.1.2.1.25.6.3.1.2.112|4x|6c69626763727970742d312e352e332d31342e656c37 +1.3.6.1.2.1.25.6.3.1.2.113|4x|6c75612d352e312e342d31352e656c37 +1.3.6.1.2.1.25.6.3.1.2.114|4x|6370696f2d322e31312d32352e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.115|4x|73716c6974652d332e372e31372d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.116|4x|6761776b2d342e302e322d342e656c375f332e31 +1.3.6.1.2.1.25.6.3.1.2.117|4x|646966667574696c732d332e332d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.118|4x|65787061742d322e312e302d31302e656c375f33 +1.3.6.1.2.1.25.6.3.1.2.119|4x|6c69626361702d6e672d302e372e352d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.120|4x|6e73732d736f66746f6b6e2d332e32382e332d382e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.121|4x|7031312d6b69742d302e32332e352d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.122|4x|66696c652d6c6962732d352e31312d33332e656c37 +1.3.6.1.2.1.25.6.3.1.2.123|4x|7461722d312e32362d33322e656c37 +1.3.6.1.2.1.25.6.3.1.2.124|4x|70696e656e7472792d302e382e312d31372e656c37 +1.3.6.1.2.1.25.6.3.1.2.125|4x|6c696264622d7574696c732d352e332e32312d32312e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.126|4x|656c667574696c732d6c6962732d302e3136382d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.127|4x|676d702d362e302e302d31352e656c37 +1.3.6.1.2.1.25.6.3.1.2.128|4x|757374722d312e302e342d31362e656c37 +1.3.6.1.2.1.25.6.3.1.2.129|4x|6c6962766572746f2d302e322e352d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.130|4x|7031312d6b69742d74727573742d302e32332e352d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.131|4x|6b7262352d6c6962732d312e31352e312d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.132|4x|636f72657574696c732d382e32322d31382e656c37 +1.3.6.1.2.1.25.6.3.1.2.133|4x|6c6962626c6b69642d322e32332e322d34332e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.134|4x|676c6962322d322e35302e332d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.135|4x|677a69702d312e352d392e656c37 +1.3.6.1.2.1.25.6.3.1.2.136|4x|637261636b6c69622d64696374732d322e392e302d31312e656c37 +1.3.6.1.2.1.25.6.3.1.2.137|4x|70616d2d312e312e382d31382e656c37 +1.3.6.1.2.1.25.6.3.1.2.138|4x|70726f6370732d6e672d332e332e31302d31362e656c37 +1.3.6.1.2.1.25.6.3.1.2.139|4x|676f626a6563742d696e74726f7370656374696f6e2d312e35302e302d312e656c37 +1.3.6.1.2.1.25.6.3.1.2.140|4x|6e73732d70656d2d312e302e332d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.141|4x|6e73732d737973696e69742d332e32382e342d31352e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.142|4x|62696e7574696c732d322e32352e312d33322e626173652e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.143|4x|6c6962737368322d312e342e332d31302e656c375f322e31 +1.3.6.1.2.1.25.6.3.1.2.144|4x|6375726c2d372e32392e302d34322e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.2.145|4x|72706d2d342e31312e332d32352e656c37 +1.3.6.1.2.1.25.6.3.1.2.146|4x|6c6962757365722d302e36302d372e656c375f31 +1.3.6.1.2.1.25.6.3.1.2.147|4x|686172646c696e6b2d312e302d31392e656c37 +1.3.6.1.2.1.25.6.3.1.2.148|4x|6b70617274782d302e342e392d3131312e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.149|4x|6465766963652d6d61707065722d6c6962732d312e30322e3134302d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.150|4x|6472616375742d3033332d3530322e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.2.151|4x|73797374656d642d3231392d34322e656c375f342e3130 +1.3.6.1.2.1.25.6.3.1.2.152|4x|6764626d2d312e31302d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.153|4x|707974686f6e2d322e372e352d35382e656c37 +1.3.6.1.2.1.25.6.3.1.2.154|4x|646275732d707974686f6e2d312e312e312d392e656c37 +1.3.6.1.2.1.25.6.3.1.2.155|4x|707974686f6e2d676f626a6563742d626173652d332e32322e302d312e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.2.156|4x|70796c69626c7a6d612d302e352e332d31312e656c37 +1.3.6.1.2.1.25.6.3.1.2.157|4x|707974686f6e2d75726c677261626265722d332e31302d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.158|4x|707978617474722d302e352e312d352e656c37 +1.3.6.1.2.1.25.6.3.1.2.159|4x|707974686f6e2d6b69746368656e2d312e312e312d352e656c37 +1.3.6.1.2.1.25.6.3.1.2.160|4x|676e757067322d322e302e32322d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.161|4x|70796770676d652d302e332d392e656c37 +1.3.6.1.2.1.25.6.3.1.2.162|4x|72706d2d707974686f6e2d342e31312e332d32352e656c37 +1.3.6.1.2.1.25.6.3.1.2.163|4x|79756d2d332e342e332d3135342e656c372e63656e746f732e31 +1.3.6.1.2.1.25.6.3.1.2.164|4x|79756d2d7574696c732d312e312e33312d34322e656c37 +1.3.6.1.2.1.25.6.3.1.2.165|4x|76696d2d6d696e696d616c2d372e342e3136302d322e656c37 +1.3.6.1.2.1.25.6.3.1.2.166|4x|6770672d7075626b65792d66346138306562352d3533613766663462 +1.3.6.1.2.1.25.6.3.1.2.167|4x|7463705f77726170706572732d6c6962732d372e362d37372e656c37 +1.3.6.1.2.1.25.6.3.1.2.168|4x|6c6d5f73656e736f72732d6c6962732d332e342e302d342e3230313630363031676974663931383565352e656c37 +1.3.6.1.2.1.25.6.3.1.2.169|4x|6c69626e657466696c7465725f636f6e6e747261636b2d312e302e362d312e656c375f33 +1.3.6.1.2.1.25.6.3.1.2.170|4x|6970726f7574652d332e31302e302d38372e656c37 +1.3.6.1.2.1.25.6.3.1.2.171|4x|73797374656d642d737973762d3231392d34322e656c375f342e3130 +1.3.6.1.2.1.25.6.3.1.2.172|4x|696e6974736372697074732d392e34392e33392d312e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.2.173|4x|7065726c2d706172656e742d302e3232352d3234342e656c37 +1.3.6.1.2.1.25.6.3.1.2.174|4x|7065726c2d706f646c61746f72732d322e352e312d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.175|4x|7065726c2d506f642d457363617065732d312e30342d3239322e656c37 +1.3.6.1.2.1.25.6.3.1.2.176|4x|7065726c2d456e636f64652d322e35312d372e656c37 +1.3.6.1.2.1.25.6.3.1.2.177|4x|7065726c2d6d6163726f732d352e31362e332d3239322e656c37 +1.3.6.1.2.1.25.6.3.1.2.178|4x|7065726c2d54696d652d48695265732d312e393732352d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.179|4x|7065726c2d636f6e7374616e742d312e32372d322e656c37 +1.3.6.1.2.1.25.6.3.1.2.180|4x|7065726c2d54696d652d4c6f63616c2d312e323330302d322e656c37 +1.3.6.1.2.1.25.6.3.1.2.181|4x|7065726c2d436172702d312e32362d3234342e656c37 +1.3.6.1.2.1.25.6.3.1.2.182|4x|7065726c2d50617468546f6f6c732d332e34302d352e656c37 +1.3.6.1.2.1.25.6.3.1.2.183|4x|7065726c2d746872656164732d7368617265642d312e34332d362e656c37 +1.3.6.1.2.1.25.6.3.1.2.184|4x|7065726c2d46696c652d54656d702d302e32332e30312d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.185|4x|7065726c2d506f642d53696d706c652d332e32382d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.186|4x|7065726c2d352e31362e332d3239322e656c37 +1.3.6.1.2.1.25.6.3.1.2.187|4x|6e65742d736e6d702d6167656e742d6c6962732d352e372e322d32382e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.2.188|4x|6e65742d736e6d702d7574696c732d352e372e322d32382e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.3.1|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.2|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.3|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.4|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.5|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.6|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.7|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.8|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.9|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.10|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.11|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.12|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.13|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.14|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.15|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.16|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.17|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.18|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.19|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.20|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.21|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.22|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.23|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.24|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.25|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.26|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.27|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.28|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.29|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.30|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.31|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.32|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.33|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.34|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.35|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.36|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.37|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.38|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.39|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.40|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.41|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.42|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.43|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.44|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.45|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.46|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.47|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.48|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.49|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.50|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.51|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.52|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.53|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.54|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.55|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.56|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.57|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.58|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.59|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.60|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.61|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.62|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.63|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.64|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.65|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.66|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.67|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.68|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.69|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.70|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.71|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.72|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.73|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.74|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.75|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.76|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.77|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.78|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.79|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.80|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.81|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.82|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.83|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.84|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.85|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.86|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.87|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.88|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.89|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.90|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.91|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.92|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.93|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.94|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.95|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.96|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.97|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.98|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.99|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.100|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.101|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.102|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.103|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.104|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.105|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.106|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.107|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.108|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.109|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.110|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.111|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.112|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.113|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.114|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.115|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.116|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.117|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.118|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.119|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.120|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.121|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.122|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.123|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.124|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.125|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.126|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.127|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.128|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.129|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.130|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.131|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.132|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.133|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.134|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.135|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.136|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.137|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.138|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.139|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.140|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.141|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.142|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.143|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.144|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.145|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.146|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.147|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.148|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.149|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.150|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.151|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.152|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.153|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.154|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.155|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.156|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.157|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.158|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.159|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.160|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.161|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.162|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.163|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.164|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.165|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.166|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.167|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.168|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.169|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.170|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.171|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.172|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.173|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.174|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.175|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.176|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.177|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.178|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.179|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.180|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.181|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.182|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.183|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.184|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.185|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.186|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.187|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.188|6|0.0 +1.3.6.1.2.1.25.6.3.1.4.1|2|2 +1.3.6.1.2.1.25.6.3.1.4.2|2|2 +1.3.6.1.2.1.25.6.3.1.4.3|2|2 +1.3.6.1.2.1.25.6.3.1.4.4|2|4 +1.3.6.1.2.1.25.6.3.1.4.5|2|2 +1.3.6.1.2.1.25.6.3.1.4.6|2|2 +1.3.6.1.2.1.25.6.3.1.4.7|2|2 +1.3.6.1.2.1.25.6.3.1.4.8|2|2 +1.3.6.1.2.1.25.6.3.1.4.9|2|2 +1.3.6.1.2.1.25.6.3.1.4.10|2|2 +1.3.6.1.2.1.25.6.3.1.4.11|2|2 +1.3.6.1.2.1.25.6.3.1.4.12|2|2 +1.3.6.1.2.1.25.6.3.1.4.13|2|2 +1.3.6.1.2.1.25.6.3.1.4.14|2|4 +1.3.6.1.2.1.25.6.3.1.4.15|2|2 +1.3.6.1.2.1.25.6.3.1.4.16|2|2 +1.3.6.1.2.1.25.6.3.1.4.17|2|2 +1.3.6.1.2.1.25.6.3.1.4.18|2|4 +1.3.6.1.2.1.25.6.3.1.4.19|2|2 +1.3.6.1.2.1.25.6.3.1.4.20|2|4 +1.3.6.1.2.1.25.6.3.1.4.21|2|4 +1.3.6.1.2.1.25.6.3.1.4.22|2|2 +1.3.6.1.2.1.25.6.3.1.4.23|2|4 +1.3.6.1.2.1.25.6.3.1.4.24|2|4 +1.3.6.1.2.1.25.6.3.1.4.25|2|4 +1.3.6.1.2.1.25.6.3.1.4.26|2|2 +1.3.6.1.2.1.25.6.3.1.4.27|2|4 +1.3.6.1.2.1.25.6.3.1.4.28|2|2 +1.3.6.1.2.1.25.6.3.1.4.29|2|2 +1.3.6.1.2.1.25.6.3.1.4.30|2|2 +1.3.6.1.2.1.25.6.3.1.4.31|2|2 +1.3.6.1.2.1.25.6.3.1.4.32|2|4 +1.3.6.1.2.1.25.6.3.1.4.33|2|2 +1.3.6.1.2.1.25.6.3.1.4.34|2|2 +1.3.6.1.2.1.25.6.3.1.4.35|2|2 +1.3.6.1.2.1.25.6.3.1.4.36|2|2 +1.3.6.1.2.1.25.6.3.1.4.37|2|2 +1.3.6.1.2.1.25.6.3.1.4.38|2|2 +1.3.6.1.2.1.25.6.3.1.4.39|2|4 +1.3.6.1.2.1.25.6.3.1.4.40|2|2 +1.3.6.1.2.1.25.6.3.1.4.41|2|2 +1.3.6.1.2.1.25.6.3.1.4.42|2|2 +1.3.6.1.2.1.25.6.3.1.4.43|2|4 +1.3.6.1.2.1.25.6.3.1.4.44|2|4 +1.3.6.1.2.1.25.6.3.1.4.45|2|2 +1.3.6.1.2.1.25.6.3.1.4.46|2|2 +1.3.6.1.2.1.25.6.3.1.4.47|2|2 +1.3.6.1.2.1.25.6.3.1.4.48|2|2 +1.3.6.1.2.1.25.6.3.1.4.49|2|4 +1.3.6.1.2.1.25.6.3.1.4.50|2|4 +1.3.6.1.2.1.25.6.3.1.4.51|2|2 +1.3.6.1.2.1.25.6.3.1.4.52|2|2 +1.3.6.1.2.1.25.6.3.1.4.53|2|4 +1.3.6.1.2.1.25.6.3.1.4.54|2|2 +1.3.6.1.2.1.25.6.3.1.4.55|2|2 +1.3.6.1.2.1.25.6.3.1.4.56|2|2 +1.3.6.1.2.1.25.6.3.1.4.57|2|2 +1.3.6.1.2.1.25.6.3.1.4.58|2|2 +1.3.6.1.2.1.25.6.3.1.4.59|2|4 +1.3.6.1.2.1.25.6.3.1.4.60|2|4 +1.3.6.1.2.1.25.6.3.1.4.61|2|4 +1.3.6.1.2.1.25.6.3.1.4.62|2|4 +1.3.6.1.2.1.25.6.3.1.4.63|2|4 +1.3.6.1.2.1.25.6.3.1.4.64|2|4 +1.3.6.1.2.1.25.6.3.1.4.65|2|2 +1.3.6.1.2.1.25.6.3.1.4.66|2|2 +1.3.6.1.2.1.25.6.3.1.4.67|2|4 +1.3.6.1.2.1.25.6.3.1.4.68|2|4 +1.3.6.1.2.1.25.6.3.1.4.69|2|2 +1.3.6.1.2.1.25.6.3.1.4.70|2|2 +1.3.6.1.2.1.25.6.3.1.4.71|2|2 +1.3.6.1.2.1.25.6.3.1.4.72|2|2 +1.3.6.1.2.1.25.6.3.1.4.73|2|4 +1.3.6.1.2.1.25.6.3.1.4.74|2|2 +1.3.6.1.2.1.25.6.3.1.4.75|2|2 +1.3.6.1.2.1.25.6.3.1.4.76|2|2 +1.3.6.1.2.1.25.6.3.1.4.77|2|4 +1.3.6.1.2.1.25.6.3.1.4.78|2|2 +1.3.6.1.2.1.25.6.3.1.4.79|2|4 +1.3.6.1.2.1.25.6.3.1.4.80|2|4 +1.3.6.1.2.1.25.6.3.1.4.81|2|4 +1.3.6.1.2.1.25.6.3.1.4.82|2|4 +1.3.6.1.2.1.25.6.3.1.4.83|2|4 +1.3.6.1.2.1.25.6.3.1.4.84|2|4 +1.3.6.1.2.1.25.6.3.1.4.85|2|4 +1.3.6.1.2.1.25.6.3.1.4.86|2|4 +1.3.6.1.2.1.25.6.3.1.4.87|2|4 +1.3.6.1.2.1.25.6.3.1.4.88|2|4 +1.3.6.1.2.1.25.6.3.1.4.89|2|4 +1.3.6.1.2.1.25.6.3.1.4.90|2|4 +1.3.6.1.2.1.25.6.3.1.4.91|2|4 +1.3.6.1.2.1.25.6.3.1.4.92|2|4 +1.3.6.1.2.1.25.6.3.1.4.93|2|4 +1.3.6.1.2.1.25.6.3.1.4.94|2|2 +1.3.6.1.2.1.25.6.3.1.4.95|2|2 +1.3.6.1.2.1.25.6.3.1.4.96|2|2 +1.3.6.1.2.1.25.6.3.1.4.97|2|2 +1.3.6.1.2.1.25.6.3.1.4.98|2|2 +1.3.6.1.2.1.25.6.3.1.4.99|2|2 +1.3.6.1.2.1.25.6.3.1.4.100|2|2 +1.3.6.1.2.1.25.6.3.1.4.101|2|2 +1.3.6.1.2.1.25.6.3.1.4.102|2|2 +1.3.6.1.2.1.25.6.3.1.4.103|2|2 +1.3.6.1.2.1.25.6.3.1.4.104|2|2 +1.3.6.1.2.1.25.6.3.1.4.105|2|2 +1.3.6.1.2.1.25.6.3.1.4.106|2|2 +1.3.6.1.2.1.25.6.3.1.4.107|2|2 +1.3.6.1.2.1.25.6.3.1.4.108|2|4 +1.3.6.1.2.1.25.6.3.1.4.109|2|2 +1.3.6.1.2.1.25.6.3.1.4.110|2|2 +1.3.6.1.2.1.25.6.3.1.4.111|2|4 +1.3.6.1.2.1.25.6.3.1.4.112|2|2 +1.3.6.1.2.1.25.6.3.1.4.113|2|4 +1.3.6.1.2.1.25.6.3.1.4.114|2|4 +1.3.6.1.2.1.25.6.3.1.4.115|2|4 +1.3.6.1.2.1.25.6.3.1.4.116|2|4 +1.3.6.1.2.1.25.6.3.1.4.117|2|4 +1.3.6.1.2.1.25.6.3.1.4.118|2|2 +1.3.6.1.2.1.25.6.3.1.4.119|2|2 +1.3.6.1.2.1.25.6.3.1.4.120|2|2 +1.3.6.1.2.1.25.6.3.1.4.121|2|4 +1.3.6.1.2.1.25.6.3.1.4.122|2|4 +1.3.6.1.2.1.25.6.3.1.4.123|2|4 +1.3.6.1.2.1.25.6.3.1.4.124|2|4 +1.3.6.1.2.1.25.6.3.1.4.125|2|4 +1.3.6.1.2.1.25.6.3.1.4.126|2|4 +1.3.6.1.2.1.25.6.3.1.4.127|2|2 +1.3.6.1.2.1.25.6.3.1.4.128|2|2 +1.3.6.1.2.1.25.6.3.1.4.129|2|4 +1.3.6.1.2.1.25.6.3.1.4.130|2|4 +1.3.6.1.2.1.25.6.3.1.4.131|2|2 +1.3.6.1.2.1.25.6.3.1.4.132|2|2 +1.3.6.1.2.1.25.6.3.1.4.133|2|4 +1.3.6.1.2.1.25.6.3.1.4.134|2|4 +1.3.6.1.2.1.25.6.3.1.4.135|2|4 +1.3.6.1.2.1.25.6.3.1.4.136|2|2 +1.3.6.1.2.1.25.6.3.1.4.137|2|2 +1.3.6.1.2.1.25.6.3.1.4.138|2|4 +1.3.6.1.2.1.25.6.3.1.4.139|2|4 +1.3.6.1.2.1.25.6.3.1.4.140|2|4 +1.3.6.1.2.1.25.6.3.1.4.141|2|2 +1.3.6.1.2.1.25.6.3.1.4.142|2|4 +1.3.6.1.2.1.25.6.3.1.4.143|2|2 +1.3.6.1.2.1.25.6.3.1.4.144|2|4 +1.3.6.1.2.1.25.6.3.1.4.145|2|2 +1.3.6.1.2.1.25.6.3.1.4.146|2|2 +1.3.6.1.2.1.25.6.3.1.4.147|2|2 +1.3.6.1.2.1.25.6.3.1.4.148|2|2 +1.3.6.1.2.1.25.6.3.1.4.149|2|2 +1.3.6.1.2.1.25.6.3.1.4.150|2|2 +1.3.6.1.2.1.25.6.3.1.4.151|2|4 +1.3.6.1.2.1.25.6.3.1.4.152|2|2 +1.3.6.1.2.1.25.6.3.1.4.153|2|4 +1.3.6.1.2.1.25.6.3.1.4.154|2|4 +1.3.6.1.2.1.25.6.3.1.4.155|2|4 +1.3.6.1.2.1.25.6.3.1.4.156|2|4 +1.3.6.1.2.1.25.6.3.1.4.157|2|4 +1.3.6.1.2.1.25.6.3.1.4.158|2|4 +1.3.6.1.2.1.25.6.3.1.4.159|2|4 +1.3.6.1.2.1.25.6.3.1.4.160|2|4 +1.3.6.1.2.1.25.6.3.1.4.161|2|4 +1.3.6.1.2.1.25.6.3.1.4.162|2|4 +1.3.6.1.2.1.25.6.3.1.4.163|2|2 +1.3.6.1.2.1.25.6.3.1.4.164|2|4 +1.3.6.1.2.1.25.6.3.1.4.165|2|4 +1.3.6.1.2.1.25.6.3.1.4.166|2|4 +1.3.6.1.2.1.25.6.3.1.4.167|2|2 +1.3.6.1.2.1.25.6.3.1.4.168|2|2 +1.3.6.1.2.1.25.6.3.1.4.169|2|2 +1.3.6.1.2.1.25.6.3.1.4.170|2|4 +1.3.6.1.2.1.25.6.3.1.4.171|2|4 +1.3.6.1.2.1.25.6.3.1.4.172|2|2 +1.3.6.1.2.1.25.6.3.1.4.173|2|4 +1.3.6.1.2.1.25.6.3.1.4.174|2|4 +1.3.6.1.2.1.25.6.3.1.4.175|2|4 +1.3.6.1.2.1.25.6.3.1.4.176|2|4 +1.3.6.1.2.1.25.6.3.1.4.177|2|4 +1.3.6.1.2.1.25.6.3.1.4.178|2|4 +1.3.6.1.2.1.25.6.3.1.4.179|2|4 +1.3.6.1.2.1.25.6.3.1.4.180|2|4 +1.3.6.1.2.1.25.6.3.1.4.181|2|4 +1.3.6.1.2.1.25.6.3.1.4.182|2|4 +1.3.6.1.2.1.25.6.3.1.4.183|2|4 +1.3.6.1.2.1.25.6.3.1.4.184|2|4 +1.3.6.1.2.1.25.6.3.1.4.185|2|4 +1.3.6.1.2.1.25.6.3.1.4.186|2|4 +1.3.6.1.2.1.25.6.3.1.4.187|2|4 +1.3.6.1.2.1.25.6.3.1.4.188|2|4 +1.3.6.1.2.1.25.6.3.1.5.1|4x|323031382d342d322c31383a33383a32352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.2|4x|323031382d342d322c31383a33383a32352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.3|4x|323031382d342d322c31383a33383a32362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.4|4x|323031382d342d322c31383a33383a32362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.5|4x|323031382d342d322c31383a33383a32362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.6|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.7|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.8|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.9|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.10|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.11|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.12|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.13|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.14|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.15|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.16|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.17|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.18|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.19|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.20|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.21|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.22|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.23|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.24|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.25|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.26|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.27|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.28|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.29|4x|323031382d342d322c31383a33383a33332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.30|4x|323031382d342d322c31383a33383a33332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.31|4x|323031382d342d322c31383a33383a33332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.32|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.33|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.34|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.35|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.36|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.37|4x|323031382d342d322c31383a33383a34302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.38|4x|323031382d342d322c31383a33383a34312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.39|4x|323031382d342d322c31383a33383a34312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.40|4x|323031382d342d322c31383a33383a34312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.41|4x|323031382d342d322c31383a33383a34312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.42|4x|323031382d342d322c31383a33383a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.43|4x|323031382d342d322c31383a33383a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.44|4x|323031382d342d322c31383a33383a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.45|4x|323031382d342d322c31383a33383a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.46|4x|323031382d342d322c31383a33383a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.47|4x|323031382d342d322c31383a33383a34342e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.48|4x|323031382d342d322c31383a33383a34342e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.49|4x|323031382d342d322c31383a33383a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.50|4x|323031382d342d322c31383a33383a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.51|4x|323031382d342d322c31383a33383a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.52|4x|323031382d342d322c31383a33383a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.53|4x|323031382d342d322c31383a33383a34362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.54|4x|323031382d342d322c31383a33383a34362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.55|4x|323031382d342d322c31383a33383a34362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.56|4x|323031382d342d322c31383a33383a34362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.57|4x|323031382d342d322c31383a33383a34372e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.58|4x|323031382d342d322c31383a33383a34372e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.59|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.60|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.61|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.62|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.63|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.64|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.65|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.66|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.67|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.68|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.69|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.70|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.71|4x|323031382d342d322c31383a33383a35342e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.72|4x|323031382d342d322c31383a33383a35342e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.73|4x|323031382d342d31332c32303a35313a34322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.74|4x|323031382d342d31332c32303a35313a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.75|4x|323031382d342d31332c32303a35313a34342e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.76|4x|323031382d342d31332c32303a35313a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.77|4x|323031382d342d31332c32303a35313a34372e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.78|4x|323031382d342d31332c32303a35313a34382e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.79|4x|323031382d342d31332c32303a35313a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.80|4x|323031382d342d31332c32303a35313a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.81|4x|323031382d342d31332c32303a35313a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.82|4x|323031382d342d31332c32303a35313a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.83|4x|323031382d342d31332c32303a35313a35312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.84|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.85|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.86|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.87|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.88|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.89|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.90|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.91|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.92|4x|323031382d342d31332c32303a35313a35332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.93|4x|323031382d342d31332c32303a35313a35352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.94|4x|323031382d342d31332c32303a35313a35362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.95|4x|323031382d342d322c31383a33383a32352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.96|4x|323031382d342d322c31383a33383a32352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.97|4x|323031382d342d322c31383a33383a32362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.98|4x|323031382d342d322c31383a33383a32362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.99|4x|323031382d342d322c31383a33383a32392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.100|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.101|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.102|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.103|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.104|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.105|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.106|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.107|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.108|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.109|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.110|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.111|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.112|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.113|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.114|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.115|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.116|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.117|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.118|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.119|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.120|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.121|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.122|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.123|4x|323031382d342d322c31383a33383a33332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.124|4x|323031382d342d322c31383a33383a33332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.125|4x|323031382d342d322c31383a33383a33332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.126|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.127|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.128|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.129|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.130|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.131|4x|323031382d342d322c31383a33383a34302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.132|4x|323031382d342d322c31383a33383a34312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.133|4x|323031382d342d322c31383a33383a34312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.134|4x|323031382d342d322c31383a33383a34312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.135|4x|323031382d342d322c31383a33383a34312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.136|4x|323031382d342d322c31383a33383a34322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.137|4x|323031382d342d322c31383a33383a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.138|4x|323031382d342d322c31383a33383a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.139|4x|323031382d342d322c31383a33383a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.140|4x|323031382d342d322c31383a33383a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.141|4x|323031382d342d322c31383a33383a34342e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.142|4x|323031382d342d322c31383a33383a34342e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.143|4x|323031382d342d322c31383a33383a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.144|4x|323031382d342d322c31383a33383a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.145|4x|323031382d342d322c31383a33383a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.146|4x|323031382d342d322c31383a33383a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.147|4x|323031382d342d322c31383a33383a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.148|4x|323031382d342d322c31383a33383a34362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.149|4x|323031382d342d322c31383a33383a34362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.150|4x|323031382d342d322c31383a33383a34362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.151|4x|323031382d342d322c31383a33383a34372e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.152|4x|323031382d342d322c31383a33383a34372e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.153|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.154|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.155|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.156|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.157|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.158|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.159|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.160|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.161|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.162|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.163|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.164|4x|323031382d342d322c31383a33383a35312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.165|4x|323031382d342d322c31383a33383a35342e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.166|4x|323031382d342d31332c32303a35313a34302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.167|4x|323031382d342d31332c32303a35313a34322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.168|4x|323031382d342d31332c32303a35313a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.169|4x|323031382d342d31332c32303a35313a34342e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.170|4x|323031382d342d31332c32303a35313a34362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.171|4x|323031382d342d31332c32303a35313a34382e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.172|4x|323031382d342d31332c32303a35313a34382e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.173|4x|323031382d342d31332c32303a35313a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.174|4x|323031382d342d31332c32303a35313a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.175|4x|323031382d342d31332c32303a35313a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.176|4x|323031382d342d31332c32303a35313a35312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.177|4x|323031382d342d31332c32303a35313a35312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.178|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.179|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.180|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.181|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.182|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.183|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.184|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.185|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.186|4x|323031382d342d31332c32303a35313a35352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.187|4x|323031382d342d31332c32303a35313a35352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.188|4x|323031382d342d31332c32303a35313a35372e302c2b303a30 +1.3.6.1.2.1.28.1.1.2.1|66|0 +1.3.6.1.2.1.28.1.1.5.1|66|0 +1.3.6.1.2.1.28.2.1.4.1.26|66|0 +1.3.6.1.2.1.28.2.1.7.1.26|66|0 +1.3.6.1.2.1.28.2.1.31.1.1|2|-1 +1.3.6.1.2.1.28.2.1.31.1.2|2|-1 +1.3.6.1.2.1.28.2.1.31.1.3|2|-1 +1.3.6.1.2.1.28.2.1.31.1.4|2|-1 +1.3.6.1.2.1.28.2.1.31.1.5|2|-1 +1.3.6.1.2.1.28.2.1.31.1.6|2|-1 +1.3.6.1.2.1.28.2.1.31.1.7|2|-1 +1.3.6.1.2.1.28.2.1.31.1.8|2|-1 +1.3.6.1.2.1.28.2.1.31.1.9|2|-1 +1.3.6.1.2.1.28.2.1.31.1.10|2|-1 +1.3.6.1.2.1.28.2.1.31.1.11|2|-1 +1.3.6.1.2.1.28.2.1.31.1.12|2|-1 +1.3.6.1.2.1.28.2.1.31.1.13|2|-1 +1.3.6.1.2.1.28.2.1.31.1.14|2|-1 +1.3.6.1.2.1.28.2.1.31.1.15|2|-1 +1.3.6.1.2.1.28.2.1.31.1.16|2|-1 +1.3.6.1.2.1.28.2.1.31.1.17|2|-1 +1.3.6.1.2.1.28.2.1.31.1.18|2|-1 +1.3.6.1.2.1.28.2.1.31.1.19|2|-1 +1.3.6.1.2.1.28.2.1.31.1.20|2|-1 +1.3.6.1.2.1.28.2.1.31.1.21|2|-1 +1.3.6.1.2.1.28.2.1.31.1.22|2|-1 +1.3.6.1.2.1.28.2.1.31.1.23|2|-1 +1.3.6.1.2.1.28.2.1.31.1.24|2|-1 +1.3.6.1.2.1.28.2.1.31.1.25|2|-1 +1.3.6.1.2.1.31.1.1.1.1.1|4|lo +1.3.6.1.2.1.31.1.1.1.1.2|4|tunl0 +1.3.6.1.2.1.31.1.1.1.1.3|4|ip6tnl0 +1.3.6.1.2.1.31.1.1.1.1.90|4|eth0 +1.3.6.1.2.1.31.1.1.1.2.1|65|0 +1.3.6.1.2.1.31.1.1.1.2.2|65|0 +1.3.6.1.2.1.31.1.1.1.2.3|65|0 +1.3.6.1.2.1.31.1.1.1.2.90|65|0 +1.3.6.1.2.1.31.1.1.1.3.1|65|0 +1.3.6.1.2.1.31.1.1.1.3.2|65|0 +1.3.6.1.2.1.31.1.1.1.3.3|65|0 +1.3.6.1.2.1.31.1.1.1.3.90|65|0 +1.3.6.1.2.1.31.1.1.1.4.1|65|0 +1.3.6.1.2.1.31.1.1.1.4.2|65|0 +1.3.6.1.2.1.31.1.1.1.4.3|65|0 +1.3.6.1.2.1.31.1.1.1.4.90|65|0 +1.3.6.1.2.1.31.1.1.1.5.1|65|0 +1.3.6.1.2.1.31.1.1.1.5.2|65|0 +1.3.6.1.2.1.31.1.1.1.5.3|65|0 +1.3.6.1.2.1.31.1.1.1.5.90|65|0 +1.3.6.1.2.1.31.1.1.1.6.1|70|5300203 +1.3.6.1.2.1.31.1.1.1.6.2|70|0 +1.3.6.1.2.1.31.1.1.1.6.3|70|0 +1.3.6.1.2.1.31.1.1.1.6.90|70|2928 +1.3.6.1.2.1.31.1.1.1.7.1|70|63808 +1.3.6.1.2.1.31.1.1.1.7.2|70|0 +1.3.6.1.2.1.31.1.1.1.7.3|70|0 +1.3.6.1.2.1.31.1.1.1.7.90|70|40 +1.3.6.1.2.1.31.1.1.1.8.1|70|0 +1.3.6.1.2.1.31.1.1.1.8.2|70|0 +1.3.6.1.2.1.31.1.1.1.8.3|70|0 +1.3.6.1.2.1.31.1.1.1.8.90|70|0 +1.3.6.1.2.1.31.1.1.1.9.1|70|0 +1.3.6.1.2.1.31.1.1.1.9.2|70|0 +1.3.6.1.2.1.31.1.1.1.9.3|70|0 +1.3.6.1.2.1.31.1.1.1.9.90|70|0 +1.3.6.1.2.1.31.1.1.1.10.1|70|5300203 +1.3.6.1.2.1.31.1.1.1.10.2|70|0 +1.3.6.1.2.1.31.1.1.1.10.3|70|0 +1.3.6.1.2.1.31.1.1.1.10.90|70|0 +1.3.6.1.2.1.31.1.1.1.11.1|70|63808 +1.3.6.1.2.1.31.1.1.1.11.2|70|0 +1.3.6.1.2.1.31.1.1.1.11.3|70|0 +1.3.6.1.2.1.31.1.1.1.11.90|70|0 +1.3.6.1.2.1.31.1.1.1.12.1|70|0 +1.3.6.1.2.1.31.1.1.1.12.2|70|0 +1.3.6.1.2.1.31.1.1.1.12.3|70|0 +1.3.6.1.2.1.31.1.1.1.12.90|70|0 +1.3.6.1.2.1.31.1.1.1.13.1|70|0 +1.3.6.1.2.1.31.1.1.1.13.2|70|0 +1.3.6.1.2.1.31.1.1.1.13.3|70|0 +1.3.6.1.2.1.31.1.1.1.13.90|70|0 +1.3.6.1.2.1.31.1.1.1.15.1|66|10 +1.3.6.1.2.1.31.1.1.1.15.2|66|0 +1.3.6.1.2.1.31.1.1.1.15.3|66|0 +1.3.6.1.2.1.31.1.1.1.15.90|66|10000 +1.3.6.1.2.1.31.1.1.1.16.1|2|2 +1.3.6.1.2.1.31.1.1.1.16.2|2|2 +1.3.6.1.2.1.31.1.1.1.16.3|2|2 +1.3.6.1.2.1.31.1.1.1.16.90|2|2 +1.3.6.1.2.1.31.1.1.1.17.1|2|2 +1.3.6.1.2.1.31.1.1.1.17.2|2|1 +1.3.6.1.2.1.31.1.1.1.17.3|2|1 +1.3.6.1.2.1.31.1.1.1.17.90|2|1 +1.3.6.1.2.1.31.1.1.1.18.1|4| +1.3.6.1.2.1.31.1.1.1.18.2|4| +1.3.6.1.2.1.31.1.1.1.18.3|4| +1.3.6.1.2.1.31.1.1.1.18.90|4| +1.3.6.1.2.1.31.1.1.1.19.1|67|0 +1.3.6.1.2.1.31.1.1.1.19.2|67|0 +1.3.6.1.2.1.31.1.1.1.19.3|67|0 +1.3.6.1.2.1.31.1.1.1.19.90|67|0 +1.3.6.1.2.1.31.1.5.0|67|0 +1.3.6.1.2.1.55.1.1.0|2|2 +1.3.6.1.2.1.55.1.2.0|2|64 +1.3.6.1.2.1.88.1.1.1.0|2|1 +1.3.6.1.2.1.88.1.1.2.0|66|0 +1.3.6.1.2.1.88.1.1.3.0|66|0 +1.3.6.1.2.1.88.1.1.4.0|66|0 +1.3.6.1.2.1.88.1.1.5.0|65|0 +1.3.6.1.2.1.88.1.2.1.0|65|0 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.11.95.108.105.110.107.85.112.68.111.119.110.1|6|1.3.6.1.2.1.2.2.1.1 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.11.95.108.105.110.107.85.112.68.111.119.110.2|6|1.3.6.1.2.1.2.2.1.7 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.11.95.108.105.110.107.85.112.68.111.119.110.3|6|1.3.6.1.2.1.2.2.1.8 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.1|6|1.3.6.1.2.1.88.2.1.1 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.2|6|1.3.6.1.2.1.88.2.1.2 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.3|6|1.3.6.1.2.1.88.2.1.3 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.4|6|1.3.6.1.2.1.88.2.1.4 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.5|6|1.3.6.1.2.1.88.2.1.6 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.1|6|1.3.6.1.2.1.88.2.1.1 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.2|6|1.3.6.1.2.1.88.2.1.2 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.3|6|1.3.6.1.2.1.88.2.1.3 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.4|6|1.3.6.1.2.1.88.2.1.4 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.5|6|1.3.6.1.2.1.88.2.1.5 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.11.95.108.105.110.107.85.112.68.111.119.110.1|2|1 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.11.95.108.105.110.107.85.112.68.111.119.110.2|2|1 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.11.95.108.105.110.107.85.112.68.111.119.110.3|2|1 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.1|2|2 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.2|2|2 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.3|2|2 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.4|2|2 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.5|2|2 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.1|2|2 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.2|2|2 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.3|2|2 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.4|2|2 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.5|2|2 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.11.95.108.105.110.107.85.112.68.111.119.110.1|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.11.95.108.105.110.107.85.112.68.111.119.110.2|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.11.95.108.105.110.107.85.112.68.111.119.110.3|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.1|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.2|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.3|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.4|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.5|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.1|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.2|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.3|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.4|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.5|2|1 +1.3.6.1.2.1.88.1.4.2.1.2.6.95.115.110.109.112.100.95.108.105.110.107.68.111.119.110|4| +1.3.6.1.2.1.88.1.4.2.1.2.6.95.115.110.109.112.100.95.108.105.110.107.85.112|4| +1.3.6.1.2.1.88.1.4.2.1.2.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.105.108.117.114.101|4| +1.3.6.1.2.1.88.1.4.2.1.2.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.108.108.105.110.103|4| +1.3.6.1.2.1.88.1.4.2.1.2.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.105.114.101.100|4| +1.3.6.1.2.1.88.1.4.2.1.2.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.82.105.115.105.110.103|4| +1.3.6.1.2.1.88.1.4.2.1.3.6.95.115.110.109.112.100.95.108.105.110.107.68.111.119.110|4x|8000 +1.3.6.1.2.1.88.1.4.2.1.3.6.95.115.110.109.112.100.95.108.105.110.107.85.112|4x|8000 +1.3.6.1.2.1.88.1.4.2.1.3.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.105.108.117.114.101|4x|8000 +1.3.6.1.2.1.88.1.4.2.1.3.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.108.108.105.110.103|4x|8000 +1.3.6.1.2.1.88.1.4.2.1.3.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.105.114.101.100|4x|8000 +1.3.6.1.2.1.88.1.4.2.1.3.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.82.105.115.105.110.103|4x|8000 +1.3.6.1.2.1.88.1.4.2.1.4.6.95.115.110.109.112.100.95.108.105.110.107.68.111.119.110|2|1 +1.3.6.1.2.1.88.1.4.2.1.4.6.95.115.110.109.112.100.95.108.105.110.107.85.112|2|1 +1.3.6.1.2.1.88.1.4.2.1.4.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.105.108.117.114.101|2|1 +1.3.6.1.2.1.88.1.4.2.1.4.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.108.108.105.110.103|2|1 +1.3.6.1.2.1.88.1.4.2.1.4.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.105.114.101.100|2|1 +1.3.6.1.2.1.88.1.4.2.1.4.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.82.105.115.105.110.103|2|1 +1.3.6.1.2.1.88.1.4.2.1.5.6.95.115.110.109.112.100.95.108.105.110.107.68.111.119.110|2|1 +1.3.6.1.2.1.88.1.4.2.1.5.6.95.115.110.109.112.100.95.108.105.110.107.85.112|2|1 +1.3.6.1.2.1.88.1.4.2.1.5.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.105.108.117.114.101|2|1 +1.3.6.1.2.1.88.1.4.2.1.5.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.108.108.105.110.103|2|1 +1.3.6.1.2.1.88.1.4.2.1.5.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.105.114.101.100|2|1 +1.3.6.1.2.1.88.1.4.2.1.5.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.82.105.115.105.110.103|2|1 +1.3.6.1.2.1.88.1.4.3.1.1.6.95.115.110.109.112.100.95.108.105.110.107.68.111.119.110|6|1.3.6.1.6.3.1.1.5.3 +1.3.6.1.2.1.88.1.4.3.1.1.6.95.115.110.109.112.100.95.108.105.110.107.85.112|6|1.3.6.1.6.3.1.1.5.4 +1.3.6.1.2.1.88.1.4.3.1.1.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.105.108.117.114.101|6|1.3.6.1.2.1.88.2.0.4 +1.3.6.1.2.1.88.1.4.3.1.1.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.108.108.105.110.103|6|1.3.6.1.2.1.88.2.0.3 +1.3.6.1.2.1.88.1.4.3.1.1.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.105.114.101.100|6|1.3.6.1.2.1.88.2.0.1 +1.3.6.1.2.1.88.1.4.3.1.1.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.82.105.115.105.110.103|6|1.3.6.1.2.1.88.2.0.2 +1.3.6.1.2.1.88.1.4.3.1.2.6.95.115.110.109.112.100.95.108.105.110.107.68.111.119.110|4x|5f736e6d7064 +1.3.6.1.2.1.88.1.4.3.1.2.6.95.115.110.109.112.100.95.108.105.110.107.85.112|4x|5f736e6d7064 +1.3.6.1.2.1.88.1.4.3.1.2.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.105.108.117.114.101|4x|5f736e6d7064 +1.3.6.1.2.1.88.1.4.3.1.2.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.108.108.105.110.103|4x|5f736e6d7064 +1.3.6.1.2.1.88.1.4.3.1.2.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.105.114.101.100|4x|5f736e6d7064 +1.3.6.1.2.1.88.1.4.3.1.2.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.82.105.115.105.110.103|4x|5f736e6d7064 +1.3.6.1.2.1.88.1.4.3.1.3.6.95.115.110.109.112.100.95.108.105.110.107.68.111.119.110|4x|5f6c696e6b5570446f776e +1.3.6.1.2.1.88.1.4.3.1.3.6.95.115.110.109.112.100.95.108.105.110.107.85.112|4x|5f6c696e6b5570446f776e +1.3.6.1.2.1.88.1.4.3.1.3.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.105.108.117.114.101|4x|5f747269676765724661696c +1.3.6.1.2.1.88.1.4.3.1.3.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.108.108.105.110.103|4x|5f7472696767657246697265 +1.3.6.1.2.1.88.1.4.3.1.3.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.105.114.101.100|4x|5f7472696767657246697265 +1.3.6.1.2.1.88.1.4.3.1.3.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.82.105.115.105.110.103|4x|5f7472696767657246697265 +1.3.6.1.2.1.92.1.1.1.0|66|1000 +1.3.6.1.2.1.92.1.1.2.0|66|1440 +1.3.6.1.2.1.92.1.2.1.0|65|0 +1.3.6.1.2.1.92.1.2.2.0|65|0 +1.3.6.1.2.1.104.1.1.1.0|66|0 +1.3.6.1.2.1.104.1.1.2.0|65|0 +1.3.6.1.2.1.104.1.1.3.0|65|0 +1.3.6.1.2.1.104.1.1.4.0|65|0 +1.3.6.1.2.1.104.1.1.5.0|65|0 +1.3.6.1.2.1.104.1.1.6.0|65|0 +1.3.6.1.2.1.104.1.1.7.0|65|0 +1.3.6.1.2.1.104.1.1.8.0|70|0 +1.3.6.1.2.1.104.1.1.9.0|70|0 +1.3.6.1.2.1.104.1.1.10.0|70|0 +1.3.6.1.2.1.104.1.1.11.0|70|0 +1.3.6.1.2.1.104.1.1.12.0|70|0 +1.3.6.1.2.1.104.1.1.13.0|70|0 +1.3.6.1.2.1.104.1.1.14.0|70|0 +1.3.6.1.2.1.104.1.1.15.0|70|0 +1.3.6.1.2.1.104.1.1.16.0|70|0 +1.3.6.1.2.1.104.1.1.17.0|70|0 +1.3.6.1.2.1.104.1.1.18.0|67|0 +1.3.6.1.2.1.104.1.2.1.0|2|0 +1.3.6.1.2.1.104.1.2.2.0|66|0 +1.3.6.1.2.1.104.1.2.3.0|66|0 +1.3.6.1.2.1.104.1.2.4.0|66|0 +1.3.6.1.2.1.104.1.2.5.0|2|0 +1.3.6.1.2.1.104.1.2.6.0|66|0 +1.3.6.1.2.1.104.1.2.7.0|66|0 +1.3.6.1.4.1.2021.4.1.0|2|0 +1.3.6.1.4.1.2021.4.2.0|4|swap +1.3.6.1.4.1.2021.4.3.0|2|1048572 +1.3.6.1.4.1.2021.4.4.0|2|1048572 +1.3.6.1.4.1.2021.4.5.0|2|2046940 +1.3.6.1.4.1.2021.4.6.0|2|76976 +1.3.6.1.4.1.2021.4.11.0|2|1125548 +1.3.6.1.4.1.2021.4.12.0|2|16000 +1.3.6.1.4.1.2021.4.13.0|2|2940 +1.3.6.1.4.1.2021.4.14.0|2|73580 +1.3.6.1.4.1.2021.4.15.0|2|1577648 +1.3.6.1.4.1.2021.4.100.0|2|0 +1.3.6.1.4.1.2021.4.101.0|4| +1.3.6.1.4.1.2021.10.1.1.1|2|1 +1.3.6.1.4.1.2021.10.1.1.2|2|2 +1.3.6.1.4.1.2021.10.1.1.3|2|3 +1.3.6.1.4.1.2021.10.1.2.1|4x|4c6f61642d31 +1.3.6.1.4.1.2021.10.1.2.2|4x|4c6f61642d35 +1.3.6.1.4.1.2021.10.1.2.3|4x|4c6f61642d3135 +1.3.6.1.4.1.2021.10.1.3.1|4x|302e3036 +1.3.6.1.4.1.2021.10.1.3.2|4x|302e3036 +1.3.6.1.4.1.2021.10.1.3.3|4x|302e3032 +1.3.6.1.4.1.2021.10.1.4.1|4x|31322e3030 +1.3.6.1.4.1.2021.10.1.4.2|4x|31322e3030 +1.3.6.1.4.1.2021.10.1.4.3|4x|31322e3030 +1.3.6.1.4.1.2021.10.1.5.1|2|6 +1.3.6.1.4.1.2021.10.1.5.2|2|6 +1.3.6.1.4.1.2021.10.1.5.3|2|2 +1.3.6.1.4.1.2021.10.1.6.1|68x|09050336452d32 +1.3.6.1.4.1.2021.10.1.6.2|68x|09050336452d32 +1.3.6.1.4.1.2021.10.1.6.3|68x|09050332452d32 +1.3.6.1.4.1.2021.10.1.100.1|2|0 +1.3.6.1.4.1.2021.10.1.100.2|2|0 +1.3.6.1.4.1.2021.10.1.100.3|2|0 +1.3.6.1.4.1.2021.10.1.101.1|4| +1.3.6.1.4.1.2021.10.1.101.2|4| +1.3.6.1.4.1.2021.10.1.101.3|4| +1.3.6.1.4.1.2021.11.1.0|2|1 +1.3.6.1.4.1.2021.11.2.0|4|systemStats +1.3.6.1.4.1.2021.11.3.0|2|0 +1.3.6.1.4.1.2021.11.4.0|2|0 +1.3.6.1.4.1.2021.11.5.0|2|10 +1.3.6.1.4.1.2021.11.6.0|2|0 +1.3.6.1.4.1.2021.11.7.0|2|142 +1.3.6.1.4.1.2021.11.8.0|2|314 +1.3.6.1.4.1.2021.11.9.0|2|0 +1.3.6.1.4.1.2021.11.10.0|2|0 +1.3.6.1.4.1.2021.11.11.0|2|99 +1.3.6.1.4.1.2021.11.50.0|65|162999 +1.3.6.1.4.1.2021.11.51.0|65|0 +1.3.6.1.4.1.2021.11.52.0|65|240292 +1.3.6.1.4.1.2021.11.53.0|65|166758712 +1.3.6.1.4.1.2021.11.54.0|65|2046 +1.3.6.1.4.1.2021.11.55.0|65|0 +1.3.6.1.4.1.2021.11.56.0|65|0 +1.3.6.1.4.1.2021.11.57.0|65|4713272 +1.3.6.1.4.1.2021.11.58.0|65|3330562 +1.3.6.1.4.1.2021.11.59.0|65|52242132 +1.3.6.1.4.1.2021.11.60.0|65|111026511 +1.3.6.1.4.1.2021.11.61.0|65|2442 +1.3.6.1.4.1.2021.11.62.0|65|0 +1.3.6.1.4.1.2021.11.63.0|65|0 +1.3.6.1.4.1.2021.11.64.0|65|0 +1.3.6.1.4.1.2021.11.65.0|65|0 +1.3.6.1.4.1.2021.11.66.0|65|0 +1.3.6.1.4.1.2021.13.14.1.0|2|1 +1.3.6.1.4.1.2021.13.15.1.1.1.1|2|1 +1.3.6.1.4.1.2021.13.15.1.1.1.2|2|2 +1.3.6.1.4.1.2021.13.15.1.1.1.3|2|3 +1.3.6.1.4.1.2021.13.15.1.1.1.4|2|4 +1.3.6.1.4.1.2021.13.15.1.1.1.5|2|5 +1.3.6.1.4.1.2021.13.15.1.1.1.6|2|6 +1.3.6.1.4.1.2021.13.15.1.1.1.7|2|7 +1.3.6.1.4.1.2021.13.15.1.1.1.8|2|8 +1.3.6.1.4.1.2021.13.15.1.1.1.9|2|9 +1.3.6.1.4.1.2021.13.15.1.1.1.10|2|10 +1.3.6.1.4.1.2021.13.15.1.1.1.11|2|11 +1.3.6.1.4.1.2021.13.15.1.1.1.12|2|12 +1.3.6.1.4.1.2021.13.15.1.1.1.13|2|13 +1.3.6.1.4.1.2021.13.15.1.1.1.14|2|14 +1.3.6.1.4.1.2021.13.15.1.1.1.15|2|15 +1.3.6.1.4.1.2021.13.15.1.1.1.16|2|16 +1.3.6.1.4.1.2021.13.15.1.1.1.17|2|17 +1.3.6.1.4.1.2021.13.15.1.1.1.18|2|18 +1.3.6.1.4.1.2021.13.15.1.1.1.19|2|19 +1.3.6.1.4.1.2021.13.15.1.1.1.20|2|20 +1.3.6.1.4.1.2021.13.15.1.1.1.21|2|21 +1.3.6.1.4.1.2021.13.15.1.1.1.22|2|22 +1.3.6.1.4.1.2021.13.15.1.1.1.23|2|23 +1.3.6.1.4.1.2021.13.15.1.1.1.24|2|24 +1.3.6.1.4.1.2021.13.15.1.1.1.25|2|25 +1.3.6.1.4.1.2021.13.15.1.1.1.26|2|26 +1.3.6.1.4.1.2021.13.15.1.1.1.27|2|27 +1.3.6.1.4.1.2021.13.15.1.1.1.28|2|28 +1.3.6.1.4.1.2021.13.15.1.1.2.1|4|loop0 +1.3.6.1.4.1.2021.13.15.1.1.2.2|4|loop1 +1.3.6.1.4.1.2021.13.15.1.1.2.3|4|loop2 +1.3.6.1.4.1.2021.13.15.1.1.2.4|4|loop3 +1.3.6.1.4.1.2021.13.15.1.1.2.5|4|loop4 +1.3.6.1.4.1.2021.13.15.1.1.2.6|4|loop5 +1.3.6.1.4.1.2021.13.15.1.1.2.7|4|loop6 +1.3.6.1.4.1.2021.13.15.1.1.2.8|4|loop7 +1.3.6.1.4.1.2021.13.15.1.1.2.9|4|nbd0 +1.3.6.1.4.1.2021.13.15.1.1.2.10|4|nbd1 +1.3.6.1.4.1.2021.13.15.1.1.2.11|4|nbd2 +1.3.6.1.4.1.2021.13.15.1.1.2.12|4|nbd3 +1.3.6.1.4.1.2021.13.15.1.1.2.13|4|nbd4 +1.3.6.1.4.1.2021.13.15.1.1.2.14|4|nbd5 +1.3.6.1.4.1.2021.13.15.1.1.2.15|4|nbd6 +1.3.6.1.4.1.2021.13.15.1.1.2.16|4|nbd7 +1.3.6.1.4.1.2021.13.15.1.1.2.17|4|nbd8 +1.3.6.1.4.1.2021.13.15.1.1.2.18|4|nbd9 +1.3.6.1.4.1.2021.13.15.1.1.2.19|4|nbd10 +1.3.6.1.4.1.2021.13.15.1.1.2.20|4|nbd11 +1.3.6.1.4.1.2021.13.15.1.1.2.21|4|nbd12 +1.3.6.1.4.1.2021.13.15.1.1.2.22|4|nbd13 +1.3.6.1.4.1.2021.13.15.1.1.2.23|4|nbd14 +1.3.6.1.4.1.2021.13.15.1.1.2.24|4|nbd15 +1.3.6.1.4.1.2021.13.15.1.1.2.25|4|sda +1.3.6.1.4.1.2021.13.15.1.1.2.26|4|sda1 +1.3.6.1.4.1.2021.13.15.1.1.2.27|4|sr0 +1.3.6.1.4.1.2021.13.15.1.1.2.28|4|sr1 +1.3.6.1.4.1.2021.13.15.1.1.3.1|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.2|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.3|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.4|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.5|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.6|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.7|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.8|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.9|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.10|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.11|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.12|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.13|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.14|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.15|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.16|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.17|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.18|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.19|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.20|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.21|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.22|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.23|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.24|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.25|65|1519135744 +1.3.6.1.4.1.2021.13.15.1.1.3.26|65|169962496 +1.3.6.1.4.1.2021.13.15.1.1.3.27|65|185944064 +1.3.6.1.4.1.2021.13.15.1.1.3.28|65|167936 +1.3.6.1.4.1.2021.13.15.1.1.4.1|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.2|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.3|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.4|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.5|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.6|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.7|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.8|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.9|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.10|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.11|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.12|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.13|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.14|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.15|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.16|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.17|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.18|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.19|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.20|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.21|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.22|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.23|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.24|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.25|65|2413195264 +1.3.6.1.4.1.2021.13.15.1.1.4.26|65|2412113920 +1.3.6.1.4.1.2021.13.15.1.1.4.27|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.28|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.1|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.2|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.3|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.4|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.5|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.6|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.7|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.8|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.9|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.10|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.11|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.12|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.13|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.14|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.15|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.16|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.17|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.18|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.19|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.20|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.21|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.22|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.23|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.24|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.25|65|40466 +1.3.6.1.4.1.2021.13.15.1.1.5.26|65|19699 +1.3.6.1.4.1.2021.13.15.1.1.5.27|65|2865 +1.3.6.1.4.1.2021.13.15.1.1.5.28|65|7 +1.3.6.1.4.1.2021.13.15.1.1.6.1|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.2|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.3|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.4|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.5|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.6|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.7|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.8|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.9|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.10|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.11|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.12|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.13|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.14|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.15|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.16|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.17|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.18|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.19|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.20|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.21|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.22|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.23|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.24|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.25|65|44353 +1.3.6.1.4.1.2021.13.15.1.1.6.26|65|31819 +1.3.6.1.4.1.2021.13.15.1.1.6.27|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.28|65|0 +1.3.6.1.4.1.2021.13.15.1.1.9.1|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.2|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.3|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.4|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.5|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.6|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.7|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.8|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.9|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.10|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.11|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.12|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.13|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.14|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.15|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.16|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.17|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.18|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.19|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.20|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.21|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.22|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.23|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.24|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.25|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.26|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.27|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.28|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.1|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.2|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.3|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.4|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.5|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.6|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.7|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.8|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.9|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.10|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.11|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.12|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.13|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.14|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.15|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.16|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.17|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.18|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.19|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.20|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.21|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.22|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.23|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.24|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.25|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.26|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.27|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.28|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.1|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.2|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.3|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.4|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.5|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.6|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.7|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.8|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.9|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.10|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.11|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.12|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.13|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.14|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.15|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.16|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.17|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.18|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.19|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.20|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.21|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.22|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.23|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.24|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.25|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.26|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.27|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.28|2|0 +1.3.6.1.4.1.2021.13.15.1.1.12.1|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.2|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.3|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.4|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.5|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.6|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.7|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.8|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.9|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.10|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.11|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.12|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.13|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.14|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.15|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.16|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.17|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.18|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.19|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.20|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.21|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.22|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.23|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.24|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.25|70|1519135744 +1.3.6.1.4.1.2021.13.15.1.1.12.26|70|169962496 +1.3.6.1.4.1.2021.13.15.1.1.12.27|70|185944064 +1.3.6.1.4.1.2021.13.15.1.1.12.28|70|167936 +1.3.6.1.4.1.2021.13.15.1.1.13.1|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.2|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.3|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.4|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.5|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.6|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.7|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.8|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.9|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.10|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.11|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.12|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.13|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.14|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.15|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.16|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.17|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.18|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.19|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.20|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.21|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.22|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.23|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.24|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.25|70|2413195264 +1.3.6.1.4.1.2021.13.15.1.1.13.26|70|2412113920 +1.3.6.1.4.1.2021.13.15.1.1.13.27|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.28|70|0 +1.3.6.1.4.1.2021.16.1.0|2|250 +1.3.6.1.4.1.2021.100.1.0|2|1 +1.3.6.1.4.1.2021.100.2.0|4x|352e372e32 +1.3.6.1.4.1.2021.100.3.0|4x|244461746524 +1.3.6.1.4.1.2021.100.4.0|4x|4d6f6e204f63742020312030393a35373a32352032303138 +1.3.6.1.4.1.2021.100.5.0|4x|24496424 +1.3.6.1.4.1.2021.100.6.0|4x|272d2d6275696c643d7838365f36342d7265646861742d6c696e75782d676e752720272d2d686f73743d7838365f36342d7265646861742d6c696e75782d676e752720272d2d70726f6772616d2d7072656669783d2720272d2d64697361626c652d646570656e64656e63792d747261636b696e672720272d2d7072656669783d2f7573722720272d2d657865632d7072656669783d2f7573722720272d2d62696e6469723d2f7573722f62696e2720272d2d7362696e6469723d2f7573722f7362696e2720272d2d646174616469723d2f7573722f73686172652720272d2d696e636c7564656469723d2f7573722f696e636c7564652720272d2d6c69626469723d2f7573722f6c696236342720272d2d6c6962657865636469723d2f7573722f6c6962657865632720272d2d6c6f63616c73746174656469723d2f7661722720272d2d73686172656473746174656469723d2f7661722f6c69622720272d2d6d616e6469723d2f7573722f73686172652f6d616e2720272d2d696e666f6469723d2f7573722f73686172652f696e666f2720272d2d64697361626c652d7374617469632720272d2d656e61626c652d7368617265642720272d2d776974682d63666c6167733d2d4f32202d67202d70697065202d57616c6c202d57702c2d445f464f52544946595f534f555243453d32202d66657863657074696f6e73202d66737461636b2d70726f746563746f722d7374726f6e67202d2d706172616d3d7373702d6275666665722d73697a653d34202d677265636f72642d6763632d73776974636865732020202d6d3634202d6d74756e653d67656e65726963202d445f52504d5f345f345f434f4d5041542720272d2d776974682d6c64666c6167733d2d576c2c2d7a2c72656c726f202d576c2c2d7a2c6e6f772720272d2d776974682d7379732d6c6f636174696f6e3d556e6b6e6f776e2720272d2d776974682d6c6f6766696c653d2f7661722f6c6f672f736e6d70642e6c6f672720272d2d776974682d70657273697374656e742d6469726563746f72793d2f7661722f6c69622f6e65742d736e6d702720272d2d776974682d6d69622d6d6f64756c65733d686f7374206167656e747820736d75782020202020207563642d736e6d702f6469736b696f207463702d6d6962207564702d6d6962206d696249492f6d74615f73656e646d61696c20202020202069702d6d69622f69707634496e746572666163655461626c652069702d6d69622f69707636496e746572666163655461626c6520202020202069702d6d69622f6970416464726573735072656669785461626c652f6970416464726573735072656669785461626c6520202020202069702d6d69622f697044656661756c74526f757465725461626c652f6970446566 +1.3.6.1.4.1.2021.100.10.0|2|0 +1.3.6.1.4.1.2021.100.11.0|2|0 +1.3.6.1.4.1.2021.100.12.0|2|0 +1.3.6.1.4.1.2021.100.13.0|2|0 +1.3.6.1.4.1.2021.100.20.0|2|0 +1.3.6.1.4.1.2021.101.1.0|2|0 +1.3.6.1.4.1.2021.101.2.0|4|snmp +1.3.6.1.4.1.2021.101.100.0|2|0 +1.3.6.1.4.1.2021.101.101.0|4| +1.3.6.1.4.1.8072.1.2.1.1.4.0.1.0.0|4| +1.3.6.1.4.1.8072.1.2.1.1.4.0.1.1.0|4| +1.3.6.1.4.1.8072.1.2.1.1.4.0.1.2.0|4| +1.3.6.1.4.1.8072.1.2.1.1.4.0.7.1.3.6.1.2.1.4.127|4|ip +1.3.6.1.4.1.8072.1.2.1.1.4.0.7.1.3.6.1.2.1.5.127|4|icmp +1.3.6.1.4.1.8072.1.2.1.1.4.0.7.1.3.6.1.2.1.6.127|4|tcp +1.3.6.1.4.1.8072.1.2.1.1.4.0.7.1.3.6.1.2.1.7.127|4|udp +1.3.6.1.4.1.8072.1.2.1.1.4.0.7.1.3.6.1.2.1.11.127|4x|6d696249492f736e6d70 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.1.1.127|4x|6d696249492f7379734465736372 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.1.2.127|4x|6d696249492f7379734f626a6563744944 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.1.3.127|4x|6d696249492f737973557054696d65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.1.4.127|4x|6d696249492f737973436f6e74616374 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.1.5.127|4x|6d696249492f7379734e616d65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.1.6.127|4x|6d696249492f7379734c6f636174696f6e +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.1.7.127|4x|6d696249492f7379735365727669636573 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.1.8.127|4x|6d696249492f7379734f524c6173744368616e6765 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.1.9.127|4x|6d696249492f7379734f525461626c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.2.1.127|4x|6966206e756d626572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.2.2.127|4|ifTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.1.127|4|ipForwarding +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.25.127|4|ipv6IpForwarding +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.27.127|4|ipv4TableLastChanged +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.28.127|4|ipv4InterfaceTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.29.127|4|ipv6TableLastChanged +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.30.127|4|ipv6InterfaceTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.32.127|4|ipAddressPrefixTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.33.127|4|ipAddressSpinLock +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.34.127|4|ipAddressTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.35.127|4|inetNetToMediaTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.36.127|4|ipv6ScopeZoneIndexTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.37.127|4|ipDefaultRouterTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.5.29.127|4|icmpStatsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.5.30.127|4|icmpMsgStatsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.6.13.127|4|tcpTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.6.19.127|4|tcpConnectionTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.6.20.127|4|tcpListenerTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.7.5.127|4|udpTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.7.7.127|4|udpEndpointTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.4.1.2021.4.127|4|memory +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.4.1.2021.11.127|4|vmstat +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.6.3.12.1.127|4x|7461726765745f636f756e74657273 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.4.2.0.127|4|ipDefaultTTL +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.4.13.0.127|4|ipReasmTimeout +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.4.24.4.127|4|ipCidrRouteTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.4.24.7.127|4|inetCidrRouteTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.4.26.0.127|4|ipv6IpDefaultHopLimit +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.4.31.1.127|4|ipSystemStatsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.4.31.2.127|4|ipIfStatsTableLastChanged +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.4.31.3.127|4|ipIfStatsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.10.7.2.127|4|dot3StatsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.11.30.0.127|4x|6d696249492f736e6d70456e61626c6541757468656e5472617073 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.16.1.1.127|4|etherStatsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.1.1.127|4x|686f73742f68725f73797374656d +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.1.2.127|4x|686f73742f68725f73797374656d +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.1.3.127|4x|686f73742f68725f73797374656d +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.1.4.127|4x|686f73742f68725f73797374656d +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.1.5.127|4x|686f73742f68725f73797374656d +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.1.6.127|4x|686f73742f68725f73797374656d +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.1.7.127|4x|686f73742f68725f73797374656d +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.2.2.127|4x|686f73742f68724d656d6f727953697a65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.4.2.127|4|hrSWRunTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.5.1.127|4|hrSWRunPerfTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.6.3.127|4|hrSWInstalledTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.31.1.1.127|4|ifXTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.31.1.5.127|4|ifTableLastChanged +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.55.1.1.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.55.1.2.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.55.1.3.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.55.1.4.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.63.1.2.127|4|schedTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.88.1.1.127|4|mteResource +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.1.127|4|sctpStats +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.2.127|4|sctpParams +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.3.127|4|sctpAssocTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.4.127|4|sctpAssocLocalAddrTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.5.127|4|sctpAssocRemAddrTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.6.127|4|sctpLookupLocalPortTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.7.127|4|sctpLookupRemPortTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.8.127|4|sctpLookupRemHostNameTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.9.127|4|sctpLookupRemPrimIPAddrTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.10.127|4|sctpLookupRemIPAddrTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.4.100.127|4|memSwapError +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.4.101.127|4|memSwapErrMsg +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.16.1.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.1.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.2.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.3.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.4.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.5.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.6.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.10.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.11.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.12.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.13.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.20.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.101.1.127|4x|7563642d736e6d702f6572726f726d6962 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.101.2.127|4x|7563642d736e6d702f6572726f726d6962 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.101.100.127|4x|7563642d736e6d702f6572726f726d6962 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.101.101.127|4x|7563642d736e6d702f6572726f726d6962 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.6.3.11.2.1.127|4|snmpMPDStats +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.6.3.12.1.1.127|4x|7461726765742f736e6d705461726765745370696e4c6f636b +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.6.3.13.1.3.127|4|snmpNotifyFilterTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.6.3.15.1.1.127|4|usmStats +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.6.3.16.1.1.127|4x|7661636d5f636f6e74657874 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.3.1.1.1.127|4x|6d696249492f6174 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.3.1.1.2.127|4x|6d696249492f6174 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.3.1.1.3.127|4x|6d696249492f6174 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.20.1.1.127|4x|6d696249492f697061646472 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.20.1.2.127|4x|6d696249492f697061646472 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.20.1.3.127|4x|6d696249492f697061646472 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.20.1.4.127|4x|6d696249492f697061646472 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.20.1.5.127|4x|6d696249492f697061646472 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.1.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.2.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.3.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.4.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.5.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.6.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.7.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.8.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.9.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.10.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.11.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.12.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.13.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.22.1.1.127|4x|6d696249492f69706d65646961 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.22.1.2.127|4x|6d696249492f69706d65646961 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.22.1.3.127|4x|6d696249492f69706d65646961 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.22.1.4.127|4x|6d696249492f69706d65646961 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.24.6.0.127|4x|726f757465206e756d626572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.6.16.1.6.127|4x|6d696249492f69707636746370 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.7.6.1.3.127|4x|6d696249492f69707636756470 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.1.1.1.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.1.1.2.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.1.1.3.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.1.1.4.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.1.1.5.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.1.1.6.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.2.1.2.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.2.1.3.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.2.1.4.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.2.1.5.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.2.1.6.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.2.1.7.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.2.1.8.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.2.1.25.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.2.1.31.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.2.1.127|4|mteTriggerFailures +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.2.2.127|4|mteTriggerTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.2.3.127|4|mteTriggerDeltaTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.2.4.127|4|mteTriggerExistenceTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.2.5.127|4|mteTriggerBooleanTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.2.6.127|4|mteTriggerThresholdTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.3.1.127|4|mteObjectsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.4.2.127|4|mteEventTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.4.3.127|4|mteEventNotificationTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.4.4.127|4|mteEventSetTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.92.1.3.1.127|4|nlmLogTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.92.1.3.2.127|4|nlmLogVariableTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.2.1.1.127|4x|7563642d736e6d702f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.2.1.2.127|4x|7563642d736e6d702f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.2.1.3.127|4x|7563642d736e6d702f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.2.1.4.127|4x|7563642d736e6d702f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.2.1.5.127|4x|7563642d736e6d702f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.2.1.100.127|4x|7563642d736e6d702f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.2.1.101.127|4x|7563642d736e6d702f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.2.1.102.127|4x|7563642d736e6d702f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.2.1.103.127|4x|7563642d736e6d702f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.8.1.1.127|4x|7563642d657874656e7369626c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.8.1.2.127|4x|7563642d657874656e7369626c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.8.1.3.127|4x|7563642d657874656e7369626c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.8.1.100.127|4x|7563642d657874656e7369626c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.8.1.101.127|4x|7563642d657874656e7369626c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.8.1.102.127|4x|7563642d657874656e7369626c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.8.1.103.127|4x|7563642d657874656e7369626c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.1.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.2.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.3.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.4.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.5.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.6.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.7.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.8.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.9.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.10.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.11.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.12.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.13.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.14.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.15.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.16.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.100.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.101.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.10.1.1.127|4x|7563642d736e6d702f6c6f6164617665 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.10.1.2.127|4x|7563642d736e6d702f6c6f6164617665 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.10.1.3.127|4x|7563642d736e6d702f6c6f6164617665 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.10.1.4.127|4x|7563642d736e6d702f6c6f6164617665 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.10.1.5.127|4x|7563642d736e6d702f6c6f6164617665 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.10.1.6.127|4x|7563642d736e6d702f6c6f6164617665 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.10.1.100.127|4x|7563642d736e6d702f6c6f6164617665 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.10.1.101.127|4x|7563642d736e6d702f6c6f6164617665 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.13.14.1.127|4|dlmod +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.13.16.2.127|4|lmTempSensorsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.13.16.3.127|4|lmFanSensorsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.13.16.4.127|4|lmVoltSensorsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.13.16.5.127|4|lmMiscSensorsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.15.1.1.127|4x|7563642d736e6d702f66696c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.15.1.2.127|4x|7563642d736e6d702f66696c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.15.1.3.127|4x|7563642d736e6d702f66696c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.15.1.4.127|4x|7563642d736e6d702f66696c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.15.1.100.127|4x|7563642d736e6d702f66696c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.15.1.101.127|4x|7563642d736e6d702f66696c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.8072.1.2.1.127|4|nsModuleTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.8072.1.5.1.127|4|nsCacheTimeout +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.8072.1.5.2.127|4|nsCacheEnabled +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.8072.1.5.3.127|4|tzCacheTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.8072.1.8.1.127|4|nsTransactionTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.8072.1.9.1.127|4|nsVacmAccessTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.6.3.1.1.6.1.127|4|snmpSetSerialNo +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.6.3.10.2.1.1.127|4x|736e6d7076332f736e6d70456e67696e65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.6.3.10.2.1.2.127|4x|736e6d7076332f736e6d70456e67696e65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.6.3.10.2.1.3.127|4x|736e6d7076332f736e6d70456e67696e65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.6.3.10.2.1.4.127|4x|736e6d7076332f736e6d70456e67696e65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.6.3.15.1.2.1.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.6.3.16.1.5.1.127|4x|6d696249492f7661636d3a76696577 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.2.3.1.1.127|4x|686f73742f68725f73746f72616765 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.2.3.1.2.127|4x|686f73742f68725f73746f72616765 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.2.3.1.3.127|4x|686f73742f68725f73746f72616765 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.2.3.1.4.127|4x|686f73742f68725f73746f72616765 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.2.3.1.5.127|4x|686f73742f68725f73746f72616765 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.2.3.1.6.127|4x|686f73742f68725f73746f72616765 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.2.3.1.7.127|4x|686f73742f68725f73746f72616765 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.2.1.1.127|4x|686f73742f68725f646576696365 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.2.1.2.127|4x|686f73742f68725f646576696365 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.2.1.3.127|4x|686f73742f68725f646576696365 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.2.1.4.127|4x|686f73742f68725f646576696365 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.2.1.5.127|4x|686f73742f68725f646576696365 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.2.1.6.127|4x|686f73742f68725f646576696365 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.3.1.1.127|4x|686f73742f68725f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.3.1.2.127|4x|686f73742f68725f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.4.1.1.127|4x|686f73742f68725f6e6574776f726b +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.5.1.1.127|4x|686f73742f68725f7072696e74 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.5.1.2.127|4x|686f73742f68725f7072696e74 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.6.1.1.127|4x|686f73742f68725f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.6.1.2.127|4x|686f73742f68725f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.6.1.3.127|4x|686f73742f68725f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.6.1.4.127|4x|686f73742f68725f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.7.1.1.127|4x|686f73742f68725f706172746974696f6e +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.7.1.2.127|4x|686f73742f68725f706172746974696f6e +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.7.1.3.127|4x|686f73742f68725f706172746974696f6e +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.7.1.4.127|4x|686f73742f68725f706172746974696f6e +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.7.1.5.127|4x|686f73742f68725f706172746974696f6e +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.8.1.1.127|4x|686f73742f68725f66696c65737973 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.8.1.2.127|4x|686f73742f68725f66696c65737973 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.8.1.3.127|4x|686f73742f68725f66696c65737973 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.8.1.4.127|4x|686f73742f68725f66696c65737973 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.8.1.5.127|4x|686f73742f68725f66696c65737973 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.8.1.6.127|4x|686f73742f68725f66696c65737973 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.8.1.7.127|4x|686f73742f68725f66696c65737973 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.8.1.8.127|4x|686f73742f68725f66696c65737973 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.8.1.9.127|4x|686f73742f68725f66696c65737973 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.2.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.3.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.4.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.5.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.6.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.7.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.8.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.9.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.10.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.11.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.1.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.2.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.3.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.4.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.5.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.6.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.7.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.8.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.9.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.10.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.11.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.12.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.13.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.14.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.15.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.16.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.17.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.18.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.19.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.20.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.1.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.2.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.3.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.4.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.5.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.6.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.7.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.8.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.9.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.10.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.11.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.12.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.13.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.14.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.15.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.16.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.17.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.18.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.19.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.20.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.21.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.22.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.23.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.24.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.25.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.26.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.27.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.28.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.29.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.30.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.31.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.32.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.33.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.34.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.92.1.1.1.0.127|4|nlmConfigGlobalEntryLimit +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.92.1.1.2.0.127|4|nlmConfigGlobalAgeOut +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.92.1.2.1.0.127|4|nlmStatsGlobalNotificationsLogged +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.92.1.2.2.0.127|4|nlmStatsGlobalNotificationsBumped +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.1.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.2.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.3.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.4.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.5.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.6.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.7.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.8.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.9.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.10.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.11.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.100.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.101.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.8072.1.3.2.1.127|4|nsExtendNumEntries +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.8072.1.3.2.2.127|4|nsExtendConfigTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.8072.1.3.2.3.127|4|nsExtendOut1Table +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.8072.1.3.2.4.127|4|nsExtendOut2Table +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.8072.1.7.1.1.127|4|nsDebugEnabled +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.8072.1.7.1.2.127|4|nsDebugOutputAll +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.8072.1.7.1.3.127|4|nsDebugDumpPdu +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.8072.1.7.1.4.127|4|tzDebugTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.8072.1.7.2.1.127|4|tzLoggingTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.2.1.2.127|4x|7461726765742f736e6d7054617267657441646472456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.2.1.3.127|4x|7461726765742f736e6d7054617267657441646472456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.2.1.4.127|4x|7461726765742f736e6d7054617267657441646472456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.2.1.5.127|4x|7461726765742f736e6d7054617267657441646472456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.2.1.6.127|4x|7461726765742f736e6d7054617267657441646472456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.2.1.7.127|4x|7461726765742f736e6d7054617267657441646472456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.2.1.8.127|4x|7461726765742f736e6d7054617267657441646472456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.2.1.9.127|4x|7461726765742f736e6d7054617267657441646472456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.3.1.2.127|4x|7461726765742f736e6d70546172676574506172616d73456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.3.1.3.127|4x|7461726765742f736e6d70546172676574506172616d73456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.3.1.4.127|4x|7461726765742f736e6d70546172676574506172616d73456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.3.1.5.127|4x|7461726765742f736e6d70546172676574506172616d73456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.3.1.6.127|4x|7461726765742f736e6d70546172676574506172616d73456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.3.1.7.127|4x|7461726765742f736e6d70546172676574506172616d73456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.13.1.1.1.2.127|4|snmpNotifyTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.13.1.1.1.3.127|4|snmpNotifyTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.13.1.1.1.4.127|4|snmpNotifyTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.13.1.1.1.5.127|4|snmpNotifyTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.13.1.2.1.1.127|4|snmpNotifyFilterProfileTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.13.1.2.1.2.127|4|snmpNotifyFilterProfileTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.13.1.2.1.3.127|4|snmpNotifyFilterProfileTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.16.1.2.1.3.127|4x|6d696249492f7661636d3a7365633267726f7570 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.16.1.2.1.4.127|4x|6d696249492f7661636d3a7365633267726f7570 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.16.1.2.1.5.127|4x|6d696249492f7661636d3a7365633267726f7570 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.16.1.4.1.4.127|4x|6d696249492f7661636d3a616363657373 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.16.1.4.1.5.127|4x|6d696249492f7661636d3a616363657373 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.16.1.4.1.6.127|4x|6d696249492f7661636d3a616363657373 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.16.1.4.1.7.127|4x|6d696249492f7661636d3a616363657373 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.16.1.4.1.8.127|4x|6d696249492f7661636d3a616363657373 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.16.1.4.1.9.127|4x|6d696249492f7661636d3a616363657373 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.14.2.1.2.127|4|dlmod +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.14.2.1.3.127|4|dlmod +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.14.2.1.4.127|4|dlmod +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.14.2.1.5.127|4|dlmod +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.1.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.2.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.3.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.4.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.5.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.6.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.9.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.10.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.11.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.12.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.13.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.3.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.4.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.5.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.6.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.7.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.8.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.9.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.10.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.11.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.12.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.13.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.16.1.5.2.1.3.127|4x|6d696249492f7661636d3a76696577 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.16.1.5.2.1.4.127|4x|6d696249492f7661636d3a76696577 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.16.1.5.2.1.5.127|4x|6d696249492f7661636d3a76696577 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.16.1.5.2.1.6.127|4x|6d696249492f7661636d3a76696577 +1.3.6.1.4.1.8072.1.2.1.1.5.0.1.0.0|4x|a00002 +1.3.6.1.4.1.8072.1.2.1.1.5.0.1.1.0|4x|a00002 +1.3.6.1.4.1.8072.1.2.1.1.5.0.1.2.0|4x|a00002 +1.3.6.1.4.1.8072.1.2.1.1.5.0.7.1.3.6.1.2.1.4.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.7.1.3.6.1.2.1.5.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.7.1.3.6.1.2.1.6.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.7.1.3.6.1.2.1.7.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.7.1.3.6.1.2.1.11.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.1.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.1.2.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.1.3.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.1.7.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.1.8.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.1.9.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.2.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.2.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.25.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.27.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.28.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.29.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.30.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.32.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.33.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.34.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.35.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.36.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.37.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.5.29.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.5.30.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.6.13.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.6.19.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.6.20.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.7.5.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.7.7.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.4.1.2021.4.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.4.1.2021.11.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.6.3.12.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.4.2.0.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.4.13.0.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.4.24.4.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.4.24.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.4.26.0.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.4.31.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.4.31.2.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.4.31.3.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.10.7.2.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.11.30.0.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.16.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.2.2.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.4.2.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.5.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.6.3.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.31.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.31.1.5.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.55.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.55.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.55.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.55.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.63.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.88.1.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.2.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.4.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.5.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.6.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.7.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.8.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.9.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.10.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.4.100.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.4.101.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.16.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.10.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.11.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.12.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.13.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.20.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.101.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.101.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.101.100.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.101.101.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.6.3.11.2.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.6.3.12.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.6.3.13.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.6.3.15.1.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.6.3.16.1.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.3.1.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.3.1.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.3.1.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.20.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.20.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.20.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.20.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.20.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.10.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.11.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.12.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.13.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.22.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.22.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.22.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.22.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.24.6.0.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.6.16.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.7.6.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.1.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.1.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.1.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.1.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.1.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.1.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.2.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.2.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.2.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.2.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.2.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.2.1.25.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.2.1.31.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.2.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.2.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.2.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.2.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.2.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.2.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.3.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.4.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.4.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.4.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.92.1.3.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.92.1.3.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.2.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.2.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.2.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.2.1.100.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.2.1.101.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.2.1.102.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.2.1.103.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.8.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.8.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.8.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.8.1.100.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.8.1.101.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.8.1.102.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.8.1.103.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.10.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.11.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.12.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.13.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.14.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.15.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.16.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.100.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.101.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.10.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.10.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.10.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.10.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.10.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.10.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.10.1.100.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.10.1.101.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.13.14.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.13.16.2.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.13.16.3.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.13.16.4.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.13.16.5.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.15.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.15.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.15.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.15.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.15.1.100.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.15.1.101.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.8072.1.2.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.8072.1.5.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.8072.1.5.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.8072.1.5.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.8072.1.8.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.8072.1.9.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.6.3.1.1.6.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.6.3.10.2.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.6.3.10.2.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.6.3.10.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.6.3.10.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.6.3.15.1.2.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.6.3.16.1.5.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.2.3.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.2.3.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.2.3.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.2.3.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.2.3.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.2.3.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.2.3.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.2.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.2.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.2.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.2.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.3.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.3.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.4.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.5.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.5.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.6.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.6.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.6.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.6.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.7.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.7.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.7.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.7.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.7.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.8.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.8.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.8.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.8.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.8.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.8.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.8.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.8.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.8.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.10.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.11.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.10.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.11.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.12.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.13.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.14.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.15.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.16.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.17.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.18.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.19.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.20.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.10.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.11.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.12.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.13.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.14.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.15.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.16.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.17.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.18.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.19.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.20.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.21.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.22.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.23.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.24.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.25.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.26.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.27.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.28.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.29.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.30.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.31.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.32.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.33.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.34.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.92.1.1.1.0.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.92.1.1.2.0.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.92.1.2.1.0.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.92.1.2.2.0.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.10.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.11.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.100.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.101.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.8072.1.3.2.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.8072.1.3.2.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.8072.1.3.2.3.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.8072.1.3.2.4.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.8072.1.7.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.8072.1.7.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.8072.1.7.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.8072.1.7.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.8072.1.7.2.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.2.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.2.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.2.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.2.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.2.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.2.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.3.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.3.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.3.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.3.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.3.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.3.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.13.1.1.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.13.1.1.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.13.1.1.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.13.1.1.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.13.1.2.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.13.1.2.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.13.1.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.16.1.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.16.1.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.16.1.2.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.16.1.4.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.16.1.4.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.16.1.4.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.16.1.4.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.16.1.4.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.16.1.4.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.14.2.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.14.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.14.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.14.2.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.10.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.11.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.12.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.13.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.10.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.11.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.12.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.13.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.16.1.5.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.16.1.5.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.16.1.5.2.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.16.1.5.2.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.6.0.1.0.0|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.1.1.0|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.1.2.0|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.7.1.3.6.1.2.1.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.7.1.3.6.1.2.1.5.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.7.1.3.6.1.2.1.6.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.7.1.3.6.1.2.1.7.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.7.1.3.6.1.2.1.11.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.1.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.1.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.1.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.1.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.1.5.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.1.6.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.1.7.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.1.8.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.1.9.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.2.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.2.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.25.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.27.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.28.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.29.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.30.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.32.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.33.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.34.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.35.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.36.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.37.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.5.29.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.5.30.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.6.13.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.6.19.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.6.20.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.7.5.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.7.7.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.4.1.2021.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.4.1.2021.11.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.6.3.12.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.4.2.0.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.4.13.0.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.4.24.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.4.24.7.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.4.26.0.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.4.31.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.4.31.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.4.31.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.10.7.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.11.30.0.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.16.1.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.2.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.4.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.5.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.6.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.31.1.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.31.1.5.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.55.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.55.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.55.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.55.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.63.1.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.88.1.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.5.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.6.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.7.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.8.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.9.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.10.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.4.100.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.4.101.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.16.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.10.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.11.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.12.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.13.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.20.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.101.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.101.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.101.100.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.101.101.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.6.3.11.2.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.6.3.12.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.6.3.13.1.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.6.3.15.1.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.6.3.16.1.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.3.1.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.3.1.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.3.1.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.20.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.20.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.20.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.20.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.20.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.10.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.11.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.12.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.13.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.22.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.22.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.22.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.22.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.24.6.0.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.6.16.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.7.6.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.1.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.1.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.1.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.1.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.1.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.1.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.2.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.2.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.2.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.2.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.2.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.2.1.25.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.2.1.31.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.2.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.2.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.2.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.2.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.2.5.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.2.6.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.3.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.4.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.4.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.4.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.92.1.3.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.92.1.3.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.2.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.2.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.2.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.2.1.100.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.2.1.101.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.2.1.102.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.2.1.103.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.8.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.8.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.8.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.8.1.100.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.8.1.101.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.8.1.102.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.8.1.103.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.10.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.11.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.12.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.13.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.14.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.15.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.16.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.100.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.101.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.10.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.10.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.10.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.10.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.10.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.10.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.10.1.100.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.10.1.101.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.13.14.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.13.16.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.13.16.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.13.16.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.13.16.5.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.15.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.15.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.15.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.15.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.15.1.100.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.15.1.101.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.8072.1.2.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.8072.1.5.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.8072.1.5.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.8072.1.5.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.8072.1.8.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.8072.1.9.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.6.3.1.1.6.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.6.3.10.2.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.6.3.10.2.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.6.3.10.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.6.3.10.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.6.3.15.1.2.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.6.3.16.1.5.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.2.3.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.2.3.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.2.3.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.2.3.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.2.3.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.2.3.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.2.3.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.2.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.2.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.2.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.2.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.3.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.3.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.4.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.5.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.5.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.6.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.6.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.6.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.6.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.7.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.7.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.7.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.7.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.7.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.8.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.8.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.8.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.8.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.8.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.8.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.8.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.8.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.8.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.10.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.11.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.10.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.11.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.12.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.13.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.14.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.15.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.16.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.17.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.18.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.19.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.20.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.10.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.11.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.12.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.13.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.14.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.15.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.16.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.17.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.18.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.19.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.20.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.21.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.22.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.23.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.24.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.25.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.26.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.27.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.28.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.29.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.30.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.31.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.32.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.33.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.34.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.92.1.1.1.0.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.92.1.1.2.0.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.92.1.2.1.0.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.92.1.2.2.0.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.10.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.11.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.100.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.101.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.8072.1.3.2.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.8072.1.3.2.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.8072.1.3.2.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.8072.1.3.2.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.8072.1.7.1.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.8072.1.7.1.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.8072.1.7.1.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.8072.1.7.1.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.8072.1.7.2.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.2.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.2.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.2.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.2.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.2.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.2.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.3.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.3.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.3.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.3.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.3.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.3.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.13.1.1.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.13.1.1.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.13.1.1.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.13.1.1.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.13.1.2.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.13.1.2.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.13.1.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.16.1.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.16.1.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.16.1.2.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.16.1.4.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.16.1.4.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.16.1.4.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.16.1.4.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.16.1.4.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.16.1.4.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.14.2.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.14.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.14.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.14.2.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.10.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.11.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.12.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.13.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.10.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.11.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.12.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.13.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.16.1.5.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.16.1.5.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.16.1.5.2.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.16.1.5.2.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.3.2.1.0|2|0 +1.3.6.1.4.1.8072.1.5.1.0|2|5 +1.3.6.1.4.1.8072.1.5.2.0|2|2 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.2.2|2|3 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4.24.4|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4.24.7|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4.31.1|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4.31.3|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4.32|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4.34|2|30 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4.35|2|5 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4.36|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4.37|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4|2|5 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.5.29|2|5 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.5.30|2|5 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.5|2|5 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.6.13|2|5 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.6.19|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.6.20|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.6|2|5 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.7.5|2|5 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.7.7|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.7|2|5 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.10.7.2|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.16.1.1|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.25.4.2|2|30 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.25.6.3|2|30 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.104.1.1|2|30 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.104.1.3|2|30 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.4.1.8072.1.31|2|5 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.2.2|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4.24.4|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4.24.7|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4.31.1|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4.31.3|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4.32|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4.34|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4.35|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4.36|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4.37|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.5.29|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.5.30|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.5|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.6.13|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.6.19|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.6.20|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.6|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.7.5|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.7.7|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.7|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.10.7.2|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.16.1.1|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.25.4.2|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.25.6.3|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.104.1.1|2|3 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.104.1.3|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.4.1.8072.1.31|2|4 +1.3.6.1.4.1.8072.1.7.1.1.0|2|2 +1.3.6.1.4.1.8072.1.7.1.2.0|2|2 +1.3.6.1.4.1.8072.1.7.1.3.0|2|1 +1.3.6.1.4.1.8072.1.7.2.1.1.3.7.47.118.97.114.47.108.111.103.47.115.110.109.112.100.46.108.111.103|2|3 +1.3.6.1.4.1.8072.1.7.2.1.1.4.7.47.118.97.114.47.108.111.103.47.115.110.109.112.100.46.108.111.103|2|0 +1.3.6.1.4.1.8072.1.7.2.1.1.5.7.47.118.97.114.47.108.111.103.47.115.110.109.112.100.46.108.111.103|2|1 +1.3.6.1.4.1.8072.1.9.1.1.2.8.103.114.112.99.111.109.109.53.0.0.1.4.114.101.97.100|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.8.103.114.112.99.111.109.109.53.0.0.1.5.119.114.105.116.101|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.8.103.114.112.99.111.109.109.53.0.0.1.6.110.111.116.105.102.121|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.9.103.114.112.99.111.109.109.49.48.0.0.1.4.114.101.97.100|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.9.103.114.112.99.111.109.109.49.48.0.0.1.5.119.114.105.116.101|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.9.103.114.112.99.111.109.109.49.48.0.0.1.6.110.111.116.105.102.121|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.4.114.101.97.100|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.5.119.114.105.116.101|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.6.110.111.116.105.102.121|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.4.114.101.97.100|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.5.119.114.105.116.101|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.6.110.111.116.105.102.121|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.4.114.101.97.100|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.5.119.114.105.116.101|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.6.110.111.116.105.102.121|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.4.114.101.97.100|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.5.119.114.105.116.101|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.6.110.111.116.105.102.121|2|2 +1.3.6.1.4.1.8072.1.9.1.1.3.8.103.114.112.99.111.109.109.53.0.0.1.4.114.101.97.100|4x|5f616c6c5f +1.3.6.1.4.1.8072.1.9.1.1.3.8.103.114.112.99.111.109.109.53.0.0.1.5.119.114.105.116.101|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.8.103.114.112.99.111.109.109.53.0.0.1.6.110.111.116.105.102.121|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.9.103.114.112.99.111.109.109.49.48.0.0.1.4.114.101.97.100|4x|5f616c6c5f +1.3.6.1.4.1.8072.1.9.1.1.3.9.103.114.112.99.111.109.109.49.48.0.0.1.5.119.114.105.116.101|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.9.103.114.112.99.111.109.109.49.48.0.0.1.6.110.111.116.105.102.121|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.4.114.101.97.100|4x|5f616c6c5f +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.5.119.114.105.116.101|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.6.110.111.116.105.102.121|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.4.114.101.97.100|4x|5f616c6c5f +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.5.119.114.105.116.101|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.6.110.111.116.105.102.121|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.4.114.101.97.100|4x|5f616c6c5f +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.5.119.114.105.116.101|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.6.110.111.116.105.102.121|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.4.114.101.97.100|4x|5f616c6c5f +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.5.119.114.105.116.101|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.6.110.111.116.105.102.121|4|none +1.3.6.1.4.1.8072.1.9.1.1.4.8.103.114.112.99.111.109.109.53.0.0.1.4.114.101.97.100|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.8.103.114.112.99.111.109.109.53.0.0.1.5.119.114.105.116.101|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.8.103.114.112.99.111.109.109.53.0.0.1.6.110.111.116.105.102.121|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.9.103.114.112.99.111.109.109.49.48.0.0.1.4.114.101.97.100|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.9.103.114.112.99.111.109.109.49.48.0.0.1.5.119.114.105.116.101|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.9.103.114.112.99.111.109.109.49.48.0.0.1.6.110.111.116.105.102.121|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.4.114.101.97.100|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.5.119.114.105.116.101|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.6.110.111.116.105.102.121|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.4.114.101.97.100|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.5.119.114.105.116.101|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.6.110.111.116.105.102.121|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.4.114.101.97.100|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.5.119.114.105.116.101|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.6.110.111.116.105.102.121|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.4.114.101.97.100|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.5.119.114.105.116.101|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.6.110.111.116.105.102.121|2|4 +1.3.6.1.4.1.8072.1.9.1.1.5.8.103.114.112.99.111.109.109.53.0.0.1.4.114.101.97.100|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.8.103.114.112.99.111.109.109.53.0.0.1.5.119.114.105.116.101|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.8.103.114.112.99.111.109.109.53.0.0.1.6.110.111.116.105.102.121|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.9.103.114.112.99.111.109.109.49.48.0.0.1.4.114.101.97.100|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.9.103.114.112.99.111.109.109.49.48.0.0.1.5.119.114.105.116.101|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.9.103.114.112.99.111.109.109.49.48.0.0.1.6.110.111.116.105.102.121|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.4.114.101.97.100|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.5.119.114.105.116.101|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.6.110.111.116.105.102.121|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.4.114.101.97.100|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.5.119.114.105.116.101|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.6.110.111.116.105.102.121|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.4.114.101.97.100|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.5.119.114.105.116.101|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.6.110.111.116.105.102.121|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.4.114.101.97.100|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.5.119.114.105.116.101|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.6.110.111.116.105.102.121|2|1 +1.3.6.1.4.1.123456789.1.0|4x|332e3134313500 +1.3.6.1.6.3.1.1.6.1.0|2|1980930474 +1.3.6.1.6.3.10.2.1.1.0|4x|80001f8880d66e3d477a46ad5b000000 +1.3.6.1.6.3.10.2.1.2.0|2|1 +1.3.6.1.6.3.10.2.1.3.0|2|42261 +1.3.6.1.6.3.10.2.1.4.0|2|1500 +1.3.6.1.6.3.11.2.1.1.0|65|0 +1.3.6.1.6.3.11.2.1.2.0|65|0 +1.3.6.1.6.3.11.2.1.3.0|65|0 +1.3.6.1.6.3.12.1.1.0|2|0 +1.3.6.1.6.3.12.1.4.0|65|0 +1.3.6.1.6.3.12.1.5.0|65|0 +1.3.6.1.6.3.15.1.1.1.0|65|0 +1.3.6.1.6.3.15.1.1.2.0|65|0 +1.3.6.1.6.3.15.1.1.3.0|65|0 +1.3.6.1.6.3.15.1.1.4.0|65|0 +1.3.6.1.6.3.15.1.1.5.0|65|0 +1.3.6.1.6.3.15.1.1.6.0|65|0 +1.3.6.1.6.3.15.1.2.1.0|2|0 +1.3.6.1.6.3.15.1.2.2.1.3.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|4|datadogMD5AES +1.3.6.1.6.3.15.1.2.2.1.3.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|4|datadogMD5DES +1.3.6.1.6.3.15.1.2.2.1.3.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|4|datadogSHAAES +1.3.6.1.6.3.15.1.2.2.1.3.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|4|datadogSHADES +1.3.6.1.6.3.15.1.2.2.1.4.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|6|0.0 +1.3.6.1.6.3.15.1.2.2.1.4.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|6|0.0 +1.3.6.1.6.3.15.1.2.2.1.4.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|6|0.0 +1.3.6.1.6.3.15.1.2.2.1.4.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|6|0.0 +1.3.6.1.6.3.15.1.2.2.1.5.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|6|1.3.6.1.6.3.10.1.1.2 +1.3.6.1.6.3.15.1.2.2.1.5.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|6|1.3.6.1.6.3.10.1.1.2 +1.3.6.1.6.3.15.1.2.2.1.5.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|6|1.3.6.1.6.3.10.1.1.3 +1.3.6.1.6.3.15.1.2.2.1.5.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|6|1.3.6.1.6.3.10.1.1.3 +1.3.6.1.6.3.15.1.2.2.1.6.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.6.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.6.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.6.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.7.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.7.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.7.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.7.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.8.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|6|1.3.6.1.6.3.10.1.2.4 +1.3.6.1.6.3.15.1.2.2.1.8.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|6|1.3.6.1.6.3.10.1.2.2 +1.3.6.1.6.3.15.1.2.2.1.8.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|6|1.3.6.1.6.3.10.1.2.4 +1.3.6.1.6.3.15.1.2.2.1.8.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|6|1.3.6.1.6.3.10.1.2.2 +1.3.6.1.6.3.15.1.2.2.1.9.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.9.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.9.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.9.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.10.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.10.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.10.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.10.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.11.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.11.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.11.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.11.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.12.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|2|3 +1.3.6.1.6.3.15.1.2.2.1.12.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|2|3 +1.3.6.1.6.3.15.1.2.2.1.12.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|2|3 +1.3.6.1.6.3.15.1.2.2.1.12.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|2|3 +1.3.6.1.6.3.15.1.2.2.1.13.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|2|1 +1.3.6.1.6.3.15.1.2.2.1.13.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|2|1 +1.3.6.1.6.3.15.1.2.2.1.13.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|2|1 +1.3.6.1.6.3.15.1.2.2.1.13.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|2|1 +1.3.6.1.6.3.16.1.1.1.1.0|4| +1.3.6.1.6.3.16.1.2.1.3.1.5.99.111.109.109.53|4|grpcomm5 +1.3.6.1.6.3.16.1.2.1.3.1.6.99.111.109.109.49.48|4|grpcomm10 +1.3.6.1.6.3.16.1.2.1.3.2.5.99.111.109.109.53|4|grpcomm5 +1.3.6.1.6.3.16.1.2.1.3.2.6.99.111.109.109.49.48|4|grpcomm10 +1.3.6.1.6.3.16.1.2.1.3.3.13.100.97.116.97.100.111.103.77.68.53.65.69.83|4|grpdatadogMD5AES +1.3.6.1.6.3.16.1.2.1.3.3.13.100.97.116.97.100.111.103.77.68.53.68.69.83|4|grpdatadogMD5DES +1.3.6.1.6.3.16.1.2.1.3.3.13.100.97.116.97.100.111.103.83.72.65.65.69.83|4|grpdatadogSHAAES +1.3.6.1.6.3.16.1.2.1.3.3.13.100.97.116.97.100.111.103.83.72.65.68.69.83|4|grpdatadogSHADES +1.3.6.1.6.3.16.1.2.1.4.1.5.99.111.109.109.53|2|4 +1.3.6.1.6.3.16.1.2.1.4.1.6.99.111.109.109.49.48|2|4 +1.3.6.1.6.3.16.1.2.1.4.2.5.99.111.109.109.53|2|4 +1.3.6.1.6.3.16.1.2.1.4.2.6.99.111.109.109.49.48|2|4 +1.3.6.1.6.3.16.1.2.1.4.3.13.100.97.116.97.100.111.103.77.68.53.65.69.83|2|4 +1.3.6.1.6.3.16.1.2.1.4.3.13.100.97.116.97.100.111.103.77.68.53.68.69.83|2|4 +1.3.6.1.6.3.16.1.2.1.4.3.13.100.97.116.97.100.111.103.83.72.65.65.69.83|2|4 +1.3.6.1.6.3.16.1.2.1.4.3.13.100.97.116.97.100.111.103.83.72.65.68.69.83|2|4 +1.3.6.1.6.3.16.1.2.1.5.1.5.99.111.109.109.53|2|1 +1.3.6.1.6.3.16.1.2.1.5.1.6.99.111.109.109.49.48|2|1 +1.3.6.1.6.3.16.1.2.1.5.2.5.99.111.109.109.53|2|1 +1.3.6.1.6.3.16.1.2.1.5.2.6.99.111.109.109.49.48|2|1 +1.3.6.1.6.3.16.1.2.1.5.3.13.100.97.116.97.100.111.103.77.68.53.65.69.83|2|1 +1.3.6.1.6.3.16.1.2.1.5.3.13.100.97.116.97.100.111.103.77.68.53.68.69.83|2|1 +1.3.6.1.6.3.16.1.2.1.5.3.13.100.97.116.97.100.111.103.83.72.65.65.69.83|2|1 +1.3.6.1.6.3.16.1.2.1.5.3.13.100.97.116.97.100.111.103.83.72.65.68.69.83|2|1 +1.3.6.1.6.3.16.1.4.1.4.8.103.114.112.99.111.109.109.53.0.0.1|2|2 +1.3.6.1.6.3.16.1.4.1.4.9.103.114.112.99.111.109.109.49.48.0.0.1|2|2 +1.3.6.1.6.3.16.1.4.1.4.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3|2|2 +1.3.6.1.6.3.16.1.4.1.4.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3|2|2 +1.3.6.1.6.3.16.1.4.1.4.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3|2|2 +1.3.6.1.6.3.16.1.4.1.4.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3|2|2 +1.3.6.1.6.3.16.1.4.1.5.8.103.114.112.99.111.109.109.53.0.0.1|4x|5f616c6c5f +1.3.6.1.6.3.16.1.4.1.5.9.103.114.112.99.111.109.109.49.48.0.0.1|4x|5f616c6c5f +1.3.6.1.6.3.16.1.4.1.5.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3|4x|5f616c6c5f +1.3.6.1.6.3.16.1.4.1.5.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3|4x|5f616c6c5f +1.3.6.1.6.3.16.1.4.1.5.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3|4x|5f616c6c5f +1.3.6.1.6.3.16.1.4.1.5.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3|4x|5f616c6c5f +1.3.6.1.6.3.16.1.4.1.6.8.103.114.112.99.111.109.109.53.0.0.1|4|none +1.3.6.1.6.3.16.1.4.1.6.9.103.114.112.99.111.109.109.49.48.0.0.1|4|none +1.3.6.1.6.3.16.1.4.1.6.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.6.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.6.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.6.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.7.8.103.114.112.99.111.109.109.53.0.0.1|4|none +1.3.6.1.6.3.16.1.4.1.7.9.103.114.112.99.111.109.109.49.48.0.0.1|4|none +1.3.6.1.6.3.16.1.4.1.7.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.7.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.7.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.7.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.8.8.103.114.112.99.111.109.109.53.0.0.1|2|4 +1.3.6.1.6.3.16.1.4.1.8.9.103.114.112.99.111.109.109.49.48.0.0.1|2|4 +1.3.6.1.6.3.16.1.4.1.8.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3|2|4 +1.3.6.1.6.3.16.1.4.1.8.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3|2|4 +1.3.6.1.6.3.16.1.4.1.8.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3|2|4 +1.3.6.1.6.3.16.1.4.1.8.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3|2|4 +1.3.6.1.6.3.16.1.4.1.9.8.103.114.112.99.111.109.109.53.0.0.1|2|1 +1.3.6.1.6.3.16.1.4.1.9.9.103.114.112.99.111.109.109.49.48.0.0.1|2|1 +1.3.6.1.6.3.16.1.4.1.9.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3|2|1 +1.3.6.1.6.3.16.1.4.1.9.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3|2|1 +1.3.6.1.6.3.16.1.4.1.9.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3|2|1 +1.3.6.1.6.3.16.1.4.1.9.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3|2|1 +1.3.6.1.6.3.16.1.5.1.0|2|0 +1.3.6.1.6.3.16.1.5.2.1.3.5.95.97.108.108.95.1.0|4| +1.3.6.1.6.3.16.1.5.2.1.3.5.95.97.108.108.95.1.1|4| +1.3.6.1.6.3.16.1.5.2.1.3.5.95.97.108.108.95.1.2|4| +1.3.6.1.6.3.16.1.5.2.1.3.6.95.110.111.110.101.95.1.0|4| +1.3.6.1.6.3.16.1.5.2.1.3.6.95.110.111.110.101.95.1.1|4| +1.3.6.1.6.3.16.1.5.2.1.3.6.95.110.111.110.101.95.1.2|4| +1.3.6.1.6.3.16.1.5.2.1.4.5.95.97.108.108.95.1.0|2|1 +1.3.6.1.6.3.16.1.5.2.1.4.5.95.97.108.108.95.1.1|2|1 +1.3.6.1.6.3.16.1.5.2.1.4.5.95.97.108.108.95.1.2|2|1 +1.3.6.1.6.3.16.1.5.2.1.4.6.95.110.111.110.101.95.1.0|2|2 +1.3.6.1.6.3.16.1.5.2.1.4.6.95.110.111.110.101.95.1.1|2|2 +1.3.6.1.6.3.16.1.5.2.1.4.6.95.110.111.110.101.95.1.2|2|2 +1.3.6.1.6.3.16.1.5.2.1.5.5.95.97.108.108.95.1.0|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.5.95.97.108.108.95.1.1|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.5.95.97.108.108.95.1.2|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.6.95.110.111.110.101.95.1.0|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.6.95.110.111.110.101.95.1.1|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.6.95.110.111.110.101.95.1.2|2|4 +1.3.6.1.6.3.16.1.5.2.1.6.5.95.97.108.108.95.1.0|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.5.95.97.108.108.95.1.1|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.5.95.97.108.108.95.1.2|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.6.95.110.111.110.101.95.1.0|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.6.95.110.111.110.101.95.1.1|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.6.95.110.111.110.101.95.1.2|2|1 diff --git a/test/new-e2e/ndm/snmp/compose/data/public_delay.snmprec b/test/new-e2e/ndm/snmp/compose/data/public_delay.snmprec new file mode 100644 index 00000000000000..d93f6d6ad69dd1 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/public_delay.snmprec @@ -0,0 +1,126 @@ +1.3.6.1.2.1.1.1.0|4x|4c696e75782034316261393438393131623920342e392e38372d6c696e75786b69742d6175667320233120534d5020576564204d61722031342031353a31323a3136205554432032303138207838365f3634 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.8072.3.2.10 +1.3.6.1.2.1.1.3.0|67|4226041 +1.3.6.1.2.1.1.4.0|4x|726f6f74406c6f63616c686f7374 +1.3.6.1.2.1.1.5.0|4|41ba948911b9 +1.3.6.1.2.1.1.6.0|4|Unknown +1.3.6.1.2.1.1.8.0|67|9 +1.3.6.1.2.1.1.9.1.2.1|6|1.3.6.1.6.3.11.3.1.1 +1.3.6.1.2.1.1.9.1.2.2|6|1.3.6.1.6.3.15.2.1.1 +1.3.6.1.2.1.1.9.1.2.3|6|1.3.6.1.6.3.10.3.1.1 +1.3.6.1.2.1.1.9.1.2.4|6|1.3.6.1.6.3.1 +1.3.6.1.2.1.1.9.1.2.5|6|1.3.6.1.2.1.49 +1.3.6.1.2.1.1.9.1.2.6|6|1.3.6.1.2.1.4 +1.3.6.1.2.1.1.9.1.2.7|6|1.3.6.1.2.1.50 +1.3.6.1.2.1.1.9.1.2.8|6|1.3.6.1.6.3.16.2.2.1 +1.3.6.1.2.1.1.9.1.2.9|6|1.3.6.1.6.3.13.3.1.3 +1.3.6.1.2.1.1.9.1.2.10|6|1.3.6.1.2.1.92 +1.3.6.1.2.1.1.9.1.3.1|4x|546865204d494220666f72204d6573736167652050726f63657373696e6720616e64204469737061746368696e672e +1.3.6.1.2.1.1.9.1.3.2|4x|546865206d616e6167656d656e7420696e666f726d6174696f6e20646566696e6974696f6e7320666f722074686520534e4d5020557365722d6261736564205365637572697479204d6f64656c2e +1.3.6.1.2.1.1.9.1.3.3|4x|54686520534e4d50204d616e6167656d656e7420417263686974656374757265204d49422e +1.3.6.1.2.1.1.9.1.3.4|4x|546865204d4942206d6f64756c6520666f7220534e4d50763220656e746974696573 +1.3.6.1.2.1.1.9.1.3.5|4x|546865204d4942206d6f64756c6520666f72206d616e6167696e672054435020696d706c656d656e746174696f6e73 +1.3.6.1.2.1.1.9.1.3.6|4x|546865204d4942206d6f64756c6520666f72206d616e6167696e6720495020616e642049434d5020696d706c656d656e746174696f6e73 +1.3.6.1.2.1.1.9.1.3.7|4x|546865204d4942206d6f64756c6520666f72206d616e6167696e672055445020696d706c656d656e746174696f6e73 +1.3.6.1.2.1.1.9.1.3.8|4x|566965772d62617365642041636365737320436f6e74726f6c204d6f64656c20666f7220534e4d502e +1.3.6.1.2.1.1.9.1.3.9|4x|546865204d4942206d6f64756c657320666f72206d616e6167696e6720534e4d50204e6f74696669636174696f6e2c20706c75732066696c746572696e672e +1.3.6.1.2.1.1.9.1.3.10|4x|546865204d4942206d6f64756c6520666f72206c6f6767696e6720534e4d50204e6f74696669636174696f6e732e +1.3.6.1.2.1.1.9.1.4.1|67|9 +1.3.6.1.2.1.1.9.1.4.2|67|9 +1.3.6.1.2.1.1.9.1.4.3|67|9 +1.3.6.1.2.1.1.9.1.4.4|67|9 +1.3.6.1.2.1.1.9.1.4.5|67|9 +1.3.6.1.2.1.1.9.1.4.6|67|9 +1.3.6.1.2.1.1.9.1.4.7|67|9 +1.3.6.1.2.1.1.9.1.4.8|67|9 +1.3.6.1.2.1.1.9.1.4.9|67|9 +1.3.6.1.2.1.1.9.1.4.10|67|9 +1.3.6.1.2.1.2.1.0|2|4 +1.3.6.1.2.1.2.2.1.1.1|2|1 +1.3.6.1.2.1.2.2.1.1.2|2|2 +1.3.6.1.2.1.2.2.1.1.3|2|3 +1.3.6.1.2.1.2.2.1.1.90|2|90 +1.3.6.1.2.1.2.2.1.2.1|4|lo +1.3.6.1.2.1.2.2.1.2.2|4|tunl0 +1.3.6.1.2.1.2.2.1.2.3|4|ip6tnl0 +1.3.6.1.2.1.2.2.1.2.90|4|eth0 +1.3.6.1.2.1.2.2.1.3.1|2|24 +1.3.6.1.2.1.2.2.1.3.2|2|131 +1.3.6.1.2.1.2.2.1.3.3|2|131 +1.3.6.1.2.1.2.2.1.3.90|2|6 +1.3.6.1.2.1.2.2.1.4.1|2|65536 +1.3.6.1.2.1.2.2.1.4.2|2|1480 +1.3.6.1.2.1.2.2.1.4.3|2|1452 +1.3.6.1.2.1.2.2.1.4.90|2|1500 +1.3.6.1.2.1.2.2.1.5.1|66|10000000 +1.3.6.1.2.1.2.2.1.5.2|66|0 +1.3.6.1.2.1.2.2.1.5.3|66|0 +1.3.6.1.2.1.2.2.1.5.90|66|4294967295 +1.3.6.1.2.1.2.2.1.6.1|4| +1.3.6.1.2.1.2.2.1.6.2|4| +1.3.6.1.2.1.2.2.1.6.3|4| +1.3.6.1.2.1.2.2.1.6.90|4x|0242ac110002 +1.3.6.1.2.1.2.2.1.7.1|2:delay|value=1,wait=10000 +1.3.6.1.2.1.2.2.1.7.2|2|2 +1.3.6.1.2.1.2.2.1.7.3|2|2 +1.3.6.1.2.1.2.2.1.7.90|2|1 +1.3.6.1.2.1.2.2.1.8.1|2|1 +1.3.6.1.2.1.2.2.1.8.2|2|2 +1.3.6.1.2.1.2.2.1.8.3|2|2 +1.3.6.1.2.1.2.2.1.8.90|2|1 +1.3.6.1.2.1.2.2.1.9.1|67|0 +1.3.6.1.2.1.2.2.1.9.2|67|0 +1.3.6.1.2.1.2.2.1.9.3|67|0 +1.3.6.1.2.1.2.2.1.9.90|67|0 +1.3.6.1.2.1.2.2.1.10.1|65|5300203 +1.3.6.1.2.1.2.2.1.10.2|65|0 +1.3.6.1.2.1.2.2.1.10.3|65|0 +1.3.6.1.2.1.2.2.1.10.90|65|2928 +1.3.6.1.2.1.2.2.1.11.1|65|63808 +1.3.6.1.2.1.2.2.1.11.2|65|0 +1.3.6.1.2.1.2.2.1.11.3|65|0 +1.3.6.1.2.1.2.2.1.11.90|65|40 +1.3.6.1.2.1.2.2.1.12.1|65|0 +1.3.6.1.2.1.2.2.1.12.2|65|0 +1.3.6.1.2.1.2.2.1.12.3|65|0 +1.3.6.1.2.1.2.2.1.12.90|65|0 +1.3.6.1.2.1.2.2.1.13.1|65|0 +1.3.6.1.2.1.2.2.1.13.2|65|0 +1.3.6.1.2.1.2.2.1.13.3|65|0 +1.3.6.1.2.1.2.2.1.13.90|65|0 +1.3.6.1.2.1.2.2.1.14.1|65|0 +1.3.6.1.2.1.2.2.1.14.2|65|0 +1.3.6.1.2.1.2.2.1.14.3|65|0 +1.3.6.1.2.1.2.2.1.14.90|65|0 +1.3.6.1.2.1.2.2.1.15.1|65|0 +1.3.6.1.2.1.2.2.1.15.2|65|0 +1.3.6.1.2.1.2.2.1.15.3|65|0 +1.3.6.1.2.1.2.2.1.15.90|65|0 +1.3.6.1.2.1.2.2.1.16.1|65|5300203 +1.3.6.1.2.1.2.2.1.16.2|65|0 +1.3.6.1.2.1.2.2.1.16.3|65|0 +1.3.6.1.2.1.2.2.1.16.90|65|0 +1.3.6.1.2.1.2.2.1.17.1|65|63808 +1.3.6.1.2.1.2.2.1.17.2|65|0 +1.3.6.1.2.1.2.2.1.17.3|65|0 +1.3.6.1.2.1.2.2.1.17.90|65|0 +1.3.6.1.2.1.2.2.1.18.1|65|0 +1.3.6.1.2.1.2.2.1.18.2|65|0 +1.3.6.1.2.1.2.2.1.18.3|65|0 +1.3.6.1.2.1.2.2.1.18.90|65|0 +1.3.6.1.2.1.2.2.1.19.1|65|0 +1.3.6.1.2.1.2.2.1.19.2|65|0 +1.3.6.1.2.1.2.2.1.19.3|65|0 +1.3.6.1.2.1.2.2.1.19.90|65|0 +1.3.6.1.2.1.2.2.1.20.1|65|0 +1.3.6.1.2.1.2.2.1.20.2|65|0 +1.3.6.1.2.1.2.2.1.20.3|65|0 +1.3.6.1.2.1.2.2.1.20.90|65|0 +1.3.6.1.2.1.2.2.1.21.1|66|0 +1.3.6.1.2.1.2.2.1.21.2|66|0 +1.3.6.1.2.1.2.2.1.21.3|66|0 +1.3.6.1.2.1.2.2.1.21.90|66|0 +1.3.6.1.2.1.2.2.1.22.1|6|0.0 +1.3.6.1.2.1.2.2.1.22.2|6|0.0 +1.3.6.1.2.1.2.2.1.22.3|6|0.0 +1.3.6.1.2.1.2.2.1.22.90|6|0.0 diff --git a/test/new-e2e/ndm/snmp/compose/snmpCompose.yaml b/test/new-e2e/ndm/snmp/compose/snmpCompose.yaml new file mode 100644 index 00000000000000..07aca8b4aaf1ab --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/snmpCompose.yaml @@ -0,0 +1,15 @@ +version: "3.9" +services: + snmp: + image: "datadog/docker-library:snmp" + ports: + - "1161:1161/udp" + command: --args-from-file=/usr/snmpsim/data/args_list.txt --variation-modules-dir=/usr/local/snmpsim/variation + volumes: + - ${DATA_DIR}:/usr/snmpsim/data/ + container_name: dd-snmp + agent: + volumes: + - ${CONFIG_DIR}/snmp.yaml:/etc/datadog-agent/conf.d/snmp.d/snmp.yaml + container_name: dd-agent + diff --git a/test/new-e2e/ndm/snmp/config/public.yaml b/test/new-e2e/ndm/snmp/config/public.yaml new file mode 100644 index 00000000000000..ddf947f636e04f --- /dev/null +++ b/test/new-e2e/ndm/snmp/config/public.yaml @@ -0,0 +1,7 @@ +init_config: + loader: core + use_device_id_as_hostname: true +instances: + - ip_address: dd-snmp + port: 1161 + community_string: "public" diff --git a/test/new-e2e/ndm/snmp/snmpTestEnv.go b/test/new-e2e/ndm/snmp/snmpTestEnv.go new file mode 100644 index 00000000000000..e546f7b3aecad3 --- /dev/null +++ b/test/new-e2e/ndm/snmp/snmpTestEnv.go @@ -0,0 +1,139 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package snmp + +import ( + "context" + "embed" + "errors" + "fmt" + "path" + + "github.com/DataDog/datadog-agent/test/new-e2e/utils/infra" + "github.com/DataDog/test-infra-definitions/aws/ec2/ec2" + "github.com/DataDog/test-infra-definitions/datadog/agent" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" + + "github.com/pulumi/pulumi/sdk/v3/go/auto" +) + +type TestEnv struct { + context context.Context + envName string + name string + + InstanceIP string + StackOutput auto.UpResult +} + +//go:embed compose/snmpCompose.yaml +var snmpCompose string + +//go:embed config/public.yaml +var snmpConfig string + +const ( + composeDataPath = "compose/data" +) + +func NewTestEnv(name, keyPairName, ddAPIKey, ddAPPKey string) (*TestEnv, error) { + snmpTestEnv := &TestEnv{ + context: context.Background(), + envName: "aws/sandbox", + name: fmt.Sprintf("snmp-agent-%s", name), + } + + stackManager := infra.GetStackManager() + + config := auto.ConfigMap{ + "ddagent:apiKey": auto.ConfigValue{Value: ddAPIKey, Secret: true}, + "ddinfra:aws/defaultKeyPairName": auto.ConfigValue{Value: keyPairName}, + } + + upResult, err := stackManager.GetStack(snmpTestEnv.context, snmpTestEnv.envName, snmpTestEnv.name, config, func(ctx *pulumi.Context) error { + // setup VM + vm, err := ec2.NewVM(ctx) + if err != nil { + return err + } + + // upload snmpsim data files + createDataDirCommand, dataPath, err := vm.FileManager.TempDirectory("data") + if err != nil { + return err + } + dataFiles, err := loadDataFileNames() + if err != nil { + return err + } + fileCommands := []pulumi.Resource{} + for _, fileName := range dataFiles { + fileContent, err := dataFolder.ReadFile(path.Join(composeDataPath, fileName)) + if err != nil { + return err + } + dontUseSudo := false + fileCommand, err := vm.FileManager.CopyInlineFile(fileName, pulumi.String(fileContent), path.Join(dataPath, fileName), dontUseSudo, + pulumi.DependsOn([]pulumi.Resource{createDataDirCommand})) + if err != nil { + return err + } + fileCommands = append(fileCommands, fileCommand) + } + + createConfigDirCommand, configPath, err := vm.FileManager.TempDirectory("config") + if err != nil { + return err + } + // edit snmp config file + dontUseSudo := false + configCommand, err := vm.FileManager.CopyInlineFile("snmp.yaml", pulumi.String(snmpConfig), path.Join(configPath, "snmp.yaml"), dontUseSudo, + pulumi.DependsOn([]pulumi.Resource{createConfigDirCommand})) + if err != nil { + return err + } + + // install agent and snmpsim on docker + envVars := pulumi.StringMap{"DATA_DIR": pulumi.String(dataPath), "CONFIG_DIR": pulumi.String(configPath)} + composeDependencies := []pulumi.Resource{createDataDirCommand, configCommand} + composeDependencies = append(composeDependencies, fileCommands...) + _, err = agent.NewDockerAgentInstallation(vm.CommonEnvironment, vm.DockerManager, snmpCompose, envVars, pulumi.DependsOn(composeDependencies)) + return err + }) + + if err != nil { + return nil, err + } + + snmpTestEnv.StackOutput = upResult + + output, found := upResult.Outputs["instance-ip"] + + if !found { + return nil, errors.New("unable to find host ip") + } + snmpTestEnv.InstanceIP = output.Value.(string) + + return snmpTestEnv, nil +} + +func (testEnv *TestEnv) Destroy() error { + return infra.GetStackManager().DeleteStack(testEnv.context, testEnv.envName, testEnv.name) +} + +//go:embed compose/data +var dataFolder embed.FS + +func loadDataFileNames() (out []string, err error) { + fileEntries, err := dataFolder.ReadDir(composeDataPath) + if err != nil { + return nil, err + } + for _, f := range fileEntries { + out = append(out, f.Name()) + } + return out, nil +} diff --git a/test/new-e2e/scenarios/ndm/main.go b/test/new-e2e/scenarios/ndm/main.go new file mode 100644 index 00000000000000..6a5d8e1a4c8cef --- /dev/null +++ b/test/new-e2e/scenarios/ndm/main.go @@ -0,0 +1,38 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package main + +import ( + "flag" + "fmt" + + "github.com/DataDog/datadog-agent/test/new-e2e/ndm/snmp" +) + +func main() { + envNamePtr := flag.String("name", "snmp", "environment name") + destroyPtr := flag.Bool("destroy", false, "[optional] should destroy the environment") + keyPairNamePtr := flag.String("keyPairName", "", "ssh key pair name. Should be uploaded on the cloud provider") + apiKeyPtr := flag.String("apiKey", "", "Datadog API key") + appKeyPtr := flag.String("appKey", "", "Datadog APP key") + + flag.Parse() + + snmpEnv, err := snmp.NewTestEnv(*envNamePtr, *keyPairNamePtr, *apiKeyPtr, *appKeyPtr) + if err != nil { + panic(err) + } + + if *destroyPtr { + err = snmpEnv.Destroy() + if err != nil { + panic(err) + } + return + } + + fmt.Println(snmpEnv.InstanceIP) +} diff --git a/test/new-e2e/utils/clients/aws.go b/test/new-e2e/utils/clients/aws.go new file mode 100644 index 00000000000000..c234c69695ceb9 --- /dev/null +++ b/test/new-e2e/utils/clients/aws.go @@ -0,0 +1,61 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package clients + +import ( + "context" + "sync" + "time" + + "github.com/aws/aws-sdk-go-v2/aws" + awsconfig "github.com/aws/aws-sdk-go-v2/config" + "github.com/aws/aws-sdk-go-v2/service/ssm" +) + +const ( + awsTimeout = 5 * time.Second +) + +var ( + initLock = sync.Mutex{} + awsConfig *aws.Config + awsSSMClient *ssm.Client +) + +// GetAWSSSMClient returns an aws SSM client +func GetAWSSSMClient() (*ssm.Client, error) { + initLock.Lock() + defer initLock.Unlock() + + if awsSSMClient != nil { + return awsSSMClient, nil + } + + cfg, err := getAWSConfig() + if err != nil { + return nil, err + } + + awsSSMClient = ssm.NewFromConfig(*cfg) + return awsSSMClient, nil +} + +func getAWSConfig() (*aws.Config, error) { + if awsConfig != nil { + return awsConfig, nil + } + + ctx, cancel := context.WithTimeout(context.Background(), awsTimeout) + defer cancel() + + cfg, err := awsconfig.LoadDefaultConfig(ctx) + if err != nil { + return nil, err + } + + awsConfig = &cfg + return awsConfig, nil +} diff --git a/test/new-e2e/utils/clients/ssh.go b/test/new-e2e/utils/clients/ssh.go new file mode 100644 index 00000000000000..657b6bb10984ab --- /dev/null +++ b/test/new-e2e/utils/clients/ssh.go @@ -0,0 +1,60 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package clients + +import ( + "time" + + "github.com/cenkalti/backoff" + "golang.org/x/crypto/ssh" +) + +// GetSSHClient returns an ssh Client for the specified host +func GetSSHClient(user, host, privateKey string, retryInterval time.Duration, maxRetries uint64) (client *ssh.Client, session *ssh.Session, err error) { + err = backoff.Retry(func() error { + client, session, err = getSSHClient(user, host, privateKey) + return err + }, backoff.WithMaxRetries(backoff.NewConstantBackOff(retryInterval), maxRetries)) + + return +} + +func getSSHClient(user, host, privateKey string) (*ssh.Client, *ssh.Session, error) { + privateKeyAuth, err := ssh.ParsePrivateKey([]byte(privateKey)) + if err != nil { + return nil, nil, err + } + + sshConfig := &ssh.ClientConfig{ + User: user, + Auth: []ssh.AuthMethod{ssh.PublicKeys(privateKeyAuth)}, + HostKeyCallback: ssh.InsecureIgnoreHostKey(), + } + + client, err := ssh.Dial("tcp", host, sshConfig) + if err != nil { + return nil, nil, err + } + + session, err := client.NewSession() + if err != nil { + client.Close() + return nil, nil, err + } + + return client, session, nil +} + +func ExecuteCommand(client *ssh.Client, command string) (string, error) { + session, err := client.NewSession() + if err != nil { + return "", err + } + + stdout, err := session.CombinedOutput(command) + + return string(stdout), err +} diff --git a/test/new-e2e/utils/credentials/manager.go b/test/new-e2e/utils/credentials/manager.go new file mode 100644 index 00000000000000..3bc2e9d8cfd9fd --- /dev/null +++ b/test/new-e2e/utils/credentials/manager.go @@ -0,0 +1,37 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package credentials + +// StoreID is the id to store the aws credential information +type StoreID string + +const ( + // AWSSSMStore is the aws store id shared tests + AWSSSMStore StoreID = "aws-ssm" +) + +// Manager is used for interacting with the aws systems manager for credentials +type Manager interface { + GetCredential(StoreID, string) (string, error) +} + +type manager struct { + credStores map[StoreID]store +} + +// NewManager creates a Manager +func NewManager() Manager { + return &manager{ + credStores: map[StoreID]store{ + AWSSSMStore: newCachingStore(&awsStore{}), + }, + } +} + +// GetCredential returns a credential for a given storeId and key +func (m *manager) GetCredential(storeID StoreID, key string) (string, error) { + return m.credStores[storeID].get(key) +} diff --git a/test/new-e2e/utils/credentials/store-aws.go b/test/new-e2e/utils/credentials/store-aws.go new file mode 100644 index 00000000000000..221d4a864e113f --- /dev/null +++ b/test/new-e2e/utils/credentials/store-aws.go @@ -0,0 +1,31 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package credentials + +import ( + "context" + "fmt" + + "github.com/DataDog/datadog-agent/test/new-e2e/utils/clients" + "github.com/aws/aws-sdk-go-v2/service/ssm" +) + +type awsStore struct{} + +func (s *awsStore) get(key string) (string, error) { + ssmClient, err := clients.GetAWSSSMClient() + if err != nil { + return "", err + } + + withDecription := true + output, err := ssmClient.GetParameter(context.Background(), &ssm.GetParameterInput{Name: &key, WithDecryption: &withDecription}) + if err != nil { + return "", fmt.Errorf("failed to get SSM parameter '%s', err: %w", key, err) + } + + return *output.Parameter.Value, nil +} diff --git a/test/new-e2e/utils/credentials/store.go b/test/new-e2e/utils/credentials/store.go new file mode 100644 index 00000000000000..06107e1fb29225 --- /dev/null +++ b/test/new-e2e/utils/credentials/store.go @@ -0,0 +1,44 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package credentials + +import "sync" + +type store interface { + get(key string) (string, error) +} + +type cachingStore struct { + l sync.Mutex + cache map[string]string + s store +} + +func newCachingStore(s store) store { + return &cachingStore{ + cache: make(map[string]string), + s: s, + } +} + +func (s *cachingStore) get(key string) (string, error) { + s.l.Lock() + defer s.l.Unlock() + + value, found := s.cache[key] + if found { + return value, nil + } + + var err error + value, err = s.s.get(key) + if err != nil { + return "", err + } + + s.cache[key] = value + return value, nil +} diff --git a/test/new-e2e/utils/infra/stack_manager.go b/test/new-e2e/utils/infra/stack_manager.go new file mode 100644 index 00000000000000..609583ced37a19 --- /dev/null +++ b/test/new-e2e/utils/infra/stack_manager.go @@ -0,0 +1,162 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package infra + +import ( + "context" + "fmt" + "os" + "os/user" + "strings" + "sync" + "time" + + "github.com/pulumi/pulumi/sdk/v3/go/auto" + "github.com/pulumi/pulumi/sdk/v3/go/auto/optdestroy" + "github.com/pulumi/pulumi/sdk/v3/go/auto/optup" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +const ( + projectName = "ddagent-e2e" + stackPrefix = "ddagent-e2e" + environmentParamName = "ddinfra:env" + + stackUpTimeout = 20 * time.Minute + stackDestroyTimeout = 60 * time.Minute + stackDeleteTimeout = 20 * time.Minute +) + +var ( + stackManager *StackManager + initStackManager sync.Once +) + +// StackManager handles +type StackManager struct { + stacks map[string]*auto.Stack + lock sync.RWMutex +} + +func GetStackManager() *StackManager { + initStackManager.Do(func() { + var err error + + stackManager, err = newStackManager(context.Background()) + if err != nil { + panic(fmt.Sprintf("Got an error during StackManager singleton init, err: %v", err)) + } + }) + + return stackManager +} + +func newStackManager(ctx context.Context) (*StackManager, error) { + return &StackManager{ + stacks: make(map[string]*auto.Stack), + }, nil +} + +// GetStack creates or return a stack based on env+stack name +func (sm *StackManager) GetStack(ctx context.Context, envName string, name string, config auto.ConfigMap, deployFunc pulumi.RunFunc) (auto.UpResult, error) { + sm.lock.RLock() + defer sm.lock.RUnlock() + + // Set environment + if config == nil { + config = auto.ConfigMap{} + } + config[environmentParamName] = auto.ConfigValue{Value: envName} + + finalStackName := stackName(name) + stackID := stackID(envName, name) + stack := sm.stacks[stackID] + if stack == nil { + newStack, err := auto.UpsertStackInlineSource(ctx, finalStackName, projectName, deployFunc) + if err != nil { + return auto.UpResult{}, err + } + stack = &newStack + sm.stacks[stackID] = stack + } + + err := stack.SetAllConfig(ctx, config) + if err != nil { + return auto.UpResult{}, err + } + + upCtx, cancel := context.WithTimeout(ctx, stackUpTimeout) + defer cancel() + return stack.Up(upCtx, optup.ProgressStreams(os.Stdout)) +} + +func (sm *StackManager) DeleteStack(ctx context.Context, envName string, name string) error { + sm.lock.Lock() + defer sm.lock.Unlock() + + stackID := stackID(envName, name) + return sm.deleteStack(ctx, stackID, sm.stacks[stackID]) +} + +func (sm *StackManager) Cleanup(ctx context.Context) []error { + sm.lock.Lock() + defer sm.lock.Unlock() + + var errors []error + + for stackID, stack := range sm.stacks { + err := sm.deleteStack(ctx, stackID, stack) + if err != nil { + errors = append(errors, err) + } + } + + return errors +} + +func (sm *StackManager) deleteStack(ctx context.Context, stackID string, stack *auto.Stack) error { + if stack == nil { + return fmt.Errorf("unable to find stack, skipping deletion of: %s", stackID) + } + + _, err := stack.Refresh(ctx) + if err != nil { + return err + } + + destroyContext, cancel := context.WithTimeout(ctx, stackDestroyTimeout) + _, err = stack.Destroy(destroyContext, optdestroy.ProgressStreams(os.Stdout)) + cancel() + if err != nil { + return err + } + + deleteContext, cancel := context.WithTimeout(ctx, stackDeleteTimeout) + defer cancel() + err = stack.Workspace().RemoveStack(deleteContext, stack.Name()) + return err +} + +func stackName(stackName string) string { + var username string + user, err := user.Current() + if err == nil { + username = user.Username + } + + if username == "" || username == "root" { + username = "nouser" + } + username = strings.ToLower(username) + username = strings.ReplaceAll(username, ".", "-") + username = strings.ReplaceAll(username, " ", "-") + + return stackPrefix + "-" + username + "-" + stackName +} + +func stackID(envName string, stackName string) string { + return envName + "/" + stackName +} diff --git a/test/regression/README.md b/test/regression/README.md new file mode 100644 index 00000000000000..eaca3c74640a5d --- /dev/null +++ b/test/regression/README.md @@ -0,0 +1,30 @@ +# Regression Detection + +The Regression Detector, owned by Single Machine Performance, is a tool that +detects if there are more-than-random performance changes to a target program -- +here, the Agent -- across a variety of experiments and goals. This directory +contains the experiments for Agent. A similar one exists in [Vector]. Please do +add your own experiments, instructions below. If you have any questions do +contact #single-machine-performance; we'll be glad to help. + +## Adding an Experiment + +In order for SMP's tooling to properly read a experiment directory please +adhere to the following structure. Starting at the root: + +* `cases/` -- __Required__ The directory that contains each regression + experiment. Each sub-directory is a separate experiment and the name of the + directory is the name of the experiment, for instance + `tcp_syslog_to_blackhole`. We call these sub-directories 'cases'. + +The structure of each case is as follows: + +* `lading/lading.yaml` -- __Required__ The [lading] configuration inside its own + directory. Directory will be mount read-only in the container built from + `Dockerfile` above at `/etc/lading`. +* `datadog-agent/` -- __Required__ This is the configuration directory of your + program. Will be mounted read-only in the container build from `Dockerfile` + above at `/etc/datadog-agent`. + +[Vector]: https://github.com/vectordotdev/vector/tree/master/regression +[lading]: https://github.com/DataDog/lading diff --git a/test/regression/cases/file_to_blackhole/datadog-agent/conf.d/disk-listener.d/conf.yaml b/test/regression/cases/file_to_blackhole/datadog-agent/conf.d/disk-listener.d/conf.yaml new file mode 100644 index 00000000000000..54d14b3222f4dc --- /dev/null +++ b/test/regression/cases/file_to_blackhole/datadog-agent/conf.d/disk-listener.d/conf.yaml @@ -0,0 +1,5 @@ +logs: + - type: file + path: "/tmp/file-gen*.log" + service: "my-service" + source: "my-client-app" diff --git a/test/regression/cases/file_to_blackhole/datadog-agent/datadog.yaml b/test/regression/cases/file_to_blackhole/datadog-agent/datadog.yaml new file mode 100644 index 00000000000000..218315d3996a16 --- /dev/null +++ b/test/regression/cases/file_to_blackhole/datadog-agent/datadog.yaml @@ -0,0 +1,12 @@ +auth_token_file_path: /tmp/agent-auth-token + +confd_path: /etc/datadog-agent/conf.d + +# Disable cloud detection. This stops the Agent from poking around the +# execution environment & network. This is particularly important if the target +# has network access. +cloud_provider_metadata: [] + +logs_enabled: true +logs_config: + logs_dd_url: 127.0.0.1:9091 diff --git a/test/regression/cases/file_to_blackhole/lading/lading.yaml b/test/regression/cases/file_to_blackhole/lading/lading.yaml new file mode 100644 index 00000000000000..f2b701e3dc23ce --- /dev/null +++ b/test/regression/cases/file_to_blackhole/lading/lading.yaml @@ -0,0 +1,16 @@ +generator: + - file_gen: + seed: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, + 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131] + path_template: "/tmp/file-gen-%NNN%.log" + duplicates: 4 + variant: "ascii" + bytes_per_second: "100Mb" + maximum_bytes_per_file: "100Mb" + maximum_prebuild_cache_size_bytes: "400Mb" + +blackhole: + - http: + binding_addr: "127.0.0.1:9091" + - http: + binding_addr: "127.0.0.1:9092" diff --git a/test/regression/cases/otel_to_otel_logs/datadog-agent/datadog.yaml b/test/regression/cases/otel_to_otel_logs/datadog-agent/datadog.yaml new file mode 100644 index 00000000000000..e28a1efc888e65 --- /dev/null +++ b/test/regression/cases/otel_to_otel_logs/datadog-agent/datadog.yaml @@ -0,0 +1,31 @@ +auth_token_file_path: /tmp/agent-auth-token + +confd_path: /etc/datadog-agent/conf.d + +# Disable cloud detection. This stops the Agent from poking around the +# execution environment & network. This is particularly important if the target +# has network access. +cloud_provider_metadata: [] + +apm_config: + enabled: true + apm_dd_url: http://127.0.0.1:9091 + + # disable ingest sampling + max_traces_per_second: 0 + errors_per_second: 0 + max_events_per_second: 0 + +otlp_config: + receiver: + protocols: + http: + endpoint: 127.0.0.1:4318 + grpc: + endpoint: 127.0.0.1:4317 + metrics: + enabled: true + traces: + enabled: true + debug: + loglevel: info diff --git a/test/regression/cases/otel_to_otel_logs/lading/lading.yaml b/test/regression/cases/otel_to_otel_logs/lading/lading.yaml new file mode 100644 index 00000000000000..5611322f9a3397 --- /dev/null +++ b/test/regression/cases/otel_to_otel_logs/lading/lading.yaml @@ -0,0 +1,23 @@ +generator: + - http: + seed: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, + 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131] + headers: + content-type: "application/x-protobuf" + target_uri: "http://127.0.0.1:4318/v1/traces" + bytes_per_second: "10 Mb" + parallel_connections: 5 + method: + post: + maximum_prebuild_cache_size_bytes: "8 Mb" + variant: "opentelemetry_traces" + +blackhole: + # AMP ingest listener + - http: + binding_addr: "127.0.0.1:9091" + body_variant: "nothing" + # Agent control API + - http: + binding_addr: "127.0.0.1:9092" + body_variant: "nothing" diff --git a/test/regression/cases/tcp_dd_logs_filter_exclude/datadog-agent/conf.d/tcp-listener.d/conf.yaml b/test/regression/cases/tcp_dd_logs_filter_exclude/datadog-agent/conf.d/tcp-listener.d/conf.yaml new file mode 100644 index 00000000000000..140d9ca8dc320f --- /dev/null +++ b/test/regression/cases/tcp_dd_logs_filter_exclude/datadog-agent/conf.d/tcp-listener.d/conf.yaml @@ -0,0 +1,9 @@ +logs: + - type: tcp + port: 10000 + service: "my-service" + source: "my-client-app" + log_processing_rules: + - type: exclude_at_match + name: not_tarkovsky + pattern: (T|t)arkovsky diff --git a/test/regression/cases/tcp_dd_logs_filter_exclude/datadog-agent/datadog.yaml b/test/regression/cases/tcp_dd_logs_filter_exclude/datadog-agent/datadog.yaml new file mode 100644 index 00000000000000..2b88f1afe37bd4 --- /dev/null +++ b/test/regression/cases/tcp_dd_logs_filter_exclude/datadog-agent/datadog.yaml @@ -0,0 +1,14 @@ +auth_token_file_path: /tmp/agent-auth-token + +confd_path: /etc/datadog-agent/conf.d + +# Disable cloud detection. This stops the Agent from poking around the +# execution environment & network. This is particularly important if the target +# has network access. +cloud_provider_metadata: [] + +logs_enabled: true +logs_config: + logs_dd_url: 127.0.0.1:9091 + logs_no_ssl: true + force_use_tcp: true diff --git a/test/regression/cases/tcp_dd_logs_filter_exclude/lading/lading.yaml b/test/regression/cases/tcp_dd_logs_filter_exclude/lading/lading.yaml new file mode 100644 index 00000000000000..978b387be3f4cc --- /dev/null +++ b/test/regression/cases/tcp_dd_logs_filter_exclude/lading/lading.yaml @@ -0,0 +1,15 @@ +generator: + - tcp: + seed: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, + 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131] + addr: "127.0.0.1:10000" + variant: "datadog_log" + bytes_per_second: "500 Mb" + block_sizes: ["8Kb", "4Kb", "2Kb", "1Kb", "512b", "256b", "128b"] + maximum_prebuild_cache_size_bytes: "256 Mb" + +blackhole: + - tcp: + binding_addr: "127.0.0.1:9091" + - http: + binding_addr: "127.0.0.1:9092" diff --git a/test/regression/cases/tcp_syslog_to_blackhole/datadog-agent/conf.d/tcp-listener.d/conf.yaml b/test/regression/cases/tcp_syslog_to_blackhole/datadog-agent/conf.d/tcp-listener.d/conf.yaml new file mode 100644 index 00000000000000..701b87c246566a --- /dev/null +++ b/test/regression/cases/tcp_syslog_to_blackhole/datadog-agent/conf.d/tcp-listener.d/conf.yaml @@ -0,0 +1,5 @@ +logs: + - type: tcp + port: 10000 + service: "my-service" + source: "my-client-app" diff --git a/test/regression/cases/tcp_syslog_to_blackhole/datadog-agent/datadog.yaml b/test/regression/cases/tcp_syslog_to_blackhole/datadog-agent/datadog.yaml new file mode 100644 index 00000000000000..2b88f1afe37bd4 --- /dev/null +++ b/test/regression/cases/tcp_syslog_to_blackhole/datadog-agent/datadog.yaml @@ -0,0 +1,14 @@ +auth_token_file_path: /tmp/agent-auth-token + +confd_path: /etc/datadog-agent/conf.d + +# Disable cloud detection. This stops the Agent from poking around the +# execution environment & network. This is particularly important if the target +# has network access. +cloud_provider_metadata: [] + +logs_enabled: true +logs_config: + logs_dd_url: 127.0.0.1:9091 + logs_no_ssl: true + force_use_tcp: true diff --git a/test/regression/cases/tcp_syslog_to_blackhole/lading/lading.yaml b/test/regression/cases/tcp_syslog_to_blackhole/lading/lading.yaml new file mode 100644 index 00000000000000..eca9d47ba53e19 --- /dev/null +++ b/test/regression/cases/tcp_syslog_to_blackhole/lading/lading.yaml @@ -0,0 +1,15 @@ +generator: + - tcp: + seed: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, + 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131] + addr: "127.0.0.1:10000" + variant: "syslog5424" + bytes_per_second: "500 Mb" + block_sizes: ["1Mb", "0.5Mb", "0.25Mb", "0.125Mb", "128Kb"] + maximum_prebuild_cache_size_bytes: "256 Mb" + +blackhole: + - tcp: + binding_addr: "127.0.0.1:9091" + - http: + binding_addr: "127.0.0.1:9092" diff --git a/tools/agent_QA/test_cases/containers.py b/tools/agent_QA/test_cases/containers.py index c1417ce1229940..91c5acf614c09e 100644 --- a/tools/agent_QA/test_cases/containers.py +++ b/tools/agent_QA/test_cases/containers.py @@ -366,8 +366,6 @@ def build(self, config): # noqa: U100 * `agents.containers.agent.env`: ``` - - name: "DD_LOGS_CONFIG_CCA_IN_AD" - value: "true" - name: "DD_LOGS_CONFIG_DOCKER_CONTAINER_USE_FILE" value: "{'true' if self.dcuf else 'false'}" ``` @@ -408,7 +406,6 @@ def build(self, config): # noqa: U100 -e DOCKER_DD_AGENT= \\ -e DD_API_KEY=$DD_API_KEY \\ -e DD_LOGS_ENABLED=true \\ - -e DD_LOGS_CONFIG_CCA_IN_AD=true \\ -e LOGS_CONFIG_CONTAINER_COLLECT_ALL={'true' if self.cca else 'false'} \\ -e LOGS_CONFIG_DOCKER_CONTAINER_USE_FILE={'true' if self.dcuf else 'false'} \\ -e LOGS_CONFIG_K8S_CONTAINER_USE_FILE={'true' if self.dcuf else 'false'} \\ @@ -498,17 +495,6 @@ def build(self, config): # noqa: U100 self.special_case_empty_annotation() self.special_case_no_docker_file_access() - self.append( - textwrap.dedent( - '''\ - # Unexpected Results - - If things aren't working as expected, compare to a run with - `cca_in_ad` false. If the behavior is *better* with `cca_in_ad` set - to false, then the check has failed.''' - ) - ) - def special_case_type_docker(self): if self.cfgsource == 'annotation': self.append( @@ -517,9 +503,7 @@ def special_case_type_docker(self): # With `type:docker` in Annotation As an additional check, delete the test pod and create a new - one with `"type": "docker"` added to the annotation. The - result should be no worse than with `cca_in_ad: false`. - + one with `"type": "docker"` added to the annotation. ''' ) )